@mxpicture/gcp-functions-generator 2.1.16 → 2.1.18
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/generator/GeneratorBackend.d.ts +2 -15
- package/dist/generator/GeneratorBackend.d.ts.map +1 -1
- package/dist/generator/GeneratorBackend.js +12 -43
- package/dist/generator/GeneratorBackend.js.map +1 -1
- package/dist/generator/GeneratorComposite.d.ts.map +1 -1
- package/dist/generator/GeneratorComposite.js +19 -8
- package/dist/generator/GeneratorComposite.js.map +1 -1
- package/dist/run/GeneratorCache.d.ts +36 -0
- package/dist/run/GeneratorCache.d.ts.map +1 -0
- package/dist/run/GeneratorCache.js +76 -0
- package/dist/run/GeneratorCache.js.map +1 -0
- package/dist/run/index.d.ts +1 -0
- package/dist/run/index.d.ts.map +1 -1
- package/dist/run/index.js +1 -0
- package/dist/run/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
import type { DecoNames
|
|
1
|
+
import type { DecoNames } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
2
|
import { Generator } from "./Generator.js";
|
|
3
3
|
import type { GeneratorEnv, GeneratorRunItem, GeneratorRunResult } from "../common/types.common.js";
|
|
4
|
-
import type { AnnotationsProperty, DecoPropertyBase
|
|
4
|
+
import type { AnnotationsProperty, DecoPropertyBase } from "@mxpicture/gcp-functions-common/types";
|
|
5
5
|
import type { ExportsAlias } from "@mxpicture/build-api/types";
|
|
6
|
-
interface CacheEntry {
|
|
7
|
-
name: string;
|
|
8
|
-
raw: DecoratorData;
|
|
9
|
-
apiSuperClass: string;
|
|
10
|
-
isApiAbstract: boolean;
|
|
11
|
-
additionalRoutes: DecoRoutes;
|
|
12
|
-
isStoreFactory: boolean;
|
|
13
|
-
names: DecoNames;
|
|
14
|
-
namespace: string;
|
|
15
|
-
}
|
|
16
6
|
/**
|
|
17
7
|
* Generator that produces backend-specific code including API classes, stores, functions, and factory helpers.
|
|
18
8
|
*
|
|
@@ -21,10 +11,7 @@ interface CacheEntry {
|
|
|
21
11
|
* `IBackendFunction`, `Store`, and a `create*Function` factory.
|
|
22
12
|
*/
|
|
23
13
|
export declare class GeneratorBackend extends Generator {
|
|
24
|
-
protected _cache: Map<string, CacheEntry>;
|
|
25
14
|
constructor();
|
|
26
|
-
protected setCache(item: GeneratorRunItem): CacheEntry;
|
|
27
|
-
protected cache(name: string): CacheEntry;
|
|
28
15
|
protected runHeader(item: GeneratorRunItem, env: GeneratorEnv): Promise<GeneratorRunResult | null>;
|
|
29
16
|
protected buildConstants(virtualKeysName: string, virtuals: AnnotationsProperty<DecoPropertyBase>[], datePathsName: string, datePaths: string[], sideEffectsName: string, sideEffects: AnnotationsProperty<DecoPropertyBase>[]): string[];
|
|
30
17
|
protected buildApi(name: string, virtualKeysName: string, datePathsName: string, sideEffectsName: string, virtuals: AnnotationsProperty<DecoPropertyBase>[], sideEffects: AnnotationsProperty<DecoPropertyBase>[]): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorBackend.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"GeneratorBackend.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAO3E,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;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG/D;;;;;;GAMG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;;cASpB,SAAS,CAChC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IA2ErC,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,IAAI,EAAE,MAAM,EACZ,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;IAgDX,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAmB/C,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IA6B9C,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAU5C,SAAS,CAAC,mBAAmB,CAC3B,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,YAAY,GAChB;QACD,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB;IAmBD,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,EAAE;CAe1E;;AAED,wBAAsC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DecoFileExtension, DecoFileType, DecoPropertyType, DecoPackageType, } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
2
|
import { Generator } from "./Generator.js";
|
|
3
3
|
import {} from "@mxpicture/gcp-functions-backend/api"; // for reference only
|
|
4
4
|
import {} from "@mxpicture/gcp-functions-frontend/types"; // for reference only
|
|
5
5
|
import { extractAnnotationsPaths } from "@mxpicture/gcp-functions-common/annotation";
|
|
6
|
+
import { cacheBE, setCache } from "../run/GeneratorCache.js";
|
|
6
7
|
/**
|
|
7
8
|
* Generator that produces backend-specific code including API classes, stores, functions, and factory helpers.
|
|
8
9
|
*
|
|
@@ -11,7 +12,6 @@ import { extractAnnotationsPaths } from "@mxpicture/gcp-functions-common/annotat
|
|
|
11
12
|
* `IBackendFunction`, `Store`, and a `create*Function` factory.
|
|
12
13
|
*/
|
|
13
14
|
export class GeneratorBackend extends Generator {
|
|
14
|
-
_cache = new Map();
|
|
15
15
|
constructor() {
|
|
16
16
|
super({
|
|
17
17
|
fileType: DecoFileType.backend,
|
|
@@ -19,43 +19,8 @@ export class GeneratorBackend extends Generator {
|
|
|
19
19
|
packageType: DecoPackageType.backend,
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
setCache(item) {
|
|
23
|
-
let entry = this._cache.get(item.decorator.name);
|
|
24
|
-
if (entry)
|
|
25
|
-
return entry;
|
|
26
|
-
const raw = item.decorator.extractRaw();
|
|
27
|
-
const apiSuperClass = hasCustomCrudRoute(raw.routes)
|
|
28
|
-
? "BackendCrudApi"
|
|
29
|
-
: hasCrudRoute(raw.routes)
|
|
30
|
-
? "BackendDefaultApi"
|
|
31
|
-
: "BackendStoreApi";
|
|
32
|
-
const additionalRoutes = Object.entries(raw.routes ?? {})
|
|
33
|
-
.filter(([, params]) => !isCrudRoute(params) && !isCustomCrudRoute(params))
|
|
34
|
-
.reduce((acc, [key, value]) => {
|
|
35
|
-
acc[key] = value;
|
|
36
|
-
return acc;
|
|
37
|
-
}, {});
|
|
38
|
-
entry = {
|
|
39
|
-
name: raw.name,
|
|
40
|
-
raw,
|
|
41
|
-
apiSuperClass,
|
|
42
|
-
isApiAbstract: Object.keys(additionalRoutes).length > 0,
|
|
43
|
-
additionalRoutes,
|
|
44
|
-
isStoreFactory: !!raw.lead,
|
|
45
|
-
names: item.names,
|
|
46
|
-
namespace: raw.namespace ?? "default",
|
|
47
|
-
};
|
|
48
|
-
this._cache.set(raw.name, entry);
|
|
49
|
-
return entry;
|
|
50
|
-
}
|
|
51
|
-
cache(name) {
|
|
52
|
-
const entry = this._cache.get(name);
|
|
53
|
-
if (!entry)
|
|
54
|
-
throw new Error(`No cache entry available for "${name}"`);
|
|
55
|
-
return entry;
|
|
56
|
-
}
|
|
57
22
|
async runHeader(item, env) {
|
|
58
|
-
const cache =
|
|
23
|
+
const cache = setCache(item);
|
|
59
24
|
if (!cache.raw.routes || Object.keys(cache.raw.routes).length === 0)
|
|
60
25
|
return null;
|
|
61
26
|
const names = item.names;
|
|
@@ -108,7 +73,8 @@ export class GeneratorBackend extends Generator {
|
|
|
108
73
|
}
|
|
109
74
|
buildApi(name, virtualKeysName, datePathsName, sideEffectsName, virtuals, sideEffects) {
|
|
110
75
|
const code = [];
|
|
111
|
-
const {
|
|
76
|
+
const { additionalRoutes, backend } = cacheBE(name);
|
|
77
|
+
const { apiSuperClass, isApiAbstract, names } = backend;
|
|
112
78
|
code.push(`export ${isApiAbstract ? "abstract" : ""} class ${names.api} extends ${apiSuperClass}<${names.docStore}, ${names.doc}, ${names.docSideEffects}, ${names.store}, Validation<${names.doc}>>`, `implements ApiFromRoutes<${names.routes}>`, "{", ` public constructor() { super("${names.basenameLower}", ${datePathsName}, ${virtualKeysName}, ${sideEffectsName}); }`, "");
|
|
113
79
|
if (virtuals.length === 0) {
|
|
114
80
|
// create dummy method with 1:1 mapping
|
|
@@ -134,7 +100,8 @@ export class GeneratorBackend extends Generator {
|
|
|
134
100
|
return code;
|
|
135
101
|
}
|
|
136
102
|
buildFunction(name) {
|
|
137
|
-
const {
|
|
103
|
+
const { backend } = cacheBE(name);
|
|
104
|
+
const { names } = backend;
|
|
138
105
|
return [
|
|
139
106
|
`export interface ${names.func}Params { projectId: string; region: string; serviceAccount: string; api?: ${names.api}; name?: string; functionName?: string; }`,
|
|
140
107
|
"",
|
|
@@ -150,10 +117,11 @@ export class GeneratorBackend extends Generator {
|
|
|
150
117
|
];
|
|
151
118
|
}
|
|
152
119
|
buildFactory(name) {
|
|
153
|
-
const {
|
|
120
|
+
const { backend } = cacheBE(name);
|
|
121
|
+
const { isStoreFactory, isApiAbstract, names } = backend;
|
|
154
122
|
const createApi = isApiAbstract
|
|
155
123
|
? ""
|
|
156
|
-
: ` protected override _createApi(): ${names.api} {
|
|
124
|
+
: ` protected override _createApi(): ${names.api} { return new ${names.api}(); }`;
|
|
157
125
|
const ext = isStoreFactory
|
|
158
126
|
? `IBackendStoreFactory<${names.docStore}, ${names.doc}, ${names.api}, ${names.func}, ${names.docSideEffects}, Validation<${names.doc}>, ${names.store}>`
|
|
159
127
|
: `IBackendFactory<${names.doc}, ${names.api}, ${names.docSideEffects}, Validation<${names.doc}>>`;
|
|
@@ -173,7 +141,8 @@ export class GeneratorBackend extends Generator {
|
|
|
173
141
|
];
|
|
174
142
|
}
|
|
175
143
|
buildStore(name) {
|
|
176
|
-
const {
|
|
144
|
+
const { namespace, backend } = cacheBE(name);
|
|
145
|
+
const { names } = backend;
|
|
177
146
|
return [
|
|
178
147
|
`export class ${names.store} extends Store<${names.doc}> {`,
|
|
179
148
|
` public constructor(converter?: FirestoreDataConverter<${names.doc}>) { super("${names.basenameLower}", "${namespace}", converter); }`,
|
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorComposite.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorComposite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAM/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"GeneratorComposite.d.ts","sourceRoot":"","sources":["../../src/generator/GeneratorComposite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAM/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;;IASzB,SAAS,CAC7B,SAAS,EAAE,QAAQ,EAAE,EACrB,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAC7C,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC;cA6BS,SAAS,CAChC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAMrC,SAAS,CAAC,cAAc,CACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,gBAAgB,EAAE,EACzB,GAAG,EAAE,YAAY,GAChB,MAAM,EAAE;CAoFZ;;AAED,wBAAwC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DecoFileExtension, DecoFileType, DecoPackageType, } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
2
|
import { Generator } from "./Generator.js";
|
|
3
|
+
import { cacheBE, setCache } from "../run/GeneratorCache.js";
|
|
3
4
|
/**
|
|
4
5
|
* Cross-file generator emitting one composite backend function per namespace,
|
|
5
6
|
* aggregating all decorators marked with `standalone(false)`.
|
|
@@ -56,23 +57,33 @@ export class GeneratorComposite extends Generator {
|
|
|
56
57
|
const callableName = nsLower;
|
|
57
58
|
const httpsName = `${nsLower}Service`;
|
|
58
59
|
const factoriesType = `${nsUpper}BackendFactories`;
|
|
60
|
+
items.forEach(setCache);
|
|
59
61
|
const code = [];
|
|
60
62
|
// Explicit imports for npm-gcp-functions symbols. The auto-resolver fills in
|
|
61
63
|
// imports for the per-topic symbols below (IXxxBeFunction, XxxStore, validation).
|
|
62
64
|
code.push(`import { CompositeBackendFunction } from "@mxpicture/gcp-functions-backend/function";`, `import type { ExpressAuthHandler } from "@mxpicture/gcp-functions-backend/types";`, "");
|
|
63
65
|
code.push(`export interface ${factoriesType} {`, ...items.map((item) => {
|
|
64
|
-
const names = item.
|
|
65
|
-
return ` ${names.basenameLower}
|
|
66
|
+
const { isApiAbstract, names } = cacheBE(item.decorator.name).backend;
|
|
67
|
+
return ` ${names.basenameLower}${isApiAbstract ? "" : "?"}: ${names.factory};`;
|
|
68
|
+
}), "}", "");
|
|
69
|
+
code.push(`export interface ${factoriesType} {`, ...items.map((item) => {
|
|
70
|
+
const { isApiAbstract, names } = cacheBE(item.decorator.name).backend;
|
|
71
|
+
return ` ${names.basenameLower}${isApiAbstract ? "" : "?"}: ${names.factory};`;
|
|
66
72
|
}), "}", "");
|
|
73
|
+
const hasAbstract = !!items.find((item) => cacheBE(item.decorator.name).backend.isApiAbstract);
|
|
74
|
+
const params = hasAbstract
|
|
75
|
+
? ` const projectId = "${env.projectId}"; const region = "${env.region}"; const serviceAccount = "${env.serviceAccount}";`
|
|
76
|
+
: " void name;";
|
|
77
|
+
code.push(`const enrichFactories = (name: string, factories: ${factoriesType}): Required<${factoriesType}> => {`, params, ...items.map((item) => {
|
|
78
|
+
const { isApiAbstract, names } = cacheBE(item.decorator.name).backend;
|
|
79
|
+
return isApiAbstract
|
|
80
|
+
? ` if (!factories.${names.basenameLower}) factories.${names.basenameLower} = new ${names.factory}({ name, projectId, region, serviceAccount, });`
|
|
81
|
+
: "";
|
|
82
|
+
}), ` return factories as Required<${factoriesType}>;`, "}", "");
|
|
67
83
|
const wireTopic = (item) => {
|
|
68
84
|
const names = item.names;
|
|
69
85
|
return [
|
|
70
|
-
"
|
|
71
|
-
` const f = factories.${names.basenameLower}("${env.projectId}", "${env.region}", "${env.serviceAccount}");`,
|
|
72
|
-
` f.api.useStore(new ${names.store}());`,
|
|
73
|
-
` f.api.useValidation(${names.validation}());`,
|
|
74
|
-
` composite.useTopic("${names.basenameLower}", f);`,
|
|
75
|
-
" }",
|
|
86
|
+
` composite.useTopic("${names.basenameLower}", factories.${names.basenameLower}.func());`,
|
|
76
87
|
];
|
|
77
88
|
};
|
|
78
89
|
code.push(`export const create${nsUpper}CallableFunction = (factories: ${factoriesType}) => {`, ` const composite = new CompositeBackendFunction("${callableName}", "${env.projectId}", "${env.region}", "${env.serviceAccount}");`, ...items.flatMap(wireTopic), " return composite.buildCallableFunction();", "};", "", `export const create${nsUpper}HttpsFunction = (factories: ${factoriesType}, auth?: ExpressAuthHandler | null) => {`, ` const composite = new CompositeBackendFunction("${httpsName}", "${env.projectId}", "${env.region}", "${env.serviceAccount}");`, ...items.flatMap(wireTopic), " return auth === undefined ? composite.buildHttpsFunction() : composite.buildHttpsFunction(auth);", "};");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneratorComposite.js","sourceRoot":"","sources":["../../src/generator/GeneratorComposite.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"GeneratorComposite.js","sourceRoot":"","sources":["../../src/generator/GeneratorComposite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type DecoNames, type DecoratorData } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
|
+
import type { DecoRoutes } from "@mxpicture/gcp-functions-common/types";
|
|
3
|
+
import type { GeneratorRunItem } from "../common/types.common.js";
|
|
4
|
+
export interface GeneratorCacheEntryFE {
|
|
5
|
+
names: DecoNames;
|
|
6
|
+
}
|
|
7
|
+
export interface GeneratorCacheEntryBE {
|
|
8
|
+
apiSuperClass: string;
|
|
9
|
+
isApiAbstract: boolean;
|
|
10
|
+
isStoreFactory: boolean;
|
|
11
|
+
names: DecoNames;
|
|
12
|
+
}
|
|
13
|
+
export interface GeneratorCacheEntry {
|
|
14
|
+
name: string;
|
|
15
|
+
raw: DecoratorData;
|
|
16
|
+
additionalRoutes: DecoRoutes;
|
|
17
|
+
namespace: string;
|
|
18
|
+
backend?: GeneratorCacheEntryBE;
|
|
19
|
+
frontend?: GeneratorCacheEntryFE;
|
|
20
|
+
}
|
|
21
|
+
export declare class GeneratorCache {
|
|
22
|
+
protected _entries: Map<string, GeneratorCacheEntry>;
|
|
23
|
+
constructor();
|
|
24
|
+
set(item: GeneratorRunItem): GeneratorCacheEntry;
|
|
25
|
+
get(name: string): GeneratorCacheEntry;
|
|
26
|
+
protected ensureEntry(item: GeneratorRunItem): GeneratorCacheEntry;
|
|
27
|
+
}
|
|
28
|
+
export declare const cache: (name: string) => GeneratorCacheEntry;
|
|
29
|
+
export declare const cacheFE: (name: string) => GeneratorCacheEntry & {
|
|
30
|
+
frontend: GeneratorCacheEntryFE;
|
|
31
|
+
};
|
|
32
|
+
export declare const cacheBE: (name: string) => GeneratorCacheEntry & {
|
|
33
|
+
backend: GeneratorCacheEntryBE;
|
|
34
|
+
};
|
|
35
|
+
export declare const setCache: (item: GeneratorRunItem) => GeneratorCacheEntry;
|
|
36
|
+
//# sourceMappingURL=GeneratorCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeneratorCache.d.ts","sourceRoot":"","sources":["../../src/run/GeneratorCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,aAAa,CAAC;IACnB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED,qBAAa,cAAc;IACzB,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAa;;IAI1D,GAAG,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB;IA6BhD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAM7C,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB;CAyBnE;AAID,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,mBAIpC,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,MAAM,MAAM,KACX,mBAAmB,GAAG;IAAE,QAAQ,EAAE,qBAAqB,CAAA;CAKzD,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,MAAM,MAAM,KACX,mBAAmB,GAAG;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAKxD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,gBAAgB,wBAAqB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { hasCrudRoute, hasCustomCrudRoute, isCrudRoute, isCustomCrudRoute, } from "@mxpicture/gcp-functions-common/decorator";
|
|
2
|
+
export class GeneratorCache {
|
|
3
|
+
_entries = new Map();
|
|
4
|
+
constructor() { }
|
|
5
|
+
set(item) {
|
|
6
|
+
const entry = this.ensureEntry(item);
|
|
7
|
+
// backend
|
|
8
|
+
if (!entry.backend) {
|
|
9
|
+
const apiSuperClass = hasCustomCrudRoute(entry.raw.routes)
|
|
10
|
+
? "BackendCrudApi"
|
|
11
|
+
: hasCrudRoute(entry.raw.routes)
|
|
12
|
+
? "BackendDefaultApi"
|
|
13
|
+
: "BackendStoreApi";
|
|
14
|
+
entry.backend = {
|
|
15
|
+
apiSuperClass,
|
|
16
|
+
isApiAbstract: Object.keys(entry.additionalRoutes).length > 0,
|
|
17
|
+
isStoreFactory: !!entry.raw.lead,
|
|
18
|
+
names: item.names,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// frontend
|
|
22
|
+
if (!entry.frontend) {
|
|
23
|
+
entry.frontend = {
|
|
24
|
+
names: item.names,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return entry;
|
|
28
|
+
}
|
|
29
|
+
get(name) {
|
|
30
|
+
const entry = this._entries.get(name);
|
|
31
|
+
if (!entry)
|
|
32
|
+
throw new Error(`No cache entry available for "${name}"`);
|
|
33
|
+
return entry;
|
|
34
|
+
}
|
|
35
|
+
ensureEntry(item) {
|
|
36
|
+
let entry = this._entries.get(item.decorator.name);
|
|
37
|
+
if (entry)
|
|
38
|
+
return entry;
|
|
39
|
+
const raw = item.decorator.extractRaw();
|
|
40
|
+
const additionalRoutes = Object.entries(raw.routes ?? {})
|
|
41
|
+
.filter(([, params]) => !isCrudRoute(params) && !isCustomCrudRoute(params))
|
|
42
|
+
.reduce((acc, [key, value]) => {
|
|
43
|
+
acc[key] = value;
|
|
44
|
+
return acc;
|
|
45
|
+
}, {});
|
|
46
|
+
entry = {
|
|
47
|
+
name: raw.name,
|
|
48
|
+
raw,
|
|
49
|
+
additionalRoutes,
|
|
50
|
+
namespace: raw.namespace ?? "default",
|
|
51
|
+
};
|
|
52
|
+
this._entries.set(raw.name, entry);
|
|
53
|
+
return entry;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const _cache = new GeneratorCache();
|
|
57
|
+
export const cache = (name) => {
|
|
58
|
+
const entry = _cache.get(name);
|
|
59
|
+
if (!entry)
|
|
60
|
+
throw new Error(`No cache entry available for "${name}"`);
|
|
61
|
+
return entry;
|
|
62
|
+
};
|
|
63
|
+
export const cacheFE = (name) => {
|
|
64
|
+
const entry = cache(name);
|
|
65
|
+
if (!entry.frontend)
|
|
66
|
+
throw new Error(`No cache frontend entry available for "${name}"`);
|
|
67
|
+
return entry;
|
|
68
|
+
};
|
|
69
|
+
export const cacheBE = (name) => {
|
|
70
|
+
const entry = cache(name);
|
|
71
|
+
if (!entry.backend)
|
|
72
|
+
throw new Error(`No cache backend entry available for "${name}"`);
|
|
73
|
+
return entry;
|
|
74
|
+
};
|
|
75
|
+
export const setCache = (item) => _cache.set(item);
|
|
76
|
+
//# sourceMappingURL=GeneratorCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeneratorCache.js","sourceRoot":"","sources":["../../src/run/GeneratorCache.ts"],"names":[],"mappings":"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"}
|
package/dist/run/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from "./GeneratorBarrel.js";
|
|
|
2
2
|
export * from "./GeneratorBase.js";
|
|
3
3
|
export * from "./GeneratorBaseFile.js";
|
|
4
4
|
export * from "./GeneratorBasePersist.js";
|
|
5
|
+
export * from "./GeneratorCache.js";
|
|
5
6
|
export * from "./GeneratorDirectory.js";
|
|
6
7
|
export * from "./GeneratorFile.js";
|
|
7
8
|
export * from "./GeneratorFileImports.js";
|
package/dist/run/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
package/dist/run/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./GeneratorBarrel.js";
|
|
|
3
3
|
export * from "./GeneratorBase.js";
|
|
4
4
|
export * from "./GeneratorBaseFile.js";
|
|
5
5
|
export * from "./GeneratorBasePersist.js";
|
|
6
|
+
export * from "./GeneratorCache.js";
|
|
6
7
|
export * from "./GeneratorDirectory.js";
|
|
7
8
|
export * from "./GeneratorFile.js";
|
|
8
9
|
export * from "./GeneratorFileImports.js";
|
package/dist/run/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxpicture/gcp-functions-generator",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.18",
|
|
4
4
|
"description": "Tools for google cloud functions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "MXPicture",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@google-cloud/scheduler": "^5.3.1",
|
|
51
51
|
"@mxpicture/build-api": "^0.4.37",
|
|
52
|
-
"@mxpicture/gcp-functions-backend": "^2.1.
|
|
53
|
-
"@mxpicture/gcp-functions-common": "^2.1.
|
|
54
|
-
"@mxpicture/gcp-functions-frontend": "^2.1.
|
|
52
|
+
"@mxpicture/gcp-functions-backend": "^2.1.18",
|
|
53
|
+
"@mxpicture/gcp-functions-common": "^2.1.18",
|
|
54
|
+
"@mxpicture/gcp-functions-frontend": "^2.1.18",
|
|
55
55
|
"google-auth-library": "^10.6.2",
|
|
56
56
|
"googleapis": "^171.4.0",
|
|
57
57
|
"json5": "^2.2.3"
|