@dune2/cli 0.5.1 → 0.5.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.
Files changed (30) hide show
  1. package/dist/{chunk-SVCF6X5K.js → chunk-2DSIJDNZ.js} +2 -2
  2. package/dist/{chunk-4BXCANQI.js → chunk-555YTWSW.js} +2 -2
  3. package/dist/{chunk-4BXCANQI.js.map → chunk-555YTWSW.js.map} +1 -1
  4. package/dist/cli.js +8 -12
  5. package/dist/cli.js.map +1 -1
  6. package/dist/{download-NS56QNEI.js → download-ZZKXRKW5.js} +6 -6
  7. package/dist/{extract-7YVZJT6N.js → extract-DGQMSBR5.js} +7 -10
  8. package/dist/extract-DGQMSBR5.js.map +1 -0
  9. package/dist/{generateApi-TMEDGY2V.js → generateApi-5E55UD37.js} +10 -10
  10. package/dist/generateApi-5E55UD37.js.map +1 -0
  11. package/dist/index.d.ts +1 -6
  12. package/dist/index.js +2 -7
  13. package/dist/{initConfig-DHDY6MWT.js → initConfig-QRYGDQR7.js} +3 -3
  14. package/dist/{namespace-IDUS7AMO.js → namespace-4FUD4GZ2.js} +3 -3
  15. package/dist/normalizeConfig.js +1 -1
  16. package/dist/{upload-WCPUDBKZ.js → upload-OUXQZAW4.js} +6 -6
  17. package/package.json +4 -5
  18. package/dist/chunk-BSWWGPSV.js +0 -60
  19. package/dist/chunk-BSWWGPSV.js.map +0 -1
  20. package/dist/downloadFromPlatform-6ZUZTZAX.js +0 -11
  21. package/dist/downloadFromPlatform-6ZUZTZAX.js.map +0 -1
  22. package/dist/extract-7YVZJT6N.js.map +0 -1
  23. package/dist/generateApi-TMEDGY2V.js.map +0 -1
  24. package/dist/uploadToTranslatePlatform-GK4VUXIU.js +0 -45
  25. package/dist/uploadToTranslatePlatform-GK4VUXIU.js.map +0 -1
  26. /package/dist/{chunk-SVCF6X5K.js.map → chunk-2DSIJDNZ.js.map} +0 -0
  27. /package/dist/{download-NS56QNEI.js.map → download-ZZKXRKW5.js.map} +0 -0
  28. /package/dist/{initConfig-DHDY6MWT.js.map → initConfig-QRYGDQR7.js.map} +0 -0
  29. /package/dist/{namespace-IDUS7AMO.js.map → namespace-4FUD4GZ2.js.map} +0 -0
  30. /package/dist/{upload-WCPUDBKZ.js.map → upload-OUXQZAW4.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  normalizeConfig
3
- } from "./chunk-4BXCANQI.js";
3
+ } from "./chunk-555YTWSW.js";
4
4
 
5
5
  // src/shared/config/index.ts
6
6
  import JoyCon from "joycon";
@@ -19,4 +19,4 @@ export {
19
19
  configName,
20
20
  getConfig
21
21
  };
22
- //# sourceMappingURL=chunk-SVCF6X5K.js.map
22
+ //# sourceMappingURL=chunk-2DSIJDNZ.js.map
@@ -22,7 +22,7 @@ function resolveSheetId(str) {
22
22
  return str;
23
23
  }
24
24
  const url = new URL(str);
