@mxpicture/gcp-functions-generator 1.1.91 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/4testing/templates/template.example.d.ts +4 -3
- package/dist/4testing/templates/template.example.d.ts.map +1 -1
- package/dist/4testing/templates/template.example.js.map +1 -1
- package/dist/4testing/templates/template.medication.d.ts +2 -1
- package/dist/4testing/templates/template.medication.d.ts.map +1 -1
- package/dist/4testing/templates/template.medication.js.map +1 -1
- package/dist/4testing/templates/template.settings.d.ts +2 -1
- package/dist/4testing/templates/template.settings.d.ts.map +1 -1
- package/dist/4testing/templates/template.settings.js.map +1 -1
- package/dist/4testing/utils.d.ts +1 -1
- package/dist/4testing/utils.d.ts.map +1 -1
- package/dist/4testing/utils.js +24 -2
- package/dist/4testing/utils.js.map +1 -1
- package/dist/common/file.common.d.ts +11 -2
- package/dist/common/file.common.d.ts.map +1 -1
- package/dist/common/file.common.js +44 -8
- package/dist/common/file.common.js.map +1 -1
- package/dist/common/index.d.ts +1 -6
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -6
- package/dist/common/index.js.map +1 -1
- package/dist/common/job.common.d.ts +1 -1
- package/dist/common/job.common.d.ts.map +1 -1
- package/dist/common/resolve.common.d.ts +17 -0
- package/dist/common/resolve.common.d.ts.map +1 -0
- package/dist/common/resolve.common.js +46 -0
- package/dist/common/resolve.common.js.map +1 -0
- package/dist/common/types.common.d.ts +42 -2
- package/dist/common/types.common.d.ts.map +1 -1
- package/dist/decorator/DecoExtractor.d.ts +22 -0
- package/dist/decorator/DecoExtractor.d.ts.map +1 -0
- package/dist/{common/Extractor.js → decorator/DecoExtractor.js} +2 -23
- package/dist/decorator/DecoExtractor.js.map +1 -0
- package/dist/decorator/deco.names.d.ts +4 -45
- package/dist/decorator/deco.names.d.ts.map +1 -1
- package/dist/decorator/deco.names.js +35 -61
- package/dist/decorator/deco.names.js.map +1 -1
- package/dist/decorator/index.d.ts +1 -1
- package/dist/decorator/index.d.ts.map +1 -1
- package/dist/decorator/index.js +1 -1
- package/dist/decorator/index.js.map +1 -1
- package/dist/exports.gen.json +1357 -0
- package/dist/generator/Generator.d.ts +20 -106
- package/dist/generator/Generator.d.ts.map +1 -1
- package/dist/generator/Generator.js +87 -172
- package/dist/generator/Generator.js.map +1 -1
- package/dist/generator/GeneratorAnnotations.d.ts +3 -4
- package/dist/generator/GeneratorAnnotations.d.ts.map +1 -1
- package/dist/generator/GeneratorAnnotations.js +20 -46
- package/dist/generator/GeneratorAnnotations.js.map +1 -1
- package/dist/generator/GeneratorBackend.d.ts +11 -30
- package/dist/generator/GeneratorBackend.d.ts.map +1 -1
- package/dist/generator/GeneratorBackend.js +73 -182
- package/dist/generator/GeneratorBackend.js.map +1 -1
- package/dist/generator/GeneratorDoc.d.ts +8 -9
- package/dist/generator/GeneratorDoc.d.ts.map +1 -1
- package/dist/generator/GeneratorDoc.js +34 -35
- package/dist/generator/GeneratorDoc.js.map +1 -1
- package/dist/generator/GeneratorEnum.d.ts +6 -7
- package/dist/generator/GeneratorEnum.d.ts.map +1 -1
- package/dist/generator/GeneratorEnum.js +26 -15
- package/dist/generator/GeneratorEnum.js.map +1 -1
- package/dist/generator/GeneratorFrontend.d.ts +5 -6
- package/dist/generator/GeneratorFrontend.d.ts.map +1 -1
- package/dist/generator/GeneratorFrontend.js +28 -48
- package/dist/generator/GeneratorFrontend.js.map +1 -1
- package/dist/generator/GeneratorRoutes.d.ts +6 -7
- package/dist/generator/GeneratorRoutes.d.ts.map +1 -1
- package/dist/generator/GeneratorRoutes.js +26 -31
- package/dist/generator/GeneratorRoutes.js.map +1 -1
- package/dist/generator/GeneratorZod.d.ts +9 -10
- package/dist/generator/GeneratorZod.d.ts.map +1 -1
- package/dist/generator/GeneratorZod.js +29 -25
- package/dist/generator/GeneratorZod.js.map +1 -1
- package/dist/run/GeneratorBarrel.d.ts +11 -0
- package/dist/run/GeneratorBarrel.d.ts.map +1 -0
- package/dist/run/GeneratorBarrel.js +22 -0
- package/dist/run/GeneratorBarrel.js.map +1 -0
- package/dist/run/GeneratorBase.d.ts +6 -0
- package/dist/run/GeneratorBase.d.ts.map +1 -0
- package/dist/run/GeneratorBase.js +4 -0
- package/dist/run/GeneratorBase.js.map +1 -0
- package/dist/run/GeneratorBaseFile.d.ts +16 -0
- package/dist/run/GeneratorBaseFile.d.ts.map +1 -0
- package/dist/run/GeneratorBaseFile.js +36 -0
- package/dist/run/GeneratorBaseFile.js.map +1 -0
- package/dist/run/GeneratorDirectory.d.ts +18 -0
- package/dist/run/GeneratorDirectory.d.ts.map +1 -0
- package/dist/run/GeneratorDirectory.js +42 -0
- package/dist/run/GeneratorDirectory.js.map +1 -0
- package/dist/run/GeneratorFile.d.ts +12 -0
- package/dist/run/GeneratorFile.d.ts.map +1 -0
- package/dist/run/GeneratorFile.js +31 -0
- package/dist/run/GeneratorFile.js.map +1 -0
- package/dist/run/GeneratorFs.d.ts +27 -0
- package/dist/run/GeneratorFs.d.ts.map +1 -0
- package/dist/run/GeneratorFs.js +81 -0
- package/dist/run/GeneratorFs.js.map +1 -0
- package/dist/run/GeneratorPackage.d.ts +21 -0
- package/dist/run/GeneratorPackage.d.ts.map +1 -0
- package/dist/run/GeneratorPackage.js +57 -0
- package/dist/run/GeneratorPackage.js.map +1 -0
- package/dist/run/GeneratorRun.d.ts +27 -0
- package/dist/run/GeneratorRun.d.ts.map +1 -0
- package/dist/run/GeneratorRun.js +60 -0
- package/dist/run/GeneratorRun.js.map +1 -0
- package/dist/run/GeneratorTemplate.d.ts +10 -0
- package/dist/run/GeneratorTemplate.d.ts.map +1 -0
- package/dist/run/GeneratorTemplate.js +27 -0
- package/dist/run/GeneratorTemplate.js.map +1 -0
- package/dist/run/index.d.ts +10 -0
- package/dist/run/index.d.ts.map +1 -0
- package/dist/run/index.js +11 -0
- package/dist/run/index.js.map +1 -0
- package/package.json +7 -6
- package/dist/common/Barrel.d.ts +0 -75
- package/dist/common/Barrel.d.ts.map +0 -1
- package/dist/common/Barrel.js +0 -119
- package/dist/common/Barrel.js.map +0 -1
- package/dist/common/CodeCollector.d.ts +0 -11
- package/dist/common/CodeCollector.d.ts.map +0 -1
- package/dist/common/CodeCollector.js +0 -29
- package/dist/common/CodeCollector.js.map +0 -1
- package/dist/common/Collector.d.ts +0 -70
- package/dist/common/Collector.d.ts.map +0 -1
- package/dist/common/Collector.js +0 -77
- package/dist/common/Collector.js.map +0 -1
- package/dist/common/Directories.d.ts +0 -60
- package/dist/common/Directories.d.ts.map +0 -1
- package/dist/common/Directories.js +0 -76
- package/dist/common/Directories.js.map +0 -1
- package/dist/common/Extractor.d.ts +0 -36
- package/dist/common/Extractor.d.ts.map +0 -1
- package/dist/common/Extractor.js.map +0 -1
- package/dist/common/generator.common.d.ts +0 -80
- package/dist/common/generator.common.d.ts.map +0 -1
- package/dist/common/generator.common.js +0 -138
- package/dist/common/generator.common.js.map +0 -1
- package/dist/decorator/deco.imports.d.ts +0 -31
- package/dist/decorator/deco.imports.d.ts.map +0 -1
- package/dist/decorator/deco.imports.js +0 -71
- package/dist/decorator/deco.imports.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorAnnotations.js","sourceRoot":"","sources":["../../src/generator/GeneratorAnnotations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"GeneratorAnnotations.js","sourceRoot":"","sources":["../../src/generator/GeneratorAnnotations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { DecoNames, DecoratorData } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
|
-
import { Generator
|
|
3
|
-
import { GeneratorEnv } from "../common/types.common.js";
|
|
4
|
-
import { AnnotationsProperty,
|
|
5
|
-
import { CodeCollector } from "../common/CodeCollector.js";
|
|
1
|
+
import type { DecoNames, DecoratorData } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
|
+
import { Generator } from "./Generator.js";
|
|
3
|
+
import type { GeneratorEnv, GeneratorRunItem, GeneratorRunResult } from "../common/types.common.js";
|
|
4
|
+
import type { AnnotationsProperty, DecoPropertyBase } from "@mxpicture/gcp-functions-common/types";
|
|
6
5
|
/**
|
|
7
6
|
* Generator that produces backend-specific code including API classes, stores, functions, and factory helpers.
|
|
8
7
|
*
|
|
@@ -12,31 +11,13 @@ import { CodeCollector } from "../common/CodeCollector.js";
|
|
|
12
11
|
*/
|
|
13
12
|
export declare class GeneratorBackend extends Generator {
|
|
14
13
|
constructor();
|
|
15
|
-
protected runHeader(
|
|
16
|
-
protected buildConstants(virtualKeysName: string, virtuals: AnnotationsProperty<DecoPropertyBase>[], datePathsName: string, datePaths: string[], sideEffectsName: string, sideEffects: AnnotationsProperty<DecoPropertyBase>[]):
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
protected
|
|
21
|
-
|
|
22
|
-
imports: DecoImport[];
|
|
23
|
-
};
|
|
24
|
-
protected buildFunction(names: DecoNames): {
|
|
25
|
-
code: string[];
|
|
26
|
-
imports: DecoImport[];
|
|
27
|
-
};
|
|
28
|
-
protected buildStore(names: DecoNames, namespace: string): {
|
|
29
|
-
code: string[];
|
|
30
|
-
imports: DecoImport[];
|
|
31
|
-
};
|
|
32
|
-
protected buildCreateCallable(names: DecoNames, region: string, serviceAccount: string): {
|
|
33
|
-
code: string[];
|
|
34
|
-
imports: DecoImport[];
|
|
35
|
-
};
|
|
36
|
-
protected buildCreateHttps(names: DecoNames, region: string, serviceAccount: string): {
|
|
37
|
-
code: string[];
|
|
38
|
-
imports: DecoImport[];
|
|
39
|
-
};
|
|
14
|
+
protected runHeader(item: GeneratorRunItem, env: GeneratorEnv): Promise<GeneratorRunResult | null>;
|
|
15
|
+
protected buildConstants(virtualKeysName: string, virtuals: AnnotationsProperty<DecoPropertyBase>[], datePathsName: string, datePaths: string[], sideEffectsName: string, sideEffects: AnnotationsProperty<DecoPropertyBase>[]): string[];
|
|
16
|
+
protected buildApi(raw: DecoratorData, names: DecoNames, virtualKeysName: string, datePathsName: string, sideEffectsName: string, virtuals: AnnotationsProperty<DecoPropertyBase>[], sideEffects: AnnotationsProperty<DecoPropertyBase>[]): string[];
|
|
17
|
+
protected buildFunction(names: DecoNames): string[];
|
|
18
|
+
protected buildStore(names: DecoNames, namespace: string): string[];
|
|
19
|
+
protected buildCreateCallable(names: DecoNames, region: string, serviceAccount: string): string[];
|
|
20
|
+
protected buildCreateHttps(names: DecoNames, region: string, serviceAccount: string): string[];
|
|
40
21
|
}
|
|
41
22
|
declare const _default: GeneratorBackend;
|
|
42
23
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorBackend.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorBackend.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"GeneratorBackend.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACd,MAAM,2CAA2C,CAAC;AASnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,uCAAuC,CAAC;AAG/C;;;;;;GAMG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;;cASpB,SAAS,CAChC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAsErC,SAAS,CAAC,cAAc,CACtB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,EACjD,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,GACnD,MAAM,EAAE;IAqBX,SAAS,CAAC,QAAQ,CAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,SAAS,EAChB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,EACjD,WAAW,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,GACnD,MAAM,EAAE;IAkDX,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE;IAgBnD,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAQnE,SAAS,CAAC,mBAAmB,CAC3B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,MAAM,EAAE;IAkBX,SAAS,CAAC,gBAAgB,CACxB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,MAAM,EAAE;CAiBZ;;AAED,wBAAsC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { hasCrudRoute, isCrudRoute, DecoFileExtension, DecoFileType, DecoPropertyType,
|
|
1
|
+
import { hasCrudRoute, isCrudRoute, DecoFileExtension, DecoFileType, DecoPropertyType, DecoPackageType, } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
2
|
import { Generator } from "./Generator.js";
|
|
3
|
-
import {
|
|
3
|
+
import {} from "@mxpicture/gcp-functions-backend/api"; // for reference only
|
|
4
|
+
import {} from "@mxpicture/gcp-functions-frontend/types"; // for reference only
|
|
4
5
|
import { extractAnnotationsPaths } from "@mxpicture/gcp-functions-common/annotation";
|
|
5
6
|
/**
|
|
6
7
|
* Generator that produces backend-specific code including API classes, stores, functions, and factory helpers.
|
|
@@ -11,32 +12,20 @@ import { extractAnnotationsPaths } from "@mxpicture/gcp-functions-common/annotat
|
|
|
11
12
|
*/
|
|
12
13
|
export class GeneratorBackend extends Generator {
|
|
13
14
|
constructor() {
|
|
14
|
-
super(
|
|
15
|
+
super({
|
|
16
|
+
fileType: DecoFileType.backend,
|
|
17
|
+
ext: DecoFileExtension.ts,
|
|
18
|
+
packageType: DecoPackageType.backend,
|
|
19
|
+
});
|
|
15
20
|
}
|
|
16
|
-
async runHeader(
|
|
17
|
-
const raw =
|
|
21
|
+
async runHeader(item, env) {
|
|
22
|
+
const raw = item.decorator.extractRaw();
|
|
18
23
|
if (!raw.routes || Object.keys(raw.routes).length === 0)
|
|
19
24
|
return null;
|
|
20
25
|
const namespace = raw.namespace ?? "default";
|
|
21
|
-
const names =
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
path: this.importCommon(DecoFileType.routes),
|
|
25
|
-
props: [names.routes],
|
|
26
|
-
isType: true,
|
|
27
|
-
}, {
|
|
28
|
-
path: this.importCommon(DecoFileType.doc),
|
|
29
|
-
props: [names.doc, names.docStore, names.docSideEffects],
|
|
30
|
-
isType: true,
|
|
31
|
-
}, {
|
|
32
|
-
path: this.importCommon(DecoFileType.routes),
|
|
33
|
-
props: [names.routesName],
|
|
34
|
-
isType: false,
|
|
35
|
-
}, {
|
|
36
|
-
path: this.importBackend(DecoFileType.zod),
|
|
37
|
-
props: [names.shape],
|
|
38
|
-
isType: false,
|
|
39
|
-
});
|
|
26
|
+
const names = item.names;
|
|
27
|
+
const code = [];
|
|
28
|
+
const header = item.decorator.extractAnnotations();
|
|
40
29
|
const sideEffectsName = `${names.basenameLower}SideEffects`;
|
|
41
30
|
const sideEffects = header.properties.filter((prop) => prop.common.sideEffects);
|
|
42
31
|
const virtualKeysName = `${names.basenameLower}VirtualKeys`;
|
|
@@ -44,14 +33,13 @@ export class GeneratorBackend extends Generator {
|
|
|
44
33
|
const datePathsName = `${names.basenameLower}DatePaths`;
|
|
45
34
|
const datePaths = extractAnnotationsPaths(header.properties, DecoPropertyType.date);
|
|
46
35
|
const builtConstants = this.buildConstants(virtualKeysName, virtuals, datePathsName, datePaths, sideEffectsName, sideEffects);
|
|
47
|
-
const builtFunction = this.buildFunction(
|
|
48
|
-
const builtApi = this.buildApi(raw,
|
|
49
|
-
const builtStore = this.buildStore(
|
|
50
|
-
const builtCreateCallable = this.buildCreateCallable(
|
|
51
|
-
const builtCreateHttps = this.buildCreateHttps(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return raw.name;
|
|
36
|
+
const builtFunction = this.buildFunction(names);
|
|
37
|
+
const builtApi = this.buildApi(raw, names, virtualKeysName, datePathsName, sideEffectsName, virtuals, sideEffects);
|
|
38
|
+
const builtStore = this.buildStore(names, namespace);
|
|
39
|
+
const builtCreateCallable = this.buildCreateCallable(names, env.region, env.serviceAccount);
|
|
40
|
+
const builtCreateHttps = this.buildCreateHttps(names, env.region, env.serviceAccount);
|
|
41
|
+
code.push(...builtConstants, "", ...builtFunction, "", ...builtApi, "", ...builtStore, "", ...builtCreateCallable, "", ...builtCreateHttps);
|
|
42
|
+
return { name: raw.name, code };
|
|
55
43
|
}
|
|
56
44
|
buildConstants(virtualKeysName, virtuals, datePathsName, datePaths, sideEffectsName, sideEffects) {
|
|
57
45
|
const code = [
|
|
@@ -67,50 +55,22 @@ export class GeneratorBackend extends Generator {
|
|
|
67
55
|
...sideEffects.map((prop) => `"${prop.propertyKey}",`),
|
|
68
56
|
"];",
|
|
69
57
|
];
|
|
70
|
-
return
|
|
71
|
-
code,
|
|
72
|
-
imports: [
|
|
73
|
-
{
|
|
74
|
-
path: "@mxpicture/gcp-functions-common/types",
|
|
75
|
-
props: ["DecoPropertyVirtual"],
|
|
76
|
-
isType: true,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
};
|
|
58
|
+
return code;
|
|
80
59
|
}
|
|
81
60
|
buildApi(raw, names, virtualKeysName, datePathsName, sideEffectsName, virtuals, sideEffects) {
|
|
82
61
|
const code = [];
|
|
83
62
|
const superClassName = hasCrudRoute(raw.routes ?? {})
|
|
84
63
|
? "BackendApi"
|
|
85
64
|
: "IBackendApi";
|
|
86
|
-
|
|
87
|
-
{
|
|
88
|
-
path: "@mxpicture/gcp-functions-common/types",
|
|
89
|
-
props: ["ApiFromRoutes"],
|
|
90
|
-
isType: true,
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
path: "@mxpicture/gcp-functions-backend/validation",
|
|
94
|
-
props: ["Validation"],
|
|
95
|
-
isType: false,
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
path: "@mxpicture/gcp-functions-backend/api",
|
|
99
|
-
props: [superClassName],
|
|
100
|
-
isType: false,
|
|
101
|
-
},
|
|
102
|
-
];
|
|
103
|
-
// key: string;
|
|
104
|
-
// optional?: boolean;
|
|
105
|
-
code.push(`export abstract class I${names.api} extends ${this.i(superClassName)}<${this.i(names.docStore)}, ${this.i(names.doc)}, ${this.i(names.docSideEffects)}, ${this.i(names.store)}, ${this.i("Validation")}<${this.i(names.doc)}>>`, `implements ${this.i("ApiFromRoutes")}<${this.i(names.routes)}>`, "{", ` public constructor() { super("${names.basenameLower}", ${datePathsName}, ${virtualKeysName}, ${sideEffectsName}); }`, "");
|
|
65
|
+
code.push(`export abstract class I${names.api} extends ${superClassName}<${names.docStore}, ${names.doc}, ${names.docSideEffects}, ${names.store}, Validation<${names.doc}>>`, `implements ApiFromRoutes<${names.routes}>`, "{", ` public constructor() { super("${names.basenameLower}", ${datePathsName}, ${virtualKeysName}, ${sideEffectsName}); }`, "");
|
|
106
66
|
if (virtuals.length === 0) {
|
|
107
67
|
// create dummy method with 1:1 mapping
|
|
108
|
-
code.push(` // default 1:1 mapping`, ` protected async loadVirtualFields(doc: ${
|
|
68
|
+
code.push(` // default 1:1 mapping`, ` protected async loadVirtualFields(doc: ${names.docStore}): Promise<${names.doc}> {return doc as ${names.doc};}`, "");
|
|
109
69
|
}
|
|
110
70
|
// else: leave method as abstract
|
|
111
71
|
if (sideEffects.length === 0) {
|
|
112
72
|
// create dummy method with 1:1 mapping
|
|
113
|
-
code.push(` protected async processSideEffects(current: ${
|
|
73
|
+
code.push(` protected async processSideEffects(current: ${names.doc}, prev: ${names.doc} | null, changedProps: ${names.docSideEffects}): Promise<${names.doc}>`, ` {void changedProps; void prev; return current as ${names.doc};}`, "");
|
|
114
74
|
}
|
|
115
75
|
// else: leave method as abstract
|
|
116
76
|
for (const [routeName, params] of Object.entries(raw.routes ?? {})) {
|
|
@@ -125,132 +85,63 @@ export class GeneratorBackend extends Generator {
|
|
|
125
85
|
code.push(` public abstract ${definition};`);
|
|
126
86
|
}
|
|
127
87
|
code.push("}");
|
|
128
|
-
return
|
|
129
|
-
code,
|
|
130
|
-
imports,
|
|
131
|
-
};
|
|
88
|
+
return code;
|
|
132
89
|
}
|
|
133
90
|
buildFunction(names) {
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
code: [
|
|
148
|
-
`export class ${names.func} extends ${this.i("IBackendFunction")}<${this.i(names.docStore)}, ${this.i(names.doc)}, ${this.i(names.docSideEffects)}, I${this.i(names.api)}> {`,
|
|
149
|
-
` public constructor(`,
|
|
150
|
-
" region: string,",
|
|
151
|
-
" serviceAccount: string,",
|
|
152
|
-
` api?: ${this.i(`I${names.api}`)})`,
|
|
153
|
-
` { super("${names.functionName}", region, serviceAccount, ${this.i(`${names.basenameLower}DatePaths`)});`,
|
|
154
|
-
` this.useRoutes(${this.i(names.routesName)}); if (api) this.useApi(api); }`,
|
|
155
|
-
"",
|
|
156
|
-
" // defined to be able to debug ingress",
|
|
157
|
-
` public override async ingress<REQ, RES extends ${this.i("DocumentData")}>(request: ${this.i("FunctionRequest")}<REQ>): Promise<${this.i("FunctionResponse")}<RES>> { return super.ingress(request); }`,
|
|
158
|
-
"}",
|
|
159
|
-
],
|
|
160
|
-
};
|
|
91
|
+
return [
|
|
92
|
+
`export class ${names.func} extends IBackendFunction<${names.docStore}, ${names.doc}, ${names.docSideEffects}, I${names.api}> {`,
|
|
93
|
+
` public constructor(`,
|
|
94
|
+
" region: string,",
|
|
95
|
+
" serviceAccount: string,",
|
|
96
|
+
` api?: I${names.api}`,
|
|
97
|
+
` { super("${names.functionName}", region, serviceAccount, ${names.basenameLower}DatePaths);`,
|
|
98
|
+
` this.useRoutes(${names.routesName}); if (api) this.useApi(api); }`,
|
|
99
|
+
"",
|
|
100
|
+
" // defined to be able to debug ingress",
|
|
101
|
+
" public override async ingress<REQ, RES extends DocumentData>(request: FunctionRequest<REQ>): Promise<FunctionResponse<RES>> { return super.ingress(request); }",
|
|
102
|
+
"}",
|
|
103
|
+
];
|
|
161
104
|
}
|
|
162
105
|
buildStore(names, namespace) {
|
|
163
|
-
return
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
isType: false,
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
path: "firebase-admin/firestore",
|
|
172
|
-
props: ["FirestoreDataConverter"],
|
|
173
|
-
isType: true,
|
|
174
|
-
},
|
|
175
|
-
],
|
|
176
|
-
code: [
|
|
177
|
-
`export class ${names.store} extends ${this.i("Store")}<${this.i(names.doc)}> {`,
|
|
178
|
-
` public constructor(converter?: ${this.i("FirestoreDataConverter")}<${this.i(names.doc)}>) { super("${names.basenameLower}", "${namespace}", converter); }`,
|
|
179
|
-
"}",
|
|
180
|
-
],
|
|
181
|
-
};
|
|
106
|
+
return [
|
|
107
|
+
`export class ${names.store} extends Store<${names.doc}> {`,
|
|
108
|
+
` public constructor(converter?: FirestoreDataConverter<${names.doc}>) { super("${names.basenameLower}", "${namespace}", converter); }`,
|
|
109
|
+
"}",
|
|
110
|
+
];
|
|
182
111
|
}
|
|
183
112
|
buildCreateCallable(names, region, serviceAccount) {
|
|
184
|
-
return
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
isType: false,
|
|
200
|
-
},
|
|
201
|
-
],
|
|
202
|
-
code: [
|
|
203
|
-
`export const create${names.basename}CallableFunction = (api: ${this.i(`I${names.api}`)}): ${this.i("CallableFunction")}<${this.i("FunctionRequest")}<unknown>,Promise<${this.i("FunctionResponse")}<unknown>>,unknown> => {`,
|
|
204
|
-
` const store = new ${this.i(names.store)}();`,
|
|
205
|
-
"",
|
|
206
|
-
` const val = new ${this.i("Validation")}<${this.i(names.doc)}>("${names.basenameLower}");`,
|
|
207
|
-
` val.useShape(${this.i(names.shape)});`,
|
|
208
|
-
"",
|
|
209
|
-
` const func = new ${this.i(names.func)}("${region}", "${serviceAccount}", api);`,
|
|
210
|
-
"",
|
|
211
|
-
" api.useStore(store);",
|
|
212
|
-
" api.useValidation(val);",
|
|
213
|
-
"",
|
|
214
|
-
" return func.buildCallableFunction();",
|
|
215
|
-
"};",
|
|
216
|
-
],
|
|
217
|
-
};
|
|
113
|
+
return [
|
|
114
|
+
`export const create${names.basename}CallableFunction = (api: I${names.api}): CallableFunction<FunctionRequest<unknown>,Promise<FunctionResponse<unknown>>,unknown> => {`,
|
|
115
|
+
` const store = new ${names.store}();`,
|
|
116
|
+
"",
|
|
117
|
+
` const val = new Validation<${names.doc}>("${names.basenameLower}");`,
|
|
118
|
+
` val.useShape(${names.shape});`,
|
|
119
|
+
"",
|
|
120
|
+
` const func = new ${names.func}("${region}", "${serviceAccount}", api);`,
|
|
121
|
+
"",
|
|
122
|
+
" api.useStore(store);",
|
|
123
|
+
" api.useValidation(val);",
|
|
124
|
+
"",
|
|
125
|
+
" return func.buildCallableFunction();",
|
|
126
|
+
"};",
|
|
127
|
+
];
|
|
218
128
|
}
|
|
219
129
|
buildCreateHttps(names, region, serviceAccount) {
|
|
220
|
-
return
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
isType: true,
|
|
236
|
-
},
|
|
237
|
-
],
|
|
238
|
-
code: [
|
|
239
|
-
`export const create${names.basename}HttpsFunction = (api: ${this.i(`I${names.api}`)}, auth?: ${this.i("ExpressAuthHandler")} | null): ${this.i("HttpsFunction")} => {`,
|
|
240
|
-
` const store = new ${this.i(names.store)}();`,
|
|
241
|
-
"",
|
|
242
|
-
` const val = new ${this.i("Validation")}<${this.i(names.doc)}>("${names.basenameLower}");`,
|
|
243
|
-
` val.useShape(${this.i(names.shape)});`,
|
|
244
|
-
"",
|
|
245
|
-
` const func = new ${this.i(names.func)}("${region}", "${serviceAccount}", api);`,
|
|
246
|
-
"",
|
|
247
|
-
" api.useStore(store);",
|
|
248
|
-
" api.useValidation(val);",
|
|
249
|
-
"",
|
|
250
|
-
" return auth === undefined ? func.buildHttpsFunction() : func.buildHttpsFunction(auth);",
|
|
251
|
-
"};",
|
|
252
|
-
],
|
|
253
|
-
};
|
|
130
|
+
return [
|
|
131
|
+
`export const create${names.basename}HttpsFunction = (api: I${names.api}, auth?: ExpressAuthHandler | null): HttpsFunction => {`,
|
|
132
|
+
` const store = new ${names.store}();`,
|
|
133
|
+
"",
|
|
134
|
+
` const val = new Validation<${names.doc}>("${names.basenameLower}");`,
|
|
135
|
+
` val.useShape(${names.shape});`,
|
|
136
|
+
"",
|
|
137
|
+
` const func = new ${names.func}("${region}", "${serviceAccount}", api);`,
|
|
138
|
+
"",
|
|
139
|
+
" api.useStore(store);",
|
|
140
|
+
" api.useValidation(val);",
|
|
141
|
+
"",
|
|
142
|
+
" return auth === undefined ? func.buildHttpsFunction() : func.buildHttpsFunction(auth);",
|
|
143
|
+
"};",
|
|
144
|
+
];
|
|
254
145
|
}
|
|
255
146
|
}
|
|
256
147
|
export default new GeneratorBackend();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorBackend.js","sourceRoot":"","sources":["../../src/generator/GeneratorBackend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GeneratorBackend.js","sourceRoot":"","sources":["../../src/generator/GeneratorBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { DecoPropertiesArray } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
|
-
import { Generator
|
|
3
|
-
import {
|
|
4
|
-
import { GeneratorEnv } from "../common/types.common.js";
|
|
1
|
+
import type { DecoPropertiesArray } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
|
+
import { Generator } from "./Generator.js";
|
|
3
|
+
import type { GeneratorEnv, GeneratorRunItem, GeneratorRunResult } from "../common/types.common.js";
|
|
5
4
|
/**
|
|
6
5
|
* Generator that produces TypeScript document interfaces from decorator property definitions.
|
|
7
6
|
*
|
|
@@ -10,11 +9,11 @@ import { GeneratorEnv } from "../common/types.common.js";
|
|
|
10
9
|
*/
|
|
11
10
|
export declare class GeneratorDoc extends Generator {
|
|
12
11
|
constructor();
|
|
13
|
-
protected runHeader(
|
|
14
|
-
protected buildInterface(
|
|
15
|
-
protected buildStoreDoc(
|
|
16
|
-
protected buildDoc(
|
|
17
|
-
protected buildSideEffectsDoc(
|
|
12
|
+
protected runHeader(item: GeneratorRunItem, env: GeneratorEnv): Promise<GeneratorRunResult | null>;
|
|
13
|
+
protected buildInterface(basename: string, name: string, properties: DecoPropertiesArray, extendsName?: string): string[];
|
|
14
|
+
protected buildStoreDoc(basename: string, name: string, properties: DecoPropertiesArray): string[];
|
|
15
|
+
protected buildDoc(basename: string, name: string, docStoreName: string, properties: DecoPropertiesArray): string[];
|
|
16
|
+
protected buildSideEffectsDoc(docSideEffectsName: string, properties: DecoPropertiesArray): string[];
|
|
18
17
|
}
|
|
19
18
|
declare const _default: GeneratorDoc;
|
|
20
19
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorDoc.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorDoc.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"GeneratorDoc.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorDoc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AASrF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AA6BnC;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,SAAS;;cAShB,SAAS,CAChC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAgCrC,SAAS,CAAC,cAAc,CACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,EAE/B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE;IAwBX,SAAS,CAAC,aAAa,CACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE;IAWX,SAAS,CAAC,QAAQ,CAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE;IAUX,SAAS,CAAC,mBAAmB,CAC3B,kBAAkB,EAAE,MAAM,EAC1B,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE;CAcZ;;AAED,wBAAkC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { buildEnumName, DecoFileExtension, DecoFileType, decoPropertiesFromMap, DecoPropertyType,
|
|
1
|
+
import { buildEnumName, DecoFileExtension, DecoFileType, decoPropertiesFromMap, DecoPropertyType, DecoPackageType, } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
2
|
import { Generator } from "./Generator.js";
|
|
3
|
-
import { Collector } from "../common/Collector.js";
|
|
4
3
|
import { DOCUMENT_KEY_ADMIN_KEYS } from "@mxpicture/gcp-functions-common/helper";
|
|
4
|
+
import { isPrimitiveType } from "../common/resolve.common.js";
|
|
5
5
|
const decoTypeToTs = (headName, propertyKey, data) => {
|
|
6
6
|
switch (data.type) {
|
|
7
7
|
case DecoPropertyType.date:
|
|
@@ -30,57 +30,56 @@ const decoTypeToTs = (headName, propertyKey, data) => {
|
|
|
30
30
|
*/
|
|
31
31
|
export class GeneratorDoc extends Generator {
|
|
32
32
|
constructor() {
|
|
33
|
-
super(
|
|
33
|
+
super({
|
|
34
|
+
fileType: DecoFileType.doc,
|
|
35
|
+
ext: DecoFileExtension.ts,
|
|
36
|
+
packageType: DecoPackageType.common,
|
|
37
|
+
});
|
|
34
38
|
}
|
|
35
|
-
async runHeader(
|
|
36
|
-
|
|
39
|
+
async runHeader(item, env) {
|
|
40
|
+
void env;
|
|
41
|
+
const raw = item.decorator.extractRaw();
|
|
37
42
|
const properties = raw.properties
|
|
38
43
|
? decoPropertiesFromMap(raw.properties)
|
|
39
44
|
: [];
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
this.buildStoreDoc(result, current.names.basename, current.names.docStore, properties);
|
|
46
|
-
this.buildDoc(result, current.names.basename, current.names.doc, current.names.docStore, properties);
|
|
47
|
-
this.buildSideEffectsDoc(result, current.names.docSideEffects, properties);
|
|
48
|
-
return raw.name;
|
|
45
|
+
const code = [];
|
|
46
|
+
code.push(...this.buildStoreDoc(item.names.basename, item.names.docStore, properties));
|
|
47
|
+
code.push(...this.buildDoc(item.names.basename, item.names.doc, item.names.docStore, properties));
|
|
48
|
+
code.push(...this.buildSideEffectsDoc(item.names.docSideEffects, properties));
|
|
49
|
+
return { name: raw.name, code };
|
|
49
50
|
}
|
|
50
|
-
buildInterface(
|
|
51
|
+
buildInterface(basename, name, properties, extendsName) {
|
|
52
|
+
const code = [];
|
|
51
53
|
const props = properties.filter(({ key }) => !DOCUMENT_KEY_ADMIN_KEYS.includes(key));
|
|
52
54
|
if (props.length === 0)
|
|
53
|
-
return;
|
|
54
|
-
|
|
55
|
+
return [];
|
|
56
|
+
code.push(`export interface ${name}${extendsName ? ` extends ${extendsName}` : ""} {`);
|
|
55
57
|
for (const { key, prop } of props) {
|
|
56
58
|
const extr = prop.extractRaw();
|
|
57
59
|
const type = decoTypeToTs(basename, key, extr.data);
|
|
58
|
-
|
|
59
|
-
if (type.imp)
|
|
60
|
-
result.addImport({
|
|
61
|
-
path: this.importCommon(DecoFileType.enum),
|
|
62
|
-
isType: true,
|
|
63
|
-
props: [type.tsType],
|
|
64
|
-
});
|
|
60
|
+
code.push(` ${key}${extr.common.optional ? "?" : ""}: ${isPrimitiveType(type.tsType) ? type.tsType : type.tsType},`);
|
|
65
61
|
}
|
|
66
|
-
|
|
62
|
+
code.push("}");
|
|
63
|
+
return code;
|
|
67
64
|
}
|
|
68
|
-
buildStoreDoc(
|
|
69
|
-
return this.buildInterface(
|
|
65
|
+
buildStoreDoc(basename, name, properties) {
|
|
66
|
+
return this.buildInterface(basename, name, properties.filter((item) => item.prop.extractRaw().common.virtual !== true), "DocumentKeyAdmin");
|
|
70
67
|
}
|
|
71
|
-
buildDoc(
|
|
68
|
+
buildDoc(basename, name, docStoreName, properties) {
|
|
72
69
|
const items = properties.filter((item) => item.prop.extractRaw().common.virtual === true);
|
|
73
70
|
if (items.length === 0)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.buildInterface(result, basename, name, items, docStoreName);
|
|
71
|
+
return [`export type ${name} = ${docStoreName};`];
|
|
72
|
+
return this.buildInterface(basename, name, items, docStoreName);
|
|
77
73
|
}
|
|
78
|
-
buildSideEffectsDoc(
|
|
74
|
+
buildSideEffectsDoc(docSideEffectsName, properties) {
|
|
79
75
|
const items = properties.filter((item) => item.prop.extractRaw().common.sideEffects === true);
|
|
80
76
|
if (items.length === 0)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
77
|
+
return [`export type ${docSideEffectsName} = DocumentData;`];
|
|
78
|
+
return [
|
|
79
|
+
`export interface ${docSideEffectsName} extends DocumentData {`,
|
|
80
|
+
...items.map(({ key }) => ` ${key}?: boolean,`),
|
|
81
|
+
"}",
|
|
82
|
+
];
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
85
|
export default new GeneratorDoc();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorDoc.js","sourceRoot":"","sources":["../../src/generator/GeneratorDoc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GeneratorDoc.js","sourceRoot":"","sources":["../../src/generator/GeneratorDoc.ts"],"names":[],"mappings":"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"}
|