@farris/cli 2.3.8 → 2.3.9

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 (108) hide show
  1. package/lib/commands/add-app.js +5 -5
  2. package/lib/commands/add-lib.js +5 -5
  3. package/lib/commands/add-micro.js +11 -11
  4. package/lib/commands/add-project.js +196 -196
  5. package/lib/commands/add-project.js.map +1 -1
  6. package/lib/commands/build-components.js +60 -60
  7. package/lib/commands/build-components.js.map +1 -1
  8. package/lib/commands/build-css.js +38 -38
  9. package/lib/commands/build-css.js.map +1 -1
  10. package/lib/commands/build-lib.js +30 -30
  11. package/lib/commands/build.js +19 -19
  12. package/lib/commands/build.js.map +1 -1
  13. package/lib/commands/create-app-options.js +85 -85
  14. package/lib/commands/create-app-options.js.map +1 -1
  15. package/lib/commands/create-app.js +131 -131
  16. package/lib/commands/create-app.js.map +1 -1
  17. package/lib/commands/create-options.js +58 -58
  18. package/lib/commands/create-options.js.map +1 -1
  19. package/lib/commands/create.js +341 -341
  20. package/lib/commands/create.js.map +1 -1
  21. package/lib/commands/dev-serve.js +18 -18
  22. package/lib/commands/extract-i18n.js +74 -74
  23. package/lib/commands/extract-i18n.js.map +1 -1
  24. package/lib/commands/generate/api.js +124 -124
  25. package/lib/commands/generate/api.js.map +1 -1
  26. package/lib/commands/generate/common.js +101 -101
  27. package/lib/commands/generate/common.js.map +1 -1
  28. package/lib/commands/generate/component.js +156 -156
  29. package/lib/commands/generate/component.js.map +1 -1
  30. package/lib/commands/generate/view.js +168 -168
  31. package/lib/commands/generate/view.js.map +1 -1
  32. package/lib/commands/preview-serve.js +16 -16
  33. package/lib/commands/workspace/add-app.js +15 -15
  34. package/lib/commands/workspace/add-app.js.map +1 -1
  35. package/lib/commands/workspace/create.js +62 -62
  36. package/lib/commands/workspace/create.js.map +1 -1
  37. package/lib/commands/workspace/inspect.js +30 -30
  38. package/lib/commands/workspace/inspect.js.map +1 -1
  39. package/lib/commands/workspace/verify.js +38 -38
  40. package/lib/commands/workspace/verify.js.map +1 -1
  41. package/lib/common/agents-doc.js +33 -33
  42. package/lib/common/agents-doc.js.map +1 -1
  43. package/lib/common/apply-catalog-deps.js +15 -15
  44. package/lib/common/apply-catalog-deps.js.map +1 -1
  45. package/lib/common/component-file-name.js +3 -3
  46. package/lib/common/constant.js +85 -84
  47. package/lib/common/constant.js.map +1 -1
  48. package/lib/common/create-app-target.js +46 -46
  49. package/lib/common/create-app-target.js.map +1 -1
  50. package/lib/common/generate-app.js +106 -106
  51. package/lib/common/generate-app.js.map +1 -1
  52. package/lib/common/get-dependencies.js +9 -9
  53. package/lib/common/get-farris-config.js +25 -25
  54. package/lib/common/get-farris-config.js.map +1 -1
  55. package/lib/common/get-version.js +6 -6
  56. package/lib/common/get-vite-config.js +192 -192
  57. package/lib/common/get-vite-config.js.map +1 -1
  58. package/lib/common/lib-package-exports.js +24 -24
  59. package/lib/common/lib-package-exports.js.map +1 -1
  60. package/lib/common/list-lib-components.js +23 -23
  61. package/lib/common/list-lib-components.js.map +1 -1
  62. package/lib/common/output.js +164 -164
  63. package/lib/common/output.js.map +1 -1
  64. package/lib/common/project-layout.js +155 -155
  65. package/lib/common/project-layout.js.map +1 -1
  66. package/lib/common/safety.js +172 -172
  67. package/lib/common/safety.js.map +1 -1
  68. package/lib/common/template-manifest.js +18 -18
  69. package/lib/common/template-manifest.js.map +1 -1
  70. package/lib/common/template-renderer.js +114 -114
  71. package/lib/common/template-renderer.js.map +1 -1
  72. package/lib/common/transaction.js +83 -83
  73. package/lib/common/transaction.js.map +1 -1
  74. package/lib/common/verifier.js +187 -187
  75. package/lib/common/verifier.js.map +1 -1
  76. package/lib/common/workspace-contract.js +191 -191
  77. package/lib/common/workspace-contract.js.map +1 -1
  78. package/lib/config/vite-app.js +13 -13
  79. package/lib/config/vite-common.js +20 -20
  80. package/lib/config/vite-common.js.map +1 -1
  81. package/lib/config/vite-component.js +32 -32
  82. package/lib/config/vite-component.js.map +1 -1
  83. package/lib/config/vite-lib.js +26 -26
  84. package/lib/index.js +261 -261
  85. package/lib/plugins/create-app-package-json.js +23 -23
  86. package/lib/plugins/create-component-style.js +44 -44
  87. package/lib/plugins/create-package-json.js +48 -48
  88. package/lib/plugins/create-package-json.js.map +1 -1
  89. package/lib/plugins/dts.js +8 -8
  90. package/lib/plugins/html-system.js +9 -9
  91. package/lib/plugins/mock.js +240 -292
  92. package/lib/plugins/mock.js.map +1 -1
  93. package/lib/plugins/msw-adapter.js +141 -0
  94. package/lib/plugins/msw-adapter.js.map +1 -0
  95. package/lib/plugins/replace.js +17 -17
  96. package/lib/plugins/systemjs-bundle.js +15 -15
  97. package/lib/plugins/systemjs-bundle.js.map +1 -1
  98. package/package.json +6 -1
  99. package/templates/create/AGENTS.md +4 -3
  100. package/templates/micro/mock/README.md +39 -26
  101. package/templates/micro/mock/tsconfig.json +10 -0
  102. package/templates/micro/package.json +1 -0
  103. package/templates/mobile/mock/README.md +39 -26
  104. package/templates/mobile/mock/tsconfig.json +10 -0
  105. package/templates/mobile/package.json +1 -0
  106. package/templates/web/mock/README.md +39 -26
  107. package/templates/web/mock/tsconfig.json +10 -0
  108. package/templates/web/package.json +1 -0
