@decohere/create 0.0.1-dev.21 → 0.0.1-dev.22
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 +12 -4
- package/commonjs/src/models/docker-image.model.js +212 -0
- package/commonjs/src/runner.js +26 -5
- package/commonjs/src/webapi/create-api.js +3 -3
- package/commonjs/src/webapi/features/finalize.feature.js +10 -3
- package/commonjs/src/webapi/models/webapi-image.model.js +22 -0
- package/es6/src/cli.js +12 -4
- package/es6/src/models/docker-image.model.js +176 -0
- package/es6/src/runner.js +26 -5
- package/es6/src/webapi/create-api.js +3 -3
- package/es6/src/webapi/features/finalize.feature.js +10 -3
- package/es6/src/webapi/models/webapi-image.model.js +12 -0
- package/package.json +2 -2
- package/types/src/models/docker-image.model.d.ts +56 -0
- package/types/src/runner.d.ts +2 -3
- package/types/src/webapi/create-api.d.ts +3 -1
- package/types/src/webapi/models/webapi-image.model.d.ts +5 -0
- package/commonjs/src/models/container-image.model.js +0 -88
- package/es6/src/models/container-image.model.js +0 -84
- package/types/src/models/container-image.model.d.ts +0 -15
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { WELL_KNOWN_FILES } from "./const.js";
|
|
2
|
+
export class DockerStep {
|
|
3
|
+
key;
|
|
4
|
+
content;
|
|
5
|
+
order;
|
|
6
|
+
constructor(key, content, order = 0){
|
|
7
|
+
this.key = key;
|
|
8
|
+
this.content = content;
|
|
9
|
+
this.order = order;
|
|
10
|
+
}
|
|
11
|
+
static run(key, command, order = 0) {
|
|
12
|
+
return new DockerStep(key, `RUN ${command}`, order);
|
|
13
|
+
}
|
|
14
|
+
static raw(key, content, order = 0) {
|
|
15
|
+
return new DockerStep(key, content, order);
|
|
16
|
+
}
|
|
17
|
+
static entrypoint(key, value, order = 0) {
|
|
18
|
+
const content = typeof value === "string" ? `ENTRYPOINT ${value}` : `ENTRYPOINT ${JSON.stringify(value)}`;
|
|
19
|
+
return new DockerStep(key, content, order);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const StepOrder = {
|
|
23
|
+
base: 1_000,
|
|
24
|
+
features: 5_000,
|
|
25
|
+
user: 9_000,
|
|
26
|
+
entrypoint: 10_000
|
|
27
|
+
};
|
|
28
|
+
const VSCODE_BOOTLOADER_FIX_BASH_SNIPPET = `if [[ -n "\${NODE_OPTIONS:-}" && "\${NODE_OPTIONS}" == *"bootloader.js"* ]]; then
|
|
29
|
+
_bootloader_path="$(printf '%s\\n' "$NODE_OPTIONS" | sed -n 's/.*--require[= ]\\([^[:space:]]*bootloader\\.js\\).*/\\1/p')"
|
|
30
|
+
if [[ -n "\${_bootloader_path}" && ! -f "\${_bootloader_path}" ]]; then
|
|
31
|
+
_stable_bootloader="$(find /vscode/vscode-server /home/node/.vscode-server/extensions -name "bootloader.js" -path "*/ms-vscode.js-debug/*" 2>/dev/null | head -1)"
|
|
32
|
+
if [[ -n "\${_stable_bootloader}" ]]; then
|
|
33
|
+
NODE_OPTIONS="\${NODE_OPTIONS//\${_bootloader_path}/\${_stable_bootloader}}"
|
|
34
|
+
else
|
|
35
|
+
NODE_OPTIONS="$(printf '%s\\n' "$NODE_OPTIONS" | sed -E 's#(^| )--require(=| )[[:graph:]]*bootloader\\.js( |$)# #g; s# +# #g; s#^ ##; s# $##')"
|
|
36
|
+
unset VSCODE_INSPECTOR_OPTIONS
|
|
37
|
+
fi
|
|
38
|
+
export NODE_OPTIONS
|
|
39
|
+
if [[ -z "$NODE_OPTIONS" ]]; then
|
|
40
|
+
unset NODE_OPTIONS
|
|
41
|
+
fi
|
|
42
|
+
fi
|
|
43
|
+
unset _bootloader_path _stable_bootloader
|
|
44
|
+
fi`;
|
|
45
|
+
export function withCommandHistory(options) {
|
|
46
|
+
const historyDir = options?.historyDir ?? "/commandhistory";
|
|
47
|
+
const historyFileName = options?.historyFileName ?? ".bash_history";
|
|
48
|
+
const order = options?.order ?? StepOrder.base;
|
|
49
|
+
const historyFile = `${historyDir}/${historyFileName}`;
|
|
50
|
+
return (dockerfile)=>{
|
|
51
|
+
dockerfile.addStep(DockerStep.run("history-dir", `mkdir -p ${historyDir} && touch ${historyFile}`, order)).addStep(DockerStep.raw("history-env", `ENV HISTFILE=${historyFile}`, order + 1));
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function withNodeUser(options) {
|
|
55
|
+
const username = options?.username ?? "node";
|
|
56
|
+
const includeUserInstruction = options?.includeUserInstruction ?? true;
|
|
57
|
+
const order = options?.order ?? StepOrder.features;
|
|
58
|
+
return (dockerfile)=>{
|
|
59
|
+
dockerfile.addStep(DockerStep.raw("arg-username", `ARG USERNAME=${username}`, order));
|
|
60
|
+
if (includeUserInstruction) {
|
|
61
|
+
dockerfile.addStep(DockerStep.raw("user", "USER ${USERNAME}", StepOrder.user));
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function withPnpm(options) {
|
|
66
|
+
const version = options?.version ?? "10";
|
|
67
|
+
const usernameExpr = options?.usernameExpr ?? "${USERNAME}";
|
|
68
|
+
const order = options?.order ?? StepOrder.features + 100;
|
|
69
|
+
return (dockerfile)=>{
|
|
70
|
+
dockerfile.addStep(DockerStep.run("pnpm-install", `npm install --global npm@latest && npm add --global pnpm@${version}`, order)).addStep(DockerStep.run("pnpm-config", `mkdir -p /home/${usernameExpr}/.config/pnpm /home/${usernameExpr}/.pnpm-store && chown -R ${usernameExpr}:${usernameExpr} /home/${usernameExpr}/.config /home/${usernameExpr}/.pnpm-store && printf "store-dir=/home/${usernameExpr}/.pnpm-store\\n" > /home/${usernameExpr}/.config/pnpm/rc`, order + 1));
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function withWorkspaceNodeModulesOwnership(options) {
|
|
74
|
+
const workspaceDir = options?.workspaceDir ?? "/workspace";
|
|
75
|
+
const usernameExpr = options?.usernameExpr ?? "${USERNAME}";
|
|
76
|
+
const order = options?.order ?? StepOrder.features + 200;
|
|
77
|
+
return (dockerfile)=>{
|
|
78
|
+
dockerfile.addStep(DockerStep.raw("workspace-node-modules", `RUN mkdir -p ${workspaceDir}/node_modules && chown ${usernameExpr}:${usernameExpr} ${workspaceDir}/node_modules`, order));
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function withVsCodeJsDebugBootloaderFix(options) {
|
|
82
|
+
const bashrcPath = options?.bashrcPath ?? "/home/${USERNAME}/.bashrc";
|
|
83
|
+
const order = options?.order ?? StepOrder.features + 300;
|
|
84
|
+
return (dockerfile)=>{
|
|
85
|
+
dockerfile.addStep(DockerStep.raw("vscode-bootloader-fix", `RUN cat <<'EOF' >> "${bashrcPath}"\n${VSCODE_BOOTLOADER_FIX_BASH_SNIPPET}\nEOF`, order));
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export class DockerfileModel {
|
|
89
|
+
key = WELL_KNOWN_FILES.DOCKERFILE;
|
|
90
|
+
_steps = new Map();
|
|
91
|
+
_layerWriters = [];
|
|
92
|
+
_fromImage;
|
|
93
|
+
_layerCounter = 0;
|
|
94
|
+
constructor(baseImage){
|
|
95
|
+
this._fromImage = baseImage;
|
|
96
|
+
this.registerBaseLayers();
|
|
97
|
+
}
|
|
98
|
+
from(baseImage) {
|
|
99
|
+
this._fromImage = baseImage;
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
addLayer(layer, order = StepOrder.features) {
|
|
103
|
+
if (typeof layer === "string") {
|
|
104
|
+
const idx = ++this._layerCounter;
|
|
105
|
+
const key = `layer-run-${idx}`;
|
|
106
|
+
this._layerWriters.push((dockerfile)=>{
|
|
107
|
+
dockerfile.addStep(DockerStep.run(key, layer, order + idx));
|
|
108
|
+
});
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
this._layerWriters.push(layer);
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
addStep(step) {
|
|
115
|
+
this._steps.set(step.key, step);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
removeStep(key) {
|
|
119
|
+
this._steps.delete(key);
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
entrypoint(value, order = StepOrder.entrypoint) {
|
|
123
|
+
this.addStep(DockerStep.entrypoint("entrypoint", value, order));
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
addRunStep(cmd) {
|
|
127
|
+
return this.addLayer(cmd);
|
|
128
|
+
}
|
|
129
|
+
build() {
|
|
130
|
+
for (const layerWriter of this._layerWriters){
|
|
131
|
+
layerWriter(this);
|
|
132
|
+
}
|
|
133
|
+
const lines = [
|
|
134
|
+
`FROM ${this._fromImage}`
|
|
135
|
+
];
|
|
136
|
+
const sortedSteps = [
|
|
137
|
+
...this._steps.values()
|
|
138
|
+
].sort((left, right)=>{
|
|
139
|
+
if (left.order !== right.order) {
|
|
140
|
+
return left.order - right.order;
|
|
141
|
+
}
|
|
142
|
+
return left.key.localeCompare(right.key, "en");
|
|
143
|
+
});
|
|
144
|
+
for (const step of sortedSteps){
|
|
145
|
+
lines.push("", step.content);
|
|
146
|
+
}
|
|
147
|
+
return `${lines.join("\n")}\n`;
|
|
148
|
+
}
|
|
149
|
+
registerBaseLayers() {
|
|
150
|
+
// Generic base model intentionally has no default layers.
|
|
151
|
+
}
|
|
152
|
+
files() {
|
|
153
|
+
return [
|
|
154
|
+
{
|
|
155
|
+
filePath: "./Dockerfile",
|
|
156
|
+
content: this.build()
|
|
157
|
+
}
|
|
158
|
+
];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
export class DevContainerImageModel extends DockerfileModel {
|
|
162
|
+
registerBaseLayers() {
|
|
163
|
+
super.registerBaseLayers();
|
|
164
|
+
this.addLayer(withCommandHistory()).addLayer(withVsCodeJsDebugBootloaderFix());
|
|
165
|
+
}
|
|
166
|
+
files() {
|
|
167
|
+
return [
|
|
168
|
+
{
|
|
169
|
+
filePath: ".devcontainer/Dockerfile",
|
|
170
|
+
content: this.build()
|
|
171
|
+
}
|
|
172
|
+
];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIExheWVyV3JpdGVyID0gKGRvY2tlcmZpbGU6IERvY2tlcmZpbGVNb2RlbCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIERvY2tlclN0ZXAge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuXHRcdHB1YmxpYyByZWFkb25seSBjb250ZW50OiBzdHJpbmcsXG5cdFx0cHVibGljIHJlYWRvbmx5IG9yZGVyID0gMCxcblx0KSB7fVxuXG5cdHB1YmxpYyBzdGF0aWMgcnVuKGtleTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGBSVU4gJHtjb21tYW5kfWAsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgcmF3KGtleTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGNvbnRlbnQsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZW50cnlwb2ludChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLCBvcmRlciA9IDApIHtcblx0XHRjb25zdCBjb250ZW50ID1cblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IGBFTlRSWVBPSU5UICR7dmFsdWV9YFxuXHRcdFx0XHQ6IGBFTlRSWVBPSU5UICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG5cdFx0cmV0dXJuIG5ldyBEb2NrZXJTdGVwKGtleSwgY29udGVudCwgb3JkZXIpO1xuXHR9XG59XG5cbmNvbnN0IFN0ZXBPcmRlciA9IHtcblx0YmFzZTogMV8wMDAsXG5cdGZlYXR1cmVzOiA1XzAwMCxcblx0dXNlcjogOV8wMDAsXG5cdGVudHJ5cG9pbnQ6IDEwXzAwMCxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVQgPSBgaWYgW1sgLW4gXCJcXCR7Tk9ERV9PUFRJT05TOi19XCIgJiYgXCJcXCR7Tk9ERV9PUFRJT05TfVwiID09ICpcImJvb3Rsb2FkZXIuanNcIiogXV07IHRoZW5cbiAgICBfYm9vdGxvYWRlcl9wYXRoPVwiJChwcmludGYgJyVzXFxcXG4nIFwiJE5PREVfT1BUSU9OU1wiIHwgc2VkIC1uICdzLy4qLS1yZXF1aXJlWz0gXVxcXFwoW15bOnNwYWNlOl1dKmJvb3Rsb2FkZXJcXFxcLmpzXFxcXCkuKi9cXFxcMS9wJylcIlxuICAgIGlmIFtbIC1uIFwiXFwke19ib290bG9hZGVyX3BhdGh9XCIgJiYgISAtZiBcIlxcJHtfYm9vdGxvYWRlcl9wYXRofVwiIF1dOyB0aGVuXG4gICAgICAgIF9zdGFibGVfYm9vdGxvYWRlcj1cIiQoZmluZCAvdnNjb2RlL3ZzY29kZS1zZXJ2ZXIgL2hvbWUvbm9kZS8udnNjb2RlLXNlcnZlci9leHRlbnNpb25zIC1uYW1lIFwiYm9vdGxvYWRlci5qc1wiIC1wYXRoIFwiKi9tcy12c2NvZGUuanMtZGVidWcvKlwiIDI+L2Rldi9udWxsIHwgaGVhZCAtMSlcIlxuICAgICAgICBpZiBbWyAtbiBcIlxcJHtfc3RhYmxlX2Jvb3Rsb2FkZXJ9XCIgXV07IHRoZW5cbiAgICAgICAgICAgIE5PREVfT1BUSU9OUz1cIlxcJHtOT0RFX09QVElPTlMvL1xcJHtfYm9vdGxvYWRlcl9wYXRofS9cXCR7X3N0YWJsZV9ib290bG9hZGVyfX1cIlxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM9XCIkKHByaW50ZiAnJXNcXFxcbicgXCIkTk9ERV9PUFRJT05TXCIgfCBzZWQgLUUgJ3MjKF58ICktLXJlcXVpcmUoPXwgKVtbOmdyYXBoOl1dKmJvb3Rsb2FkZXJcXFxcLmpzKCB8JCkjICNnOyBzIyAgKyMgI2c7IHMjXiAjIzsgcyMgJCMjJylcIlxuICAgICAgICAgICAgdW5zZXQgVlNDT0RFX0lOU1BFQ1RPUl9PUFRJT05TXG4gICAgICAgIGZpXG4gICAgICAgIGV4cG9ydCBOT0RFX09QVElPTlNcbiAgICAgICAgaWYgW1sgLXogXCIkTk9ERV9PUFRJT05TXCIgXV07IHRoZW5cbiAgICAgICAgICAgIHVuc2V0IE5PREVfT1BUSU9OU1xuICAgICAgICBmaVxuICAgIGZpXG4gICAgdW5zZXQgX2Jvb3Rsb2FkZXJfcGF0aCBfc3RhYmxlX2Jvb3Rsb2FkZXJcbmZpYDtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDb21tYW5kSGlzdG9yeShvcHRpb25zPzoge1xuXHRoaXN0b3J5RGlyPzogc3RyaW5nO1xuXHRoaXN0b3J5RmlsZU5hbWU/OiBzdHJpbmc7XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgaGlzdG9yeURpciA9IG9wdGlvbnM/Lmhpc3RvcnlEaXIgPz8gXCIvY29tbWFuZGhpc3RvcnlcIjtcblx0Y29uc3QgaGlzdG9yeUZpbGVOYW1lID0gb3B0aW9ucz8uaGlzdG9yeUZpbGVOYW1lID8/IFwiLmJhc2hfaGlzdG9yeVwiO1xuXHRjb25zdCBvcmRlciA9IG9wdGlvbnM/Lm9yZGVyID8/IFN0ZXBPcmRlci5iYXNlO1xuXHRjb25zdCBoaXN0b3J5RmlsZSA9IGAke2hpc3RvcnlEaXJ9LyR7aGlzdG9yeUZpbGVOYW1lfWA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFwiaGlzdG9yeS1kaXJcIiwgYG1rZGlyIC1wICR7aGlzdG9yeURpcn0gJiYgdG91Y2ggJHtoaXN0b3J5RmlsZX1gLCBvcmRlciksXG5cdFx0XHQpXG5cdFx0XHQuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcImhpc3RvcnktZW52XCIsIGBFTlYgSElTVEZJTEU9JHtoaXN0b3J5RmlsZX1gLCBvcmRlciArIDEpKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOb2RlVXNlcihvcHRpb25zPzoge1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0aW5jbHVkZVVzZXJJbnN0cnVjdGlvbj86IGJvb2xlYW47XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgdXNlcm5hbWUgPSBvcHRpb25zPy51c2VybmFtZSA/PyBcIm5vZGVcIjtcblx0Y29uc3QgaW5jbHVkZVVzZXJJbnN0cnVjdGlvbiA9IG9wdGlvbnM/LmluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24gPz8gdHJ1ZTtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXM7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucmF3KFwiYXJnLXVzZXJuYW1lXCIsIGBBUkcgVVNFUk5BTUU9JHt1c2VybmFtZX1gLCBvcmRlcikpO1xuXG5cdFx0aWYgKGluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24pIHtcblx0XHRcdGRvY2tlcmZpbGUuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcInVzZXJcIiwgXCJVU0VSICR7VVNFUk5BTUV9XCIsIFN0ZXBPcmRlci51c2VyKSk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBucG0ob3B0aW9ucz86IHtcblx0dmVyc2lvbj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/IFwiMTBcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAxMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1pbnN0YWxsXCIsXG5cdFx0XHRcdFx0YG5wbSBpbnN0YWxsIC0tZ2xvYmFsIG5wbUBsYXRlc3QgJiYgbnBtIGFkZCAtLWdsb2JhbCBwbnBtQCR7dmVyc2lvbn1gLFxuXHRcdFx0XHRcdG9yZGVyLFxuXHRcdFx0XHQpLFxuXHRcdFx0KVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1jb25maWdcIixcblx0XHRcdFx0XHRgbWtkaXIgLXAgL2hvbWUvJHt1c2VybmFtZUV4cHJ9Ly5jb25maWcvcG5wbSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgY2hvd24gLVIgJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZyAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgcHJpbnRmIFwic3RvcmUtZGlyPS9ob21lLyR7dXNlcm5hbWVFeHByfS8ucG5wbS1zdG9yZVxcXFxuXCIgPiAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZy9wbnBtL3JjYCxcblx0XHRcdFx0XHRvcmRlciArIDEsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwKG9wdGlvbnM/OiB7XG5cdHdvcmtzcGFjZURpcj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHdvcmtzcGFjZURpciA9IG9wdGlvbnM/LndvcmtzcGFjZURpciA/PyBcIi93b3Jrc3BhY2VcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAyMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwid29ya3NwYWNlLW5vZGUtbW9kdWxlc1wiLFxuXHRcdFx0XHRgUlVOIG1rZGlyIC1wICR7d29ya3NwYWNlRGlyfS9ub2RlX21vZHVsZXMgJiYgY2hvd24gJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAke3dvcmtzcGFjZURpcn0vbm9kZV9tb2R1bGVzYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgob3B0aW9ucz86IHtcblx0YmFzaHJjUGF0aD86IHN0cmluZztcblx0b3JkZXI/OiBudW1iZXI7XG59KTogTGF5ZXJXcml0ZXIge1xuXHRjb25zdCBiYXNocmNQYXRoID0gb3B0aW9ucz8uYmFzaHJjUGF0aCA/PyBcIi9ob21lLyR7VVNFUk5BTUV9Ly5iYXNocmNcIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAzMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwidnNjb2RlLWJvb3Rsb2FkZXItZml4XCIsXG5cdFx0XHRcdGBSVU4gY2F0IDw8J0VPRicgPj4gXCIke2Jhc2hyY1BhdGh9XCJcXG4ke1ZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVR9XFxuRU9GYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJmaWxlTW9kZWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuRE9DS0VSRklMRTtcblx0cHJpdmF0ZSByZWFkb25seSBfc3RlcHMgPSBuZXcgTWFwPHN0cmluZywgRG9ja2VyU3RlcD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfbGF5ZXJXcml0ZXJzOiBMYXllcldyaXRlcltdID0gW107XG5cdHByaXZhdGUgX2Zyb21JbWFnZTogc3RyaW5nO1xuXHRwcml2YXRlIF9sYXllckNvdW50ZXIgPSAwO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2U6IHN0cmluZykge1xuXHRcdHRoaXMuX2Zyb21JbWFnZSA9IGJhc2VJbWFnZTtcblx0XHR0aGlzLnJlZ2lzdGVyQmFzZUxheWVycygpO1xuXHR9XG5cblx0cHVibGljIGZyb20oYmFzZUltYWdlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9mcm9tSW1hZ2UgPSBiYXNlSW1hZ2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkTGF5ZXIobGF5ZXI6IExheWVyV3JpdGVyIHwgc3RyaW5nLCBvcmRlciA9IFN0ZXBPcmRlci5mZWF0dXJlcyk6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgbGF5ZXIgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGNvbnN0IGlkeCA9ICsrdGhpcy5fbGF5ZXJDb3VudGVyO1xuXHRcdFx0Y29uc3Qga2V5ID0gYGxheWVyLXJ1bi0ke2lkeH1gO1xuXHRcdFx0dGhpcy5fbGF5ZXJXcml0ZXJzLnB1c2goKGRvY2tlcmZpbGUpID0+IHtcblx0XHRcdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucnVuKGtleSwgbGF5ZXIsIG9yZGVyICsgaWR4KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuX2xheWVyV3JpdGVycy5wdXNoKGxheWVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRTdGVwKHN0ZXA6IERvY2tlclN0ZXApOiB0aGlzIHtcblx0XHR0aGlzLl9zdGVwcy5zZXQoc3RlcC5rZXksIHN0ZXApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbW92ZVN0ZXAoa2V5OiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9zdGVwcy5kZWxldGUoa2V5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBlbnRyeXBvaW50KHZhbHVlOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSwgb3JkZXIgPSBTdGVwT3JkZXIuZW50cnlwb2ludCk6IHRoaXMge1xuXHRcdHRoaXMuYWRkU3RlcChEb2NrZXJTdGVwLmVudHJ5cG9pbnQoXCJlbnRyeXBvaW50XCIsIHZhbHVlLCBvcmRlcikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFJ1blN0ZXAoY21kOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihjbWQpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IHN0cmluZyB7XG5cdFx0Zm9yIChjb25zdCBsYXllcldyaXRlciBvZiB0aGlzLl9sYXllcldyaXRlcnMpIHtcblx0XHRcdGxheWVyV3JpdGVyKHRoaXMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpbmVzID0gW2BGUk9NICR7dGhpcy5fZnJvbUltYWdlfWBdO1xuXHRcdGNvbnN0IHNvcnRlZFN0ZXBzID0gWy4uLnRoaXMuX3N0ZXBzLnZhbHVlcygpXS5zb3J0KChsZWZ0LCByaWdodCkgPT4ge1xuXHRcdFx0aWYgKGxlZnQub3JkZXIgIT09IHJpZ2h0Lm9yZGVyKSB7XG5cdFx0XHRcdHJldHVybiBsZWZ0Lm9yZGVyIC0gcmlnaHQub3JkZXI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGVmdC5rZXkubG9jYWxlQ29tcGFyZShyaWdodC5rZXksIFwiZW5cIik7XG5cdFx0fSk7XG5cblx0XHRmb3IgKGNvbnN0IHN0ZXAgb2Ygc29ydGVkU3RlcHMpIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIiwgc3RlcC5jb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7bGluZXMuam9pbihcIlxcblwiKX1cXG5gO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlZ2lzdGVyQmFzZUxheWVycygpOiB2b2lkIHtcblx0XHQvLyBHZW5lcmljIGJhc2UgbW9kZWwgaW50ZW50aW9uYWxseSBoYXMgbm8gZGVmYXVsdCBsYXllcnMuXG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXZDb250YWluZXJJbWFnZU1vZGVsIGV4dGVuZHMgRG9ja2VyZmlsZU1vZGVsIHtcblx0cHJvdGVjdGVkIG92ZXJyaWRlIHJlZ2lzdGVyQmFzZUxheWVycygpOiB2b2lkIHtcblx0XHRzdXBlci5yZWdpc3RlckJhc2VMYXllcnMoKTtcblx0XHR0aGlzLmFkZExheWVyKHdpdGhDb21tYW5kSGlzdG9yeSgpKS5hZGRMYXllcih3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgoKSk7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiV0VMTF9LTk9XTl9GSUxFUyIsIkRvY2tlclN0ZXAiLCJrZXkiLCJjb250ZW50Iiwib3JkZXIiLCJydW4iLCJjb21tYW5kIiwicmF3IiwiZW50cnlwb2ludCIsInZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0ZXBPcmRlciIsImJhc2UiLCJmZWF0dXJlcyIsInVzZXIiLCJWU0NPREVfQk9PVExPQURFUl9GSVhfQkFTSF9TTklQUEVUIiwid2l0aENvbW1hbmRIaXN0b3J5Iiwib3B0aW9ucyIsImhpc3RvcnlEaXIiLCJoaXN0b3J5RmlsZU5hbWUiLCJoaXN0b3J5RmlsZSIsImRvY2tlcmZpbGUiLCJhZGRTdGVwIiwid2l0aE5vZGVVc2VyIiwidXNlcm5hbWUiLCJpbmNsdWRlVXNlckluc3RydWN0aW9uIiwid2l0aFBucG0iLCJ2ZXJzaW9uIiwidXNlcm5hbWVFeHByIiwid2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwIiwid29ya3NwYWNlRGlyIiwid2l0aFZzQ29kZUpzRGVidWdCb290bG9hZGVyRml4IiwiYmFzaHJjUGF0aCIsIkRvY2tlcmZpbGVNb2RlbCIsIkRPQ0tFUkZJTEUiLCJfc3RlcHMiLCJNYXAiLCJfbGF5ZXJXcml0ZXJzIiwiX2Zyb21JbWFnZSIsIl9sYXllckNvdW50ZXIiLCJiYXNlSW1hZ2UiLCJyZWdpc3RlckJhc2VMYXllcnMiLCJmcm9tIiwiYWRkTGF5ZXIiLCJsYXllciIsImlkeCIsInB1c2giLCJzdGVwIiwic2V0IiwicmVtb3ZlU3RlcCIsImRlbGV0ZSIsImFkZFJ1blN0ZXAiLCJjbWQiLCJidWlsZCIsImxheWVyV3JpdGVyIiwibGluZXMiLCJzb3J0ZWRTdGVwcyIsInZhbHVlcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwiam9p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
|
package/es6/src/runner.js
CHANGED
|
@@ -30,8 +30,27 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
|
|
|
30
30
|
}
|
|
31
31
|
const volumes = [
|
|
32
32
|
"-v",
|
|
33
|
-
`${targetDir}:/workspace
|
|
33
|
+
`${targetDir}:/workspace`,
|
|
34
|
+
"-v",
|
|
35
|
+
"/npm-cache"
|
|
34
36
|
];
|
|
37
|
+
const commandArgs = [
|
|
38
|
+
"webapi",
|
|
39
|
+
"-d",
|
|
40
|
+
"."
|
|
41
|
+
];
|
|
42
|
+
if (opts.databaseProvider != null) {
|
|
43
|
+
commandArgs.push("--database", opts.databaseProvider);
|
|
44
|
+
}
|
|
45
|
+
if (opts.authProvider != null) {
|
|
46
|
+
commandArgs.push("--auth", opts.authProvider);
|
|
47
|
+
}
|
|
48
|
+
if (opts.postmanProvider != null) {
|
|
49
|
+
commandArgs.push("--postman", opts.postmanProvider);
|
|
50
|
+
}
|
|
51
|
+
if (opts.installDependencies != null) {
|
|
52
|
+
commandArgs.push("--install", opts.installDependencies);
|
|
53
|
+
}
|
|
35
54
|
console.log(" Running scaffolding in a sandboxed container...\n");
|
|
36
55
|
const result = spawnSync("docker", [
|
|
37
56
|
"run",
|
|
@@ -40,16 +59,18 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
|
|
|
40
59
|
...volumes,
|
|
41
60
|
"-e",
|
|
42
61
|
"DECOHERE_BUILDER=1",
|
|
62
|
+
"-e",
|
|
63
|
+
"NPM_CONFIG_CACHE=/npm-cache",
|
|
64
|
+
"-e",
|
|
65
|
+
"NPM_CONFIG_PREFER_OFFLINE=true",
|
|
43
66
|
"-w",
|
|
44
67
|
"/workspace",
|
|
45
68
|
BUILDER_IMAGE,
|
|
46
|
-
|
|
47
|
-
"-d",
|
|
48
|
-
"."
|
|
69
|
+
...commandArgs
|
|
49
70
|
], {
|
|
50
71
|
stdio: "inherit"
|
|
51
72
|
});
|
|
52
73
|
process.exit(result.status ?? 0);
|
|
53
74
|
}
|
|
54
75
|
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IEJVSUxERVJfSU1BR0UgPSBgZ2hjci5pby9kZWNvaGVyZS9zY2FmZm9sZDoke0NSRUFURV9WRVJTSU9OfWA7XG5cbi8qKlxuICogUnVuIHRoZSBzY2FmZm9sZCBpbnNpZGUgYSBwcmUtYnVpbHQgRG9ja2VyIGJ1aWxkZXIgaW1hZ2UuXG4gKlxuICogQ2FsbGVkIHdoZW4gYERFQ09IRVJFX0JVSUxERVJgIGlzIG5vdCBzZXQg4oCUIGkuZS4gdGhlIENMSSBpcyBydW5uaW5nIG9uIHRoZVxuICogaG9zdCwgb3V0c2lkZSB0aGUgY29udGFpbmVyLiBNb3VudHMgdGhlIHRhcmdldCBkaXJlY3RvcnkgYXMgYC93b3Jrc3BhY2VgIHNvXG4gKiB0aGUgc2NhZmZvbGRlZCBmaWxlcyBhcmUgd3JpdHRlbiBiYWNrIHRvIHRoZSBob3N0IGZpbGVzeXN0ZW0uXG4gKlxuICogSWYgYH4vLmNvbmZpZy9hdXRoMGAgZXhpc3RzIG9uIHRoZSBob3N0IHRoZSBkaXJlY3RvcnkgaXMgYWxzbyBtb3VudGVkIHNvXG4gKiB0aGUgYXV0aDAgQ0xJIGluc2lkZSB0aGUgY29udGFpbmVyIGNhbiByZXVzZSBleGlzdGluZyBjcmVkZW50aWFscyBzaWxlbnRseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluQnVpbGRlcihvcHRzOiBBcGlPcHRpb25zKTogbmV2ZXIge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKG9wdHMuZCA/PyBcIi5cIik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdC8vIEVuc3VyZSBEb2NrZXIgaXMgYXZhaWxhYmxlLlxuXHR0cnkge1xuXHRcdGV4ZWNGaWxlU3luYyhcImRvY2tlclwiLCBbXCJpbmZvXCJdLCB7IHN0ZGlvOiBcInBpcGVcIiB9KTtcblx0fSBjYXRjaCB7XG5cdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFwiXFxuICBEb2NrZXIgaXMgcmVxdWlyZWQgdG8gc2NhZmZvbGQgYSBEZWNvaGVyZSBwcm9qZWN0LlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGwgRG9ja2VyIERlc2t0b3A6IGh0dHBzOi8vd3d3LmRvY2tlci5jb20vcHJvZHVjdHMvZG9ja2VyLWRlc2t0b3BcXG5cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdGNvbnN0IHZvbHVtZXM6IHN0cmluZ1tdID0gW1wiLXZcIiwgYCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCwgXCItdlwiLCBcIi9ucG0tY2FjaGVcIl07XG5cblx0Y29uc3QgY29tbWFuZEFyZ3M6IHN0cmluZ1tdID0gW1wid2ViYXBpXCIsIFwiLWRcIiwgXCIuXCJdO1xuXHRpZiAob3B0cy5kYXRhYmFzZVByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1kYXRhYmFzZVwiLCBvcHRzLmRhdGFiYXNlUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLmF1dGhQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tYXV0aFwiLCBvcHRzLmF1dGhQcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1wb3N0bWFuXCIsIG9wdHMucG9zdG1hblByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5pbnN0YWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1pbnN0YWxsXCIsIG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIiAgUnVubmluZyBzY2FmZm9sZGluZyBpbiBhIHNhbmRib3hlZCBjb250YWluZXIuLi5cXG5cIik7XG5cblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKFxuXHRcdFwiZG9ja2VyXCIsXG5cdFx0W1xuXHRcdFx0XCJydW5cIixcblx0XHRcdFwiLS1ybVwiLFxuXHRcdFx0XCItaXRcIixcblx0XHRcdC4uLnZvbHVtZXMsXG5cdFx0XHRcIi1lXCIsXG5cdFx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdFx0XCItZVwiLFxuXHRcdFx0XCJOUE1fQ09ORklHX0NBQ0hFPS9ucG0tY2FjaGVcIixcblx0XHRcdFwiLWVcIixcblx0XHRcdFwiTlBNX0NPTkZJR19QUkVGRVJfT0ZGTElORT10cnVlXCIsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwibWtkaXJTeW5jIiwicmVzb2x2ZSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicmVjdXJzaXZlIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInZvbHVtZXMiLCJjb21tYW5kQXJncyIsImRhdGFiYXNlUHJvdmlkZXIiLCJwdXNoIiwiYXV0aFByb3ZpZGVyIiwicG9zdG1hblByb3ZpZGVyIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsImxvZyIsInJlc3VsdCIsInN0YXR1cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxFQUFFQyxTQUFTLFFBQVEscUJBQXFCO0FBQzdELFNBQVNDLFNBQVMsUUFBUSxVQUFVO0FBQ3BDLFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRzlDLE1BQU1DLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFRCxnQkFBZ0I7QUFFbkU7Ozs7Ozs7OztDQVNDLEdBQ0QsT0FBTyxTQUFTRSxhQUFhQyxJQUFnQjtJQUM1QyxNQUFNQyxZQUFZTCxRQUFRSSxLQUFLRSxDQUFDLElBQUk7SUFDcENQLFVBQVVNLFdBQVc7UUFBRUUsV0FBVztJQUFLO0lBRXZDLDhCQUE4QjtJQUM5QixJQUFJO1FBQ0hWLGFBQWEsVUFBVTtZQUFDO1NBQU8sRUFBRTtZQUFFVyxPQUFPO1FBQU87SUFDbEQsRUFBRSxPQUFNO1FBQ1BDLFFBQVFDLEtBQUssQ0FDWiw2REFDQztRQUVGQyxRQUFRQyxJQUFJLENBQUM7SUFDZDtJQUVBLE1BQU1DLFVBQW9CO1FBQUM7UUFBTSxHQUFHUixVQUFVLFdBQVcsQ0FBQztRQUFFO1FBQU07S0FBYTtJQUUvRSxNQUFNUyxjQUF3QjtRQUFDO1FBQVU7UUFBTTtLQUFJO0lBQ25ELElBQUlWLEtBQUtXLGdCQUFnQixJQUFJLE1BQU07UUFDbENELFlBQVlFLElBQUksQ0FBQyxjQUFjWixLQUFLVyxnQkFBZ0I7SUFDckQ7SUFDQSxJQUFJWCxLQUFLYSxZQUFZLElBQUksTUFBTTtRQUM5QkgsWUFBWUUsSUFBSSxDQUFDLFVBQVVaLEtBQUthLFlBQVk7SUFDN0M7SUFDQSxJQUFJYixLQUFLYyxlQUFlLElBQUksTUFBTTtRQUNqQ0osWUFBWUUsSUFBSSxDQUFDLGFBQWFaLEtBQUtjLGVBQWU7SUFDbkQ7SUFDQSxJQUFJZCxLQUFLZSxtQkFBbUIsSUFBSSxNQUFNO1FBQ3JDTCxZQUFZRSxJQUFJLENBQUMsYUFBYVosS0FBS2UsbUJBQW1CO0lBQ3ZEO0lBRUFWLFFBQVFXLEdBQUcsQ0FBQztJQUVaLE1BQU1DLFNBQVN2QixVQUNkLFVBQ0E7UUFDQztRQUNBO1FBQ0E7V0FDR2U7UUFDSDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0FYO1dBQ0dZO0tBQ0gsRUFDRDtRQUFFTixPQUFPO0lBQVU7SUFHcEJHLFFBQVFDLElBQUksQ0FBQ1MsT0FBT0MsTUFBTSxJQUFJO0FBQy9CIn0=
|
|
@@ -2,7 +2,6 @@ import { resolve } from "node:path";
|
|
|
2
2
|
import { DockerCompose } from "../models/compose.model.js";
|
|
3
3
|
import { ConfigYaml } from "../models/config-yaml.model.js";
|
|
4
4
|
import { WELL_KNOWN_FILES } from "../models/const.js";
|
|
5
|
-
import { DockerfileModel } from "../models/container-image.model.js";
|
|
6
5
|
import { DevContainer } from "../models/dev-container.model.js";
|
|
7
6
|
import { EnvFile } from "../models/env-file.model.js";
|
|
8
7
|
import { Gitignore } from "../models/gitignore.model.js";
|
|
@@ -20,6 +19,7 @@ import { ApiPackageJson } from "./models/api-package-json.model.js";
|
|
|
20
19
|
import { ControllerSourceFile } from "./models/controller-source-file.model.js";
|
|
21
20
|
import { MainSourceFile } from "./models/main-source-file.model.js";
|
|
22
21
|
import { SampleConfigModel, SampleServiceModel } from "./models/sample-files.model.js";
|
|
22
|
+
import { WebapiDevContainer } from "./models/webapi-image.model.js";
|
|
23
23
|
export const WEBAPI_PROJECT_DIR = "projects/api";
|
|
24
24
|
const features = [
|
|
25
25
|
DatabaseFeature,
|
|
@@ -51,7 +51,7 @@ function createWorkspace(targetDir) {
|
|
|
51
51
|
// Workspace-level models (repo root)
|
|
52
52
|
monoRepo.addModel(compose);
|
|
53
53
|
monoRepo.addModel(devContainer);
|
|
54
|
-
monoRepo.addModel(new
|
|
54
|
+
monoRepo.addModel(new WebapiDevContainer());
|
|
55
55
|
monoRepo.addModel(new VSCodeSettings(name));
|
|
56
56
|
monoRepo.addModel(new LaunchJson());
|
|
57
57
|
monoRepo.addModel(new TsConfig());
|
|
@@ -148,4 +148,4 @@ function createWorkspace(targetDir) {
|
|
|
148
148
|
return monoRepo;
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRG9ja2VyZmlsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9jb250YWluZXItaW1hZ2UubW9kZWwuanNcIjtcbmltcG9ydCB7IERldkNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvZGV2LWNvbnRhaW5lci5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRW52RmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGlnbm9yZSB9IGZyb20gXCIuLi9tb2RlbHMvZ2l0aWdub3JlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBMYXVuY2hKc29uIH0gZnJvbSBcIi4uL21vZGVscy9sYXVuY2gtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTW9ub1JlcG9TY2FmZm9sZCwgUHJvamVjdFNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBUc0NvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvdHNjb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZ01vZGVsLCBTYW1wbGVTZXJ2aWNlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2FtcGxlLWZpbGVzLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSBcInByb2plY3RzL2FwaVwiO1xuXG5leHBvcnQgdHlwZSBBcGlPcHRpb25zID0ge1xuXHRkPzogc3RyaW5nO1xuXHRhdXRoUHJvdmlkZXI/OiBzdHJpbmc7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xufTtcblxuY29uc3QgZmVhdHVyZXMgPSBbRGF0YWJhc2VGZWF0dXJlLCBBdXRoRmVhdHVyZSwgUG9zdG1hbkZlYXR1cmUsIEZpbmFsaXplRmVhdHVyZV07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZEFwaShjbGlPcHRpb25zOiBBcGlPcHRpb25zKSB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoY2xpT3B0aW9ucy5kID8/IFwiLlwiKTtcblx0Y29uc3Qgd29ya3NwYWNlID0gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcik7XG5cdGF3YWl0IFNjYWZmb2xkU2VydmljZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcjogc3RyaW5nKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRjb25zdCBuYW1lID0gbW9ub1JlcG8ubmFtZTtcblxuXHRjb25zdCBjb21wb3NlID0gbmV3IERvY2tlckNvbXBvc2UoKVxuXHRcdC5hZGRTZXJ2aWNlKFwiZGV2Y29udGFpbmVyXCIsIHtcblx0XHRcdGJ1aWxkOiBcIi5cIixcblx0XHRcdHZvbHVtZXM6IFtcblx0XHRcdFx0YFxcJHtIT01FfS8ubnBtLyR7bmFtZX06L2hvbWUvbm9kZS8ubnBtLWNvbmZpZ2AsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0fSlcblx0XHQuYWRkVm9sdW1lKFwid2ViYXBpLW5vZGUtbW9kdWxlc1wiKTtcblxuXHRjb25zdCBkZXZDb250YWluZXIgPSBuZXcgRGV2Q29udGFpbmVyKClcblx0XHQuYWRkRXh0ZW5zaW9uKFwiYmlvbWVqcy5iaW9tZVwiLCBcInZpdGVzdC5leHBsb3JlclwiKVxuXHRcdC5zZXRQb3N0U3RhcnRDb21tYW5kKFwibnBtIHdob2FtaSAyPi9kZXYvbnVsbCB8fCBucG0gbG9naW5cIilcblx0XHQudXNlQ29tcG9zZSgpO1xuXG5cdC8vIFdvcmtzcGFjZS1sZXZlbCBtb2RlbHMgKHJlcG8gcm9vdClcblx0bW9ub1JlcG8uYWRkTW9kZWwoY29tcG9zZSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKGRldkNvbnRhaW5lcik7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBEb2NrZXJmaWxlTW9kZWwoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBWU0NvZGVTZXR0aW5ncyhuYW1lKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBMYXVuY2hKc29uKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVHNDb25maWcoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBQYWNrYWdlSnNvbihgJHtuYW1lfS5hcGlgKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwsIFwiY29uZmlnL2NvbmZpZy55YW1sXCIsIFwiXCIpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0bmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwsIFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiLCBcIlwiKSxcblx0KTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEdpdGlnbm9yZSgpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEVudkZpbGUoKSk7XG5cblx0Ly8gQmlvbWUgZm9ybWF0dGVyL2xpbnRlciBjb25maWdcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiYmlvbWUuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQkc2NoZW1hOiBcImh0dHBzOi8vYmlvbWVqcy5kZXYvc2NoZW1hcy8yLjAuMC9zY2hlbWEuanNvblwiLFxuXHRcdFx0XHRcdFx0ZmlsZXM6IHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyoudHNcIiwgXCIqKi8qLmpzXCIsIFwiKiovKi5qc29uXCIsIFwiKiovKi55bWxcIiwgXCIqKi8qLnlhbWxcIl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXNzaXN0OiB7IGFjdGlvbnM6IHsgc291cmNlOiB7IG9yZ2FuaXplSW1wb3J0czogXCJvblwiIH0gfSB9LFxuXHRcdFx0XHRcdFx0dmNzOiB7IGVuYWJsZWQ6IHRydWUsIGNsaWVudEtpbmQ6IFwiZ2l0XCIsIHVzZUlnbm9yZUZpbGU6IHRydWUgfSxcblx0XHRcdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXRXaXRoRXJyb3JzOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbmRlbnRTdHlsZTogXCJ0YWJcIixcblx0XHRcdFx0XHRcdFx0bGluZVdpZHRoOiA5NSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRqYXZhc2NyaXB0OiB7IHBhcnNlcjogeyB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZDogdHJ1ZSB9IH0sXG5cdFx0XHRcdFx0XHRsaW50ZXI6IHtcblx0XHRcdFx0XHRcdFx0cnVsZXM6IHtcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHk6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczogeyBhY2Nlc3NpYmlsaXR5OiBcImV4cGxpY2l0XCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdmVycmlkZXM6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLmpzb25cIl0sXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7IGluZGVudFN0eWxlOiBcInNwYWNlXCIsIGluZGVudFdpZHRoOiAyIH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBOUE0gdG9rZW4gcGxhY2Vob2xkZXIg4oCUIGdpdGlnbm9yZWQsIHNldCBtYW51YWxseSBhZnRlciBzY2FmZm9sZFxuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZW52LmxvY2FsXCIsXG5cdFx0XHRcdGNvbnRlbnQ6XG5cdFx0XHRcdFx0XCIjIFNldCB5b3VyIG5wbSBhY2Nlc3MgdG9rZW4gaGVyZSAoY3JlYXRlZCB3aXRoOiBucG0gdG9rZW4gY3JlYXRlKVxcbk5QTV9UT0tFTj1cXG5cIixcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gUHJvamVjdC1sZXZlbCBtb2RlbHMgKHBhdGhzIHJlbGF0aXZlIHRvIHByb2plY3RzL2FwaSlcblx0Y29uc3QgYXBpUHJvamVjdCA9IG5ldyBQcm9qZWN0U2NhZmZvbGQoV0VCQVBJX1BST0pFQ1RfRElSKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQXBpUGFja2FnZUpzb24obmFtZSkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBNYWluU291cmNlRmlsZShgJHtuYW1lfS5hcGlgKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IENvbnRyb2xsZXJTb3VyY2VGaWxlKCkpO1xuXG5cdC8vIFNhbXBsZVNlcnZpY2UgKyBTYW1wbGVDb25maWcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgc2NhZmZvbGQg4oCUIEhlbGxvQ29udHJvbGxlclxuXHQvLyBpbmplY3RzIFNhbXBsZVNlcnZpY2UgdG8gZGVtb25zdHJhdGUgY29uZmlnLWRyaXZlbiBiZWhhdmlvdXIgb3V0IG9mIHRoZSBib3guXG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlQ29uZmlnTW9kZWwoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlU2VydmljZU1vZGVsKCkpO1xuXG5cdG1vbm9SZXBvLmFkZFByb2plY3QoYXBpUHJvamVjdCk7XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuIl0sIm5hbWVzIjpbInJlc29sdmUiLCJEb2NrZXJDb21wb3NlIiwiQ29uZmlnWWFtbCIsIldFTExfS05PV05fRklMRVMiLCJEb2NrZXJmaWxlTW9kZWwiLCJEZXZDb250YWluZXIiLCJFbnZGaWxlIiwiR2l0aWdub3JlIiwiTGF1bmNoSnNvbiIsIlBhY2thZ2VKc29uIiwiTW9ub1JlcG9TY2FmZm9sZCIsIlByb2plY3RTY2FmZm9sZCIsIlRzQ29uZmlnIiwiVlNDb2RlU2V0dGluZ3MiLCJTY2FmZm9sZFNlcnZpY2UiLCJBdXRoRmVhdHVyZSIsIkRhdGFiYXNlRmVhdHVyZSIsIkZpbmFsaXplRmVhdHVyZSIsIlBvc3RtYW5GZWF0dXJlIiwiQXBpUGFja2FnZUpzb24iLCJDb250cm9sbGVyU291cmNlRmlsZSIsIk1haW5Tb3VyY2VGaWxlIiwiU2FtcGxlQ29uZmlnTW9kZWwiLCJTYW1wbGVTZXJ2aWNlTW9kZWwiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJmZWF0dXJlcyIsInNjYWZmb2xkQXBpIiwiY2xpT3B0aW9ucyIsInRhcmdldERpciIsImQiLCJ3b3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJzY2FmZm9sZCIsIm1vbm9SZXBvIiwibmFtZSIsImNvbXBvc2UiLCJhZGRTZXJ2aWNlIiwiYnVpbGQiLCJ2b2x1bWVzIiwiZW52aXJvbm1lbnQiLCJOUE1fQ09ORklHX1VTRVJDT05GSUciLCJjb21tYW5kIiwiYWRkVm9sdW1lIiwiZGV2Q29udGFpbmVyIiwiYWRkRXh0ZW5zaW9uIiwic2V0UG9zdFN0YXJ0Q29tbWFuZCIsInVzZUNvbXBvc2UiLCJhZGRNb2RlbCIsIkNPTkZJR19ZQU1MIiwiQ09ORklHX0RFVl9ZQU1MIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIiRzY2hlbWEiLCJpbmNsdWRlcyIsImFzc2lzdCIsImFjdGlvbnMiLCJzb3VyY2UiLCJvcmdhbml6ZUltcG9ydHMiLCJ2Y3MiLCJlbmFibGVkIiwiY2xpZW50S2luZCIsInVzZUlnbm9yZUZpbGUiLCJmb3JtYXR0ZXIiLCJmb3JtYXRXaXRoRXJyb3JzIiwiaW5kZW50U3R5bGUiLCJsaW5lV2lkdGgiLCJqYXZhc2NyaXB0IiwicGFyc2VyIiwidW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQiLCJsaW50ZXIiLCJydWxlcyIsInN0eWxlIiwidXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHkiLCJsZXZlbCIsIm9wdGlvbnMiLCJhY2Nlc3NpYmlsaXR5Iiwib3ZlcnJpZGVzIiwiaW5kZW50V2lkdGgiLCJhcGlQcm9qZWN0IiwiYWRkUHJvamVjdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsYUFBYSxRQUFRLDZCQUE2QjtBQUMzRCxTQUFTQyxVQUFVLFFBQVEsaUNBQWlDO0FBQzVELFNBQVNDLGdCQUFnQixRQUFRLHFCQUFxQjtBQUN0RCxTQUFTQyxlQUFlLFFBQVEscUNBQXFDO0FBQ3JFLFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsU0FBU0MsT0FBTyxRQUFRLDhCQUE4QjtBQUN0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
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuYWRkU2VydmljZShcImRldmNvbnRhaW5lclwiLCB7XG5cdFx0XHRidWlsZDogXCIuXCIsXG5cdFx0XHR2b2x1bWVzOiBbXG5cdFx0XHRcdGBcXCR7SE9NRX0vLm5wbS8ke25hbWV9Oi9ob21lL25vZGUvLm5wbS1jb25maWdgLFxuXHRcdFx0XHRcIndlYmFwaS1ub2RlLW1vZHVsZXM6L3dvcmtzcGFjZS9ub2RlX21vZHVsZXNcIixcblx0XHRcdF0sXG5cdFx0XHRlbnZpcm9ubWVudDogeyBOUE1fQ09ORklHX1VTRVJDT05GSUc6IFwiL2hvbWUvbm9kZS8ubnBtLWNvbmZpZy8ubnBtcmNcIiB9LFxuXHRcdFx0Y29tbWFuZDogXCJzbGVlcCBpbmZpbml0eVwiLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuc2V0UG9zdFN0YXJ0Q29tbWFuZChcIm5wbSB3aG9hbWkgMj4vZGV2L251bGwgfHwgbnBtIGxvZ2luXCIpXG5cdFx0LnVzZUNvbXBvc2UoKTtcblxuXHQvLyBXb3Jrc3BhY2UtbGV2ZWwgbW9kZWxzIChyZXBvIHJvb3QpXG5cdG1vbm9SZXBvLmFkZE1vZGVsKGNvbXBvc2UpO1xuXHRtb25vUmVwby5hZGRNb2RlbChkZXZDb250YWluZXIpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpRGV2Q29udGFpbmVyKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVlNDb2RlU2V0dGluZ3MobmFtZSkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgTGF1bmNoSnNvbigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFRzQ29uZmlnKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgUGFja2FnZUpzb24oYCR7bmFtZX0uYXBpYCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MLCBcImNvbmZpZy9jb25maWcueWFtbFwiLCBcIlwiKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBHaXRpZ25vcmUoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBFbnZGaWxlKCkpO1xuXG5cdC8vIEJpb21lIGZvcm1hdHRlci9saW50ZXIgY29uZmlnXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcImJpb21lLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0JHNjaGVtYTogXCJodHRwczovL2Jpb21lanMuZGV2L3NjaGVtYXMvMi4wLjAvc2NoZW1hLmpzb25cIixcblx0XHRcdFx0XHRcdGZpbGVzOiB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLnRzXCIsIFwiKiovKi5qc1wiLCBcIioqLyouanNvblwiLCBcIioqLyoueW1sXCIsIFwiKiovKi55YW1sXCJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFzc2lzdDogeyBhY3Rpb25zOiB7IHNvdXJjZTogeyBvcmdhbml6ZUltcG9ydHM6IFwib25cIiB9IH0gfSxcblx0XHRcdFx0XHRcdHZjczogeyBlbmFibGVkOiB0cnVlLCBjbGllbnRLaW5kOiBcImdpdFwiLCB1c2VJZ25vcmVGaWxlOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Zm9ybWF0V2l0aEVycm9yczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5kZW50U3R5bGU6IFwidGFiXCIsXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogOTUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0amF2YXNjcmlwdDogeyBwYXJzZXI6IHsgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ6IHRydWUgfSB9LFxuXHRcdFx0XHRcdFx0bGludGVyOiB7XG5cdFx0XHRcdFx0XHRcdHJ1bGVzOiB7XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldmVsOiBcImVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHsgYWNjZXNzaWJpbGl0eTogXCJleHBsaWNpdFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3ZlcnJpZGVzOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi5qc29uXCJdLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdHRlcjogeyBpbmRlbnRTdHlsZTogXCJzcGFjZVwiLCBpbmRlbnRXaWR0aDogMiB9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gTlBNIHRva2VuIHBsYWNlaG9sZGVyIOKAlCBnaXRpZ25vcmVkLCBzZXQgbWFudWFsbHkgYWZ0ZXIgc2NhZmZvbGRcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmVudi5sb2NhbFwiLFxuXHRcdFx0XHRjb250ZW50OlxuXHRcdFx0XHRcdFwiIyBTZXQgeW91ciBucG0gYWNjZXNzIHRva2VuIGhlcmUgKGNyZWF0ZWQgd2l0aDogbnBtIHRva2VuIGNyZWF0ZSlcXG5OUE1fVE9LRU49XFxuXCIsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIFByb2plY3QtbGV2ZWwgbW9kZWxzIChwYXRocyByZWxhdGl2ZSB0byBwcm9qZWN0cy9hcGkpXG5cdGNvbnN0IGFwaVByb2plY3QgPSBuZXcgUHJvamVjdFNjYWZmb2xkKFdFQkFQSV9QUk9KRUNUX0RJUik7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IEFwaVBhY2thZ2VKc29uKG5hbWUpKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgTWFpblNvdXJjZUZpbGUoYCR7bmFtZX0uYXBpYCkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBDb250cm9sbGVyU291cmNlRmlsZSgpKTtcblxuXHQvLyBTYW1wbGVTZXJ2aWNlICsgU2FtcGxlQ29uZmlnIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIHNjYWZmb2xkIOKAlCBIZWxsb0NvbnRyb2xsZXJcblx0Ly8gaW5qZWN0cyBTYW1wbGVTZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIGNvbmZpZy1kcml2ZW4gYmVoYXZpb3VyIG91dCBvZiB0aGUgYm94LlxuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZUNvbmZpZ01vZGVsKCkpO1xuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZVNlcnZpY2VNb2RlbCgpKTtcblxuXHRtb25vUmVwby5hZGRQcm9qZWN0KGFwaVByb2plY3QpO1xuXG5cdHJldHVybiBtb25vUmVwbztcbn1cbiJdLCJuYW1lcyI6WyJyZXNvbHZlIiwiRG9ja2VyQ29tcG9zZSIsIkNvbmZpZ1lhbWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiRGV2Q29udGFpbmVyIiwiRW52RmlsZSIsIkdpdGlnbm9yZSIsIkxhdW5jaEpzb24iLCJQYWNrYWdlSnNvbiIsIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJUc0NvbmZpZyIsIlZTQ29kZVNldHRpbmdzIiwiU2NhZmZvbGRTZXJ2aWNlIiwiQXV0aEZlYXR1cmUiLCJEYXRhYmFzZUZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJQb3N0bWFuRmVhdHVyZSIsIkFwaVBhY2thZ2VKc29uIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJNYWluU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiV0VCQVBJX1BST0pFQ1RfRElSIiwiZmVhdHVyZXMiLCJzY2FmZm9sZEFwaSIsImNsaU9wdGlvbnMiLCJ0YXJnZXREaXIiLCJkIiwid29ya3NwYWNlIiwiY3JlYXRlV29ya3NwYWNlIiwic2NhZmZvbGQiLCJtb25vUmVwbyIsIm5hbWUiLCJjb21wb3NlIiwiYWRkU2VydmljZSIsImJ1aWxkIiwidm9sdW1lcyIsImVudmlyb25tZW50IiwiTlBNX0NPTkZJR19VU0VSQ09ORklHIiwiY29tbWFuZCIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiYXBpUHJvamVjdCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGFBQWEsUUFBUSw2QkFBNkI7QUFDM0QsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxT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
|
|
@@ -3,15 +3,22 @@ import { ask } from "../../domain/prompt.js";
|
|
|
3
3
|
// State resolved during scaffold(), consumed by finalize().
|
|
4
4
|
let _pm = null;
|
|
5
5
|
let _shouldInstall = true;
|
|
6
|
-
async function getOptions(_workspace,
|
|
6
|
+
async function getOptions(_workspace, cliOptions) {
|
|
7
|
+
if (cliOptions.installDependencies != null) {
|
|
8
|
+
_shouldInstall = cliOptions.installDependencies === "yes";
|
|
9
|
+
}
|
|
7
10
|
return {};
|
|
8
11
|
}
|
|
9
|
-
async function scaffold(workspace,
|
|
12
|
+
async function scaffold(workspace, options) {
|
|
10
13
|
if (process.env.DECOHERE_BUILDER === "1") {
|
|
11
14
|
_shouldInstall = false;
|
|
12
15
|
return;
|
|
13
16
|
}
|
|
14
17
|
_pm = detectPackageManager(workspace.targetDir) ?? await promptForPackageManager();
|
|
18
|
+
if (options.installDependencies != null) {
|
|
19
|
+
_shouldInstall = options.installDependencies === "yes";
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
15
22
|
const answer = await ask("\nInstall dependencies now? [yes/no] (yes): ", "yes");
|
|
16
23
|
_shouldInstall = answer.toLowerCase() !== "no";
|
|
17
24
|
}
|
|
@@ -38,4 +45,4 @@ export const FinalizeFeature = {
|
|
|
38
45
|
finalize
|
|
39
46
|
};
|
|
40
47
|
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxudHlwZSBGaW5hbGl6ZU9wdGlvbnMgPSB7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8RmluYWxpemVPcHRpb25zPixcbik6IFByb21pc2U8b2JqZWN0PiB7XG5cdGlmIChjbGlPcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gY2xpT3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHR9XG5cdHJldHVybiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IEZpbmFsaXplT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiA9PT0gXCIxXCIpIHtcblx0XHRfc2hvdWxkSW5zdGFsbCA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRfcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih3b3Jrc3BhY2UudGFyZ2V0RGlyKSA/PyAoYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKSk7XG5cdGlmIChvcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gb3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhcIlxcbkluc3RhbGwgZGVwZW5kZW5jaWVzIG5vdz8gW3llcy9ub10gKHllcyk6IFwiLCBcInllc1wiKTtcblx0X3Nob3VsZEluc3RhbGwgPSBhbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gXCJub1wiO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBfb3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtID0gX3BtITtcblx0XHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke3dvcmtzcGFjZS5uYW1lfS4gSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cXG5gKTtcblx0XHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB3b3Jrc3BhY2UudGFyZ2V0RGlyIH0pO1xuXHR9XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhICR7X3Nob3VsZEluc3RhbGwgPyBcIk5leHRcIiA6IFwiVG8gZ2V0IHN0YXJ0ZWQ6XCJ9IHN0ZXBzOlxcbmApO1xuXHRjb25zb2xlLmxvZyhgICBjZCAke3dvcmtzcGFjZS5uYW1lfWApO1xuXHRpZiAoIV9zaG91bGRJbnN0YWxsKSB7XG5cdFx0Y29uc3QgcG1OYW1lID0gX3BtPy5uYW1lID8/IFwicG5wbVwiO1xuXHRcdGNvbnNvbGUubG9nKGAgICR7cG1OYW1lfSBpbnN0YWxsYCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIGNvZGUgLiAgICAgICAgICMgb3BlbiBpbiBWUyBDb2RlXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgICAgICAgICAgICAgICAgIyB0aGVuOiBSZW9wZW4gaW4gQ29udGFpbmVyXFxuXCIpO1xufVxuXG5leHBvcnQgY29uc3QgRmluYWxpemVGZWF0dXJlOiBGZWF0dXJlID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCwgZmluYWxpemUgfTtcbiJdLCJuYW1lcyI6WyJkZXRlY3RQYWNrYWdlTWFuYWdlciIsInByb21wdEZvclBhY2thZ2VNYW5hZ2VyIiwiYXNrIiwiX3BtIiwiX3Nob3VsZEluc3RhbGwiLCJnZXRPcHRpb25zIiwiX3dvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwic2NhZmZvbGQiLCJ3b3Jrc3BhY2UiLCJvcHRpb25zIiwicHJvY2VzcyIsImVudiIsIkRFQ09IRVJFX0JVSUxERVIiLCJ0YXJnZXREaXIiLCJhbnN3ZXIiLCJ0b0xvd2VyQ2FzZSIsImZpbmFsaXplIiwiX29wdGlvbnMiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJuYW1lIiwiaW5zdGFsbCIsImN3ZCIsInBtTmFtZSIsIkZpbmFsaXplRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0Esb0JBQW9CLEVBQUVDLHVCQUF1QixRQUFRLDBCQUEwQjtBQUN4RixTQUFTQyxHQUFHLFFBQVEseUJBQXlCO0FBSTdDLDREQUE0RDtBQUM1RCxJQUFJQyxNQUE2QjtBQUNqQyxJQUFJQyxpQkFBaUI7QUFNckIsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFVBQW9DO0lBRXBDLElBQUlBLFdBQVdDLG1CQUFtQixJQUFJLE1BQU07UUFDM0NKLGlCQUFpQkcsV0FBV0MsbUJBQW1CLEtBQUs7SUFDckQ7SUFDQSxPQUFPLENBQUM7QUFDVDtBQUVBLGVBQWVDLFNBQ2RDLFNBQTRCLEVBQzVCQyxPQUF3QjtJQUV4QixJQUFJQyxRQUFRQyxHQUFHLENBQUNDLGdCQUFnQixLQUFLLEtBQUs7UUFDekNWLGlCQUFpQjtRQUNqQjtJQUNEO0lBQ0FELE1BQU1ILHFCQUFxQlUsVUFBVUssU0FBUyxLQUFNLE1BQU1kO0lBQzFELElBQUlVLFFBQVFILG1CQUFtQixJQUFJLE1BQU07UUFDeENKLGlCQUFpQk8sUUFBUUgsbUJBQW1CLEtBQUs7UUFDakQ7SUFDRDtJQUVBLE1BQU1RLFNBQVMsTUFBTWQsSUFBSSxnREFBZ0Q7SUFDekVFLGlCQUFpQlksT0FBT0MsV0FBVyxPQUFPO0FBQzNDO0FBRUEsZUFBZUMsU0FBU1IsU0FBNEIsRUFBRVMsUUFBZ0I7SUFDckUsSUFBSWYsZ0JBQWdCO1FBQ25CLE1BQU1nQixLQUFLakI7UUFDWGtCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRVosVUFBVWEsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1FBQzFFLE1BQU1ILEdBQUdJLE9BQU8sQ0FBQztZQUFFQyxLQUFLZixVQUFVSyxTQUFTO1FBQUM7SUFDN0M7SUFFQU0sUUFBUUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFbEIsaUJBQWlCLFNBQVMsa0JBQWtCLFNBQVMsQ0FBQztJQUM3RWlCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRVosVUFBVWEsSUFBSSxFQUFFO0lBQ3BDLElBQUksQ0FBQ25CLGdCQUFnQjtRQUNwQixNQUFNc0IsU0FBU3ZCLEtBQUtvQixRQUFRO1FBQzVCRixRQUFRQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUVJLE9BQU8sUUFBUSxDQUFDO0lBQ2xDO0lBQ0FMLFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7QUFDYjtBQUVBLE9BQU8sTUFBTUssa0JBQTJCO0lBQUV0QjtJQUFZSTtJQUFVUztBQUFTLEVBQUUifQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DevContainerImageModel, withNodeUser, withPnpm, withWorkspaceNodeModulesOwnership } from "../../models/docker-image.model.js";
|
|
2
|
+
export class WebapiDevContainer extends DevContainerImageModel {
|
|
3
|
+
constructor(baseImage = "node:24"){
|
|
4
|
+
super(baseImage);
|
|
5
|
+
}
|
|
6
|
+
registerBaseLayers() {
|
|
7
|
+
super.registerBaseLayers();
|
|
8
|
+
this.addLayer(withNodeUser()).addLayer(withPnpm()).addLayer(withWorkspaceNodeModulesOwnership());
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGV2Q29udGFpbmVySW1hZ2VNb2RlbCxcblx0d2l0aE5vZGVVc2VyLFxuXHR3aXRoUG5wbSxcblx0d2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwLFxufSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgV2ViYXBpRGV2Q29udGFpbmVyIGV4dGVuZHMgRGV2Q29udGFpbmVySW1hZ2VNb2RlbCB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2UgPSBcIm5vZGU6MjRcIikge1xuXHRcdHN1cGVyKGJhc2VJbWFnZSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVnaXN0ZXJCYXNlTGF5ZXJzKCk6IHZvaWQge1xuXHRcdHN1cGVyLnJlZ2lzdGVyQmFzZUxheWVycygpO1xuXHRcdHRoaXMuYWRkTGF5ZXIod2l0aE5vZGVVc2VyKCkpXG5cdFx0XHQuYWRkTGF5ZXIod2l0aFBucG0oKSlcblx0XHRcdC5hZGRMYXllcih3aXRoV29ya3NwYWNlTm9kZU1vZHVsZXNPd25lcnNoaXAoKSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJEZXZDb250YWluZXJJbWFnZU1vZGVsIiwid2l0aE5vZGVVc2VyIiwid2l0aFBucG0iLCJ3aXRoV29ya3NwYWNlTm9kZU1vZHVsZXNPd25lcnNoaXAiLCJXZWJhcGlEZXZDb250YWluZXIiLCJiYXNlSW1hZ2UiLCJyZWdpc3RlckJhc2VMYXllcnMiLCJhZGRMYXllciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDQ0Esc0JBQXNCLEVBQ3RCQyxZQUFZLEVBQ1pDLFFBQVEsRUFDUkMsaUNBQWlDLFFBQzNCLHFDQUFxQztBQUU1QyxPQUFPLE1BQU1DLDJCQUEyQko7SUFDdkMsWUFBbUJLLFlBQVksU0FBUyxDQUFFO1FBQ3pDLEtBQUssQ0FBQ0E7SUFDUDtJQUVtQkMscUJBQTJCO1FBQzdDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFFBQVEsQ0FBQ04sZ0JBQ1pNLFFBQVEsQ0FBQ0wsWUFDVEssUUFBUSxDQUFDSjtJQUNaO0FBQ0QifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/create",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
3
|
+
"version": "0.0.1-dev.22",
|
|
4
4
|
"description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"decohere",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
24
|
+
"@decohere/nexus": "0.0.1-dev.22",
|
|
25
25
|
"commander": "^13.1.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { KeyedModel, SourceFile } from "./source-file.js";
|
|
2
|
+
export type LayerWriter = (dockerfile: DockerfileModel) => void;
|
|
3
|
+
export declare class DockerStep {
|
|
4
|
+
readonly key: string;
|
|
5
|
+
readonly content: string;
|
|
6
|
+
readonly order: number;
|
|
7
|
+
constructor(key: string, content: string, order?: number);
|
|
8
|
+
static run(key: string, command: string, order?: number): DockerStep;
|
|
9
|
+
static raw(key: string, content: string, order?: number): DockerStep;
|
|
10
|
+
static entrypoint(key: string, value: string | readonly string[], order?: number): DockerStep;
|
|
11
|
+
}
|
|
12
|
+
export declare function withCommandHistory(options?: {
|
|
13
|
+
historyDir?: string;
|
|
14
|
+
historyFileName?: string;
|
|
15
|
+
order?: number;
|
|
16
|
+
}): LayerWriter;
|
|
17
|
+
export declare function withNodeUser(options?: {
|
|
18
|
+
username?: string;
|
|
19
|
+
includeUserInstruction?: boolean;
|
|
20
|
+
order?: number;
|
|
21
|
+
}): LayerWriter;
|
|
22
|
+
export declare function withPnpm(options?: {
|
|
23
|
+
version?: string;
|
|
24
|
+
usernameExpr?: string;
|
|
25
|
+
order?: number;
|
|
26
|
+
}): LayerWriter;
|
|
27
|
+
export declare function withWorkspaceNodeModulesOwnership(options?: {
|
|
28
|
+
workspaceDir?: string;
|
|
29
|
+
usernameExpr?: string;
|
|
30
|
+
order?: number;
|
|
31
|
+
}): LayerWriter;
|
|
32
|
+
export declare function withVsCodeJsDebugBootloaderFix(options?: {
|
|
33
|
+
bashrcPath?: string;
|
|
34
|
+
order?: number;
|
|
35
|
+
}): LayerWriter;
|
|
36
|
+
export declare class DockerfileModel implements KeyedModel {
|
|
37
|
+
readonly key: string;
|
|
38
|
+
private readonly _steps;
|
|
39
|
+
private readonly _layerWriters;
|
|
40
|
+
private _fromImage;
|
|
41
|
+
private _layerCounter;
|
|
42
|
+
constructor(baseImage: string);
|
|
43
|
+
from(baseImage: string): this;
|
|
44
|
+
addLayer(layer: LayerWriter | string, order?: 5000): this;
|
|
45
|
+
addStep(step: DockerStep): this;
|
|
46
|
+
removeStep(key: string): this;
|
|
47
|
+
entrypoint(value: string | readonly string[], order?: 10000): this;
|
|
48
|
+
addRunStep(cmd: string): this;
|
|
49
|
+
build(): string;
|
|
50
|
+
protected registerBaseLayers(): void;
|
|
51
|
+
files(): SourceFile[];
|
|
52
|
+
}
|
|
53
|
+
export declare class DevContainerImageModel extends DockerfileModel {
|
|
54
|
+
protected registerBaseLayers(): void;
|
|
55
|
+
files(): SourceFile[];
|
|
56
|
+
}
|
package/types/src/runner.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ApiOptions } from "./webapi/create-api.js";
|
|
1
2
|
/**
|
|
2
3
|
* Run the scaffold inside a pre-built Docker builder image.
|
|
3
4
|
*
|
|
@@ -8,6 +9,4 @@
|
|
|
8
9
|
* If `~/.config/auth0` exists on the host the directory is also mounted so
|
|
9
10
|
* the auth0 CLI inside the container can reuse existing credentials silently.
|
|
10
11
|
*/
|
|
11
|
-
export declare function runInBuilder(opts:
|
|
12
|
-
d?: string;
|
|
13
|
-
}): never;
|
|
12
|
+
export declare function runInBuilder(opts: ApiOptions): never;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export declare const WEBAPI_PROJECT_DIR = "projects/api";
|
|
2
2
|
export type ApiOptions = {
|
|
3
3
|
d?: string;
|
|
4
|
-
authProvider?:
|
|
4
|
+
authProvider?: "auth0" | "none";
|
|
5
5
|
databaseProvider?: "none" | "postgres/typeorm";
|
|
6
|
+
postmanProvider?: "api" | "local" | "none";
|
|
7
|
+
installDependencies?: "yes" | "no";
|
|
6
8
|
};
|
|
7
9
|
export declare function scaffoldApi(cliOptions: ApiOptions): Promise<void>;
|