25
- const matched = match("/spreadsheets/d/:id*", {
25
+ const matched = match("/spreadsheets/d{/:id}*", {
26
26
  decode: decodeURIComponent
27
27
  })(url.pathname);
28
28
  return matched ? (_a = matched.params.id) == null ? void 0 : _a[0] : str;
@@ -85,4 +85,4 @@ export {
85
85
  normalizeConfig,
86
86
  apiConfigNormalizer
87
87
  };
88
- //# sourceMappingURL=chunk-4BXCANQI.js.map
88
+ //# sourceMappingURL=chunk-555YTWSW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/config/normalizeConfig.ts","../src/shared/defaultJsonSorter.ts","../src/shared/resolveSheetId.ts"],"sourcesContent":["import _ from \"lodash\";\nimport path from \"path\";\nimport { defaultJsonSorter } from \"../defaultJsonSorter\";\nimport { resolveSheetId } from \"../resolveSheetId\";\nimport { ApiConfig, Config, I18nConfig } from \"./types\";\nexport function normalizeConfig(config: Config): Config {\n const defaultI18nConfig: I18nConfig = {\n i18nDir: \"./src/i18n\",\n i18nFileName: \"{locale}.i18n.json\",\n position: { key: \"B\", zh: \"C\", en: \"D\", in: \"E\" },\n parseStartIndex: 2,\n };\n config.cwd ??= process.cwd();\n config.cacheDir ??= path.join(config.cwd, \"node_modules/.cache/dune-cli\");\n\n //#region i18n 配置标准化\n if (!config.i18n || !config.i18n?.length) {\n config.i18n = [defaultI18nConfig];\n }\n\n // 格式化 i18n 配置\n config.i18n = config.i18n.map((item) => {\n item = Object.assign({}, defaultI18nConfig, item);\n item.cwd ??= config.cwd;\n item.locales = Object.keys(item.position!).filter((item) => item !== \"key\");\n item.sheetId = resolveSheetId(item.sheetId);\n item.jsonSorter = defaultJsonSorter;\n item.enabled ??= true;\n item.defaultLocale ??= \"zh\";\n\n //#region namespace\n item.namespaceSeparator ??= \".\";\n //#endregion\n\n const defaultTranslatePlatform: I18nConfig[\"translatePlatform\"] = {\n url: \"https://test-transfer.duneproject.xyz\",\n enable: !!item.translatePlatform?.project,\n };\n _.defaults(item.translatePlatform, defaultTranslatePlatform);\n return item;\n });\n //#endregion\n\n //#region api 配置标准化\n config.api ??= [];\n config.api = config.api.map(apiConfigNormalizer);\n //#endregion\n return config;\n}\nexport function apiConfigNormalizer(item: ApiConfig) {\n item.output ??= \"./src/apis\";\n // 没有配置 urlTransformer 时,给 requestFnImportPath 赋默认值\n // 优先使用 urlTransformer\n if (!item.urlTransformer) {\n item.requestFnImportPath ??= `import requestFn from '@/utils/request';`;\n }\n item.RequestBuilderImportPath ??= `import { RequestBuilder } from '@dune2/tools/rq';`;\n item.enableTs ??= true;\n item.enabled ??= true;\n item.format ??= true;\n item.responseSchemaTransformer ??= (schema) =>\n schema.properties?.data ?? schema;\n return item;\n}\n","import _ from \"lodash\";\n\n/**\n * 对 JSON 对象的键进行排序\n * @param obj 要排序的 JSON 对象\n * @returns 排序后的 JSON 对象\n */\nexport function defaultJsonSorter<T extends Record<string, any>>(obj: T) {\n const keys = Object.keys(obj);\n const sortedKeys = _.sortBy(keys); // 使用 lodash 库的 sortBy 方法对键进行排序\n const sortedObj = sortedKeys.reduce((acc, key) => {\n acc[key as keyof T] = obj[key];\n return acc;\n }, {} as T);\n\n return sortedObj as T;\n}\n","/**\n * input:\n * \"https://docs.google.com/spreadsheets/d/1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk/edit#gid=1740568548\"\n * output:\n * \"1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk\"\n * --\n * input: \"1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk\"\n * output: \"1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk\"\n */\nimport { match } from \"path-to-regexp\";\n\nexport function resolveSheetId(str?: string) {\n if (!str || !str?.startsWith(\"http\")) {\n return str;\n }\n const url = new URL(str);\n const matched = match<{ id: string[] }>(\"/spreadsheets/d/:id*\", {\n decode: decodeURIComponent,\n })(url.pathname);\n return matched ? matched.params.id?.[0] : str;\n}\n"],"mappings":";AAAA,OAAOA,QAAO;AACd,OAAO,UAAU;;;ACDjB,OAAO,OAAO;AAOP,SAAS,kBAAiD,KAAQ;AACvE,QAAM,OAAO,OAAO,KAAK,GAAG;AAC5B,QAAM,aAAa,EAAE,OAAO,IAAI;AAChC,QAAM,YAAY,WAAW,OAAO,CAAC,KAAK,QAAQ;AAChD,QAAI,GAAc,IAAI,IAAI,GAAG;AAC7B,WAAO;AAAA,EACT,GAAG,CAAC,CAAM;AAEV,SAAO;AACT;;;ACPA,SAAS,aAAa;AAEf,SAAS,eAAe,KAAc;AAX7C;AAYE,MAAI,CAAC,OAAO,EAAC,2BAAK,WAAW,UAAS;AACpC,WAAO;AAAA,EACT;AACA,QAAM,MAAM,IAAI,IAAI,GAAG;AACvB,QAAM,UAAU,MAAwB,wBAAwB;AAAA,IAC9D,QAAQ;AAAA,EACV,CAAC,EAAE,IAAI,QAAQ;AACf,SAAO,WAAU,aAAQ,OAAO,OAAf,mBAAoB,KAAK;AAC5C;;;AFfO,SAAS,gBAAgB,QAAwB;AALxD;AAME,QAAM,oBAAgC;AAAA,IACpC,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI;AAAA,IAChD,iBAAiB;AAAA,EACnB;AACA,SAAO,QAAQ,QAAQ,IAAI;AAC3B,SAAO,aAAa,KAAK,KAAK,OAAO,KAAK,8BAA8B;AAGxE,MAAI,CAAC,OAAO,QAAQ,GAAC,YAAO,SAAP,mBAAa,SAAQ;AACxC,WAAO,OAAO,CAAC,iBAAiB;AAAA,EAClC;AAGA,SAAO,OAAO,OAAO,KAAK,IAAI,CAAC,SAAS;AArB1C,QAAAC;AAsBI,WAAO,OAAO,OAAO,CAAC,GAAG,mBAAmB,IAAI;AAChD,SAAK,QAAQ,OAAO;AACpB,SAAK,UAAU,OAAO,KAAK,KAAK,QAAS,EAAE,OAAO,CAACC,UAASA,UAAS,KAAK;AAC1E,SAAK,UAAU,eAAe,KAAK,OAAO;AAC1C,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,kBAAkB;AAGvB,SAAK,uBAAuB;AAG5B,UAAM,2BAA4D;AAAA,MAChE,KAAK;AAAA,MACL,QAAQ,CAAC,GAACD,MAAA,KAAK,sBAAL,gBAAAA,IAAwB;AAAA,IACpC;AACA,IAAAE,GAAE,SAAS,KAAK,mBAAmB,wBAAwB;AAC3D,WAAO;AAAA,EACT,CAAC;AAID,SAAO,QAAQ,CAAC;AAChB,SAAO,MAAM,OAAO,IAAI,IAAI,mBAAmB;AAE/C,SAAO;AACT;AACO,SAAS,oBAAoB,MAAiB;AACnD,OAAK,WAAW;AAGhB,MAAI,CAAC,KAAK,gBAAgB;AACxB,SAAK,wBAAwB;AAAA,EAC/B;AACA,OAAK,6BAA6B;AAClC,OAAK,aAAa;AAClB,OAAK,YAAY;AACjB,OAAK,WAAW;AAChB,OAAK,8BAA8B,CAAC,WAAQ;AA5D9C;AA6DI,yBAAO,eAAP,mBAAmB,SAAQ;AAAA;AAC7B,SAAO;AACT;","names":["_","_a","item","_"]}
1
+ {"version":3,"sources":["../src/shared/config/normalizeConfig.ts","../src/shared/defaultJsonSorter.ts","../src/shared/resolveSheetId.ts"],"sourcesContent":["import _ from \"lodash\";\nimport path from \"path\";\nimport { defaultJsonSorter } from \"../defaultJsonSorter\";\nimport { resolveSheetId } from \"../resolveSheetId\";\nimport { ApiConfig, Config, I18nConfig } from \"./types\";\nexport function normalizeConfig(config: Config): Config {\n const defaultI18nConfig: I18nConfig = {\n i18nDir: \"./src/i18n\",\n i18nFileName: \"{locale}.i18n.json\",\n position: { key: \"B\", zh: \"C\", en: \"D\", in: \"E\" },\n parseStartIndex: 2,\n };\n config.cwd ??= process.cwd();\n config.cacheDir ??= path.join(config.cwd, \"node_modules/.cache/dune-cli\");\n\n //#region i18n 配置标准化\n if (!config.i18n || !config.i18n?.length) {\n config.i18n = [defaultI18nConfig];\n }\n\n // 格式化 i18n 配置\n config.i18n = config.i18n.map((item) => {\n item = Object.assign({}, defaultI18nConfig, item);\n item.cwd ??= config.cwd;\n item.locales = Object.keys(item.position!).filter((item) => item !== \"key\");\n item.sheetId = resolveSheetId(item.sheetId);\n item.jsonSorter = defaultJsonSorter;\n item.enabled ??= true;\n item.defaultLocale ??= \"zh\";\n\n //#region namespace\n item.namespaceSeparator ??= \".\";\n //#endregion\n\n const defaultTranslatePlatform: I18nConfig[\"translatePlatform\"] = {\n url: \"https://test-transfer.duneproject.xyz\",\n enable: !!item.translatePlatform?.project,\n };\n _.defaults(item.translatePlatform, defaultTranslatePlatform);\n return item;\n });\n //#endregion\n\n //#region api 配置标准化\n config.api ??= [];\n config.api = config.api.map(apiConfigNormalizer);\n //#endregion\n return config;\n}\nexport function apiConfigNormalizer(item: ApiConfig) {\n item.output ??= \"./src/apis\";\n // 没有配置 urlTransformer 时,给 requestFnImportPath 赋默认值\n // 优先使用 urlTransformer\n if (!item.urlTransformer) {\n item.requestFnImportPath ??= `import requestFn from '@/utils/request';`;\n }\n item.RequestBuilderImportPath ??= `import { RequestBuilder } from '@dune2/tools/rq';`;\n item.enableTs ??= true;\n item.enabled ??= true;\n item.format ??= true;\n item.responseSchemaTransformer ??= (schema) =>\n schema.properties?.data ?? schema;\n return item;\n}\n","import _ from \"lodash\";\n\n/**\n * 对 JSON 对象的键进行排序\n * @param obj 要排序的 JSON 对象\n * @returns 排序后的 JSON 对象\n */\nexport function defaultJsonSorter<T extends Record<string, any>>(obj: T) {\n const keys = Object.keys(obj);\n const sortedKeys = _.sortBy(keys); // 使用 lodash 库的 sortBy 方法对键进行排序\n const sortedObj = sortedKeys.reduce((acc, key) => {\n acc[key as keyof T] = obj[key];\n return acc;\n }, {} as T);\n\n return sortedObj as T;\n}\n","/**\n * input:\n * \"https://docs.google.com/spreadsheets/d/1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk/edit#gid=1740568548\"\n * output:\n * \"1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk\"\n * --\n * input: \"1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk\"\n * output: \"1C9-Dol3oO20W9_FhiVlxNsDhOaaejJIgAZYRkonGmfk\"\n */\nimport { match } from \"path-to-regexp\";\n\nexport function resolveSheetId(str?: string) {\n if (!str || !str?.startsWith(\"http\")) {\n return str;\n }\n const url = new URL(str);\n const matched = match<{ id: string[] }>(\"/spreadsheets/d{/:id}*\", {\n decode: decodeURIComponent,\n })(url.pathname);\n\n return matched ? matched.params.id?.[0] : str;\n}\n"],"mappings":";AAAA,OAAOA,QAAO;AACd,OAAO,UAAU;;;ACDjB,OAAO,OAAO;AAOP,SAAS,kBAAiD,KAAQ;AACvE,QAAM,OAAO,OAAO,KAAK,GAAG;AAC5B,QAAM,aAAa,EAAE,OAAO,IAAI;AAChC,QAAM,YAAY,WAAW,OAAO,CAAC,KAAK,QAAQ;AAChD,QAAI,GAAc,IAAI,IAAI,GAAG;AAC7B,WAAO;AAAA,EACT,GAAG,CAAC,CAAM;AAEV,SAAO;AACT;;;ACPA,SAAS,aAAa;AAEf,SAAS,eAAe,KAAc;AAX7C;AAYE,MAAI,CAAC,OAAO,EAAC,2BAAK,WAAW,UAAS;AACpC,WAAO;AAAA,EACT;AACA,QAAM,MAAM,IAAI,IAAI,GAAG;AACvB,QAAM,UAAU,MAAwB,0BAA0B;AAAA,IAChE,QAAQ;AAAA,EACV,CAAC,EAAE,IAAI,QAAQ;AAEf,SAAO,WAAU,aAAQ,OAAO,OAAf,mBAAoB,KAAK;AAC5C;;;AFhBO,SAAS,gBAAgB,QAAwB;AALxD;AAME,QAAM,oBAAgC;AAAA,IACpC,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI;AAAA,IAChD,iBAAiB;AAAA,EACnB;AACA,SAAO,QAAQ,QAAQ,IAAI;AAC3B,SAAO,aAAa,KAAK,KAAK,OAAO,KAAK,8BAA8B;AAGxE,MAAI,CAAC,OAAO,QAAQ,GAAC,YAAO,SAAP,mBAAa,SAAQ;AACxC,WAAO,OAAO,CAAC,iBAAiB;AAAA,EAClC;AAGA,SAAO,OAAO,OAAO,KAAK,IAAI,CAAC,SAAS;AArB1C,QAAAC;AAsBI,WAAO,OAAO,OAAO,CAAC,GAAG,mBAAmB,IAAI;AAChD,SAAK,QAAQ,OAAO;AACpB,SAAK,UAAU,OAAO,KAAK,KAAK,QAAS,EAAE,OAAO,CAACC,UAASA,UAAS,KAAK;AAC1E,SAAK,UAAU,eAAe,KAAK,OAAO;AAC1C,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,kBAAkB;AAGvB,SAAK,uBAAuB;AAG5B,UAAM,2BAA4D;AAAA,MAChE,KAAK;AAAA,MACL,QAAQ,CAAC,GAACD,MAAA,KAAK,sBAAL,gBAAAA,IAAwB;AAAA,IACpC;AACA,IAAAE,GAAE,SAAS,KAAK,mBAAmB,wBAAwB;AAC3D,WAAO;AAAA,EACT,CAAC;AAID,SAAO,QAAQ,CAAC;AAChB,SAAO,MAAM,OAAO,IAAI,IAAI,mBAAmB;AAE/C,SAAO;AACT;AACO,SAAS,oBAAoB,MAAiB;AACnD,OAAK,WAAW;AAGhB,MAAI,CAAC,KAAK,gBAAgB;AACxB,SAAK,wBAAwB;AAAA,EAC/B;AACA,OAAK,6BAA6B;AAClC,OAAK,aAAa;AAClB,OAAK,YAAY;AACjB,OAAK,WAAW;AAChB,OAAK,8BAA8B,CAAC,WAAQ;AA5D9C;AA6DI,yBAAO,eAAP,mBAAmB,SAAQ;AAAA;AAC7B,SAAO;AACT;","names":["_","_a","item","_"]}
package/dist/cli.js CHANGED
@@ -4,35 +4,31 @@ import {
4
4
  } from "./chunk-UGSBKD2I.js";
5
5
 
6
6
  // package.json
7
- var version = "0.5.1";
7
+ var version = "0.5.2";
8
8
 
9
9
  // src/cli.ts
10
10
  cli.command("download", "\u751F\u6210\u7FFB\u8BD1\u6587\u4EF6").example("dune download").action(async () => {
11
- const { download } = await import("./download-NS56QNEI.js");
11
+ const { download } = await import("./download-ZZKXRKW5.js");
12
12
  await download();
13
13
  });
14
14
  cli.command("extract", "\u63D0\u53D6\u4EE3\u7801\u4E2D\u7684\u6587\u6848").option("--deleteUnused", "\u5220\u9664\u672A\u4F7F\u7528\u7684\u6587\u6848").example("dune extract").action(async (args) => {
15
- const { extract } = await import("./extract-7YVZJT6N.js");
15
+ const { extract } = await import("./extract-DGQMSBR5.js");
16
16
  await extract(args);
17
17
  });
18
18
  cli.command("namespaceSwc", "\u6DFB\u52A0 namespace \u524D\u7F00\uFF0C\u7531 swc \u9A71\u52A8").example("dune namespaceSwc").action(async () => {
19
- const { namespace } = await import("./namespace-IDUS7AMO.js");
19
+ const { namespace } = await import("./namespace-4FUD4GZ2.js");
20
20
  return namespace({ mode: "swc" });
21
21
  });
22
22
  cli.command("namespaceReg", "\u6DFB\u52A0 namespace \u524D\u7F00\uFF0C\u7531\u6B63\u5219\u9A71\u52A8").example("dune namespaceReg").action(async () => {
23
- const { namespace } = await import("./namespace-IDUS7AMO.js");
23
+ const { namespace } = await import("./namespace-4FUD4GZ2.js");
24
24
  return namespace({ mode: "reg" });
25
25
  });
26
26
  cli.command("upload", "\u4E0A\u4F20\u7FFB\u8BD1\u6587\u4EF6").example("dune upload").action(async (args) => {
27
- const { upload } = await import("./upload-WCPUDBKZ.js");
27
+ const { upload } = await import("./upload-OUXQZAW4.js");
28
28
  await upload();
29
29
  });
30
- cli.command("downloadFromPlatform", "\u4ECE\u7FFB\u8BD1\u5E73\u53F0\u4E0B\u8F7D\u6587\u4EF6").example("dune downloadFromPlatform").action(async () => {
31
- const { downloadFromPlatform } = await import("./downloadFromPlatform-6ZUZTZAX.js");
32
- await downloadFromPlatform();
33
- });
34
30
  cli.command("generateApi", "\u751F\u6210 api \u6587\u4EF6").example("dune generateApi").action(async () => {
35
- const { generateApi } = await import("./generateApi-TMEDGY2V.js");
31
+ const { generateApi } = await import("./generateApi-5E55UD37.js");
36
32
  await generateApi();
37
33
  });
38
34
  cli.command("login", "\u767B\u5F55").action(async () => {
@@ -56,7 +52,7 @@ exp : ${new Date(googleAuth.tokens.expiry_date).toLocaleString()}
56
52
  }
57
53
  });
58
54
  cli.command("init", "\u521D\u59CB\u5316\u914D\u7F6E\u6587\u4EF6").example("dune init").action(async () => {
59
- const { initConfig } = await import("./initConfig-DHDY6MWT.js");
55
+ const { initConfig } = await import("./initConfig-QRYGDQR7.js");
60
56
  await initConfig();
61
57
  });
62
58
  cli.command("interactive", "\u4EA4\u4E92\u5F0F\u64CD\u4F5C").example("dune interactive").alias("i").action(async (args) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/cli.ts"],"sourcesContent":["{\n \"name\": \"@dune2/cli\",\n \"version\": \"0.5.1\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/liaoyinglong/next-tools.git\",\n \"directory\": \"packages/cli\"\n },\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\"\n },\n \"./cli\": {\n \"import\": \"./dist/cli.js\"\n },\n \"./normalizeConfig\": {\n \"import\": \"./dist/normalizeConfig.js\"\n },\n \"./prettier\": {\n \"import\": \"./dist/prettier.js\",\n \"require\": \"./dist/prettier.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"dune\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"shx rm -rf ./dist && tsup --splitting\",\n \"dev\": \"pnpm run build --watch\",\n \"lint\": \"tsc --diagnostics --noEmit\",\n \"test\": \"vitest run\",\n \"test:u\": \"vitest -u\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@dune2/wasm\": \"workspace:*\",\n \"axios\": \"^1.6.2\",\n \"cac\": \"^6.7.14\",\n \"cli-table3\": \"^0.6.3\",\n \"connect\": \"^3.7.0\",\n \"debug\": \"^4.3.4\",\n \"enquirer\": \"^2.3.6\",\n \"fs-extra\": \"^11.2.0\",\n \"globby\": \"^14.0.1\",\n \"googleapis\": \"^108.0.0\",\n \"joycon\": \"^3.1.1\",\n \"json-schema-to-typescript\": \"^14.0.4\",\n \"lodash\": \"^4.17.21\",\n \"open\": \"^10.1.0\",\n \"p-map\": \"^7.0.2\",\n \"path-to-regexp\": \"^6.2.1\",\n \"picocolors\": \"^1.0.0\"\n },\n \"devDependencies\": {\n \"@types/debug\": \"^4.1.7\",\n \"@types/lodash\": \"^4.14.186\",\n \"gaxios\": \"*\",\n \"google-auth-library\": \"*\",\n \"openapi-types\": \"^12.0.2\",\n \"prettier\": \"^3\",\n \"tsup\": \"8\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","#!/usr/bin/env node\nimport { version } from \"../package.json\";\nimport { cli } from \"./shared\";\n//#region 翻译相关\n\ncli\n .command(\"download\", \"生成翻译文件\")\n .example(\"dune download\")\n .action(async () => {\n const { download } = await import(\"./commands/download\");\n await download();\n });\ncli\n .command(\"extract\", \"提取代码中的文案\")\n .option(\"--deleteUnused\", \"删除未使用的文案\")\n .example(\"dune extract\")\n .action(async (args) => {\n const { extract } = await import(\"./commands/extract\");\n await extract(args);\n });\n\ncli\n .command(\"namespaceSwc\", \"添加 namespace 前缀,由 swc 驱动\")\n .example(\"dune namespaceSwc\")\n .action(async () => {\n const { namespace } = await import(\"./commands/namespace\");\n return namespace({ mode: \"swc\" });\n });\n\ncli\n .command(\"namespaceReg\", \"添加 namespace 前缀,由正则驱动\")\n .example(\"dune namespaceReg\")\n .action(async () => {\n const { namespace } = await import(\"./commands/namespace\");\n return namespace({ mode: \"reg\" });\n });\n\ncli\n .command(\"upload\", \"上传翻译文件\")\n .example(\"dune upload\")\n .action(async (args) => {\n const { upload } = await import(\"./commands/upload\");\n await upload();\n });\n\ncli\n .command(\"downloadFromPlatform\", \"从翻译平台下载文件\")\n .example(\"dune downloadFromPlatform\")\n .action(async () => {\n const { downloadFromPlatform } = await import(\n \"./commands/downloadFromPlatform\"\n );\n await downloadFromPlatform();\n });\n//#endregion\n\n//#region api 相关\ncli\n .command(\"generateApi\", \"生成 api 文件\")\n .example(\"dune generateApi\")\n .action(async () => {\n const { generateApi } = await import(\"./commands/generateApi\");\n await generateApi();\n });\n//#endregion\n\n//#region user 相关\ncli.command(\"login\", \"登录\").action(async () => {\n const { googleAuth } = await import(\"./shared/google/auth\");\n await googleAuth.initCredentials();\n});\ncli.command(\"logout\", \"退出\").action(async () => {\n const { googleAuth } = await import(\"./shared/google/auth\");\n await googleAuth.removeCredentials();\n});\ncli.command(\"userInfo\", \"用户信息\").action(async () => {\n const { googleAuth } = await import(\"./shared/google/auth\");\n if (googleAuth.tokens) {\n console.log(`\\\nemail: ${googleAuth.tokens.email}\naud : ${googleAuth.tokens.aud}\nexp : ${new Date(googleAuth.tokens.expiry_date).toLocaleString()}\n`);\n } else {\n console.log(\"未登录\");\n console.log(`运行 dune login 登录`);\n }\n});\n//#endregion\n\ncli\n .command(\"init\", \"初始化配置文件\")\n .example(\"dune init\")\n .action(async () => {\n const { initConfig } = await import(\"./commands/initConfig\");\n await initConfig();\n });\n\ncli\n .command(\"interactive\", \"交互式操作\")\n .example(\"dune interactive\")\n .alias(\"i\")\n .action(async (args) => {\n const { interactive } = await import(\"./commands/interactive\");\n await interactive(args);\n });\n\n// make default command run interactive\ncli.command(\"\").action(async (args) => {\n const { interactive } = await import(\"./commands/interactive\");\n await interactive(args);\n});\n\ncli.version(version);\ncli.help();\n\n(async () => {\n try {\n // Parse CLI args without running the command\n cli.parse(process.argv, { run: false });\n // Run the command yourself\n // You only need `await` when your command action returns a Promise\n await cli.runMatchedCommand();\n } catch (error) {\n // Handle error here..\n // e.g.\n // console.error(error.stack)\n // process.exit(1)\n }\n})();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../package.json","../src/cli.ts"],"sourcesContent":["{\n \"name\": \"@dune2/cli\",\n \"version\": \"0.5.2\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/liaoyinglong/next-tools.git\",\n \"directory\": \"packages/cli\"\n },\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\"\n },\n \"./cli\": {\n \"import\": \"./dist/cli.js\"\n },\n \"./normalizeConfig\": {\n \"import\": \"./dist/normalizeConfig.js\"\n },\n \"./prettier\": {\n \"import\": \"./dist/prettier.js\",\n \"require\": \"./dist/prettier.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"dune\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"shx rm -rf ./dist && tsup --splitting\",\n \"dev\": \"pnpm run build --watch\",\n \"lint\": \"tsc --diagnostics --noEmit\",\n \"test\": \"vitest run\",\n \"test:u\": \"vitest -u\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^10.1.0\",\n \"@dune2/wasm\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"cli-table3\": \"^0.6.3\",\n \"connect\": \"^3.7.0\",\n \"debug\": \"^4.3.4\",\n \"enquirer\": \"^2.3.6\",\n \"fs-extra\": \"^11.2.0\",\n \"globby\": \"^14.0.1\",\n \"googleapis\": \"108.0.0\",\n \"joycon\": \"^3.1.1\",\n \"json-schema-to-typescript\": \"15.0.0\",\n \"lodash\": \"^4.17.21\",\n \"open\": \"^10.1.0\",\n \"p-map\": \"^7.0.2\",\n \"path-to-regexp\": \"7.1.0\",\n \"picocolors\": \"^1.0.0\"\n },\n \"devDependencies\": {\n \"@types/debug\": \"^4.1.7\",\n \"@types/lodash\": \"^4.14.186\",\n \"gaxios\": \"*\",\n \"google-auth-library\": \"*\",\n \"openapi-types\": \"^12.0.2\",\n \"prettier\": \"^3\",\n \"tsup\": \"8\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","#!/usr/bin/env node\nimport { version } from \"../package.json\";\nimport { cli } from \"./shared\";\n//#region 翻译相关\n\ncli\n .command(\"download\", \"生成翻译文件\")\n .example(\"dune download\")\n .action(async () => {\n const { download } = await import(\"./commands/download\");\n await download();\n });\ncli\n .command(\"extract\", \"提取代码中的文案\")\n .option(\"--deleteUnused\", \"删除未使用的文案\")\n .example(\"dune extract\")\n .action(async (args) => {\n const { extract } = await import(\"./commands/extract\");\n await extract(args);\n });\n\ncli\n .command(\"namespaceSwc\", \"添加 namespace 前缀,由 swc 驱动\")\n .example(\"dune namespaceSwc\")\n .action(async () => {\n const { namespace } = await import(\"./commands/namespace\");\n return namespace({ mode: \"swc\" });\n });\n\ncli\n .command(\"namespaceReg\", \"添加 namespace 前缀,由正则驱动\")\n .example(\"dune namespaceReg\")\n .action(async () => {\n const { namespace } = await import(\"./commands/namespace\");\n return namespace({ mode: \"reg\" });\n });\n\ncli\n .command(\"upload\", \"上传翻译文件\")\n .example(\"dune upload\")\n .action(async (args) => {\n const { upload } = await import(\"./commands/upload\");\n await upload();\n });\n\n//#endregion\n\n//#region api 相关\ncli\n .command(\"generateApi\", \"生成 api 文件\")\n .example(\"dune generateApi\")\n .action(async () => {\n const { generateApi } = await import(\"./commands/generateApi\");\n await generateApi();\n });\n//#endregion\n\n//#region user 相关\ncli.command(\"login\", \"登录\").action(async () => {\n const { googleAuth } = await import(\"./shared/google/auth\");\n await googleAuth.initCredentials();\n});\ncli.command(\"logout\", \"退出\").action(async () => {\n const { googleAuth } = await import(\"./shared/google/auth\");\n await googleAuth.removeCredentials();\n});\ncli.command(\"userInfo\", \"用户信息\").action(async () => {\n const { googleAuth } = await import(\"./shared/google/auth\");\n if (googleAuth.tokens) {\n console.log(`\\\nemail: ${googleAuth.tokens.email}\naud : ${googleAuth.tokens.aud}\nexp : ${new Date(googleAuth.tokens.expiry_date).toLocaleString()}\n`);\n } else {\n console.log(\"未登录\");\n console.log(`运行 dune login 登录`);\n }\n});\n//#endregion\n\ncli\n .command(\"init\", \"初始化配置文件\")\n .example(\"dune init\")\n .action(async () => {\n const { initConfig } = await import(\"./commands/initConfig\");\n await initConfig();\n });\n\ncli\n .command(\"interactive\", \"交互式操作\")\n .example(\"dune interactive\")\n .alias(\"i\")\n .action(async (args) => {\n const { interactive } = await import(\"./commands/interactive\");\n await interactive(args);\n });\n\n// make default command run interactive\ncli.command(\"\").action(async (args) => {\n const { interactive } = await import(\"./commands/interactive\");\n await interactive(args);\n});\n\ncli.version(version);\ncli.help();\n\n(async () => {\n try {\n // Parse CLI args without running the command\n cli.parse(process.argv, { run: false });\n // Run the command yourself\n // You only need `await` when your command action returns a Promise\n await cli.runMatchedCommand();\n } catch (error) {\n // Handle error here..\n // e.g.\n // console.error(error.stack)\n // process.exit(1)\n }\n})();\n"],"mappings":";;;;;;AAEE,cAAW;;;ACGb,IACG,QAAQ,YAAY,sCAAQ,EAC5B,QAAQ,eAAe,EACvB,OAAO,YAAY;AAClB,QAAM,EAAE,SAAS,IAAI,MAAM,OAAO,wBAAqB;AACvD,QAAM,SAAS;AACjB,CAAC;AACH,IACG,QAAQ,WAAW,kDAAU,EAC7B,OAAO,kBAAkB,kDAAU,EACnC,QAAQ,cAAc,EACtB,OAAO,OAAO,SAAS;AACtB,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,uBAAoB;AACrD,QAAM,QAAQ,IAAI;AACpB,CAAC;AAEH,IACG,QAAQ,gBAAgB,kEAA0B,EAClD,QAAQ,mBAAmB,EAC3B,OAAO,YAAY;AAClB,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,yBAAsB;AACzD,SAAO,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,CAAC;AAEH,IACG,QAAQ,gBAAgB,yEAAuB,EAC/C,QAAQ,mBAAmB,EAC3B,OAAO,YAAY;AAClB,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,yBAAsB;AACzD,SAAO,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,CAAC;AAEH,IACG,QAAQ,UAAU,sCAAQ,EAC1B,QAAQ,aAAa,EACrB,OAAO,OAAO,SAAS;AACtB,QAAM,EAAE,OAAO,IAAI,MAAM,OAAO,sBAAmB;AACnD,QAAM,OAAO;AACf,CAAC;AAKH,IACG,QAAQ,eAAe,+BAAW,EAClC,QAAQ,kBAAkB,EAC1B,OAAO,YAAY;AAClB,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,2BAAwB;AAC7D,QAAM,YAAY;AACpB,CAAC;AAIH,IAAI,QAAQ,SAAS,cAAI,EAAE,OAAO,YAAY;AAC5C,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,oBAAsB;AAC1D,QAAM,WAAW,gBAAgB;AACnC,CAAC;AACD,IAAI,QAAQ,UAAU,cAAI,EAAE,OAAO,YAAY;AAC7C,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,oBAAsB;AAC1D,QAAM,WAAW,kBAAkB;AACrC,CAAC;AACD,IAAI,QAAQ,YAAY,0BAAM,EAAE,OAAO,YAAY;AACjD,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,oBAAsB;AAC1D,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAI,UACP,WAAW,OAAO,KAAK;AAAA,SACvB,WAAW,OAAO,GAAG;AAAA,SACrB,IAAI,KAAK,WAAW,OAAO,WAAW,EAAE,eAAe,CAAC;AAAA,CAChE;AAAA,EACC,OAAO;AACL,YAAQ,IAAI,oBAAK;AACjB,YAAQ,IAAI,sCAAkB;AAAA,EAChC;AACF,CAAC;AAGD,IACG,QAAQ,QAAQ,4CAAS,EACzB,QAAQ,WAAW,EACnB,OAAO,YAAY;AAClB,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,0BAAuB;AAC3D,QAAM,WAAW;AACnB,CAAC;AAEH,IACG,QAAQ,eAAe,gCAAO,EAC9B,QAAQ,kBAAkB,EAC1B,MAAM,GAAG,EACT,OAAO,OAAO,SAAS;AACtB,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,2BAAwB;AAC7D,QAAM,YAAY,IAAI;AACxB,CAAC;AAGH,IAAI,QAAQ,EAAE,EAAE,OAAO,OAAO,SAAS;AACrC,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,2BAAwB;AAC7D,QAAM,YAAY,IAAI;AACxB,CAAC;AAED,IAAI,QAAQ,OAAO;AACnB,IAAI,KAAK;AAAA,CAER,YAAY;AACX,MAAI;AAEF,QAAI,MAAM,QAAQ,MAAM,EAAE,KAAK,MAAM,CAAC;AAGtC,UAAM,IAAI,kBAAkB;AAAA,EAC9B,SAAS,OAAO;AAAA,EAKhB;AACF,GAAG;","names":[]}
@@ -3,16 +3,16 @@ import {
3
3
  } from "./chunk-IKJLPHF7.js";
4
4
  import "./chunk-6UFZ6KLX.js";
5
5
  import "./chunk-KNC7XY4Z.js";
6
- import {
7
- promptI18nConfigEnable
8
- } from "./chunk-2SEEW5WZ.js";
9
6
  import {
10
7
  I18nData
11
8
  } from "./chunk-ADQ6JLT6.js";
9
+ import {
10
+ promptI18nConfigEnable
11
+ } from "./chunk-2SEEW5WZ.js";
12
12
  import {
13
13
  getConfig
14
- } from "./chunk-SVCF6X5K.js";
15
- import "./chunk-4BXCANQI.js";
14
+ } from "./chunk-2DSIJDNZ.js";
15
+ import "./chunk-555YTWSW.js";
16
16
  import {
17
17
  createLogger
18
18
  } from "./chunk-UGSBKD2I.js";
