@nestia/migrate 14.0.2 → 14.0.4
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/lib/_virtual/_rolldown/runtime.mjs +6 -1
- package/lib/bundles/NEST_TEMPLATE.js +1 -1
- package/lib/bundles/NEST_TEMPLATE.mjs +1 -1
- package/lib/bundles/SDK_TEMPLATE.js +1 -1
- package/lib/bundles/SDK_TEMPLATE.mjs +1 -1
- package/lib/executable/NestiaMigrateCommander.d.ts +4 -2
- package/lib/executable/NestiaMigrateCommander.js +5 -3
- package/lib/executable/NestiaMigrateCommander.js.map +1 -1
- package/lib/executable/NestiaMigrateCommander.mjs +2 -2
- package/lib/executable/NestiaMigrateInquirer.d.ts +6 -4
- package/lib/executable/NestiaMigrateInquirer.js +16 -13
- package/lib/executable/NestiaMigrateInquirer.js.map +1 -1
- package/lib/executable/NestiaMigrateInquirer.mjs +4 -3
- package/lib/executable/TemplateBundleCache.d.ts +23 -0
- package/lib/executable/TemplateBundleCache.js +60 -0
- package/lib/executable/TemplateBundleCache.js.map +1 -0
- package/lib/executable/TemplateBundleCache.mjs +39 -0
- package/lib/executable/TemplateBundleCache.mjs.map +1 -0
- package/lib/executable/bundle.d.ts +1 -0
- package/lib/executable/bundle.js +404 -0
- package/lib/executable/bundle.js.map +1 -0
- package/lib/executable/bundle.mjs +324 -0
- package/lib/executable/bundle.mjs.map +1 -0
- package/lib/package.mjs +55 -0
- package/lib/package.mjs.map +1 -0
- package/package.json +3 -3
- package/src/bundles/NEST_TEMPLATE.ts +1 -1
- package/src/bundles/SDK_TEMPLATE.ts +1 -1
- package/src/executable/NestiaMigrateCommander.ts +5 -3
- package/src/executable/NestiaMigrateInquirer.ts +9 -6
- package/src/executable/TemplateBundleCache.ts +65 -0
- package/src/executable/{bundle.js → bundle.ts} +110 -43
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
var _a;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const node_child_process_1 = __importDefault(require("node:child_process"));
|
|
17
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
18
|
+
const TemplateBundleCache_1 = require("./TemplateBundleCache");
|
|
19
|
+
const { version } = require("../../../../package.json");
|
|
20
|
+
const ROOT = `${__dirname}/../..`;
|
|
21
|
+
const ASSETS = `${ROOT}/assets`;
|
|
22
|
+
const CATALOGS = require("js-yaml").load(node_fs_1.default.readFileSync(`${__dirname}/../../../../pnpm-lock.yaml`, "utf8")).catalogs;
|
|
23
|
+
const TYPIA = CATALOGS.samchon;
|
|
24
|
+
const TYPESCRIPT = (_a = CATALOGS.typescript) !== null && _a !== void 0 ? _a : {};
|
|
25
|
+
const update = (content, options = {}) => {
|
|
26
|
+
var _a, _b, _c, _d;
|
|
27
|
+
const parsed = JSON.parse(content);
|
|
28
|
+
for (const record of [
|
|
29
|
+
(_a = parsed.dependencies) !== null && _a !== void 0 ? _a : {},
|
|
30
|
+
(_b = parsed.devDependencies) !== null && _b !== void 0 ? _b : {},
|
|
31
|
+
])
|
|
32
|
+
for (const key of Object.keys(record)) {
|
|
33
|
+
const current = record[key];
|
|
34
|
+
// `catalog:` / `workspace:` specifiers already carry their versions
|
|
35
|
+
// through pnpm-workspace.yaml, which gets its own stamping pass.
|
|
36
|
+
if (typeof current === "string" &&
|
|
37
|
+
(current.startsWith("catalog:") || current.startsWith("workspace:")))
|
|
38
|
+
continue;
|
|
39
|
+
if (key.startsWith("@nestia/") || key === "nestia")
|
|
40
|
+
record[key] = `^${version}`;
|
|
41
|
+
// Both catalogs, and in the same order updateWorkspaceCatalog resolves
|
|
42
|
+
// them. A template can pin a version two ways -- a `catalog:` reference
|
|
43
|
+
// its pnpm-workspace.yaml resolves, or a plain specifier here -- and a
|
|
44
|
+
// rule that reads only one catalog on this path leaves the toolchain
|
|
45
|
+
// frozen at whatever the upstream template last wrote. That is how a
|
|
46
|
+
// generated SDK project ended up with ttsc ^0.18.2 beside a `@nestia/core`
|
|
47
|
+
// stamped to this repository's version.
|
|
48
|
+
else {
|
|
49
|
+
const catalog = (_c = TYPIA[key]) !== null && _c !== void 0 ? _c : TYPESCRIPT[key];
|
|
50
|
+
if (catalog)
|
|
51
|
+
record[key] = catalog.specifier;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
migratePackageJson(parsed);
|
|
55
|
+
if (options.sdkAggregate) {
|
|
56
|
+
(_d = parsed.devDependencies) !== null && _d !== void 0 ? _d : (parsed.devDependencies = {});
|
|
57
|
+
parsed.devDependencies["@nestia/core"] = `^${version}`;
|
|
58
|
+
}
|
|
59
|
+
return JSON.stringify(parsed, null, 2);
|
|
60
|
+
};
|
|
61
|
+
const migratePackageJson = (parsed) => {
|
|
62
|
+
var _a;
|
|
63
|
+
if (parsed.scripts)
|
|
64
|
+
for (const [key, value] of Object.entries(parsed.scripts))
|
|
65
|
+
if (typeof value === "string")
|
|
66
|
+
parsed.scripts[key] = normalizeScript(value);
|
|
67
|
+
const devDependencies = parsed.devDependencies;
|
|
68
|
+
if (devDependencies) {
|
|
69
|
+
const usesTypeScript = typeof devDependencies.typescript === "string" &&
|
|
70
|
+
devDependencies.typescript.startsWith("catalog:") === false;
|
|
71
|
+
delete devDependencies["typescript-transform-paths"];
|
|
72
|
+
// Single-package templates compiling with a direct typescript dependency
|
|
73
|
+
// need the ttsc compiler this repository currently builds against.
|
|
74
|
+
if (usesTypeScript && TYPESCRIPT.ttsc)
|
|
75
|
+
(_a = devDependencies.ttsc) !== null && _a !== void 0 ? _a : (devDependencies.ttsc = TYPESCRIPT.ttsc.specifier);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
// Stamp the template's pnpm-workspace.yaml catalogs with this repository's
|
|
79
|
+
// current versions. Keep the rewrite line-targeted so quoted package names,
|
|
80
|
+
// comments, ordering, and any anchors supplied by the upstream template remain
|
|
81
|
+
// intact.
|
|
82
|
+
const updateWorkspaceCatalog = (content) => {
|
|
83
|
+
const replace = (line) => {
|
|
84
|
+
var _a, _b;
|
|
85
|
+
var _c, _d, _e;
|
|
86
|
+
const match = line.match(/^(\s+(?:"([^"]+)"|'([^']+)'|([^:\s]+)): (?:&[A-Za-z0-9_-]+ )?)\S[^\r\n]*(\r?)$/);
|
|
87
|
+
if (match === null)
|
|
88
|
+
return line;
|
|
89
|
+
const name = ((_d = (_c = match[2]) !== null && _c !== void 0 ? _c : match[3]) !== null && _d !== void 0 ? _d : match[4]);
|
|
90
|
+
const specifier = name === "nestia" || name.startsWith("@nestia/")
|
|
91
|
+
? `^${version}`
|
|
92
|
+
: ((_e = (_a = TYPIA[name]) === null || _a === void 0 ? void 0 : _a.specifier) !== null && _e !== void 0 ? _e : (_b = TYPESCRIPT[name]) === null || _b === void 0 ? void 0 : _b.specifier);
|
|
93
|
+
if (typeof specifier !== "string")
|
|
94
|
+
return line;
|
|
95
|
+
return `${match[1]}${specifier}${match[5]}`;
|
|
96
|
+
};
|
|
97
|
+
return content.split("\n").map(replace).join("\n");
|
|
98
|
+
};
|
|
99
|
+
const trimTemplateDependencies = (parsed) => {
|
|
100
|
+
if (parsed.dependencies) {
|
|
101
|
+
delete parsed.dependencies.commander;
|
|
102
|
+
delete parsed.dependencies.inquirer;
|
|
103
|
+
}
|
|
104
|
+
if (parsed.devDependencies) {
|
|
105
|
+
delete parsed.devDependencies["@types/inquirer"];
|
|
106
|
+
delete parsed.devDependencies.commander;
|
|
107
|
+
delete parsed.devDependencies.inquirer;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const normalizeScript = (script) => script.replace(/(^|[^A-Za-z0-9_-])tsc(?=$|[^A-Za-z0-9_-])/g, "$1ttsc");
|
|
111
|
+
const ARGUMENT_PARSER = `import { createInterface } from "node:readline/promises";
|
|
112
|
+
|
|
113
|
+
export namespace ArgumentParser {
|
|
114
|
+
export interface Command {
|
|
115
|
+
option: (flags: string, description?: string) => Command;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface Prompt {
|
|
119
|
+
select: (
|
|
120
|
+
name: string,
|
|
121
|
+
) => (
|
|
122
|
+
message: string,
|
|
123
|
+
) => <Choice extends string>(choices: Choice[]) => Promise<Choice>;
|
|
124
|
+
boolean: (name: string) => (message: string) => Promise<boolean>;
|
|
125
|
+
number: (name: string) => (message: string) => Promise<number>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export const parse = async <T>(
|
|
129
|
+
inquiry: (
|
|
130
|
+
command: Command,
|
|
131
|
+
prompt: Prompt,
|
|
132
|
+
action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
|
|
133
|
+
) => Promise<T>,
|
|
134
|
+
): Promise<T> => {
|
|
135
|
+
const command: Command = {
|
|
136
|
+
option: (_flags: string, _description?: string): Command => command,
|
|
137
|
+
};
|
|
138
|
+
const action = (closure: (options: Partial<T>) => Promise<T>) =>
|
|
139
|
+
closure(parseArguments() as Partial<T>);
|
|
140
|
+
return inquiry(
|
|
141
|
+
command,
|
|
142
|
+
{ select, boolean, number },
|
|
143
|
+
action,
|
|
144
|
+
);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const select =
|
|
148
|
+
(_name: string) =>
|
|
149
|
+
(message: string) =>
|
|
150
|
+
async <Choice extends string>(choices: Choice[]): Promise<Choice> => {
|
|
151
|
+
const answer: string = await ask(\`\${message} (\${choices.join("/")})\`);
|
|
152
|
+
return (choices.find((choice) => choice === answer) ?? choices[0])!;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const boolean = (_name: string) => async (message: string) =>
|
|
156
|
+
/^(true|t|yes|y|1)$/i.test(await ask(\`\${message} [y/N]\`));
|
|
157
|
+
|
|
158
|
+
const number = (_name: string) => async (message: string) =>
|
|
159
|
+
Number(await ask(message));
|
|
160
|
+
|
|
161
|
+
const ask = async (message: string): Promise<string> => {
|
|
162
|
+
const reader = createInterface({
|
|
163
|
+
input: process.stdin,
|
|
164
|
+
output: process.stdout,
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
return (await reader.question(\`\${message}: \`)).trim();
|
|
168
|
+
} finally {
|
|
169
|
+
reader.close();
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const parseArguments = (): Record<string, string | string[] | boolean> => {
|
|
174
|
+
const output: Record<string, string | string[] | boolean> = {};
|
|
175
|
+
const args: string[] = process.argv.slice(2);
|
|
176
|
+
for (let i = 0; i < args.length; ++i) {
|
|
177
|
+
const raw: string = args[i]!;
|
|
178
|
+
if (raw.startsWith("--") === false) continue;
|
|
179
|
+
|
|
180
|
+
const equal: number = raw.indexOf("=");
|
|
181
|
+
const name: string = toCamelCase(
|
|
182
|
+
raw.slice(2, equal === -1 ? undefined : equal),
|
|
183
|
+
);
|
|
184
|
+
if (equal !== -1) {
|
|
185
|
+
assign(output, name, raw.slice(equal + 1));
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const values: string[] = [];
|
|
190
|
+
while (i + 1 < args.length && args[i + 1]!.startsWith("--") === false)
|
|
191
|
+
values.push(args[++i]!);
|
|
192
|
+
assign(
|
|
193
|
+
output,
|
|
194
|
+
name,
|
|
195
|
+
values.length === 0 ? true : values.length === 1 ? values[0]! : values,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
return output;
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const assign = (
|
|
202
|
+
output: Record<string, string | string[] | boolean>,
|
|
203
|
+
name: string,
|
|
204
|
+
value: string | string[] | boolean,
|
|
205
|
+
): void => {
|
|
206
|
+
const current: string | string[] | boolean | undefined = output[name];
|
|
207
|
+
if (current === undefined) output[name] = value;
|
|
208
|
+
else
|
|
209
|
+
output[name] = [
|
|
210
|
+
...(Array.isArray(current) ? current : [String(current)]),
|
|
211
|
+
...(Array.isArray(value) ? value : [String(value)]),
|
|
212
|
+
];
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const toCamelCase = (str: string): string =>
|
|
216
|
+
str.replace(/-([a-z])/g, (_matched, letter: string) =>
|
|
217
|
+
letter.toUpperCase(),
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
`;
|
|
221
|
+
const updateTsConfig = (content) => {
|
|
222
|
+
content = content.replace(/^\s*\{\s*"transform":\s*"typescript-transform-paths"\s*\},\r?\n/gm, "");
|
|
223
|
+
content = content.replace(/^\s*\{\s*"transform":\s*"typia\/lib\/transform"(?:,\s*"enabled":\s*false)?\s*\},?\r?\n/gm, "");
|
|
224
|
+
content = content.replace(/^\s*\{\s*"transform":\s*"@nestia\/core\/lib\/transform"\s*\},?\r?\n/gm, "");
|
|
225
|
+
content = content.replace(/^\s*\{\s*"transform":\s*"@nestia\/core\/native\/transform\.cjs"\s*\},?\r?\n/gm, "");
|
|
226
|
+
content = content.replace(/^\s*\{\s*"transform":\s*"@nestia\/sdk\/lib\/transform"\s*\},\r?\n/gm, "");
|
|
227
|
+
return content;
|
|
228
|
+
};
|
|
229
|
+
const bundle = (_a) => __awaiter(void 0, [_a], void 0, function* ({ mode, repository, revision, exceptions, transform, }) {
|
|
230
|
+
const root = `${__dirname}/../..`;
|
|
231
|
+
const assets = `${root}/assets`;
|
|
232
|
+
const template = `${assets}/${mode}`;
|
|
233
|
+
const clone = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
234
|
+
// CLONE REPOSITORY
|
|
235
|
+
if (node_fs_1.default.existsSync(template))
|
|
236
|
+
yield node_fs_1.default.promises.rm(template, { recursive: true });
|
|
237
|
+
else
|
|
238
|
+
try {
|
|
239
|
+
yield node_fs_1.default.promises.mkdir(ASSETS);
|
|
240
|
+
}
|
|
241
|
+
catch (_a) { }
|
|
242
|
+
// Disable line-ending conversion so the bundled template is byte-identical
|
|
243
|
+
// on every platform: with core.autocrlf=true (the common Windows default)
|
|
244
|
+
// the checkout would rewrite LF to CRLF and break the line-targeted
|
|
245
|
+
// transforms below.
|
|
246
|
+
yield node_fs_1.default.promises.mkdir(template, { recursive: true });
|
|
247
|
+
node_child_process_1.default.execFileSync("git", ["init", "--quiet"], { cwd: template });
|
|
248
|
+
// The template repositories are live projects; an unpinned clone lets any
|
|
249
|
+
// upstream push break this build (samchon/nestia-start#632 did exactly
|
|
250
|
+
// that), so every bundle checks out a reviewed revision.
|
|
251
|
+
node_child_process_1.default.execFileSync("git", [
|
|
252
|
+
"fetch",
|
|
253
|
+
"--quiet",
|
|
254
|
+
"--depth=1",
|
|
255
|
+
// This checkout is consumed and removed immediately. Fetch's default
|
|
256
|
+
// auto-maintenance can detach a writer into .git/objects after fetch
|
|
257
|
+
// returns, racing the awaited removal below on a cold CI build.
|
|
258
|
+
"--no-auto-maintenance",
|
|
259
|
+
`https://github.com/samchon/${repository}`,
|
|
260
|
+
revision,
|
|
261
|
+
], { cwd: template });
|
|
262
|
+
node_child_process_1.default.execFileSync("git", [
|
|
263
|
+
"-c",
|
|
264
|
+
"core.autocrlf=false",
|
|
265
|
+
"checkout",
|
|
266
|
+
"--quiet",
|
|
267
|
+
"--detach",
|
|
268
|
+
revision,
|
|
269
|
+
], {
|
|
270
|
+
cwd: template,
|
|
271
|
+
stdio: "pipe",
|
|
272
|
+
});
|
|
273
|
+
// REMOVE VULNERABLE FILES
|
|
274
|
+
for (const location of exceptions !== null && exceptions !== void 0 ? exceptions : [])
|
|
275
|
+
yield node_fs_1.default.promises.rm(`${template}/${location}`, { recursive: true });
|
|
276
|
+
});
|
|
277
|
+
const iterate = (collection) => (location) => __awaiter(void 0, void 0, void 0, function* () {
|
|
278
|
+
const directory = yield node_fs_1.default.promises.readdir(location);
|
|
279
|
+
for (const file of directory) {
|
|
280
|
+
const absolute = location + "/" + file;
|
|
281
|
+
const stats = yield node_fs_1.default.promises.stat(absolute);
|
|
282
|
+
if (stats.isDirectory())
|
|
283
|
+
yield iterate(collection)(absolute);
|
|
284
|
+
else {
|
|
285
|
+
const content = yield node_fs_1.default.promises.readFile(absolute, "utf-8");
|
|
286
|
+
collection[(() => {
|
|
287
|
+
const str = absolute.replace(template, "");
|
|
288
|
+
return str[0] === "/" ? str.substring(1) : str;
|
|
289
|
+
})()] = content;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
const archive = (collection) => __awaiter(void 0, void 0, void 0, function* () {
|
|
294
|
+
const name = `${mode.toUpperCase()}_TEMPLATE`;
|
|
295
|
+
const body = JSON.stringify(collection, null, 2);
|
|
296
|
+
const content = `export const ${name}: Record<string, string> = ${body}`;
|
|
297
|
+
try {
|
|
298
|
+
yield node_fs_1.default.promises.mkdir(`${ROOT}/src/bundles`);
|
|
299
|
+
}
|
|
300
|
+
catch (_a) { }
|
|
301
|
+
yield node_fs_1.default.promises.writeFile(`${ROOT}/src/bundles/${name}.ts`, content, "utf8");
|
|
302
|
+
});
|
|
303
|
+
const collection = {};
|
|
304
|
+
yield clone();
|
|
305
|
+
yield iterate(collection)(template);
|
|
306
|
+
if (transform)
|
|
307
|
+
for (const [key, value] of Object.entries(collection))
|
|
308
|
+
collection[key] = yield writeTransformedAsset(template, key, transform(key, value));
|
|
309
|
+
yield archive(collection);
|
|
310
|
+
});
|
|
311
|
+
const writeTransformedAsset = (template, key, value) => __awaiter(void 0, void 0, void 0, function* () {
|
|
312
|
+
yield node_fs_1.default.promises.writeFile(`${template}/${key}`, value, "utf8");
|
|
313
|
+
return value;
|
|
314
|
+
});
|
|
315
|
+
/**
|
|
316
|
+
* Generates both pinned templates using the current release and catalog stamps.
|
|
317
|
+
*
|
|
318
|
+
* The complete script is a cache input because it contains the revisions,
|
|
319
|
+
* exclusions and every transformation rule. A hit still verifies output bytes.
|
|
320
|
+
*/
|
|
321
|
+
const generate = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
322
|
+
yield bundle({
|
|
323
|
+
mode: "nest",
|
|
324
|
+
repository: "nestia-start",
|
|
325
|
+
// Pin the reviewed pnpm monorepo template after its catalog, rolldown, and
|
|
326
|
+
// package self-reference migrations.
|
|
327
|
+
revision: "8188661cb1c1b0fb30e6184b06422764d64a5f68",
|
|
328
|
+
exceptions: [
|
|
329
|
+
".git",
|
|
330
|
+
".github/dependabot.yml",
|
|
331
|
+
".github/workflows/dependabot-automerge.yml",
|
|
332
|
+
// The template's lockfile resolves the catalog versions that the
|
|
333
|
+
// stamping below rewrites; shipping it would only bloat NEST_TEMPLATE
|
|
334
|
+
// with 160 KB of immediately-stale data.
|
|
335
|
+
"pnpm-lock.yaml",
|
|
336
|
+
"packages/api/src/functional",
|
|
337
|
+
"packages/api/src/structures",
|
|
338
|
+
"packages/backend/src/MyModule.ts",
|
|
339
|
+
"packages/backend/src/controllers",
|
|
340
|
+
"packages/backend/src/providers",
|
|
341
|
+
"packages/backend/test/features",
|
|
342
|
+
],
|
|
343
|
+
transform: (key, value) => {
|
|
344
|
+
if (key.endsWith("package.json")) {
|
|
345
|
+
const parsed = JSON.parse(update(value));
|
|
346
|
+
trimTemplateDependencies(parsed);
|
|
347
|
+
return JSON.stringify(parsed, null, 2);
|
|
348
|
+
}
|
|
349
|
+
if (key === "pnpm-workspace.yaml")
|
|
350
|
+
return updateWorkspaceCatalog(value);
|
|
351
|
+
if (key === "packages/backend/test/helpers/ArgumentParser.ts")
|
|
352
|
+
return ARGUMENT_PARSER;
|
|
353
|
+
if (key.endsWith("tsconfig.json"))
|
|
354
|
+
return updateTsConfig(value);
|
|
355
|
+
return value;
|
|
356
|
+
},
|
|
357
|
+
});
|
|
358
|
+
yield bundle({
|
|
359
|
+
mode: "sdk",
|
|
360
|
+
repository: "nestia-sdk-template",
|
|
361
|
+
// Pin the reviewed pnpm-native SDK template.
|
|
362
|
+
revision: "37a019e2b8dea3d02237137aaec2f242f53dcd2d",
|
|
363
|
+
exceptions: [
|
|
364
|
+
".git",
|
|
365
|
+
".github/dependabot.yml",
|
|
366
|
+
".github/workflows/build.yml",
|
|
367
|
+
".github/workflows/dependabot-automerge.yml",
|
|
368
|
+
// update() stamps the current Nestia version into package.json. The
|
|
369
|
+
// template repository's lockfile resolves its own version, so let the
|
|
370
|
+
// first pnpm install create a lockfile that matches the migrated output.
|
|
371
|
+
"pnpm-lock.yaml",
|
|
372
|
+
"src/functional",
|
|
373
|
+
"src/structures",
|
|
374
|
+
"test/features",
|
|
375
|
+
],
|
|
376
|
+
transform: (key, value) => {
|
|
377
|
+
if (key.endsWith("package.json")) {
|
|
378
|
+
const parsed = JSON.parse(update(value, { sdkAggregate: key === "package.json" }));
|
|
379
|
+
trimTemplateDependencies(parsed);
|
|
380
|
+
return JSON.stringify(parsed, null, 2);
|
|
381
|
+
}
|
|
382
|
+
if (key === "test/utils/ArgumentParser.ts")
|
|
383
|
+
return ARGUMENT_PARSER;
|
|
384
|
+
if (key.endsWith("tsconfig.json"))
|
|
385
|
+
return updateTsConfig(value);
|
|
386
|
+
return value;
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
const main = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
391
|
+
const reused = yield (0, TemplateBundleCache_1.run)({
|
|
392
|
+
inputs: [version, CATALOGS, node_fs_1.default.readFileSync(__filename, "utf8")],
|
|
393
|
+
outputs: ["NEST_TEMPLATE", "SDK_TEMPLATE"].map((name) => `${ROOT}/src/bundles/${name}.ts`),
|
|
394
|
+
stampFile: `${ASSETS}/.bundle-cache.json`,
|
|
395
|
+
generate,
|
|
396
|
+
});
|
|
397
|
+
if (reused)
|
|
398
|
+
console.log("Reuse verified migration template bundles.");
|
|
399
|
+
});
|
|
400
|
+
main().catch((exp) => {
|
|
401
|
+
console.error(exp);
|
|
402
|
+
process.exit(-1);
|
|
403
|
+
});
|
|
404
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/executable/bundle.ts"],"names":[],"mappings":"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"}
|