@@ -1,39 +1,39 @@
1
- import { build } from "esbuild";
2
- import { sassPlugin } from 'esbuild-sass-plugin';
3
- import path from 'node:path';
4
- import { CWD } from "../common/constant.js";
5
- import ora from "ora";
6
- const replaceUrl = (source, pathname, entry) => {
7
- const basedir = path.dirname(pathname);
8
- const entrydir = path.resolve(CWD, path.dirname(entry));
9
- const relativedir = path.relative(entrydir, basedir);
10
- const regExp = /(url\(['"]?)(\.\.?\/[^'")]+['"]?)(\))/g;
11
- return source.replace(regExp, (substring, ...args) => `url(./${path.join(relativedir, args[1]).replaceAll('\\', '/')})`);
12
- };
13
- export async function buildCss(options) {
14
- const { entry, outfile, minify = false, showSpinner = true } = options;
15
- const spinner = ora(`build css begin`).start();
16
- spinner.text = `building css`;
17
- if (!showSpinner) {
18
- spinner.stop();
19
- }
20
- await build({
21
- entryPoints: [entry],
22
- outfile,
23
- minify,
24
- bundle: true,
25
- logLevel: 'error',
26
- plugins: [sassPlugin({
27
- precompile(source, pathname) {
28
- return replaceUrl(source, pathname, entry);
29
- }
30
- })],
31
- loader: {
32
- '.ttf': 'dataurl'
33
- }
34
- });
35
- if (showSpinner) {
36
- spinner.succeed(`build css success`);
37
- }
38
- }
1
+ import { build } from "esbuild";
2
+ import { sassPlugin } from 'esbuild-sass-plugin';
3
+ import path from 'node:path';
4
+ import { CWD } from "../common/constant.js";
5
+ import ora from "ora";
6
+ const replaceUrl = (source, pathname, entry) => {
7
+ const basedir = path.dirname(pathname);
8
+ const entrydir = path.resolve(CWD, path.dirname(entry));
9
+ const relativedir = path.relative(entrydir, basedir);
10
+ const regExp = /(url\(['"]?)(\.\.?\/[^'")]+['"]?)(\))/g;
11
+ return source.replace(regExp, (substring, ...args) => `url(./${path.join(relativedir, args[1]).replaceAll('\\', '/')})`);
12
+ };
13
+ export async function buildCss(options) {
14
+ const { entry, outfile, minify = false, showSpinner = true } = options;
15
+ const spinner = ora(`build css begin`).start();
16
+ spinner.text = `building css`;
17
+ if (!showSpinner) {
18
+ spinner.stop();
19
+ }
20
+ await build({
21
+ entryPoints: [entry],
22
+ outfile,
23
+ minify,
24
+ bundle: true,
25
+ logLevel: 'error',
26
+ plugins: [sassPlugin({
27
+ precompile(source, pathname) {
28
+ return replaceUrl(source, pathname, entry);
29
+ }
30
+ })],
31
+ loader: {
32
+ '.ttf': 'dataurl'
33
+ }
34
+ });
35
+ if (showSpinner) {
36
+ spinner.succeed(`build css success`);
37
+ }
38
+ }
39
39
  //# sourceMappingURL=build-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-css.js","sourceRoot":"","sources":["../../src/commands/build-css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAa,EAAC,EAAE;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,wCAAwC,CAAC;IACxD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,EAAC,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1H,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAY;IACzC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEvE,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/C,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC;IAE9B,IAAG,CAAC,WAAW,EAAE;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;KAChB;IAGD,MAAM,KAAK,CAAC;QACV,WAAW,EAAE,CAAC,KAAK,CAAC;QACpB,OAAO;QACP,MAAM;QACN,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,CAAC,UAAU,CAAC;gBACnB,UAAU,CAAC,MAAM,EAAE,QAAQ;oBACzB,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC7C,CAAC;aACF,CAAC,CAAC;QACH,MAAM,EAAE;YACN,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;IAEH,IAAG,WAAW,EAAE;QACd,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;KACtC;AACH,CAAC"}
