@cmssy/codemod 8.0.4 → 9.0.0
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/dist/index.js +102 -15
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -212,12 +212,103 @@ function transform3(source) {
|
|
|
212
212
|
return notes.length > 0 ? { code, changed, notes } : { code, changed };
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
+
// src/v9.ts
|
|
216
|
+
var KEYS = ["defaultLocale", "enabledLocales"];
|
|
217
|
+
function configRegions(code) {
|
|
218
|
+
const regions = [];
|
|
219
|
+
const openers = [/defineCmssyConfig\s*\(\s*\{/g, /:\s*CmssyConfig\s*=\s*\{/g];
|
|
220
|
+
for (const opener of openers) {
|
|
221
|
+
for (const match of code.matchAll(opener)) {
|
|
222
|
+
const start = match.index + match[0].length - 1;
|
|
223
|
+
let depth = 0;
|
|
224
|
+
for (let i = start; i < code.length; i++) {
|
|
225
|
+
if (code[i] === "{") depth++;
|
|
226
|
+
else if (code[i] === "}") {
|
|
227
|
+
depth--;
|
|
228
|
+
if (depth === 0) {
|
|
229
|
+
regions.push({ start, end: i });
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return regions;
|
|
237
|
+
}
|
|
238
|
+
function stripKey(slice, key) {
|
|
239
|
+
const property = new RegExp(`(^|\\n)([ \\t]*)${key}\\s*:\\s*`);
|
|
240
|
+
const match = property.exec(slice);
|
|
241
|
+
if (!match) return { code: slice, removed: null };
|
|
242
|
+
const valueStart = match.index + match[0].length;
|
|
243
|
+
let i = valueStart;
|
|
244
|
+
let square = 0;
|
|
245
|
+
let curly = 0;
|
|
246
|
+
for (; i < slice.length; i++) {
|
|
247
|
+
const char = slice[i];
|
|
248
|
+
if (char === "[") square++;
|
|
249
|
+
else if (char === "]") square--;
|
|
250
|
+
else if (char === "{") curly++;
|
|
251
|
+
else if (char === "}") {
|
|
252
|
+
if (curly === 0) break;
|
|
253
|
+
curly--;
|
|
254
|
+
} else if (char === "," && square === 0 && curly === 0) {
|
|
255
|
+
i++;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
let end = i;
|
|
260
|
+
if (slice[end] === "\n" || slice.startsWith("\r\n", end)) {
|
|
261
|
+
end += slice[end] === "\r" ? 2 : 1;
|
|
262
|
+
}
|
|
263
|
+
const from = match.index + (match[1] ?? "").length;
|
|
264
|
+
return {
|
|
265
|
+
code: slice.slice(0, from) + slice.slice(end),
|
|
266
|
+
removed: slice.slice(valueStart, i).trim().replace(/,$/, "")
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function transform4(source) {
|
|
270
|
+
let code = source;
|
|
271
|
+
const notes = [];
|
|
272
|
+
for (const key of KEYS) {
|
|
273
|
+
let removed;
|
|
274
|
+
do {
|
|
275
|
+
removed = null;
|
|
276
|
+
for (const { start, end } of configRegions(code)) {
|
|
277
|
+
const slice = code.slice(start, end + 1);
|
|
278
|
+
const result = stripKey(slice, key);
|
|
279
|
+
if (result.removed !== null) {
|
|
280
|
+
code = code.slice(0, start) + result.code + code.slice(end + 1);
|
|
281
|
+
removed = result.removed;
|
|
282
|
+
notes.push(
|
|
283
|
+
`removed config.${key} (${removed}) - the workspace languages rule now; confirm Settings \u2192 Languages matches`
|
|
284
|
+
);
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
} while (removed !== null);
|
|
289
|
+
}
|
|
290
|
+
const changed = code !== source;
|
|
291
|
+
return notes.length > 0 ? { code, changed, notes } : { code, changed };
|
|
292
|
+
}
|
|
293
|
+
|
|
215
294
|
// src/index.ts
|
|
216
|
-
var TRANSFORMS = {
|
|
295
|
+
var TRANSFORMS = {
|
|
296
|
+
v5: transform,
|
|
297
|
+
v7: transform2,
|
|
298
|
+
v8: transform3,
|
|
299
|
+
v9: transform4
|
|
300
|
+
};
|
|
217
301
|
var PREVIOUS_MAJOR = {
|
|
218
302
|
v5: "4.x",
|
|
219
303
|
v7: "6.x",
|
|
220
|
-
v8: "7.x"
|
|
304
|
+
v8: "7.x",
|
|
305
|
+
v9: "8.x"
|
|
306
|
+
};
|
|
307
|
+
var MIGRATION_GUIDE = {
|
|
308
|
+
v5: "https://github.com/cmssy-io/cmssy-sdk/blob/main/docs/migrations/v4-to-v5.md",
|
|
309
|
+
v7: "https://github.com/cmssy-io/cmssy-sdk/blob/main/docs/migrations/v4-to-v5.md",
|
|
310
|
+
v8: "https://github.com/cmssy-io/cmssy-sdk/blob/main/docs/migrations/v7-to-v8.md",
|
|
311
|
+
v9: "https://github.com/cmssy-io/cmssy-sdk/blob/main/docs/migrations/v8-to-v9.md"
|
|
221
312
|
};
|
|
222
313
|
var SKIP = /* @__PURE__ */ new Set(["node_modules", "dist", "build", "out", "coverage"]);
|
|
223
314
|
var EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".mjs"];
|
|
@@ -240,9 +331,9 @@ async function sourceFiles(dir) {
|
|
|
240
331
|
async function main() {
|
|
241
332
|
const args = process.argv.slice(2);
|
|
242
333
|
const version = args[0];
|
|
243
|
-
const
|
|
244
|
-
if (!
|
|
245
|
-
console.error("usage: cmssy-codemod v5|v7|v8 [path] [--dry]");
|
|
334
|
+
const transform5 = TRANSFORMS[version];
|
|
335
|
+
if (!transform5) {
|
|
336
|
+
console.error("usage: cmssy-codemod v5|v7|v8|v9 [path] [--dry]");
|
|
246
337
|
process.exitCode = 1;
|
|
247
338
|
return;
|
|
248
339
|
}
|
|
@@ -256,7 +347,7 @@ async function main() {
|
|
|
256
347
|
let needsCore = false;
|
|
257
348
|
for (const file of files) {
|
|
258
349
|
const source = await readFile(file, "utf8");
|
|
259
|
-
const { code, changed, notes } =
|
|
350
|
+
const { code, changed, notes } = transform5(source);
|
|
260
351
|
if (notes && notes.length > 0) manual.push({ file, notes });
|
|
261
352
|
if (!changed) continue;
|
|
262
353
|
touched.push(file);
|
|
@@ -277,19 +368,15 @@ async function main() {
|
|
|
277
368
|
for (const file of touched) console.log(` ${report(file)}`);
|
|
278
369
|
}
|
|
279
370
|
if (manual.length > 0) {
|
|
280
|
-
console.log(
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
derived from its schema, and only you know which fields it means to read:
|
|
284
|
-
`
|
|
285
|
-
);
|
|
371
|
+
console.log(`
|
|
372
|
+
cmssy: ${manual.length} file(s) need a look from you:
|
|
373
|
+
`);
|
|
286
374
|
for (const { file, notes } of manual) {
|
|
287
375
|
console.log(` ${report(file)}
|
|
288
376
|
${notes.join("\n ")}`);
|
|
289
377
|
}
|
|
290
|
-
console.log(
|
|
291
|
-
|
|
292
|
-
);
|
|
378
|
+
console.log(`
|
|
379
|
+
${MIGRATION_GUIDE[version]}`);
|
|
293
380
|
}
|
|
294
381
|
if (needsCore && !await dependsOnCore(target)) {
|
|
295
382
|
console.log(
|