@kosdev-code/kos-nx-plugin 2.0.41 → 2.1.1
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/package.json +2 -2
- package/src/generators/kos-add-future-to-model/generator.d.ts.map +1 -1
- package/src/generators/kos-add-future-to-model/generator.js.map +1 -1
- package/src/generators/kos-add-future-to-model/lib/model-transformer.d.ts +8 -3
- package/src/generators/kos-add-future-to-model/lib/model-transformer.d.ts.map +1 -1
- package/src/generators/kos-add-future-to-model/lib/model-transformer.js +191 -155
- package/src/generators/kos-add-future-to-model/lib/model-transformer.js.map +1 -1
- package/src/generators/kos-container-model/files/model/__nameDashCase__-model.ts.template +25 -40
- package/src/generators/kos-container-model/files/model/index.ts.template +20 -5
- package/src/generators/kos-model/files/model/__nameDashCase__-model.ts.template +35 -43
- package/src/generators/kos-model/files/model/index.ts__template__ +11 -3
- package/src/generators/kos-model/schema.d.ts +1 -0
- package/src/generators/kos-model/schema.json +5 -0
- package/src/generators/kos-plugin-project/generator.js +6 -6
- package/src/generators/kos-plugin-project/generator.js.map +1 -1
- package/src/generators/kos-ui-project/files/src/app/app.css.template +1 -1
- package/src/generators/preset/files/src/app/app.css.template +1 -2
- package/src/generators/preset/generator.d.ts.map +1 -1
- package/src/generators/preset/generator.js +14 -5
- package/src/generators/preset/generator.js.map +1 -1
- package/src/generators/preset/tools/tools/scripts/update.mjs.template +29 -8
- package/src/generators/kos-container-model/files/model/__nameDashCase__-registration.ts.template +0 -113
- package/src/generators/kos-model/files/model/__nameDashCase__-registration.ts.template +0 -144
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kosdev-code/kos-nx-plugin",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"generators": "./generators.json",
|
|
6
6
|
"publishConfig": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"main": "./src/index.js",
|
|
20
20
|
"kos": {
|
|
21
21
|
"build": {
|
|
22
|
-
"gitHash": "
|
|
22
|
+
"gitHash": "8f34a7c5827b814dc09dd2bcbf41c9195d8b3437"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,YAAY,CAAC;AAO/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,yBAAyB,iBAiFnC;AAED,eAAe,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/generator.ts"],"names":[],"mappings":";;;AAAA,uCAA+C;AAC/C,+CAA4C;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { Tree } from "@nx/devkit";
|
|
2
2
|
import { NormalizedKosAddFutureToModelSchema } from "../schema";
|
|
3
|
+
/**
|
|
4
|
+
* Transformer that updates existing models to use the new @kosFutureAware decorator pattern
|
|
5
|
+
* with TypeScript interface merging for type safety.
|
|
6
|
+
*/
|
|
3
7
|
export declare class ModelFileTransformer {
|
|
4
8
|
private tree;
|
|
5
9
|
private options;
|
|
6
10
|
constructor(tree: Tree, options: NormalizedKosAddFutureToModelSchema);
|
|
7
11
|
transform(): void;
|
|
12
|
+
private addESLintDisable;
|
|
8
13
|
private addImports;
|
|
9
14
|
private addServiceImport;
|
|
15
|
+
private addInterfaceMerging;
|
|
16
|
+
private addDecorator;
|
|
10
17
|
private updatePublicType;
|
|
11
|
-
private
|
|
12
|
-
private addMixinSetup;
|
|
18
|
+
private removeLegacySetup;
|
|
13
19
|
private addFutureMethod;
|
|
14
|
-
private addFutureUpdateHandler;
|
|
15
20
|
private addOnFutureUpdateMethod;
|
|
16
21
|
}
|
|
17
22
|
//# sourceMappingURL=model-transformer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-transformer.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/lib/model-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,mCAAmC,EAAE,MAAM,WAAW,CAAC;AAEhE,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;gBADP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,mCAAmC;IAGtD,SAAS,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"model-transformer.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/lib/model-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,mCAAmC,EAAE,MAAM,WAAW,CAAC;AAEhE;;;GAGG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;gBADP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,mCAAmC;IAGtD,SAAS,IAAI,IAAI;IAyBjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,UAAU;IA6GlB,OAAO,CAAC,gBAAgB;IA+CxB,OAAO,CAAC,mBAAmB;IAqC3B,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,eAAe;IA+DvB,OAAO,CAAC,uBAAuB;CA8ChC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ModelFileTransformer = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Transformer that updates existing models to use the new @kosFutureAware decorator pattern
|
|
6
|
+
* with TypeScript interface merging for type safety.
|
|
7
|
+
*/
|
|
4
8
|
class ModelFileTransformer {
|
|
5
9
|
tree;
|
|
6
10
|
options;
|
|
@@ -14,18 +18,28 @@ class ModelFileTransformer {
|
|
|
14
18
|
throw new Error(`Model file not found: ${modelFilePath}`);
|
|
15
19
|
}
|
|
16
20
|
let content = this.tree.read(modelFilePath, "utf-8");
|
|
21
|
+
content = this.addESLintDisable(content);
|
|
17
22
|
content = this.addImports(content);
|
|
18
23
|
content = this.addServiceImport(content);
|
|
24
|
+
content = this.addInterfaceMerging(content);
|
|
25
|
+
content = this.addDecorator(content);
|
|
19
26
|
content = this.updatePublicType(content);
|
|
20
|
-
content = this.
|
|
21
|
-
content = this.addMixinSetup(content);
|
|
27
|
+
content = this.removeLegacySetup(content);
|
|
22
28
|
content = this.addFutureMethod(content);
|
|
23
29
|
if (this.options.futureType === "complete") {
|
|
24
|
-
content = this.addFutureUpdateHandler(content);
|
|
25
30
|
content = this.addOnFutureUpdateMethod(content);
|
|
26
31
|
}
|
|
27
32
|
this.tree.write(modelFilePath, content);
|
|
28
33
|
}
|
|
34
|
+
addESLintDisable(content) {
|
|
35
|
+
// Check if ESLint disable comment already exists
|
|
36
|
+
if (content.includes("@typescript-eslint/no-unsafe-declaration-merging")) {
|
|
37
|
+
return content;
|
|
38
|
+
}
|
|
39
|
+
// Add the ESLint disable comment at the top of the file
|
|
40
|
+
const eslintDisable = "/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\n";
|
|
41
|
+
return eslintDisable + content;
|
|
42
|
+
}
|
|
29
43
|
addImports(content) {
|
|
30
44
|
const { internal, futureType } = this.options;
|
|
31
45
|
const isComplete = futureType === "complete";
|
|
@@ -38,16 +52,23 @@ class ModelFileTransformer {
|
|
|
38
52
|
const existingImportsStr = kosModelMatch[1] || "";
|
|
39
53
|
const newImports = [
|
|
40
54
|
"kosFuture",
|
|
41
|
-
|
|
55
|
+
"kosFutureAware",
|
|
56
|
+
isComplete ? "KosFutureAwareFull" : "KosFutureAwareMinimal",
|
|
42
57
|
];
|
|
43
58
|
// Parse existing imports and add new ones
|
|
44
59
|
const existingImports = existingImportsStr
|
|
45
60
|
.split(",")
|
|
46
61
|
.map((s) => s.trim())
|
|
47
62
|
.filter(Boolean);
|
|
63
|
+
// Remove old setup functions if they exist
|
|
64
|
+
const importsToRemove = [
|
|
65
|
+
"setupCompleteFutureSupport",
|
|
66
|
+
"setupMinimalFutureSupport",
|
|
67
|
+
];
|
|
68
|
+
const cleanedImports = existingImports.filter((imp) => !importsToRemove.includes(imp));
|
|
48
69
|
// Only add imports that don't already exist
|
|
49
|
-
const importsToAdd = newImports.filter((imp) => !
|
|
50
|
-
const allImports = [...
|
|
70
|
+
const importsToAdd = newImports.filter((imp) => !cleanedImports.includes(imp));
|
|
71
|
+
const allImports = [...cleanedImports, ...importsToAdd];
|
|
51
72
|
const newImportLine = internal
|
|
52
73
|
? `import { ${allImports.join(", ")} } from "../../../core/core/decorators"`
|
|
53
74
|
: `import { ${allImports.join(", ")} } from "@kosdev-code/kos-ui-sdk"`;
|
|
@@ -57,14 +78,7 @@ class ModelFileTransformer {
|
|
|
57
78
|
const typeImportsBase = internal
|
|
58
79
|
? "../../../models/types/future-interfaces"
|
|
59
80
|
: "@kosdev-code/kos-ui-sdk";
|
|
60
|
-
const futureTypeImports = [
|
|
61
|
-
"ExternalFutureInterface",
|
|
62
|
-
"FutureAwareContainer",
|
|
63
|
-
"IFutureModel",
|
|
64
|
-
];
|
|
65
|
-
if (isComplete) {
|
|
66
|
-
futureTypeImports.push("FutureUpdateHandler");
|
|
67
|
-
}
|
|
81
|
+
const futureTypeImports = ["ExternalFutureInterface", "IFutureModel"];
|
|
68
82
|
// Find existing type import or add new one
|
|
69
83
|
const typeImportRegex = internal
|
|
70
84
|
? /import type {([^}]*)} from "\.\.\/\.\.\/\.\.\/models\/types\/future-interfaces"/
|
|
@@ -73,13 +87,20 @@ class ModelFileTransformer {
|
|
|
73
87
|
if (typeImportMatch) {
|
|
74
88
|
// Update existing import
|
|
75
89
|
const existingTypes = typeImportMatch[1] || "";
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
const existingTypesList = existingTypes
|
|
91
|
+
.split(",")
|
|
92
|
+
.map((s) => s.trim())
|
|
93
|
+
.filter(Boolean);
|
|
94
|
+
// Remove old types that are no longer needed
|
|
95
|
+
const typesToRemove = [
|
|
96
|
+
"FutureAwareContainer",
|
|
97
|
+
"FutureHandlerContainer",
|
|
98
|
+
"FutureStateAccessor",
|
|
99
|
+
"FutureUpdateHandler",
|
|
100
|
+
];
|
|
101
|
+
const cleanedTypes = existingTypesList.filter((type) => !typesToRemove.includes(type));
|
|
102
|
+
const typesToAdd = futureTypeImports.filter((type) => !cleanedTypes.includes(type));
|
|
103
|
+
const allTypes = [...cleanedTypes, ...typesToAdd].join(", ");
|
|
83
104
|
const newTypeImport = `import type { ${allTypes} } from "${typeImportsBase}"`;
|
|
84
105
|
content = content.replace(typeImportRegex, newTypeImport);
|
|
85
106
|
}
|
|
@@ -105,172 +126,187 @@ class ModelFileTransformer {
|
|
|
105
126
|
if (content.includes(`${nameProperCase}OperationProgress`)) {
|
|
106
127
|
return content;
|
|
107
128
|
}
|
|
108
|
-
// Look for existing "./services" import
|
|
129
|
+
// Look for existing "./services" import
|
|
109
130
|
const servicesImportRegex = /import\s*{([^}]*)}\s*from\s*["']\.\/services["'];?/s;
|
|
110
131
|
const servicesMatch = content.match(servicesImportRegex);
|
|
111
132
|
if (servicesMatch) {
|
|
112
133
|
// Add to existing services import
|
|
113
134
|
const existingImports = servicesMatch[1];
|
|
114
|
-
if (existingImports.includes(`${nameProperCase}OperationProgress`)) {
|
|
115
|
-
return content; // Already imported
|
|
116
|
-
}
|
|
117
|
-
// Clean up existing imports - remove trailing commas and normalize
|
|
118
135
|
const cleanedImports = existingImports
|
|
119
136
|
.split(",")
|
|
120
|
-
.map((
|
|
121
|
-
.filter(
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
: `type ${nameProperCase}OperationProgress`;
|
|
126
|
-
const newImportStatement = `import {\n ${newImports}\n} from "./services";`;
|
|
127
|
-
return content.replace(servicesImportRegex, newImportStatement);
|
|
137
|
+
.map((s) => s.trim())
|
|
138
|
+
.filter(Boolean);
|
|
139
|
+
cleanedImports.push(`${nameProperCase}OperationProgress`);
|
|
140
|
+
const newImport = `import { ${cleanedImports.join(", ")} } from "./services";`;
|
|
141
|
+
content = content.replace(servicesImportRegex, newImport);
|
|
128
142
|
}
|
|
129
143
|
else {
|
|
130
|
-
// Add new
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (line.startsWith("import")) {
|
|
137
|
-
// Find the end of this import statement
|
|
138
|
-
let j = i;
|
|
139
|
-
while (j < lines.length && !lines[j].includes(";")) {
|
|
140
|
-
j++;
|
|
141
|
-
}
|
|
142
|
-
lastImportIndex = j;
|
|
143
|
-
i = j; // Skip to end of current import
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
if (lastImportIndex >= 0) {
|
|
147
|
-
const serviceImport = `import type { ${nameProperCase}OperationProgress } from "./services";`;
|
|
148
|
-
lines.splice(lastImportIndex + 1, 0, serviceImport);
|
|
149
|
-
return lines.join("\n");
|
|
144
|
+
// Add new services import after types import
|
|
145
|
+
const typesImportRegex = /import\s+type\s+{[^}]*}\s+from\s+["']\.\/types["'];?/;
|
|
146
|
+
const typesMatch = content.match(typesImportRegex);
|
|
147
|
+
if (typesMatch) {
|
|
148
|
+
const newImport = `\nimport type { ${nameProperCase}OperationProgress } from "./services";`;
|
|
149
|
+
content = content.replace(typesMatch[0], typesMatch[0] + newImport);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
return content;
|
|
153
153
|
}
|
|
154
|
-
|
|
155
|
-
const { nameProperCase,
|
|
156
|
-
const typeRegex = new RegExp(`export type ${nameProperCase}Model = PublicModelInterface<${nameProperCase}ModelImpl>;`);
|
|
157
|
-
// Use 'any' for progress type if services are not being updated
|
|
158
|
-
const progressType = updateServices
|
|
159
|
-
? `${nameProperCase}OperationProgress`
|
|
160
|
-
: "any";
|
|
161
|
-
const newType = `export type ${nameProperCase}Model = PublicModelInterface<${nameProperCase}ModelImpl> & ExternalFutureInterface<${progressType}>;`;
|
|
162
|
-
return content.replace(typeRegex, newType);
|
|
163
|
-
}
|
|
164
|
-
addFutureProperties(content) {
|
|
165
|
-
const { nameProperCase, futureType, updateServices } = this.options;
|
|
154
|
+
addInterfaceMerging(content) {
|
|
155
|
+
const { nameProperCase, futureType } = this.options;
|
|
166
156
|
const isComplete = futureType === "complete";
|
|
167
|
-
const
|
|
157
|
+
const interfaceType = isComplete
|
|
158
|
+
? "KosFutureAwareFull"
|
|
159
|
+
: "KosFutureAwareMinimal";
|
|
160
|
+
const progressType = this.options.updateServices
|
|
168
161
|
? `${nameProperCase}OperationProgress`
|
|
169
|
-
: "
|
|
170
|
-
// Find the class declaration
|
|
171
|
-
const classRegex = new RegExp(`export
|
|
162
|
+
: "Record<string, unknown>";
|
|
163
|
+
// Find the class declaration
|
|
164
|
+
const classRegex = new RegExp(`(@kosModel[^\\n]*\\n)([^\\n]*export\\s+class\\s+${nameProperCase}ModelImpl)`, "m");
|
|
172
165
|
const classMatch = content.match(classRegex);
|
|
173
166
|
if (classMatch) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
futureProps.push(` public future?: IFutureModel<${progressType}>; // Used internally for progress checks and custom logic`);
|
|
167
|
+
// Check if interface merging already exists
|
|
168
|
+
const interfaceRegex = new RegExp(`interface\\s+${nameProperCase}ModelImpl\\s+extends`);
|
|
169
|
+
if (!content.match(interfaceRegex)) {
|
|
170
|
+
// Add interface merging before the class declaration
|
|
171
|
+
const interfaceMerging = `\n// Interface merging for Future Container type safety\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ${nameProperCase}ModelImpl extends ${interfaceType}<${progressType}> {}\n\n`;
|
|
172
|
+
content = content.replace(classMatch[0], interfaceMerging + classMatch[0]);
|
|
181
173
|
}
|
|
182
|
-
const insertAfter = classMatch[0];
|
|
183
|
-
const replacement = insertAfter + futureProps.join("\n");
|
|
184
|
-
return content.replace(classMatch[0], replacement);
|
|
185
174
|
}
|
|
186
175
|
return content;
|
|
187
176
|
}
|
|
188
|
-
|
|
189
|
-
const { futureType } = this.options;
|
|
177
|
+
addDecorator(content) {
|
|
178
|
+
const { nameProperCase, futureType } = this.options;
|
|
190
179
|
const isComplete = futureType === "complete";
|
|
191
|
-
// Find
|
|
192
|
-
const
|
|
193
|
-
const
|
|
194
|
-
if (
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
180
|
+
// Find the class declaration with existing decorators
|
|
181
|
+
const classRegex = new RegExp(`(@kosModel[^\\n]*\\n)((?:@[^\\n]*\\n)*)([^\\n]*export\\s+class\\s+${nameProperCase}ModelImpl)`, "m");
|
|
182
|
+
const classMatch = content.match(classRegex);
|
|
183
|
+
if (classMatch) {
|
|
184
|
+
// Check if @kosFutureAware already exists
|
|
185
|
+
if (!classMatch[2].includes("@kosFutureAware")) {
|
|
186
|
+
const decoratorOptions = isComplete ? "" : "{ mode: 'minimal' }";
|
|
187
|
+
const futureDecorator = `@kosFutureAware(${decoratorOptions})\n`;
|
|
188
|
+
content = content.replace(classMatch[0], classMatch[1] + classMatch[2] + futureDecorator + classMatch[3]);
|
|
189
|
+
}
|
|
200
190
|
}
|
|
201
191
|
return content;
|
|
202
192
|
}
|
|
203
|
-
|
|
204
|
-
const { nameProperCase } = this.options;
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
//
|
|
220
|
-
// try {
|
|
221
|
-
// const future = await perform${nameProperCase}Operation();
|
|
222
|
-
// return this.futureHandler.setFuture(future);
|
|
223
|
-
// } catch (error) {
|
|
224
|
-
// this.logger.error(\`Failed to start operation for \${this.id}:\`, error);
|
|
225
|
-
// throw error;
|
|
226
|
-
// }
|
|
227
|
-
|
|
228
|
-
// Placeholder that doesn't actually do anything
|
|
229
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
230
|
-
|
|
231
|
-
this.logger.debug(\`Completed long-running operation for \${this.id}\`);
|
|
232
|
-
}`;
|
|
233
|
-
// Add method before the lifecycle section
|
|
234
|
-
const lifecycleRegex = /(\s+\/\/ -------------------LIFECYCLE----------------------------)/;
|
|
235
|
-
return content.replace(lifecycleRegex, futureMethod + "\n$1");
|
|
193
|
+
updatePublicType(content) {
|
|
194
|
+
const { nameProperCase, updateServices } = this.options;
|
|
195
|
+
const progressType = updateServices
|
|
196
|
+
? `${nameProperCase}OperationProgress`
|
|
197
|
+
: "Record<string, unknown>";
|
|
198
|
+
// Find the public type declaration
|
|
199
|
+
const typeRegex = new RegExp(`export\\s+type\\s+${nameProperCase}Model\\s*=\\s*PublicModelInterface<${nameProperCase}ModelImpl>([^;]*);`, "s");
|
|
200
|
+
const typeMatch = content.match(typeRegex);
|
|
201
|
+
if (typeMatch) {
|
|
202
|
+
// Check if ExternalFutureInterface is already added
|
|
203
|
+
if (!typeMatch[1].includes("ExternalFutureInterface")) {
|
|
204
|
+
const newType = `export type ${nameProperCase}Model = PublicModelInterface<${nameProperCase}ModelImpl> & ExternalFutureInterface<${progressType}>;`;
|
|
205
|
+
content = content.replace(typeMatch[0], newType);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return content;
|
|
236
209
|
}
|
|
237
|
-
|
|
210
|
+
removeLegacySetup(content) {
|
|
211
|
+
// Remove old setup function calls from constructor
|
|
212
|
+
const setupRegex = /\s*setup(Complete|Minimal)FutureSupport\(this\);?\s*/g;
|
|
213
|
+
content = content.replace(setupRegex, "");
|
|
214
|
+
// Remove old property declarations
|
|
215
|
+
const propertyRegex = /\s*(public|private|protected)?\s*(declare\s+)?futureHandler[!?]?:\s*FutureAwareContainer[^;]*;\s*/g;
|
|
216
|
+
content = content.replace(propertyRegex, "");
|
|
217
|
+
const futurePropertyRegex = /\s*(public|private|protected)?\s*(declare\s+)?future\??:\s*IFutureModel[^;]*;\s*/g;
|
|
218
|
+
content = content.replace(futurePropertyRegex, "");
|
|
219
|
+
// Remove old interface implementations
|
|
220
|
+
const implementsRegex = new RegExp(`(implements\\s+[^{]*?)\\s*,?\\s*(FutureUpdateHandler|FutureHandlerContainer|FutureStateAccessor)`, "g");
|
|
221
|
+
content = content.replace(implementsRegex, "$1");
|
|
222
|
+
// Clean up duplicate commas in implements clause
|
|
223
|
+
content = content.replace(/,\s*,/g, ",");
|
|
224
|
+
content = content.replace(/implements\s*,/g, "implements");
|
|
225
|
+
return content;
|
|
226
|
+
}
|
|
227
|
+
addFutureMethod(content) {
|
|
238
228
|
const { nameProperCase } = this.options;
|
|
239
|
-
//
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
229
|
+
// Check if a @kosFuture method already exists
|
|
230
|
+
if (content.includes("@kosFuture()")) {
|
|
231
|
+
return content;
|
|
232
|
+
}
|
|
233
|
+
// Find the end of the class to add the method
|
|
234
|
+
const classRegex = new RegExp(`class\\s+${nameProperCase}ModelImpl[^{]*{([\\s\\S]*)}\\s*$`, "m");
|
|
235
|
+
const classMatch = content.match(classRegex);
|
|
236
|
+
if (classMatch) {
|
|
237
|
+
const methodCode = `
|
|
238
|
+
/**
|
|
239
|
+
* Placeholder method for Future operations
|
|
240
|
+
* Replace this with your actual long-running operation
|
|
241
|
+
*/
|
|
242
|
+
@kosFuture()
|
|
243
|
+
async performLongRunningOperation(): Promise<void> {
|
|
244
|
+
// TODO: Implement your long-running operation here
|
|
245
|
+
// This method should use a service that returns a Future for progress tracking
|
|
246
|
+
|
|
247
|
+
this.logger.debug(\`Starting long-running operation for \${this.id}\`);
|
|
248
|
+
|
|
249
|
+
// Example implementation pattern using services:
|
|
250
|
+
// import { perform${nameProperCase}Operation } from './services';
|
|
251
|
+
//
|
|
252
|
+
// const future = await perform${nameProperCase}Operation();
|
|
253
|
+
// return this.futureHandler.setFuture(future);
|
|
254
|
+
|
|
255
|
+
// Placeholder that doesn't actually do anything
|
|
256
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
257
|
+
|
|
258
|
+
this.logger.debug(\`Completed long-running operation for \${this.id}\`);
|
|
259
|
+
}
|
|
260
|
+
`;
|
|
261
|
+
// Insert before the closing brace
|
|
262
|
+
const classContent = classMatch[1];
|
|
263
|
+
const lastBraceIndex = classContent.lastIndexOf("}");
|
|
264
|
+
if (lastBraceIndex >= 0) {
|
|
265
|
+
const updatedContent = classContent.slice(0, lastBraceIndex) +
|
|
266
|
+
methodCode +
|
|
267
|
+
classContent.slice(lastBraceIndex);
|
|
268
|
+
content = content.replace(classMatch[0], `class ${nameProperCase}ModelImpl${classMatch[0].match(/[^{]*/)?.[0]}{${updatedContent}}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return content;
|
|
243
272
|
}
|
|
244
273
|
addOnFutureUpdateMethod(content) {
|
|
245
274
|
const { nameProperCase, updateServices } = this.options;
|
|
246
275
|
const progressType = updateServices
|
|
247
276
|
? `${nameProperCase}OperationProgress`
|
|
248
|
-
: "
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
277
|
+
: "Record<string, unknown>";
|
|
278
|
+
// Check if onFutureUpdate already exists
|
|
279
|
+
if (content.includes("onFutureUpdate")) {
|
|
280
|
+
return content;
|
|
281
|
+
}
|
|
282
|
+
// Find a good place to add the method (after performLongRunningOperation if it exists)
|
|
283
|
+
const futureMethodRegex = /@kosFuture\(\)[^}]*}/s;
|
|
284
|
+
const futureMethodMatch = content.match(futureMethodRegex);
|
|
285
|
+
if (futureMethodMatch) {
|
|
286
|
+
const methodCode = `
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Optional: Custom Future update handling
|
|
290
|
+
* Called whenever the Future state changes (progress, status, completion, etc.)
|
|
291
|
+
*/
|
|
292
|
+
onFutureUpdate?(update: IFutureModel<${progressType}>): void {
|
|
293
|
+
// Add custom Future update logic here
|
|
294
|
+
// Examples:
|
|
295
|
+
// - Log progress milestones
|
|
296
|
+
// - Update derived state based on progress
|
|
297
|
+
// - Handle specific error conditions
|
|
298
|
+
// - Trigger notifications at certain thresholds
|
|
299
|
+
|
|
300
|
+
this.logger.debug(\`Future update for \${this.id}:\`, {
|
|
301
|
+
progress: update.progress,
|
|
302
|
+
status: update.status,
|
|
303
|
+
endState: update.endState,
|
|
304
|
+
clientData: update.clientData
|
|
305
|
+
});
|
|
306
|
+
}`;
|
|
307
|
+
content = content.replace(futureMethodMatch[0], futureMethodMatch[0] + methodCode);
|
|
308
|
+
}
|
|
309
|
+
return content;
|
|
274
310
|
}
|
|
275
311
|
}
|
|
276
312
|
exports.ModelFileTransformer = ModelFileTransformer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-transformer.js","sourceRoot":"","sources":["../../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/lib/model-transformer.ts"],"names":[],"mappings":";;;AAGA,MAAa,oBAAoB;IAErB;IACA;IAFV,YACU,IAAU,EACV,OAA4C;QAD5C,SAAI,GAAJ,IAAI,CAAM;QACV,YAAO,GAAP,OAAO,CAAqC;IACnD,CAAC;IAEJ,SAAS;QACP,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAE,CAAC;QAEtD,OAAO,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"model-transformer.js","sourceRoot":"","sources":["../../../../../../../../packages/plugins/kos-nx-plugin/src/generators/kos-add-future-to-model/lib/model-transformer.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,oBAAoB;IAErB;IACA;IAFV,YACU,IAAU,EACV,OAA4C;QAD5C,SAAI,GAAJ,IAAI,CAAM;QACV,YAAO,GAAP,OAAO,CAAqC;IACnD,CAAC;IAEJ,SAAS;QACP,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAE,CAAC;QAEtD,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC3C,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,iDAAiD;QACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,kDAAkD,CAAC,EAAE,CAAC;YACzE,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,wDAAwD;QACxD,MAAM,aAAa,GACjB,yEAAyE,CAAC;QAC5E,OAAO,aAAa,GAAG,OAAO,CAAC;IACjC,CAAC;IAEO,UAAU,CAAC,OAAe;QAChC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU,CAAC;QAE7C,gCAAgC;QAChC,MAAM,mBAAmB,GAAG,QAAQ;YAClC,CAAC,CAAC,2FAA2F;YAC7F,CAAC,CAAC,2EAA2E,CAAC;QAEhF,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACzD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG;gBACjB,WAAW;gBACX,gBAAgB;gBAChB,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB;aAC5D,CAAC;YAEF,0CAA0C;YAC1C,MAAM,eAAe,GAAG,kBAAkB;iBACvC,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,2CAA2C;YAC3C,MAAM,eAAe,GAAG;gBACtB,4BAA4B;gBAC5B,2BAA2B;aAC5B,CAAC;YAEF,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CACxC,CAAC;YAEF,4CAA4C;YAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CACvC,CAAC;YACF,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,YAAY,CAAC,CAAC;YAExD,MAAM,aAAa,GAAG,QAAQ;gBAC5B,CAAC,CAAC,YAAY,UAAU,CAAC,IAAI,CACzB,IAAI,CACL,yCAAyC;gBAC5C,CAAC,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC;YAEzE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,mBAAmB;QACnB,MAAM,eAAe,GAAG,QAAQ;YAC9B,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,yBAAyB,CAAC;QAE9B,MAAM,iBAAiB,GAAG,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC;QAEtE,2CAA2C;QAC3C,MAAM,eAAe,GAAG,QAAQ;YAC9B,CAAC,CAAC,iFAAiF;YACnF,CAAC,CAAC,uDAAuD,CAAC;QAE5D,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,eAAe,EAAE,CAAC;YACpB,yBAAyB;YACzB,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAG,aAAa;iBACpC,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,6CAA6C;YAC7C,MAAM,aAAa,GAAG;gBACpB,sBAAsB;gBACtB,wBAAwB;gBACxB,qBAAqB;gBACrB,qBAAqB;aACtB,CAAC;YAEF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CACxC,CAAC;YAEF,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CACzC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CACvC,CAAC;YAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7D,MAAM,aAAa,GAAG,iBAAiB,QAAQ,YAAY,eAAe,GAAG,CAAC;YAC9E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CACzD,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,aAAa,GAAG,iBAAiB,iBAAiB,CAAC,IAAI,CAC3D,IAAI,CACL,YAAY,eAAe,IAAI,CAAC;gBACjC,WAAW,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;gBAC1D,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAExD,wEAAwE;QACxE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,6CAA6C;QAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,mBAAmB,CAAC,EAAE,CAAC;YAC3D,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,wCAAwC;QACxC,MAAM,mBAAmB,GACvB,qDAAqD,CAAC;QACxD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEzD,IAAI,aAAa,EAAE,CAAC;YAClB,kCAAkC;YAClC,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,cAAc,GAAG,eAAe;iBACnC,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc,mBAAmB,CAAC,CAAC;YAE1D,MAAM,SAAS,GAAG,YAAY,cAAc,CAAC,IAAI,CAC/C,IAAI,CACL,uBAAuB,CAAC;YACzB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,MAAM,gBAAgB,GACpB,sDAAsD,CAAC;YACzD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAEnD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,mBAAmB,cAAc,wCAAwC,CAAC;gBAC5F,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,mBAAmB,CAAC,OAAe;QACzC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU,CAAC;QAC7C,MAAM,aAAa,GAAG,UAAU;YAC9B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,uBAAuB,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc;YAC9C,CAAC,CAAC,GAAG,cAAc,mBAAmB;YACtC,CAAC,CAAC,yBAAyB,CAAC;QAE9B,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAI,MAAM,CAC3B,mDAAmD,cAAc,YAAY,EAC7E,GAAG,CACJ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,4CAA4C;YAC5C,MAAM,cAAc,GAAG,IAAI,MAAM,CAC/B,gBAAgB,cAAc,sBAAsB,CACrD,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnC,qDAAqD;gBACrD,MAAM,gBAAgB,GAAG,gJAAgJ,cAAc,qBAAqB,aAAa,IAAI,YAAY,UAAU,CAAC;gBAEpP,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,UAAU,CAAC,CAAC,CAAC,EACb,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,CACjC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,UAAU,GAAG,UAAU,KAAK,UAAU,CAAC;QAE7C,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,MAAM,CAC3B,qEAAqE,cAAc,YAAY,EAC/F,GAAG,CACJ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,0CAA0C;YAC1C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC/C,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;gBACjE,MAAM,eAAe,GAAG,mBAAmB,gBAAgB,KAAK,CAAC;gBAEjE,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,UAAU,CAAC,CAAC,CAAC,EACb,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACxD,MAAM,YAAY,GAAG,cAAc;YACjC,CAAC,CAAC,GAAG,cAAc,mBAAmB;YACtC,CAAC,CAAC,yBAAyB,CAAC;QAE9B,mCAAmC;QACnC,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,qBAAqB,cAAc,sCAAsC,cAAc,oBAAoB,EAC3G,GAAG,CACJ,CAAC;QAEF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,oDAAoD;YACpD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;gBACtD,MAAM,OAAO,GAAG,eAAe,cAAc,gCAAgC,cAAc,wCAAwC,YAAY,IAAI,CAAC;gBACpJ,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iBAAiB,CAAC,OAAe;QACvC,mDAAmD;QACnD,MAAM,UAAU,GAAG,uDAAuD,CAAC;QAC3E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE1C,mCAAmC;QACnC,MAAM,aAAa,GACjB,oGAAoG,CAAC;QACvG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAE7C,MAAM,mBAAmB,GACvB,mFAAmF,CAAC;QACtF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,eAAe,GAAG,IAAI,MAAM,CAChC,kGAAkG,EAClG,GAAG,CACJ,CAAC;QACF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAEjD,iDAAiD;QACjD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAE3D,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,eAAe,CAAC,OAAe;QACrC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAExC,8CAA8C;QAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,8CAA8C;QAC9C,MAAM,UAAU,GAAG,IAAI,MAAM,CAC3B,YAAY,cAAc,kCAAkC,EAC5D,GAAG,CACJ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,GAAG;;;;;;;;;;;;;yBAaA,cAAc;;qCAEF,cAAc;;;;;;;;CAQlD,CAAC;YAEI,kCAAkC;YAClC,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAErD,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,cAAc,GAClB,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;oBACrC,UAAU;oBACV,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAErC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,UAAU,CAAC,CAAC,CAAC,EACb,SAAS,cAAc,YACrB,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAClC,IAAI,cAAc,GAAG,CACtB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,uBAAuB,CAAC,OAAe;QAC7C,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACxD,MAAM,YAAY,GAAG,cAAc;YACjC,CAAC,CAAC,GAAG,cAAc,mBAAmB;YACtC,CAAC,CAAC,yBAAyB,CAAC;QAE9B,yCAAyC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,uFAAuF;QACvF,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;QAClD,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAE3D,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG;;;;;;yCAMgB,YAAY;;;;;;;;;;;;;;IAcjD,CAAC;YAEC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,iBAAiB,CAAC,CAAC,CAAC,EACpB,iBAAiB,CAAC,CAAC,CAAC,GAAG,UAAU,CAClC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAxaD,oDAwaC"}
|