mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
* 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
55 lines
1.9 KiB
TypeScript
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';
|
|
}
|
|
}
|