@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,149 @@
|
|
|
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 PackageJson () {
|
|
13
|
+
return PackageJson;
|
|
14
|
+
},
|
|
15
|
+
get sortStringMap () {
|
|
16
|
+
return sortStringMap;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _nodefs = require("node:fs");
|
|
20
|
+
const _version = require("../version.js");
|
|
21
|
+
const _const = require("../webapi/const.js");
|
|
22
|
+
const _const1 = require("./const.js");
|
|
23
|
+
class PackageJson {
|
|
24
|
+
name;
|
|
25
|
+
key = _const1.WELL_KNOWN_FILES.PACKAGE_JSON;
|
|
26
|
+
_dependencies;
|
|
27
|
+
_devDependencies;
|
|
28
|
+
_scripts;
|
|
29
|
+
_version = "0.0.1";
|
|
30
|
+
_type = "module";
|
|
31
|
+
_rest = {};
|
|
32
|
+
constructor(name, options){
|
|
33
|
+
this.name = name;
|
|
34
|
+
const apiNames = options?.apiNames ?? [
|
|
35
|
+
_const.DEFAULT_WEBAPI_NAME
|
|
36
|
+
];
|
|
37
|
+
const first = apiNames[0] ?? _const.DEFAULT_WEBAPI_NAME;
|
|
38
|
+
const startEntry = options?.startEntry ?? (0, _const.webapiReleaseEntry)(first);
|
|
39
|
+
const workspaceName = options?.workspaceName ?? stripApiSuffix(name);
|
|
40
|
+
const namedOrMany = apiNames.length > 1 || first !== _const.DEFAULT_WEBAPI_NAME;
|
|
41
|
+
this._scripts = {
|
|
42
|
+
build: "forge build --configuration release",
|
|
43
|
+
"build:watch": "forge build --watch",
|
|
44
|
+
start: `node ${startEntry}`,
|
|
45
|
+
dev: namedOrMany ? fluxDevScript(workspaceName, first, (0, _const.webapiPort)(0)) : "flux serve",
|
|
46
|
+
"lint:check": "biome check .",
|
|
47
|
+
typecheck: "forge typecheck",
|
|
48
|
+
test: "vitest run --passWithNoTests"
|
|
49
|
+
};
|
|
50
|
+
for (const [index, apiName] of apiNames.entries()){
|
|
51
|
+
this._scripts[`start:${apiName}`] = `node ${(0, _const.webapiReleaseEntry)(apiName)}`;
|
|
52
|
+
this._scripts[`dev:${apiName}`] = fluxDevScript(workspaceName, apiName, (0, _const.webapiPort)(index));
|
|
53
|
+
}
|
|
54
|
+
this._dependencies = {
|
|
55
|
+
"@decohere/cortex": _version.CREATE_VERSION,
|
|
56
|
+
"@decohere/crucible": _version.CREATE_VERSION,
|
|
57
|
+
"@decohere/nexus": _version.CREATE_VERSION,
|
|
58
|
+
"@decohere/protocol": _version.CREATE_VERSION,
|
|
59
|
+
"@decohere/scribe": _version.CREATE_VERSION,
|
|
60
|
+
"@decohere/scribe-pino": _version.CREATE_VERSION,
|
|
61
|
+
"pino-pretty": "^13.0.0",
|
|
62
|
+
"pino-roll": "^4.0.0"
|
|
63
|
+
};
|
|
64
|
+
this._devDependencies = {
|
|
65
|
+
"@decohere/forge": _version.CREATE_VERSION,
|
|
66
|
+
"@decohere/cli": _version.CREATE_VERSION,
|
|
67
|
+
typescript: "^6.0.3",
|
|
68
|
+
"@biomejs/biome": "^2.0.0",
|
|
69
|
+
vitest: "^3.2.4"
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** Load an existing root package.json so `webapi add` can merge scripts/deps. */ static fromFile(filePath) {
|
|
73
|
+
const raw = JSON.parse((0, _nodefs.readFileSync)(filePath, "utf8"));
|
|
74
|
+
const pkg = new PackageJson(typeof raw.name === "string" ? raw.name : "app", {
|
|
75
|
+
apiNames: []
|
|
76
|
+
});
|
|
77
|
+
pkg._version = typeof raw.version === "string" ? raw.version : "0.0.1";
|
|
78
|
+
pkg._type = typeof raw.type === "string" ? raw.type : "module";
|
|
79
|
+
pkg._scripts = {
|
|
80
|
+
...asStringMap(raw.scripts)
|
|
81
|
+
};
|
|
82
|
+
pkg._dependencies = {
|
|
83
|
+
...asStringMap(raw.dependencies)
|
|
84
|
+
};
|
|
85
|
+
pkg._devDependencies = {
|
|
86
|
+
...asStringMap(raw.devDependencies)
|
|
87
|
+
};
|
|
88
|
+
const reserved = new Set([
|
|
89
|
+
"name",
|
|
90
|
+
"version",
|
|
91
|
+
"type",
|
|
92
|
+
"scripts",
|
|
93
|
+
"dependencies",
|
|
94
|
+
"devDependencies"
|
|
95
|
+
]);
|
|
96
|
+
pkg._rest = Object.fromEntries(Object.entries(raw).filter(([key])=>!reserved.has(key)));
|
|
97
|
+
return pkg;
|
|
98
|
+
}
|
|
99
|
+
addDependency(name, version) {
|
|
100
|
+
this._dependencies[name] = version;
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
addDevDependency(name, version) {
|
|
104
|
+
this._devDependencies[name] = version;
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
addScript(name, command) {
|
|
108
|
+
this._scripts[name] = command;
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
hasScript(name) {
|
|
112
|
+
return typeof this._scripts[name] === "string";
|
|
113
|
+
}
|
|
114
|
+
files() {
|
|
115
|
+
return [
|
|
116
|
+
{
|
|
117
|
+
filePath: "package.json",
|
|
118
|
+
content: JSON.stringify({
|
|
119
|
+
name: this.name,
|
|
120
|
+
version: this._version,
|
|
121
|
+
type: this._type,
|
|
122
|
+
...this._rest,
|
|
123
|
+
scripts: this._scripts,
|
|
124
|
+
dependencies: sortStringMap(this._dependencies),
|
|
125
|
+
devDependencies: sortStringMap(this._devDependencies)
|
|
126
|
+
}, null, 2)
|
|
127
|
+
}
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function stripApiSuffix(name) {
|
|
132
|
+
return name.endsWith(".api") ? name.slice(0, -".api".length) : name;
|
|
133
|
+
}
|
|
134
|
+
function asStringMap(value) {
|
|
135
|
+
if (value == null || typeof value !== "object") return {};
|
|
136
|
+
const result = {};
|
|
137
|
+
for (const [key, entry] of Object.entries(value)){
|
|
138
|
+
if (typeof entry === "string") result[key] = entry;
|
|
139
|
+
}
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
function sortStringMap(map) {
|
|
143
|
+
return Object.fromEntries(Object.entries(map).sort(([left], [right])=>left.localeCompare(right, "en")));
|
|
144
|
+
}
|
|
145
|
+
function fluxDevScript(workspaceName, apiName, port) {
|
|
146
|
+
return `PORT=${port} flux serve --project ${(0, _const.webapiPackageName)(workspaceName, apiName)}`;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQge1xuXHRERUZBVUxUX1dFQkFQSV9OQU1FLFxuXHR3ZWJhcGlQYWNrYWdlTmFtZSxcblx0d2ViYXBpUG9ydCxcblx0d2ViYXBpUmVsZWFzZUVudHJ5LFxufSBmcm9tIFwiLi4vd2ViYXBpL2NvbnN0LmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBhY2thZ2VKc29uT3B0aW9ucyA9IHtcblx0c3RhcnRFbnRyeT86IHN0cmluZztcblx0LyoqIEFQSSBzbHVncyBpbiB0aGlzIHdvcmtzcGFjZS4gRHJpdmVzIGBzdGFydDo8bmFtZT5gIC8gYGRldjo8bmFtZT5gLiAqL1xuXHRhcGlOYW1lcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHQvKiogSG9zdCB3b3Jrc3BhY2UgbmFtZSB1c2VkIGluIGBAPHdvcmtzcGFjZT4vPGFwaT5gIGZvciBmbHV4IGAtLXByb2plY3RgLiAqL1xuXHR3b3Jrc3BhY2VOYW1lPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBCdWlsZGVyIGZvciB0aGUgcm9vdCBgcGFja2FnZS5qc29uYC5cbiAqXG4gKiBTdGFydHMgd2l0aCB0aGUgY29yZSBBUEkgZGVwZW5kZW5jaWVzLiBGZWF0dXJlcyBjYWxsIGBhZGREZXBlbmRlbmN5YCAvXG4gKiBgYWRkRGV2RGVwZW5kZW5jeWAgZHVyaW5nIHRoZWlyIHNjYWZmb2xkIHBoYXNlIHRvIGluamVjdCB0aGVpciBvd24gZGVwc1xuICogYmVmb3JlIGBmaWxlcygpYCBpcyBjYWxsZWQgYXQgcmVuZGVyIHRpbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWNrYWdlSnNvbiBpbXBsZW1lbnRzIEtleWVkTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkga2V5ID0gV0VMTF9LTk9XTl9GSUxFUy5QQUNLQUdFX0pTT047XG5cblx0cHJpdmF0ZSBfZGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRwcml2YXRlIF9kZXZEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHByaXZhdGUgX3NjcmlwdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHByaXZhdGUgX3ZlcnNpb24gPSBcIjAuMC4xXCI7XG5cdHByaXZhdGUgX3R5cGUgPSBcIm1vZHVsZVwiO1xuXHRwcml2YXRlIF9yZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcblx0XHRvcHRpb25zPzogUGFja2FnZUpzb25PcHRpb25zLFxuXHQpIHtcblx0XHRjb25zdCBhcGlOYW1lcyA9IG9wdGlvbnM/LmFwaU5hbWVzID8/IFtERUZBVUxUX1dFQkFQSV9OQU1FXTtcblx0XHRjb25zdCBmaXJzdCA9IGFwaU5hbWVzWzBdID8/IERFRkFVTFRfV0VCQVBJX05BTUU7XG5cdFx0Y29uc3Qgc3RhcnRFbnRyeSA9IG9wdGlvbnM/LnN0YXJ0RW50cnkgPz8gd2ViYXBpUmVsZWFzZUVudHJ5KGZpcnN0KTtcblx0XHRjb25zdCB3b3Jrc3BhY2VOYW1lID0gb3B0aW9ucz8ud29ya3NwYWNlTmFtZSA/PyBzdHJpcEFwaVN1ZmZpeChuYW1lKTtcblx0XHRjb25zdCBuYW1lZE9yTWFueSA9IGFwaU5hbWVzLmxlbmd0aCA+IDEgfHwgZmlyc3QgIT09IERFRkFVTFRfV0VCQVBJX05BTUU7XG5cblx0XHR0aGlzLl9zY3JpcHRzID0ge1xuXHRcdFx0YnVpbGQ6IFwiZm9yZ2UgYnVpbGQgLS1jb25maWd1cmF0aW9uIHJlbGVhc2VcIixcblx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRzdGFydDogYG5vZGUgJHtzdGFydEVudHJ5fWAsXG5cdFx0XHRkZXY6IG5hbWVkT3JNYW55ID8gZmx1eERldlNjcmlwdCh3b3Jrc3BhY2VOYW1lLCBmaXJzdCwgd2ViYXBpUG9ydCgwKSkgOiBcImZsdXggc2VydmVcIixcblx0XHRcdFwibGludDpjaGVja1wiOiBcImJpb21lIGNoZWNrIC5cIixcblx0XHRcdHR5cGVjaGVjazogXCJmb3JnZSB0eXBlY2hlY2tcIixcblx0XHRcdHRlc3Q6IFwidml0ZXN0IHJ1biAtLXBhc3NXaXRoTm9UZXN0c1wiLFxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIGFwaU5hbWVdIG9mIGFwaU5hbWVzLmVudHJpZXMoKSkge1xuXHRcdFx0dGhpcy5fc2NyaXB0c1tgc3RhcnQ6JHthcGlOYW1lfWBdID0gYG5vZGUgJHt3ZWJhcGlSZWxlYXNlRW50cnkoYXBpTmFtZSl9YDtcblx0XHRcdHRoaXMuX3NjcmlwdHNbYGRldjoke2FwaU5hbWV9YF0gPSBmbHV4RGV2U2NyaXB0KFxuXHRcdFx0XHR3b3Jrc3BhY2VOYW1lLFxuXHRcdFx0XHRhcGlOYW1lLFxuXHRcdFx0XHR3ZWJhcGlQb3J0KGluZGV4KSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHRoaXMuX2RlcGVuZGVuY2llcyA9IHtcblx0XHRcdFwiQGRlY29oZXJlL2NvcnRleFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL2NydWNpYmxlXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJAZGVjb2hlcmUvbmV4dXNcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9wcm90b2NvbFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL3NjcmliZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XCJwaW5vLXByZXR0eVwiOiBcIl4xMy4wLjBcIixcblx0XHRcdFwicGluby1yb2xsXCI6IFwiXjQuMC4wXCIsXG5cdFx0fTtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS9mb3JnZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFwiQGRlY29oZXJlL2NsaVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHRcIkBiaW9tZWpzL2Jpb21lXCI6IFwiXjIuMC4wXCIsXG5cdFx0XHR2aXRlc3Q6IFwiXjMuMi40XCIsXG5cdFx0fTtcblx0fVxuXG5cdC8qKiBMb2FkIGFuIGV4aXN0aW5nIHJvb3QgcGFja2FnZS5qc29uIHNvIGB3ZWJhcGkgYWRkYCBjYW4gbWVyZ2Ugc2NyaXB0cy9kZXBzLiAqL1xuXHRwdWJsaWMgc3RhdGljIGZyb21GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQYWNrYWdlSnNvbiB7XG5cdFx0Y29uc3QgcmF3ID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmOFwiKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29uc3QgcGtnID0gbmV3IFBhY2thZ2VKc29uKHR5cGVvZiByYXcubmFtZSA9PT0gXCJzdHJpbmdcIiA/IHJhdy5uYW1lIDogXCJhcHBcIiwge1xuXHRcdFx0YXBpTmFtZXM6IFtdLFxuXHRcdH0pO1xuXHRcdHBrZy5fdmVyc2lvbiA9IHR5cGVvZiByYXcudmVyc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHJhdy52ZXJzaW9uIDogXCIwLjAuMVwiO1xuXHRcdHBrZy5fdHlwZSA9IHR5cGVvZiByYXcudHlwZSA9PT0gXCJzdHJpbmdcIiA/IHJhdy50eXBlIDogXCJtb2R1bGVcIjtcblx0XHRwa2cuX3NjcmlwdHMgPSB7IC4uLmFzU3RyaW5nTWFwKHJhdy5zY3JpcHRzKSB9O1xuXHRcdHBrZy5fZGVwZW5kZW5jaWVzID0geyAuLi5hc1N0cmluZ01hcChyYXcuZGVwZW5kZW5jaWVzKSB9O1xuXHRcdHBrZy5fZGV2RGVwZW5kZW5jaWVzID0geyAuLi5hc1N0cmluZ01hcChyYXcuZGV2RGVwZW5kZW5jaWVzKSB9O1xuXHRcdGNvbnN0IHJlc2VydmVkID0gbmV3IFNldChbXG5cdFx0XHRcIm5hbWVcIixcblx0XHRcdFwidmVyc2lvblwiLFxuXHRcdFx0XCJ0eXBlXCIsXG5cdFx0XHRcInNjcmlwdHNcIixcblx0XHRcdFwiZGVwZW5kZW5jaWVzXCIsXG5cdFx0XHRcImRldkRlcGVuZGVuY2llc1wiLFxuXHRcdF0pO1xuXHRcdHBrZy5fcmVzdCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhyYXcpLmZpbHRlcigoW2tleV0pID0+ICFyZXNlcnZlZC5oYXMoa2V5KSkpO1xuXHRcdHJldHVybiBwa2c7XG5cdH1cblxuXHRwdWJsaWMgYWRkRGVwZW5kZW5jeShuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2RlcGVuZGVuY2llc1tuYW1lXSA9IHZlcnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkRGV2RGVwZW5kZW5jeShuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2RldkRlcGVuZGVuY2llc1tuYW1lXSA9IHZlcnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkU2NyaXB0KG5hbWU6IHN0cmluZywgY29tbWFuZDogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fc2NyaXB0c1tuYW1lXSA9IGNvbW1hbmQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgaGFzU2NyaXB0KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0eXBlb2YgdGhpcy5fc2NyaXB0c1tuYW1lXSA9PT0gXCJzdHJpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInBhY2thZ2UuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiB0aGlzLm5hbWUsXG5cdFx0XHRcdFx0XHR2ZXJzaW9uOiB0aGlzLl92ZXJzaW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogdGhpcy5fdHlwZSxcblx0XHRcdFx0XHRcdC4uLnRoaXMuX3Jlc3QsXG5cdFx0XHRcdFx0XHRzY3JpcHRzOiB0aGlzLl9zY3JpcHRzLFxuXHRcdFx0XHRcdFx0ZGVwZW5kZW5jaWVzOiBzb3J0U3RyaW5nTWFwKHRoaXMuX2RlcGVuZGVuY2llcyksXG5cdFx0XHRcdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHNvcnRTdHJpbmdNYXAodGhpcy5fZGV2RGVwZW5kZW5jaWVzKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuXG5mdW5jdGlvbiBzdHJpcEFwaVN1ZmZpeChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gbmFtZS5lbmRzV2l0aChcIi5hcGlcIikgPyBuYW1lLnNsaWNlKDAsIC1cIi5hcGlcIi5sZW5ndGgpIDogbmFtZTtcbn1cblxuZnVuY3Rpb24gYXNTdHJpbmdNYXAodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4ge307XG5cdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcblx0XHRpZiAodHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiKSByZXN1bHRba2V5XSA9IGVudHJ5O1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBTdGFibGUgQeKGkloga2V5IG9yZGVyIGZvciBwYWNrYWdlLmpzb24gZGVwZW5kZW5jeSBtYXBzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRTdHJpbmdNYXAobWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG5cdHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG5cdFx0T2JqZWN0LmVudHJpZXMobWFwKS5zb3J0KChbbGVmdF0sIFtyaWdodF0pID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCwgXCJlblwiKSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGZsdXhEZXZTY3JpcHQod29ya3NwYWNlTmFtZTogc3RyaW5nLCBhcGlOYW1lOiBzdHJpbmcsIHBvcnQ6IG51bWJlcik6IHN0cmluZyB7XG5cdHJldHVybiBgUE9SVD0ke3BvcnR9IGZsdXggc2VydmUgLS1wcm9qZWN0ICR7d2ViYXBpUGFja2FnZU5hbWUod29ya3NwYWNlTmFtZSwgYXBpTmFtZSl9YDtcbn1cbiJdLCJuYW1lcyI6WyJQYWNrYWdlSnNvbiIsInNvcnRTdHJpbmdNYXAiLCJrZXkiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiUEFDS0FHRV9KU09OIiwiX2RlcGVuZGVuY2llcyIsIl9kZXZEZXBlbmRlbmNpZXMiLCJfc2NyaXB0cyIsIl92ZXJzaW9uIiwiX3R5cGUiLCJfcmVzdCIsIm5hbWUiLCJvcHRpb25zIiwiYXBpTmFtZXMiLCJERUZBVUxUX1dFQkFQSV9OQU1FIiwiZmlyc3QiLCJzdGFydEVudHJ5Iiwid2ViYXBpUmVsZWFzZUVudHJ5Iiwid29ya3NwYWNlTmFtZSIsInN0cmlwQXBpU3VmZml4IiwibmFtZWRPck1hbnkiLCJsZW5ndGgiLCJidWlsZCIsInN0YXJ0IiwiZGV2IiwiZmx1eERldlNjcmlwdCIsIndlYmFwaVBvcnQiLCJ0eXBlY2hlY2siLCJ0ZXN0IiwiaW5kZXgiLCJhcGlOYW1lIiwiZW50cmllcyIsIkNSRUFURV9WRVJTSU9OIiwidHlwZXNjcmlwdCIsInZpdGVzdCIsImZyb21GaWxlIiwiZmlsZVBhdGgiLCJyYXciLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJwa2ciLCJ2ZXJzaW9uIiwidHlwZSIsImFzU3RyaW5nTWFwIiwic2NyaXB0cyIsImRlcGVuZGVuY2llcyIsImRldkRlcGVuZGVuY2llcyIsInJlc2VydmVkIiwiU2V0IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJmaWx0ZXIiLCJoYXMiLCJhZGREZXBlbmRlbmN5IiwiYWRkRGV2RGVwZW5kZW5jeSIsImFkZFNjcmlwdCIsImNvbW1hbmQiLCJoYXNTY3JpcHQiLCJmaWxlcyIsImNvbnRlbnQiLCJzdHJpbmdpZnkiLCJlbmRzV2l0aCIsInNsaWNlIiwidmFsdWUiLCJyZXN1bHQiLCJlbnRyeSIsIm1hcCIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwicG9ydCIsIndlYmFwaVBhY2thZ2VOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQTBCYUE7ZUFBQUE7O1FBc0lHQztlQUFBQTs7O3dCQWhLYTt5QkFDRTt1QkFNeEI7d0JBQzBCO0FBa0IxQixNQUFNRDs7SUFDSUUsTUFBTUMsd0JBQWdCLENBQUNDLFlBQVksQ0FBQztJQUU1Q0MsY0FBc0M7SUFDdENDLGlCQUF5QztJQUN6Q0MsU0FBaUM7SUFDakNDLFdBQVcsUUFBUTtJQUNuQkMsUUFBUSxTQUFTO0lBQ2pCQyxRQUFpQyxDQUFDLEVBQUU7SUFFNUMsWUFDQyxBQUFpQkMsSUFBWSxFQUM3QkMsT0FBNEIsQ0FDM0I7YUFGZ0JELE9BQUFBO1FBR2pCLE1BQU1FLFdBQVdELFNBQVNDLFlBQVk7WUFBQ0MsMEJBQW1CO1NBQUM7UUFDM0Qs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
|
|
@@ -0,0 +1,134 @@
|
|
|
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 MonoRepoScaffold () {
|
|
13
|
+
return MonoRepoScaffold;
|
|
14
|
+
},
|
|
15
|
+
get ProjectScaffold () {
|
|
16
|
+
return ProjectScaffold;
|
|
17
|
+
},
|
|
18
|
+
get WorkspaceScaffold () {
|
|
19
|
+
return WorkspaceScaffold;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const _promises = require("node:fs/promises");
|
|
23
|
+
const _nodepath = require("node:path");
|
|
24
|
+
class ProjectScaffold {
|
|
25
|
+
dir;
|
|
26
|
+
_models = new Map();
|
|
27
|
+
_files = [];
|
|
28
|
+
constructor(dir){
|
|
29
|
+
this.dir = dir;
|
|
30
|
+
}
|
|
31
|
+
addModel(model) {
|
|
32
|
+
this._models.set(model.key, model);
|
|
33
|
+
return model;
|
|
34
|
+
}
|
|
35
|
+
addFile(provider) {
|
|
36
|
+
this._files.push(...provider.files());
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
getModel(key) {
|
|
40
|
+
return this._models.get(key);
|
|
41
|
+
}
|
|
42
|
+
getModels(ctor) {
|
|
43
|
+
return [
|
|
44
|
+
...this._models.values()
|
|
45
|
+
].filter((m)=>m instanceof ctor);
|
|
46
|
+
}
|
|
47
|
+
/** Returns all files with `dir/` prepended to each path. */ files() {
|
|
48
|
+
const all = [
|
|
49
|
+
...this._files,
|
|
50
|
+
...[
|
|
51
|
+
...this._models.values()
|
|
52
|
+
].flatMap((m)=>m.files())
|
|
53
|
+
];
|
|
54
|
+
return all.map((f)=>({
|
|
55
|
+
filePath: `${this.dir}/${f.filePath}`,
|
|
56
|
+
content: f.content
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class WorkspaceScaffold {
|
|
61
|
+
files = [];
|
|
62
|
+
targetDir = process.cwd();
|
|
63
|
+
_name;
|
|
64
|
+
/** Project name — host directory basename, not the in-container mount path. */ get name() {
|
|
65
|
+
return this._name ?? (0, _nodepath.basename)(this.targetDir);
|
|
66
|
+
}
|
|
67
|
+
setName(name) {
|
|
68
|
+
this._name = name;
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/** Add an ad-hoc file provider whose output is included at render time. */ addFile(provider) {
|
|
72
|
+
this.files.push(...provider.files());
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
class MonoRepoScaffold extends WorkspaceScaffold {
|
|
77
|
+
_models = new Map();
|
|
78
|
+
_projects = [];
|
|
79
|
+
/** Register a named project. */ addProject(project) {
|
|
80
|
+
this._projects.push(project);
|
|
81
|
+
return project;
|
|
82
|
+
}
|
|
83
|
+
/** Retrieve a previously-registered project by its directory path. */ getProject(dir) {
|
|
84
|
+
return this._projects.find((p)=>p.dir === dir);
|
|
85
|
+
}
|
|
86
|
+
/** All registered projects, in registration order. */ getProjects() {
|
|
87
|
+
return this._projects;
|
|
88
|
+
}
|
|
89
|
+
/** Register a named model at workspace level. */ addModel(model) {
|
|
90
|
+
this._models.set(model.key, model);
|
|
91
|
+
return model;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Retrieve a model by key. Searches workspace models first, then all
|
|
95
|
+
* registered projects in order.
|
|
96
|
+
*/ getModel(key) {
|
|
97
|
+
const m = this._models.get(key);
|
|
98
|
+
if (m !== undefined) return m;
|
|
99
|
+
for (const project of this._projects){
|
|
100
|
+
const pm = project.getModel(key);
|
|
101
|
+
if (pm !== undefined) return pm;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Retrieve all models of a given type. Searches workspace models and all
|
|
107
|
+
* projects, so features can discover controllers across multiple projects.
|
|
108
|
+
*/ getModels(ctor) {
|
|
109
|
+
return [
|
|
110
|
+
...[
|
|
111
|
+
...this._models.values()
|
|
112
|
+
].filter((m)=>m instanceof ctor),
|
|
113
|
+
...this._projects.flatMap((p)=>p.getModels(ctor))
|
|
114
|
+
];
|
|
115
|
+
}
|
|
116
|
+
/** Render all models and projects into files, then write everything to disk. */ async scaffold() {
|
|
117
|
+
const allFiles = [
|
|
118
|
+
...this.files,
|
|
119
|
+
...[
|
|
120
|
+
...this._models.values()
|
|
121
|
+
].flatMap((m)=>m.files()),
|
|
122
|
+
...this._projects.flatMap((p)=>p.files())
|
|
123
|
+
];
|
|
124
|
+
await Promise.all(allFiles.map(async (file)=>{
|
|
125
|
+
const fullPath = (0, _nodepath.join)(this.targetDir, file.filePath);
|
|
126
|
+
await (0, _promises.mkdir)((0, _nodepath.dirname)(fullPath), {
|
|
127
|
+
recursive: true
|
|
128
|
+
});
|
|
129
|
+
await (0, _promises.writeFile)(fullPath, file.content);
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvcHJvamVjdC5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlLCBTb3VyY2VGaWxlUHJvdmlkZXIgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG4vKipcbiAqIEEgc3ViLXVuaXQgb2YgdGhlIG1vbm9yZXBvIChlLmcuIGBwcm9qZWN0cy9hcGlgKS5cbiAqXG4gKiBNb2RlbHMgYW5kIGZpbGVzIHJlZ2lzdGVyZWQgaGVyZSBwcm9kdWNlIHBhdGhzIHJlbGF0aXZlIHRvIGBkaXJgLiBUaGUgcGFyZW50XG4gKiBgTW9ub1JlcG9TY2FmZm9sZGAgY2FsbHMgYGZpbGVzKClgIGFuZCBwcmVwZW5kcyBgZGlyL2AgdG8gZXZlcnkgcGF0aCwgc29cbiAqIG1vZGVscyByZW1haW4gdW5hd2FyZSBvZiB3aGVyZSB0aGV5IGxpdmUgaW4gdGhlIHJlcG8uXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZWN0U2NhZmZvbGQge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9tb2RlbHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlRmlsZVByb3ZpZGVyPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9maWxlczogU291cmNlRmlsZVtdID0gW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBkaXI6IHN0cmluZykge31cblxuXHRwdWJsaWMgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVCB7XG5cdFx0dGhpcy5fbW9kZWxzLnNldChtb2RlbC5rZXksIG1vZGVsKTtcblx0XHRyZXR1cm4gbW9kZWw7XG5cdH1cblxuXHRwdWJsaWMgYWRkRmlsZShwcm92aWRlcjogU291cmNlRmlsZVByb3ZpZGVyKTogdGhpcyB7XG5cdFx0dGhpcy5fZmlsZXMucHVzaCguLi5wcm92aWRlci5maWxlcygpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBnZXRNb2RlbDxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9tb2RlbHMuZ2V0KGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRNb2RlbHM8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oY3RvcjogbmV3ICguLi5hcmdzOiBuZXZlcltdKSA9PiBUKTogVFtdIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX21vZGVscy52YWx1ZXMoKV0uZmlsdGVyKChtKTogbSBpcyBUID0+IG0gaW5zdGFuY2VvZiBjdG9yKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIGFsbCBmaWxlcyB3aXRoIGBkaXIvYCBwcmVwZW5kZWQgdG8gZWFjaCBwYXRoLiAqL1xuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRjb25zdCBhbGwgPSBbLi4udGhpcy5fZmlsZXMsIC4uLlsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZsYXRNYXAoKG0pID0+IG0uZmlsZXMoKSldO1xuXHRcdHJldHVybiBhbGwubWFwKChmKSA9PiAoeyBmaWxlUGF0aDogYCR7dGhpcy5kaXJ9LyR7Zi5maWxlUGF0aH1gLCBjb250ZW50OiBmLmNvbnRlbnQgfSkpO1xuXHR9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXb3Jrc3BhY2VTY2FmZm9sZCB7XG5cdHB1YmxpYyByZWFkb25seSBmaWxlczogU291cmNlRmlsZVtdID0gW107XG5cdHB1YmxpYyB0YXJnZXREaXI6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cdHByaXZhdGUgX25hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKiogUHJvamVjdCBuYW1lIOKAlCBob3N0IGRpcmVjdG9yeSBiYXNlbmFtZSwgbm90IHRoZSBpbi1jb250YWluZXIgbW91bnQgcGF0aC4gKi9cblx0cHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX25hbWUgPz8gYmFzZW5hbWUodGhpcy50YXJnZXREaXIpO1xuXHR9XG5cblx0cHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fbmFtZSA9IG5hbWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQWRkIGFuIGFkLWhvYyBmaWxlIHByb3ZpZGVyIHdob3NlIG91dHB1dCBpcyBpbmNsdWRlZCBhdCByZW5kZXIgdGltZS4gKi9cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuZmlsZXMucHVzaCguLi5wcm92aWRlci5maWxlcygpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhYnN0cmFjdCBhZGRNb2RlbDxUIGV4dGVuZHMgS2V5ZWRNb2RlbD4obW9kZWw6IFQpOiBUO1xuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkO1xuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KFxuXHRcdGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCxcblx0KTogVFtdO1xuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0UHJvamVjdChkaXI6IHN0cmluZyk6IFByb2plY3RTY2FmZm9sZCB8IHVuZGVmaW5lZDtcblx0cHVibGljIGFic3RyYWN0IGdldFByb2plY3RzKCk6IHJlYWRvbmx5IFByb2plY3RTY2FmZm9sZFtdO1xuXHRwdWJsaWMgYWJzdHJhY3Qgc2NhZmZvbGQoKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNb25vUmVwb1NjYWZmb2xkIGV4dGVuZHMgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9tb2RlbHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlRmlsZVByb3ZpZGVyPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0czogUHJvamVjdFNjYWZmb2xkW10gPSBbXTtcblxuXHQvKiogUmVnaXN0ZXIgYSBuYW1lZCBwcm9qZWN0LiAqL1xuXHRwdWJsaWMgYWRkUHJvamVjdChwcm9qZWN0OiBQcm9qZWN0U2NhZmZvbGQpOiBQcm9qZWN0U2NhZmZvbGQge1xuXHRcdHRoaXMuX3Byb2plY3RzLnB1c2gocHJvamVjdCk7XG5cdFx0cmV0dXJuIHByb2plY3Q7XG5cdH1cblxuXHQvKiogUmV0cmlldmUgYSBwcmV2aW91c2x5LXJlZ2lzdGVyZWQgcHJvamVjdCBieSBpdHMgZGlyZWN0b3J5IHBhdGguICovXG5cdHB1YmxpYyBnZXRQcm9qZWN0KGRpcjogc3RyaW5nKTogUHJvamVjdFNjYWZmb2xkIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdHMuZmluZCgocCkgPT4gcC5kaXIgPT09IGRpcik7XG5cdH1cblxuXHQvKiogQWxsIHJlZ2lzdGVyZWQgcHJvamVjdHMsIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cblx0cHVibGljIGdldFByb2plY3RzKCk6IHJlYWRvbmx5IFByb2plY3RTY2FmZm9sZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdHM7XG5cdH1cblxuXHQvKiogUmVnaXN0ZXIgYSBuYW1lZCBtb2RlbCBhdCB3b3Jrc3BhY2UgbGV2ZWwuICovXG5cdHB1YmxpYyBhZGRNb2RlbDxUIGV4dGVuZHMgS2V5ZWRNb2RlbD4obW9kZWw6IFQpOiBUIHtcblx0XHR0aGlzLl9tb2RlbHMuc2V0KG1vZGVsLmtleSwgbW9kZWwpO1xuXHRcdHJldHVybiBtb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIG1vZGVsIGJ5IGtleS4gU2VhcmNoZXMgd29ya3NwYWNlIG1vZGVscyBmaXJzdCwgdGhlbiBhbGxcblx0ICogcmVnaXN0ZXJlZCBwcm9qZWN0cyBpbiBvcmRlci5cblx0ICovXG5cdHB1YmxpYyBnZXRNb2RlbDxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG0gPSB0aGlzLl9tb2RlbHMuZ2V0KGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcblx0XHRpZiAobSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgdGhpcy5fcHJvamVjdHMpIHtcblx0XHRcdGNvbnN0IHBtID0gcHJvamVjdC5nZXRNb2RlbDxUPihrZXkpO1xuXHRcdFx0aWYgKHBtICE9PSB1bmRlZmluZWQpIHJldHVybiBwbTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhbGwgbW9kZWxzIG9mIGEgZ2l2ZW4gdHlwZS4gU2VhcmNoZXMgd29ya3NwYWNlIG1vZGVscyBhbmQgYWxsXG5cdCAqIHByb2plY3RzLCBzbyBmZWF0dXJlcyBjYW4gZGlzY292ZXIgY29udHJvbGxlcnMgYWNyb3NzIG11bHRpcGxlIHByb2plY3RzLlxuXHQgKi9cblx0cHVibGljIGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQpOiBUW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5maWx0ZXIoKG0pOiBtIGlzIFQgPT4gbSBpbnN0YW5jZW9mIGN0b3IpLFxuXHRcdFx0Li4udGhpcy5fcHJvamVjdHMuZmxhdE1hcCgocCkgPT4gcC5nZXRNb2RlbHMoY3RvcikpLFxuXHRcdF07XG5cdH1cblxuXHQvKiogUmVuZGVyIGFsbCBtb2RlbHMgYW5kIHByb2plY3RzIGludG8gZmlsZXMsIHRoZW4gd3JpdGUgZXZlcnl0aGluZyB0byBkaXNrLiAqL1xuXHRwdWJsaWMgYXN5bmMgc2NhZmZvbGQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWxsRmlsZXMgPSBbXG5cdFx0XHQuLi50aGlzLmZpbGVzLFxuXHRcdFx0Li4uWy4uLnRoaXMuX21vZGVscy52YWx1ZXMoKV0uZmxhdE1hcCgobSkgPT4gbS5maWxlcygpKSxcblx0XHRcdC4uLnRoaXMuX3Byb2plY3RzLmZsYXRNYXAoKHApID0+IHAuZmlsZXMoKSksXG5cdFx0XTtcblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0YWxsRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnRhcmdldERpciwgZmlsZS5maWxlUGF0aCk7XG5cdFx0XHRcdGF3YWl0IG1rZGlyKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0XHRcdFx0YXdhaXQgd3JpdGVGaWxlKGZ1bGxQYXRoLCBmaWxlLmNvbnRlbnQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJXb3Jrc3BhY2VTY2FmZm9sZCIsIl9tb2RlbHMiLCJNYXAiLCJfZmlsZXMiLCJkaXIiLCJhZGRNb2RlbCIsIm1vZGVsIiwic2V0Iiwia2V5IiwiYWRkRmlsZSIsInByb3ZpZGVyIiwicHVzaCIsImZpbGVzIiwiZ2V0TW9kZWwiLCJnZXQiLCJnZXRNb2RlbHMiLCJjdG9yIiwidmFsdWVzIiwiZmlsdGVyIiwibSIsImFsbCIsImZsYXRNYXAiLCJtYXAiLCJmIiwiZmlsZVBhdGgiLCJjb250ZW50IiwidGFyZ2V0RGlyIiwicHJvY2VzcyIsImN3ZCIsIl9uYW1lIiwibmFtZSIsImJhc2VuYW1lIiwic2V0TmFtZSIsIl9wcm9qZWN0cyIsImFkZFByb2plY3QiLCJwcm9qZWN0IiwiZ2V0UHJvamVjdCIsImZpbmQiLCJwIiwiZ2V0UHJvamVjdHMiLCJ1bmRlZmluZWQiLCJwbSIsInNjYWZmb2xkIiwiYWxsRmlsZXMiLCJQcm9taXNlIiwiZmlsZSIsImZ1bGxQYXRoIiwiam9pbiIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUF5RWFBO2VBQUFBOztRQTlEQUM7ZUFBQUE7O1FBK0JTQztlQUFBQTs7OzBCQTFDVzswQkFDTztBQVVqQyxNQUFNRDs7SUFDS0UsVUFBVSxJQUFJQyxNQUFrQztJQUNoREMsU0FBdUIsRUFBRSxDQUFDO0lBRTNDLFlBQW1CLEFBQWdCQyxHQUFXLENBQUU7YUFBYkEsTUFBQUE7SUFBYztJQUUxQ0MsU0FBK0JDLEtBQVEsRUFBSztRQUNsRCxJQUFJLENBQUNMLE9BQU8sQ0FBQ00sR0FBRyxDQUFDRCxNQUFNRSxHQUFHLEVBQUVGO1FBQzVCLE9BQU9BO0lBQ1I7SUFFT0csUUFBUUMsUUFBNEIsRUFBUTtRQUNsRCxJQUFJLENBQUNQLE1BQU0sQ0FBQ1EsSUFBSSxJQUFJRCxTQUFTRSxLQUFLO1FBQ2xDLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFNBQXVDTCxHQUFXLEVBQWlCO1FBQ3pFLE9BQU8sSUFBSSxDQUFDUCxPQUFPLENBQUNhLEdBQUcsQ0FBQ047SUFDekI7SUFFT08sVUFBd0NDLElBQWlDLEVBQU87UUFDdEYsT0FBTztlQUFJLElBQUksQ0FBQ2YsT0FBTyxDQUFDZ0IsTUFBTTtTQUFHLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFjQSxhQUFhSDtJQUN0RTtJQUVBLDBEQUEwRCxHQUMxRCxBQUFPSixRQUFzQjtRQUM1QixNQUFNUSxNQUFNO2VBQUksSUFBSSxDQUFDakIsTUFBTTtlQUFLO21CQUFJLElBQUksQ0FBQ0YsT0FBTyxDQUFDZ0IsTUFBTTthQUFH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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "TsConfig", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return TsConfig;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _const = require("./const.js");
|
|
12
|
+
class TsConfig {
|
|
13
|
+
key = _const.WELL_KNOWN_FILES.TSCONFIG;
|
|
14
|
+
files() {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
filePath: "tsconfig.json",
|
|
18
|
+
content: JSON.stringify({
|
|
19
|
+
compilerOptions: {
|
|
20
|
+
target: "ES2022",
|
|
21
|
+
module: "NodeNext",
|
|
22
|
+
moduleResolution: "NodeNext",
|
|
23
|
+
strict: true,
|
|
24
|
+
skipLibCheck: true,
|
|
25
|
+
experimentalDecorators: true,
|
|
26
|
+
emitDecoratorMetadata: true
|
|
27
|
+
}
|
|
28
|
+
}, null, 2)
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvdHNjb25maWcubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVHNDb25maWcgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuVFNDT05GSUc7XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwidHNjb25maWcuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb21waWxlck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBcIkVTMjAyMlwiLFxuXHRcdFx0XHRcdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdFx0XHRcdFx0bW9kdWxlUmVzb2x1dGlvbjogXCJOb2RlTmV4dFwiLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZXhwZXJpbWVudGFsRGVjb3JhdG9yczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZW1pdERlY29yYXRvck1ldGFkYXRhOiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlRzQ29uZmlnIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIlRTQ09ORklHIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImV4cGVyaW1lbnRhbERlY29yYXRvcnMiLCJlbWl0RGVjb3JhdG9yTWV0YWRhdGEiXSwibWFwcGluZ3MiOiI7Ozs7K0JBR2FBOzs7ZUFBQUE7Ozt1QkFIb0I7QUFHMUIsTUFBTUE7SUFDSUMsTUFBTUMsdUJBQWdCLENBQUNDLFFBQVEsQ0FBQztJQUV6Q0MsUUFBc0I7UUFDNUIsT0FBTztZQUNOO2dCQUNDQyxVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQ3RCO29CQUNDQyxpQkFBaUI7d0JBQ2hCQyxRQUFRO3dCQUNSQyxRQUFRO3dCQUNSQyxrQkFBa0I7d0JBQ2xCQyxRQUFRO3dCQUNSQyxjQUFjO3dCQUNkQyx3QkFBd0I7d0JBQ3hCQyx1QkFBdUI7b0JBQ3hCO2dCQUNELEdBQ0EsTUFDQTtZQUVGO1NBQ0E7SUFDRjtBQUNEIn0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "VitestConfig", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return VitestConfig;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _const = require("./const.js");
|
|
12
|
+
class VitestConfig {
|
|
13
|
+
key = _const.WELL_KNOWN_FILES.VITEST_CONFIG;
|
|
14
|
+
files() {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
filePath: "vitest.config.ts",
|
|
18
|
+
content: [
|
|
19
|
+
'import { forgeBuild } from "@decohere/forge/vitest";',
|
|
20
|
+
'import { defineConfig } from "vitest/config";',
|
|
21
|
+
"",
|
|
22
|
+
"export default defineConfig({",
|
|
23
|
+
'\tplugins: [forgeBuild({ logLevel: "silent" })],',
|
|
24
|
+
"\ttest: {",
|
|
25
|
+
'\t\tinclude: ["projects/**/*.{test,spec}.?(c|m)[jt]s?(x)"],',
|
|
26
|
+
"\t},",
|
|
27
|
+
"});",
|
|
28
|
+
""
|
|
29
|
+
].join("\n")
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvdml0ZXN0LWNvbmZpZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBWaXRlc3RDb25maWcgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuVklURVNUX0NPTkZJRztcblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJ2aXRlc3QuY29uZmlnLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFtcblx0XHRcdFx0XHQnaW1wb3J0IHsgZm9yZ2VCdWlsZCB9IGZyb20gXCJAZGVjb2hlcmUvZm9yZ2Uvdml0ZXN0XCI7Jyxcblx0XHRcdFx0XHQnaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIjsnLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0XCJleHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1wiLFxuXHRcdFx0XHRcdCdcXHRwbHVnaW5zOiBbZm9yZ2VCdWlsZCh7IGxvZ0xldmVsOiBcInNpbGVudFwiIH0pXSwnLFxuXHRcdFx0XHRcdFwiXFx0dGVzdDoge1wiLFxuXHRcdFx0XHRcdCdcXHRcXHRpbmNsdWRlOiBbXCJwcm9qZWN0cy8qKi8qLnt0ZXN0LHNwZWN9Lj8oY3xtKVtqdF1zPyh4KVwiXSwnLFxuXHRcdFx0XHRcdFwiXFx0fSxcIixcblx0XHRcdFx0XHRcIn0pO1wiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlZpdGVzdENvbmZpZyIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJWSVRFU1RfQ09ORklHIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7OytCQUdhQTs7O2VBQUFBOzs7dUJBSG9CO0FBRzFCLE1BQU1BO0lBQ0lDLE1BQU1DLHVCQUFnQixDQUFDQyxhQUFhLENBQUM7SUFFOUNDLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBUztvQkFDUjtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtvQkFDQTtpQkFDQSxDQUFDQyxJQUFJLENBQUM7WUFDUjtTQUNBO0lBQ0Y7QUFDRCJ9
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "VSCodeSettings", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return VSCodeSettings;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _const = require("./const.js");
|
|
12
|
+
class VSCodeSettings {
|
|
13
|
+
title;
|
|
14
|
+
key = _const.WELL_KNOWN_FILES.VSCODE_SETTINGS;
|
|
15
|
+
constructor(title){
|
|
16
|
+
this.title = title;
|
|
17
|
+
}
|
|
18
|
+
files() {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
filePath: ".vscode/settings.json",
|
|
22
|
+
content: JSON.stringify({
|
|
23
|
+
"window.title": `${this.title}\${separator}\${activeEditorShort}`,
|
|
24
|
+
"window.titleSeparator": " | "
|
|
25
|
+
}, null, 2)
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvdnNjb2RlLXNldHRpbmdzLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuZXhwb3J0IGNsYXNzIFZTQ29kZVNldHRpbmdzIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLlZTQ09ERV9TRVRUSU5HUztcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0aXRsZTogc3RyaW5nKSB7fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi52c2NvZGUvc2V0dGluZ3MuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcIndpbmRvdy50aXRsZVwiOiBgJHt0aGlzLnRpdGxlfVxcJHtzZXBhcmF0b3J9XFwke2FjdGl2ZUVkaXRvclNob3J0fWAsXG5cdFx0XHRcdFx0XHRcIndpbmRvdy50aXRsZVNlcGFyYXRvclwiOiBcIiB8IFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiVlNDb2RlU2V0dGluZ3MiLCJrZXkiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiVlNDT0RFX1NFVFRJTkdTIiwidGl0bGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7K0JBR2FBOzs7ZUFBQUE7Ozt1QkFIb0I7QUFHMUIsTUFBTUE7O0lBQ0lDLE1BQU1DLHVCQUFnQixDQUFDQyxlQUFlLENBQUM7SUFFdkQsWUFBbUIsQUFBaUJDLEtBQWEsQ0FBRTthQUFmQSxRQUFBQTtJQUFnQjtJQUU3Q0MsUUFBc0I7UUFDNUIsT0FBTztZQUNOO2dCQUNDQyxVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQ3RCO29CQUNDLGdCQUFnQixHQUFHLElBQUksQ0FBQ0wsS0FBSyxDQUFDLGtDQUFrQyxDQUFDO29CQUNqRSx5QkFBeUI7Z0JBQzFCLEdBQ0EsTUFDQTtZQUVGO1NBQ0E7SUFDRjtBQUNEIn0=
|
|
@@ -0,0 +1,57 @@
|
|
|
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 createProgram () {
|
|
13
|
+
return createProgram;
|
|
14
|
+
},
|
|
15
|
+
get runCli () {
|
|
16
|
+
return runCli;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _commander = require("commander");
|
|
20
|
+
const _apiname = require("./webapi/api-name.js");
|
|
21
|
+
const _clioptions = require("./webapi/cli-options.js");
|
|
22
|
+
function createProgram() {
|
|
23
|
+
const program = new _commander.Command();
|
|
24
|
+
program.exitOverride();
|
|
25
|
+
program.name("decohere").description("Decohere CLI").option("-d <directory>", "Target directory (default: current directory)", ".");
|
|
26
|
+
const create = program.command("create").description("Create a new Decohere workspace");
|
|
27
|
+
(0, _clioptions.addWebapiFeatureOptions)(create.command("webapi").argument("[directory]", "Target directory (default: -d or current directory)").option("--name <slug>", "API name under projects/ (repeatable; default: api)", _clioptions.collectName, [])).action(async (directory, _opts, cmd)=>{
|
|
28
|
+
await (0, _clioptions.runScaffoldApi)((0, _clioptions.toApiOptions)(directory, cmd.optsWithGlobals()));
|
|
29
|
+
});
|
|
30
|
+
(0, _clioptions.addWebapiFeatureOptions)(program.command("add").description("Add to an existing Decohere workspace").command("api").argument("<name>", "API name under projects/")).action(async (name, _opts, cmd)=>{
|
|
31
|
+
await (0, _clioptions.runScaffoldApi)((0, _clioptions.toApiOptions)(undefined, cmd.optsWithGlobals(), {
|
|
32
|
+
names: [
|
|
33
|
+
name
|
|
34
|
+
],
|
|
35
|
+
add: true
|
|
36
|
+
}));
|
|
37
|
+
});
|
|
38
|
+
return program;
|
|
39
|
+
}
|
|
40
|
+
async function runCli(argv = process.argv) {
|
|
41
|
+
try {
|
|
42
|
+
await createProgram().parseAsync(argv);
|
|
43
|
+
} catch (err) {
|
|
44
|
+
if (err instanceof _commander.CommanderError) {
|
|
45
|
+
process.exit(err.exitCode);
|
|
46
|
+
}
|
|
47
|
+
if (err instanceof _apiname.CreateCliError) {
|
|
48
|
+
console.error(`\n ${err.message}\n`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
console.error(err);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
process.exit(process.exitCode ?? 0);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9wcm9ncmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRlckVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgQ3JlYXRlQ2xpRXJyb3IgfSBmcm9tIFwiLi93ZWJhcGkvYXBpLW5hbWUuanNcIjtcbmltcG9ydCB7XG5cdGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zLFxuXHRjb2xsZWN0TmFtZSxcblx0cnVuU2NhZmZvbGRBcGksXG5cdHRvQXBpT3B0aW9ucyxcbn0gZnJvbSBcIi4vd2ViYXBpL2NsaS1vcHRpb25zLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKCk6IENvbW1hbmQge1xuXHRjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblx0cHJvZ3JhbS5leGl0T3ZlcnJpZGUoKTtcblx0cHJvZ3JhbVxuXHRcdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0XHQuZGVzY3JpcHRpb24oXCJEZWNvaGVyZSBDTElcIilcblx0XHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5cdGNvbnN0IGNyZWF0ZSA9IHByb2dyYW0uY29tbWFuZChcImNyZWF0ZVwiKS5kZXNjcmlwdGlvbihcIkNyZWF0ZSBhIG5ldyBEZWNvaGVyZSB3b3Jrc3BhY2VcIik7XG5cdGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zKFxuXHRcdGNyZWF0ZVxuXHRcdFx0LmNvbW1hbmQoXCJ3ZWJhcGlcIilcblx0XHRcdC5hcmd1bWVudChcIltkaXJlY3RvcnldXCIsIFwiVGFyZ2V0IGRpcmVjdG9yeSAoZGVmYXVsdDogLWQgb3IgY3VycmVudCBkaXJlY3RvcnkpXCIpXG5cdFx0XHQub3B0aW9uKFxuXHRcdFx0XHRcIi0tbmFtZSA8c2x1Zz5cIixcblx0XHRcdFx0XCJBUEkgbmFtZSB1bmRlciBwcm9qZWN0cy8gKHJlcGVhdGFibGU7IGRlZmF1bHQ6IGFwaSlcIixcblx0XHRcdFx0Y29sbGVjdE5hbWUsXG5cdFx0XHRcdFtdIGFzIHN0cmluZ1tdLFxuXHRcdFx0KSxcblx0KS5hY3Rpb24oYXN5bmMgKGRpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBfb3B0czogdW5rbm93biwgY21kOiBDb21tYW5kKSA9PiB7XG5cdFx0YXdhaXQgcnVuU2NhZmZvbGRBcGkodG9BcGlPcHRpb25zKGRpcmVjdG9yeSwgY21kLm9wdHNXaXRoR2xvYmFscygpKSk7XG5cdH0pO1xuXG5cdGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zKFxuXHRcdHByb2dyYW1cblx0XHRcdC5jb21tYW5kKFwiYWRkXCIpXG5cdFx0XHQuZGVzY3JpcHRpb24oXCJBZGQgdG8gYW4gZXhpc3RpbmcgRGVjb2hlcmUgd29ya3NwYWNlXCIpXG5cdFx0XHQuY29tbWFuZChcImFwaVwiKVxuXHRcdFx0LmFyZ3VtZW50KFwiPG5hbWU+XCIsIFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvXCIpLFxuXHQpLmFjdGlvbihhc3luYyAobmFtZTogc3RyaW5nLCBfb3B0czogdW5rbm93biwgY21kOiBDb21tYW5kKSA9PiB7XG5cdFx0YXdhaXQgcnVuU2NhZmZvbGRBcGkoXG5cdFx0XHR0b0FwaU9wdGlvbnModW5kZWZpbmVkLCBjbWQub3B0c1dpdGhHbG9iYWxzKCksIHsgbmFtZXM6IFtuYW1lXSwgYWRkOiB0cnVlIH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiBwcm9ncmFtO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ2xpKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0YXdhaXQgY3JlYXRlUHJvZ3JhbSgpLnBhcnNlQXN5bmMoYXJndik7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBDb21tYW5kZXJFcnJvcikge1xuXHRcdFx0cHJvY2Vzcy5leGl0KGVyci5leGl0Q29kZSk7XG5cdFx0fVxuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBDcmVhdGVDbGlFcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgXFxuICAke2Vyci5tZXNzYWdlfVxcbmApO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cdHByb2Nlc3MuZXhpdChwcm9jZXNzLmV4aXRDb2RlID8/IDApO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVByb2dyYW0iLCJydW5DbGkiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImV4aXRPdmVycmlkZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiIsImNyZWF0ZSIsImNvbW1hbmQiLCJhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyIsImFyZ3VtZW50IiwiY29sbGVjdE5hbWUiLCJhY3Rpb24iLCJkaXJlY3RvcnkiLCJfb3B0cyIsImNtZCIsInJ1blNjYWZmb2xkQXBpIiwidG9BcGlPcHRpb25zIiwib3B0c1dpdGhHbG9iYWxzIiwidW5kZWZpbmVkIiwibmFtZXMiLCJhZGQiLCJhcmd2IiwicHJvY2VzcyIsInBhcnNlQXN5bmMiLCJlcnIiLCJDb21tYW5kZXJFcnJvciIsImV4aXQiLCJleGl0Q29kZSIsIkNyZWF0ZUNsaUVycm9yIiwiY29uc29sZSIsImVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFTZ0JBO2VBQUFBOztRQXNDTUM7ZUFBQUE7OzsyQkEvQ2tCO3lCQUNUOzRCQU14QjtBQUVBLFNBQVNEO0lBQ2YsTUFBTUUsVUFBVSxJQUFJQyxrQkFBTztJQUMzQkQsUUFBUUUsWUFBWTtJQUNwQkYsUUFDRUcsSUFBSSxDQUFDLFlBQ0xDLFdBQVcsQ0FBQyxnQkFDWkMsTUFBTSxDQUFDLGtCQUFrQixpREFBaUQ7SUFFNUUsTUFBTUMsU0FBU04sUUFBUU8sT0FBTyxDQUFDLFVBQVVILFdBQVcsQ0FBQztJQUNyREksSUFBQUEsbUNBQXVCLEVBQ3RCRixPQUNFQyxPQUFPLENBQUMsVUFDUkUsUUFBUSxDQUFDLGVBQWUsdURBQ3hCSixNQUFNLENBQ04saUJBQ0EsdURBQ0FLLHVCQUFXLEVBQ1gsRUFBRSxHQUVIQyxNQUFNLENBQUMsT0FBT0MsV0FBK0JDLE9BQWdCQztRQUM5RCxNQUFNQyxJQUFBQSwwQkFBYyxFQUFDQyxJQUFBQSx3QkFBWSxFQUFDSixXQUFXRSxJQUFJRyxlQUFlO0lBQ2pFO0lBRUFULElBQUFBLG1DQUF1QixFQUN0QlIsUUFDRU8sT0FBTyxDQUFDLE9BQ1JILFdBQVcsQ0FBQyx5Q0FDWkcsT0FBTyxDQUFDLE9BQ1JFLFFBQVEsQ0FBQyxVQUFVLDZCQUNwQkUsTUFBTSxDQUFDLE9BQU9SLE1BQWNVLE9BQWdCQztRQUM3QyxNQUFNQyxJQUFBQSwwQkFBYyxFQUNuQkMsSUFBQUEsd0JBQVksRUFBQ0UsV0FBV0osSUFBSUcsZUFBZSxJQUFJO1lBQUVFLE9BQU87Z0JBQUNoQjthQUFLO1lBQUVpQixLQUFLO1FBQUs7SUFFNUU7SUFFQSxPQUFPcEI7QUFDUjtBQUVPLGVBQWVELE9BQU9zQixPQUFpQkMsUUFBUUQsSUFBSTtJQUN6RCxJQUFJO1FBQ0gsTUFBTXZCLGdCQUFnQnlCLFVBQVUsQ0FBQ0Y7SUFDbEMsRUFBRSxPQUFPRyxLQUFLO1FBQ2IsSUFBSUEsZUFBZUMseUJBQWMsRUFBRTtZQUNsQ0gsUUFBUUksSUFBSSxDQUFDRixJQUFJRyxRQUFRO1FBQzFCO1FBQ0EsSUFBSUgsZUFBZUksdUJBQWMsRUFBRTtZQUNsQ0MsUUFBUUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFTixJQUFJTyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BDVCxRQUFRSSxJQUFJLENBQUM7UUFDZDtRQUNBRyxRQUFRQyxLQUFLLENBQUNOO1FBQ2RGLFFBQVFJLElBQUksQ0FBQztJQUNkO0lBQ0FKLFFBQVFJLElBQUksQ0FBQ0osUUFBUUssUUFBUSxJQUFJO0FBQ2xDIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve scaffold destination: positional `webapi my-app` wins over `-d`.
|
|
3
|
+
* `npm create … webapi -d my-app` drops `-d` (npm loglevel) and forwards `my-app`.
|
|
4
|
+
*/ "use strict";
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "resolveTargetDir", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function() {
|
|
11
|
+
return resolveTargetDir;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
function resolveTargetDir(positional, flag) {
|
|
15
|
+
const dir = positional?.trim() || flag?.trim() || ".";
|
|
16
|
+
return dir;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9yZXNvbHZlLXRhcmdldC1kaXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvbHZlIHNjYWZmb2xkIGRlc3RpbmF0aW9uOiBwb3NpdGlvbmFsIGB3ZWJhcGkgbXktYXBwYCB3aW5zIG92ZXIgYC1kYC5cbiAqIGBucG0gY3JlYXRlIOKApiB3ZWJhcGkgLWQgbXktYXBwYCBkcm9wcyBgLWRgIChucG0gbG9nbGV2ZWwpIGFuZCBmb3J3YXJkcyBgbXktYXBwYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUYXJnZXREaXIocG9zaXRpb25hbD86IHN0cmluZywgZmxhZz86IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IGRpciA9IHBvc2l0aW9uYWw/LnRyaW0oKSB8fCBmbGFnPy50cmltKCkgfHwgXCIuXCI7XG5cdHJldHVybiBkaXI7XG59XG4iXSwibmFtZXMiOlsicmVzb2x2ZVRhcmdldERpciIsInBvc2l0aW9uYWwiLCJmbGFnIiwiZGlyIiwidHJpbSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7OytCQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxpQkFBaUJDLFVBQW1CLEVBQUVDLElBQWE7SUFDbEUsTUFBTUMsTUFBTUYsWUFBWUcsVUFBVUYsTUFBTUUsVUFBVTtJQUNsRCxPQUFPRDtBQUNSIn0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ScaffoldService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ScaffoldService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
async function scaffold(workspace, cliOptions, features) {
|
|
12
|
+
const options = await getAllOptions(workspace, cliOptions, features);
|
|
13
|
+
// Features mutate workspace models first, then workspace renders to disk.
|
|
14
|
+
await scaffoldFeatures(workspace, options, features);
|
|
15
|
+
await scaffoldWorkspace(workspace, options);
|
|
16
|
+
// Post-write phase: install deps, print final messages, etc.
|
|
17
|
+
await finalizeFeatures(workspace, options, features);
|
|
18
|
+
}
|
|
19
|
+
async function scaffoldWorkspace(workspace, _options) {
|
|
20
|
+
await workspace.scaffold();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Iterate features in order, calling `getOptions` on each.
|
|
24
|
+
* Each feature receives the running merged options so later features can
|
|
25
|
+
* branch on decisions made by earlier ones (e.g. database choice affects auth).
|
|
26
|
+
* Results are shallow-merged, so features only need to return what they own.
|
|
27
|
+
*/ async function getAllOptions(workspace, cliOptions, features) {
|
|
28
|
+
let options = {
|
|
29
|
+
...cliOptions
|
|
30
|
+
};
|
|
31
|
+
for (const feature of features){
|
|
32
|
+
const featureOptions = await feature.getOptions(workspace, options);
|
|
33
|
+
options = {
|
|
34
|
+
...options,
|
|
35
|
+
...featureOptions
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return options;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Iterate features in order, calling `scaffold` with the fully-resolved options.
|
|
42
|
+
* All option-gathering is complete before any scaffolding begins.
|
|
43
|
+
*/ async function scaffoldFeatures(workspace, options, features) {
|
|
44
|
+
for (const feature of features){
|
|
45
|
+
await feature.scaffold(workspace, options);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Iterate features in order, calling `finalize` on each (if defined).
|
|
50
|
+
* All files are on disk by this point.
|
|
51
|
+
*/ async function finalizeFeatures(workspace, options, features) {
|
|
52
|
+
for (const feature of features){
|
|
53
|
+
if (feature.finalize) {
|
|
54
|
+
await feature.finalize(workspace, options);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const ScaffoldService = {
|
|
59
|
+
scaffold
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV29ya3NwYWNlU2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcblxuLyoqXG4gKiBBIGZlYXR1cmUgaGFzIHRocmVlIHJlc3BvbnNpYmlsaXRpZXM6XG4gKiAgMS4gYGdldE9wdGlvbnNgIOKAlCByZXNvbHZlIHByb3ZpZGVyIHNlbGVjdGlvbiBhbmQgYW55IGZvbGxvdy11cCBxdWVzdGlvbnMuXG4gKiAgICAgUmVjZWl2ZXMgdGhlIG9wdGlvbnMgY29sbGVjdGVkIHNvIGZhcjsgcmV0dXJucyBvbmx5IHRoZSBrZXlzIGl0IG93bnMuXG4gKiAgICAgU2hvcnQtY2lyY3VpdHMgaWYgdGhlIGNhbGxlciBhbHJlYWR5IHN1cHBsaWVkIHRob3NlIGtleXMgdmlhIENMSSBmbGFncy5cbiAqICAyLiBgc2NhZmZvbGRgIOKAlCBtdXRhdGUgdGhlIHdvcmtzcGFjZSBtb2RlbHMgYW5kL29yIHdyaXRlIGZpbGVzIHVzaW5nIHRoZVxuICogICAgIGZ1bGx5LXJlc29sdmVkIG9wdGlvbnMuIENhbGxlZCBhZnRlciBBTEwgZmVhdHVyZXMgaGF2ZSBnYXRoZXJlZCBvcHRpb25zXG4gKiAgICAgYnV0IEJFRk9SRSBmaWxlcyBhcmUgd3JpdHRlbiB0byBkaXNrLlxuICogIDMuIGBmaW5hbGl6ZWAgKG9wdGlvbmFsKSDigJQgcnVuIHBvc3Qtd3JpdGUgYWN0aW9ucyAoZS5nLiBpbnN0YWxsIGRlcGVuZGVuY2llcykuXG4gKiAgICAgQ2FsbGVkIGFmdGVyIHdvcmtzcGFjZS5zY2FmZm9sZCgpIGhhcyBmbHVzaGVkIGFsbCBmaWxlcyB0byBkaXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmU8VE9wdGlvbnMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+IHtcblx0Z2V0T3B0aW9ucyhcblx0XHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRcdGNsaU9wdGlvbnM6IFBhcnRpYWw8VE9wdGlvbnM+LFxuXHQpOiBQcm9taXNlPFBhcnRpYWw8VE9wdGlvbnM+Pjtcblx0c2NhZmZvbGQod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgb3B0aW9uczogVE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblx0ZmluYWxpemU/KHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBvYmplY3QsXG5cdGZlYXR1cmVzOiBGZWF0dXJlW10sXG4pIHtcblx0Y29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldEFsbE9wdGlvbnMod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG5cdC8vIEZlYXR1cmVzIG11dGF0ZSB3b3Jrc3BhY2UgbW9kZWxzIGZpcnN0LCB0aGVuIHdvcmtzcGFjZSByZW5kZXJzIHRvIGRpc2suXG5cdGF3YWl0IHNjYWZmb2xkRmVhdHVyZXMod29ya3NwYWNlLCBvcHRpb25zLCBmZWF0dXJlcyk7XG5cdGF3YWl0IHNjYWZmb2xkV29ya3NwYWNlKHdvcmtzcGFjZSwgb3B0aW9ucyk7XG5cdC8vIFBvc3Qtd3JpdGUgcGhhc2U6IGluc3RhbGwgZGVwcywgcHJpbnQgZmluYWwgbWVzc2FnZXMsIGV0Yy5cblx0YXdhaXQgZmluYWxpemVGZWF0dXJlcyh3b3Jrc3BhY2UsIG9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRXb3Jrc3BhY2Uod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgX29wdGlvbnM6IG9iamVjdCkge1xuXHRhd2FpdCB3b3Jrc3BhY2Uuc2NhZmZvbGQoKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIGZlYXR1cmVzIGluIG9yZGVyLCBjYWxsaW5nIGBnZXRPcHRpb25zYCBvbiBlYWNoLlxuICogRWFjaCBmZWF0dXJlIHJlY2VpdmVzIHRoZSBydW5uaW5nIG1lcmdlZCBvcHRpb25zIHNvIGxhdGVyIGZlYXR1cmVzIGNhblxuICogYnJhbmNoIG9uIGRlY2lzaW9ucyBtYWRlIGJ5IGVhcmxpZXIgb25lcyAoZS5nLiBkYXRhYmFzZSBjaG9pY2UgYWZmZWN0cyBhdXRoKS5cbiAqIFJlc3VsdHMgYXJlIHNoYWxsb3ctbWVyZ2VkLCBzbyBmZWF0dXJlcyBvbmx5IG5lZWQgdG8gcmV0dXJuIHdoYXQgdGhleSBvd24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbE9wdGlvbnMoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IG9iamVjdCxcblx0ZmVhdHVyZXM6IEZlYXR1cmVbXSxcbik6IFByb21pc2U8b2JqZWN0PiB7XG5cdGxldCBvcHRpb25zID0geyAuLi5jbGlPcHRpb25zIH07XG5cdGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuXHRcdGNvbnN0IGZlYXR1cmVPcHRpb25zID0gYXdhaXQgZmVhdHVyZS5nZXRPcHRpb25zKHdvcmtzcGFjZSwgb3B0aW9ucyk7XG5cdFx0b3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgLi4uZmVhdHVyZU9wdGlvbnMgfTtcblx0fVxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBJdGVyYXRlIGZlYXR1cmVzIGluIG9yZGVyLCBjYWxsaW5nIGBzY2FmZm9sZGAgd2l0aCB0aGUgZnVsbHktcmVzb2x2ZWQgb3B0aW9ucy5cbiAqIEFsbCBvcHRpb24tZ2F0aGVyaW5nIGlzIGNvbXBsZXRlIGJlZm9yZSBhbnkgc2NhZmZvbGRpbmcgYmVnaW5zLlxuICovXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZEZlYXR1cmVzKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBvYmplY3QsXG5cdGZlYXR1cmVzOiBGZWF0dXJlW10sXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Zm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG5cdFx0YXdhaXQgZmVhdHVyZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIG9wdGlvbnMgYXMgbmV2ZXIpO1xuXHR9XG59XG5cbi8qKlxuICogSXRlcmF0ZSBmZWF0dXJlcyBpbiBvcmRlciwgY2FsbGluZyBgZmluYWxpemVgIG9uIGVhY2ggKGlmIGRlZmluZWQpLlxuICogQWxsIGZpbGVzIGFyZSBvbiBkaXNrIGJ5IHRoaXMgcG9pbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmFsaXplRmVhdHVyZXMoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IG9iamVjdCxcblx0ZmVhdHVyZXM6IEZlYXR1cmVbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuXHRmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcblx0XHRpZiAoZmVhdHVyZS5maW5hbGl6ZSkge1xuXHRcdFx0YXdhaXQgZmVhdHVyZS5maW5hbGl6ZSh3b3Jrc3BhY2UsIG9wdGlvbnMgYXMgbmV2ZXIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY29uc3QgU2NhZmZvbGRTZXJ2aWNlID0geyBzY2FmZm9sZCB9O1xuIl0sIm5hbWVzIjpbIlNjYWZmb2xkU2VydmljZSIsInNjYWZmb2xkIiwid29ya3NwYWNlIiwiY2xpT3B0aW9ucyIsImZlYXR1cmVzIiwib3B0aW9ucyIsImdldEFsbE9wdGlvbnMiLCJzY2FmZm9sZEZlYXR1cmVzIiwic2NhZmZvbGRXb3Jrc3BhY2UiLCJmaW5hbGl6ZUZlYXR1cmVzIiwiX29wdGlvbnMiLCJmZWF0dXJlIiwiZmVhdHVyZU9wdGlvbnMiLCJnZXRPcHRpb25zIiwiZmluYWxpemUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBd0ZhQTs7O2VBQUFBOzs7QUFsRWIsZUFBZUMsU0FDZEMsU0FBNEIsRUFDNUJDLFVBQWtCLEVBQ2xCQyxRQUFtQjtJQUVuQixNQUFNQyxVQUFVLE1BQU1DLGNBQWNKLFdBQVdDLFlBQVlDO0lBQzNELDBFQUEwRTtJQUMxRSxNQUFNRyxpQkFBaUJMLFdBQVdHLFNBQVNEO0lBQzNDLE1BQU1JLGtCQUFrQk4sV0FBV0c7SUFDbkMsNkRBQTZEO0lBQzdELE1BQU1JLGlCQUFpQlAsV0FBV0csU0FBU0Q7QUFDNUM7QUFFQSxlQUFlSSxrQkFBa0JOLFNBQTRCLEVBQUVRLFFBQWdCO0lBQzlFLE1BQU1SLFVBQVVELFFBQVE7QUFDekI7QUFFQTs7Ozs7Q0FLQyxHQUNELGVBQWVLLGNBQ2RKLFNBQTRCLEVBQzVCQyxVQUFrQixFQUNsQkMsUUFBbUI7SUFFbkIsSUFBSUMsVUFBVTtRQUFFLEdBQUdGLFVBQVU7SUFBQztJQUM5QixLQUFLLE1BQU1RLFdBQVdQLFNBQVU7UUFDL0IsTUFBTVEsaUJBQWlCLE1BQU1ELFFBQVFFLFVBQVUsQ0FBQ1gsV0FBV0c7UUFDM0RBLFVBQVU7WUFBRSxHQUFHQSxPQUFPO1lBQUUsR0FBR08sY0FBYztRQUFDO0lBQzNDO0lBQ0EsT0FBT1A7QUFDUjtBQUVBOzs7Q0FHQyxHQUNELGVBQWVFLGlCQUNkTCxTQUE0QixFQUM1QkcsT0FBZSxFQUNmRCxRQUFtQjtJQUVuQixLQUFLLE1BQU1PLFdBQVdQLFNBQVU7UUFDL0IsTUFBTU8sUUFBUVYsUUFBUSxDQUFDQyxXQUFXRztJQUNuQztBQUNEO0FBRUE7OztDQUdDLEdBQ0QsZUFBZUksaUJBQ2RQLFNBQTRCLEVBQzVCRyxPQUFlLEVBQ2ZELFFBQW1CO0lBRW5CLEtBQUssTUFBTU8sV0FBV1AsU0FBVTtRQUMvQixJQUFJTyxRQUFRRyxRQUFRLEVBQUU7WUFDckIsTUFBTUgsUUFBUUcsUUFBUSxDQUFDWixXQUFXRztRQUNuQztJQUNEO0FBQ0Q7QUFFTyxNQUFNTCxrQkFBa0I7SUFBRUM7QUFBUyJ9
|