@@ -46,4 +46,4 @@ async function download() {
46
46
  export {
47
47
  download
48
48
  };
49
- //# sourceMappingURL=download-NS56QNEI.js.map
49
+ //# sourceMappingURL=download-ZZKXRKW5.js.map
@@ -1,13 +1,13 @@
1
- import {
2
- promptI18nConfigEnable
3
- } from "./chunk-2SEEW5WZ.js";
4
1
  import {
5
2
  I18nData
6
3
  } from "./chunk-ADQ6JLT6.js";
4
+ import {
5
+ promptI18nConfigEnable
6
+ } from "./chunk-2SEEW5WZ.js";
7
7
  import {
8
8
  getConfig
9
- } from "./chunk-SVCF6X5K.js";
10
- import "./chunk-4BXCANQI.js";
9
+ } from "./chunk-2DSIJDNZ.js";
10
+ import "./chunk-555YTWSW.js";
11
11
  import {
12
12
  createLogger
13
13
  } from "./chunk-UGSBKD2I.js";
@@ -84,10 +84,7 @@ async function extract(opts) {
84
84
  console.log(pc.bold("\u4EE5\u4E0B\u672A\u80FD\u6210\u529F\u63D0\u53D6\u7684\u6587\u6848\uFF0C\u8BF7\u624B\u52A8\u5904\u7406\uFF1A"));
85
85
  console.log(errMsgs.join(os.EOL));
86
86
  }