1
+ {"version":3,"file":"build-css.js","sourceRoot":"","sources":["../../src/commands/build-css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAa,EAAC,EAAE;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,wCAAwC,CAAC;IACxD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,EAAC,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1H,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAY;IACzC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEvE,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/C,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC;IAE9B,IAAG,CAAC,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAGD,MAAM,KAAK,CAAC;QACV,WAAW,EAAE,CAAC,KAAK,CAAC;QACpB,OAAO;QACP,MAAM;QACN,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,CAAC,UAAU,CAAC;gBACnB,UAAU,CAAC,MAAM,EAAE,QAAQ;oBACzB,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC7C,CAAC;aACF,CAAC,CAAC;QACH,MAAM,EAAE;YACN,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;IAEH,IAAG,WAAW,EAAE,CAAC;QACf,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -1,31 +1,31 @@
1
- import ora from 'ora';
2
- import { resolve } from 'node:path';
3
- import { buildCommon } from "./build.js";
4
- import { generateTypes } from "../plugins/dts.js";
5
- import { createPackageJson } from '../plugins/create-package-json.js';
6
- import { getFarrisConfigAsync } from '../common/get-farris-config.js';
7
- import { CWD } from '../common/constant.js';
8
- export async function buildLib(options) {
9
- const { dts = true, emitPackage } = options;
10
- const farrisConfig = await getFarrisConfigAsync(options.configFile);
11
- const outDir = farrisConfig.outDir || 'dist';
12
- const typesDir = resolve(CWD, outDir, 'types');
13
- const config = {
14
- publicDir: '',
15
- build: {
16
- // 干净构建:产物目录不接受上一版的残留文件(设计文档 §7.4)。
17
- // lib 的 outDir 位于 vite root 内,显式声明后不依赖 vite 的默认值。
18
- emptyOutDir: true
19
- },
20
- plugins: [
21
- dts && generateTypes('./components', typesDir),
22
- emitPackage && createPackageJson()
23
- ]
24
- };
25
- const spinner = ora(`build lib begin`).start();
26
- spinner.text = `building lib`;
27
- await buildCommon({ ...options, config, type: 'lib' });
28
- spinner.succeed(`build lib success`);
29
- }
30
- ;
1
+ import ora from 'ora';
2
+ import { resolve } from 'node:path';
3
+ import { buildCommon } from "./build.js";
4
+ import { generateTypes } from "../plugins/dts.js";
5
+ import { createPackageJson } from '../plugins/create-package-json.js';
6
+ import { getFarrisConfigAsync } from '../common/get-farris-config.js';
7
+ import { CWD } from '../common/constant.js';
8
+ export async function buildLib(options) {
9
+ const { dts = true, emitPackage } = options;
10
+ const farrisConfig = await getFarrisConfigAsync(options.configFile);
11
+ const outDir = farrisConfig.outDir || 'dist';
12
+ const typesDir = resolve(CWD, outDir, 'types');
13
+ const config = {
14
+ publicDir: '',
15
+ build: {
16
+ // 干净构建:产物目录不接受上一版的残留文件(设计文档 §7.4)。
17
+ // lib 的 outDir 位于 vite root 内,显式声明后不依赖 vite 的默认值。
18
+ emptyOutDir: true
19
+ },
20
+ plugins: [
21
+ dts && generateTypes('./components', typesDir),
22
+ emitPackage && createPackageJson()
23
+ ]
24
+ };
25
+ const spinner = ora(`build lib begin`).start();
26
+ spinner.text = `building lib`;
27
+ await buildCommon({ ...options, config, type: 'lib' });
28
+ spinner.succeed(`build lib success`);
29
+ }
30
+ ;
31
31
  //# sourceMappingURL=build-lib.js.map
@@ -1,20 +1,20 @@
1
- import { build, mergeConfig, loadConfigFromFile } from 'vite';
2
- import { getViteConfig } from '../common/get-vite-config.js';
3
- import { createAppPackageJson } from '../plugins/create-app-package-json.js';
4
- export async function buildCommon(options, loadFile = true) {
5
- const { configFile, viteConfigFile, config = {}, type, base, mode = 'production', emitPackage, format, outDir } = options;
6
- if (!loadFile) {
7
- await build(config);
8
- return config;
9
- }
10
- const viteConfig = await loadConfigFromFile({ command: 'build', mode }, viteConfigFile);
11
- const defaultConfig = await getViteConfig(type, configFile, { base, mode, format, outDir });
12
- const plugins = [...(config.plugins ?? [])];
13
- if (emitPackage && type === 'app') {
14
- plugins.push(createAppPackageJson());
15
- }
16
- const finalConfig = mergeConfig(mergeConfig(defaultConfig, viteConfigFile && viteConfig?.config ? viteConfig.config : {}), { ...config, plugins });
17
- await build(finalConfig);
18
- return finalConfig;
19
- }
1
+ import { build, mergeConfig, loadConfigFromFile } from 'vite';
2
+ import { getViteConfig } from '../common/get-vite-config.js';
3
+ import { createAppPackageJson } from '../plugins/create-app-package-json.js';
4
+ export async function buildCommon(options, loadFile = true) {
5
+ const { configFile, viteConfigFile, config = {}, type, base, mode = 'production', emitPackage, format, outDir } = options;
6
+ if (!loadFile) {
7
+ await build(config);
8
+ return config;
9
+ }
10
+ const viteConfig = await loadConfigFromFile({ command: 'build', mode }, viteConfigFile);
11
+ const defaultConfig = await getViteConfig(type, configFile, { base, mode, format, outDir });
12
+ const plugins = [...(config.plugins ?? [])];
13
+ if (emitPackage && type === 'app') {
14
+ plugins.push(createAppPackageJson());
15
+ }
16
+ const finalConfig = mergeConfig(mergeConfig(defaultConfig, viteConfigFile && viteConfig?.config ? viteConfig.config : {}), { ...config, plugins });
17
+ await build(finalConfig);
18
+ return finalConfig;
19
+ }
20
20
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAiB7E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,QAAQ,GAAG,IAAI;IAC5E,MAAM,EACJ,UAAU,EACV,cAAc,EACd,MAAM,GAAG,EAAE,EACX,IAAI,EACJ,IAAI,EACJ,IAAI,GAAG,YAAY,EACnB,WAAW,EACX,MAAM,EACN,MAAM,EACP,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;KACf;IAED,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IAExF,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAU,CAAC,GAAG,CAAE,MAAM,CAAC,OAAiB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,IAAI,WAAW,IAAI,IAAI,KAAK,KAAK,EAAE;QACjC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACtC;IAED,MAAM,WAAW,GAAG,WAAW,CAC7B,WAAW,CAAC,aAAa,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EACzF,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CACvB,CAAC;IAEF,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAEzB,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAiB7E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,QAAQ,GAAG,IAAI;IAC5E,MAAM,EACJ,UAAU,EACV,cAAc,EACd,MAAM,GAAG,EAAE,EACX,IAAI,EACJ,IAAI,EACJ,IAAI,GAAG,YAAY,EACnB,WAAW,EACX,MAAM,EACN,MAAM,EACP,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IAExF,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAU,CAAC,GAAG,CAAE,MAAM,CAAC,OAAiB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,IAAI,WAAW,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAC7B,WAAW,CAAC,aAAa,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EACzF,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CACvB,CAAC;IAEF,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAEzB,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,86 +1,86 @@
1
- import { existsSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { ALLOWED_APP_FORMATS, ExitCode } from '../common/constant.js';
4
- import { assertTargetInsideCwd, CreateAppError, resolvePackageName } from '../common/create-app-target.js';
5
- export { assertTargetInsideCwd, CreateAppError, resolvePackageName };
6
- export { ALLOWED_APP_FORMATS };
7
- export const ALLOWED_TYPES = ['app', 'lib', 'micro'];
8
- export const ALLOWED_PLATFORMS = ['web', 'mobile'];
9
- /** lib 产物格式 */
10
- export const ALLOWED_FORMATS = ['es', 'cjs', 'umd', 'systemjs'];
11
- export const DEFAULT_NAME = 'my-project';
12
- export const DEFAULT_LIB_FORMATS = ['es', 'cjs', 'umd', 'systemjs'];
13
- export const DEFAULT_APP_FORMAT = 'es';
14
- /** 微应用交付:IBP 单文件产物 */
15
- export const DEFAULT_MICRO_FORMAT = 'iife';
16
- export const DEFAULT_PLATFORM = 'web';
17
- function assertAllowed(kind, value, allowed) {
18
- if (!allowed.includes(value)) {
19
- throw new CreateAppError(`非法的 ${kind}: ${value},允许值为 ${allowed.join(', ')}`);
20
- }
21
- }
22
- export function parseFormatsFlag(raw) {
23
- if (raw === undefined) {
24
- return undefined;
25
- }
26
- const parts = raw.split(',').map((part) => part.trim());
27
- if (parts.length === 0 || parts.some((part) => part === '')) {
28
- throw new CreateAppError('非法的 --formats: 不能为空');
29
- }
30
- parts.forEach((part) => assertAllowed('--formats', part, ALLOWED_FORMATS));
31
- return parts;
32
- }
33
- export function validateCliInput(input) {
34
- if (input.type !== undefined) {
35
- assertAllowed('--type', input.type, ALLOWED_TYPES);
36
- }
37
- if (input.platform !== undefined) {
38
- assertAllowed('--platform', input.platform, ALLOWED_PLATFORMS);
39
- }
40
- if (input.format !== undefined) {
41
- assertAllowed('--format', input.format, ALLOWED_APP_FORMATS);
42
- }
43
- if (input.formats !== undefined) {
44
- parseFormatsFlag(input.formats);
45
- }
46
- }
47
- export function resolveNonInteractiveOptions(input) {
48
- validateCliInput(input);
49
- if (!input.type) {
50
- throw new CreateAppError('--type 在使用 -y / --yes 或 --json 时必填');
51
- }
52
- const name = input.name && input.name.trim() !== '' ? input.name : DEFAULT_NAME;
53
- assertTargetInsideCwd(name);
54
- const packageName = resolvePackageName(name);
55
- if (input.type === 'lib') {
56
- return {
57
- name,
58
- packageName,
59
- type: 'lib',
60
- formats: parseFormatsFlag(input.formats) ?? [...DEFAULT_LIB_FORMATS]
61
- };
62
- }
63
- if (input.type === 'micro') {
64
- return {
65
- name,
66
- packageName,
67
- type: 'micro',
68
- platform: input.platform ?? DEFAULT_PLATFORM,
69
- format: input.format ?? DEFAULT_MICRO_FORMAT
70
- };
71
- }
72
- return {
73
- name,
74
- packageName,
75
- type: 'app',
76
- platform: input.platform ?? DEFAULT_PLATFORM,
77
- format: input.format ?? DEFAULT_APP_FORMAT
78
- };
79
- }
80
- export function assertTargetDirectoryFree(name, cwd = process.cwd()) {
81
- assertTargetInsideCwd(name, cwd);
82
- if (existsSync(resolve(cwd, name))) {
83
- throw new CreateAppError(`目标目录已存在: ${name}`, ExitCode.TARGET_CONFLICT);
84
- }
85
- }
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { ALLOWED_APP_FORMATS, ExitCode } from '../common/constant.js';
4
+ import { assertTargetInsideCwd, CreateAppError, resolvePackageName } from '../common/create-app-target.js';
5
+ export { assertTargetInsideCwd, CreateAppError, resolvePackageName };
6
+ export { ALLOWED_APP_FORMATS };
7
+ export const ALLOWED_TYPES = ['app', 'lib', 'micro'];
8
+ export const ALLOWED_PLATFORMS = ['web', 'mobile'];
9
+ /** lib 产物格式 */
10
+ export const ALLOWED_FORMATS = ['es', 'cjs', 'umd', 'systemjs'];
11
+ export const DEFAULT_NAME = 'my-project';
12
+ export const DEFAULT_LIB_FORMATS = ['es', 'cjs', 'umd', 'systemjs'];
13
+ export const DEFAULT_APP_FORMAT = 'es';
14
+ /** 微应用交付:IBP 单文件产物 */
15
+ export const DEFAULT_MICRO_FORMAT = 'iife';
16
+ export const DEFAULT_PLATFORM = 'web';
17
+ function assertAllowed(kind, value, allowed) {
18
+ if (!allowed.includes(value)) {
19
+ throw new CreateAppError(`非法的 ${kind}: ${value},允许值为 ${allowed.join(', ')}`);
20
+ }
21
+ }
22
+ export function parseFormatsFlag(raw) {
23
+ if (raw === undefined) {
24
+ return undefined;
25
+ }
26
+ const parts = raw.split(',').map((part) => part.trim());
27
+ if (parts.length === 0 || parts.some((part) => part === '')) {
28
+ throw new CreateAppError('非法的 --formats: 不能为空');
29
+ }
30
+ parts.forEach((part) => assertAllowed('--formats', part, ALLOWED_FORMATS));
31
+ return parts;
32
+ }
33
+ export function validateCliInput(input) {
34
+ if (input.type !== undefined) {
35
+ assertAllowed('--type', input.type, ALLOWED_TYPES);
36
+ }
37
+ if (input.platform !== undefined) {
38
+ assertAllowed('--platform', input.platform, ALLOWED_PLATFORMS);
39
+ }
40
+ if (input.format !== undefined) {
41
+ assertAllowed('--format', input.format, ALLOWED_APP_FORMATS);
42
+ }
43
+ if (input.formats !== undefined) {
44
+ parseFormatsFlag(input.formats);
45
+ }
46
+ }
47
+ export function resolveNonInteractiveOptions(input) {
48
+ validateCliInput(input);
49
+ if (!input.type) {
50
+ throw new CreateAppError('--type 在使用 -y / --yes 或 --json 时必填');
51
+ }
52
+ const name = input.name && input.name.trim() !== '' ? input.name : DEFAULT_NAME;
53
+ assertTargetInsideCwd(name);
54
+ const packageName = resolvePackageName(name);
55
+ if (input.type === 'lib') {
56
+ return {
57
+ name,
58
+ packageName,
59
+ type: 'lib',
60
+ formats: parseFormatsFlag(input.formats) ?? [...DEFAULT_LIB_FORMATS]
61
+ };
62
+ }
63
+ if (input.type === 'micro') {
64
+ return {
65
+ name,
66
+ packageName,
67
+ type: 'micro',
68
+ platform: input.platform ?? DEFAULT_PLATFORM,
69
+ format: input.format ?? DEFAULT_MICRO_FORMAT
70
+ };
71
+ }
72
+ return {
73
+ name,
74
+ packageName,
75
+ type: 'app',
76
+ platform: input.platform ?? DEFAULT_PLATFORM,
77
+ format: input.format ?? DEFAULT_APP_FORMAT
78
+ };
79
+ }
80
+ export function assertTargetDirectoryFree(name, cwd = process.cwd()) {
81
+ assertTargetInsideCwd(name, cwd);
82
+ if (existsSync(resolve(cwd, name))) {
83
+ throw new CreateAppError(`目标目录已存在: ${name}`, ExitCode.TARGET_CONFLICT);
84
+ }
85
+ }
86
86
  //# sourceMappingURL=create-app-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-app-options.js","sourceRoot":"","sources":["../../src/commands/create-app-options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-app-options.js","sourceRoot":"","sources":["../../src/commands/create-app-options.ts"],"names":[],"mappings":"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"}