@decohere/create 0.0.1-dev.20 → 0.0.1-dev.20261105.46
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/LICENSE +15 -0
- package/README.md +254 -0
- package/commonjs/src/cli.js +1 -34
- package/commonjs/src/index.js +26 -0
- package/commonjs/src/resolve-launch.js +100 -0
- package/commonjs/src/runner.js +63 -14
- package/commonjs/src/version.js +25 -9
- package/es6/src/cli.js +1 -34
- package/es6/src/index.js +2 -0
- package/es6/src/resolve-launch.js +87 -0
- package/es6/src/runner.js +67 -24
- package/es6/src/version.js +14 -6
- package/pack-builder-tgz.mjs +177 -0
- package/package.json +23 -11
- package/types/src/index.d.ts +3 -0
- package/types/src/resolve-launch.d.ts +20 -0
- package/types/src/runner.d.ts +3 -11
- package/types/src/version.d.ts +1 -1
- package/commonjs/src/domain/prompt.js +0 -55
- package/commonjs/src/models/compose.model.js +0 -82
- package/commonjs/src/models/config-yaml.model.js +0 -34
- package/commonjs/src/models/const.js +0 -29
- package/commonjs/src/models/container-image.model.js +0 -88
- package/commonjs/src/models/dev-container.model.js +0 -73
- package/commonjs/src/models/env-file.model.js +0 -33
- package/commonjs/src/models/gitignore.model.js +0 -32
- package/commonjs/src/models/launch-json.model.js +0 -52
- package/commonjs/src/models/package-json.model.js +0 -64
- package/commonjs/src/models/project.model.js +0 -126
- package/commonjs/src/models/source-file.js +0 -6
- package/commonjs/src/models/tsconfig.model.js +0 -34
- package/commonjs/src/models/vscode-settings.model.js +0 -31
- package/commonjs/src/services/scaffold.service.js +0 -62
- package/commonjs/src/webapi/create-api.js +0 -169
- package/commonjs/src/webapi/features/auth.feature.js +0 -166
- package/commonjs/src/webapi/features/auth0-cli.js +0 -151
- package/commonjs/src/webapi/features/database.feature.js +0 -151
- package/commonjs/src/webapi/features/finalize.feature.js +0 -51
- package/commonjs/src/webapi/features/postman.feature.js +0 -309
- package/commonjs/src/webapi/models/api-package-json.model.js +0 -57
- package/commonjs/src/webapi/models/auth-config.model.js +0 -23
- package/commonjs/src/webapi/models/controller-source-file.model.js +0 -180
- package/commonjs/src/webapi/models/main-source-file.model.js +0 -132
- package/commonjs/src/webapi/models/sample-files.model.js +0 -60
- package/es6/src/domain/prompt.js +0 -37
- package/es6/src/models/compose.model.js +0 -77
- package/es6/src/models/config-yaml.model.js +0 -30
- package/es6/src/models/const.js +0 -19
- package/es6/src/models/container-image.model.js +0 -84
- package/es6/src/models/dev-container.model.js +0 -68
- package/es6/src/models/env-file.model.js +0 -29
- package/es6/src/models/gitignore.model.js +0 -22
- package/es6/src/models/launch-json.model.js +0 -42
- package/es6/src/models/package-json.model.js +0 -60
- package/es6/src/models/project.model.js +0 -111
- package/es6/src/models/source-file.js +0 -3
- package/es6/src/models/tsconfig.model.js +0 -24
- package/es6/src/models/vscode-settings.model.js +0 -21
- package/es6/src/services/scaffold.service.js +0 -52
- package/es6/src/webapi/create-api.js +0 -151
- package/es6/src/webapi/features/auth.feature.js +0 -115
- package/es6/src/webapi/features/auth0-cli.js +0 -116
- package/es6/src/webapi/features/database.feature.js +0 -141
- package/es6/src/webapi/features/finalize.feature.js +0 -41
- package/es6/src/webapi/features/postman.feature.js +0 -258
- package/es6/src/webapi/models/api-package-json.model.js +0 -52
- package/es6/src/webapi/models/auth-config.model.js +0 -19
- package/es6/src/webapi/models/controller-source-file.model.js +0 -171
- package/es6/src/webapi/models/main-source-file.model.js +0 -128
- package/es6/src/webapi/models/sample-files.model.js +0 -42
- package/types/src/domain/prompt.d.ts +0 -2
- package/types/src/models/compose.model.d.ts +0 -32
- package/types/src/models/config-yaml.model.d.ts +0 -16
- package/types/src/models/const.d.ts +0 -17
- package/types/src/models/container-image.model.d.ts +0 -15
- package/types/src/models/dev-container.model.d.ts +0 -21
- package/types/src/models/env-file.model.d.ts +0 -14
- package/types/src/models/gitignore.model.d.ts +0 -6
- package/types/src/models/launch-json.model.d.ts +0 -5
- package/types/src/models/package-json.model.d.ts +0 -18
- package/types/src/models/project.model.d.ts +0 -55
- package/types/src/models/source-file.d.ts +0 -11
- package/types/src/models/tsconfig.model.d.ts +0 -5
- package/types/src/models/vscode-settings.model.d.ts +0 -7
- package/types/src/services/scaffold.service.d.ts +0 -22
- package/types/src/webapi/create-api.d.ts +0 -7
- package/types/src/webapi/features/auth.feature.d.ts +0 -7
- package/types/src/webapi/features/auth0-cli.d.ts +0 -22
- package/types/src/webapi/features/database.feature.d.ts +0 -5
- package/types/src/webapi/features/finalize.feature.d.ts +0 -2
- package/types/src/webapi/features/postman.feature.d.ts +0 -7
- package/types/src/webapi/models/api-package-json.model.d.ts +0 -17
- package/types/src/webapi/models/auth-config.model.d.ts +0 -18
- package/types/src/webapi/models/controller-source-file.model.d.ts +0 -42
- package/types/src/webapi/models/main-source-file.model.d.ts +0 -36
- package/types/src/webapi/models/sample-files.model.d.ts +0 -7
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { WELL_KNOWN_FILES } from "../../models/const.js";
|
|
2
|
-
/** Tracks named imports from a single module path, split into values and types. */ class ImportGroup {
|
|
3
|
-
_values = [];
|
|
4
|
-
_types = [];
|
|
5
|
-
add(name, typeOnly = false) {
|
|
6
|
-
if (typeOnly) {
|
|
7
|
-
// Value import already present — value wins, skip
|
|
8
|
-
if (!this._values.includes(name) && !this._types.includes(name)) {
|
|
9
|
-
this._types.push(name);
|
|
10
|
-
}
|
|
11
|
-
} else {
|
|
12
|
-
// Promote: remove from types if it was previously type-only
|
|
13
|
-
const typeIdx = this._types.indexOf(name);
|
|
14
|
-
if (typeIdx !== -1) this._types.splice(typeIdx, 1);
|
|
15
|
-
if (!this._values.includes(name)) this._values.push(name);
|
|
16
|
-
}
|
|
17
|
-
return this;
|
|
18
|
-
}
|
|
19
|
-
render(from) {
|
|
20
|
-
const values = [
|
|
21
|
-
...this._values
|
|
22
|
-
].sort();
|
|
23
|
-
const types = [
|
|
24
|
-
...this._types
|
|
25
|
-
].sort().map((n)=>`type ${n}`);
|
|
26
|
-
return `import { ${[
|
|
27
|
-
...values,
|
|
28
|
-
...types
|
|
29
|
-
].join(", ")} } from "${from}";`;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Model for `projects/api/src/main.ts`.
|
|
34
|
-
*
|
|
35
|
-
* Starts with the minimal HTTP + YAML config setup. Features mutate the model
|
|
36
|
-
* by calling addSideEffectImport / addImport / addBuilderCall / addEntity /
|
|
37
|
-
* addRepository. files() renders whatever has been accumulated.
|
|
38
|
-
*/ export class MainSourceFile {
|
|
39
|
-
appName;
|
|
40
|
-
key = WELL_KNOWN_FILES.MAIN_TS;
|
|
41
|
-
_sideEffectImports = [];
|
|
42
|
-
_extraImports = new Map();
|
|
43
|
-
_builderCalls = [];
|
|
44
|
-
_entities = [];
|
|
45
|
-
_repositories = [];
|
|
46
|
-
constructor(appName){
|
|
47
|
-
this.appName = appName;
|
|
48
|
-
}
|
|
49
|
-
/** Adds a bare side-effect import, e.g. `@decohere/cortex/auth`. */ addSideEffectImport(path) {
|
|
50
|
-
if (!this._sideEffectImports.includes(path)) this._sideEffectImports.push(path);
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
/** Adds a named import, e.g. `import { Foo } from "bar"`. */ addImport(name, from, typeOnly = false) {
|
|
54
|
-
const group = this._extraImports.get(from) ?? new ImportGroup();
|
|
55
|
-
group.add(name, typeOnly);
|
|
56
|
-
this._extraImports.set(from, group);
|
|
57
|
-
return this;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Adds a builder call inserted after `.withConfiguration()` and before
|
|
61
|
-
* `.withServices()`. Pass the call without leading dot, e.g. `.withAuth()`.
|
|
62
|
-
*/ addBuilderCall(call) {
|
|
63
|
-
this._builderCalls.push(call);
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
/** Adds a TypeORM entity — import and entry in `withTypeOrm({ entities })`. */ addEntity(entity) {
|
|
67
|
-
this._entities.push(entity);
|
|
68
|
-
return this;
|
|
69
|
-
}
|
|
70
|
-
/** Adds a TypeORM repository — import and entry in `withTypeOrm({ repositories })`. */ addRepository(repo) {
|
|
71
|
-
this._repositories.push(repo);
|
|
72
|
-
return this;
|
|
73
|
-
}
|
|
74
|
-
files() {
|
|
75
|
-
const imports = [
|
|
76
|
-
'import "@decohere/scribe-pino";',
|
|
77
|
-
'import "@decohere/cortex/http";'
|
|
78
|
-
];
|
|
79
|
-
for (const path of this._sideEffectImports){
|
|
80
|
-
imports.push(`import "${path}";`);
|
|
81
|
-
}
|
|
82
|
-
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";');
|
|
83
|
-
for (const e of this._entities){
|
|
84
|
-
imports.push(`import { ${e.className} } from "${e.importPath}";`);
|
|
85
|
-
}
|
|
86
|
-
for (const r of this._repositories){
|
|
87
|
-
imports.push(`import { ${r.className} } from "${r.importPath}";`);
|
|
88
|
-
}
|
|
89
|
-
for (const [from, group] of this._extraImports){
|
|
90
|
-
imports.push(group.render(from));
|
|
91
|
-
}
|
|
92
|
-
imports.push('import { HelloController } from "./controllers/hello.controller.js";');
|
|
93
|
-
const builderCalls = [
|
|
94
|
-
`\t.withHttpProvider(FastifyProvider)`,
|
|
95
|
-
`\t.withConfiguration(YamlDataSource)`,
|
|
96
|
-
...this._builderCalls.map((c)=>`\t${c}`),
|
|
97
|
-
`\t.withServices((cb) => { cb.registerSingleton(SampleService); })`
|
|
98
|
-
];
|
|
99
|
-
if (this._entities.length > 0) {
|
|
100
|
-
const entities = this._entities.map((e)=>e.className).join(", ");
|
|
101
|
-
const repos = this._repositories.map((r)=>r.className).join(", ");
|
|
102
|
-
builderCalls.push(`\t.withTypeOrm({ entities: [${entities}], repositories: [${repos}] })`);
|
|
103
|
-
}
|
|
104
|
-
builderCalls.push(`\t.withControllers(HelloController)`);
|
|
105
|
-
const content = [
|
|
106
|
-
...imports,
|
|
107
|
-
"",
|
|
108
|
-
"scribe.extend.withPinoPretty();",
|
|
109
|
-
"",
|
|
110
|
-
`const app = await Builder.create({ applicationName: "${this.appName}" })`,
|
|
111
|
-
...builderCalls,
|
|
112
|
-
`\t.build();`,
|
|
113
|
-
"",
|
|
114
|
-
"await app.start({ port: 3000 });",
|
|
115
|
-
"",
|
|
116
|
-
"export default app;",
|
|
117
|
-
""
|
|
118
|
-
].join("\n");
|
|
119
|
-
return [
|
|
120
|
-
{
|
|
121
|
-
filePath: "src/main.ts",
|
|
122
|
-
content
|
|
123
|
-
}
|
|
124
|
-
];
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFR5cGVPcm1JbXBvcnQgPSB7IGNsYXNzTmFtZTogc3RyaW5nOyBpbXBvcnRQYXRoOiBzdHJpbmcgfTtcblxuLyoqIFRyYWNrcyBuYW1lZCBpbXBvcnRzIGZyb20gYSBzaW5nbGUgbW9kdWxlIHBhdGgsIHNwbGl0IGludG8gdmFsdWVzIGFuZCB0eXBlcy4gKi9cbmNsYXNzIEltcG9ydEdyb3VwIHtcblx0cHJpdmF0ZSByZWFkb25seSBfdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90eXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRwdWJsaWMgYWRkKG5hbWU6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdGlmICh0eXBlT25seSkge1xuXHRcdFx0Ly8gVmFsdWUgaW1wb3J0IGFscmVhZHkgcHJlc2VudCDigJQgdmFsdWUgd2lucywgc2tpcFxuXHRcdFx0aWYgKCF0aGlzLl92YWx1ZXMuaW5jbHVkZXMobmFtZSkgJiYgIXRoaXMuX3R5cGVzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuX3R5cGVzLnB1c2gobmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFByb21vdGU6IHJlbW92ZSBmcm9tIHR5cGVzIGlmIGl0IHdhcyBwcmV2aW91c2x5IHR5cGUtb25seVxuXHRcdFx0Y29uc3QgdHlwZUlkeCA9IHRoaXMuX3R5cGVzLmluZGV4T2YobmFtZSk7XG5cdFx0XHRpZiAodHlwZUlkeCAhPT0gLTEpIHRoaXMuX3R5cGVzLnNwbGljZSh0eXBlSWR4LCAxKTtcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpKSB0aGlzLl92YWx1ZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVuZGVyKGZyb206IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVzID0gWy4uLnRoaXMuX3ZhbHVlc10uc29ydCgpO1xuXHRcdGNvbnN0IHR5cGVzID0gWy4uLnRoaXMuX3R5cGVzXS5zb3J0KCkubWFwKChuKSA9PiBgdHlwZSAke259YCk7XG5cdFx0cmV0dXJuIGBpbXBvcnQgeyAke1suLi52YWx1ZXMsIC4uLnR5cGVzXS5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7ZnJvbX1cIjtgO1xuXHR9XG59XG5cbi8qKlxuICogTW9kZWwgZm9yIGBwcm9qZWN0cy9hcGkvc3JjL21haW4udHNgLlxuICpcbiAqIFN0YXJ0cyB3aXRoIHRoZSBtaW5pbWFsIEhUVFAgKyBZQU1MIGNvbmZpZyBzZXR1cC4gRmVhdHVyZXMgbXV0YXRlIHRoZSBtb2RlbFxuICogYnkgY2FsbGluZyBhZGRTaWRlRWZmZWN0SW1wb3J0IC8gYWRkSW1wb3J0IC8gYWRkQnVpbGRlckNhbGwgLyBhZGRFbnRpdHkgL1xuICogYWRkUmVwb3NpdG9yeS4gZmlsZXMoKSByZW5kZXJzIHdoYXRldmVyIGhhcyBiZWVuIGFjY3VtdWxhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgTWFpblNvdXJjZUZpbGUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuTUFJTl9UUztcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9zaWRlRWZmZWN0SW1wb3J0czogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfZXh0cmFJbXBvcnRzID0gbmV3IE1hcDxzdHJpbmcsIEltcG9ydEdyb3VwPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9idWlsZGVyQ2FsbHM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VudGl0aWVzOiBUeXBlT3JtSW1wb3J0W10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfcmVwb3NpdG9yaWVzOiBUeXBlT3JtSW1wb3J0W10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHBOYW1lOiBzdHJpbmcpIHt9XG5cblx0LyoqIEFkZHMgYSBiYXJlIHNpZGUtZWZmZWN0IGltcG9ydCwgZS5nLiBgQGRlY29oZXJlL2NvcnRleC9hdXRoYC4gKi9cblx0cHVibGljIGFkZFNpZGVFZmZlY3RJbXBvcnQocGF0aDogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9zaWRlRWZmZWN0SW1wb3J0cy5pbmNsdWRlcyhwYXRoKSkgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMucHVzaChwYXRoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgbmFtZWQgaW1wb3J0LCBlLmcuIGBpbXBvcnQgeyBGb28gfSBmcm9tIFwiYmFyXCJgLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KG5hbWU6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLl9leHRyYUltcG9ydHMuZ2V0KGZyb20pID8/IG5ldyBJbXBvcnRHcm91cCgpO1xuXHRcdGdyb3VwLmFkZChuYW1lLCB0eXBlT25seSk7XG5cdFx0dGhpcy5fZXh0cmFJbXBvcnRzLnNldChmcm9tLCBncm91cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGJ1aWxkZXIgY2FsbCBpbnNlcnRlZCBhZnRlciBgLndpdGhDb25maWd1cmF0aW9uKClgIGFuZCBiZWZvcmVcblx0ICogYC53aXRoU2VydmljZXMoKWAuIFBhc3MgdGhlIGNhbGwgd2l0aG91dCBsZWFkaW5nIGRvdCwgZS5nLiBgLndpdGhBdXRoKClgLlxuXHQgKi9cblx0cHVibGljIGFkZEJ1aWxkZXJDYWxsKGNhbGw6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2J1aWxkZXJDYWxscy5wdXNoKGNhbGwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIGVudGl0eSDigJQgaW1wb3J0IGFuZCBlbnRyeSBpbiBgd2l0aFR5cGVPcm0oeyBlbnRpdGllcyB9KWAuICovXG5cdHB1YmxpYyBhZGRFbnRpdHkoZW50aXR5OiBUeXBlT3JtSW1wb3J0KTogdGhpcyB7XG5cdFx0dGhpcy5fZW50aXRpZXMucHVzaChlbnRpdHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIHJlcG9zaXRvcnkg4oCUIGltcG9ydCBhbmQgZW50cnkgaW4gYHdpdGhUeXBlT3JtKHsgcmVwb3NpdG9yaWVzIH0pYC4gKi9cblx0cHVibGljIGFkZFJlcG9zaXRvcnkocmVwbzogVHlwZU9ybUltcG9ydCk6IHRoaXMge1xuXHRcdHRoaXMuX3JlcG9zaXRvcmllcy5wdXNoKHJlcG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXG5cdFx0XHQnaW1wb3J0IFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI7Jyxcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvY29ydGV4L2h0dHBcIjsnLFxuXHRcdF07XG5cblx0XHRmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IFwiJHtwYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGltcG9ydHMucHVzaChcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvcHJvdG9jb2xcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IFlhbWxEYXRhU291cmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9wcm90b2NvbFwiOycsXG5cdFx0XHQnaW1wb3J0IHsgQnVpbGRlciB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBGYXN0aWZ5UHJvdmlkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleC9wcm92aWRlcnNcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvc2FtcGxlLnNlcnZpY2UuanNcIjsnLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGUgb2YgdGhpcy5fZW50aXRpZXMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IHsgJHtlLmNsYXNzTmFtZX0gfSBmcm9tIFwiJHtlLmltcG9ydFBhdGh9XCI7YCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByIG9mIHRoaXMuX3JlcG9zaXRvcmllcykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgeyAke3IuY2xhc3NOYW1lfSB9IGZyb20gXCIke3IuaW1wb3J0UGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtmcm9tLCBncm91cF0gb2YgdGhpcy5fZXh0cmFJbXBvcnRzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goZ3JvdXAucmVuZGVyKGZyb20pKTtcblx0XHR9XG5cblx0XHRpbXBvcnRzLnB1c2goJ2ltcG9ydCB7IEhlbGxvQ29udHJvbGxlciB9IGZyb20gXCIuL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIuanNcIjsnKTtcblxuXHRcdGNvbnN0IGJ1aWxkZXJDYWxsczogc3RyaW5nW10gPSBbXG5cdFx0XHRgXFx0LndpdGhIdHRwUHJvdmlkZXIoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgXFx0LndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHQuLi50aGlzLl9idWlsZGVyQ2FsbHMubWFwKChjKSA9PiBgXFx0JHtjfWApLFxuXHRcdFx0YFxcdC53aXRoU2VydmljZXMoKGNiKSA9PiB7IGNiLnJlZ2lzdGVyU2luZ2xldG9uKFNhbXBsZVNlcnZpY2UpOyB9KWAsXG5cdFx0XTtcblxuXHRcdGlmICh0aGlzLl9lbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzLm1hcCgoZSkgPT4gZS5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGNvbnN0IHJlcG9zID0gdGhpcy5fcmVwb3NpdG9yaWVzLm1hcCgocikgPT4gci5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRgXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFske2VudGl0aWVzfV0sIHJlcG9zaXRvcmllczogWyR7cmVwb3N9XSB9KWAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJ1aWxkZXJDYWxscy5wdXNoKGBcXHQud2l0aENvbnRyb2xsZXJzKEhlbGxvQ29udHJvbGxlcilgKTtcblxuXHRcdGNvbnN0IGNvbnRlbnQgPSBbXG5cdFx0XHQuLi5pbXBvcnRzLFxuXHRcdFx0XCJcIixcblx0XHRcdFwic2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1wiLFxuXHRcdFx0XCJcIixcblx0XHRcdGBjb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke3RoaXMuYXBwTmFtZX1cIiB9KWAsXG5cdFx0XHQuLi5idWlsZGVyQ2FsbHMsXG5cdFx0XHRgXFx0LmJ1aWxkKCk7YCxcblx0XHRcdFwiXCIsXG5cdFx0XHRcImF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJleHBvcnQgZGVmYXVsdCBhcHA7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdF0uam9pbihcIlxcblwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJXRUxMX0tOT1dOX0ZJTEVTIiwiSW1wb3J0R3JvdXAiLCJfdmFsdWVzIiwiX3R5cGVzIiwiYWRkIiwibmFtZSIsInR5cGVPbmx5IiwiaW5jbHVkZXMiLCJwdXNoIiwidHlwZUlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJyZW5kZXIiLCJmcm9tIiwidmFsdWVzIiwic29ydCIsInR5cGVzIiwibWFwIiwibiIsImpvaW4iLCJNYWluU291cmNlRmlsZSIsImtleSIsIk1BSU5fVFMiLCJfc2lkZUVmZmVjdEltcG9ydHMiLCJfZXh0cmFJbXBvcnRzIiwiTWFwIiwiX2J1aWxkZXJDYWxscyIsIl9lbnRpdGllcyIsIl9yZXBvc2l0b3JpZXMiLCJhcHBOYW1lIiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsInBhdGgiLCJhZGRJbXBvcnQiLCJncm91cCIsImdldCIsInNldCIsImFkZEJ1aWxkZXJDYWxsIiwiY2FsbCIsImFkZEVudGl0eSIsImVudGl0eSIsImFkZFJlcG9zaXRvcnkiLCJyZXBvIiwiZmlsZXMiLCJpbXBvcnRzIiwiZSIsImNsYXNzTmFtZSIsImltcG9ydFBhdGgiLCJyIiwiYnVpbGRlckNhbGxzIiwiYyIsImxlbmd0aCIsImVudGl0aWVzIiwicmVwb3MiLCJjb250ZW50IiwiZmlsZVBhdGgiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGdCQUFnQixRQUFRLHdCQUF3QjtBQUt6RCxpRkFBaUYsR0FDakYsTUFBTUM7SUFDWUMsVUFBb0IsRUFBRSxDQUFDO0lBQ3ZCQyxTQUFtQixFQUFFLENBQUM7SUFFaENDLElBQUlDLElBQVksRUFBRUMsV0FBVyxLQUFLLEVBQVE7UUFDaEQsSUFBSUEsVUFBVTtZQUNi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
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
const SAMPLE_CONFIG_CONTENT = `export class SampleConfig {\n\tpublic greeting: string = "";\n}\n`;
|
|
2
|
-
const SAMPLE_SERVICE_CONTENT = [
|
|
3
|
-
`import { inject, injectable } from "@decohere/crucible/decorators";`,
|
|
4
|
-
`import { ConfigurationServiceToken } from "@decohere/nexus/configuration";`,
|
|
5
|
-
`import type { IConfigurationService } from "@decohere/nexus/configuration";`,
|
|
6
|
-
`import { SampleConfig } from "../sample.config.js";`,
|
|
7
|
-
``,
|
|
8
|
-
`@injectable()`,
|
|
9
|
-
`export class SampleService {`,
|
|
10
|
-
`\tpublic constructor(`,
|
|
11
|
-
`\t\t@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,`,
|
|
12
|
-
`\t) {}`,
|
|
13
|
-
``,
|
|
14
|
-
`\tpublic async getGreeting(): Promise<string> {`,
|
|
15
|
-
`\t\tconst config = await this.config.get(SampleConfig);`,
|
|
16
|
-
`\t\treturn config.greeting;`,
|
|
17
|
-
`\t}`,
|
|
18
|
-
`}`,
|
|
19
|
-
``
|
|
20
|
-
].join("\n");
|
|
21
|
-
export class SampleConfigModel {
|
|
22
|
-
files() {
|
|
23
|
-
return [
|
|
24
|
-
{
|
|
25
|
-
filePath: "src/sample.config.ts",
|
|
26
|
-
content: SAMPLE_CONFIG_CONTENT
|
|
27
|
-
}
|
|
28
|
-
];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export class SampleServiceModel {
|
|
32
|
-
files() {
|
|
33
|
-
return [
|
|
34
|
-
{
|
|
35
|
-
filePath: "src/services/sample.service.ts",
|
|
36
|
-
content: SAMPLE_SERVICE_CONTENT
|
|
37
|
-
}
|
|
38
|
-
];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTb3VyY2VGaWxlLCBTb3VyY2VGaWxlUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmNvbnN0IFNBTVBMRV9DT05GSUdfQ09OVEVOVCA9IGBleHBvcnQgY2xhc3MgU2FtcGxlQ29uZmlnIHtcXG5cXHRwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZyA9IFwiXCI7XFxufVxcbmA7XG5cbmNvbnN0IFNBTVBMRV9TRVJWSUNFX0NPTlRFTlQgPSBbXG5cdGBpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtgLFxuXHRgaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2VUb2tlbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO2AsXG5cdGBpbXBvcnQgdHlwZSB7IElDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO2AsXG5cdGBpbXBvcnQgeyBTYW1wbGVDb25maWcgfSBmcm9tIFwiLi4vc2FtcGxlLmNvbmZpZy5qc1wiO2AsXG5cdGBgLFxuXHRgQGluamVjdGFibGUoKWAsXG5cdGBleHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZSB7YCxcblx0YFxcdHB1YmxpYyBjb25zdHJ1Y3RvcihgLFxuXHRgXFx0XFx0QGluamVjdChDb25maWd1cmF0aW9uU2VydmljZVRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogSUNvbmZpZ3VyYXRpb25TZXJ2aWNlLGAsXG5cdGBcXHQpIHt9YCxcblx0YGAsXG5cdGBcXHRwdWJsaWMgYXN5bmMgZ2V0R3JlZXRpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtgLFxuXHRgXFx0XFx0Y29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0KFNhbXBsZUNvbmZpZyk7YCxcblx0YFxcdFxcdHJldHVybiBjb25maWcuZ3JlZXRpbmc7YCxcblx0YFxcdH1gLFxuXHRgfWAsXG5cdGBgLFxuXS5qb2luKFwiXFxuXCIpO1xuXG5leHBvcnQgY2xhc3MgU2FtcGxlQ29uZmlnTW9kZWwgaW1wbGVtZW50cyBTb3VyY2VGaWxlUHJvdmlkZXIge1xuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJzcmMvc2FtcGxlLmNvbmZpZy50c1wiLFxuXHRcdFx0XHRjb250ZW50OiBTQU1QTEVfQ09ORklHX0NPTlRFTlQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFNhbXBsZVNlcnZpY2VNb2RlbCBpbXBsZW1lbnRzIFNvdXJjZUZpbGVQcm92aWRlciB7XG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9zZXJ2aWNlcy9zYW1wbGUuc2VydmljZS50c1wiLFxuXHRcdFx0XHRjb250ZW50OiBTQU1QTEVfU0VSVklDRV9DT05URU5ULFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiU0FNUExFX0NPTkZJR19DT05URU5UIiwiU0FNUExFX1NFUlZJQ0VfQ09OVEVOVCIsImpvaW4iLCJTYW1wbGVDb25maWdNb2RlbCIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiU2FtcGxlU2VydmljZU1vZGVsIl0sIm1hcHBpbmdzIjoiQUFFQSxNQUFNQSx3QkFBd0IsQ0FBQyxpRUFBaUUsQ0FBQztBQUVqRyxNQUFNQyx5QkFBeUI7SUFDOUIsQ0FBQyxtRUFBbUUsQ0FBQztJQUNyRSxDQUFDLDBFQUEwRSxDQUFDO0lBQzVFLENBQUMsMkVBQTJFLENBQUM7SUFDN0UsQ0FBQyxtREFBbUQsQ0FBQztJQUNyRCxFQUFFO0lBQ0YsQ0FBQyxhQUFhLENBQUM7SUFDZixDQUFDLDRCQUE0QixDQUFDO0lBQzlCLENBQUMscUJBQXFCLENBQUM7SUFDdkIsQ0FBQyxzRkFBc0YsQ0FBQztJQUN4RixDQUFDLE1BQU0sQ0FBQztJQUNSLEVBQUU7SUFDRixDQUFDLCtDQUErQyxDQUFDO0lBQ2pELENBQUMsdURBQXVELENBQUM7SUFDekQsQ0FBQywyQkFBMkIsQ0FBQztJQUM3QixDQUFDLEdBQUcsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRTtDQUNGLENBQUNDLElBQUksQ0FBQztBQUVQLE9BQU8sTUFBTUM7SUFDTEMsUUFBc0I7UUFDNUIsT0FBTztZQUNOO2dCQUNDQyxVQUFVO2dCQUNWQyxTQUFTTjtZQUNWO1NBQ0E7SUFDRjtBQUNEO0FBRUEsT0FBTyxNQUFNTztJQUNMSCxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVNMO1lBQ1Y7U0FDQTtJQUNGO0FBQ0QifQ==
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel } from "./source-file.js";
|
|
2
|
-
export interface ComposeService {
|
|
3
|
-
build?: string;
|
|
4
|
-
image?: string;
|
|
5
|
-
env_file?: string[];
|
|
6
|
-
environment?: Record<string, string>;
|
|
7
|
-
ports?: string[];
|
|
8
|
-
volumes?: string[];
|
|
9
|
-
command?: string;
|
|
10
|
-
restart?: string;
|
|
11
|
-
depends_on?: string[];
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Live builder for `docker-compose.yml`.
|
|
15
|
-
*
|
|
16
|
-
* Features call `addService` / `addVolume` in their `configure` phases.
|
|
17
|
-
* The devcontainer `render` phase calls `render()` and writes the file.
|
|
18
|
-
*/
|
|
19
|
-
export declare class DockerCompose implements KeyedModel {
|
|
20
|
-
readonly key: string;
|
|
21
|
-
private readonly _services;
|
|
22
|
-
private readonly _volumes;
|
|
23
|
-
addService(name: string, config: ComposeService): this;
|
|
24
|
-
files(): {
|
|
25
|
-
filePath: string;
|
|
26
|
-
content: string;
|
|
27
|
-
}[];
|
|
28
|
-
addVolume(name: string): this;
|
|
29
|
-
/** Append an env_file path to an existing service. */
|
|
30
|
-
addEnvFile(serviceName: string, filePath: string): this;
|
|
31
|
-
getContent(): string;
|
|
32
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "./source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* Builder for a YAML config file (e.g. config/config.yaml or config/config.dev.yaml).
|
|
4
|
-
*
|
|
5
|
-
* Starts with a base section passed to the constructor. Features call
|
|
6
|
-
* `addSection(yaml)` during their scaffold phase to append their own block.
|
|
7
|
-
* `files()` joins all sections with a blank line separator.
|
|
8
|
-
*/
|
|
9
|
-
export declare class ConfigYaml implements KeyedModel {
|
|
10
|
-
readonly key: string;
|
|
11
|
-
private readonly filePath;
|
|
12
|
-
private readonly _sections;
|
|
13
|
-
constructor(key: string, filePath: string, baseContent: string);
|
|
14
|
-
addSection(yaml: string): this;
|
|
15
|
-
files(): SourceFile[];
|
|
16
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare const WELL_KNOWN_FILES: {
|
|
2
|
-
VSCODE_SETTINGS: string;
|
|
3
|
-
LAUNCH_JSON: string;
|
|
4
|
-
DOCKER_COMPOSE: string;
|
|
5
|
-
DEVCONTAINER_JSON: string;
|
|
6
|
-
DOCKERFILE: string;
|
|
7
|
-
PACKAGE_JSON: string;
|
|
8
|
-
API_PACKAGE_JSON: string;
|
|
9
|
-
TSCONFIG: string;
|
|
10
|
-
MAIN_TS: string;
|
|
11
|
-
CONTROLLER_TS: string;
|
|
12
|
-
CONFIG_YAML: string;
|
|
13
|
-
CONFIG_DEV_YAML: string;
|
|
14
|
-
GITIGNORE: string;
|
|
15
|
-
AUTH_CONFIG: string;
|
|
16
|
-
ENV_FILE: string;
|
|
17
|
-
};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "./source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* Builder for `.devcontainer/Dockerfile`.
|
|
4
|
-
*
|
|
5
|
-
* Features call `addRunStep(cmd)` during their scaffold phase to append
|
|
6
|
-
* additional `RUN` instructions before the final `USER` instruction.
|
|
7
|
-
* `files()` assembles the complete Dockerfile content at render time.
|
|
8
|
-
*/
|
|
9
|
-
export declare class DockerfileModel implements KeyedModel {
|
|
10
|
-
readonly key: string;
|
|
11
|
-
private readonly _runSteps;
|
|
12
|
-
/** Append a RUN instruction (pass the command, not the RUN keyword). */
|
|
13
|
-
addRunStep(cmd: string): this;
|
|
14
|
-
files(): SourceFile[];
|
|
15
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "./source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* Model for `.devcontainer/devcontainer.json`.
|
|
4
|
-
*
|
|
5
|
-
* Features call builder methods (`addExtension`, `forwardPort`, etc.) during
|
|
6
|
-
* their configure phase. `MonoRepoScaffold` calls `files()` at render time.
|
|
7
|
-
*/
|
|
8
|
-
export declare class DevContainer implements KeyedModel {
|
|
9
|
-
readonly key: string;
|
|
10
|
-
private readonly _extensions;
|
|
11
|
-
private readonly _ports;
|
|
12
|
-
private readonly _mounts;
|
|
13
|
-
private _postStartCommand?;
|
|
14
|
-
private _useCompose;
|
|
15
|
-
constructor();
|
|
16
|
-
addExtension(...ids: string[]): this;
|
|
17
|
-
forwardPort(...ports: number[]): this;
|
|
18
|
-
setPostStartCommand(cmd: string): this;
|
|
19
|
-
useCompose(): this;
|
|
20
|
-
files(): SourceFile[];
|
|
21
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "./source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* Accumulates key=value pairs and renders them as a `.env` file.
|
|
4
|
-
*
|
|
5
|
-
* Register once in the workspace; features call `addEntry` during their
|
|
6
|
-
* scaffold phase to contribute environment variables. The final file is
|
|
7
|
-
* written at render time when `workspace.scaffold()` is called.
|
|
8
|
-
*/
|
|
9
|
-
export declare class EnvFile implements KeyedModel {
|
|
10
|
-
readonly key: string;
|
|
11
|
-
private readonly _entries;
|
|
12
|
-
addEntry(key: string, value: string): this;
|
|
13
|
-
files(): SourceFile[];
|
|
14
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "./source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* Builder for the root `package.json`.
|
|
4
|
-
*
|
|
5
|
-
* Starts with the core API dependencies. Features call `addDependency` /
|
|
6
|
-
* `addDevDependency` during their scaffold phase to inject their own deps
|
|
7
|
-
* before `files()` is called at render time.
|
|
8
|
-
*/
|
|
9
|
-
export declare class PackageJson implements KeyedModel {
|
|
10
|
-
private readonly name;
|
|
11
|
-
readonly key: string;
|
|
12
|
-
private readonly _dependencies;
|
|
13
|
-
private readonly _devDependencies;
|
|
14
|
-
constructor(name: string);
|
|
15
|
-
addDependency(name: string, version: string): this;
|
|
16
|
-
addDevDependency(name: string, version: string): this;
|
|
17
|
-
files(): SourceFile[];
|
|
18
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile, SourceFileProvider } from "./source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* A sub-unit of the monorepo (e.g. `projects/api`).
|
|
4
|
-
*
|
|
5
|
-
* Models and files registered here produce paths relative to `dir`. The parent
|
|
6
|
-
* `MonoRepoScaffold` calls `files()` and prepends `dir/` to every path, so
|
|
7
|
-
* models remain unaware of where they live in the repo.
|
|
8
|
-
*/
|
|
9
|
-
export declare class ProjectScaffold {
|
|
10
|
-
readonly dir: string;
|
|
11
|
-
private readonly _models;
|
|
12
|
-
private readonly _files;
|
|
13
|
-
constructor(dir: string);
|
|
14
|
-
addModel<T extends KeyedModel>(model: T): T;
|
|
15
|
-
addFile(provider: SourceFileProvider): this;
|
|
16
|
-
getModel<T extends SourceFileProvider>(key: string): T | undefined;
|
|
17
|
-
getModels<T extends SourceFileProvider>(ctor: new (...args: never[]) => T): T[];
|
|
18
|
-
/** Returns all files with `dir/` prepended to each path. */
|
|
19
|
-
files(): SourceFile[];
|
|
20
|
-
}
|
|
21
|
-
export declare abstract class WorkspaceScaffold {
|
|
22
|
-
readonly files: SourceFile[];
|
|
23
|
-
targetDir: string;
|
|
24
|
-
/** Derived from the basename of targetDir. */
|
|
25
|
-
get name(): string;
|
|
26
|
-
/** Add an ad-hoc file provider whose output is included at render time. */
|
|
27
|
-
addFile(provider: SourceFileProvider): this;
|
|
28
|
-
abstract addModel<T extends KeyedModel>(model: T): T;
|
|
29
|
-
abstract getModel<T extends SourceFileProvider>(key: string): T | undefined;
|
|
30
|
-
abstract getModels<T extends SourceFileProvider>(ctor: new (...args: never[]) => T): T[];
|
|
31
|
-
abstract getProject(dir: string): ProjectScaffold | undefined;
|
|
32
|
-
abstract scaffold(): Promise<void> | void;
|
|
33
|
-
}
|
|
34
|
-
export declare class MonoRepoScaffold extends WorkspaceScaffold {
|
|
35
|
-
private readonly _models;
|
|
36
|
-
private readonly _projects;
|
|
37
|
-
/** Register a named project. */
|
|
38
|
-
addProject(project: ProjectScaffold): ProjectScaffold;
|
|
39
|
-
/** Retrieve a previously-registered project by its directory path. */
|
|
40
|
-
getProject(dir: string): ProjectScaffold | undefined;
|
|
41
|
-
/** Register a named model at workspace level. */
|
|
42
|
-
addModel<T extends KeyedModel>(model: T): T;
|
|
43
|
-
/**
|
|
44
|
-
* Retrieve a model by key. Searches workspace models first, then all
|
|
45
|
-
* registered projects in order.
|
|
46
|
-
*/
|
|
47
|
-
getModel<T extends SourceFileProvider>(key: string): T | undefined;
|
|
48
|
-
/**
|
|
49
|
-
* Retrieve all models of a given type. Searches workspace models and all
|
|
50
|
-
* projects, so features can discover controllers across multiple projects.
|
|
51
|
-
*/
|
|
52
|
-
getModels<T extends SourceFileProvider>(ctor: new (...args: never[]) => T): T[];
|
|
53
|
-
/** Render all models and projects into files, then write everything to disk. */
|
|
54
|
-
scaffold(): Promise<void>;
|
|
55
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface SourceFileProvider {
|
|
2
|
-
files(): SourceFile[];
|
|
3
|
-
}
|
|
4
|
-
/** A SourceFileProvider that knows its own registration key. */
|
|
5
|
-
export interface KeyedModel extends SourceFileProvider {
|
|
6
|
-
readonly key: string;
|
|
7
|
-
}
|
|
8
|
-
export type SourceFile = {
|
|
9
|
-
filePath: string;
|
|
10
|
-
content: string;
|
|
11
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { WorkspaceScaffold } from "../models/project.model.js";
|
|
2
|
-
/**
|
|
3
|
-
* A feature has three responsibilities:
|
|
4
|
-
* 1. `getOptions` — resolve provider selection and any follow-up questions.
|
|
5
|
-
* Receives the options collected so far; returns only the keys it owns.
|
|
6
|
-
* Short-circuits if the caller already supplied those keys via CLI flags.
|
|
7
|
-
* 2. `scaffold` — mutate the workspace models and/or write files using the
|
|
8
|
-
* fully-resolved options. Called after ALL features have gathered options
|
|
9
|
-
* but BEFORE files are written to disk.
|
|
10
|
-
* 3. `finalize` (optional) — run post-write actions (e.g. install dependencies).
|
|
11
|
-
* Called after workspace.scaffold() has flushed all files to disk.
|
|
12
|
-
*/
|
|
13
|
-
export interface Feature<TOptions extends object = object> {
|
|
14
|
-
getOptions(workspace: WorkspaceScaffold, cliOptions: Partial<TOptions>): Promise<Partial<TOptions>>;
|
|
15
|
-
scaffold(workspace: WorkspaceScaffold, options: TOptions): Promise<void> | void;
|
|
16
|
-
finalize?(workspace: WorkspaceScaffold, options: TOptions): Promise<void> | void;
|
|
17
|
-
}
|
|
18
|
-
declare function scaffold(workspace: WorkspaceScaffold, cliOptions: object, features: Feature[]): Promise<void>;
|
|
19
|
-
export declare const ScaffoldService: {
|
|
20
|
-
scaffold: typeof scaffold;
|
|
21
|
-
};
|
|
22
|
-
export {};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
declare const REQUIRED_SCOPES = "create:clients";
|
|
2
|
-
export declare class Auth0AuthError extends Error {
|
|
3
|
-
constructor(message: string);
|
|
4
|
-
}
|
|
5
|
-
export interface Auth0Tenant {
|
|
6
|
-
name: string;
|
|
7
|
-
active?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function isInstalled(): boolean;
|
|
10
|
-
export declare function listTenants(): Auth0Tenant[];
|
|
11
|
-
export declare function login(): boolean;
|
|
12
|
-
export declare function listApis(): Array<{
|
|
13
|
-
identifier: string;
|
|
14
|
-
name: string;
|
|
15
|
-
}>;
|
|
16
|
-
export declare function createApi(name: string, identifier: string): {
|
|
17
|
-
identifier: string;
|
|
18
|
-
};
|
|
19
|
-
export declare function createSpaApp(name: string, callbackUrl: string): {
|
|
20
|
-
client_id: string;
|
|
21
|
-
};
|
|
22
|
-
export { REQUIRED_SCOPES };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "../../models/source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* Builder for `projects/api/package.json`.
|
|
4
|
-
*
|
|
5
|
-
* Starts with the core cortex + crucible deps. Features can call
|
|
6
|
-
* `addDependency` / `addDevDependency` to extend.
|
|
7
|
-
*/
|
|
8
|
-
export declare class ApiPackageJson implements KeyedModel {
|
|
9
|
-
private readonly projectName;
|
|
10
|
-
readonly key: string;
|
|
11
|
-
private readonly _dependencies;
|
|
12
|
-
private readonly _devDependencies;
|
|
13
|
-
constructor(projectName: string);
|
|
14
|
-
addDependency(name: string, version: string): this;
|
|
15
|
-
addDevDependency(name: string, version: string): this;
|
|
16
|
-
files(): SourceFile[];
|
|
17
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "../../models/source-file.js";
|
|
2
|
-
export type AuthConfig = {
|
|
3
|
-
issuerBaseUrl: string;
|
|
4
|
-
audience: string;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Data-carrier model for auth configuration.
|
|
8
|
-
*
|
|
9
|
-
* Registered by AuthFeature when auth0 is configured. Other features (e.g.
|
|
10
|
-
* PostmanFeature) retrieve it via workspace.getModel(WELL_KNOWN_FILES.AUTH_CONFIG).
|
|
11
|
-
* Produces no files — exists solely so features can communicate auth details.
|
|
12
|
-
*/
|
|
13
|
-
export declare class AuthConfigModel implements KeyedModel {
|
|
14
|
-
readonly config: AuthConfig;
|
|
15
|
-
readonly key: string;
|
|
16
|
-
constructor(config: AuthConfig);
|
|
17
|
-
files(): SourceFile[];
|
|
18
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "../../models/source-file.js";
|
|
2
|
-
/**
|
|
3
|
-
* A controller method. Features call `addDecorator()` to prepend decorators
|
|
4
|
-
* before the HTTP verb decorator (e.g. `@AllowAnonymous` before `@Get()`).
|
|
5
|
-
*/
|
|
6
|
-
export declare class ControllerMethod {
|
|
7
|
-
readonly name: string;
|
|
8
|
-
private readonly _httpDecorator;
|
|
9
|
-
private readonly _params;
|
|
10
|
-
private readonly _isAsync;
|
|
11
|
-
private readonly _body;
|
|
12
|
-
private readonly _extraDecorators;
|
|
13
|
-
constructor(name: string, _httpDecorator: string, _params: string, _isAsync: boolean, _body: string[]);
|
|
14
|
-
addDecorator(decorator: string): this;
|
|
15
|
-
render(): string[];
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Model for `projects/api/src/controllers/hello.controller.ts`.
|
|
19
|
-
*
|
|
20
|
-
* Pre-initialised with all routes and their HTTP decorators. Features mutate
|
|
21
|
-
* the model via `getMethod(name).addDecorator(...)`, `addDecorator(...)` (class
|
|
22
|
-
* level), `addCortexImport(...)`, `addImport(...)`, and `addConstructorParam(...)`.
|
|
23
|
-
*/
|
|
24
|
-
export declare class ControllerSourceFile implements KeyedModel {
|
|
25
|
-
readonly key: string;
|
|
26
|
-
private readonly _cortexImports;
|
|
27
|
-
private readonly _extraImportGroups;
|
|
28
|
-
private readonly _classDecorators;
|
|
29
|
-
private readonly _ctorParams;
|
|
30
|
-
private readonly _methods;
|
|
31
|
-
/** Retrieve a method by name to mutate its decorators. */
|
|
32
|
-
getMethod(name: string): ControllerMethod;
|
|
33
|
-
/** Add a class-level decorator (e.g. `@Authorize`). */
|
|
34
|
-
addDecorator(decorator: string): this;
|
|
35
|
-
/** Add a named import from `@decohere/cortex`. */
|
|
36
|
-
addCortexImport(name: string, typeOnly?: boolean): this;
|
|
37
|
-
/** Add a named import from any other module. */
|
|
38
|
-
addImport(name: string, from: string, typeOnly?: boolean): this;
|
|
39
|
-
/** Add a constructor parameter (e.g. an injected dependency). */
|
|
40
|
-
addConstructorParam(param: string): this;
|
|
41
|
-
files(): SourceFile[];
|
|
42
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { KeyedModel, SourceFile } from "../../models/source-file.js";
|
|
2
|
-
export type TypeOrmImport = {
|
|
3
|
-
className: string;
|
|
4
|
-
importPath: string;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Model for `projects/api/src/main.ts`.
|
|
8
|
-
*
|
|
9
|
-
* Starts with the minimal HTTP + YAML config setup. Features mutate the model
|
|
10
|
-
* by calling addSideEffectImport / addImport / addBuilderCall / addEntity /
|
|
11
|
-
* addRepository. files() renders whatever has been accumulated.
|
|
12
|
-
*/
|
|
13
|
-
export declare class MainSourceFile implements KeyedModel {
|
|
14
|
-
private readonly appName;
|
|
15
|
-
readonly key: string;
|
|
16
|
-
private readonly _sideEffectImports;
|
|
17
|
-
private readonly _extraImports;
|
|
18
|
-
private readonly _builderCalls;
|
|
19
|
-
private readonly _entities;
|
|
20
|
-
private readonly _repositories;
|
|
21
|
-
constructor(appName: string);
|
|
22
|
-
/** Adds a bare side-effect import, e.g. `@decohere/cortex/auth`. */
|
|
23
|
-
addSideEffectImport(path: string): this;
|
|
24
|
-
/** Adds a named import, e.g. `import { Foo } from "bar"`. */
|
|
25
|
-
addImport(name: string, from: string, typeOnly?: boolean): this;
|
|
26
|
-
/**
|
|
27
|
-
* Adds a builder call inserted after `.withConfiguration()` and before
|
|
28
|
-
* `.withServices()`. Pass the call without leading dot, e.g. `.withAuth()`.
|
|
29
|
-
*/
|
|
30
|
-
addBuilderCall(call: string): this;
|
|
31
|
-
/** Adds a TypeORM entity — import and entry in `withTypeOrm({ entities })`. */
|
|
32
|
-
addEntity(entity: TypeOrmImport): this;
|
|
33
|
-
/** Adds a TypeORM repository — import and entry in `withTypeOrm({ repositories })`. */
|
|
34
|
-
addRepository(repo: TypeOrmImport): this;
|
|
35
|
-
files(): SourceFile[];
|
|
36
|
-
}
|