87
- I18nData.printStatistic("\u63D0\u53D6\u7ED3\u679C: ", i18nDataArr);
88
- await import("./uploadToTranslatePlatform-GK4VUXIU.js").then(
89
- (mod) => mod.uploadToTranslatePlatform(configItem, i18nDataArr)
90
- );
87
+ I18nData.printStatistic("\u63D0\u53D6\u7ED3\u679C\uFF1A", i18nDataArr);
91
88
  }
92
89
  }
93
90
  async function saveExtractedMetaData(config, extractedI18nDataMap) {
@@ -113,4 +110,4 @@ async function saveExtractedMetaData(config, extractedI18nDataMap) {
113
110
  export {
114
111
  extract
115
112
  };
116
- //# sourceMappingURL=extract-7YVZJT6N.js.map
113
+ //# sourceMappingURL=extract-DGQMSBR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/extract/index.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport { globby } from \"globby\";\nimport os from \"os\";\nimport pMap from \"p-map\";\nimport path from \"path\";\nimport pc from \"picocolors\";\nimport { createLogger } from \"../../shared\";\nimport { getConfig, I18nConfig } from \"../../shared/config\";\nimport { ExtractedMap, I18nData } from \"../../shared/i18nData\";\nimport { promptI18nConfigEnable } from \"../../shared/promptConfigEnable\";\n\nconst log = createLogger(\"extract\");\n\n/**\n * 提取文案\n */\nexport async function extract(opts?: { deleteUnused: boolean }) {\n const config = await getConfig();\n const { extract } = await import(\"@dune2/wasm\");\n\n let i18nConfigs = await promptI18nConfigEnable(\n config.i18n?.filter((item) => !item.disableExtract),\n );\n\n // 这是使得任务串行,方便看日志\n for (const configItem of i18nConfigs) {\n const files = await globby(\n [\n `./src/**/**.{js,jsx,ts,tsx}`,\n \"!**/node_modules/**\",\n \"!**.d.ts\",\n \"!**/.next/**\",\n \"!**/out/**\",\n ].concat(configItem.include ?? []),\n { cwd: configItem.cwd },\n );\n log.info(\"预计共解析 %s 个文件\", pc.green(files.length));\n let errMsgs: string[] = [];\n const extractedI18nDataMap: ExtractedMap = new Map();\n\n await pMap(\n files,\n async (file) => {\n const content = await fs.readFile(file, \"utf-8\");\n const res = await extract(content, file);\n if (res.data.size) {\n log.info(\n \"从 %s 中提取到 %s 条文案\",\n pc.dim(file),\n pc.green(res.data.size),\n );\n res.data.forEach((value, key) => {\n let cur = extractedI18nDataMap.get(key)!;\n const hasCache = !!cur;\n if (!hasCache) {\n cur = { ...value, files: [] };\n }\n cur.files.push(\n path.resolve(file) + \":\" + value.line + \":\" + value.column,\n );\n // 优先使用 提取出来的文案\n cur.messages = value.messages || cur.messages;\n\n if (!hasCache) {\n extractedI18nDataMap.set(key, cur);\n }\n });\n }\n if (res.errMsg) {\n errMsgs.push(res.errMsg);\n }\n },\n { concurrency: 20 },\n );\n\n await saveExtractedMetaData(configItem, extractedI18nDataMap);\n\n const i18nDataArr = await pMap(configItem.locales ?? [], async (locale) => {\n const i18nData = new I18nData(locale, configItem, opts?.deleteUnused);\n await i18nData.updateByExtractedData(extractedI18nDataMap);\n await i18nData.saveToDisk();\n return i18nData;\n });\n if (errMsgs.length) {\n console.log(pc.bold(\"以下未能成功提取的文案,请手动处理:\"));\n console.log(errMsgs.join(os.EOL));\n }\n I18nData.printStatistic(\"提取结果:\", i18nDataArr);\n }\n}\n\n/**\n * 保存相关的提取信息\n */\nasync function saveExtractedMetaData(\n config: I18nConfig,\n extractedI18nDataMap: ExtractedMap,\n) {\n const { i18nDir } = config;\n // case:\n // input: \"./src/i18n\"\n // output: \"src_i18n.extractedLog.json\"\n const prefix = i18nDir!.replace(\"./\", \"\").replace(/\\//g, \"_\");\n const filename = `${prefix}.extractedLog.json`;\n\n const metaDataJsonPath = path.join(i18nDir!, filename);\n\n await fs.ensureFile(metaDataJsonPath);\n\n // extractedI18nDataMap 是个 Map 需要转成换 json\n let data = Array.from(extractedI18nDataMap.entries()).map(\n ([key, value]) => value,\n );\n // 按照 id 排序\n data = data.sort((a, b) => {\n return a.id.localeCompare(b.id);\n });\n\n await fs.writeJSON(\n metaDataJsonPath,\n\n data,\n {\n spaces: 2,\n },\n );\n}\n"],"mappings":"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","names":["extract"]}
@@ -6,8 +6,8 @@ import {
6
6
  } from "./chunk-2SEEW5WZ.js";
7
7
  import {
8
8
  getConfig
9
- } from "./chunk-SVCF6X5K.js";
10
- import "./chunk-4BXCANQI.js";
9
+ } from "./chunk-2DSIJDNZ.js";
10
+ import "./chunk-555YTWSW.js";
11
11
  import {
12
12
  createLogger
13
13
  } from "./chunk-UGSBKD2I.js";
@@ -25,7 +25,7 @@ async function generateApi() {
25
25
  const config = await getConfig();
26
26
  const apiConfigs = await promptApiConfigEnable(config.api);
27
27
  for (const apiConfig of apiConfigs) {
28
- log.info(`\u6E05\u9664\u65E7\u7684api\u6587\u4EF6: ${apiConfig.output}`);
28
+ log.info(`\u6E05\u9664\u65E7\u7684 api \u6587\u4EF6\uFF1A${apiConfig.output}`);
29
29
  await fs.emptydir(apiConfig.output);
30
30
  }
31
31
  for (const apiConfig of apiConfigs) {
@@ -116,9 +116,9 @@ async function generateApiRequestCode(options) {
116
116
  }
117
117
  code.push(builderCode);
118
118
  if (apiConfig.enableTs) {
119
- const isGenrateFieldsMap = ["post", "put"].includes(method);
119
+ const isGenerateFieldsMap = ["post", "put"].includes(method);
120
120
  const [requestParamsTypeCode, responseParamsTypeCode] = await Promise.all([
121
- compileRequestParams(operationObject, isGenrateFieldsMap),
121
+ compileRequestParams(operationObject, isGenerateFieldsMap),
122
122
  compileResponseParams(operationObject, apiConfig)
123
123
  ]);
124
124
  code.push(`
@@ -127,11 +127,11 @@ export namespace ${requestBuilderName} {
127
127
 
128
128
  ${responseParamsTypeCode}
129
129
  };`);
130
- if (isGenrateFieldsMap && !_.isEmpty(requestParamsTypeCode.fieldsMap)) {
130
+ if (isGenerateFieldsMap && !_.isEmpty(requestParamsTypeCode.fieldsMap)) {
131
131
  code.push(`
132
132
  export const ${requestBuilderName}FieldsMap = ${JSON.stringify(
133
133
  requestParamsTypeCode.fieldsMap
134
- )}
134
+ )} as const
135
135
  `);
136
136
  }
137
137
  }
@@ -237,13 +237,13 @@ async function compileResponseParams(operationObject, apiConfig) {
237
237
  code += `${os.EOL}export type ResultItem = Res['result'][0]`;
238
238
  }
239
239
  } catch (e) {
240
- log.error("\u8F6C\u6362\u54CD\u5E94\u53C2\u6570\u7C7B\u578B\u5931\u8D25, \u8BF7\u68C0\u67E5 %o", {
240
+ log.error("\u8F6C\u6362\u54CD\u5E94\u53C2\u6570\u7C7B\u578B\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5 %o", {
241
241
  summary: operationObject.summary,
242
242
  error: e.message
243
243
  });
244
244
  }
245
245
  } else {
246
- log.error("responseSchemaTransformer \u8FD4\u56DE\u503C\u4E3A\u7A7A, \u8BF7\u68C0\u67E5");
246
+ log.error("responseSchemaTransformer \u8FD4\u56DE\u503C\u4E3A\u7A7A\uFF0C\u8BF7\u68C0\u67E5");
247
247
  }
248
248
  }
249
249
  return code ? code : "export type Res = any;";
@@ -269,4 +269,4 @@ export {
269
269
  generateApiRequestCode,
270
270
  markCircularToRef
271
271
  };
272
- //# sourceMappingURL=generateApi-TMEDGY2V.js.map
272
+ //# sourceMappingURL=generateApi-5E55UD37.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/generateApi/index.ts"],"sourcesContent":["import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport fs from \"fs-extra\";\nimport { compile } from \"json-schema-to-typescript\";\nimport _ from \"lodash\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport * as os from \"os\";\nimport pMap from \"p-map\";\nimport path from \"path\";\nimport { createLogger } from \"../../shared\";\nimport { ApiConfig, getConfig } from \"../../shared/config\";\nimport { formatFile } from \"../../shared/formatFile\";\nimport { promptApiConfigEnable } from \"../../shared/promptConfigEnable\";\n\nconst log = createLogger(\"generateApi\");\n\nexport async function generateApi() {\n const config = await getConfig();\n const apiConfigs = await promptApiConfigEnable(config.api);\n\n for (const apiConfig of apiConfigs) {\n log.info(`清除旧的 api 文件:${apiConfig.output}`);\n await fs.emptydir(apiConfig.output!);\n }\n\n for (const apiConfig of apiConfigs) {\n log.info(\"开始解析 %s\", apiConfig.swaggerJSONPath);\n const parsed = (await SwaggerParser.dereference(apiConfig.swaggerJSONPath, {\n resolve: {\n http: {\n timeout: 30 * 1000,\n },\n },\n })) as OpenAPIV3.Document;\n\n await pMap(Object.entries(parsed.paths), async ([url, pathItemObject]) => {\n log.info(\"开始生成 %s\", url);\n if (pathItemObject) {\n await pMap(\n [\"get\", \"put\", \"post\", \"delete\", \"patch\"],\n async (method) => {\n const operationObject = pathItemObject[method];\n if (operationObject) {\n const code = await generateApiRequestCode({\n url: url,\n method: method,\n operationObject: operationObject,\n apiConfig,\n });\n const outputPath = path\n .join(\n apiConfig.output!,\n url,\n apiConfig.enableTs ? `${method}.ts` : `${method}.js`,\n )\n .replace(/:/g, \"_\");\n await fs.ensureFile(outputPath);\n await fs.writeFile(outputPath, code);\n }\n },\n );\n }\n });\n\n if (apiConfig.format) {\n await formatFile(apiConfig.output!);\n }\n }\n\n log.info(\"generateApi Done\");\n}\n\n/**\n * 根据请求方法,生成请求代码\n */\nexport async function generateApiRequestCode(options: {\n url: string;\n method: string;\n operationObject: OpenAPIV3.OperationObject;\n apiConfig: ApiConfig;\n}): Promise<string> {\n const { method, operationObject, apiConfig } = options;\n\n const url = (() => {\n if (typeof apiConfig.urlTransformer === \"string\") {\n return `${apiConfig.urlTransformer}${options.url}`;\n }\n if (typeof apiConfig.urlTransformer === \"function\") {\n return apiConfig.urlTransformer(options.url);\n }\n return options.url;\n })();\n\n const seeUrl = apiConfig.swaggerUiUrl\n ? `${apiConfig.swaggerUiUrl}#/${operationObject.tags?.join(\"/\") ?? \"\"}/${\n operationObject.operationId\n }`\n : \"\";\n\n // 生成的请求构造器的名称,需要使用原始 url\n let requestBuilderName = _.camelCase(`${options.url}_${method}_api`);\n\n // 判断是否有效的 js 变量\n if (!/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(requestBuilderName)) {\n // 不是有效的 js 变量,使用 _ + 数字\n requestBuilderName = `_${requestBuilderName}`;\n }\n\n //#region url 上参数 例如 /api/v1/users/{userId}\n const urlPathParams = getUrlPathParams(\n (operationObject.parameters as never) ?? [],\n );\n const urlPathParamsCode = urlPathParams.length\n ? `urlPathParams: ${JSON.stringify(urlPathParams)},`\n : \"\";\n //#endregion\n\n let code: string[] = [\n \"// 这个文件由 @dune2/cli 自动生成,不要手动修改,否则会被覆盖\",\n apiConfig.RequestBuilderImportPath!,\n apiConfig.requestFnImportPath!,\n apiConfig.queryClientImportPath!,\n\n \"/**\",\n ` * ${operationObject.summary}`,\n ` * @tags ${operationObject.tags?.join(\",\")}`,\n seeUrl && ` * @see ${seeUrl}`,\n ` */`,\n ].filter(Boolean);\n\n // builder 代码\n let builderCode = `\\\nexport const ${requestBuilderName} = new RequestBuilder({\n url: '${url}',\n method: '${method}',\n ${apiConfig.requestFnImportPath ? \"requestFn,\" : \"\"}\n ${urlPathParamsCode}\n ${apiConfig.queryClientImportPath ? \"queryClient,\" : \"\"}\n});`\n // 移除空行\n .replace(/,\\n\\s*}/, \",\" + os.EOL + \"}\");\n if (apiConfig.enableTs) {\n builderCode = builderCode.replace(\n \"new RequestBuilder(\",\n `new RequestBuilder<${requestBuilderName}.Req, ${requestBuilderName}.Res>(`,\n );\n }\n code.push(builderCode);\n\n if (apiConfig.enableTs) {\n // post 和 put 请求需要生成表单 fieldsMap\n const isGenerateFieldsMap = [\"post\", \"put\"].includes(method);\n // 请求参数类型\n // 响应参数类型\n const [requestParamsTypeCode, responseParamsTypeCode] = await Promise.all([\n compileRequestParams(operationObject, isGenerateFieldsMap),\n compileResponseParams(operationObject, apiConfig),\n ]);\n\n code.push(`\nexport namespace ${requestBuilderName} {\n ${requestParamsTypeCode.code}\n \n ${responseParamsTypeCode}\n};`);\n\n if (isGenerateFieldsMap && !_.isEmpty(requestParamsTypeCode.fieldsMap)) {\n // 生成表单 fieldsMap\n code.push(`\nexport const ${requestBuilderName}FieldsMap = ${JSON.stringify(\n requestParamsTypeCode.fieldsMap,\n )} as const\n`);\n }\n }\n\n return code.join(os.EOL);\n}\n\nfunction getUrlPathParams(parameters: OpenAPIV3.ParameterObject[]) {\n return parameters\n .filter((item) => item.in === \"path\")\n .map((item) => item.name);\n}\n\n/**\n * 这个方法还不完善,只能处理简单的请求参数\n */\nasync function compileRequestParams(\n operationObject: OpenAPIV3.OperationObject,\n generateFieldsMap = false,\n) {\n let schema;\n if (operationObject.requestBody) {\n //TODO: 这里也需要处理其他类型\n schema = (operationObject.requestBody as OpenAPIV3.RequestBodyObject)\n .content[\"application/json\"].schema;\n } else if (operationObject.parameters) {\n const extraProperties = {};\n const parameters: OpenAPIV3.ParameterObject[] = [];\n (operationObject.parameters as OpenAPIV3.ParameterObject[]).forEach(\n (item) => {\n if (![\"query\", \"path\"].includes(item.in)) {\n return;\n }\n if (_.get(item.schema, \"type\") === \"object\") {\n // swagger get 请求上 有些参数是 object 类型 应该拍平\n _.assign(extraProperties, _.get(item.schema, \"properties\", {}));\n } else {\n parameters.push(item);\n }\n },\n );\n\n // 必填参数中忽略 分页相关的参数\n const required = parameters\n .filter(\n (p) => p.required && ![\"pageNum\", \"pageSize\", \"count\"].includes(p.name),\n )\n .map((p) => p.name);\n const properties = Object.fromEntries(\n parameters\n // 后端 swagger 可能出现没有 schema 的情况,这里过滤掉\n .filter((p) => !!p.schema)\n .map((p) => {\n //TODO: 这里也要处理 ref 类型\n const schema = p.schema as OpenAPIV3.SchemaObject;\n return [\n p.name,\n {\n ...schema,\n description: p.description,\n // enum: schema.enum ?? [],\n },\n ];\n }),\n );\n schema = {\n required,\n type: \"object\",\n properties: { ...properties, ...extraProperties },\n };\n }\n\n let code = \"\";\n const fieldsMap: Record<string, string> = {};\n if (schema) {\n try {\n code = await compile(schema, \"Req\", {\n bannerComment: \"\",\n ignoreMinAndMaxItems: !!1,\n additionalProperties: false,\n // format: false,\n });\n\n // 判断接口是否是分页请求\n const isPageSearchRequest = (data: any) => {\n // 入参有这些字段就认为是分页查询接口\n const keys = [\"pageNum\", \"pageSize\", \"count\"];\n return (\n _.get(data, \"type\") === \"object\" &&\n _.get(data, \"required\", []).filter((item) => keys.includes(item))\n .length === keys.length\n );\n };\n\n if (generateFieldsMap) {\n // 分页查询接口取 params 字段\n const params = isPageSearchRequest(schema)\n ? _.get(schema, \"properties.params.properties\", {})\n : schema.properties;\n _.forEach(params, (_, field) => {\n fieldsMap[field] = field;\n });\n }\n } catch (e) {\n log.error(\"生成请求参数类型失败,请检查 %o\", {\n summary: operationObject.summary,\n message: e.message,\n });\n }\n }\n\n return {\n code: code || \"export type Req = any;\",\n fieldsMap,\n };\n}\n\nasync function compileResponseParams(\n operationObject: OpenAPIV3.OperationObject,\n apiConfig: ApiConfig,\n) {\n const temp = operationObject.responses[\"200\"] as OpenAPIV3.ResponseObject;\n let code = \"\";\n if (temp?.content) {\n // FIXME: 可能需要处理其他的 content 类型\n const temp2 = temp.content[\"application/json\"] || temp.content[\"*/*\"];\n const schema = temp2.schema as OpenAPIV3.SchemaObject;\n let data = apiConfig.responseSchemaTransformer!(schema);\n if (data) {\n // 这里需要深度 clone 的原因是:\n // 解析出来的 scheme 会尽可能的被复用,导致影响到下次解析\n data = _.cloneDeep(data);\n markCircularToRef(data);\n try {\n code = await compile(data, \"Res\", {\n bannerComment: \"\",\n ignoreMinAndMaxItems: !!1,\n additionalProperties: false,\n // format: false,\n });\n\n // 通过响应数据判断是否是分页查询接口\n const isPageSearchResponse = (data: any) => {\n // 有 result 字段且为数组,就认为是分页查询接口\n return (\n _.get(data, \"type\") === \"object\" &&\n _.get(data, \"properties.result.type\") === \"array\"\n );\n };\n\n // 新增后端分页查询返回的数据类型\n if (isPageSearchResponse(data)) {\n code += `${os.EOL}export type ResultItem = Res['result'][0]`;\n }\n } catch (e) {\n log.error(\"转换响应参数类型失败,请检查 %o\", {\n summary: operationObject.summary,\n error: e.message,\n });\n }\n } else {\n log.error(\"responseSchemaTransformer 返回值为空,请检查\");\n }\n }\n\n return code ? code : \"export type Res = any;\";\n}\n\nexport function markCircularToRef(\n obj,\n parentMark = \"#\",\n map = new Map([[obj, parentMark]]),\n set = new Set([obj]),\n) {\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n if (typeof value === \"object\" && !Array.isArray(value)) {\n if (set.has(value)) {\n obj[key] = { $ref: map.get(value) };\n return;\n }\n const tempMark = parentMark + \"/\" + key;\n set.add(value);\n map.set(value, tempMark);\n markCircularToRef(value, tempMark, map, set);\n }\n });\n return map;\n}\n"],"mappings":"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","names":["schema","_","data"]}
package/dist/index.d.ts CHANGED
@@ -71,9 +71,4 @@ declare function numberToLetter(n: number): string;
71
71
 
72
72
  declare function resolveSheetId(str?: string): string | undefined;
73
73
 
74
- /**
75
- * 从 翻译平台下载翻译文件
76
- */
77
- declare function downloadFromPlatform(): Promise<void>;
78
-
79
- export { Config, configName, defaultJsonSorter, defineConfig, downloadFromPlatform, getConfig, googleSheet, letterToNumber, numberToLetter, resolveSheetId };
74
+ export { Config, configName, defaultJsonSorter, defineConfig, getConfig, googleSheet, letterToNumber, numberToLetter, resolveSheetId };
package/dist/index.js CHANGED
@@ -1,28 +1,23 @@
1
- import {
2
- downloadFromPlatform
3
- } from "./chunk-BSWWGPSV.js";
4
1
  import {
5
2
  googleSheet,
6
3
  letterToNumber,
7
4
  numberToLetter
8
5
  } from "./chunk-6UFZ6KLX.js";
9
6
  import "./chunk-KNC7XY4Z.js";
10
- import "./chunk-ADQ6JLT6.js";
11
7
  import {
12
8
  configName,
13
9
  defineConfig,
14
10
  getConfig
15
- } from "./chunk-SVCF6X5K.js";
11
+ } from "./chunk-2DSIJDNZ.js";
16
12
  import {
17
13
  defaultJsonSorter,
18
14
  resolveSheetId
19
- } from "./chunk-4BXCANQI.js";
15
+ } from "./chunk-555YTWSW.js";
20
16
  import "./chunk-UGSBKD2I.js";
21
17
  export {
22
18
  configName,
23
19
  defaultJsonSorter,
24
20
  defineConfig,
25
- downloadFromPlatform,
26
21
  getConfig,
27
22
  googleSheet,
28
23
  letterToNumber,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  configName,
3
3
  getConfig
4
- } from "./chunk-SVCF6X5K.js";
5
- import "./chunk-4BXCANQI.js";
4
+ } from "./chunk-2DSIJDNZ.js";
5
+ import "./chunk-555YTWSW.js";
6
6
  import {
7
7
  createLogger
8
8
  } from "./chunk-UGSBKD2I.js";
