@decohere/create 0.0.1-dev.48 → 0.0.1-dev.5
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/cli.js +9 -3
- package/commonjs/src/scaffold.js +48 -0
- package/commonjs/src/templates.js +64 -0
- package/es6/src/cli.js +9 -3
- package/es6/src/scaffold.js +38 -0
- package/es6/src/templates.js +40 -0
- package/package.json +3 -8
- package/types/src/scaffold.d.ts +4 -0
- package/types/src/templates.d.ts +4 -0
- package/commonjs/src/domain/prompt.js +0 -64
- package/commonjs/src/models/compose.model.js +0 -138
- package/commonjs/src/models/config-yaml.model.js +0 -88
- package/commonjs/src/models/const.js +0 -31
- package/commonjs/src/models/dev-container.model.js +0 -100
- package/commonjs/src/models/docker-image.model.js +0 -221
- package/commonjs/src/models/env-file.model.js +0 -47
- package/commonjs/src/models/gitignore.model.js +0 -31
- package/commonjs/src/models/launch-json.model.js +0 -74
- package/commonjs/src/models/package-json.model.js +0 -133
- package/commonjs/src/models/project.model.js +0 -134
- 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/program.js +0 -135
- package/commonjs/src/resolve-target-dir.js +0 -19
- package/commonjs/src/runner.js +0 -144
- package/commonjs/src/services/scaffold.service.js +0 -62
- package/commonjs/src/version.js +0 -50
- package/commonjs/src/webapi/api-name.js +0 -95
- package/commonjs/src/webapi/const.js +0 -50
- package/commonjs/src/webapi/create-api.js +0 -285
- package/commonjs/src/webapi/features/auth.feature.js +0 -463
- package/commonjs/src/webapi/features/auth0-cli.js +0 -406
- package/commonjs/src/webapi/features/biome-format.js +0 -49
- package/commonjs/src/webapi/features/database.feature.js +0 -273
- package/commonjs/src/webapi/features/finalize.feature.js +0 -91
- package/commonjs/src/webapi/features/postman.feature.js +0 -319
- package/commonjs/src/webapi/models/api-package-json.model.js +0 -63
- package/commonjs/src/webapi/models/auth-config.model.js +0 -26
- package/commonjs/src/webapi/models/controller-source-file.model.js +0 -188
- package/commonjs/src/webapi/models/github-ci.model.js +0 -193
- package/commonjs/src/webapi/models/main-source-file.model.js +0 -165
- package/commonjs/src/webapi/models/production-dockerfile.model.js +0 -138
- package/commonjs/src/webapi/models/sample-files.model.js +0 -60
- package/commonjs/src/webapi/models/webapi-image.model.js +0 -22
- package/commonjs/src/webapi/postman/hello-openapi.js +0 -175
- package/commonjs/src/webapi/postman/local-view.js +0 -184
- package/commonjs/src/webapi/postman/openapi-to-postman.js +0 -202
- package/es6/src/domain/prompt.js +0 -43
- package/es6/src/models/compose.model.js +0 -132
- package/es6/src/models/config-yaml.model.js +0 -76
- package/es6/src/models/const.js +0 -21
- package/es6/src/models/dev-container.model.js +0 -90
- package/es6/src/models/docker-image.model.js +0 -185
- package/es6/src/models/env-file.model.js +0 -43
- package/es6/src/models/gitignore.model.js +0 -21
- package/es6/src/models/launch-json.model.js +0 -64
- package/es6/src/models/package-json.model.js +0 -129
- package/es6/src/models/project.model.js +0 -119
- 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/program.js +0 -76
- package/es6/src/resolve-target-dir.js +0 -9
- package/es6/src/runner.js +0 -146
- package/es6/src/services/scaffold.service.js +0 -52
- package/es6/src/version.js +0 -32
- package/es6/src/webapi/api-name.js +0 -59
- package/es6/src/webapi/const.js +0 -20
- package/es6/src/webapi/create-api.js +0 -265
- package/es6/src/webapi/features/auth.feature.js +0 -412
- package/es6/src/webapi/features/auth0-cli.js +0 -348
- package/es6/src/webapi/features/biome-format.js +0 -42
- package/es6/src/webapi/features/database.feature.js +0 -263
- package/es6/src/webapi/features/finalize.feature.js +0 -81
- package/es6/src/webapi/features/postman.feature.js +0 -253
- package/es6/src/webapi/models/api-package-json.model.js +0 -58
- package/es6/src/webapi/models/auth-config.model.js +0 -22
- package/es6/src/webapi/models/controller-source-file.model.js +0 -179
- package/es6/src/webapi/models/github-ci.model.js +0 -186
- package/es6/src/webapi/models/main-source-file.model.js +0 -161
- package/es6/src/webapi/models/production-dockerfile.model.js +0 -126
- package/es6/src/webapi/models/sample-files.model.js +0 -42
- package/es6/src/webapi/models/webapi-image.model.js +0 -12
- package/es6/src/webapi/postman/hello-openapi.js +0 -168
- package/es6/src/webapi/postman/local-view.js +0 -169
- package/es6/src/webapi/postman/openapi-to-postman.js +0 -179
- package/pack-builder-tgz.mjs +0 -177
- package/types/src/domain/prompt.d.ts +0 -4
- package/types/src/models/compose.model.d.ts +0 -59
- package/types/src/models/config-yaml.model.d.ts +0 -27
- package/types/src/models/const.d.ts +0 -19
- package/types/src/models/dev-container.model.d.ts +0 -33
- package/types/src/models/docker-image.model.d.ts +0 -56
- package/types/src/models/env-file.model.d.ts +0 -15
- package/types/src/models/gitignore.model.d.ts +0 -6
- package/types/src/models/launch-json.model.d.ts +0 -7
- package/types/src/models/package-json.model.d.ts +0 -32
- package/types/src/models/project.model.d.ts +0 -60
- 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/program.d.ts +0 -3
- package/types/src/resolve-target-dir.d.ts +0 -5
- package/types/src/runner.d.ts +0 -15
- package/types/src/services/scaffold.service.d.ts +0 -22
- package/types/src/version.d.ts +0 -4
- package/types/src/webapi/api-name.d.ts +0 -14
- package/types/src/webapi/const.d.ts +0 -17
- package/types/src/webapi/create-api.d.ts +0 -15
- package/types/src/webapi/features/auth.feature.d.ts +0 -10
- package/types/src/webapi/features/auth0-cli.d.ts +0 -72
- package/types/src/webapi/features/biome-format.d.ts +0 -5
- 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 -16
- package/types/src/webapi/models/api-package-json.model.d.ts +0 -18
- package/types/src/webapi/models/auth-config.model.d.ts +0 -26
- package/types/src/webapi/models/controller-source-file.model.d.ts +0 -45
- package/types/src/webapi/models/github-ci.model.d.ts +0 -9
- package/types/src/webapi/models/main-source-file.model.d.ts +0 -54
- package/types/src/webapi/models/production-dockerfile.model.d.ts +0 -20
- package/types/src/webapi/models/sample-files.model.d.ts +0 -7
- package/types/src/webapi/models/webapi-image.model.d.ts +0 -5
- package/types/src/webapi/postman/hello-openapi.d.ts +0 -19
- package/types/src/webapi/postman/local-view.d.ts +0 -17
- package/types/src/webapi/postman/openapi-to-postman.d.ts +0 -62
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import { basename, dirname, join } from "node:path";
|
|
3
|
-
/**
|
|
4
|
-
* A sub-unit of the monorepo (e.g. `projects/api`).
|
|
5
|
-
*
|
|
6
|
-
* Models and files registered here produce paths relative to `dir`. The parent
|
|
7
|
-
* `MonoRepoScaffold` calls `files()` and prepends `dir/` to every path, so
|
|
8
|
-
* models remain unaware of where they live in the repo.
|
|
9
|
-
*/ export class ProjectScaffold {
|
|
10
|
-
dir;
|
|
11
|
-
_models = new Map();
|
|
12
|
-
_files = [];
|
|
13
|
-
constructor(dir){
|
|
14
|
-
this.dir = dir;
|
|
15
|
-
}
|
|
16
|
-
addModel(model) {
|
|
17
|
-
this._models.set(model.key, model);
|
|
18
|
-
return model;
|
|
19
|
-
}
|
|
20
|
-
addFile(provider) {
|
|
21
|
-
this._files.push(...provider.files());
|
|
22
|
-
return this;
|
|
23
|
-
}
|
|
24
|
-
getModel(key) {
|
|
25
|
-
return this._models.get(key);
|
|
26
|
-
}
|
|
27
|
-
getModels(ctor) {
|
|
28
|
-
return [
|
|
29
|
-
...this._models.values()
|
|
30
|
-
].filter((m)=>m instanceof ctor);
|
|
31
|
-
}
|
|
32
|
-
/** Returns all files with `dir/` prepended to each path. */ files() {
|
|
33
|
-
const all = [
|
|
34
|
-
...this._files,
|
|
35
|
-
...[
|
|
36
|
-
...this._models.values()
|
|
37
|
-
].flatMap((m)=>m.files())
|
|
38
|
-
];
|
|
39
|
-
return all.map((f)=>({
|
|
40
|
-
filePath: `${this.dir}/${f.filePath}`,
|
|
41
|
-
content: f.content
|
|
42
|
-
}));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export class WorkspaceScaffold {
|
|
46
|
-
files = [];
|
|
47
|
-
targetDir = process.cwd();
|
|
48
|
-
_name;
|
|
49
|
-
/** Project name — host directory basename, not the in-container mount path. */ get name() {
|
|
50
|
-
return this._name ?? basename(this.targetDir);
|
|
51
|
-
}
|
|
52
|
-
setName(name) {
|
|
53
|
-
this._name = name;
|
|
54
|
-
return this;
|
|
55
|
-
}
|
|
56
|
-
/** Add an ad-hoc file provider whose output is included at render time. */ addFile(provider) {
|
|
57
|
-
this.files.push(...provider.files());
|
|
58
|
-
return this;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export class MonoRepoScaffold extends WorkspaceScaffold {
|
|
62
|
-
_models = new Map();
|
|
63
|
-
_projects = [];
|
|
64
|
-
/** Register a named project. */ addProject(project) {
|
|
65
|
-
this._projects.push(project);
|
|
66
|
-
return project;
|
|
67
|
-
}
|
|
68
|
-
/** Retrieve a previously-registered project by its directory path. */ getProject(dir) {
|
|
69
|
-
return this._projects.find((p)=>p.dir === dir);
|
|
70
|
-
}
|
|
71
|
-
/** All registered projects, in registration order. */ getProjects() {
|
|
72
|
-
return this._projects;
|
|
73
|
-
}
|
|
74
|
-
/** Register a named model at workspace level. */ addModel(model) {
|
|
75
|
-
this._models.set(model.key, model);
|
|
76
|
-
return model;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Retrieve a model by key. Searches workspace models first, then all
|
|
80
|
-
* registered projects in order.
|
|
81
|
-
*/ getModel(key) {
|
|
82
|
-
const m = this._models.get(key);
|
|
83
|
-
if (m !== undefined) return m;
|
|
84
|
-
for (const project of this._projects){
|
|
85
|
-
const pm = project.getModel(key);
|
|
86
|
-
if (pm !== undefined) return pm;
|
|
87
|
-
}
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Retrieve all models of a given type. Searches workspace models and all
|
|
92
|
-
* projects, so features can discover controllers across multiple projects.
|
|
93
|
-
*/ getModels(ctor) {
|
|
94
|
-
return [
|
|
95
|
-
...[
|
|
96
|
-
...this._models.values()
|
|
97
|
-
].filter((m)=>m instanceof ctor),
|
|
98
|
-
...this._projects.flatMap((p)=>p.getModels(ctor))
|
|
99
|
-
];
|
|
100
|
-
}
|
|
101
|
-
/** Render all models and projects into files, then write everything to disk. */ async scaffold() {
|
|
102
|
-
const allFiles = [
|
|
103
|
-
...this.files,
|
|
104
|
-
...[
|
|
105
|
-
...this._models.values()
|
|
106
|
-
].flatMap((m)=>m.files()),
|
|
107
|
-
...this._projects.flatMap((p)=>p.files())
|
|
108
|
-
];
|
|
109
|
-
await Promise.all(allFiles.map(async (file)=>{
|
|
110
|
-
const fullPath = join(this.targetDir, file.filePath);
|
|
111
|
-
await mkdir(dirname(fullPath), {
|
|
112
|
-
recursive: true
|
|
113
|
-
});
|
|
114
|
-
await writeFile(fullPath, file.content);
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3Byb2plY3QubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSwgU291cmNlRmlsZVByb3ZpZGVyIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBIHN1Yi11bml0IG9mIHRoZSBtb25vcmVwbyAoZS5nLiBgcHJvamVjdHMvYXBpYCkuXG4gKlxuICogTW9kZWxzIGFuZCBmaWxlcyByZWdpc3RlcmVkIGhlcmUgcHJvZHVjZSBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhlIHBhcmVudFxuICogYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhbmQgcHJlcGVuZHMgYGRpci9gIHRvIGV2ZXJ5IHBhdGgsIHNvXG4gKiBtb2RlbHMgcmVtYWluIHVuYXdhcmUgb2Ygd2hlcmUgdGhleSBsaXZlIGluIHRoZSByZXBvLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVjdFNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmcpIHt9XG5cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuX2ZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3Rvcik7XG5cdH1cblxuXHQvKiogUmV0dXJucyBhbGwgZmlsZXMgd2l0aCBgZGlyL2AgcHJlcGVuZGVkIHRvIGVhY2ggcGF0aC4gKi9cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgYWxsID0gWy4uLnRoaXMuX2ZpbGVzLCAuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpXTtcblx0XHRyZXR1cm4gYWxsLm1hcCgoZikgPT4gKHsgZmlsZVBhdGg6IGAke3RoaXMuZGlyfS8ke2YuZmlsZVBhdGh9YCwgY29udGVudDogZi5jb250ZW50IH0pKTtcblx0fVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXHRwdWJsaWMgdGFyZ2V0RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXHRwcml2YXRlIF9uYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqIFByb2plY3QgbmFtZSDigJQgaG9zdCBkaXJlY3RvcnkgYmFzZW5hbWUsIG5vdCB0aGUgaW4tY29udGFpbmVyIG1vdW50IHBhdGguICovXG5cdHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9uYW1lID8/IGJhc2VuYW1lKHRoaXMudGFyZ2V0RGlyKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX25hbWUgPSBuYW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhbiBhZC1ob2MgZmlsZSBwcm92aWRlciB3aG9zZSBvdXRwdXQgaXMgaW5jbHVkZWQgYXQgcmVuZGVyIHRpbWUuICovXG5cdHB1YmxpYyBhZGRGaWxlKHByb3ZpZGVyOiBTb3VyY2VGaWxlUHJvdmlkZXIpOiB0aGlzIHtcblx0XHR0aGlzLmZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWJzdHJhY3QgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihcblx0XHRjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQsXG5cdCk6IFRbXTtcblx0cHVibGljIGFic3RyYWN0IGdldFByb2plY3QoZGlyOiBzdHJpbmcpOiBQcm9qZWN0U2NhZmZvbGQgfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRQcm9qZWN0cygpOiByZWFkb25seSBQcm9qZWN0U2NhZmZvbGRbXTtcblx0cHVibGljIGFic3RyYWN0IHNjYWZmb2xkKCk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ub1JlcG9TY2FmZm9sZCBleHRlbmRzIFdvcmtzcGFjZVNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcHJvamVjdHM6IFByb2plY3RTY2FmZm9sZFtdID0gW107XG5cblx0LyoqIFJlZ2lzdGVyIGEgbmFtZWQgcHJvamVjdC4gKi9cblx0cHVibGljIGFkZFByb2plY3QocHJvamVjdDogUHJvamVjdFNjYWZmb2xkKTogUHJvamVjdFNjYWZmb2xkIHtcblx0XHR0aGlzLl9wcm9qZWN0cy5wdXNoKHByb2plY3QpO1xuXHRcdHJldHVybiBwcm9qZWN0O1xuXHR9XG5cblx0LyoqIFJldHJpZXZlIGEgcHJldmlvdXNseS1yZWdpc3RlcmVkIHByb2plY3QgYnkgaXRzIGRpcmVjdG9yeSBwYXRoLiAqL1xuXHRwdWJsaWMgZ2V0UHJvamVjdChkaXI6IHN0cmluZyk6IFByb2plY3RTY2FmZm9sZCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2plY3RzLmZpbmQoKHApID0+IHAuZGlyID09PSBkaXIpO1xuXHR9XG5cblx0LyoqIEFsbCByZWdpc3RlcmVkIHByb2plY3RzLCBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG5cdHB1YmxpYyBnZXRQcm9qZWN0cygpOiByZWFkb25seSBQcm9qZWN0U2NhZmZvbGRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2plY3RzO1xuXHR9XG5cblx0LyoqIFJlZ2lzdGVyIGEgbmFtZWQgbW9kZWwgYXQgd29ya3NwYWNlIGxldmVsLiAqL1xuXHRwdWJsaWMgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVCB7XG5cdFx0dGhpcy5fbW9kZWxzLnNldChtb2RlbC5rZXksIG1vZGVsKTtcblx0XHRyZXR1cm4gbW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYSBtb2RlbCBieSBrZXkuIFNlYXJjaGVzIHdvcmtzcGFjZSBtb2RlbHMgZmlyc3QsIHRoZW4gYWxsXG5cdCAqIHJlZ2lzdGVyZWQgcHJvamVjdHMgaW4gb3JkZXIuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtID0gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIG07XG5cdFx0Zm9yIChjb25zdCBwcm9qZWN0IG9mIHRoaXMuX3Byb2plY3RzKSB7XG5cdFx0XHRjb25zdCBwbSA9IHByb2plY3QuZ2V0TW9kZWw8VD4oa2V5KTtcblx0XHRcdGlmIChwbSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcG07XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYWxsIG1vZGVscyBvZiBhIGdpdmVuIHR5cGUuIFNlYXJjaGVzIHdvcmtzcGFjZSBtb2RlbHMgYW5kIGFsbFxuXHQgKiBwcm9qZWN0cywgc28gZmVhdHVyZXMgY2FuIGRpc2NvdmVyIGNvbnRyb2xsZXJzIGFjcm9zcyBtdWx0aXBsZSBwcm9qZWN0cy5cblx0ICovXG5cdHB1YmxpYyBnZXRNb2RlbHM8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oY3RvcjogbmV3ICguLi5hcmdzOiBuZXZlcltdKSA9PiBUKTogVFtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uWy4uLnRoaXMuX21vZGVscy52YWx1ZXMoKV0uZmlsdGVyKChtKTogbSBpcyBUID0+IG0gaW5zdGFuY2VvZiBjdG9yKSxcblx0XHRcdC4uLnRoaXMuX3Byb2plY3RzLmZsYXRNYXAoKHApID0+IHAuZ2V0TW9kZWxzKGN0b3IpKSxcblx0XHRdO1xuXHR9XG5cblx0LyoqIFJlbmRlciBhbGwgbW9kZWxzIGFuZCBwcm9qZWN0cyBpbnRvIGZpbGVzLCB0aGVuIHdyaXRlIGV2ZXJ5dGhpbmcgdG8gZGlzay4gKi9cblx0cHVibGljIGFzeW5jIHNjYWZmb2xkKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFsbEZpbGVzID0gW1xuXHRcdFx0Li4udGhpcy5maWxlcyxcblx0XHRcdC4uLlsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZsYXRNYXAoKG0pID0+IG0uZmlsZXMoKSksXG5cdFx0XHQuLi50aGlzLl9wcm9qZWN0cy5mbGF0TWFwKChwKSA9PiBwLmZpbGVzKCkpLFxuXHRcdF07XG5cblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdGFsbEZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IGpvaW4odGhpcy50YXJnZXREaXIsIGZpbGUuZmlsZVBhdGgpO1xuXHRcdFx0XHRhd2FpdCBta2RpcihkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRcdGF3YWl0IHdyaXRlRmlsZShmdWxsUGF0aCwgZmlsZS5jb250ZW50KTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJta2RpciIsIndyaXRlRmlsZSIsImJhc2VuYW1lIiwiZGlybmFtZSIsImpvaW4iLCJQcm9qZWN0U2NhZmZvbGQiLCJfbW9kZWxzIiwiTWFwIiwiX2ZpbGVzIiwiZGlyIiwiYWRkTW9kZWwiLCJtb2RlbCIsInNldCIsImtleSIsImFkZEZpbGUiLCJwcm92aWRlciIsInB1c2giLCJmaWxlcyIsImdldE1vZGVsIiwiZ2V0IiwiZ2V0TW9kZWxzIiwiY3RvciIsInZhbHVlcyIsImZpbHRlciIsIm0iLCJhbGwiLCJmbGF0TWFwIiwibWFwIiwiZiIsImZpbGVQYXRoIiwiY29udGVudCIsIldvcmtzcGFjZVNjYWZmb2xkIiwidGFyZ2V0RGlyIiwicHJvY2VzcyIsImN3ZCIsIl9uYW1lIiwibmFtZSIsInNldE5hbWUiLCJNb25vUmVwb1NjYWZmb2xkIiwiX3Byb2plY3RzIiwiYWRkUHJvamVjdCIsInByb2plY3QiLCJnZXRQcm9qZWN0IiwiZmluZCIsInAiLCJnZXRQcm9qZWN0cyIsInVuZGVmaW5lZCIsInBtIiwic2NhZmZvbGQiLCJhbGxGaWxlcyIsIlByb21pc2UiLCJmaWxlIiwiZnVsbFBhdGgiLCJyZWN1cnNpdmUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLEtBQUssRUFBRUMsU0FBUyxRQUFRLG1CQUFtQjtBQUNwRCxTQUFTQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxRQUFRLFlBQVk7QUFHcEQ7Ozs7OztDQU1DLEdBQ0QsT0FBTyxNQUFNQzs7SUFDS0MsVUFBVSxJQUFJQyxNQUFrQztJQUNoREMsU0FBdUIsRUFBRSxDQUFDO0lBRTNDLFlBQW1CLEFBQWdCQyxHQUFXLENBQUU7YUFBYkEsTUFBQUE7SUFBYztJQUUxQ0MsU0FBK0JDLEtBQVEsRUFBSztRQUNsRCxJQUFJLENBQUNMLE9BQU8sQ0FBQ00sR0FBRyxDQUFDRCxNQUFNRSxHQUFHLEVBQUVGO1FBQzVCLE9BQU9BO0lBQ1I7SUFFT0csUUFBUUMsUUFBNEIsRUFBUTtRQUNsRCxJQUFJLENBQUNQLE1BQU0sQ0FBQ1EsSUFBSSxJQUFJRCxTQUFTRSxLQUFLO1FBQ2xDLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFNBQXVDTCxHQUFXLEVBQWlCO1FBQ3pFLE9BQU8sSUFBSSxDQUFDUCxPQUFPLENBQUNhLEdBQUcsQ0FBQ047SUFDekI7SUFFT08sVUFBd0NDLElBQWlDLEVBQU87UUFDdEYsT0FBTztlQUFJLElBQUksQ0FBQ2YsT0FBTyxDQUFDZ0IsTUFBTTtTQUFHLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFjQSxhQUFhSDtJQUN0RTtJQUVBLDBEQUEwRCxHQUMxRCxBQUFPSixRQUFzQjtRQUM1QixNQUFNUSxNQUFNO2VBQUksSUFBSSxDQUFDakIsTUFBTTtlQUFL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
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { };
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3NvdXJjZS1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU291cmNlRmlsZVByb3ZpZGVyIHtcblx0ZmlsZXMoKTogU291cmNlRmlsZVtdO1xufVxuXG4vKiogQSBTb3VyY2VGaWxlUHJvdmlkZXIgdGhhdCBrbm93cyBpdHMgb3duIHJlZ2lzdHJhdGlvbiBrZXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleWVkTW9kZWwgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXIge1xuXHRyZWFkb25seSBrZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlRmlsZSA9IHtcblx0ZmlsZVBhdGg6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxXQUdFIn0=
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { WELL_KNOWN_FILES } from "./const.js";
|
|
2
|
-
export class TsConfig {
|
|
3
|
-
key = WELL_KNOWN_FILES.TSCONFIG;
|
|
4
|
-
files() {
|
|
5
|
-
return [
|
|
6
|
-
{
|
|
7
|
-
filePath: "tsconfig.json",
|
|
8
|
-
content: JSON.stringify({
|
|
9
|
-
compilerOptions: {
|
|
10
|
-
target: "ES2022",
|
|
11
|
-
module: "NodeNext",
|
|
12
|
-
moduleResolution: "NodeNext",
|
|
13
|
-
strict: true,
|
|
14
|
-
skipLibCheck: true,
|
|
15
|
-
experimentalDecorators: true,
|
|
16
|
-
emitDecoratorMetadata: true
|
|
17
|
-
}
|
|
18
|
-
}, null, 2)
|
|
19
|
-
}
|
|
20
|
-
];
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3RzY29uZmlnLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRzQ29uZmlnIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLlRTQ09ORklHO1xuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInRzY29uZmlnLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDogXCJFUzIwMjJcIixcblx0XHRcdFx0XHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRcdFx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdFx0XHRcdFx0c3RyaWN0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGVtaXREZWNvcmF0b3JNZXRhZGF0YTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJXRUxMX0tOT1dOX0ZJTEVTIiwiVHNDb25maWciLCJrZXkiLCJUU0NPTkZJRyIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbXBpbGVyT3B0aW9ucyIsInRhcmdldCIsIm1vZHVsZSIsIm1vZHVsZVJlc29sdXRpb24iLCJzdHJpY3QiLCJza2lwTGliQ2hlY2siLCJleHBlcmltZW50YWxEZWNvcmF0b3JzIiwiZW1pdERlY29yYXRvck1ldGFkYXRhIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSxhQUFhO0FBRzlDLE9BQU8sTUFBTUM7SUFDSUMsTUFBTUYsaUJBQWlCRyxRQUFRLENBQUM7SUFFekNDLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0QjtvQkFDQ0MsaUJBQWlCO3dCQUNoQkMsUUFBUTt3QkFDUkMsUUFBUTt3QkFDUkMsa0JBQWtCO3dCQUNsQkMsUUFBUTt3QkFDUkMsY0FBYzt3QkFDZEMsd0JBQXdCO3dCQUN4QkMsdUJBQXVCO29CQUN4QjtnQkFDRCxHQUNBLE1BQ0E7WUFFRjtTQUNBO0lBQ0Y7QUFDRCJ9
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { WELL_KNOWN_FILES } from "./const.js";
|
|
2
|
-
export class VSCodeSettings {
|
|
3
|
-
title;
|
|
4
|
-
key = WELL_KNOWN_FILES.VSCODE_SETTINGS;
|
|
5
|
-
constructor(title){
|
|
6
|
-
this.title = title;
|
|
7
|
-
}
|
|
8
|
-
files() {
|
|
9
|
-
return [
|
|
10
|
-
{
|
|
11
|
-
filePath: ".vscode/settings.json",
|
|
12
|
-
content: JSON.stringify({
|
|
13
|
-
"window.title": `${this.title}\${separator}\${activeEditorShort}`,
|
|
14
|
-
"window.titleSeparator": " | "
|
|
15
|
-
}, null, 2)
|
|
16
|
-
}
|
|
17
|
-
];
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBWU0NvZGVTZXR0aW5ncyBpbXBsZW1lbnRzIEtleWVkTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkga2V5ID0gV0VMTF9LTk9XTl9GSUxFUy5WU0NPREVfU0VUVElOR1M7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGl0bGU6IHN0cmluZykge31cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIudnNjb2RlL3NldHRpbmdzLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XCJ3aW5kb3cudGl0bGVcIjogYCR7dGhpcy50aXRsZX1cXCR7c2VwYXJhdG9yfVxcJHthY3RpdmVFZGl0b3JTaG9ydH1gLFxuXHRcdFx0XHRcdFx0XCJ3aW5kb3cudGl0bGVTZXBhcmF0b3JcIjogXCIgfCBcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJWU0NvZGVTZXR0aW5ncyIsImtleSIsIlZTQ09ERV9TRVRUSU5HUyIsInRpdGxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSxhQUFhO0FBRzlDLE9BQU8sTUFBTUM7O0lBQ0lDLE1BQU1GLGlCQUFpQkcsZUFBZSxDQUFDO0lBRXZELFlBQW1CLEFBQWlCQyxLQUFhLENBQUU7YUFBZkEsUUFBQUE7SUFBZ0I7SUFFN0NDLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0QjtvQkFDQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNMLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQztvQkFDakUseUJBQXlCO2dCQUMxQixHQUNBLE1BQ0E7WUFFRjtTQUNBO0lBQ0Y7QUFDRCJ9
|
package/es6/src/program.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { Command, CommanderError } from "commander";
|
|
2
|
-
import { resolveTargetDir } from "./resolve-target-dir.js";
|
|
3
|
-
import { runInBuilder } from "./runner.js";
|
|
4
|
-
import { CreateCliError, parseApiNames } from "./webapi/api-name.js";
|
|
5
|
-
import { scaffoldApi } from "./webapi/create-api.js";
|
|
6
|
-
function collectName(value, previous) {
|
|
7
|
-
previous.push(value);
|
|
8
|
-
return previous;
|
|
9
|
-
}
|
|
10
|
-
function addWebapiFeatureOptions(cmd) {
|
|
11
|
-
return cmd.option("--database <provider>", "Database provider: none | postgres/typeorm").option("--auth <provider>", "Auth provider: none | auth0").option("--postman <provider>", "Postman provider: none | local | api").option("-y, --yes", "Install dependencies without prompting").option("--install <mode>", "Dependency install mode: ask | yes | no", "ask");
|
|
12
|
-
}
|
|
13
|
-
function toApiOptions(directory, opts, extra = {}) {
|
|
14
|
-
const installMode = String(opts.install ?? "ask").toLowerCase();
|
|
15
|
-
const names = Array.isArray(opts.name) ? opts.name : typeof opts.name === "string" ? [
|
|
16
|
-
opts.name
|
|
17
|
-
] : extra.names;
|
|
18
|
-
return {
|
|
19
|
-
d: resolveTargetDir(directory, typeof opts.d === "string" ? opts.d : undefined),
|
|
20
|
-
databaseProvider: opts.database,
|
|
21
|
-
authProvider: opts.auth,
|
|
22
|
-
postmanProvider: opts.postman,
|
|
23
|
-
installDependencies: opts.yes === true ? "yes" : installMode === "yes" || installMode === "no" ? installMode : undefined,
|
|
24
|
-
names,
|
|
25
|
-
...extra
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
async function runWebapi(normalized) {
|
|
29
|
-
parseApiNames(normalized.names);
|
|
30
|
-
if (process.env.DECOHERE_BUILDER !== "1") {
|
|
31
|
-
runInBuilder(normalized);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const { closePrompt } = await import("./domain/prompt.js");
|
|
35
|
-
try {
|
|
36
|
-
await scaffoldApi(normalized);
|
|
37
|
-
} finally{
|
|
38
|
-
closePrompt();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
export function createProgram() {
|
|
42
|
-
const program = new Command();
|
|
43
|
-
program.exitOverride();
|
|
44
|
-
program.name("decohere").description("Scaffold a new Decohere project").option("-d <directory>", "Target directory (default: current directory)", ".");
|
|
45
|
-
const webapi = addWebapiFeatureOptions(program.command("webapi").argument("[directory]", "Target directory (default: -d or current directory)").option("--name <slug>", "API name under projects/ (repeatable; default: api)", collectName, []));
|
|
46
|
-
webapi.action(async (directory, _opts, cmd)=>{
|
|
47
|
-
await runWebapi(toApiOptions(directory, cmd.optsWithGlobals()));
|
|
48
|
-
});
|
|
49
|
-
addWebapiFeatureOptions(webapi.command("add").argument("<name>", "API name under projects/")).action(async (name, _opts, cmd)=>{
|
|
50
|
-
await runWebapi(toApiOptions(undefined, cmd.optsWithGlobals(), {
|
|
51
|
-
names: [
|
|
52
|
-
name
|
|
53
|
-
],
|
|
54
|
-
add: true
|
|
55
|
-
}));
|
|
56
|
-
});
|
|
57
|
-
return program;
|
|
58
|
-
}
|
|
59
|
-
export async function runCli(argv = process.argv) {
|
|
60
|
-
try {
|
|
61
|
-
await createProgram().parseAsync(argv);
|
|
62
|
-
} catch (err) {
|
|
63
|
-
if (err instanceof CommanderError) {
|
|
64
|
-
process.exit(err.exitCode);
|
|
65
|
-
}
|
|
66
|
-
if (err instanceof CreateCliError) {
|
|
67
|
-
console.error(`\n ${err.message}\n`);
|
|
68
|
-
process.exit(1);
|
|
69
|
-
}
|
|
70
|
-
console.error(err);
|
|
71
|
-
process.exit(1);
|
|
72
|
-
}
|
|
73
|
-
process.exit(process.exitCode ?? 0);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcHJvZ3JhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kLCBDb21tYW5kZXJFcnJvciB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IHJlc29sdmVUYXJnZXREaXIgfSBmcm9tIFwiLi9yZXNvbHZlLXRhcmdldC1kaXIuanNcIjtcbmltcG9ydCB7IHJ1bkluQnVpbGRlciB9IGZyb20gXCIuL3J1bm5lci5qc1wiO1xuaW1wb3J0IHsgQ3JlYXRlQ2xpRXJyb3IsIHBhcnNlQXBpTmFtZXMgfSBmcm9tIFwiLi93ZWJhcGkvYXBpLW5hbWUuanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgeyBzY2FmZm9sZEFwaSB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbGxlY3ROYW1lKHZhbHVlOiBzdHJpbmcsIHByZXZpb3VzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0cHJldmlvdXMucHVzaCh2YWx1ZSk7XG5cdHJldHVybiBwcmV2aW91cztcbn1cblxuZnVuY3Rpb24gYWRkV2ViYXBpRmVhdHVyZU9wdGlvbnMoY21kOiBDb21tYW5kKTogQ29tbWFuZCB7XG5cdHJldHVybiBjbWRcblx0XHQub3B0aW9uKFwiLS1kYXRhYmFzZSA8cHJvdmlkZXI+XCIsIFwiRGF0YWJhc2UgcHJvdmlkZXI6IG5vbmUgfCBwb3N0Z3Jlcy90eXBlb3JtXCIpXG5cdFx0Lm9wdGlvbihcIi0tYXV0aCA8cHJvdmlkZXI+XCIsIFwiQXV0aCBwcm92aWRlcjogbm9uZSB8IGF1dGgwXCIpXG5cdFx0Lm9wdGlvbihcIi0tcG9zdG1hbiA8cHJvdmlkZXI+XCIsIFwiUG9zdG1hbiBwcm92aWRlcjogbm9uZSB8IGxvY2FsIHwgYXBpXCIpXG5cdFx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIkluc3RhbGwgZGVwZW5kZW5jaWVzIHdpdGhvdXQgcHJvbXB0aW5nXCIpXG5cdFx0Lm9wdGlvbihcIi0taW5zdGFsbCA8bW9kZT5cIiwgXCJEZXBlbmRlbmN5IGluc3RhbGwgbW9kZTogYXNrIHwgeWVzIHwgbm9cIiwgXCJhc2tcIik7XG59XG5cbmZ1bmN0aW9uIHRvQXBpT3B0aW9ucyhcblx0ZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9wdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRleHRyYTogUGFydGlhbDxBcGlPcHRpb25zPiA9IHt9LFxuKTogQXBpT3B0aW9ucyB7XG5cdGNvbnN0IGluc3RhbGxNb2RlID0gU3RyaW5nKG9wdHMuaW5zdGFsbCA/PyBcImFza1wiKS50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCBuYW1lcyA9IEFycmF5LmlzQXJyYXkob3B0cy5uYW1lKVxuXHRcdD8gKG9wdHMubmFtZSBhcyBzdHJpbmdbXSlcblx0XHQ6IHR5cGVvZiBvcHRzLm5hbWUgPT09IFwic3RyaW5nXCJcblx0XHRcdD8gW29wdHMubmFtZV1cblx0XHRcdDogZXh0cmEubmFtZXM7XG5cdHJldHVybiB7XG5cdFx0ZDogcmVzb2x2ZVRhcmdldERpcihkaXJlY3RvcnksIHR5cGVvZiBvcHRzLmQgPT09IFwic3RyaW5nXCIgPyBvcHRzLmQgOiB1bmRlZmluZWQpLFxuXHRcdGRhdGFiYXNlUHJvdmlkZXI6IG9wdHMuZGF0YWJhc2UgYXMgQXBpT3B0aW9uc1tcImRhdGFiYXNlUHJvdmlkZXJcIl0sXG5cdFx0YXV0aFByb3ZpZGVyOiBvcHRzLmF1dGggYXMgQXBpT3B0aW9uc1tcImF1dGhQcm92aWRlclwiXSxcblx0XHRwb3N0bWFuUHJvdmlkZXI6IG9wdHMucG9zdG1hbiBhcyBBcGlPcHRpb25zW1wicG9zdG1hblByb3ZpZGVyXCJdLFxuXHRcdGluc3RhbGxEZXBlbmRlbmNpZXM6XG5cdFx0XHRvcHRzLnllcyA9PT0gdHJ1ZVxuXHRcdFx0XHQ/IFwieWVzXCJcblx0XHRcdFx0OiBpbnN0YWxsTW9kZSA9PT0gXCJ5ZXNcIiB8fCBpbnN0YWxsTW9kZSA9PT0gXCJub1wiXG5cdFx0XHRcdFx0PyBpbnN0YWxsTW9kZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdG5hbWVzLFxuXHRcdC4uLmV4dHJhLFxuXHR9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5XZWJhcGkobm9ybWFsaXplZDogQXBpT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRwYXJzZUFwaU5hbWVzKG5vcm1hbGl6ZWQubmFtZXMpO1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiAhPT0gXCIxXCIpIHtcblx0XHRydW5JbkJ1aWxkZXIobm9ybWFsaXplZCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgeyBjbG9zZVByb21wdCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9kb21haW4vcHJvbXB0LmpzXCIpO1xuXHR0cnkge1xuXHRcdGF3YWl0IHNjYWZmb2xkQXBpKG5vcm1hbGl6ZWQpO1xuXHR9IGZpbmFsbHkge1xuXHRcdGNsb3NlUHJvbXB0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2dyYW0oKTogQ29tbWFuZCB7XG5cdGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXHRwcm9ncmFtLmV4aXRPdmVycmlkZSgpO1xuXHRwcm9ncmFtXG5cdFx0Lm5hbWUoXCJkZWNvaGVyZVwiKVxuXHRcdC5kZXNjcmlwdGlvbihcIlNjYWZmb2xkIGEgbmV3IERlY29oZXJlIHByb2plY3RcIilcblx0XHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5cdGNvbnN0IHdlYmFwaSA9IGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zKFxuXHRcdHByb2dyYW1cblx0XHRcdC5jb21tYW5kKFwid2ViYXBpXCIpXG5cdFx0XHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IC1kIG9yIGN1cnJlbnQgZGlyZWN0b3J5KVwiKVxuXHRcdFx0Lm9wdGlvbihcblx0XHRcdFx0XCItLW5hbWUgPHNsdWc+XCIsXG5cdFx0XHRcdFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvIChyZXBlYXRhYmxlOyBkZWZhdWx0OiBhcGkpXCIsXG5cdFx0XHRcdGNvbGxlY3ROYW1lLFxuXHRcdFx0XHRbXSBhcyBzdHJpbmdbXSxcblx0XHRcdCksXG5cdCk7XG5cdHdlYmFwaS5hY3Rpb24oYXN5bmMgKGRpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBfb3B0czogdW5rbm93biwgY21kOiBDb21tYW5kKSA9PiB7XG5cdFx0YXdhaXQgcnVuV2ViYXBpKHRvQXBpT3B0aW9ucyhkaXJlY3RvcnksIGNtZC5vcHRzV2l0aEdsb2JhbHMoKSkpO1xuXHR9KTtcblxuXHRhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyhcblx0XHR3ZWJhcGkuY29tbWFuZChcImFkZFwiKS5hcmd1bWVudChcIjxuYW1lPlwiLCBcIkFQSSBuYW1lIHVuZGVyIHByb2plY3RzL1wiKSxcblx0KS5hY3Rpb24oYXN5bmMgKG5hbWU6IHN0cmluZywgX29wdHM6IHVua25vd24sIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdGF3YWl0IHJ1bldlYmFwaShcblx0XHRcdHRvQXBpT3B0aW9ucyh1bmRlZmluZWQsIGNtZC5vcHRzV2l0aEdsb2JhbHMoKSwgeyBuYW1lczogW25hbWVdLCBhZGQ6IHRydWUgfSksXG5cdFx0KTtcblx0fSk7XG5cblx0cmV0dXJuIHByb2dyYW07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3YpOiBQcm9taXNlPHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRhd2FpdCBjcmVhdGVQcm9ncmFtKCkucGFyc2VBc3luYyhhcmd2KTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIENvbW1hbmRlckVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLmV4aXQoZXJyLmV4aXRDb2RlKTtcblx0XHR9XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIENyZWF0ZUNsaUVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBcXG4gICR7ZXJyLm1lc3NhZ2V9XFxuYCk7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblx0cHJvY2Vzcy5leGl0KHByb2Nlc3MuZXhpdENvZGUgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiQ29tbWFuZCIsIkNvbW1hbmRlckVycm9yIiwicmVzb2x2ZVRhcmdldERpciIsInJ1bkluQnVpbGRlciIsIkNyZWF0ZUNsaUVycm9yIiwicGFyc2VBcGlOYW1lcyIsInNjYWZmb2xkQXBpIiwiY29sbGVjdE5hbWUiLCJ2YWx1ZSIsInByZXZpb3VzIiwicHVzaCIsImFkZFdlYmFwaUZlYXR1cmVPcHRpb25zIiwiY21kIiwib3B0aW9uIiwidG9BcGlPcHRpb25zIiwiZGlyZWN0b3J5Iiwib3B0cyIsImV4dHJhIiwiaW5zdGFsbE1vZGUiLCJTdHJpbmciLCJpbnN0YWxsIiwidG9Mb3dlckNhc2UiLCJuYW1lcyIsIkFycmF5IiwiaXNBcnJheSIsIm5hbWUiLCJkIiwidW5kZWZpbmVkIiwiZGF0YWJhc2VQcm92aWRlciIsImRhdGFiYXNlIiwiYXV0aFByb3ZpZGVyIiwiYXV0aCIsInBvc3RtYW5Qcm92aWRlciIsInBvc3RtYW4iLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwieWVzIiwicnVuV2ViYXBpIiwibm9ybWFsaXplZCIsInByb2Nlc3MiLCJlbnYiLCJERUNPSEVSRV9CVUlMREVSIiwiY2xvc2VQcm9tcHQiLCJjcmVhdGVQcm9ncmFtIiwicHJvZ3JhbSIsImV4aXRPdmVycmlkZSIsImRlc2NyaXB0aW9uIiwid2ViYXBpIiwiY29tbWFuZCIsImFyZ3VtZW50IiwiYWN0aW9uIiwiX29wdHMiLCJvcHRzV2l0aEdsb2JhbHMiLCJhZGQiLCJydW5DbGkiLCJhcmd2IiwicGFyc2VBc3luYyIsImVyciIsImV4aXQiLCJleGl0Q29kZSIsImNvbnNvbGUiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sRUFBRUMsY0FBYyxRQUFRLFlBQVk7QUFDcEQsU0FBU0MsZ0JBQWdCLFFBQVEsMEJBQTBCO0FBQzNELFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBQzNDLFNBQVNDLGNBQWMsRUFBRUMsYUFBYSxRQUFRLHVCQUF1QjtBQUVyRSxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBRXJELFNBQVNDLFlBQVlDLEtBQWEsRUFBRUMsUUFBa0I7SUFDckRBLFNBQVNDLElBQUksQ0FBQ0Y7SUFDZCxPQUFPQztBQUNSO0FBRUEsU0FBU0Usd0JBQXdCQyxHQUFZO0lBQzVDLE9BQU9BLElBQ0xDLE1BQU0sQ0FBQyx5QkFBeUIsOENBQ2hDQSxNQUFNLENBQUMscUJBQXFCLCtCQUM1QkEsTUFBTSxDQUFDLHdCQUF3Qix3Q0FDL0JBLE1BQU0sQ0FBQyxhQUFhLDBDQUNwQkEsTUFBTSxDQUFDLG9CQUFvQiwyQ0FBMkM7QUFDekU7QUFFQSxTQUFTQyxhQUNSQyxTQUE2QixFQUM3QkMsSUFBNkIsRUFDN0JDLFFBQTZCLENBQUMsQ0FBQztJQUUvQixNQUFNQyxjQUFjQyxPQUFPSCxLQUFLSSxPQUFPLElBQUksT0FBT0MsV0FBVztJQUM3RCxNQUFNQyxRQUFRQyxNQUFNQyxPQUFPLENBQUNSLEtBQUtTLElBQUksSUFDakNULEtBQUtTLElBQUksR0FDVixPQUFPVCxLQUFLUyxJQUFJLEtBQUssV0FDcEI7UUFBQ1QsS0FBS1MsSUFBSTtLQUFDLEdBQ1hSLE1BQU1LLEtBQUs7SUFDZixPQUFPO1FBQ05JLEdBQUd4QixpQkFBaUJhLFdBQVcsT0FBT0MsS0FBS1UsQ0FBQyxLQUFLLFdBQVdWLEtBQUtVLENBQUMsR0FBR0M7UUFDckVDLGtCQUFrQlosS0FBS2EsUUFBUTtRQUMvQkMsY0FBY2QsS0FBS2UsSUFBSTtRQUN2QkMsaUJBQWlCaEIsS0FBS2lCLE9BQU87UUFDN0JDLHFCQUNDbEIsS0FBS21CLEdBQUcsS0FBSyxPQUNWLFFBQ0FqQixnQkFBZ0IsU0FBU0EsZ0JBQWdCLE9BQ3hDQSxjQUNBUztRQUNMTDtRQUNBLEdBQUdMLEtBQUs7SUFDVDtBQUNEO0FBRUEsZUFBZW1CLFVBQVVDLFVBQXNCO0lBQzlDaEMsY0FBY2dDLFdBQVdmLEtBQUs7SUFDOUIsSUFBSWdCLFFBQVFDLEdBQUcsQ0FBQ0MsZ0JBQWdCLEtBQUssS0FBSztRQUN6Q3JDLGFBQWFrQztRQUNiO0lBQ0Q7SUFFQSxNQUFNLEVBQUVJLFdBQVcsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO0lBQ3JDLElBQUk7UUFDSCxNQUFNbkMsWUFBWStCO0lBQ25CLFNBQVU7UUFDVEk7SUFDRDtBQUNEO0FBRUEsT0FBTyxTQUFTQztJQUNmLE1BQU1DLFVBQVUsSUFBSTNDO0lBQ3BCMkMsUUFBUUMsWUFBWTtJQUNwQkQsUUFDRWxCLElBQUksQ0FBQyxZQUNMb0IsV0FBVyxDQUFDLG1DQUNaaEMsTUFBTSxDQUFDLGtCQUFrQixpREFBaUQ7SUFFNUUsTUFBTWlDLFNBQVNuQyx3QkFDZGdDLFFBQ0VJLE9BQU8sQ0FBQyxVQUNSQyxRQUFRLENBQUMsZUFBZSx1REFDeEJuQyxNQUFNLENBQ04saUJBQ0EsdURBQ0FOLGFBQ0EsRUFBRTtJQUdMdUMsT0FBT0csTUFBTSxDQUFDLE9BQU9sQyxXQUErQm1DLE9BQWdCdEM7UUFDbkUsTUFBTXdCLFVBQVV0QixhQUFhQyxXQUFXSCxJQUFJdUMsZUFBZTtJQUM1RDtJQUVBeEMsd0JBQ0NtQyxPQUFPQyxPQUFPLENBQUMsT0FBT0MsUUFBUSxDQUFDLFVBQVUsNkJBQ3hDQyxNQUFNLENBQUMsT0FBT3hCLE1BQWN5QixPQUFnQnRDO1FBQzdDLE1BQU13QixVQUNMdEIsYUFBYWEsV0FBV2YsSUFBSXVDLGVBQWUsSUFBSTtZQUFFN0IsT0FBTztnQkFBQ0c7YUFBSztZQUFFMkIsS0FBSztRQUFLO0lBRTVFO0lBRUEsT0FBT1Q7QUFDUjtBQUVBLE9BQU8sZUFBZVUsT0FBT0MsT0FBaUJoQixRQUFRZ0IsSUFBSTtJQUN6RCxJQUFJO1FBQ0gsTUFBTVosZ0JBQWdCYSxVQUFVLENBQUNEO0lBQ2xDLEVBQUUsT0FBT0UsS0FBSztRQUNiLElBQUlBLGVBQWV2RCxnQkFBZ0I7WUFDbENxQyxRQUFRbUIsSUFBSSxDQUFDRCxJQUFJRSxRQUFRO1FBQzFCO1FBQ0EsSUFBSUYsZUFBZXBELGdCQUFnQjtZQUNsQ3VELFFBQVFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRUosSUFBSUssT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwQ3ZCLFFBQVFtQixJQUFJLENBQUM7UUFDZDtRQUNBRSxRQUFRQyxLQUFLLENBQUNKO1FBQ2RsQixRQUFRbUIsSUFBSSxDQUFDO0lBQ2Q7SUFDQW5CLFFBQVFtQixJQUFJLENBQUNuQixRQUFRb0IsUUFBUSxJQUFJO0FBQ2xDIn0=
|
|
@@ -1,9 +0,0 @@
|
|
|
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
|
-
*/ export function resolveTargetDir(positional, flag) {
|
|
5
|
-
const dir = positional?.trim() || flag?.trim() || ".";
|
|
6
|
-
return dir;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcmVzb2x2ZS10YXJnZXQtZGlyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb2x2ZSBzY2FmZm9sZCBkZXN0aW5hdGlvbjogcG9zaXRpb25hbCBgd2ViYXBpIG15LWFwcGAgd2lucyBvdmVyIGAtZGAuXG4gKiBgbnBtIGNyZWF0ZSDigKYgd2ViYXBpIC1kIG15LWFwcGAgZHJvcHMgYC1kYCAobnBtIGxvZ2xldmVsKSBhbmQgZm9yd2FyZHMgYG15LWFwcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVGFyZ2V0RGlyKHBvc2l0aW9uYWw/OiBzdHJpbmcsIGZsYWc/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBkaXIgPSBwb3NpdGlvbmFsPy50cmltKCkgfHwgZmxhZz8udHJpbSgpIHx8IFwiLlwiO1xuXHRyZXR1cm4gZGlyO1xufVxuIl0sIm5hbWVzIjpbInJlc29sdmVUYXJnZXREaXIiLCJwb3NpdGlvbmFsIiwiZmxhZyIsImRpciIsInRyaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0EsaUJBQWlCQyxVQUFtQixFQUFFQyxJQUFhO0lBQ2xFLE1BQU1DLE1BQU1GLFlBQVlHLFVBQVVGLE1BQU1FLFVBQVU7SUFDbEQsT0FBT0Q7QUFDUiJ9
|
package/es6/src/runner.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { execFileSync, spawnSync } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync } from "node:fs";
|
|
3
|
-
import { homedir } from "node:os";
|
|
4
|
-
import { basename, resolve } from "node:path";
|
|
5
|
-
import { CREATE_IMAGE_REPOSITORY, CREATE_VERSION } from "./version.js";
|
|
6
|
-
const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
|
|
7
|
-
/**
|
|
8
|
-
* Run the scaffold inside a pre-built Docker builder image.
|
|
9
|
-
*
|
|
10
|
-
* Called when `DECOHERE_BUILDER` is not set — i.e. the CLI is running on the
|
|
11
|
-
* host, outside the container. Mounts the target directory as `/workspace` so
|
|
12
|
-
* the scaffolded files are written back to the host filesystem.
|
|
13
|
-
*
|
|
14
|
-
* The container runs as the host uid/gid whenever possible so scaffolded files
|
|
15
|
-
* are never root-owned (post-hoc `chown` is unreliable across Docker setups).
|
|
16
|
-
*
|
|
17
|
-
* Host `~/.config/auth0` is mounted when present so the Auth0 CLI can reuse
|
|
18
|
-
* credentials (required for Postman SPA / auth0ClientId).
|
|
19
|
-
*/ export function runInBuilder(opts) {
|
|
20
|
-
const targetDir = resolve(opts.d ?? ".");
|
|
21
|
-
const projectName = basename(targetDir);
|
|
22
|
-
mkdirSync(targetDir, {
|
|
23
|
-
recursive: true
|
|
24
|
-
});
|
|
25
|
-
// Host-owned so initializeCommand can always write here even if something
|
|
26
|
-
// else in .devcontainer ends up oddly owned.
|
|
27
|
-
mkdirSync(resolve(targetDir, ".devcontainer", "npm-auth"), {
|
|
28
|
-
recursive: true
|
|
29
|
-
});
|
|
30
|
-
// Ensure Docker is available.
|
|
31
|
-
try {
|
|
32
|
-
execFileSync("docker", [
|
|
33
|
-
"info"
|
|
34
|
-
], {
|
|
35
|
-
stdio: "pipe"
|
|
36
|
-
});
|
|
37
|
-
} catch {
|
|
38
|
-
console.error("\n Docker is required to scaffold a Decohere project.\n" + " Install Docker Desktop: https://www.docker.com/products/docker-desktop\n");
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
const hostUid = process.getuid?.();
|
|
42
|
-
const hostGid = process.getgid?.() ?? hostUid;
|
|
43
|
-
const runAsHostUser = hostUid != null && hostGid != null;
|
|
44
|
-
// Anonymous root-owned volumes are not writable when we drop privileges.
|
|
45
|
-
const npmCacheDir = resolve(homedir(), ".cache/decohere-create/npm");
|
|
46
|
-
mkdirSync(npmCacheDir, {
|
|
47
|
-
recursive: true
|
|
48
|
-
});
|
|
49
|
-
// Isolated HOME so --user host-uid can write without a matching /etc/passwd entry.
|
|
50
|
-
const builderHome = "/tmp/decohere-create-home";
|
|
51
|
-
const volumes = [
|
|
52
|
-
"-v",
|
|
53
|
-
`${targetDir}:/workspace`,
|
|
54
|
-
"-v",
|
|
55
|
-
`${npmCacheDir}:/npm-cache`
|
|
56
|
-
];
|
|
57
|
-
const envArgs = [
|
|
58
|
-
"-e",
|
|
59
|
-
"DECOHERE_BUILDER=1",
|
|
60
|
-
// Host dir basename — container cwd is /workspace so basename would be wrong.
|
|
61
|
-
"-e",
|
|
62
|
-
`DECOHERE_PROJECT_NAME=${projectName}`,
|
|
63
|
-
"-e",
|
|
64
|
-
"NPM_CONFIG_CACHE=/npm-cache",
|
|
65
|
-
"-e",
|
|
66
|
-
"NPM_CONFIG_PREFER_OFFLINE=true",
|
|
67
|
-
"-e",
|
|
68
|
-
`HOME=${builderHome}`
|
|
69
|
-
];
|
|
70
|
-
// Mount host .npmrc where the non-root process can read it.
|
|
71
|
-
const npmrcPath = resolve(homedir(), ".npmrc");
|
|
72
|
-
if (existsSync(npmrcPath)) {
|
|
73
|
-
volumes.push("-v", `${npmrcPath}:/tmp/host-npmrc:ro`);
|
|
74
|
-
envArgs.push("-e", "NPM_CONFIG_USERCONFIG=/tmp/host-npmrc");
|
|
75
|
-
}
|
|
76
|
-
// Auth0 CLI reads credentials from $HOME/.config/auth0 — without this mount,
|
|
77
|
-
// ensureSpaApp fails and Postman gets an empty auth0ClientId.
|
|
78
|
-
const auth0ConfigDir = resolve(homedir(), ".config/auth0");
|
|
79
|
-
if (existsSync(auth0ConfigDir)) {
|
|
80
|
-
volumes.push("-v", `${auth0ConfigDir}:${builderHome}/.config/auth0`);
|
|
81
|
-
}
|
|
82
|
-
const userArgs = [];
|
|
83
|
-
if (runAsHostUser) {
|
|
84
|
-
userArgs.push("--user", `${hostUid}:${hostGid}`);
|
|
85
|
-
} else if (hostUid != null) {
|
|
86
|
-
// Fallback for environments without getgid: keep legacy chown path.
|
|
87
|
-
envArgs.push("-e", `HOST_UID=${hostUid}`);
|
|
88
|
-
if (hostGid != null) envArgs.push("-e", `HOST_GID=${hostGid}`);
|
|
89
|
-
}
|
|
90
|
-
const commandArgs = opts.add ? [
|
|
91
|
-
"webapi",
|
|
92
|
-
"add",
|
|
93
|
-
opts.names?.[0] ?? "",
|
|
94
|
-
"-d",
|
|
95
|
-
"."
|
|
96
|
-
] : [
|
|
97
|
-
"webapi",
|
|
98
|
-
"-d",
|
|
99
|
-
"."
|
|
100
|
-
];
|
|
101
|
-
if (!opts.add) {
|
|
102
|
-
for (const name of opts.names ?? []){
|
|
103
|
-
commandArgs.push("--name", name);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (opts.databaseProvider != null) {
|
|
107
|
-
commandArgs.push("--database", opts.databaseProvider);
|
|
108
|
-
}
|
|
109
|
-
if (opts.authProvider != null) {
|
|
110
|
-
commandArgs.push("--auth", opts.authProvider);
|
|
111
|
-
}
|
|
112
|
-
if (opts.postmanProvider != null) {
|
|
113
|
-
commandArgs.push("--postman", opts.postmanProvider);
|
|
114
|
-
}
|
|
115
|
-
if (opts.installDependencies != null) {
|
|
116
|
-
commandArgs.push("--install", opts.installDependencies);
|
|
117
|
-
}
|
|
118
|
-
console.log(" Running scaffolding in a sandboxed container...\n");
|
|
119
|
-
// Only allocate a TTY when stdin is itself a TTY — avoids a hung process
|
|
120
|
-
// in non-interactive environments (pipes, CI, scripts).
|
|
121
|
-
const ttyFlags = process.stdin.isTTY ? [
|
|
122
|
-
"-it"
|
|
123
|
-
] : [
|
|
124
|
-
"-i"
|
|
125
|
-
];
|
|
126
|
-
const result = spawnSync("docker", [
|
|
127
|
-
"run",
|
|
128
|
-
"--rm",
|
|
129
|
-
...ttyFlags,
|
|
130
|
-
...userArgs,
|
|
131
|
-
...volumes,
|
|
132
|
-
...envArgs,
|
|
133
|
-
"-w",
|
|
134
|
-
"/workspace",
|
|
135
|
-
BUILDER_IMAGE,
|
|
136
|
-
...commandArgs
|
|
137
|
-
], {
|
|
138
|
-
stdio: "inherit"
|
|
139
|
-
});
|
|
140
|
-
if (result.status === 0) {
|
|
141
|
-
console.log(`\n Scaffold complete!\n\n Open your project:\n\n code ${targetDir}\n`);
|
|
142
|
-
}
|
|
143
|
-
process.exit(result.status ?? 0);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSwgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkvY3JlYXRlLWFwaS5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBUaGUgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdWlkL2dpZCB3aGVuZXZlciBwb3NzaWJsZSBzbyBzY2FmZm9sZGVkIGZpbGVzXG4gKiBhcmUgbmV2ZXIgcm9vdC1vd25lZCAocG9zdC1ob2MgYGNob3duYCBpcyB1bnJlbGlhYmxlIGFjcm9zcyBEb2NrZXIgc2V0dXBzKS5cbiAqXG4gKiBIb3N0IGB+Ly5jb25maWcvYXV0aDBgIGlzIG1vdW50ZWQgd2hlbiBwcmVzZW50IHNvIHRoZSBBdXRoMCBDTEkgY2FuIHJldXNlXG4gKiBjcmVkZW50aWFscyAocmVxdWlyZWQgZm9yIFBvc3RtYW4gU1BBIC8gYXV0aDBDbGllbnRJZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IGJhc2VuYW1lKHRhcmdldERpcik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHQvLyBIb3N0LW93bmVkIHNvIGluaXRpYWxpemVDb21tYW5kIGNhbiBhbHdheXMgd3JpdGUgaGVyZSBldmVuIGlmIHNvbWV0aGluZ1xuXHQvLyBlbHNlIGluIC5kZXZjb250YWluZXIgZW5kcyB1cCBvZGRseSBvd25lZC5cblx0bWtkaXJTeW5jKHJlc29sdmUodGFyZ2V0RGlyLCBcIi5kZXZjb250YWluZXJcIiwgXCJucG0tYXV0aFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gRW5zdXJlIERvY2tlciBpcyBhdmFpbGFibGUuXG5cdHRyeSB7XG5cdFx0ZXhlY0ZpbGVTeW5jKFwiZG9ja2VyXCIsIFtcImluZm9cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHR9IGNhdGNoIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIERvY2tlciBpcyByZXF1aXJlZCB0byBzY2FmZm9sZCBhIERlY29oZXJlIHByb2plY3QuXFxuXCIgK1xuXHRcdFx0XHRcIiAgSW5zdGFsbCBEb2NrZXIgRGVza3RvcDogaHR0cHM6Ly93d3cuZG9ja2VyLmNvbS9wcm9kdWN0cy9kb2NrZXItZGVza3RvcFxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0Y29uc3QgaG9zdFVpZCA9IHByb2Nlc3MuZ2V0dWlkPy4oKTtcblx0Y29uc3QgaG9zdEdpZCA9IHByb2Nlc3MuZ2V0Z2lkPy4oKSA/PyBob3N0VWlkO1xuXHRjb25zdCBydW5Bc0hvc3RVc2VyID0gaG9zdFVpZCAhPSBudWxsICYmIGhvc3RHaWQgIT0gbnVsbDtcblxuXHQvLyBBbm9ueW1vdXMgcm9vdC1vd25lZCB2b2x1bWVzIGFyZSBub3Qgd3JpdGFibGUgd2hlbiB3ZSBkcm9wIHByaXZpbGVnZXMuXG5cdGNvbnN0IG5wbUNhY2hlRGlyID0gcmVzb2x2ZShob21lZGlyKCksIFwiLmNhY2hlL2RlY29oZXJlLWNyZWF0ZS9ucG1cIik7XG5cdG1rZGlyU3luYyhucG1DYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0Ly8gSXNvbGF0ZWQgSE9NRSBzbyAtLXVzZXIgaG9zdC11aWQgY2FuIHdyaXRlIHdpdGhvdXQgYSBtYXRjaGluZyAvZXRjL3Bhc3N3ZCBlbnRyeS5cblx0Y29uc3QgYnVpbGRlckhvbWUgPSBcIi90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIjtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdC8vIEhvc3QgZGlyIGJhc2VuYW1lIOKAlCBjb250YWluZXIgY3dkIGlzIC93b3Jrc3BhY2Ugc28gYmFzZW5hbWUgd291bGQgYmUgd3JvbmcuXG5cdFx0XCItZVwiLFxuXHRcdGBERUNPSEVSRV9QUk9KRUNUX05BTUU9JHtwcm9qZWN0TmFtZX1gLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfUFJFRkVSX09GRkxJTkU9dHJ1ZVwiLFxuXHRcdFwiLWVcIixcblx0XHRgSE9NRT0ke2J1aWxkZXJIb21lfWAsXG5cdF07XG5cblx0Ly8gTW91bnQgaG9zdCAubnBtcmMgd2hlcmUgdGhlIG5vbi1yb290IHByb2Nlc3MgY2FuIHJlYWQgaXQuXG5cdGNvbnN0IG5wbXJjUGF0aCA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5ucG1yY1wiKTtcblx0aWYgKGV4aXN0c1N5bmMobnBtcmNQYXRoKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke25wbXJjUGF0aH06L3RtcC9ob3N0LW5wbXJjOnJvYCk7XG5cdFx0ZW52QXJncy5wdXNoKFwiLWVcIiwgXCJOUE1fQ09ORklHX1VTRVJDT05GSUc9L3RtcC9ob3N0LW5wbXJjXCIpO1xuXHR9XG5cblx0Ly8gQXV0aDAgQ0xJIHJlYWRzIGNyZWRlbnRpYWxzIGZyb20gJEhPTUUvLmNvbmZpZy9hdXRoMCDigJQgd2l0aG91dCB0aGlzIG1vdW50LFxuXHQvLyBlbnN1cmVTcGFBcHAgZmFpbHMgYW5kIFBvc3RtYW4gZ2V0cyBhbiBlbXB0eSBhdXRoMENsaWVudElkLlxuXHRjb25zdCBhdXRoMENvbmZpZ0RpciA9IHJlc29sdmUoaG9tZWRpcigpLCBcIi5jb25maWcvYXV0aDBcIik7XG5cdGlmIChleGlzdHNTeW5jKGF1dGgwQ29uZmlnRGlyKSkge1xuXHRcdHZvbHVtZXMucHVzaChcIi12XCIsIGAke2F1dGgwQ29uZmlnRGlyfToke2J1aWxkZXJIb21lfS8uY29uZmlnL2F1dGgwYCk7XG5cdH1cblxuXHRjb25zdCB1c2VyQXJnczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHJ1bkFzSG9zdFVzZXIpIHtcblx0XHR1c2VyQXJncy5wdXNoKFwiLS11c2VyXCIsIGAke2hvc3RVaWR9OiR7aG9zdEdpZH1gKTtcblx0fSBlbHNlIGlmIChob3N0VWlkICE9IG51bGwpIHtcblx0XHQvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgZ2V0Z2lkOiBrZWVwIGxlZ2FjeSBjaG93biBwYXRoLlxuXHRcdGVudkFyZ3MucHVzaChcIi1lXCIsIGBIT1NUX1VJRD0ke2hvc3RVaWR9YCk7XG5cdFx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfR0lEPSR7aG9zdEdpZH1gKTtcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmRBcmdzOiBzdHJpbmdbXSA9IG9wdHMuYWRkXG5cdFx0PyBbXCJ3ZWJhcGlcIiwgXCJhZGRcIiwgb3B0cy5uYW1lcz8uWzBdID8/IFwiXCIsIFwiLWRcIiwgXCIuXCJdXG5cdFx0OiBbXCJ3ZWJhcGlcIiwgXCItZFwiLCBcIi5cIl07XG5cdGlmICghb3B0cy5hZGQpIHtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygb3B0cy5uYW1lcyA/PyBbXSkge1xuXHRcdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tbmFtZVwiLCBuYW1lKTtcblx0XHR9XG5cdH1cblx0aWYgKG9wdHMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tZGF0YWJhc2VcIiwgb3B0cy5kYXRhYmFzZVByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkge1xuXHRcdGNvbW1hbmRBcmdzLnB1c2goXCItLWF1dGhcIiwgb3B0cy5hdXRoUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tcG9zdG1hblwiLCBvcHRzLnBvc3RtYW5Qcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0taW5zdGFsbFwiLCBvcHRzLmluc3RhbGxEZXBlbmRlbmNpZXMpO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdC8vIE9ubHkgYWxsb2NhdGUgYSBUVFkgd2hlbiBzdGRpbiBpcyBpdHNlbGYgYSBUVFkg4oCUIGF2b2lkcyBhIGh1bmcgcHJvY2Vzc1xuXHQvLyBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChwaXBlcywgQ0ksIHNjcmlwdHMpLlxuXHRjb25zdCB0dHlGbGFncyA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgPyBbXCItaXRcIl0gOiBbXCItaVwiXTtcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG5cdFx0XCJkb2NrZXJcIixcblx0XHRbXG5cdFx0XHRcInJ1blwiLFxuXHRcdFx0XCItLXJtXCIsXG5cdFx0XHQuLi50dHlGbGFncyxcblx0XHRcdC4uLnVzZXJBcmdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdC4uLmVudkFyZ3MsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgXFxuICBTY2FmZm9sZCBjb21wbGV0ZSFcXG5cXG4gIE9wZW4geW91ciBwcm9qZWN0OlxcblxcbiAgICBjb2RlICR7dGFyZ2V0RGlyfVxcbmApO1xuXHR9XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsImhvbWVkaXIiLCJiYXNlbmFtZSIsInJlc29sdmUiLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicHJvamVjdE5hbWUiLCJyZWN1cnNpdmUiLCJzdGRpbyIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3MiLCJleGl0IiwiaG9zdFVpZCIsImdldHVpZCIsImhvc3RHaWQiLCJnZXRnaWQiLCJydW5Bc0hvc3RVc2VyIiwibnBtQ2FjaGVEaXIiLCJidWlsZGVySG9tZSIsInZvbHVtZXMiLCJlbnZBcmdzIiwibnBtcmNQYXRoIiwicHVzaCIsImF1dGgwQ29uZmlnRGlyIiwidXNlckFyZ3MiLCJjb21tYW5kQXJncyIsImFkZCIsIm5hbWVzIiwibmFtZSIsImRhdGFiYXNlUHJvdmlkZXIiLCJhdXRoUHJvdmlkZXIiLCJwb3N0bWFuUHJvdmlkZXIiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwibG9nIiwidHR5RmxhZ3MiLCJzdGRpbiIsImlzVFRZIiwicmVzdWx0Iiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLEVBQUVDLFNBQVMsUUFBUSxxQkFBcUI7QUFDN0QsU0FBU0MsVUFBVSxFQUFFQyxTQUFTLFFBQVEsVUFBVTtBQUNoRCxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxTQUFTQyxRQUFRLEVBQUVDLE9BQU8sUUFBUSxZQUFZO0FBQzlDLFNBQVNDLHVCQUF1QixFQUFFQyxjQUFjLFFBQVEsZUFBZTtBQUd2RSxNQUFNQyxnQkFBZ0IsR0FBR0Ysd0JBQXdCLENBQUMsRUFBRUMsZ0JBQWdCO0FBRXBFOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sU0FBU0UsYUFBYUMsSUFBZ0I7SUFDNUMsTUFBTUMsWUFBWU4sUUFBUUssS0FBS0UsQ0FBQyxJQUFJO0lBQ3BDLE1BQU1DLGNBQWNULFNBQVNPO0lBQzdCVCxVQUFVUyxXQUFXO1FBQUVHLFdBQVc7SUFBSztJQUN2QywwRUFBMEU7SUFDMUUsNkNBQTZDO0lBQzdDWixVQUFVRyxR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
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
async function scaffold(workspace, cliOptions, features) {
|
|
2
|
-
const options = await getAllOptions(workspace, cliOptions, features);
|
|
3
|
-
// Features mutate workspace models first, then workspace renders to disk.
|
|
4
|
-
await scaffoldFeatures(workspace, options, features);
|
|
5
|
-
await scaffoldWorkspace(workspace, options);
|
|
6
|
-
// Post-write phase: install deps, print final messages, etc.
|
|
7
|
-
await finalizeFeatures(workspace, options, features);
|
|
8
|
-
}
|
|
9
|
-
async function scaffoldWorkspace(workspace, _options) {
|
|
10
|
-
await workspace.scaffold();
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Iterate features in order, calling `getOptions` on each.
|
|
14
|
-
* Each feature receives the running merged options so later features can
|
|
15
|
-
* branch on decisions made by earlier ones (e.g. database choice affects auth).
|
|
16
|
-
* Results are shallow-merged, so features only need to return what they own.
|
|
17
|
-
*/ async function getAllOptions(workspace, cliOptions, features) {
|
|
18
|
-
let options = {
|
|
19
|
-
...cliOptions
|
|
20
|
-
};
|
|
21
|
-
for (const feature of features){
|
|
22
|
-
const featureOptions = await feature.getOptions(workspace, options);
|
|
23
|
-
options = {
|
|
24
|
-
...options,
|
|
25
|
-
...featureOptions
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
return options;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Iterate features in order, calling `scaffold` with the fully-resolved options.
|
|
32
|
-
* All option-gathering is complete before any scaffolding begins.
|
|
33
|
-
*/ async function scaffoldFeatures(workspace, options, features) {
|
|
34
|
-
for (const feature of features){
|
|
35
|
-
await feature.scaffold(workspace, options);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Iterate features in order, calling `finalize` on each (if defined).
|
|
40
|
-
* All files are on disk by this point.
|
|
41
|
-
*/ async function finalizeFeatures(workspace, options, features) {
|
|
42
|
-
for (const feature of features){
|
|
43
|
-
if (feature.finalize) {
|
|
44
|
-
await feature.finalize(workspace, options);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export const ScaffoldService = {
|
|
49
|
-
scaffold
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvc2VydmljZXMvc2NhZmZvbGQuc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5cbi8qKlxuICogQSBmZWF0dXJlIGhhcyB0aHJlZSByZXNwb25zaWJpbGl0aWVzOlxuICogIDEuIGBnZXRPcHRpb25zYCDigJQgcmVzb2x2ZSBwcm92aWRlciBzZWxlY3Rpb24gYW5kIGFueSBmb2xsb3ctdXAgcXVlc3Rpb25zLlxuICogICAgIFJlY2VpdmVzIHRoZSBvcHRpb25zIGNvbGxlY3RlZCBzbyBmYXI7IHJldHVybnMgb25seSB0aGUga2V5cyBpdCBvd25zLlxuICogICAgIFNob3J0LWNpcmN1aXRzIGlmIHRoZSBjYWxsZXIgYWxyZWFkeSBzdXBwbGllZCB0aG9zZSBrZXlzIHZpYSBDTEkgZmxhZ3MuXG4gKiAgMi4gYHNjYWZmb2xkYCDigJQgbXV0YXRlIHRoZSB3b3Jrc3BhY2UgbW9kZWxzIGFuZC9vciB3cml0ZSBmaWxlcyB1c2luZyB0aGVcbiAqICAgICBmdWxseS1yZXNvbHZlZCBvcHRpb25zLiBDYWxsZWQgYWZ0ZXIgQUxMIGZlYXR1cmVzIGhhdmUgZ2F0aGVyZWQgb3B0aW9uc1xuICogICAgIGJ1dCBCRUZPUkUgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gZGlzay5cbiAqICAzLiBgZmluYWxpemVgIChvcHRpb25hbCkg4oCUIHJ1biBwb3N0LXdyaXRlIGFjdGlvbnMgKGUuZy4gaW5zdGFsbCBkZXBlbmRlbmNpZXMpLlxuICogICAgIENhbGxlZCBhZnRlciB3b3Jrc3BhY2Uuc2NhZmZvbGQoKSBoYXMgZmx1c2hlZCBhbGwgZmlsZXMgdG8gZGlzay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlPFRPcHRpb25zIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiB7XG5cdGdldE9wdGlvbnMoXG5cdFx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0XHRjbGlPcHRpb25zOiBQYXJ0aWFsPFRPcHRpb25zPixcblx0KTogUHJvbWlzZTxQYXJ0aWFsPFRPcHRpb25zPj47XG5cdHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cdGZpbmFsaXplPyh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBUT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZChcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogb2JqZWN0LFxuXHRmZWF0dXJlczogRmVhdHVyZVtdLFxuKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBnZXRBbGxPcHRpb25zKHdvcmtzcGFjZSwgY2xpT3B0aW9ucywgZmVhdHVyZXMpO1xuXHQvLyBGZWF0dXJlcyBtdXRhdGUgd29ya3NwYWNlIG1vZGVscyBmaXJzdCwgdGhlbiB3b3Jrc3BhY2UgcmVuZGVycyB0byBkaXNrLlxuXHRhd2FpdCBzY2FmZm9sZEZlYXR1cmVzKHdvcmtzcGFjZSwgb3B0aW9ucywgZmVhdHVyZXMpO1xuXHRhd2FpdCBzY2FmZm9sZFdvcmtzcGFjZSh3b3Jrc3BhY2UsIG9wdGlvbnMpO1xuXHQvLyBQb3N0LXdyaXRlIHBoYXNlOiBpbnN0YWxsIGRlcHMsIHByaW50IGZpbmFsIG1lc3NhZ2VzLCBldGMuXG5cdGF3YWl0IGZpbmFsaXplRmVhdHVyZXMod29ya3NwYWNlLCBvcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkV29ya3NwYWNlKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIF9vcHRpb25zOiBvYmplY3QpIHtcblx0YXdhaXQgd29ya3NwYWNlLnNjYWZmb2xkKCk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBmZWF0dXJlcyBpbiBvcmRlciwgY2FsbGluZyBgZ2V0T3B0aW9uc2Agb24gZWFjaC5cbiAqIEVhY2ggZmVhdHVyZSByZWNlaXZlcyB0aGUgcnVubmluZyBtZXJnZWQgb3B0aW9ucyBzbyBsYXRlciBmZWF0dXJlcyBjYW5cbiAqIGJyYW5jaCBvbiBkZWNpc2lvbnMgbWFkZSBieSBlYXJsaWVyIG9uZXMgKGUuZy4gZGF0YWJhc2UgY2hvaWNlIGFmZmVjdHMgYXV0aCkuXG4gKiBSZXN1bHRzIGFyZSBzaGFsbG93LW1lcmdlZCwgc28gZmVhdHVyZXMgb25seSBuZWVkIHRvIHJldHVybiB3aGF0IHRoZXkgb3duLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxPcHRpb25zKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBvYmplY3QsXG5cdGZlYXR1cmVzOiBGZWF0dXJlW10sXG4pOiBQcm9taXNlPG9iamVjdD4ge1xuXHRsZXQgb3B0aW9ucyA9IHsgLi4uY2xpT3B0aW9ucyB9O1xuXHRmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcblx0XHRjb25zdCBmZWF0dXJlT3B0aW9ucyA9IGF3YWl0IGZlYXR1cmUuZ2V0T3B0aW9ucyh3b3Jrc3BhY2UsIG9wdGlvbnMpO1xuXHRcdG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLmZlYXR1cmVPcHRpb25zIH07XG5cdH1cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBmZWF0dXJlcyBpbiBvcmRlciwgY2FsbGluZyBgc2NhZmZvbGRgIHdpdGggdGhlIGZ1bGx5LXJlc29sdmVkIG9wdGlvbnMuXG4gKiBBbGwgb3B0aW9uLWdhdGhlcmluZyBpcyBjb21wbGV0ZSBiZWZvcmUgYW55IHNjYWZmb2xkaW5nIGJlZ2lucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRGZWF0dXJlcyhcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0b3B0aW9uczogb2JqZWN0LFxuXHRmZWF0dXJlczogRmVhdHVyZVtdLFxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuXHRcdGF3YWl0IGZlYXR1cmUuc2NhZmZvbGQod29ya3NwYWNlLCBvcHRpb25zIGFzIG5ldmVyKTtcblx0fVxufVxuXG4vKipcbiAqIEl0ZXJhdGUgZmVhdHVyZXMgaW4gb3JkZXIsIGNhbGxpbmcgYGZpbmFsaXplYCBvbiBlYWNoIChpZiBkZWZpbmVkKS5cbiAqIEFsbCBmaWxlcyBhcmUgb24gZGlzayBieSB0aGlzIHBvaW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUZlYXR1cmVzKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBvYmplY3QsXG5cdGZlYXR1cmVzOiBGZWF0dXJlW10sXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Zm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG5cdFx0aWYgKGZlYXR1cmUuZmluYWxpemUpIHtcblx0XHRcdGF3YWl0IGZlYXR1cmUuZmluYWxpemUod29ya3NwYWNlLCBvcHRpb25zIGFzIG5ldmVyKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IFNjYWZmb2xkU2VydmljZSA9IHsgc2NhZmZvbGQgfTtcbiJdLCJuYW1lcyI6WyJzY2FmZm9sZCIsIndvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJmZWF0dXJlcyIsIm9wdGlvbnMiLCJnZXRBbGxPcHRpb25zIiwic2NhZmZvbGRGZWF0dXJlcyIsInNjYWZmb2xkV29ya3NwYWNlIiwiZmluYWxpemVGZWF0dXJlcyIsIl9vcHRpb25zIiwiZmVhdHVyZSIsImZlYXR1cmVPcHRpb25zIiwiZ2V0T3B0aW9ucyIsImZpbmFsaXplIiwiU2NhZmZvbGRTZXJ2aWNlIl0sIm1hcHBpbmdzIjoiQUFzQkEsZUFBZUEsU0FDZEMsU0FBNEIsRUFDNUJDLFVBQWtCLEVBQ2xCQyxRQUFtQjtJQUVuQixNQUFNQyxVQUFVLE1BQU1DLGNBQWNKLFdBQVdDLFlBQVlDO0lBQzNELDBFQUEwRTtJQUMxRSxNQUFNRyxpQkFBaUJMLFdBQVdHLFNBQVNEO0lBQzNDLE1BQU1JLGtCQUFrQk4sV0FBV0c7SUFDbkMsNkRBQTZEO0lBQzdELE1BQU1JLGlCQUFpQlAsV0FBV0csU0FBU0Q7QUFDNUM7QUFFQSxlQUFlSSxrQkFBa0JOLFNBQTRCLEVBQUVRLFFBQWdCO0lBQzlFLE1BQU1SLFVBQVVELFFBQVE7QUFDekI7QUFFQTs7Ozs7Q0FLQyxHQUNELGVBQWVLLGNBQ2RKLFNBQTRCLEVBQzVCQyxVQUFrQixFQUNsQkMsUUFBbUI7SUFFbkIsSUFBSUMsVUFBVTtRQUFFLEdBQUdGLFVBQVU7SUFBQztJQUM5QixLQUFLLE1BQU1RLFdBQVdQLFNBQVU7UUFDL0IsTUFBTVEsaUJBQWlCLE1BQU1ELFFBQVFFLFVBQVUsQ0FBQ1gsV0FBV0c7UUFDM0RBLFVBQVU7WUFBRSxHQUFHQSxPQUFPO1lBQUUsR0FBR08sY0FBYztRQUFDO0lBQzNDO0lBQ0EsT0FBT1A7QUFDUjtBQUVBOzs7Q0FHQyxHQUNELGVBQWVFLGlCQUNkTCxTQUE0QixFQUM1QkcsT0FBZSxFQUNmRCxRQUFtQjtJQUVuQixLQUFLLE1BQU1PLFdBQVdQLFNBQVU7UUFDL0IsTUFBTU8sUUFBUVYsUUFBUSxDQUFDQyxXQUFXRztJQUNuQztBQUNEO0FBRUE7OztDQUdDLEdBQ0QsZUFBZUksaUJBQ2RQLFNBQTRCLEVBQzVCRyxPQUFlLEVBQ2ZELFFBQW1CO0lBRW5CLEtBQUssTUFBTU8sV0FBV1AsU0FBVTtRQUMvQixJQUFJTyxRQUFRRyxRQUFRLEVBQUU7WUFDckIsTUFBTUgsUUFBUUcsUUFBUSxDQUFDWixXQUFXRztRQUNuQztJQUNEO0FBQ0Q7QUFFQSxPQUFPLE1BQU1VLGtCQUFrQjtJQUFFZDtBQUFTLEVBQUUifQ==
|
package/es6/src/version.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
const _require = createRequire(import.meta.url);
|
|
5
|
-
const DEFAULT_CREATE_VERSION = "0.0.1-dev";
|
|
6
|
-
const DEFAULT_CREATE_IMAGE_REPOSITORY = "ghcr.io/typesmiths/decohere/create";
|
|
7
|
-
function resolveCreateMetadata() {
|
|
8
|
-
let dir = dirname(fileURLToPath(import.meta.url));
|
|
9
|
-
for(let i = 0; i < 5; i++){
|
|
10
|
-
try {
|
|
11
|
-
const pkg = _require(join(dir, "package.json"));
|
|
12
|
-
if (pkg.name === "@decohere/create") {
|
|
13
|
-
return {
|
|
14
|
-
version: pkg.version ?? DEFAULT_CREATE_VERSION,
|
|
15
|
-
imageRepository: pkg.decohere?.dockerImageRepository ?? DEFAULT_CREATE_IMAGE_REPOSITORY
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
} catch {}
|
|
19
|
-
const parent = dirname(dir);
|
|
20
|
-
if (parent === dir) break;
|
|
21
|
-
dir = parent;
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
version: DEFAULT_CREATE_VERSION,
|
|
25
|
-
imageRepository: DEFAULT_CREATE_IMAGE_REPOSITORY
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
const createMetadata = resolveCreateMetadata();
|
|
29
|
-
/** Version of @decohere/create, used to pin scaffolded @decohere/* dependencies. */ export const CREATE_VERSION = createMetadata.version;
|
|
30
|
-
/** Canonical published Docker repository for the @decohere/create builder image. */ export const CREATE_IMAGE_REPOSITORY = createMetadata.imageRepository;
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdmVyc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5jb25zdCBfcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxudHlwZSBDcmVhdGVQYWNrYWdlTWV0YWRhdGEgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdHZlcnNpb24/OiBzdHJpbmc7XG5cdGRlY29oZXJlPzoge1xuXHRcdGRvY2tlckltYWdlUmVwb3NpdG9yeT86IHN0cmluZztcblx0fTtcbn07XG5cbmNvbnN0IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04gPSBcIjAuMC4xLWRldlwiO1xuY29uc3QgREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSA9IFwiZ2hjci5pby90eXBlc21pdGhzL2RlY29oZXJlL2NyZWF0ZVwiO1xuXG5mdW5jdGlvbiByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKSB7XG5cdGxldCBkaXIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBrZyA9IF9yZXF1aXJlKGpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSkgYXMgQ3JlYXRlUGFja2FnZU1ldGFkYXRhO1xuXHRcdFx0aWYgKHBrZy5uYW1lID09PSBcIkBkZWNvaGVyZS9jcmVhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZlcnNpb246IHBrZy52ZXJzaW9uID8/IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFx0aW1hZ2VSZXBvc2l0b3J5OlxuXHRcdFx0XHRcdFx0cGtnLmRlY29oZXJlPy5kb2NrZXJJbWFnZVJlcG9zaXRvcnkgPz8gREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0Y29uc3QgcGFyZW50ID0gZGlybmFtZShkaXIpO1xuXHRcdGlmIChwYXJlbnQgPT09IGRpcikgYnJlYWs7XG5cdFx0ZGlyID0gcGFyZW50O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR2ZXJzaW9uOiBERUZBVUxUX0NSRUFURV9WRVJTSU9OLFxuXHRcdGltYWdlUmVwb3NpdG9yeTogREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0fTtcbn1cblxuY29uc3QgY3JlYXRlTWV0YWRhdGEgPSByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKTtcblxuLyoqIFZlcnNpb24gb2YgQGRlY29oZXJlL2NyZWF0ZSwgdXNlZCB0byBwaW4gc2NhZmZvbGRlZCBAZGVjb2hlcmUvKiBkZXBlbmRlbmNpZXMuICovXG5leHBvcnQgY29uc3QgQ1JFQVRFX1ZFUlNJT04gPSBjcmVhdGVNZXRhZGF0YS52ZXJzaW9uO1xuXG4vKiogQ2Fub25pY2FsIHB1Ymxpc2hlZCBEb2NrZXIgcmVwb3NpdG9yeSBmb3IgdGhlIEBkZWNvaGVyZS9jcmVhdGUgYnVpbGRlciBpbWFnZS4gKi9cbmV4cG9ydCBjb25zdCBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSA9IGNyZWF0ZU1ldGFkYXRhLmltYWdlUmVwb3NpdG9yeTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVSZXF1aXJlIiwiZGlybmFtZSIsImpvaW4iLCJmaWxlVVJMVG9QYXRoIiwiX3JlcXVpcmUiLCJ1cmwiLCJERUZBVUxUX0NSRUFURV9WRVJTSU9OIiwiREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsInJlc29sdmVDcmVhdGVNZXRhZGF0YSIsImRpciIsImkiLCJwa2ciLCJuYW1lIiwidmVyc2lvbiIsImltYWdlUmVwb3NpdG9yeSIsImRlY29oZXJlIiwiZG9ja2VySW1hZ2VSZXBvc2l0b3J5IiwicGFyZW50IiwiY3JlYXRlTWV0YWRhdGEiLCJDUkVBVEVfVkVSU0lPTiIsIkNSRUFURV9JTUFHRV9SRVBPU0lUT1JZIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQVEsY0FBYztBQUM1QyxTQUFTQyxPQUFPLEVBQUVDLElBQUksUUFBUSxZQUFZO0FBQzFDLFNBQVNDLGFBQWEsUUFBUSxXQUFXO0FBRXpDLE1BQU1DLFdBQVdKLGNBQWMsWUFBWUssR0FBRztBQVU5QyxNQUFNQyx5QkFBeUI7QUFDL0IsTUFBTUMsa0NBQWtDO0FBRXhDLFNBQVNDO0lBQ1IsSUFBSUMsTUFBTVIsUUFBUUUsY0FBYyxZQUFZRSxHQUFHO0lBQy9DLElBQUssSUFBSUssSUFBSSxHQUFHQSxJQUFJLEdBQUdBLElBQUs7UUFDM0IsSUFBSTtZQUNILE1BQU1DLE1BQU1QLFNBQVNGLEtBQUtPLEtBQUs7WUFDL0IsSUFBSUUsSUFBSUMsSUFBSSxLQUFLLG9CQUFvQjtnQkFDcEMsT0FBTztvQkFDTkMsU0FBU0YsSUFBSUUsT0FBTyxJQUFJUDtvQkFDeEJRLGlCQUNDSCxJQUFJSSxRQUFRLEVBQUVDLHlCQUF5QlQ7Z0JBQ3pDO1lBQ0Q7UUFDRCxFQUFFLE9BQU0sQ0FBQztRQUNULE1BQU1VLFNBQVNoQixRQUFRUTtRQUN2QixJQUFJUSxXQUFXUixLQUFLO1FBQ3BCQSxNQUFNUTtJQUNQO0lBRUEsT0FBTztRQUNOSixTQUFTUDtRQUNUUSxpQkFBaUJQO0lBQ2xCO0FBQ0Q7QUFFQSxNQUFNVyxpQkFBaUJWO0FBRXZCLGtGQUFrRixHQUNsRixPQUFPLE1BQU1XLGlCQUFpQkQsZUFBZUwsT0FBTyxDQUFDO0FBRXJELGtGQUFrRixHQUNsRixPQUFPLE1BQU1PLDBCQUEwQkYsZUFBZUosZUFBZSxDQUFDIn0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { DEFAULT_WEBAPI_NAME } from "./const.js";
|
|
4
|
-
/** Lowercase npm-safe directory slug: `billing`, `admin-api`. */ export const API_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
5
|
-
export class CreateCliError extends Error {
|
|
6
|
-
constructor(message){
|
|
7
|
-
super(message);
|
|
8
|
-
this.name = "CreateCliError";
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export function assertValidApiName(name) {
|
|
12
|
-
if (!API_NAME_PATTERN.test(name)) {
|
|
13
|
-
throw new CreateCliError(`Invalid API name "${name}". Use a lowercase slug starting with a letter, then letters, digits, or hyphens (e.g. billing).`);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/** Default `["api"]` when the caller omitted `--name`. Rejects duplicates and invalid slugs. */ export function parseApiNames(raw) {
|
|
17
|
-
const names = raw != null && raw.length > 0 ? [
|
|
18
|
-
...raw
|
|
19
|
-
] : [
|
|
20
|
-
DEFAULT_WEBAPI_NAME
|
|
21
|
-
];
|
|
22
|
-
const seen = new Set();
|
|
23
|
-
for (const name of names){
|
|
24
|
-
assertValidApiName(name);
|
|
25
|
-
if (seen.has(name)) {
|
|
26
|
-
throw new CreateCliError(`Duplicate API name "${name}".`);
|
|
27
|
-
}
|
|
28
|
-
seen.add(name);
|
|
29
|
-
}
|
|
30
|
-
return names;
|
|
31
|
-
}
|
|
32
|
-
export function isDecohereWorkspace(dir) {
|
|
33
|
-
try {
|
|
34
|
-
const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
|
|
35
|
-
const build = pkg.scripts?.build;
|
|
36
|
-
return typeof build === "string" && build.includes("forge");
|
|
37
|
-
} catch {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/** Directory names under `projects/` that already have a `package.json`. */ export function listExistingApiNames(dir) {
|
|
42
|
-
const projectsDir = join(dir, "projects");
|
|
43
|
-
try {
|
|
44
|
-
return readdirSync(projectsDir, {
|
|
45
|
-
withFileTypes: true
|
|
46
|
-
}).filter((entry)=>entry.isDirectory() && existsSync(join(projectsDir, entry.name, "package.json"))).map((entry)=>entry.name).sort();
|
|
47
|
-
} catch {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/** `billing` → `BILLING`, `admin-api` → `ADMIN_API` — prefix for `{PREFIX}_DB_HOST`. */ export function apiEnvPrefix(apiName) {
|
|
52
|
-
return apiName.replace(/-/g, "_").toUpperCase();
|
|
53
|
-
}
|
|
54
|
-
export function apiNameFromProjectDir(dir) {
|
|
55
|
-
const slash = dir.lastIndexOf("/");
|
|
56
|
-
return slash >= 0 ? dir.slice(slash + 1) : dir;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2FwaS1uYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERFRkFVTFRfV0VCQVBJX05BTUUgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuXG4vKiogTG93ZXJjYXNlIG5wbS1zYWZlIGRpcmVjdG9yeSBzbHVnOiBgYmlsbGluZ2AsIGBhZG1pbi1hcGlgLiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9OQU1FX1BBVFRFUk4gPSAvXlthLXpdW2EtejAtOS1dKiQvO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ2xpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkNyZWF0ZUNsaUVycm9yXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkQXBpTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0aWYgKCFBUElfTkFNRV9QQVRURVJOLnRlc3QobmFtZSkpIHtcblx0XHR0aHJvdyBuZXcgQ3JlYXRlQ2xpRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBBUEkgbmFtZSBcIiR7bmFtZX1cIi4gVXNlIGEgbG93ZXJjYXNlIHNsdWcgc3RhcnRpbmcgd2l0aCBhIGxldHRlciwgdGhlbiBsZXR0ZXJzLCBkaWdpdHMsIG9yIGh5cGhlbnMgKGUuZy4gYmlsbGluZykuYCxcblx0XHQpO1xuXHR9XG59XG5cbi8qKiBEZWZhdWx0IGBbXCJhcGlcIl1gIHdoZW4gdGhlIGNhbGxlciBvbWl0dGVkIGAtLW5hbWVgLiBSZWplY3RzIGR1cGxpY2F0ZXMgYW5kIGludmFsaWQgc2x1Z3MuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcGlOYW1lcyhyYXc6IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYW1lcyA9IHJhdyAhPSBudWxsICYmIHJhdy5sZW5ndGggPiAwID8gWy4uLnJhd10gOiBbREVGQVVMVF9XRUJBUElfTkFNRV07XG5cdGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Zm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG5cdFx0YXNzZXJ0VmFsaWRBcGlOYW1lKG5hbWUpO1xuXHRcdGlmIChzZWVuLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IENyZWF0ZUNsaUVycm9yKGBEdXBsaWNhdGUgQVBJIG5hbWUgXCIke25hbWV9XCIuYCk7XG5cdFx0fVxuXHRcdHNlZW4uYWRkKG5hbWUpO1xuXHR9XG5cdHJldHVybiBuYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVjb2hlcmVXb3Jrc3BhY2UoZGlyOiBzdHJpbmcpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmOFwiKSkgYXMge1xuXHRcdFx0c2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fTtcblx0XHRjb25zdCBidWlsZCA9IHBrZy5zY3JpcHRzPy5idWlsZDtcblx0XHRyZXR1cm4gdHlwZW9mIGJ1aWxkID09PSBcInN0cmluZ1wiICYmIGJ1aWxkLmluY2x1ZGVzKFwiZm9yZ2VcIik7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKiogRGlyZWN0b3J5IG5hbWVzIHVuZGVyIGBwcm9qZWN0cy9gIHRoYXQgYWxyZWFkeSBoYXZlIGEgYHBhY2thZ2UuanNvbmAuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEV4aXN0aW5nQXBpTmFtZXMoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IHByb2plY3RzRGlyID0gam9pbihkaXIsIFwicHJvamVjdHNcIik7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHJlYWRkaXJTeW5jKHByb2plY3RzRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcblx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdChlbnRyeSkgPT5cblx0XHRcdFx0XHRlbnRyeS5pc0RpcmVjdG9yeSgpICYmIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0c0RpciwgZW50cnkubmFtZSwgXCJwYWNrYWdlLmpzb25cIikpLFxuXHRcdFx0KVxuXHRcdFx0Lm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG5cdFx0XHQuc29ydCgpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuLyoqIGBiaWxsaW5nYCDihpIgYEJJTExJTkdgLCBgYWRtaW4tYXBpYCDihpIgYEFETUlOX0FQSWAg4oCUIHByZWZpeCBmb3IgYHtQUkVGSVh9X0RCX0hPU1RgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaUVudlByZWZpeChhcGlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYXBpTmFtZS5yZXBsYWNlKC8tL2csIFwiX1wiKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpTmFtZUZyb21Qcm9qZWN0RGlyKGRpcjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgc2xhc2ggPSBkaXIubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRyZXR1cm4gc2xhc2ggPj0gMCA/IGRpci5zbGljZShzbGFzaCArIDEpIDogZGlyO1xufVxuIl0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkZGlyU3luYyIsInJlYWRGaWxlU3luYyIsImpvaW4iLCJERUZBVUxUX1dFQkFQSV9OQU1FIiwiQVBJX05BTUVfUEFUVEVSTiIsIkNyZWF0ZUNsaUVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsImFzc2VydFZhbGlkQXBpTmFtZSIsInRlc3QiLCJwYXJzZUFwaU5hbWVzIiwicmF3IiwibmFtZXMiLCJsZW5ndGgiLCJzZWVuIiwiU2V0IiwiaGFzIiwiYWRkIiwiaXNEZWNvaGVyZVdvcmtzcGFjZSIsImRpciIsInBrZyIsIkpTT04iLCJwYXJzZSIsImJ1aWxkIiwic2NyaXB0cyIsImluY2x1ZGVzIiwibGlzdEV4aXN0aW5nQXBpTmFtZXMiLCJwcm9qZWN0c0RpciIsIndpdGhGaWxlVHlwZXMiLCJmaWx0ZXIiLCJlbnRyeSIsImlzRGlyZWN0b3J5IiwibWFwIiwic29ydCIsImFwaUVudlByZWZpeCIsImFwaU5hbWUiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJhcGlOYW1lRnJvbVByb2plY3REaXIiLCJzbGFzaCIsImxhc3RJbmRleE9mIiwic2xpY2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLFFBQVEsVUFBVTtBQUNoRSxTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTQyxtQkFBbUIsUUFBUSxhQUFhO0FBRWpELCtEQUErRCxHQUMvRCxPQUFPLE1BQU1DLG1CQUFtQixvQkFBb0I7QUFFcEQsT0FBTyxNQUFNQyx1QkFBdUJDO0lBQ25DLFlBQW1CQyxPQUFlLENBQUU7UUFDbkMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2I7QUFDRDtBQUVBLE9BQU8sU0FBU0MsbUJBQW1CRCxJQUFZO0lBQzlDLElBQUksQ0FBQ0osaUJBQWlCTSxJQUFJLENBQUNGLE9BQU87UUFDakMsTUFBTSxJQUFJSCxlQUNULENBQUMsa0JBQWtCLEVBQUVHLEtBQUssZ0dBQWdHLENBQUM7SUFFN0g7QUFDRDtBQUVBLDhGQUE4RixHQUM5RixPQUFPLFNBQVNHLGNBQWNDLEdBQWtDO0lBQy9ELE1BQU1DLFFBQVFELE9BQU8sUUFBUUEsSUFBSUUsTUFBTSxHQUFHLElBQUk7V0FBSUY7S0FBSSxHQUFHO1FBQUNUO0tBQW9CO0lBQzlFLE1BQU1ZLE9BQU8sSUFBSUM7SUFDakIsS0FBSyxNQUFNUixRQUFRSyxNQUFPO1FBQ3pCSixtQkFBbUJEO1FBQ25CLElBQUlPLEtBQUtFLEdBQUcsQ0FBQ1QsT0FBTztZQUNuQixNQUFNLElBQUlILGVBQWUsQ0FBQyxvQkFBb0IsRUFBRUcsS0FBSyxFQUFFLENBQUM7UUFDekQ7UUFDQU8sS0FBS0csR0FBRyxDQUFDVjtJQUNWO0lBQ0EsT0FBT0s7QUFDUjtBQUVBLE9BQU8sU0FBU00sb0JBQW9CQyxHQUFXO0lBQzlDLElBQUk7UUFDSCxNQUFNQyxNQUFNQyxLQUFLQyxLQUFLLENBQUN0QixhQUFhQyxLQUFLa0IsS0FBSyxpQkFBaUI7UUFHL0QsTUFBTUksUUFBUUgsSUFBSUksT0FBTyxFQUFFRDtRQUMzQixPQUFPLE9BQU9BLFVBQVUsWUFBWUEsTUFBTUUsUUFBUSxDQUFDO0lBQ3BELEVBQUUsT0FBTTtRQUNQLE9BQU87SUFDUjtBQUNEO0FBRUEsMEVBQTBFLEdBQzFFLE9BQU8sU0FBU0MscUJBQXFCUCxHQUFXO0lBQy9DLE1BQU1RLGNBQWMxQixLQUFLa0IsS0FBSztJQUM5QixJQUFJO1FBQ0gsT0FBT3BCLFlBQVk0QixhQUFhO1lBQUVDLGVBQWU7UUFBSyxHQUNwREMsTUFBTSxDQUNOLENBQUNDLFFBQ0FBLE1BQU1DLFdBQVcsTUFBTWpDLFdBQVdHLEtBQUswQixhQUFhRyxNQUFNdkIsSUFBSSxFQUFFLGtCQUVqRXlCLEdBQUcsQ0FBQyxDQUFDRixRQUFVQSxNQUFNdkIsSUFBSSxFQUN6QjBCLElBQUk7SUFDUCxFQUFFLE9BQU07UUFDUCxPQUFPLEVBQUU7SUFDVjtBQUNEO0FBRUEsc0ZBQXNGLEdBQ3RGLE9BQU8sU0FBU0MsYUFBYUMsT0FBZTtJQUMzQyxPQUFPQSxRQUFRQyxPQUFPLENBQUMsTUFBTSxLQUFLQyxXQUFXO0FBQzlDO0FBRUEsT0FBTyxTQUFTQyxzQkFBc0JuQixHQUFXO0lBQ2hELE1BQU1vQixRQUFRcEIsSUFBSXFCLFdBQVcsQ0FBQztJQUM5QixPQUFPRCxTQUFTLElBQUlwQixJQUFJc0IsS0FBSyxDQUFDRixRQUFRLEtBQUtwQjtBQUM1QyJ9
|