fep-migrator 1.0.1 → 1.0.3

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.mjs CHANGED
@@ -1,41 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import process from "node:process";
3
3
  import { cac } from "cac";
4
+ import fs from "node:fs";
4
5
  import path from "node:path";
5
- import fs from "fs-extra";
6
6
  import { globbySync } from "globby";
7
7
  import MagicString from "magic-string";
8
8
  import { parseSync } from "oxc-parser";
9
- import { parse } from "@vue/compiler-sfc";
9
+ import { parse, writeBack } from "vue-sfc-descriptor-write-back";
10
10
 
11
- //#region src/sfc.ts
12
- const parseVueSfcFile = (filename) => {
13
- const code = fs.readFileSync(filename, { encoding: "utf-8" });
14
- const { descriptor } = parse(code, {
15
- filename,
16
- sourceMap: false
17
- });
18
- return [code, descriptor];
19
- };
20
- const modifySfcCodeByDescriptor = (code, descriptor) => {
21
- const ms = new MagicString(code);
22
- const { template, script, scriptSetup, styles, customBlocks } = descriptor;
23
- const blocks = [
24
- template,
25
- script,
26
- scriptSetup,
27
- ...styles,
28
- ...customBlocks
29
- ].filter((block) => block != null).sort((a, b) => {
30
- return a.loc.start.offset - b.loc.start.offset;
31
- });
32
- blocks.reverse();
33
- for (const block of blocks) ms.overwrite(block.loc.start.offset, block.loc.end.offset, block.content);
34
- const hasChanged = ms.hasChanged();
35
- return [hasChanged, hasChanged ? ms.toString() : code];
36
- };
37
-
38
- //#endregion
39
11
  //#region src/replace-fep.ts