@@ -33,4 +33,4 @@ var initConfig = async () => {
33
33
  export {
34
34
  initConfig
35
35
  };
36
- //# sourceMappingURL=initConfig-DHDY6MWT.js.map
36
+ //# sourceMappingURL=initConfig-QRYGDQR7.js.map
@@ -3,8 +3,8 @@ import {
3
3
  } from "./chunk-Q7UJ456X.js";
4
4
  import {
5
5
  getConfig
6
- } from "./chunk-SVCF6X5K.js";
7
- import "./chunk-4BXCANQI.js";
6
+ } from "./chunk-2DSIJDNZ.js";
7
+ import "./chunk-555YTWSW.js";
8
8
  import {
9
9
  createLogger
10
10
  } from "./chunk-UGSBKD2I.js";
@@ -134,4 +134,4 @@ async function namespace(params) {
134
134
  export {
135
135
  namespace
136
136
  };
137
- //# sourceMappingURL=namespace-IDUS7AMO.js.map
137
+ //# sourceMappingURL=namespace-4FUD4GZ2.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  apiConfigNormalizer,
3
3
  normalizeConfig
4
- } from "./chunk-4BXCANQI.js";
4
+ } from "./chunk-555YTWSW.js";
5
5
  export {
6
6
  apiConfigNormalizer,
7
7
  normalizeConfig
@@ -6,17 +6,17 @@ import {
6
6
  letterToNumber
7
7
  } from "./chunk-6UFZ6KLX.js";
8
8
  import "./chunk-KNC7XY4Z.js";
9
- import {
10
- promptI18nConfigEnable
11
- } from "./chunk-2SEEW5WZ.js";
12
9
  import {
13
10
  I18nData,
14
11
  sleep
15
12
  } from "./chunk-ADQ6JLT6.js";
13
+ import {
14
+ promptI18nConfigEnable
15
+ } from "./chunk-2SEEW5WZ.js";
16
16
  import {
17
17
  getConfig
18
- } from "./chunk-SVCF6X5K.js";
19
- import "./chunk-4BXCANQI.js";
18
+ } from "./chunk-2DSIJDNZ.js";
19
+ import "./chunk-555YTWSW.js";
20
20
  import {
21
21
  createLogger
22
22
  } from "./chunk-UGSBKD2I.js";
