Files
cloudbeaver/webapp/packages/plugin-sql-generator/src/SqlGenerators/SqlGeneratorsResource.ts
T
Alexey 4550a71298 Refactor CB-3819 resources (#2031)
* CB-3819 refactor: split resources to modules

* CB-3819 refactor: move resource API to separate package

* CB-3819 refactor: move resource API to separate package

* CB-3819 refactor: split to submodules

* CB-3819 chore: update ts configuration

* CB-3819 refactor: move administration top bar to separate plugin

* CB-3819 feat: update tests

* CB-3819 chore: add pre scripts

* CB-3819 fix: prebuild tests-runner

* chore: restore cache for jest-tests github action

* chore: update configs

* chore: add frontend build action

* chore: rename build frontend github action

* chore: include test dependencies

* fix: default product build script

* chore: update github action

* chore: rename validation github action

* chore: update typescript cache key

* chore: update naming for github actions

* chore: run tests on ubuntu

* CB-3819 fix: pre build tasks

* CB-3819 fix: ignore order

* CB-3819 fix: remove prettier from gql sdk
2023-10-05 23:36:54 +03:00

55 lines
1.9 KiB
TypeScript

/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2023 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { injectable } from '@cloudbeaver/core-di';
import { NavNodeInfoResource } from '@cloudbeaver/core-navigation-tree';
import { CachedMapResource, isResourceAlias, type ResourceKey, resourceKeyList, ResourceKeyUtils } from '@cloudbeaver/core-resource';
import { GraphQLService, SqlQueryGenerator } from '@cloudbeaver/core-sdk';
export const MAX_GENERATORS_LENGTH = 15;
@injectable()
export class SqlGeneratorsResource extends CachedMapResource<string, SqlQueryGenerator[]> {
constructor(private readonly graphQLService: GraphQLService, private readonly navNodeInfoResource: NavNodeInfoResource) {
super();
this.navNodeInfoResource.outdateResource(this);
this.navNodeInfoResource.deleteInResource(this);
}
async generateEntityQuery(generatorId: string, nodePathList: string | string[]): Promise<string> {
const result = await this.graphQLService.sdk.sqlGenerateEntityQuery({
generatorId,
nodePathList,
options: {},
});
return result.sqlGenerateEntityQuery;
}
protected async loader(key: ResourceKey<string>): Promise<Map<string, SqlQueryGenerator[]>> {
if (isResourceAlias(key)) {
throw new Error('Aliases not supported by this resource.');
}
const values = new Map();
await ResourceKeyUtils.forEachAsync(key, async key => {
const { generators } = await this.graphQLService.sdk.sqlEntityQueryGenerators({
nodePathList: key,
});
values.set(key, generators);
});
this.set(resourceKeyList(Array.from(values.keys())), Array.from(values.values()));
return this.data;
}
protected validateKey(key: string): boolean {
return typeof key === 'string';
}
}