40
12
  const resolveFep = (code, filename) => {
41
13
  const ms = new MagicString(code);
@@ -87,7 +59,7 @@ async function replacer(dirs) {
87
59
  console.log("# 开始处理...");
88
60
  for (const file of fileList) try {
89
61
  if (file.endsWith(".vue")) {
90
- const [code, descriptor] = parseVueSfcFile(file);
62
+ const { code, descriptor } = parse(file);
91
63
  let changed = false;
92
64
  if (descriptor.script) {
93
65
  const [hasChanged, newScript] = resolveFep(descriptor.script.content, file);
@@ -104,7 +76,7 @@ async function replacer(dirs) {
104
76
  }
105
77
  }
106
78
  if (changed) {
107
- const [_changed, resolved] = modifySfcCodeByDescriptor(code, descriptor);
79
+ const { code: resolved } = writeBack(code, descriptor);
108
80
  fs.writeFileSync(file, resolved);
109
81
  statistic.success++;
110
82
  }
@@ -133,5 +105,4 @@ cli.help();
133
105
  cli.parse();
134
106
 
135
107
  //#endregion
136
- export { };
137
- //# sourceMappingURL=index.mjs.map
108
+ export { };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fep-migrator",
3
3
  "type": "module",
4
- "version": "1.0.1",
4
+ "version": "1.0.3",
5
5
  "packageManager": "pnpm@10.23.0",
6
6
  "description": "@falconix/fep migration helper",
7
7
  "author": "tjyuanpeng <tjyuanpeng@gmail.com>",
@@ -34,23 +34,21 @@
34
34
  },
35
35
  "scripts": {
36
36
  "start": "node dist/index.mjs",
37
- "watch": "tsdown --watch --sourcemap",
38
- "build": "tsdown --sourcemap",
37
+ "watch": "tsdown --watch",
38
+ "build": "tsdown",
39
39
  "lint": "eslint .",
40
40
  "typecheck": "tsc --noEmit"
41
41
  },
42
42
  "dependencies": {
43
43
  "@vue/compiler-sfc": "^3.5.26",
44
44
  "cac": "^6.7.14",
45
- "fep-migrator": "^1.0.0",
46
- "fs-extra": "^11.3.3",
47
45
  "globby": "^16.1.0",
48
46
  "magic-string": "^0.30.21",
49
- "oxc-parser": "^0.108.0"
47
+ "oxc-parser": "^0.108.0",
48
+ "vue-sfc-descriptor-write-back": "^1.0.0"
50
49
  },
51
50
  "devDependencies": {
52
51
  "@antfu/eslint-config": "^6.7.3",
53
- "@types/fs-extra": "^11.0.4",
54
52
  "@types/node": "^25.0.6",
55
53
  "eslint": "^9.39.2",
56
54
  "eslint-plugin-format": "^1.2.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/sfc.ts","../src/replace-fep.ts","../src/index.ts"],"sourcesContent":["import type { SFCDescriptor } from '@vue/compiler-sfc'\nimport { parse } from '@vue/compiler-sfc'\nimport fs from 'fs-extra'\nimport MagicString from 'magic-string'\n\nexport const parseVueSfcFile = (filename: string): [string, SFCDescriptor] => {\n const code = fs.readFileSync(filename, { encoding: 'utf-8' })\n const { descriptor } = parse(code, {\n filename,\n sourceMap: false,\n })\n\n return [code, descriptor]\n}\n\nexport const modifySfcCodeByDescriptor = (code: string, descriptor: SFCDescriptor): [boolean, string] => {\n const ms = new MagicString(code)\n const {\n template,\n script,\n scriptSetup,\n styles,\n customBlocks,\n } = descriptor\n\n const blocks = [template, script, scriptSetup, ...styles, ...customBlocks]\n .filter(block => block != null)\n .sort((a, b) => {\n return a.loc.start.offset - b.loc.start.offset\n })\n blocks.reverse()\n\n for (const block of blocks) {\n ms.overwrite(block.loc.start.offset, block.loc.end.offset, block.content)\n }\n\n const hasChanged = ms.hasChanged()\n return [hasChanged, hasChanged ? ms.toString() : code]\n}\n","import path from 'node:path'\nimport process from 'node:process'\nimport fs from 'fs-extra'\nimport { globbySync } from 'globby'\nimport MagicString from 'magic-string'\nimport { parseSync } from 'oxc-parser'\nimport { modifySfcCodeByDescriptor, parseVueSfcFile } from './sfc'\n\nconst resolveFep = (code: string, filename: string): [boolean, string] => {\n const ms = new MagicString(code)\n const { program } = parseSync(filename, code, { lang: 'tsx' })\n const imports = program.body.filter(i => i.type === 'ImportDeclaration').reverse()\n for (const importItem of imports) {\n const { raw, start, end } = importItem.source\n const text = raw ?? ''\n const epRegex = /^(['\"])element-plus/\n const iconRegex = /^(['\"])@element-plus\\/icons-vue/\n if (epRegex.test(text)) {\n const newPath = text.replace(epRegex, (_all, p1) => {\n return `${p1}@falconix/fep`\n })\n ms.overwrite(start, end, newPath)\n } else if (iconRegex.test(text)) {\n const newPath = text.replace(iconRegex, (_all, p1) => {\n return `${p1}@falconix/icons-vue`\n })\n ms.overwrite(start, end, newPath)\n }\n }\n const hasChanged = ms.hasChanged()\n return [hasChanged, hasChanged ? ms.toString() : code]\n}\n\nasync function replacer(dirs: string[]) {\n const fileList = globbySync(dirs, {\n absolute: true,\n onlyFiles: true,\n gitignore: true,\n expandDirectories: {\n extensions: ['js', 'jsx', 'ts', 'tsx', 'vue'],\n },\n ignore: ['**/node_modules', '**/*.d.ts', '**/public'],\n })\n const statistic = {\n success: 0,\n fail: 0,\n total: fileList.length,\n }\n console.log('# 开始处理...')\n for (const file of fileList) {\n try {\n if (file.endsWith('.vue')) {\n const [code, descriptor] = parseVueSfcFile(file)\n let changed = false\n if (descriptor.script) {\n const [hasChanged, newScript] = resolveFep(descriptor.script.content, file)\n if (hasChanged) {\n changed = true\n descriptor.script.content = newScript\n }\n }\n if (descriptor.scriptSetup) {\n const [hasChanged, newScriptSetup] = resolveFep(descriptor.scriptSetup.content, file)\n if (hasChanged) {\n changed = true\n descriptor.scriptSetup.content = newScriptSetup\n }\n }\n if (changed) {\n const [_changed, resolved] = modifySfcCodeByDescriptor(code, descriptor)\n fs.writeFileSync(file, resolved)\n statistic.success++\n }\n } else {\n const content = fs.readFileSync(file, { encoding: 'utf-8' })\n const [hasChanged, resolved] = resolveFep(content, file)\n if (hasChanged) {\n fs.writeFileSync(file, resolved)\n statistic.success++\n }\n }\n } catch (e) {\n console.error(`❌ 处理错误: [${path.relative(process.cwd(), file)}], error:${e}`)\n statistic.fail++\n }\n }\n console.log(`# 处理完成。共扫描 ${statistic.total} 个文件,修改成功 ${statistic.success} 个,修改失败 ${statistic.fail} 个`)\n}\n\nexport default replacer\n","#!/usr/bin/env node\n\nimport process from 'node:process'\nimport { cac } from 'cac'\nimport replaceFep from './replace-fep'\n\nconst cli = cac('fep-migrator')\ncli\n .version(process.env.npm_package_version ?? '-')\n .command('<...dir>', '处理路径')\n .action(async (dirs) => {\n replaceFep(dirs)\n })\ncli.help()\ncli.parse()\n"],"mappings":";;;;;;;;;;;AAKA,MAAa,mBAAmB,aAA8C;CAC5E,MAAM,OAAO,GAAG,aAAa,UAAU,EAAE,UAAU,SAAS,CAAC;CAC7D,MAAM,EAAE,eAAe,MAAM,MAAM;EACjC;EACA,WAAW;EACZ,CAAC;AAEF,QAAO,CAAC,MAAM,WAAW;;AAG3B,MAAa,6BAA6B,MAAc,eAAiD;CACvG,MAAM,KAAK,IAAI,YAAY,KAAK;CAChC,MAAM,EACJ,UACA,QACA,aACA,QACA,iBACE;CAEJ,MAAM,SAAS;EAAC;EAAU;EAAQ;EAAa,GAAG;EAAQ,GAAG;EAAa,CACvE,QAAO,UAAS,SAAS,KAAK,CAC9B,MAAM,GAAG,MAAM;AACd,SAAO,EAAE,IAAI,MAAM,SAAS,EAAE,IAAI,MAAM;GACxC;AACJ,QAAO,SAAS;AAEhB,MAAK,MAAM,SAAS,OAClB,IAAG,UAAU,MAAM,IAAI,MAAM,QAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,QAAQ;CAG3E,MAAM,aAAa,GAAG,YAAY;AAClC,QAAO,CAAC,YAAY,aAAa,GAAG,UAAU,GAAG,KAAK;;;;;AC7BxD,MAAM,cAAc,MAAc,aAAwC;CACxE,MAAM,KAAK,IAAI,YAAY,KAAK;CAChC,MAAM,EAAE,YAAY,UAAU,UAAU,MAAM,EAAE,MAAM,OAAO,CAAC;CAC9D,MAAM,UAAU,QAAQ,KAAK,QAAO,MAAK,EAAE,SAAS,oBAAoB,CAAC,SAAS;AAClF,MAAK,MAAM,cAAc,SAAS;EAChC,MAAM,EAAE,KAAK,OAAO,QAAQ,WAAW;EACvC,MAAM,OAAO,OAAO;EACpB,MAAM,UAAU;EAChB,MAAM,YAAY;AAClB,MAAI,QAAQ,KAAK,KAAK,EAAE;GACtB,MAAM,UAAU,KAAK,QAAQ,UAAU,MAAM,OAAO;AAClD,WAAO,GAAG,GAAG;KACb;AACF,MAAG,UAAU,OAAO,KAAK,QAAQ;aACxB,UAAU,KAAK,KAAK,EAAE;GAC/B,MAAM,UAAU,KAAK,QAAQ,YAAY,MAAM,OAAO;AACpD,WAAO,GAAG,GAAG;KACb;AACF,MAAG,UAAU,OAAO,KAAK,QAAQ;;;CAGrC,MAAM,aAAa,GAAG,YAAY;AAClC,QAAO,CAAC,YAAY,aAAa,GAAG,UAAU,GAAG,KAAK;;AAGxD,eAAe,SAAS,MAAgB;CACtC,MAAM,WAAW,WAAW,MAAM;EAChC,UAAU;EACV,WAAW;EACX,WAAW;EACX,mBAAmB,EACjB,YAAY;GAAC;GAAM;GAAO;GAAM;GAAO;GAAM,EAC9C;EACD,QAAQ;GAAC;GAAmB;GAAa;GAAY;EACtD,CAAC;CACF,MAAM,YAAY;EAChB,SAAS;EACT,MAAM;EACN,OAAO,SAAS;EACjB;AACD,SAAQ,IAAI,YAAY;AACxB,MAAK,MAAM,QAAQ,SACjB,KAAI;AACF,MAAI,KAAK,SAAS,OAAO,EAAE;GACzB,MAAM,CAAC,MAAM,cAAc,gBAAgB,KAAK;GAChD,IAAI,UAAU;AACd,OAAI,WAAW,QAAQ;IACrB,MAAM,CAAC,YAAY,aAAa,WAAW,WAAW,OAAO,SAAS,KAAK;AAC3E,QAAI,YAAY;AACd,eAAU;AACV,gBAAW,OAAO,UAAU;;;AAGhC,OAAI,WAAW,aAAa;IAC1B,MAAM,CAAC,YAAY,kBAAkB,WAAW,WAAW,YAAY,SAAS,KAAK;AACrF,QAAI,YAAY;AACd,eAAU;AACV,gBAAW,YAAY,UAAU;;;AAGrC,OAAI,SAAS;IACX,MAAM,CAAC,UAAU,YAAY,0BAA0B,MAAM,WAAW;AACxE,OAAG,cAAc,MAAM,SAAS;AAChC,cAAU;;SAEP;GAEL,MAAM,CAAC,YAAY,YAAY,WADf,GAAG,aAAa,MAAM,EAAE,UAAU,SAAS,CAAC,EACT,KAAK;AACxD,OAAI,YAAY;AACd,OAAG,cAAc,MAAM,SAAS;AAChC,cAAU;;;UAGP,GAAG;AACV,UAAQ,MAAM,YAAY,KAAK,SAAS,QAAQ,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI;AAC5E,YAAU;;AAGd,SAAQ,IAAI,cAAc,UAAU,MAAM,YAAY,UAAU,QAAQ,UAAU,UAAU,KAAK,IAAI;;AAGvG,0BAAe;;;;ACnFf,MAAM,MAAM,IAAI,eAAe;AAC/B,IACG,QAAQ,QAAQ,IAAI,uBAAuB,IAAI,CAC/C,QAAQ,YAAY,OAAO,CAC3B,OAAO,OAAO,SAAS;AACtB,qBAAW,KAAK;EAChB;AACJ,IAAI,MAAM;AACV,IAAI,OAAO"}