@@ -89,4 +89,4 @@ async function upload() {
89
89
  export {
90
90
  upload
91
91
  };
92
- //# sourceMappingURL=upload-WCPUDBKZ.js.map
92
+ //# sourceMappingURL=upload-OUXQZAW4.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dune2/cli",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/liaoyinglong/next-tools.git",
@@ -32,7 +32,6 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "@apidevtools/swagger-parser": "^10.1.0",
35
- "axios": "^1.6.2",
36
35
  "cac": "^6.7.14",
37
36
  "cli-table3": "^0.6.3",
38
37
  "connect": "^3.7.0",
@@ -40,13 +39,13 @@
40
39
  "enquirer": "^2.3.6",
41
40
  "fs-extra": "^11.2.0",
42
41
  "globby": "^14.0.1",
43
- "googleapis": "^108.0.0",
42
+ "googleapis": "108.0.0",
44
43
  "joycon": "^3.1.1",
45
- "json-schema-to-typescript": "^14.0.4",
44
+ "json-schema-to-typescript": "15.0.0",
46
45
  "lodash": "^4.17.21",
47
46
  "open": "^10.1.0",
48
47
  "p-map": "^7.0.2",
49
- "path-to-regexp": "^6.2.1",
48
+ "path-to-regexp": "7.1.0",
50
49
  "picocolors": "^1.0.0",
51
50
  "@dune2/wasm": "0.4.0"
52
51
  },
