@decohere/scaffold 0.0.1-dev.18 → 0.0.1-dev.81
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/commonjs/src/add-api.action.js +39 -0
- package/commonjs/src/add-api.command.js +41 -0
- package/commonjs/src/add.command.js +24 -0
- package/commonjs/src/add.module.js +26 -0
- package/commonjs/src/cli.js +9 -0
- package/commonjs/src/create.command.js +24 -0
- package/commonjs/src/create.module.js +26 -0
- package/commonjs/src/domain/prompt.js +64 -0
- package/commonjs/src/index.js +38 -0
- package/commonjs/src/models/compose.model.js +150 -0
- package/commonjs/src/models/config-yaml.model.js +88 -0
- package/commonjs/src/models/const.js +32 -0
- package/commonjs/src/models/dev-container.model.js +116 -0
- package/commonjs/src/models/docker-image.model.js +259 -0
- package/commonjs/src/models/env-file.model.js +50 -0
- package/commonjs/src/models/gitignore.model.js +43 -0
- package/commonjs/src/models/launch-json.model.js +74 -0
- package/commonjs/src/models/package-json.model.js +149 -0
- package/commonjs/src/models/project.model.js +134 -0
- package/commonjs/src/models/source-file.js +6 -0
- package/commonjs/src/models/tsconfig.model.js +34 -0
- package/commonjs/src/models/vitest-config.model.js +35 -0
- package/commonjs/src/models/vscode-settings.model.js +31 -0
- package/commonjs/src/program.js +57 -0
- package/commonjs/src/resolve-target-dir.js +19 -0
- package/commonjs/src/services/scaffold.service.js +62 -0
- package/commonjs/src/version.js +57 -0
- package/commonjs/src/webapi/api-name.js +95 -0
- package/commonjs/src/webapi/cli-options.js +101 -0
- package/commonjs/src/webapi/const.js +50 -0
- package/commonjs/src/webapi/create-api.js +237 -0
- package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +166 -0
- package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
- package/commonjs/src/webapi/devcontainer/host-scripts.js +52 -0
- package/commonjs/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
- package/commonjs/src/webapi/devcontainer/templates/initialize.sh +169 -0
- package/commonjs/src/webapi/devcontainer/templates/post-create.sh +35 -0
- package/commonjs/src/webapi/devcontainer/templates/post-start.sh +65 -0
- package/commonjs/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
- package/commonjs/src/webapi/features/auth.feature.js +441 -0
- package/commonjs/src/webapi/features/auth0-cli.js +435 -0
- package/commonjs/src/webapi/features/biome-format.js +49 -0
- package/commonjs/src/webapi/features/database.feature.js +433 -0
- package/commonjs/src/webapi/features/finalize.feature.js +95 -0
- package/commonjs/src/webapi/features/postman.feature.js +324 -0
- package/commonjs/src/webapi/models/api-package-json.model.js +60 -0
- package/commonjs/src/webapi/models/auth-config.model.js +26 -0
- package/commonjs/src/webapi/models/controller-source-file.model.js +193 -0
- package/commonjs/src/webapi/models/github-ci.model.js +193 -0
- package/commonjs/src/webapi/models/main-source-file.model.js +167 -0
- package/commonjs/src/webapi/models/production-dockerfile.model.js +157 -0
- package/commonjs/src/webapi/models/sample-files.model.js +60 -0
- package/commonjs/src/webapi/models/webapi-image.model.js +27 -0
- package/commonjs/src/webapi/postman/hello-openapi.js +175 -0
- package/commonjs/src/webapi/postman/local-view.js +184 -0
- package/commonjs/src/webapi/postman/openapi-to-postman.js +202 -0
- package/commonjs/src/webapi/workspace-readme.js +110 -0
- package/commonjs/src/webapi.action.js +30 -0
- package/commonjs/src/webapi.command.js +45 -0
- package/es6/src/add-api.action.js +29 -0
- package/es6/src/add-api.command.js +31 -0
- package/es6/src/add.command.js +14 -0
- package/es6/src/add.module.js +16 -0
- package/es6/src/cli.js +5 -0
- package/es6/src/create.command.js +14 -0
- package/es6/src/create.module.js +16 -0
- package/es6/src/domain/prompt.js +43 -0
- package/es6/src/index.js +8 -0
- package/es6/src/models/compose.model.js +144 -0
- package/es6/src/models/config-yaml.model.js +76 -0
- package/es6/src/models/const.js +22 -0
- package/es6/src/models/dev-container.model.js +106 -0
- package/es6/src/models/docker-image.model.js +217 -0
- package/es6/src/models/env-file.model.js +46 -0
- package/es6/src/models/gitignore.model.js +33 -0
- package/es6/src/models/launch-json.model.js +64 -0
- package/es6/src/models/package-json.model.js +137 -0
- package/es6/src/models/project.model.js +119 -0
- package/es6/src/models/source-file.js +3 -0
- package/es6/src/models/tsconfig.model.js +24 -0
- package/es6/src/models/vitest-config.model.js +25 -0
- package/es6/src/models/vscode-settings.model.js +21 -0
- package/es6/src/program.js +39 -0
- package/es6/src/resolve-target-dir.js +9 -0
- package/es6/src/services/scaffold.service.js +52 -0
- package/es6/src/version.js +36 -0
- package/es6/src/webapi/api-name.js +59 -0
- package/es6/src/webapi/cli-options.js +36 -0
- package/es6/src/webapi/const.js +20 -0
- package/es6/src/webapi/create-api.js +217 -0
- package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +156 -0
- package/es6/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
- package/es6/src/webapi/devcontainer/host-scripts.js +31 -0
- package/es6/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
- package/es6/src/webapi/devcontainer/templates/initialize.sh +169 -0
- package/es6/src/webapi/devcontainer/templates/post-create.sh +35 -0
- package/es6/src/webapi/devcontainer/templates/post-start.sh +65 -0
- package/es6/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
- package/es6/src/webapi/features/auth.feature.js +390 -0
- package/es6/src/webapi/features/auth0-cli.js +375 -0
- package/es6/src/webapi/features/biome-format.js +42 -0
- package/es6/src/webapi/features/database.feature.js +423 -0
- package/es6/src/webapi/features/finalize.feature.js +85 -0
- package/es6/src/webapi/features/postman.feature.js +258 -0
- package/es6/src/webapi/models/api-package-json.model.js +55 -0
- package/es6/src/webapi/models/auth-config.model.js +22 -0
- package/es6/src/webapi/models/controller-source-file.model.js +184 -0
- package/es6/src/webapi/models/github-ci.model.js +186 -0
- package/es6/src/webapi/models/main-source-file.model.js +163 -0
- package/es6/src/webapi/models/production-dockerfile.model.js +148 -0
- package/es6/src/webapi/models/sample-files.model.js +42 -0
- package/es6/src/webapi/models/webapi-image.model.js +20 -0
- package/es6/src/webapi/postman/hello-openapi.js +168 -0
- package/es6/src/webapi/postman/local-view.js +169 -0
- package/es6/src/webapi/postman/openapi-to-postman.js +179 -0
- package/es6/src/webapi/workspace-readme.js +89 -0
- package/es6/src/webapi.action.js +20 -0
- package/es6/src/webapi.command.js +35 -0
- package/package.json +8 -8
- package/types/src/add-api.action.d.ts +13 -0
- package/types/src/add-api.command.d.ts +7 -0
- package/types/src/add.command.d.ts +6 -0
- package/types/src/add.module.d.ts +14 -0
- package/types/src/cli.d.ts +2 -0
- package/types/src/create.command.d.ts +6 -0
- package/types/src/create.module.d.ts +14 -0
- package/types/src/domain/prompt.d.ts +4 -0
- package/types/src/models/compose.model.d.ts +64 -0
- package/types/src/models/config-yaml.model.d.ts +27 -0
- package/types/src/models/const.d.ts +20 -0
- package/types/src/models/dev-container.model.d.ts +37 -0
- package/types/src/models/docker-image.model.d.ts +84 -0
- package/types/src/models/env-file.model.d.ts +16 -0
- package/types/src/models/gitignore.model.d.ts +7 -0
- package/types/src/models/launch-json.model.d.ts +7 -0
- package/types/src/models/package-json.model.d.ts +35 -0
- package/types/src/models/project.model.d.ts +60 -0
- package/{src/models/source-file.ts → types/src/models/source-file.d.ts} +4 -6
- package/types/src/models/tsconfig.model.d.ts +5 -0
- package/types/src/models/vitest-config.model.d.ts +5 -0
- package/types/src/models/vscode-settings.model.d.ts +7 -0
- package/types/src/program.d.ts +3 -0
- package/{src/resolve-target-dir.ts → types/src/resolve-target-dir.d.ts} +1 -4
- package/types/src/services/scaffold.service.d.ts +22 -0
- package/types/src/version.d.ts +6 -0
- package/types/src/webapi/api-name.d.ts +14 -0
- package/types/src/webapi/cli-options.d.ts +6 -0
- package/{src/webapi/const.ts → types/src/webapi/const.d.ts} +7 -21
- package/types/src/webapi/create-api.d.ts +15 -0
- package/types/src/webapi/devcontainer/codebase-rag-mcp.d.ts +32 -0
- package/types/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
- package/types/src/webapi/devcontainer/host-scripts.d.ts +7 -0
- package/types/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
- package/types/src/webapi/devcontainer/templates/initialize.sh +169 -0
- package/types/src/webapi/devcontainer/templates/post-create.sh +35 -0
- package/types/src/webapi/devcontainer/templates/post-start.sh +65 -0
- package/types/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
- package/types/src/webapi/features/auth.feature.d.ts +10 -0
- package/types/src/webapi/features/auth0-cli.d.ts +80 -0
- package/types/src/webapi/features/biome-format.d.ts +5 -0
- package/types/src/webapi/features/database.feature.d.ts +7 -0
- package/types/src/webapi/features/finalize.feature.d.ts +2 -0
- package/types/src/webapi/features/postman.feature.d.ts +16 -0
- package/types/src/webapi/models/api-package-json.model.d.ts +18 -0
- package/types/src/webapi/models/auth-config.model.d.ts +26 -0
- package/types/src/webapi/models/controller-source-file.model.d.ts +46 -0
- package/types/src/webapi/models/github-ci.model.d.ts +9 -0
- package/types/src/webapi/models/main-source-file.model.d.ts +54 -0
- package/types/src/webapi/models/production-dockerfile.model.d.ts +23 -0
- package/types/src/webapi/models/sample-files.model.d.ts +7 -0
- package/types/src/webapi/models/webapi-image.model.d.ts +12 -0
- package/types/src/webapi/postman/hello-openapi.d.ts +19 -0
- package/types/src/webapi/postman/local-view.d.ts +17 -0
- package/types/src/webapi/postman/openapi-to-postman.d.ts +62 -0
- package/types/src/webapi/workspace-readme.d.ts +18 -0
- package/types/src/webapi.action.d.ts +14 -0
- package/types/src/webapi.command.d.ts +11 -0
- package/src/add-api.action.ts +0 -25
- package/src/add-api.command.ts +0 -31
- package/src/add.command.ts +0 -20
- package/src/add.module.ts +0 -11
- package/src/cli.ts +0 -4
- package/src/create.command.ts +0 -20
- package/src/create.module.ts +0 -11
- package/src/domain/prompt.ts +0 -50
- package/src/models/compose.model.ts +0 -205
- package/src/models/config-yaml.model.ts +0 -83
- package/src/models/const.ts +0 -20
- package/src/models/dev-container.model.ts +0 -136
- package/src/models/docker-image.model.ts +0 -343
- package/src/models/env-file.model.ts +0 -45
- package/src/models/gitignore.model.ts +0 -35
- package/src/models/launch-json.model.ts +0 -60
- package/src/models/package-json.model.ts +0 -169
- package/src/models/project.model.ts +0 -141
- package/src/models/tsconfig.model.ts +0 -29
- package/src/models/vitest-config.model.ts +0 -26
- package/src/models/vscode-settings.model.ts +0 -24
- package/src/program.ts +0 -63
- package/src/services/scaffold.service.ts +0 -89
- package/src/version.ts +0 -56
- package/src/webapi/api-name.ts +0 -73
- package/src/webapi/cli-options.ts +0 -56
- package/src/webapi/create-api.ts +0 -275
- package/src/webapi/devcontainer/host-scripts.ts +0 -35
- package/src/webapi/features/auth.feature.ts +0 -454
- package/src/webapi/features/auth0-cli.ts +0 -421
- package/src/webapi/features/biome-format.ts +0 -34
- package/src/webapi/features/database.feature.ts +0 -522
- package/src/webapi/features/finalize.feature.ts +0 -112
- package/src/webapi/features/postman.feature.ts +0 -287
- package/src/webapi/models/api-package-json.model.ts +0 -60
- package/src/webapi/models/auth-config.model.ts +0 -36
- package/src/webapi/models/controller-source-file.model.ts +0 -232
- package/src/webapi/models/github-ci.model.ts +0 -188
- package/src/webapi/models/main-source-file.model.ts +0 -208
- package/src/webapi/models/production-dockerfile.model.ts +0 -162
- package/src/webapi/models/sample-files.model.ts +0 -45
- package/src/webapi/models/webapi-image.model.ts +0 -21
- package/src/webapi/postman/hello-openapi.ts +0 -92
- package/src/webapi/postman/local-view.ts +0 -195
- package/src/webapi/postman/openapi-to-postman.ts +0 -208
- package/src/webapi/workspace-readme.ts +0 -192
- package/src/webapi.action.ts +0 -22
- package/src/webapi.command.ts +0 -41
- package/tests/auth-postman.wiring.spec.ts +0 -263
- package/tests/auth0-cli.spec.ts +0 -232
- package/tests/biome-format.spec.ts +0 -49
- package/tests/cli.integration.spec.ts +0 -658
- package/tests/compose.model.spec.ts +0 -51
- package/tests/container-image.model.spec.ts +0 -162
- package/tests/dev-container.model.spec.ts +0 -29
- package/tests/devcontainer-base-image.spec.ts +0 -32
- package/tests/hello-di-inject.scaffold.spec.ts +0 -18
- package/tests/hello-route.contract.spec.ts +0 -94
- package/tests/package-json.order.spec.ts +0 -59
- package/tests/postman-from-openapi.spec.ts +0 -197
- package/tests/seed-devcontainer-templates.ts +0 -40
- package/tests/webapi/devcontainer/codebase-rag-mcp.spec.ts +0 -96
- /package/{src/index.ts → types/src/index.d.ts} +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get ControllerMethod () {
|
|
13
|
+
return ControllerMethod;
|
|
14
|
+
},
|
|
15
|
+
get ControllerSourceFile () {
|
|
16
|
+
return ControllerSourceFile;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _const = require("../../models/const.js");
|
|
20
|
+
/** Tracks named imports from a single module path, split into values and types. */ class ImportGroup {
|
|
21
|
+
_values = [];
|
|
22
|
+
_types = [];
|
|
23
|
+
add(name, typeOnly = false) {
|
|
24
|
+
if (typeOnly) {
|
|
25
|
+
// Value import already present — value wins, skip
|
|
26
|
+
if (!this._values.includes(name) && !this._types.includes(name)) {
|
|
27
|
+
this._types.push(name);
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
// Promote: remove from types if it was previously type-only
|
|
31
|
+
const typeIdx = this._types.indexOf(name);
|
|
32
|
+
if (typeIdx !== -1) this._types.splice(typeIdx, 1);
|
|
33
|
+
if (!this._values.includes(name)) this._values.push(name);
|
|
34
|
+
}
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
render(from) {
|
|
38
|
+
const values = [
|
|
39
|
+
...this._values
|
|
40
|
+
].sort();
|
|
41
|
+
const types = [
|
|
42
|
+
...this._types
|
|
43
|
+
].sort().map((n)=>`type ${n}`);
|
|
44
|
+
return `import { ${[
|
|
45
|
+
...values,
|
|
46
|
+
...types
|
|
47
|
+
].join(", ")} } from "${from}";`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
class ControllerMethod {
|
|
51
|
+
name;
|
|
52
|
+
_httpDecorator;
|
|
53
|
+
_params;
|
|
54
|
+
_extraDecorators = [];
|
|
55
|
+
_body;
|
|
56
|
+
_isAsync;
|
|
57
|
+
constructor(name, _httpDecorator, _params, isAsync, body){
|
|
58
|
+
this.name = name;
|
|
59
|
+
this._httpDecorator = _httpDecorator;
|
|
60
|
+
this._params = _params;
|
|
61
|
+
this._isAsync = isAsync;
|
|
62
|
+
this._body = body;
|
|
63
|
+
}
|
|
64
|
+
addDecorator(decorator) {
|
|
65
|
+
this._extraDecorators.push(decorator);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/** Replace the method body lines (used by features that extend generated behaviour). */ setBody(body) {
|
|
69
|
+
this._body = body;
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
setAsync(isAsync = true) {
|
|
73
|
+
this._isAsync = isAsync;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
render() {
|
|
77
|
+
const lines = [];
|
|
78
|
+
for (const d of this._extraDecorators){
|
|
79
|
+
lines.push(`\t${d}`);
|
|
80
|
+
}
|
|
81
|
+
lines.push(`\t${this._httpDecorator}`);
|
|
82
|
+
const asyncKw = this._isAsync ? "async " : "";
|
|
83
|
+
lines.push(`\tpublic ${asyncKw}${this.name}(${this._params}) {`);
|
|
84
|
+
for (const line of this._body){
|
|
85
|
+
lines.push(`\t\t${line}`);
|
|
86
|
+
}
|
|
87
|
+
lines.push("\t}");
|
|
88
|
+
return lines;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
class ControllerSourceFile {
|
|
92
|
+
key = _const.WELL_KNOWN_FILES.CONTROLLER_TS;
|
|
93
|
+
_cortexImports = new ImportGroup().add("Controller").add("Delete").add("Field").add("Get").add("Param").add("Post").add("Put").add("Query");
|
|
94
|
+
_extraImportGroups = new Map([
|
|
95
|
+
[
|
|
96
|
+
"@decohere/crucible/decorators",
|
|
97
|
+
new ImportGroup().add("inject")
|
|
98
|
+
]
|
|
99
|
+
]);
|
|
100
|
+
_classDecorators = [];
|
|
101
|
+
/** Explicit @inject — design:paramtypes can collapse to Object under SWC when the class is still undefined at decorate time. */ _ctorParams = [
|
|
102
|
+
'@inject("SampleService") private readonly sample: SampleService'
|
|
103
|
+
];
|
|
104
|
+
_methods = new Map([
|
|
105
|
+
[
|
|
106
|
+
"getAll",
|
|
107
|
+
new ControllerMethod("getAll", "@Get()", '@Query("filter") filter: string', true, [
|
|
108
|
+
"const greeting = await this.sample.getGreeting();",
|
|
109
|
+
"return { filter, message: greeting };"
|
|
110
|
+
])
|
|
111
|
+
],
|
|
112
|
+
[
|
|
113
|
+
"getOne",
|
|
114
|
+
new ControllerMethod("getOne", '@Get("/:id")', '@Param("id") id: string', false, // biome-ignore lint/suspicious/noTemplateCurlyInString: template literal in generated code
|
|
115
|
+
[
|
|
116
|
+
"return { id, message: `Hello ${id}!` };"
|
|
117
|
+
])
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
"create",
|
|
121
|
+
new ControllerMethod("create", "@Post()", "body: HelloBody", false, [
|
|
122
|
+
"return { message: body.message };"
|
|
123
|
+
])
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
"update",
|
|
127
|
+
new ControllerMethod("update", '@Put("/:id")', '@Param("id") id: string, body: HelloBody', false, [
|
|
128
|
+
"return { id, message: body.message };"
|
|
129
|
+
])
|
|
130
|
+
],
|
|
131
|
+
[
|
|
132
|
+
"remove",
|
|
133
|
+
new ControllerMethod("remove", '@Delete("/:id")', '@Param("id") id: string', false, [
|
|
134
|
+
"return { id, deleted: true };"
|
|
135
|
+
])
|
|
136
|
+
]
|
|
137
|
+
]);
|
|
138
|
+
/** Retrieve a method by name to mutate its decorators. */ getMethod(name) {
|
|
139
|
+
const m = this._methods.get(name);
|
|
140
|
+
if (m == null) throw new Error(`No method '${name}' on ControllerSourceFile`);
|
|
141
|
+
return m;
|
|
142
|
+
}
|
|
143
|
+
/** Add a class-level decorator (e.g. `@Authorize`). */ addDecorator(decorator) {
|
|
144
|
+
this._classDecorators.push(decorator);
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
/** Add a named import from `@decohere/cortex`. */ addCortexImport(name, typeOnly = false) {
|
|
148
|
+
this._cortexImports.add(name, typeOnly);
|
|
149
|
+
return this;
|
|
150
|
+
}
|
|
151
|
+
/** Add a named import from any other module. */ addImport(name, from, typeOnly = false) {
|
|
152
|
+
const group = this._extraImportGroups.get(from) ?? new ImportGroup();
|
|
153
|
+
group.add(name, typeOnly);
|
|
154
|
+
this._extraImportGroups.set(from, group);
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
/** Add a constructor parameter (e.g. an injected dependency). */ addConstructorParam(param) {
|
|
158
|
+
this._ctorParams.push(param);
|
|
159
|
+
return this;
|
|
160
|
+
}
|
|
161
|
+
files() {
|
|
162
|
+
const lines = [
|
|
163
|
+
this._cortexImports.render("@decohere/cortex"),
|
|
164
|
+
'import { SampleService } from "../services/sample.service.js";'
|
|
165
|
+
];
|
|
166
|
+
for (const [from, group] of this._extraImportGroups){
|
|
167
|
+
lines.push(group.render(from));
|
|
168
|
+
}
|
|
169
|
+
lines.push("", "class HelloBody {", '\t@Field("body", "message")', "\tpublic message!: string;", "}", "");
|
|
170
|
+
for (const d of this._classDecorators){
|
|
171
|
+
lines.push(d);
|
|
172
|
+
}
|
|
173
|
+
lines.push('@Controller({ prefix: "/hello" })', "export class HelloController {", "");
|
|
174
|
+
lines.push("\tpublic constructor(");
|
|
175
|
+
for (const p of this._ctorParams){
|
|
176
|
+
lines.push(`\t\t${p},`);
|
|
177
|
+
}
|
|
178
|
+
lines.push("\t) {}");
|
|
179
|
+
lines.push("");
|
|
180
|
+
for (const method of this._methods.values()){
|
|
181
|
+
lines.push(...method.render(), "");
|
|
182
|
+
}
|
|
183
|
+
lines.push("}", "");
|
|
184
|
+
return [
|
|
185
|
+
{
|
|
186
|
+
filePath: "src/controllers/hello.controller.ts",
|
|
187
|
+
content: lines.join("\n")
|
|
188
|
+
}
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc291cmNlLWZpbGUuanNcIjtcblxuLyoqIFRyYWNrcyBuYW1lZCBpbXBvcnRzIGZyb20gYSBzaW5nbGUgbW9kdWxlIHBhdGgsIHNwbGl0IGludG8gdmFsdWVzIGFuZCB0eXBlcy4gKi9cbmNsYXNzIEltcG9ydEdyb3VwIHtcblx0cHJpdmF0ZSByZWFkb25seSBfdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90eXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRwdWJsaWMgYWRkKG5hbWU6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdGlmICh0eXBlT25seSkge1xuXHRcdFx0Ly8gVmFsdWUgaW1wb3J0IGFscmVhZHkgcHJlc2VudCDigJQgdmFsdWUgd2lucywgc2tpcFxuXHRcdFx0aWYgKCF0aGlzLl92YWx1ZXMuaW5jbHVkZXMobmFtZSkgJiYgIXRoaXMuX3R5cGVzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuX3R5cGVzLnB1c2gobmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFByb21vdGU6IHJlbW92ZSBmcm9tIHR5cGVzIGlmIGl0IHdhcyBwcmV2aW91c2x5IHR5cGUtb25seVxuXHRcdFx0Y29uc3QgdHlwZUlkeCA9IHRoaXMuX3R5cGVzLmluZGV4T2YobmFtZSk7XG5cdFx0XHRpZiAodHlwZUlkeCAhPT0gLTEpIHRoaXMuX3R5cGVzLnNwbGljZSh0eXBlSWR4LCAxKTtcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpKSB0aGlzLl92YWx1ZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVuZGVyKGZyb206IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVzID0gWy4uLnRoaXMuX3ZhbHVlc10uc29ydCgpO1xuXHRcdGNvbnN0IHR5cGVzID0gWy4uLnRoaXMuX3R5cGVzXS5zb3J0KCkubWFwKChuKSA9PiBgdHlwZSAke259YCk7XG5cdFx0cmV0dXJuIGBpbXBvcnQgeyAke1suLi52YWx1ZXMsIC4uLnR5cGVzXS5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7ZnJvbX1cIjtgO1xuXHR9XG59XG5cbi8qKlxuICogQSBjb250cm9sbGVyIG1ldGhvZC4gRmVhdHVyZXMgY2FsbCBgYWRkRGVjb3JhdG9yKClgIHRvIHByZXBlbmQgZGVjb3JhdG9yc1xuICogYmVmb3JlIHRoZSBIVFRQIHZlcmIgZGVjb3JhdG9yIChlLmcuIGBAQWxsb3dBbm9ueW1vdXNgIGJlZm9yZSBgQEdldCgpYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyTWV0aG9kIHtcblx0cHJpdmF0ZSByZWFkb25seSBfZXh0cmFEZWNvcmF0b3JzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIF9ib2R5OiBzdHJpbmdbXTtcblx0cHJpdmF0ZSBfaXNBc3luYzogYm9vbGVhbjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9odHRwRGVjb3JhdG9yOiBzdHJpbmcsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBfcGFyYW1zOiBzdHJpbmcsXG5cdFx0aXNBc3luYzogYm9vbGVhbixcblx0XHRib2R5OiBzdHJpbmdbXSxcblx0KSB7XG5cdFx0dGhpcy5faXNBc3luYyA9IGlzQXN5bmM7XG5cdFx0dGhpcy5fYm9keSA9IGJvZHk7XG5cdH1cblxuXHRwdWJsaWMgYWRkRGVjb3JhdG9yKGRlY29yYXRvcjogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fZXh0cmFEZWNvcmF0b3JzLnB1c2goZGVjb3JhdG9yKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBSZXBsYWNlIHRoZSBtZXRob2QgYm9keSBsaW5lcyAodXNlZCBieSBmZWF0dXJlcyB0aGF0IGV4dGVuZCBnZW5lcmF0ZWQgYmVoYXZpb3VyKS4gKi9cblx0cHVibGljIHNldEJvZHkoYm9keTogc3RyaW5nW10pOiB0aGlzIHtcblx0XHR0aGlzLl9ib2R5ID0gYm9keTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXRBc3luYyhpc0FzeW5jID0gdHJ1ZSk6IHRoaXMge1xuXHRcdHRoaXMuX2lzQXN5bmMgPSBpc0FzeW5jO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcigpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBkIG9mIHRoaXMuX2V4dHJhRGVjb3JhdG9ycykge1xuXHRcdFx0bGluZXMucHVzaChgXFx0JHtkfWApO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKGBcXHQke3RoaXMuX2h0dHBEZWNvcmF0b3J9YCk7XG5cdFx0Y29uc3QgYXN5bmNLdyA9IHRoaXMuX2lzQXN5bmMgPyBcImFzeW5jIFwiIDogXCJcIjtcblx0XHRsaW5lcy5wdXNoKGBcXHRwdWJsaWMgJHthc3luY0t3fSR7dGhpcy5uYW1lfSgke3RoaXMuX3BhcmFtc30pIHtgKTtcblx0XHRmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5fYm9keSkge1xuXHRcdFx0bGluZXMucHVzaChgXFx0XFx0JHtsaW5lfWApO1xuXHRcdH1cblx0XHRsaW5lcy5wdXNoKFwiXFx0fVwiKTtcblx0XHRyZXR1cm4gbGluZXM7XG5cdH1cbn1cblxuLyoqXG4gKiBNb2RlbCBmb3IgYHByb2plY3RzL2FwaS9zcmMvY29udHJvbGxlcnMvaGVsbG8uY29udHJvbGxlci50c2AuXG4gKlxuICogUHJlLWluaXRpYWxpc2VkIHdpdGggYWxsIHJvdXRlcyBhbmQgdGhlaXIgSFRUUCBkZWNvcmF0b3JzLiBGZWF0dXJlcyBtdXRhdGVcbiAqIHRoZSBtb2RlbCB2aWEgYGdldE1ldGhvZChuYW1lKS5hZGREZWNvcmF0b3IoLi4uKWAsIGBhZGREZWNvcmF0b3IoLi4uKWAgKGNsYXNzXG4gKiBsZXZlbCksIGBhZGRDb3J0ZXhJbXBvcnQoLi4uKWAsIGBhZGRJbXBvcnQoLi4uKWAsIGFuZCBgYWRkQ29uc3RydWN0b3JQYXJhbSguLi4pYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJTb3VyY2VGaWxlIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkNPTlRST0xMRVJfVFM7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfY29ydGV4SW1wb3J0cyA9IG5ldyBJbXBvcnRHcm91cCgpXG5cdFx0LmFkZChcIkNvbnRyb2xsZXJcIilcblx0XHQuYWRkKFwiRGVsZXRlXCIpXG5cdFx0LmFkZChcIkZpZWxkXCIpXG5cdFx0LmFkZChcIkdldFwiKVxuXHRcdC5hZGQoXCJQYXJhbVwiKVxuXHRcdC5hZGQoXCJQb3N0XCIpXG5cdFx0LmFkZChcIlB1dFwiKVxuXHRcdC5hZGQoXCJRdWVyeVwiKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9leHRyYUltcG9ydEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBJbXBvcnRHcm91cD4oW1xuXHRcdFtcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCIsIG5ldyBJbXBvcnRHcm91cCgpLmFkZChcImluamVjdFwiKV0sXG5cdF0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jbGFzc0RlY29yYXRvcnM6IHN0cmluZ1tdID0gW107XG5cdC8qKiBFeHBsaWNpdCBAaW5qZWN0IOKAlCBkZXNpZ246cGFyYW10eXBlcyBjYW4gY29sbGFwc2UgdG8gT2JqZWN0IHVuZGVyIFNXQyB3aGVuIHRoZSBjbGFzcyBpcyBzdGlsbCB1bmRlZmluZWQgYXQgZGVjb3JhdGUgdGltZS4gKi9cblx0cHJpdmF0ZSByZWFkb25seSBfY3RvclBhcmFtczogc3RyaW5nW10gPSBbXG5cdFx0J0BpbmplY3QoXCJTYW1wbGVTZXJ2aWNlXCIpIHByaXZhdGUgcmVhZG9ubHkgc2FtcGxlOiBTYW1wbGVTZXJ2aWNlJyxcblx0XTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9tZXRob2RzID0gbmV3IE1hcDxzdHJpbmcsIENvbnRyb2xsZXJNZXRob2Q+KFtcblx0XHRbXG5cdFx0XHRcImdldEFsbFwiLFxuXHRcdFx0bmV3IENvbnRyb2xsZXJNZXRob2QoXCJnZXRBbGxcIiwgXCJAR2V0KClcIiwgJ0BRdWVyeShcImZpbHRlclwiKSBmaWx0ZXI6IHN0cmluZycsIHRydWUsIFtcblx0XHRcdFx0XCJjb25zdCBncmVldGluZyA9IGF3YWl0IHRoaXMuc2FtcGxlLmdldEdyZWV0aW5nKCk7XCIsXG5cdFx0XHRcdFwicmV0dXJuIHsgZmlsdGVyLCBtZXNzYWdlOiBncmVldGluZyB9O1wiLFxuXHRcdFx0XSksXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRcImdldE9uZVwiLFxuXHRcdFx0bmV3IENvbnRyb2xsZXJNZXRob2QoXG5cdFx0XHRcdFwiZ2V0T25lXCIsXG5cdFx0XHRcdCdAR2V0KFwiLzppZFwiKScsXG5cdFx0XHRcdCdAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nJyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IHRlbXBsYXRlIGxpdGVyYWwgaW4gZ2VuZXJhdGVkIGNvZGVcblx0XHRcdFx0W1wicmV0dXJuIHsgaWQsIG1lc3NhZ2U6IGBIZWxsbyAke2lkfSFgIH07XCJdLFxuXHRcdFx0KSxcblx0XHRdLFxuXHRcdFtcblx0XHRcdFwiY3JlYXRlXCIsXG5cdFx0XHRuZXcgQ29udHJvbGxlck1ldGhvZChcImNyZWF0ZVwiLCBcIkBQb3N0KClcIiwgXCJib2R5OiBIZWxsb0JvZHlcIiwgZmFsc2UsIFtcblx0XHRcdFx0XCJyZXR1cm4geyBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcIixcblx0XHRcdF0pLFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0XCJ1cGRhdGVcIixcblx0XHRcdG5ldyBDb250cm9sbGVyTWV0aG9kKFxuXHRcdFx0XHRcInVwZGF0ZVwiLFxuXHRcdFx0XHQnQFB1dChcIi86aWRcIiknLFxuXHRcdFx0XHQnQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZywgYm9keTogSGVsbG9Cb2R5Jyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFtcInJldHVybiB7IGlkLCBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcIl0sXG5cdFx0XHQpLFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0XCJyZW1vdmVcIixcblx0XHRcdG5ldyBDb250cm9sbGVyTWV0aG9kKFwicmVtb3ZlXCIsICdARGVsZXRlKFwiLzppZFwiKScsICdAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nJywgZmFsc2UsIFtcblx0XHRcdFx0XCJyZXR1cm4geyBpZCwgZGVsZXRlZDogdHJ1ZSB9O1wiLFxuXHRcdFx0XSksXG5cdFx0XSxcblx0XSk7XG5cblx0LyoqIFJldHJpZXZlIGEgbWV0aG9kIGJ5IG5hbWUgdG8gbXV0YXRlIGl0cyBkZWNvcmF0b3JzLiAqL1xuXHRwdWJsaWMgZ2V0TWV0aG9kKG5hbWU6IHN0cmluZyk6IENvbnRyb2xsZXJNZXRob2Qge1xuXHRcdGNvbnN0IG0gPSB0aGlzLl9tZXRob2RzLmdldChuYW1lKTtcblx0XHRpZiAobSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoYE5vIG1ldGhvZCAnJHtuYW1lfScgb24gQ29udHJvbGxlclNvdXJjZUZpbGVgKTtcblx0XHRyZXR1cm4gbTtcblx0fVxuXG5cdC8qKiBBZGQgYSBjbGFzcy1sZXZlbCBkZWNvcmF0b3IgKGUuZy4gYEBBdXRob3JpemVgKS4gKi9cblx0cHVibGljIGFkZERlY29yYXRvcihkZWNvcmF0b3I6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2NsYXNzRGVjb3JhdG9ycy5wdXNoKGRlY29yYXRvcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQWRkIGEgbmFtZWQgaW1wb3J0IGZyb20gYEBkZWNvaGVyZS9jb3J0ZXhgLiAqL1xuXHRwdWJsaWMgYWRkQ29ydGV4SW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdHRoaXMuX2NvcnRleEltcG9ydHMuYWRkKG5hbWUsIHR5cGVPbmx5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGQgYSBuYW1lZCBpbXBvcnQgZnJvbSBhbnkgb3RoZXIgbW9kdWxlLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KG5hbWU6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLl9leHRyYUltcG9ydEdyb3Vwcy5nZXQoZnJvbSkgPz8gbmV3IEltcG9ydEdyb3VwKCk7XG5cdFx0Z3JvdXAuYWRkKG5hbWUsIHR5cGVPbmx5KTtcblx0XHR0aGlzLl9leHRyYUltcG9ydEdyb3Vwcy5zZXQoZnJvbSwgZ3JvdXApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAoZS5nLiBhbiBpbmplY3RlZCBkZXBlbmRlbmN5KS4gKi9cblx0cHVibGljIGFkZENvbnN0cnVjdG9yUGFyYW0ocGFyYW06IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2N0b3JQYXJhbXMucHVzaChwYXJhbSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG5cdFx0XHR0aGlzLl9jb3J0ZXhJbXBvcnRzLnJlbmRlcihcIkBkZWNvaGVyZS9jb3J0ZXhcIiksXG5cdFx0XHQnaW1wb3J0IHsgU2FtcGxlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zYW1wbGUuc2VydmljZS5qc1wiOycsXG5cdFx0XTtcblxuXHRcdGZvciAoY29uc3QgW2Zyb20sIGdyb3VwXSBvZiB0aGlzLl9leHRyYUltcG9ydEdyb3Vwcykge1xuXHRcdFx0bGluZXMucHVzaChncm91cC5yZW5kZXIoZnJvbSkpO1xuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJjbGFzcyBIZWxsb0JvZHkge1wiLFxuXHRcdFx0J1xcdEBGaWVsZChcImJvZHlcIiwgXCJtZXNzYWdlXCIpJyxcblx0XHRcdFwiXFx0cHVibGljIG1lc3NhZ2UhOiBzdHJpbmc7XCIsXG5cdFx0XHRcIn1cIixcblx0XHRcdFwiXCIsXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgZCBvZiB0aGlzLl9jbGFzc0RlY29yYXRvcnMpIHtcblx0XHRcdGxpbmVzLnB1c2goZCk7XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goJ0BDb250cm9sbGVyKHsgcHJlZml4OiBcIi9oZWxsb1wiIH0pJywgXCJleHBvcnQgY2xhc3MgSGVsbG9Db250cm9sbGVyIHtcIiwgXCJcIik7XG5cblx0XHRsaW5lcy5wdXNoKFwiXFx0cHVibGljIGNvbnN0cnVjdG9yKFwiKTtcblx0XHRmb3IgKGNvbnN0IHAgb2YgdGhpcy5fY3RvclBhcmFtcykge1xuXHRcdFx0bGluZXMucHVzaChgXFx0XFx0JHtwfSxgKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaChcIlxcdCkge31cIik7XG5cdFx0bGluZXMucHVzaChcIlwiKTtcblxuXHRcdGZvciAoY29uc3QgbWV0aG9kIG9mIHRoaXMuX21ldGhvZHMudmFsdWVzKCkpIHtcblx0XHRcdGxpbmVzLnB1c2goLi4ubWV0aG9kLnJlbmRlcigpLCBcIlwiKTtcblx0XHR9XG5cblx0XHRsaW5lcy5wdXNoKFwifVwiLCBcIlwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9jb250cm9sbGVycy9oZWxsby5jb250cm9sbGVyLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IGxpbmVzLmpvaW4oXCJcXG5cIiksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDb250cm9sbGVyTWV0aG9kIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJJbXBvcnRHcm91cCIsIl92YWx1ZXMiLCJfdHlwZXMiLCJhZGQiLCJuYW1lIiwidHlwZU9ubHkiLCJpbmNsdWRlcyIsInB1c2giLCJ0eXBlSWR4IiwiaW5kZXhPZiIsInNwbGljZSIsInJlbmRlciIsImZyb20iLCJ2YWx1ZXMiLCJzb3J0IiwidHlwZXMiLCJtYXAiLCJuIiwiam9pbiIsIl9leHRyYURlY29yYXRvcnMiLCJfYm9keSIsIl9pc0FzeW5jIiwiX2h0dHBEZWNvcmF0b3IiLCJfcGFyYW1zIiwiaXNBc3luYyIsImJvZHkiLCJhZGREZWNvcmF0b3IiLCJkZWNvcmF0b3IiLCJzZXRCb2R5Iiwic2V0QXN5bmMiLCJsaW5lcyIsImQiLCJhc3luY0t3IiwibGluZSIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJDT05UUk9MTEVSX1RTIiwiX2NvcnRleEltcG9ydHMiLCJfZXh0cmFJbXBvcnRHcm91cHMiLCJNYXAiLCJfY2xhc3NEZWNvcmF0b3JzIiwiX2N0b3JQYXJhbXMiLCJfbWV0aG9kcyIsImdldE1ldGhvZCIsIm0iLCJnZXQiLCJFcnJvciIsImFkZENvcnRleEltcG9ydCIsImFkZEltcG9ydCIsImdyb3VwIiwic2V0IiwiYWRkQ29uc3RydWN0b3JQYXJhbSIsInBhcmFtIiwiZmlsZXMiLCJwIiwibWV0aG9kIiwiZmlsZVBhdGgiLCJjb250ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWtDYUE7ZUFBQUE7O1FBdURBQztlQUFBQTs7O3VCQXpGb0I7QUFHakMsaUZBQWlGLEdBQ2pG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
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "GithubCiWorkflows", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return GithubCiWorkflows;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _const = require("../../models/const.js");
|
|
12
|
+
class GithubCiWorkflows {
|
|
13
|
+
key = _const.WELL_KNOWN_FILES.GITHUB_CI;
|
|
14
|
+
files() {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
filePath: ".github/actions/setup-node-pnpm/action.yml",
|
|
18
|
+
content: `name: Setup Node + pnpm
|
|
19
|
+
description: Install pnpm and Node, configure npm registry auth, install deps
|
|
20
|
+
inputs:
|
|
21
|
+
node-version:
|
|
22
|
+
description: Node.js version
|
|
23
|
+
required: false
|
|
24
|
+
default: "24"
|
|
25
|
+
pnpm-version:
|
|
26
|
+
description: pnpm version
|
|
27
|
+
required: false
|
|
28
|
+
default: "10"
|
|
29
|
+
install:
|
|
30
|
+
description: Run pnpm install --frozen-lockfile
|
|
31
|
+
required: false
|
|
32
|
+
default: "true"
|
|
33
|
+
|
|
34
|
+
runs:
|
|
35
|
+
using: composite
|
|
36
|
+
steps:
|
|
37
|
+
- uses: pnpm/action-setup@v4
|
|
38
|
+
with:
|
|
39
|
+
version: \${{ inputs.pnpm-version }}
|
|
40
|
+
|
|
41
|
+
- uses: actions/setup-node@v4
|
|
42
|
+
with:
|
|
43
|
+
node-version: \${{ inputs.node-version }}
|
|
44
|
+
cache: pnpm
|
|
45
|
+
cache-dependency-path: pnpm-lock.yaml
|
|
46
|
+
|
|
47
|
+
- name: Configure npm auth
|
|
48
|
+
shell: bash
|
|
49
|
+
run: |
|
|
50
|
+
if [[ -n "\${NODE_AUTH_TOKEN:-}" ]]; then
|
|
51
|
+
echo "//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}" >> .npmrc
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
- name: Install dependencies
|
|
55
|
+
if: inputs.install == 'true'
|
|
56
|
+
shell: bash
|
|
57
|
+
run: |
|
|
58
|
+
if [[ -f pnpm-lock.yaml ]]; then
|
|
59
|
+
pnpm install --frozen-lockfile
|
|
60
|
+
else
|
|
61
|
+
pnpm install
|
|
62
|
+
fi
|
|
63
|
+
`
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
filePath: ".github/workflows/ci.yml",
|
|
67
|
+
content: `name: CI
|
|
68
|
+
on:
|
|
69
|
+
push:
|
|
70
|
+
branches:
|
|
71
|
+
- "*"
|
|
72
|
+
pull_request:
|
|
73
|
+
workflow_dispatch:
|
|
74
|
+
concurrency:
|
|
75
|
+
group: ci-\${{ github.ref }}
|
|
76
|
+
cancel-in-progress: true
|
|
77
|
+
env:
|
|
78
|
+
NODE_AUTH_TOKEN: \${{ secrets.NODE_AUTH_TOKEN }}
|
|
79
|
+
SCRIBE_LOG_LEVEL: info
|
|
80
|
+
|
|
81
|
+
jobs:
|
|
82
|
+
lint:
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
timeout-minutes: 15
|
|
85
|
+
permissions:
|
|
86
|
+
contents: read
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/checkout@v4
|
|
89
|
+
with:
|
|
90
|
+
fetch-depth: 1
|
|
91
|
+
|
|
92
|
+
- uses: ./.github/actions/setup-node-pnpm
|
|
93
|
+
|
|
94
|
+
- name: Lint and typecheck
|
|
95
|
+
run: |
|
|
96
|
+
set +e
|
|
97
|
+
pnpm run lint:check &
|
|
98
|
+
lint_pid=$!
|
|
99
|
+
pnpm run typecheck &
|
|
100
|
+
tsc_pid=$!
|
|
101
|
+
wait "$lint_pid"
|
|
102
|
+
lint_code=$?
|
|
103
|
+
wait "$tsc_pid"
|
|
104
|
+
tsc_code=$?
|
|
105
|
+
set -e
|
|
106
|
+
if [[ "$lint_code" -ne 0 || "$tsc_code" -ne 0 ]]; then
|
|
107
|
+
exit 1
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
test:
|
|
111
|
+
runs-on: ubuntu-latest
|
|
112
|
+
timeout-minutes: 20
|
|
113
|
+
permissions:
|
|
114
|
+
contents: read
|
|
115
|
+
steps:
|
|
116
|
+
- uses: actions/checkout@v4
|
|
117
|
+
with:
|
|
118
|
+
fetch-depth: 1
|
|
119
|
+
|
|
120
|
+
- uses: ./.github/actions/setup-node-pnpm
|
|
121
|
+
|
|
122
|
+
- name: Test
|
|
123
|
+
run: pnpm test
|
|
124
|
+
|
|
125
|
+
- name: Build (default branch)
|
|
126
|
+
if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
|
|
127
|
+
run: pnpm run build
|
|
128
|
+
|
|
129
|
+
ci:
|
|
130
|
+
needs: [lint, test]
|
|
131
|
+
if: always()
|
|
132
|
+
runs-on: ubuntu-latest
|
|
133
|
+
timeout-minutes: 5
|
|
134
|
+
steps:
|
|
135
|
+
- name: Aggregate
|
|
136
|
+
run: |
|
|
137
|
+
if [[ "\${{ needs.lint.result }}" != "success" || "\${{ needs.test.result }}" != "success" ]]; then
|
|
138
|
+
echo "CI failed (lint=\${{ needs.lint.result }} test=\${{ needs.test.result }})"
|
|
139
|
+
exit 1
|
|
140
|
+
fi
|
|
141
|
+
echo "CI passed"
|
|
142
|
+
`
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
filePath: ".github/workflows/publish.yml",
|
|
146
|
+
content: `name: Publish
|
|
147
|
+
|
|
148
|
+
on:
|
|
149
|
+
workflow_run:
|
|
150
|
+
workflows: ["CI"]
|
|
151
|
+
types: [completed]
|
|
152
|
+
|
|
153
|
+
concurrency:
|
|
154
|
+
group: publish-\${{ github.event.workflow_run.head_branch }}
|
|
155
|
+
cancel-in-progress: false
|
|
156
|
+
|
|
157
|
+
env:
|
|
158
|
+
NODE_AUTH_TOKEN: \${{ secrets.NODE_AUTH_TOKEN }}
|
|
159
|
+
SCRIBE_LOG_LEVEL: info
|
|
160
|
+
|
|
161
|
+
jobs:
|
|
162
|
+
publish:
|
|
163
|
+
if: >
|
|
164
|
+
github.event.workflow_run.conclusion == 'success' &&
|
|
165
|
+
github.event.workflow_run.head_branch == github.event.repository.default_branch
|
|
166
|
+
runs-on: ubuntu-latest
|
|
167
|
+
timeout-minutes: 30
|
|
168
|
+
permissions:
|
|
169
|
+
contents: read
|
|
170
|
+
id-token: write
|
|
171
|
+
steps:
|
|
172
|
+
- uses: actions/checkout@v4
|
|
173
|
+
with:
|
|
174
|
+
ref: \${{ github.event.workflow_run.head_sha }}
|
|
175
|
+
fetch-depth: 1
|
|
176
|
+
|
|
177
|
+
- uses: ./.github/actions/setup-node-pnpm
|
|
178
|
+
|
|
179
|
+
- name: Build release
|
|
180
|
+
run: pnpm run build
|
|
181
|
+
|
|
182
|
+
- name: Publish packages
|
|
183
|
+
run: pnpm exec forge publish --configuration release
|
|
184
|
+
# Skips packages with "private": true (e.g. the webapi app).
|
|
185
|
+
# Optional registry images: add \`pnpm exec forge docker --configuration release --push\`
|
|
186
|
+
# after configuring GHCR/OIDC — not enabled by default (PaaS builds the Dockerfile).
|
|
187
|
+
`
|
|
188
|
+
}
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL2dpdGh1Yi1jaS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuXG4vKipcbiAqIE1pbmltYWwgR2l0SHViIEFjdGlvbnMgZm9yIHNjYWZmb2xkZWQgYXBwczogbGludCDiiKUgdGVzdCwgYnVpbGQgZ2F0ZSBvbiBkZWZhdWx0IGJyYW5jaCxcbiAqIG5wbSBwdWJsaXNoIGFmdGVyIENJIChza2lwcyBwcml2YXRlIHBhY2thZ2VzKS4gTm8gZGVmYXVsdCBmb3JnZSBkb2NrZXIgLS1wdXNoLlxuICovXG5leHBvcnQgY2xhc3MgR2l0aHViQ2lXb3JrZmxvd3MgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuR0lUSFVCX0NJO1xuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5naXRodWIvYWN0aW9ucy9zZXR1cC1ub2RlLXBucG0vYWN0aW9uLnltbFwiLFxuXHRcdFx0XHRjb250ZW50OiBgbmFtZTogU2V0dXAgTm9kZSArIHBucG1cbmRlc2NyaXB0aW9uOiBJbnN0YWxsIHBucG0gYW5kIE5vZGUsIGNvbmZpZ3VyZSBucG0gcmVnaXN0cnkgYXV0aCwgaW5zdGFsbCBkZXBzXG5pbnB1dHM6XG4gIG5vZGUtdmVyc2lvbjpcbiAgICBkZXNjcmlwdGlvbjogTm9kZS5qcyB2ZXJzaW9uXG4gICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgZGVmYXVsdDogXCIyNFwiXG4gIHBucG0tdmVyc2lvbjpcbiAgICBkZXNjcmlwdGlvbjogcG5wbSB2ZXJzaW9uXG4gICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgZGVmYXVsdDogXCIxMFwiXG4gIGluc3RhbGw6XG4gICAgZGVzY3JpcHRpb246IFJ1biBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGVcbiAgICByZXF1aXJlZDogZmFsc2VcbiAgICBkZWZhdWx0OiBcInRydWVcIlxuXG5ydW5zOlxuICB1c2luZzogY29tcG9zaXRlXG4gIHN0ZXBzOlxuICAgIC0gdXNlczogcG5wbS9hY3Rpb24tc2V0dXBAdjRcbiAgICAgIHdpdGg6XG4gICAgICAgIHZlcnNpb246IFxcJHt7IGlucHV0cy5wbnBtLXZlcnNpb24gfX1cblxuICAgIC0gdXNlczogYWN0aW9ucy9zZXR1cC1ub2RlQHY0XG4gICAgICB3aXRoOlxuICAgICAgICBub2RlLXZlcnNpb246IFxcJHt7IGlucHV0cy5ub2RlLXZlcnNpb24gfX1cbiAgICAgICAgY2FjaGU6IHBucG1cbiAgICAgICAgY2FjaGUtZGVwZW5kZW5jeS1wYXRoOiBwbnBtLWxvY2sueWFtbFxuXG4gICAgLSBuYW1lOiBDb25maWd1cmUgbnBtIGF1dGhcbiAgICAgIHNoZWxsOiBiYXNoXG4gICAgICBydW46IHxcbiAgICAgICAgaWYgW1sgLW4gXCJcXCR7Tk9ERV9BVVRIX1RPS0VOOi19XCIgXV07IHRoZW5cbiAgICAgICAgICBlY2hvIFwiLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW49XFwke05PREVfQVVUSF9UT0tFTn1cIiA+PiAubnBtcmNcbiAgICAgICAgZmlcblxuICAgIC0gbmFtZTogSW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgICAgIGlmOiBpbnB1dHMuaW5zdGFsbCA9PSAndHJ1ZSdcbiAgICAgIHNoZWxsOiBiYXNoXG4gICAgICBydW46IHxcbiAgICAgICAgaWYgW1sgLWYgcG5wbS1sb2NrLnlhbWwgXV07IHRoZW5cbiAgICAgICAgICBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGVcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBucG0gaW5zdGFsbFxuICAgICAgICBmaVxuYCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5naXRodWIvd29ya2Zsb3dzL2NpLnltbFwiLFxuXHRcdFx0XHRjb250ZW50OiBgbmFtZTogQ0lcbm9uOlxuICBwdXNoOlxuICAgIGJyYW5jaGVzOlxuICAgICAgLSBcIipcIlxuICBwdWxsX3JlcXVlc3Q6XG4gIHdvcmtmbG93X2Rpc3BhdGNoOlxuY29uY3VycmVuY3k6XG4gIGdyb3VwOiBjaS1cXCR7eyBnaXRodWIucmVmIH19XG4gIGNhbmNlbC1pbi1wcm9ncmVzczogdHJ1ZVxuZW52OlxuICBOT0RFX0FVVEhfVE9LRU46IFxcJHt7IHNlY3JldHMuTk9ERV9BVVRIX1RPS0VOIH19XG4gIFNDUklCRV9MT0dfTEVWRUw6IGluZm9cblxuam9iczpcbiAgbGludDpcbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG4gICAgdGltZW91dC1taW51dGVzOiAxNVxuICAgIHBlcm1pc3Npb25zOlxuICAgICAgY29udGVudHM6IHJlYWRcbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIGZldGNoLWRlcHRoOiAxXG5cbiAgICAgIC0gdXNlczogLi8uZ2l0aHViL2FjdGlvbnMvc2V0dXAtbm9kZS1wbnBtXG5cbiAgICAgIC0gbmFtZTogTGludCBhbmQgdHlwZWNoZWNrXG4gICAgICAgIHJ1bjogfFxuICAgICAgICAgIHNldCArZVxuICAgICAgICAgIHBucG0gcnVuIGxpbnQ6Y2hlY2sgJlxuICAgICAgICAgIGxpbnRfcGlkPSQhXG4gICAgICAgICAgcG5wbSBydW4gdHlwZWNoZWNrICZcbiAgICAgICAgICB0c2NfcGlkPSQhXG4gICAgICAgICAgd2FpdCBcIiRsaW50X3BpZFwiXG4gICAgICAgICAgbGludF9jb2RlPSQ/XG4gICAgICAgICAgd2FpdCBcIiR0c2NfcGlkXCJcbiAgICAgICAgICB0c2NfY29kZT0kP1xuICAgICAgICAgIHNldCAtZVxuICAgICAgICAgIGlmIFtbIFwiJGxpbnRfY29kZVwiIC1uZSAwIHx8IFwiJHRzY19jb2RlXCIgLW5lIDAgXV07IHRoZW5cbiAgICAgICAgICAgIGV4aXQgMVxuICAgICAgICAgIGZpXG5cbiAgdGVzdDpcbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG4gICAgdGltZW91dC1taW51dGVzOiAyMFxuICAgIHBlcm1pc3Npb25zOlxuICAgICAgY29udGVudHM6IHJlYWRcbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIGZldGNoLWRlcHRoOiAxXG5cbiAgICAgIC0gdXNlczogLi8uZ2l0aHViL2FjdGlvbnMvc2V0dXAtbm9kZS1wbnBtXG5cbiAgICAgIC0gbmFtZTogVGVzdFxuICAgICAgICBydW46IHBucG0gdGVzdFxuXG4gICAgICAtIG5hbWU6IEJ1aWxkIChkZWZhdWx0IGJyYW5jaClcbiAgICAgICAgaWY6IGdpdGh1Yi5yZWYgPT0gZm9ybWF0KCdyZWZzL2hlYWRzL3swfScsIGdpdGh1Yi5ldmVudC5yZXBvc2l0b3J5LmRlZmF1bHRfYnJhbmNoKVxuICAgICAgICBydW46IHBucG0gcnVuIGJ1aWxkXG5cbiAgY2k6XG4gICAgbmVlZHM6IFtsaW50LCB0ZXN0XVxuICAgIGlmOiBhbHdheXMoKVxuICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3RcbiAgICB0aW1lb3V0LW1pbnV0ZXM6IDVcbiAgICBzdGVwczpcbiAgICAgIC0gbmFtZTogQWdncmVnYXRlXG4gICAgICAgIHJ1bjogfFxuICAgICAgICAgIGlmIFtbIFwiXFwke3sgbmVlZHMubGludC5yZXN1bHQgfX1cIiAhPSBcInN1Y2Nlc3NcIiB8fCBcIlxcJHt7IG5lZWRzLnRlc3QucmVzdWx0IH19XCIgIT0gXCJzdWNjZXNzXCIgXV07IHRoZW5cbiAgICAgICAgICAgIGVjaG8gXCJDSSBmYWlsZWQgKGxpbnQ9XFwke3sgbmVlZHMubGludC5yZXN1bHQgfX0gdGVzdD1cXCR7eyBuZWVkcy50ZXN0LnJlc3VsdCB9fSlcIlxuICAgICAgICAgICAgZXhpdCAxXG4gICAgICAgICAgZmlcbiAgICAgICAgICBlY2hvIFwiQ0kgcGFzc2VkXCJcbmAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZ2l0aHViL3dvcmtmbG93cy9wdWJsaXNoLnltbFwiLFxuXHRcdFx0XHRjb250ZW50OiBgbmFtZTogUHVibGlzaFxuXG5vbjpcbiAgd29ya2Zsb3dfcnVuOlxuICAgIHdvcmtmbG93czogW1wiQ0lcIl1cbiAgICB0eXBlczogW2NvbXBsZXRlZF1cblxuY29uY3VycmVuY3k6XG4gIGdyb3VwOiBwdWJsaXNoLVxcJHt7IGdpdGh1Yi5ldmVudC53b3JrZmxvd19ydW4uaGVhZF9icmFuY2ggfX1cbiAgY2FuY2VsLWluLXByb2dyZXNzOiBmYWxzZVxuXG5lbnY6XG4gIE5PREVfQVVUSF9UT0tFTjogXFwke3sgc2VjcmV0cy5OT0RFX0FVVEhfVE9LRU4gfX1cbiAgU0NSSUJFX0xPR19MRVZFTDogaW5mb1xuXG5qb2JzOlxuICBwdWJsaXNoOlxuICAgIGlmOiA+XG4gICAgICBnaXRodWIuZXZlbnQud29ya2Zsb3dfcnVuLmNvbmNsdXNpb24gPT0gJ3N1Y2Nlc3MnICYmXG4gICAgICBnaXRodWIuZXZlbnQud29ya2Zsb3dfcnVuLmhlYWRfYnJhbmNoID09IGdpdGh1Yi5ldmVudC5yZXBvc2l0b3J5LmRlZmF1bHRfYnJhbmNoXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuICAgIHRpbWVvdXQtbWludXRlczogMzBcbiAgICBwZXJtaXNzaW9uczpcbiAgICAgIGNvbnRlbnRzOiByZWFkXG4gICAgICBpZC10b2tlbjogd3JpdGVcbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIHJlZjogXFwke3sgZ2l0aHViLmV2ZW50LndvcmtmbG93X3J1bi5oZWFkX3NoYSB9fVxuICAgICAgICAgIGZldGNoLWRlcHRoOiAxXG5cbiAgICAgIC0gdXNlczogLi8uZ2l0aHViL2FjdGlvbnMvc2V0dXAtbm9kZS1wbnBtXG5cbiAgICAgIC0gbmFtZTogQnVpbGQgcmVsZWFzZVxuICAgICAgICBydW46IHBucG0gcnVuIGJ1aWxkXG5cbiAgICAgIC0gbmFtZTogUHVibGlzaCBwYWNrYWdlc1xuICAgICAgICBydW46IHBucG0gZXhlYyBmb3JnZSBwdWJsaXNoIC0tY29uZmlndXJhdGlvbiByZWxlYXNlXG4gICAgICAgICMgU2tpcHMgcGFja2FnZXMgd2l0aCBcInByaXZhdGVcIjogdHJ1ZSAoZS5nLiB0aGUgd2ViYXBpIGFwcCkuXG4gICAgICAgICMgT3B0aW9uYWwgcmVnaXN0cnkgaW1hZ2VzOiBhZGQgXFxgcG5wbSBleGVjIGZvcmdlIGRvY2tlciAtLWNvbmZpZ3VyYXRpb24gcmVsZWFzZSAtLXB1c2hcXGBcbiAgICAgICAgIyBhZnRlciBjb25maWd1cmluZyBHSENSL09JREMg4oCUIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgKFBhYVMgYnVpbGRzIHRoZSBEb2NrZXJmaWxlKS5cbmAsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJHaXRodWJDaVdvcmtmbG93cyIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJHSVRIVUJfQ0kiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFPYUE7OztlQUFBQTs7O3VCQVBvQjtBQU8xQixNQUFNQTtJQUNJQyxNQUFNQyx1QkFBZ0IsQ0FBQ0MsU0FBUyxDQUFDO0lBRTFDQyxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkNkLENBQUM7WUFDRTtZQUNBO2dCQUNDRCxVQUFVO2dCQUNWQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJFZCxDQUFDO1lBQ0U7WUFDQTtnQkFDQ0QsVUFBVTtnQkFDVkMsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlDZCxDQUFDO1lBQ0U7U0FDQTtJQUNGO0FBQ0QifQ==
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "MainSourceFile", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return MainSourceFile;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _const = require("../../models/const.js");
|
|
12
|
+
/** Tracks named imports from a single module path, split into values and types. */ class ImportGroup {
|
|
13
|
+
_values = [];
|
|
14
|
+
_types = [];
|
|
15
|
+
add(name, typeOnly = false) {
|
|
16
|
+
if (typeOnly) {
|
|
17
|
+
// Value import already present — value wins, skip
|
|
18
|
+
if (!this._values.includes(name) && !this._types.includes(name)) {
|
|
19
|
+
this._types.push(name);
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
// Promote: remove from types if it was previously type-only
|
|
23
|
+
const typeIdx = this._types.indexOf(name);
|
|
24
|
+
if (typeIdx !== -1) this._types.splice(typeIdx, 1);
|
|
25
|
+
if (!this._values.includes(name)) this._values.push(name);
|
|
26
|
+
}
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
render(from) {
|
|
30
|
+
const values = [
|
|
31
|
+
...this._values
|
|
32
|
+
].sort();
|
|
33
|
+
const types = [
|
|
34
|
+
...this._types
|
|
35
|
+
].sort().map((n)=>`type ${n}`);
|
|
36
|
+
return `import { ${[
|
|
37
|
+
...values,
|
|
38
|
+
...types
|
|
39
|
+
].join(", ")} } from "${from}";`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
class MainSourceFile {
|
|
43
|
+
appName;
|
|
44
|
+
key = _const.WELL_KNOWN_FILES.MAIN_TS;
|
|
45
|
+
_sideEffectImports = [];
|
|
46
|
+
_extraImports = new Map();
|
|
47
|
+
_builderCalls = [];
|
|
48
|
+
_entities = [];
|
|
49
|
+
_repositories = [];
|
|
50
|
+
_services = [];
|
|
51
|
+
_dataSourceName;
|
|
52
|
+
_typeOrmSeed;
|
|
53
|
+
constructor(appName){
|
|
54
|
+
this.appName = appName;
|
|
55
|
+
}
|
|
56
|
+
/** Adds a bare side-effect import, e.g. `@decohere/cortex/auth`. */ addSideEffectImport(path) {
|
|
57
|
+
if (!this._sideEffectImports.includes(path)) this._sideEffectImports.push(path);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/** Adds a named import, e.g. `import { Foo } from "bar"`. */ addImport(name, from, typeOnly = false) {
|
|
61
|
+
const group = this._extraImports.get(from) ?? new ImportGroup();
|
|
62
|
+
group.add(name, typeOnly);
|
|
63
|
+
this._extraImports.set(from, group);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Adds a builder call inserted after `.withConfiguration()` and before
|
|
68
|
+
* `.withServices()`. Pass the call without leading dot, e.g. `.withAuth()`.
|
|
69
|
+
*/ addBuilderCall(call) {
|
|
70
|
+
this._builderCalls.push(call);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/** Adds a TypeORM entity — import and entry in `withTypeOrm({ entities })`. */ addEntity(entity) {
|
|
74
|
+
this._entities.push(entity);
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/** Adds a TypeORM repository — import and entry in `withTypeOrm({ repositories })`. */ addRepository(repo) {
|
|
78
|
+
this._repositories.push(repo);
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
/** Adds a service registered in `.withServices()`. */ addService(service) {
|
|
82
|
+
this._services.push(service);
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Datasource name passed to `withTypeOrm({ name })`. Must match
|
|
87
|
+
* `database.dataSources[].name` in config.yaml.
|
|
88
|
+
*/ setDataSourceName(name) {
|
|
89
|
+
this._dataSourceName = name;
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Inline seed callback body for `withTypeOrm({ seed })`.
|
|
94
|
+
* Receives `dataSource` in scope. Example: `await dataSource.getRepository(User).save(...)`.
|
|
95
|
+
*/ setTypeOrmSeed(seedBody) {
|
|
96
|
+
this._typeOrmSeed = seedBody;
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
files() {
|
|
100
|
+
const imports = [
|
|
101
|
+
'import "@decohere/scribe-pino";',
|
|
102
|
+
'import "@decohere/cortex/http";'
|
|
103
|
+
];
|
|
104
|
+
for (const path of this._sideEffectImports){
|
|
105
|
+
imports.push(`import "${path}";`);
|
|
106
|
+
}
|
|
107
|
+
imports.push('import "@decohere/protocol";', 'import { YamlDataSource } from "@decohere/protocol";', 'import { Builder } from "@decohere/cortex";', 'import { FastifyProvider } from "@decohere/cortex/providers";', 'import { scribe } from "@decohere/scribe";', 'import { SampleService } from "./services/sample.service.js";');
|
|
108
|
+
for (const e of this._entities){
|
|
109
|
+
imports.push(`import { ${e.className} } from "${e.importPath}";`);
|
|
110
|
+
}
|
|
111
|
+
for (const r of this._repositories){
|
|
112
|
+
imports.push(`import { ${r.className} } from "${r.importPath}";`);
|
|
113
|
+
}
|
|
114
|
+
for (const s of this._services){
|
|
115
|
+
imports.push(`import { ${s.className} } from "${s.importPath}";`);
|
|
116
|
+
}
|
|
117
|
+
for (const [from, group] of this._extraImports){
|
|
118
|
+
imports.push(group.render(from));
|
|
119
|
+
}
|
|
120
|
+
imports.push('import { HelloController } from "./controllers/hello.controller.js";');
|
|
121
|
+
const serviceRegs = [
|
|
122
|
+
"cb.registerSingleton(SampleService);",
|
|
123
|
+
...this._services.map((s)=>s.scope === "request" ? `cb.registerRequestScoped(${s.className});` : `cb.registerSingleton(${s.className});`)
|
|
124
|
+
].join(" ");
|
|
125
|
+
const builderCalls = [
|
|
126
|
+
`\t.withHttp(FastifyProvider)`,
|
|
127
|
+
`\t.withConfiguration(YamlDataSource)`,
|
|
128
|
+
`\t.withHealth()`,
|
|
129
|
+
`\t.withOpenApi({ info: { title: "${this.appName}", version: "1.0.0" } })`,
|
|
130
|
+
...this._builderCalls.map((c)=>`\t${c}`),
|
|
131
|
+
`\t.withServices((cb) => { ${serviceRegs} })`
|
|
132
|
+
];
|
|
133
|
+
if (this._entities.length > 0) {
|
|
134
|
+
const entities = this._entities.map((e)=>e.className).join(", ");
|
|
135
|
+
const repos = this._repositories.map((r)=>r.className).join(", ");
|
|
136
|
+
const named = this._dataSourceName != null ? `name: "${this._dataSourceName}", ` : "";
|
|
137
|
+
if (this._typeOrmSeed) {
|
|
138
|
+
builderCalls.push(`\t.withTypeOrm({ ${named}entities: [${entities}], repositories: [${repos}], seed: async (dataSource) => { ${this._typeOrmSeed} } })`);
|
|
139
|
+
} else {
|
|
140
|
+
builderCalls.push(`\t.withTypeOrm({ ${named}entities: [${entities}], repositories: [${repos}] })`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
builderCalls.push(`\t.withControllers(HelloController)`);
|
|
144
|
+
const content = [
|
|
145
|
+
...imports,
|
|
146
|
+
"",
|
|
147
|
+
`scribe.withPinoPretty().and.withPinoRoll({ file: "logs/${this.appName}.log" });`,
|
|
148
|
+
"",
|
|
149
|
+
`const app = await Builder.create({ applicationName: "${this.appName}" })`,
|
|
150
|
+
...builderCalls,
|
|
151
|
+
`\t.build();`,
|
|
152
|
+
"",
|
|
153
|
+
"await app.start({ port: Number(process.env.PORT ?? 3000) });",
|
|
154
|
+
"",
|
|
155
|
+
"export default app;",
|
|
156
|
+
""
|
|
157
|
+
].join("\n");
|
|
158
|
+
return [
|
|
159
|
+
{
|
|
160
|
+
filePath: "src/main.ts",
|
|
161
|
+
content
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc291cmNlLWZpbGUuanNcIjtcblxuZXhwb3J0IHR5cGUgVHlwZU9ybUltcG9ydCA9IHsgY2xhc3NOYW1lOiBzdHJpbmc7IGltcG9ydFBhdGg6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgU2VydmljZUltcG9ydCA9IFR5cGVPcm1JbXBvcnQgJiB7IHNjb3BlPzogXCJzaW5nbGV0b25cIiB8IFwicmVxdWVzdFwiIH07XG5cbi8qKiBUcmFja3MgbmFtZWQgaW1wb3J0cyBmcm9tIGEgc2luZ2xlIG1vZHVsZSBwYXRoLCBzcGxpdCBpbnRvIHZhbHVlcyBhbmQgdHlwZXMuICovXG5jbGFzcyBJbXBvcnRHcm91cCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfdHlwZXM6IHN0cmluZ1tdID0gW107XG5cblx0cHVibGljIGFkZChuYW1lOiBzdHJpbmcsIHR5cGVPbmx5ID0gZmFsc2UpOiB0aGlzIHtcblx0XHRpZiAodHlwZU9ubHkpIHtcblx0XHRcdC8vIFZhbHVlIGltcG9ydCBhbHJlYWR5IHByZXNlbnQg4oCUIHZhbHVlIHdpbnMsIHNraXBcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpICYmICF0aGlzLl90eXBlcy5pbmNsdWRlcyhuYW1lKSkge1xuXHRcdFx0XHR0aGlzLl90eXBlcy5wdXNoKG5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBQcm9tb3RlOiByZW1vdmUgZnJvbSB0eXBlcyBpZiBpdCB3YXMgcHJldmlvdXNseSB0eXBlLW9ubHlcblx0XHRcdGNvbnN0IHR5cGVJZHggPSB0aGlzLl90eXBlcy5pbmRleE9mKG5hbWUpO1xuXHRcdFx0aWYgKHR5cGVJZHggIT09IC0xKSB0aGlzLl90eXBlcy5zcGxpY2UodHlwZUlkeCwgMSk7XG5cdFx0XHRpZiAoIXRoaXMuX3ZhbHVlcy5pbmNsdWRlcyhuYW1lKSkgdGhpcy5fdmFsdWVzLnB1c2gobmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcihmcm9tOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlcyA9IFsuLi50aGlzLl92YWx1ZXNdLnNvcnQoKTtcblx0XHRjb25zdCB0eXBlcyA9IFsuLi50aGlzLl90eXBlc10uc29ydCgpLm1hcCgobikgPT4gYHR5cGUgJHtufWApO1xuXHRcdHJldHVybiBgaW1wb3J0IHsgJHtbLi4udmFsdWVzLCAuLi50eXBlc10uam9pbihcIiwgXCIpfSB9IGZyb20gXCIke2Zyb219XCI7YDtcblx0fVxufVxuXG4vKipcbiAqIE1vZGVsIGZvciBgcHJvamVjdHMvYXBpL3NyYy9tYWluLnRzYC5cbiAqXG4gKiBTdGFydHMgd2l0aCB0aGUgbWluaW1hbCBIVFRQICsgWUFNTCBjb25maWcgc2V0dXAuIEZlYXR1cmVzIG11dGF0ZSB0aGUgbW9kZWxcbiAqIGJ5IGNhbGxpbmcgYWRkU2lkZUVmZmVjdEltcG9ydCAvIGFkZEltcG9ydCAvIGFkZEJ1aWxkZXJDYWxsIC8gYWRkRW50aXR5IC9cbiAqIGFkZFJlcG9zaXRvcnkuIGZpbGVzKCkgcmVuZGVycyB3aGF0ZXZlciBoYXMgYmVlbiBhY2N1bXVsYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1haW5Tb3VyY2VGaWxlIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFM7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfc2lkZUVmZmVjdEltcG9ydHM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX2V4dHJhSW1wb3J0cyA9IG5ldyBNYXA8c3RyaW5nLCBJbXBvcnRHcm91cD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfYnVpbGRlckNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9lbnRpdGllczogVHlwZU9ybUltcG9ydFtdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX3JlcG9zaXRvcmllczogVHlwZU9ybUltcG9ydFtdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX3NlcnZpY2VzOiBTZXJ2aWNlSW1wb3J0W10gPSBbXTtcblx0cHJpdmF0ZSBfZGF0YVNvdXJjZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBfdHlwZU9ybVNlZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHBOYW1lOiBzdHJpbmcpIHt9XG5cblx0LyoqIEFkZHMgYSBiYXJlIHNpZGUtZWZmZWN0IGltcG9ydCwgZS5nLiBgQGRlY29oZXJlL2NvcnRleC9hdXRoYC4gKi9cblx0cHVibGljIGFkZFNpZGVFZmZlY3RJbXBvcnQocGF0aDogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9zaWRlRWZmZWN0SW1wb3J0cy5pbmNsdWRlcyhwYXRoKSkgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMucHVzaChwYXRoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgbmFtZWQgaW1wb3J0LCBlLmcuIGBpbXBvcnQgeyBGb28gfSBmcm9tIFwiYmFyXCJgLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KG5hbWU6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLl9leHRyYUltcG9ydHMuZ2V0KGZyb20pID8/IG5ldyBJbXBvcnRHcm91cCgpO1xuXHRcdGdyb3VwLmFkZChuYW1lLCB0eXBlT25seSk7XG5cdFx0dGhpcy5fZXh0cmFJbXBvcnRzLnNldChmcm9tLCBncm91cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGJ1aWxkZXIgY2FsbCBpbnNlcnRlZCBhZnRlciBgLndpdGhDb25maWd1cmF0aW9uKClgIGFuZCBiZWZvcmVcblx0ICogYC53aXRoU2VydmljZXMoKWAuIFBhc3MgdGhlIGNhbGwgd2l0aG91dCBsZWFkaW5nIGRvdCwgZS5nLiBgLndpdGhBdXRoKClgLlxuXHQgKi9cblx0cHVibGljIGFkZEJ1aWxkZXJDYWxsKGNhbGw6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2J1aWxkZXJDYWxscy5wdXNoKGNhbGwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIGVudGl0eSDigJQgaW1wb3J0IGFuZCBlbnRyeSBpbiBgd2l0aFR5cGVPcm0oeyBlbnRpdGllcyB9KWAuICovXG5cdHB1YmxpYyBhZGRFbnRpdHkoZW50aXR5OiBUeXBlT3JtSW1wb3J0KTogdGhpcyB7XG5cdFx0dGhpcy5fZW50aXRpZXMucHVzaChlbnRpdHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIHJlcG9zaXRvcnkg4oCUIGltcG9ydCBhbmQgZW50cnkgaW4gYHdpdGhUeXBlT3JtKHsgcmVwb3NpdG9yaWVzIH0pYC4gKi9cblx0cHVibGljIGFkZFJlcG9zaXRvcnkocmVwbzogVHlwZU9ybUltcG9ydCk6IHRoaXMge1xuXHRcdHRoaXMuX3JlcG9zaXRvcmllcy5wdXNoKHJlcG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBzZXJ2aWNlIHJlZ2lzdGVyZWQgaW4gYC53aXRoU2VydmljZXMoKWAuICovXG5cdHB1YmxpYyBhZGRTZXJ2aWNlKHNlcnZpY2U6IFNlcnZpY2VJbXBvcnQpOiB0aGlzIHtcblx0XHR0aGlzLl9zZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERhdGFzb3VyY2UgbmFtZSBwYXNzZWQgdG8gYHdpdGhUeXBlT3JtKHsgbmFtZSB9KWAuIE11c3QgbWF0Y2hcblx0ICogYGRhdGFiYXNlLmRhdGFTb3VyY2VzW10ubmFtZWAgaW4gY29uZmlnLnlhbWwuXG5cdCAqL1xuXHRwdWJsaWMgc2V0RGF0YVNvdXJjZU5hbWUobmFtZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fZGF0YVNvdXJjZU5hbWUgPSBuYW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIElubGluZSBzZWVkIGNhbGxiYWNrIGJvZHkgZm9yIGB3aXRoVHlwZU9ybSh7IHNlZWQgfSlgLlxuXHQgKiBSZWNlaXZlcyBgZGF0YVNvdXJjZWAgaW4gc2NvcGUuIEV4YW1wbGU6IGBhd2FpdCBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoVXNlcikuc2F2ZSguLi4pYC5cblx0ICovXG5cdHB1YmxpYyBzZXRUeXBlT3JtU2VlZChzZWVkQm9keTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fdHlwZU9ybVNlZWQgPSBzZWVkQm9keTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdGNvbnN0IGltcG9ydHM6IHN0cmluZ1tdID0gW1xuXHRcdFx0J2ltcG9ydCBcIkBkZWNvaGVyZS9zY3JpYmUtcGlub1wiOycsXG5cdFx0XHQnaW1wb3J0IFwiQGRlY29oZXJlL2NvcnRleC9odHRwXCI7Jyxcblx0XHRdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXRoIG9mIHRoaXMuX3NpZGVFZmZlY3RJbXBvcnRzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goYGltcG9ydCBcIiR7cGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRpbXBvcnRzLnB1c2goXG5cdFx0XHQnaW1wb3J0IFwiQGRlY29oZXJlL3Byb3RvY29sXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBZYW1sRGF0YVNvdXJjZSB9IGZyb20gXCJAZGVjb2hlcmUvcHJvdG9jb2xcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IEJ1aWxkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiOycsXG5cdFx0XHQnaW1wb3J0IHsgRmFzdGlmeVByb3ZpZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXgvcHJvdmlkZXJzXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiOycsXG5cdFx0XHQnaW1wb3J0IHsgU2FtcGxlU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3NhbXBsZS5zZXJ2aWNlLmpzXCI7Jyxcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBlIG9mIHRoaXMuX2VudGl0aWVzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goYGltcG9ydCB7ICR7ZS5jbGFzc05hbWV9IH0gZnJvbSBcIiR7ZS5pbXBvcnRQYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgciBvZiB0aGlzLl9yZXBvc2l0b3JpZXMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IHsgJHtyLmNsYXNzTmFtZX0gfSBmcm9tIFwiJHtyLmltcG9ydFBhdGh9XCI7YCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBzIG9mIHRoaXMuX3NlcnZpY2VzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goYGltcG9ydCB7ICR7cy5jbGFzc05hbWV9IH0gZnJvbSBcIiR7cy5pbXBvcnRQYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2Zyb20sIGdyb3VwXSBvZiB0aGlzLl9leHRyYUltcG9ydHMpIHtcblx0XHRcdGltcG9ydHMucHVzaChncm91cC5yZW5kZXIoZnJvbSkpO1xuXHRcdH1cblxuXHRcdGltcG9ydHMucHVzaCgnaW1wb3J0IHsgSGVsbG9Db250cm9sbGVyIH0gZnJvbSBcIi4vY29udHJvbGxlcnMvaGVsbG8uY29udHJvbGxlci5qc1wiOycpO1xuXG5cdFx0Y29uc3Qgc2VydmljZVJlZ3MgPSBbXG5cdFx0XHRcImNiLnJlZ2lzdGVyU2luZ2xldG9uKFNhbXBsZVNlcnZpY2UpO1wiLFxuXHRcdFx0Li4udGhpcy5fc2VydmljZXMubWFwKChzKSA9PlxuXHRcdFx0XHRzLnNjb3BlID09PSBcInJlcXVlc3RcIlxuXHRcdFx0XHRcdD8gYGNiLnJlZ2lzdGVyUmVxdWVzdFNjb3BlZCgke3MuY2xhc3NOYW1lfSk7YFxuXHRcdFx0XHRcdDogYGNiLnJlZ2lzdGVyU2luZ2xldG9uKCR7cy5jbGFzc05hbWV9KTtgLFxuXHRcdFx0KSxcblx0XHRdLmpvaW4oXCIgXCIpO1xuXG5cdFx0Y29uc3QgYnVpbGRlckNhbGxzOiBzdHJpbmdbXSA9IFtcblx0XHRcdGBcXHQud2l0aEh0dHAoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgXFx0LndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHRgXFx0LndpdGhIZWFsdGgoKWAsXG5cdFx0XHRgXFx0LndpdGhPcGVuQXBpKHsgaW5mbzogeyB0aXRsZTogXCIke3RoaXMuYXBwTmFtZX1cIiwgdmVyc2lvbjogXCIxLjAuMFwiIH0gfSlgLFxuXHRcdFx0Li4udGhpcy5fYnVpbGRlckNhbGxzLm1hcCgoYykgPT4gYFxcdCR7Y31gKSxcblx0XHRcdGBcXHQud2l0aFNlcnZpY2VzKChjYikgPT4geyAke3NlcnZpY2VSZWdzfSB9KWAsXG5cdFx0XTtcblxuXHRcdGlmICh0aGlzLl9lbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzLm1hcCgoZSkgPT4gZS5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGNvbnN0IHJlcG9zID0gdGhpcy5fcmVwb3NpdG9yaWVzLm1hcCgocikgPT4gci5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGNvbnN0IG5hbWVkID0gdGhpcy5fZGF0YVNvdXJjZU5hbWUgIT0gbnVsbCA/IGBuYW1lOiBcIiR7dGhpcy5fZGF0YVNvdXJjZU5hbWV9XCIsIGAgOiBcIlwiO1xuXHRcdFx0aWYgKHRoaXMuX3R5cGVPcm1TZWVkKSB7XG5cdFx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRcdGBcXHQud2l0aFR5cGVPcm0oeyAke25hbWVkfWVudGl0aWVzOiBbJHtlbnRpdGllc31dLCByZXBvc2l0b3JpZXM6IFske3JlcG9zfV0sIHNlZWQ6IGFzeW5jIChkYXRhU291cmNlKSA9PiB7ICR7dGhpcy5fdHlwZU9ybVNlZWR9IH0gfSlgLFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVpbGRlckNhbGxzLnB1c2goXG5cdFx0XHRcdFx0YFxcdC53aXRoVHlwZU9ybSh7ICR7bmFtZWR9ZW50aXRpZXM6IFske2VudGl0aWVzfV0sIHJlcG9zaXRvcmllczogWyR7cmVwb3N9XSB9KWAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YnVpbGRlckNhbGxzLnB1c2goYFxcdC53aXRoQ29udHJvbGxlcnMoSGVsbG9Db250cm9sbGVyKWApO1xuXG5cdFx0Y29uc3QgY29udGVudCA9IFtcblx0XHRcdC4uLmltcG9ydHMsXG5cdFx0XHRcIlwiLFxuXHRcdFx0YHNjcmliZS53aXRoUGlub1ByZXR0eSgpLmFuZC53aXRoUGlub1JvbGwoeyBmaWxlOiBcImxvZ3MvJHt0aGlzLmFwcE5hbWV9LmxvZ1wiIH0pO2AsXG5cdFx0XHRcIlwiLFxuXHRcdFx0YGNvbnN0IGFwcCA9IGF3YWl0IEJ1aWxkZXIuY3JlYXRlKHsgYXBwbGljYXRpb25OYW1lOiBcIiR7dGhpcy5hcHBOYW1lfVwiIH0pYCxcblx0XHRcdC4uLmJ1aWxkZXJDYWxscyxcblx0XHRcdGBcXHQuYnVpbGQoKTtgLFxuXHRcdFx0XCJcIixcblx0XHRcdFwiYXdhaXQgYXBwLnN0YXJ0KHsgcG9ydDogTnVtYmVyKHByb2Nlc3MuZW52LlBPUlQgPz8gMzAwMCkgfSk7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJleHBvcnQgZGVmYXVsdCBhcHA7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdF0uam9pbihcIlxcblwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJNYWluU291cmNlRmlsZSIsIkltcG9ydEdyb3VwIiwiX3ZhbHVlcyIsIl90eXBlcyIsImFkZCIsIm5hbWUiLCJ0eXBlT25seSIsImluY2x1ZGVzIiwicHVzaCIsInR5cGVJZHgiLCJpbmRleE9mIiwic3BsaWNlIiwicmVuZGVyIiwiZnJvbSIsInZhbHVlcyIsInNvcnQiLCJ0eXBlcyIsIm1hcCIsIm4iLCJqb2luIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIk1BSU5fVFMiLCJfc2lkZUVmZmVjdEltcG9ydHMiLCJfZXh0cmFJbXBvcnRzIiwiTWFwIiwiX2J1aWxkZXJDYWxscyIsIl9lbnRpdGllcyIsIl9yZXBvc2l0b3JpZXMiLCJfc2VydmljZXMiLCJfZGF0YVNvdXJjZU5hbWUiLCJfdHlwZU9ybVNlZWQiLCJhcHBOYW1lIiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsInBhdGgiLCJhZGRJbXBvcnQiLCJncm91cCIsImdldCIsInNldCIsImFkZEJ1aWxkZXJDYWxsIiwiY2FsbCIsImFkZEVudGl0eSIsImVudGl0eSIsImFkZFJlcG9zaXRvcnkiLCJyZXBvIiwiYWRkU2VydmljZSIsInNlcnZpY2UiLCJzZXREYXRhU291cmNlTmFtZSIsInNldFR5cGVPcm1TZWVkIiwic2VlZEJvZHkiLCJmaWxlcyIsImltcG9ydHMiLCJlIiwiY2xhc3NOYW1lIiwiaW1wb3J0UGF0aCIsInIiLCJzIiwic2VydmljZVJlZ3MiLCJzY29wZSIsImJ1aWxkZXJDYWxscyIsImMiLCJsZW5ndGgiLCJlbnRpdGllcyIsInJlcG9zIiwibmFtZWQiLCJjb250ZW50IiwiZmlsZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7K0JBd0NhQTs7O2VBQUFBOzs7dUJBeENvQjtBQU1qQyxpRkFBaUYsR0FDakYsTUFBTUM7SUFDWUMsVUFBb0IsRUFBRSxDQUFDO0lBQ3ZCQyxTQUFtQixFQUFFLENBQUM7SUFFaENDLElBQUlDLElBQVksRUFBRUMsV0FBVyxLQUFLLEVBQVE7UUFDaEQsSUFBSUEsVUFBVTtZQUNiLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDSixPQUFPLENBQUNLLFFBQVEsQ0FBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQ0YsTUFBTSxDQUFDSSxRQUFRLENBQUNGLE9BQU87Z0JBQ2hFLElBQUksQ0FBQ0YsTUFBTSxDQUFDSyxJQUFJLENBQUNIO1lBQ2xCO1FBQ0QsT0FBTztZQUNOLDREQUE0RDtZQUM1RCxNQUFNSSxVQUFVLElBQUksQ0FBQ04sTUFBTSxDQUFDTyxPQUFPLENBQUNMO1lBQ3BDLElBQUlJLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQ04sTUFBTSxDQUFDUSxNQUFNLENBQUNGLFNBQVM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ1AsT0FBTyxDQUFDSyxRQUFRLENBQUNGLE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUNNLElBQUksQ0FBQ0g7UUFDckQ7UUFDQSxPQUFPLElBQUk7SUFDWjtJQUVPTyxPQUFPQyxJQUFZLEVBQVU7UUFDbkMsTUFBTUMsU0FBUztlQUFJLElBQUksQ0FBQ1osT0FBTztTQUFDLENBQUNhLElBQUk7UUFDckMsTUFBTUMsUUFBUTtlQUFJLElBQUksQ0FBQ2IsTUFBTTtTQUFDLENBQUNZLElBQUksR0FBR0UsR0FBRyxDQUFDLENBQUNDLElBQU0sQ0FBQyxLQUFLLEVBQUVBLEdBQUc7UUFDNUQsT0FBTyxDQUFDLFNBQVMsRUFBRTtlQUFJSjtlQUFXRTtTQUFNLENBQUNHLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRU4sS0FBSyxFQUFFLENBQUM7SUFDeEU7QUFDRDtBQVNPLE1BQU1iOztJQUNJb0IsTUFBTUMsdUJBQWdCLENBQUNDLE9BQU8sQ0FBQztJQUU5QkMscUJBQStCLEVBQUUsQ0FBQztJQUNsQ0MsZ0JBQWdCLElBQUlDLE1BQTJCO0lBQy9DQyxnQkFBMEIsRUFBRSxDQUFDO0lBQzdCQyxZQUE2QixFQUFFLENBQUM7SUFDaENDLGdCQUFpQyxFQUFFLENBQUM7SUFDcENDLFlBQTZCLEVBQUUsQ0FBQztJQUN6Q0MsZ0JBQW9DO0lBQ3BDQyxhQUFpQztJQUV6QyxZQUFtQixBQUFpQkMsT0FBZSxDQUFFO2FBQWpCQSxVQUFBQTtJQUFrQjtJQUV0RCxrRUFBa0UsR0FDbEUsQUFBT0Msb0JBQW9CQyxJQUFZLEVBQVE7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQ1gsa0JBQWtCLENBQUNoQixRQUFRLENBQUMyQixPQUFPLElBQUksQ0FBQ1gsa0JBQWtCLENBQUNmLElBQUksQ0FBQzBCO1FBQzFFLE9BQU8sSUFBSTtJQUNaO0lBRUEsMkRBQTJELEdBQzNELEFBQU9DLFVBQVU5QixJQUFZLEVBQUVRLElBQVksRUFBRVAsV0FBVyxLQUFLLEVBQVE7UUFDcEUsTUFBTThCLFFBQVEsSUFBSSxDQUFDWixhQUFhLENBQUNhLEdBQUcsQ0FBQ3hCLFNBQVMsSUFBSVo7UUFDbERtQyxNQUFNaEMsR0FBRyxDQUFDQyxNQUFNQztRQUNoQixJQUFJLENBQUNrQixhQUFhLENBQUNjLEdBQUcsQ0FBQ3pCLE1BQU11QjtRQUM3QixPQUFPLElBQUk7SUFDWjtJQUVBOzs7RUFHQyxHQUNELEFBQU9HLGVBQWVDLElBQVksRUFBUTtRQUN6QyxJQUFJLENBQUNkLGFBQWEsQ0FBQ2xCLElBQUksQ0FBQ2dDO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRUEsNkVBQTZFLEdBQzdFLEFBQU9DLFVBQVVDLE1BQXFCLEVBQVE7UUFDN0MsSUFBSSxDQUFDZixTQUFTLENBQUNuQixJQUFJLENBQUNrQztRQUNwQixPQUFPLElBQUk7SUFDWjtJQUVBLHFGQUFxRixHQUNyRixBQUFPQyxjQUFjQyxJQUFtQixFQUFRO1FBQy9DLElBQUksQ0FBQ2hCLGFBQWEsQ0FBQ3BCLElBQUksQ0FBQ29DO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRUEsb0RBQW9ELEdBQ3BELEFBQU9DLFdBQVdDLE9BQXNCLEVBQVE7UUFDL0MsSUFBSSxDQUFDakIsU0FBUyxDQUFDckIsSUFBSSxDQUFDc0M7UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFQTs7O0VBR0MsR0FDRCxBQUFPQyxrQkFBa0IxQyxJQUFZLEVBQVE7UUFDNUMsSUFBSSxDQUFDeUIsZUFBZSxHQUFHekI7UUFDdkIsT0FBTyxJQUFJO0lBQ1o7SUFFQTs7O0VBR0MsR0FDRCxBQUFPMkMsZUFBZUMsUUFBZ0IsRUFBUTtRQUM3QyxJQUFJLENBQUNsQixZQUFZLEdBQUdrQjtRQUNwQixPQUFPLElBQUk7SUFDWjtJQUVPQyxRQUFzQjtRQUM1QixNQUFNQyxVQUFvQjtZQUN6QjtZQUNBO1NBQ0E7UUFFRCxLQUFLLE1BQU1qQixRQUFRLElBQUksQ0FBQ1gsa0JBQWtCLENBQUU7WUFDM0M0QixRQUFRM0MsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFMEIsS0FBSyxFQUFFLENBQUM7UUFDakM7UUFFQWlCLFFBQVEzQyxJQUFJLENBQ1gsZ0NBQ0Esd0RBQ0EsK0NBQ0EsaUVBQ0EsOENBQ0E7UUFHRCxLQUFLLE1BQU00QyxLQUFLLElBQUksQ0FBQ3pCLFNBQVMsQ0FBRTtZQUMvQndCLFFBQVEzQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU0QyxFQUFFQyxTQUFTLENBQUMsU0FBUyxFQUFFRCxFQUFFRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNQyxLQUFLLElBQUksQ0FBQzNCLGFBQWEsQ0FBRTtZQUNuQ3VCLFFBQVEzQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUrQyxFQUFFRixTQUFTLENBQUMsU0FBUyxFQUFFRSxFQUFFRCxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNRSxLQUFLLElBQUksQ0FBQzNCLFNBQVMsQ0FBRTtZQUMvQnNCLFFBQVEzQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVnRCxFQUFFSCxTQUFTLENBQUMsU0FBUyxFQUFFRyxFQUFFRixVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNLENBQUN6QyxNQUFNdUIsTUFBTSxJQUFJLElBQUksQ0FBQ1osYUFBYSxDQUFFO1lBQy9DMkIsUUFBUTNDLElBQUksQ0FBQzRCLE1BQU14QixNQUFNLENBQUNDO1FBQzNCO1FBRUFzQyxRQUFRM0MsSUFBSSxDQUFDO1FBRWIsTUFBTWlELGNBQWM7WUFDbkI7ZUFDRyxJQUFJLENBQUM1QixTQUFTLENBQUNaLEdBQUcsQ0FBQyxDQUFDdUMsSUFDdEJBLEVBQUVFLEtBQUssS0FBSyxZQUNULENBQUMseUJBQXlCLEVBQUVGLEVBQUVILFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FDM0MsQ0FBQyxxQkFBcUIsRUFBRUcsRUFBRUgsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUUzQyxDQUFDbEMsSUFBSSxDQUFDO1FBRVAsTUFBTXdDLGVBQXlCO1lBQzlCLENBQUMsNEJBQTRCLENBQUM7WUFDOUIsQ0FBQyxvQ0FBb0MsQ0FBQztZQUN0QyxDQUFDLGVBQWUsQ0FBQztZQUNqQixDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQzNCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztlQUN2RSxJQUFJLENBQUNOLGFBQWEsQ0FBQ1QsR0FBRyxDQUFDLENBQUMyQyxJQUFNLENBQUMsRUFBRSxFQUFFQSxHQUFHO1lBQ3pDLENBQUMsMEJBQTBCLEVBQUVILFlBQVksR0FBRyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxJQUFJLENBQUM5QixTQUFTLENBQUNrQyxNQUFNLEdBQUcsR0FBRztZQUM5QixNQUFNQyxXQUFXLElBQUksQ0FBQ25DLFNBQVMsQ0FBQ1YsR0FBRyxDQUFDLENBQUNtQyxJQUFNQSxFQUFFQyxTQUFTLEVBQUVsQyxJQUFJLENBQUM7WUFDN0QsTUFBTTRDLFFBQVEsSUFBSSxDQUFDbkMsYUFBYSxDQUFDWCxHQUFHLENBQUMsQ0FBQ3NDLElBQU1BLEVBQUVGLFNBQVMsRUFBRWxDLElBQUksQ0FBQztZQUM5RCxNQUFNNkMsUUFBUSxJQUFJLENBQUNsQyxlQUFlLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUNBLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNuRixJQUFJLElBQUksQ0FBQ0MsWUFBWSxFQUFFO2dCQUN0QjRCLGFBQWFuRCxJQUFJLENBQ2hCLENBQUMsaUJBQWlCLEVBQUV3RCxNQUFNLFdBQVcsRUFBRUYsU0FBUyxrQkFBa0IsRUFBRUMsTUFBTSxpQ0FBaUMsRUFBRSxJQUFJLENBQUNoQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBRXZJLE9BQU87Z0JBQ040QixhQUFhbkQsSUFBSSxDQUNoQixDQUFDLGlCQUFpQixFQUFFd0QsTUFBTSxXQUFXLEVBQUVGLFNBQVMsa0JBQWtCLEVBQUVDLE1BQU0sSUFBSSxDQUFDO1lBRWpGO1FBQ0Q7UUFFQUosYUFBYW5ELElBQUksQ0FBQyxDQUFDLG1DQUFtQyxDQUFDO1FBRXZELE1BQU15RCxVQUFVO2VBQ1pkO1lBQ0g7WUFDQSxDQUFDLHVEQUF1RCxFQUFFLElBQUksQ0FBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDakY7WUFDQSxDQUFDLHFEQUFxRCxFQUFFLElBQUksQ0FBQ0EsT0FBTyxDQUFDLElBQUksQ0FBQztlQUN2RTJCO1lBQ0gsQ0FBQyxXQUFXLENBQUM7WUFDYjtZQUNBO1lBQ0E7WUFDQTtZQUNBO1NBQ0EsQ0FBQ3hDLElBQUksQ0FBQztRQUVQLE9BQU87WUFDTjtnQkFDQytDLFVBQVU7Z0JBQ1ZEO1lBQ0Q7U0FDQTtJQUNGO0FBQ0QifQ==
|