@@ -1,60 +0,0 @@
1
- import {
2
- I18nData
3
- } from "./chunk-ADQ6JLT6.js";
4
- import {
5
- getConfig
6
- } from "./chunk-SVCF6X5K.js";
7
- import {
8
- createLogger
9
- } from "./chunk-UGSBKD2I.js";
10
-
11
- // src/commands/downloadFromPlatform.ts
12
- import axios from "axios";
13
- import pMap from "p-map";
14
- var logger = createLogger("downloadFromPlatform");
15
- async function downloadFromPlatform() {
16
- var _a;
17
- const config = await getConfig();
18
- const i18nConfig = (_a = config.i18n) == null ? void 0 : _a[0];
19
- if (!i18nConfig) {
20
- logger.error("i18n \u914D\u7F6E\u4E3A\u7A7A");
21
- return;
22
- }
23
- const { translatePlatform, locales } = i18nConfig;
24
- if (!(translatePlatform == null ? void 0 : translatePlatform.enable)) {
25
- logger.info("translatePlatform.enable \u4E3A false\uFF0C\u4E0D\u4F1A\u4E0B\u8F7D");
26
- return;
27
- }
28
- logger.info("\u5F00\u59CB\u4ECE\u7FFB\u8BD1\u5E73\u53F0\u4E0B\u8F7D\u7FFB\u8BD1\u6587\u4EF6");
29
- const res = await axios({
30
- baseURL: translatePlatform.url,
31
- url: "/v1/dune-i18n/public/findAll",
32
- params: {
33
- projectName: translatePlatform.project
34
- }
35
- }).catch((err) => {
36
- throw new TransError(err, "\u8BF7\u6C42\u7FFB\u8BD1\u5E73\u53F0\u5931\u8D25");
37
- });
38
- const data = res.data.data;
39
- if (!data) {
40
- throw new TransError(res.data, "data \u4E3A\u7A7A");
41
- }
42
- await pMap(locales ?? [], async (locale) => {
43
- const i18nData = new I18nData(locale, i18nConfig);
44
- await i18nData.updateFromSheetData((data == null ? void 0 : data[locale]) ?? {});
45
- await i18nData.saveToDisk();
46
- return i18nData;
47
- });
48
- logger.info("\u4ECE\u7FFB\u8BD1\u5E73\u53F0\u4E0B\u8F7D\u7FFB\u8BD1\u6587\u4EF6\u5B8C\u6210");
49
- }
50
- var TransError = class extends Error {
51
- constructor(data, message = "") {
52
- super(`\u83B7\u53D6\u7FFB\u8BD1\u5E73\u53F0\u6570\u636E\u5931\u8D25: ${message}`);
53
- this.data = data;
54
- }
55
- };
56
-
57
- export {
58
- downloadFromPlatform
59
- };
60
- //# sourceMappingURL=chunk-BSWWGPSV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/downloadFromPlatform.ts"],"sourcesContent":["import axios from \"axios\";\nimport pMap from \"p-map\";\nimport { createLogger } from \"../shared\";\nimport { getConfig } from \"../shared/config\";\nimport { I18nData } from \"../shared/i18nData\";\n\nconst logger = createLogger(\"downloadFromPlatform\");\n\n/**\n * 从 翻译平台下载翻译文件\n */\nexport async function downloadFromPlatform() {\n const config = await getConfig();\n // 只有配置了 translatePlatform 才会下载\n // TODO: 暂时只支持一个,后续支持多个\n const i18nConfig = config.i18n?.[0];\n if (!i18nConfig) {\n logger.error(\"i18n 配置为空\");\n return;\n }\n const { translatePlatform, locales } = i18nConfig;\n if (!translatePlatform?.enable) {\n logger.info(\"translatePlatform.enable 为 false,不会下载\");\n return;\n }\n logger.info(\"开始从翻译平台下载翻译文件\");\n const res = await axios({\n baseURL: translatePlatform.url,\n url: \"/v1/dune-i18n/public/findAll\",\n params: {\n projectName: translatePlatform.project,\n },\n }).catch((err) => {\n throw new TransError(err, \"请求翻译平台失败\");\n });\n\n const data = res.data.data;\n if (!data) {\n throw new TransError(res.data, \"data 为空\");\n }\n\n await pMap(locales ?? [], async (locale) => {\n const i18nData = new I18nData(locale, i18nConfig);\n await i18nData.updateFromSheetData(data?.[locale] ?? {});\n await i18nData.saveToDisk();\n return i18nData;\n });\n logger.info(\"从翻译平台下载翻译文件完成\");\n}\n\nclass TransError extends Error {\n constructor(public data: any, message: string = \"\") {\n super(`获取翻译平台数据失败: ${message}`);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,UAAU;AAKjB,IAAM,SAAS,aAAa,sBAAsB;AAKlD,eAAsB,uBAAuB;AAX7C;AAYE,QAAM,SAAS,MAAM,UAAU;AAG/B,QAAM,cAAa,YAAO,SAAP,mBAAc;AACjC,MAAI,CAAC,YAAY;AACf,WAAO,MAAM,+BAAW;AACxB;AAAA,EACF;AACA,QAAM,EAAE,mBAAmB,QAAQ,IAAI;AACvC,MAAI,EAAC,uDAAmB,SAAQ;AAC9B,WAAO,KAAK,qEAAuC;AACnD;AAAA,EACF;AACA,SAAO,KAAK,gFAAe;AAC3B,QAAM,MAAM,MAAM,MAAM;AAAA,IACtB,SAAS,kBAAkB;AAAA,IAC3B,KAAK;AAAA,IACL,QAAQ;AAAA,MACN,aAAa,kBAAkB;AAAA,IACjC;AAAA,EACF,CAAC,EAAE,MAAM,CAAC,QAAQ;AAChB,UAAM,IAAI,WAAW,KAAK,kDAAU;AAAA,EACtC,CAAC;AAED,QAAM,OAAO,IAAI,KAAK;AACtB,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,WAAW,IAAI,MAAM,mBAAS;AAAA,EAC1C;AAEA,QAAM,KAAK,WAAW,CAAC,GAAG,OAAO,WAAW;AAC1C,UAAM,WAAW,IAAI,SAAS,QAAQ,UAAU;AAChD,UAAM,SAAS,qBAAoB,6BAAO,YAAW,CAAC,CAAC;AACvD,UAAM,SAAS,WAAW;AAC1B,WAAO;AAAA,EACT,CAAC;AACD,SAAO,KAAK,gFAAe;AAC7B;AAEA,IAAM,aAAN,cAAyB,MAAM;AAAA,EAC7B,YAAmB,MAAW,UAAkB,IAAI;AAClD,UAAM,iEAAe,OAAO,EAAE;AADb;AAAA,EAEnB;AACF;","names":[]}
@@ -1,11 +0,0 @@
1
- import {
2
- downloadFromPlatform
3
- } from "./chunk-BSWWGPSV.js";
4
- import "./chunk-ADQ6JLT6.js";
5
- import "./chunk-SVCF6X5K.js";
6
- import "./chunk-4BXCANQI.js";
7
- import "./chunk-UGSBKD2I.js";
8
- export {
9
- downloadFromPlatform
10
- };
11
- //# sourceMappingURL=downloadFromPlatform-6ZUZTZAX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/extract/index.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport { globby } from \"globby\";\nimport os from \"os\";\nimport pMap from \"p-map\";\nimport path from \"path\";\nimport pc from \"picocolors\";\nimport { createLogger } from \"../../shared\";\nimport { getConfig, I18nConfig } from \"../../shared/config\";\nimport { ExtractedMap, I18nData } from \"../../shared/i18nData\";\nimport { promptI18nConfigEnable } from \"../../shared/promptConfigEnable\";\n\nconst log = createLogger(\"extract\");\n\n/**\n * 提取文案\n */\nexport async function extract(opts?: { deleteUnused: boolean }) {\n const config = await getConfig();\n const { extract } = await import(\"@dune2/wasm\");\n\n let i18nConfigs = await promptI18nConfigEnable(\n config.i18n?.filter((item) => !item.disableExtract)\n );\n\n // 这是使得任务串行,方便看日志\n for (const configItem of i18nConfigs) {\n const files = await globby(\n [\n `./src/**/**.{js,jsx,ts,tsx}`,\n \"!**/node_modules/**\",\n \"!**.d.ts\",\n \"!**/.next/**\",\n \"!**/out/**\",\n ].concat(configItem.include ?? []),\n { cwd: configItem.cwd }\n );\n log.info(\"预计共解析 %s 个文件\", pc.green(files.length));\n let errMsgs: string[] = [];\n const extractedI18nDataMap: ExtractedMap = new Map();\n\n await pMap(\n files,\n async (file) => {\n const content = await fs.readFile(file, \"utf-8\");\n const res = await extract(content, file);\n if (res.data.size) {\n log.info(\n \"从 %s 中提取到 %s 条文案\",\n pc.dim(file),\n pc.green(res.data.size)\n );\n res.data.forEach((value, key) => {\n let cur = extractedI18nDataMap.get(key)!;\n const hasCache = !!cur;\n if (!hasCache) {\n cur = { ...value, files: [] };\n }\n cur.files.push(\n path.resolve(file) + \":\" + value.line + \":\" + value.column\n );\n // 优先使用 提取出来的文案\n cur.messages = value.messages || cur.messages;\n\n if (!hasCache) {\n extractedI18nDataMap.set(key, cur);\n }\n });\n }\n if (res.errMsg) {\n errMsgs.push(res.errMsg);\n }\n },\n { concurrency: 20 }\n );\n\n await saveExtractedMetaData(configItem, extractedI18nDataMap);\n\n const i18nDataArr = await pMap(configItem.locales ?? [], async (locale) => {\n const i18nData = new I18nData(locale, configItem, opts?.deleteUnused);\n await i18nData.updateByExtractedData(extractedI18nDataMap);\n await i18nData.saveToDisk();\n return i18nData;\n });\n if (errMsgs.length) {\n console.log(pc.bold(\"以下未能成功提取的文案,请手动处理:\"));\n console.log(errMsgs.join(os.EOL));\n }\n I18nData.printStatistic(\"提取结果: \", i18nDataArr);\n\n await import(\"./uploadToTranslatePlatform\").then((mod) =>\n mod.uploadToTranslatePlatform(configItem, i18nDataArr)\n );\n }\n}\n\n/**\n * 保存相关的提取信息\n */\nasync function saveExtractedMetaData(\n config: I18nConfig,\n extractedI18nDataMap: ExtractedMap\n) {\n const { i18nDir } = config;\n // case:\n // input: \"./src/i18n\"\n // output: \"src_i18n.extractedLog.json\"\n const prefix = i18nDir!.replace(\"./\", \"\").replace(/\\//g, \"_\");\n const filename = `${prefix}.extractedLog.json`;\n\n const metaDataJsonPath = path.join(i18nDir!, filename);\n\n await fs.ensureFile(metaDataJsonPath);\n\n // extractedI18nDataMap 是个 Map 需要转成换json\n let data = Array.from(extractedI18nDataMap.entries()).map(\n ([key, value]) => value\n );\n // 按照 id 排序\n data = data.sort((a, b) => {\n return a.id.localeCompare(b.id);\n });\n\n await fs.writeJSON(\n metaDataJsonPath,\n\n data,\n {\n spaces: 2,\n }\n );\n}\n"],"mappings":"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","names":["extract"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/generateApi/index.ts"],"sourcesContent":["import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport fs from \"fs-extra\";\nimport { compile } from \"json-schema-to-typescript\";\nimport _ from \"lodash\";\nimport { OpenAPIV3 } from \"openapi-types\";\nimport * as os from \"os\";\nimport pMap from \"p-map\";\nimport path from \"path\";\nimport { createLogger } from \"../../shared\";\nimport { ApiConfig, getConfig } from \"../../shared/config\";\nimport { formatFile } from \"../../shared/formatFile\";\nimport { promptApiConfigEnable } from \"../../shared/promptConfigEnable\";\n\nconst log = createLogger(\"generateApi\");\n\nexport async function generateApi() {\n const config = await getConfig();\n const apiConfigs = await promptApiConfigEnable(config.api);\n\n for (const apiConfig of apiConfigs) {\n log.info(`清除旧的api文件: ${apiConfig.output}`);\n await fs.emptydir(apiConfig.output!);\n }\n\n for (const apiConfig of apiConfigs) {\n log.info(\"开始解析 %s\", apiConfig.swaggerJSONPath);\n const parsed = (await SwaggerParser.dereference(apiConfig.swaggerJSONPath, {\n resolve: {\n http: {\n timeout: 30 * 1000,\n },\n },\n })) as OpenAPIV3.Document;\n\n await pMap(Object.entries(parsed.paths), async ([url, pathItemObject]) => {\n log.info(\"开始生成 %s\", url);\n if (pathItemObject) {\n await pMap(\n [\"get\", \"put\", \"post\", \"delete\", \"patch\"],\n async (method) => {\n const operationObject = pathItemObject[method];\n if (operationObject) {\n const code = await generateApiRequestCode({\n url: url,\n method: method,\n operationObject: operationObject,\n apiConfig,\n });\n const outputPath = path\n .join(\n apiConfig.output!,\n url,\n apiConfig.enableTs ? `${method}.ts` : `${method}.js`\n )\n .replace(/:/g, \"_\");\n await fs.ensureFile(outputPath);\n await fs.writeFile(outputPath, code);\n }\n }\n );\n }\n });\n\n if (apiConfig.format) {\n await formatFile(apiConfig.output!);\n }\n }\n\n log.info(\"generateApi Done\");\n}\n\n/**\n * 根据请求方法,生成请求代码\n */\nexport async function generateApiRequestCode(options: {\n url: string;\n method: string;\n operationObject: OpenAPIV3.OperationObject;\n apiConfig: ApiConfig;\n}): Promise<string> {\n const { method, operationObject, apiConfig } = options;\n\n const url = (() => {\n if (typeof apiConfig.urlTransformer === \"string\") {\n return `${apiConfig.urlTransformer}${options.url}`;\n }\n if (typeof apiConfig.urlTransformer === \"function\") {\n return apiConfig.urlTransformer(options.url);\n }\n return options.url;\n })();\n\n const seeUrl = apiConfig.swaggerUiUrl\n ? `${apiConfig.swaggerUiUrl}#/${operationObject.tags?.join(\"/\") ?? \"\"}/${\n operationObject.operationId\n }`\n : \"\";\n\n // 生成的请求构造器的名称,需要使用原始url\n let requestBuilderName = _.camelCase(`${options.url}_${method}_api`);\n\n // 判断是否有效的js变量\n if (!/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(requestBuilderName)) {\n // 不是有效的js变量,使用 _ + 数字\n requestBuilderName = `_${requestBuilderName}`;\n }\n\n //#region url上参数 例如 /api/v1/users/{userId}\n const urlPathParams = getUrlPathParams(\n (operationObject.parameters as never) ?? []\n );\n const urlPathParamsCode = urlPathParams.length\n ? `urlPathParams: ${JSON.stringify(urlPathParams)},`\n : \"\";\n //#endregion\n\n let code: string[] = [\n \"// 这个文件由 @dune2/cli 自动生成,不要手动修改,否则会被覆盖\",\n apiConfig.RequestBuilderImportPath!,\n apiConfig.requestFnImportPath!,\n apiConfig.queryClientImportPath!,\n\n \"/**\",\n ` * ${operationObject.summary}`,\n ` * @tags ${operationObject.tags?.join(\",\")}`,\n seeUrl && ` * @see ${seeUrl}`,\n ` */`,\n ].filter(Boolean);\n\n // builder 代码\n let builderCode = `\\\nexport const ${requestBuilderName} = new RequestBuilder({\n url: '${url}',\n method: '${method}',\n ${apiConfig.requestFnImportPath ? \"requestFn,\" : \"\"}\n ${urlPathParamsCode}\n ${apiConfig.queryClientImportPath ? \"queryClient,\" : \"\"}\n});`\n // 移除空行\n .replace(/,\\n\\s*}/, \",\" + os.EOL + \"}\");\n if (apiConfig.enableTs) {\n builderCode = builderCode.replace(\n \"new RequestBuilder(\",\n `new RequestBuilder<${requestBuilderName}.Req, ${requestBuilderName}.Res>(`\n );\n }\n code.push(builderCode);\n\n if (apiConfig.enableTs) {\n // post和put请求需要生成表单fieldsMap\n const isGenrateFieldsMap = [\"post\", \"put\"].includes(method);\n // 请求参数类型\n // 响应参数类型\n const [requestParamsTypeCode, responseParamsTypeCode] = await Promise.all([\n compileRequestParams(operationObject, isGenrateFieldsMap),\n compileResponseParams(operationObject, apiConfig),\n ]);\n\n code.push(`\nexport namespace ${requestBuilderName} {\n ${requestParamsTypeCode.code}\n \n ${responseParamsTypeCode}\n};`);\n\n if (isGenrateFieldsMap && !_.isEmpty(requestParamsTypeCode.fieldsMap)) {\n // 生成表单fieldsMap\n code.push(`\nexport const ${requestBuilderName}FieldsMap = ${JSON.stringify(\n requestParamsTypeCode.fieldsMap\n )}\n`);\n }\n }\n\n return code.join(os.EOL);\n}\n\nfunction getUrlPathParams(parameters: OpenAPIV3.ParameterObject[]) {\n return parameters\n .filter((item) => item.in === \"path\")\n .map((item) => item.name);\n}\n\n/**\n * 这个方法还不完善,只能处理简单的请求参数\n */\nasync function compileRequestParams(\n operationObject: OpenAPIV3.OperationObject,\n generateFieldsMap = false\n) {\n let schema;\n if (operationObject.requestBody) {\n //TODO: 这里也需要处理其他类型\n schema = (operationObject.requestBody as OpenAPIV3.RequestBodyObject)\n .content[\"application/json\"].schema;\n } else if (operationObject.parameters) {\n const extraProperties = {};\n const parameters: OpenAPIV3.ParameterObject[] = [];\n (operationObject.parameters as OpenAPIV3.ParameterObject[]).forEach(\n (item) => {\n if (![\"query\", \"path\"].includes(item.in)) {\n return;\n }\n if (_.get(item.schema, \"type\") === \"object\") {\n // swagger get 请求上 有些参数是 object 类型 应该拍平\n _.assign(extraProperties, _.get(item.schema, \"properties\", {}));\n } else {\n parameters.push(item);\n }\n }\n );\n\n // 必填参数中忽略 分页相关的参数\n const required = parameters\n .filter(\n (p) => p.required && ![\"pageNum\", \"pageSize\", \"count\"].includes(p.name)\n )\n .map((p) => p.name);\n const properties = Object.fromEntries(\n parameters\n // 后端 swagger 可能出现没有 schema 的情况,这里过滤掉\n .filter((p) => !!p.schema)\n .map((p) => {\n //TODO: 这里也要处理 ref 类型\n const schema = p.schema as OpenAPIV3.SchemaObject;\n return [\n p.name,\n {\n ...schema,\n description: p.description,\n // enum: schema.enum ?? [],\n },\n ];\n })\n );\n schema = {\n required,\n type: \"object\",\n properties: { ...properties, ...extraProperties },\n };\n }\n\n let code = \"\";\n const fieldsMap: Record<string, string> = {};\n if (schema) {\n try {\n code = await compile(schema, \"Req\", {\n bannerComment: \"\",\n ignoreMinAndMaxItems: !!1,\n additionalProperties: false,\n // format: false,\n });\n\n // 判断接口是否是分页请求\n const isPageSearchRequest = (data: any) => {\n // 入参有这些字段就认为是分页查询接口\n const keys = [\"pageNum\", \"pageSize\", \"count\"];\n return (\n _.get(data, \"type\") === \"object\" &&\n _.get(data, \"required\", []).filter((item) => keys.includes(item))\n .length === keys.length\n );\n };\n\n if (generateFieldsMap) {\n // 分页查询接口取params字段\n const params = isPageSearchRequest(schema)\n ? _.get(schema, \"properties.params.properties\", {})\n : schema.properties;\n _.forEach(params, (_, field) => {\n fieldsMap[field] = field;\n });\n }\n } catch (e) {\n log.error(\"生成请求参数类型失败,请检查 %o\", {\n summary: operationObject.summary,\n message: e.message,\n });\n }\n }\n\n return {\n code: code || \"export type Req = any;\",\n fieldsMap,\n };\n}\n\nasync function compileResponseParams(\n operationObject: OpenAPIV3.OperationObject,\n apiConfig: ApiConfig\n) {\n const temp = operationObject.responses[\"200\"] as OpenAPIV3.ResponseObject;\n let code = \"\";\n if (temp?.content) {\n // FIXME: 可能需要处理其他的content类型\n const temp2 = temp.content[\"application/json\"] || temp.content[\"*/*\"];\n const schema = temp2.schema as OpenAPIV3.SchemaObject;\n let data = apiConfig.responseSchemaTransformer!(schema);\n if (data) {\n // 这里需要深度clone的原因是:\n // 解析出来的scheme会尽可能的被复用,导致影响到下次解析\n data = _.cloneDeep(data);\n markCircularToRef(data);\n try {\n code = await compile(data, \"Res\", {\n bannerComment: \"\",\n ignoreMinAndMaxItems: !!1,\n additionalProperties: false,\n // format: false,\n });\n\n // 通过响应数据判断是否是分页查询接口\n const isPageSearchResponse = (data: any) => {\n // 有result字段且为数组,就认为是分页查询接口\n return (\n _.get(data, \"type\") === \"object\" &&\n _.get(data, \"properties.result.type\") === \"array\"\n );\n };\n\n // 新增后端分页查询返回的数据类型\n if (isPageSearchResponse(data)) {\n code += `${os.EOL}export type ResultItem = Res['result'][0]`;\n }\n } catch (e) {\n log.error(\"转换响应参数类型失败, 请检查 %o\", {\n summary: operationObject.summary,\n error: e.message,\n });\n }\n } else {\n log.error(\"responseSchemaTransformer 返回值为空, 请检查\");\n }\n }\n\n return code ? code : \"export type Res = any;\";\n}\n\nexport function markCircularToRef(\n obj,\n parentMark = \"#\",\n map = new Map([[obj, parentMark]]),\n set = new Set([obj])\n) {\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n if (typeof value === \"object\" && !Array.isArray(value)) {\n if (set.has(value)) {\n obj[key] = { $ref: map.get(value) };\n return;\n }\n const tempMark = parentMark + \"/\" + key;\n set.add(value);\n map.set(value, tempMark);\n markCircularToRef(value, tempMark, map, set);\n }\n });\n return map;\n}\n"],"mappings":"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","names":["schema","_","data"]}
@@ -1,45 +0,0 @@
1
- import {
2
- createLogger
3
- } from "./chunk-UGSBKD2I.js";
4
-
5
- // src/commands/extract/uploadToTranslatePlatform.ts
6
- import axios from "axios";
7
- import https from "https";
8
- import pc from "picocolors";
9
- var agent = new https.Agent({
10
- rejectUnauthorized: false
11
- });
12
- var log = createLogger("uploadToPlatform");
13
- async function uploadToTranslatePlatform(config, i18nDataArr) {
14
- const { translatePlatform, defaultLocale } = config;
15
- if (translatePlatform == null ? void 0 : translatePlatform.enable) {
16
- log.info(pc.bold("\u5F00\u59CB\u4E0A\u4F20\u81F3\u7FFB\u8BD1\u5E73\u53F0"));
17
- const defaultII18nData = i18nDataArr.find(
18
- (item) => item.locale === defaultLocale
19
- );
20
- if (!defaultII18nData) {
21
- log.error("\u6CA1\u6709\u627E\u5230\u9ED8\u8BA4\u8BED\u8A00\u7684\u7FFB\u8BD1\u6587\u4EF6 %s", defaultLocale);
22
- return;
23
- }
24
- try {
25
- const res = await axios({
26
- method: "post",
27
- baseURL: translatePlatform.url,
28
- url: `/v1/dune-i18n/public/uploadTranslateData`,
29
- data: {
30
- localeCode: defaultLocale,
31
- translateData: defaultII18nData.data,
32
- projectName: translatePlatform.project
33
- },
34
- httpsAgent: agent
35
- });
36
- log.info("\u4E0A\u4F20\u7ED3\u679C: %o", res.data);
37
- } catch (e) {
38
- log.error("\u4E0A\u4F20\u5931\u8D25 %s %s", e.message, e.code);
39
- }
40
- }
41
- }
42
- export {
43
- uploadToTranslatePlatform
44
- };
45
- //# sourceMappingURL=uploadToTranslatePlatform-GK4VUXIU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/extract/uploadToTranslatePlatform.ts"],"sourcesContent":["import axios from \"axios\";\nimport https from \"https\";\nimport pc from \"picocolors\";\nimport { createLogger } from \"../../shared\";\nimport { I18nConfig } from \"../../shared/config\";\nimport { I18nData } from \"../../shared/i18nData\";\nconst agent = new https.Agent({\n rejectUnauthorized: false,\n});\n\nconst log = createLogger(\"uploadToPlatform\");\n\nexport async function uploadToTranslatePlatform(\n config: I18nConfig,\n i18nDataArr: I18nData[]\n) {\n const { translatePlatform, defaultLocale } = config;\n\n if (translatePlatform?.enable) {\n log.info(pc.bold(\"开始上传至翻译平台\"));\n const defaultII18nData = i18nDataArr.find(\n (item) => item.locale === defaultLocale\n );\n if (!defaultII18nData) {\n log.error(\"没有找到默认语言的翻译文件 %s\", defaultLocale);\n return;\n }\n try {\n // 调用 translatePlatform 的接口\n const res = await axios({\n method: \"post\",\n baseURL: translatePlatform.url,\n url: `/v1/dune-i18n/public/uploadTranslateData`,\n data: {\n localeCode: defaultLocale,\n translateData: defaultII18nData.data,\n projectName: translatePlatform.project,\n },\n httpsAgent: agent,\n });\n log.info(\"上传结果: %o\", res.data);\n } catch (e) {\n log.error(\"上传失败 %s %s\", e.message, e.code);\n }\n }\n}\n"],"mappings":";;;;;AAAA,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,QAAQ;AAIf,IAAM,QAAQ,IAAI,MAAM,MAAM;AAAA,EAC5B,oBAAoB;AACtB,CAAC;AAED,IAAM,MAAM,aAAa,kBAAkB;AAE3C,eAAsB,0BACpB,QACA,aACA;AACA,QAAM,EAAE,mBAAmB,cAAc,IAAI;AAE7C,MAAI,uDAAmB,QAAQ;AAC7B,QAAI,KAAK,GAAG,KAAK,wDAAW,CAAC;AAC7B,UAAM,mBAAmB,YAAY;AAAA,MACnC,CAAC,SAAS,KAAK,WAAW;AAAA,IAC5B;AACA,QAAI,CAAC,kBAAkB;AACrB,UAAI,MAAM,qFAAoB,aAAa;AAC3C;AAAA,IACF;AACA,QAAI;AAEF,YAAM,MAAM,MAAM,MAAM;AAAA,QACtB,QAAQ;AAAA,QACR,SAAS,kBAAkB;AAAA,QAC3B,KAAK;AAAA,QACL,MAAM;AAAA,UACJ,YAAY;AAAA,UACZ,eAAe,iBAAiB;AAAA,UAChC,aAAa,kBAAkB;AAAA,QACjC;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AACD,UAAI,KAAK,gCAAY,IAAI,IAAI;AAAA,IAC/B,SAAS,GAAG;AACV,UAAI,MAAM,kCAAc,EAAE,SAAS,EAAE,IAAI;AAAA,IAC3C;AAAA,EACF;AACF;","names":[]}