@liuli-util/cli 3.10.1 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +3 -3
  3. package/dist/PathUtil.d.ts +6 -6
  4. package/dist/bin.d.ts +1 -1
  5. package/dist/bin.js +102 -86
  6. package/dist/bin.js.map +3 -3
  7. package/dist/commands/esbuild/ESBuildProgram.d.ts +70 -10
  8. package/dist/commands/esbuild/ESBuildProgram.d.ts.map +1 -1
  9. package/dist/commands/esbuild/index.d.ts +2 -2
  10. package/dist/commands/esbuild/index.d.ts.map +1 -1
  11. package/dist/commands/esbuild/util/debounce.d.ts +15 -0
  12. package/dist/commands/esbuild/util/debounce.d.ts.map +1 -0
  13. package/dist/commands/esbuild/util/esbuildPlugins.d.ts +16 -0
  14. package/dist/commands/esbuild/util/esbuildPlugins.d.ts.map +1 -0
  15. package/dist/commands/generate/GenerateProgram.d.ts +17 -17
  16. package/dist/commands/generate/GenerateProgram.d.ts.map +1 -1
  17. package/dist/commands/generate/index.d.ts +2 -2
  18. package/dist/commands/sync/SyncProgram.d.ts +14 -15
  19. package/dist/commands/sync/SyncProgram.d.ts.map +1 -1
  20. package/dist/commands/sync/index.d.ts +2 -2
  21. package/dist/commands/sync/when.d.ts +20 -20
  22. package/dist/index.d.ts +3 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.esm.js +5 -0
  25. package/dist/index.esm.js.map +3 -3
  26. package/dist/index.js +5 -5
  27. package/dist/index.js.map +3 -3
  28. package/dist/utils/AsyncArray.d.ts +20 -20
  29. package/dist/utils/appendScript.d.ts +6 -6
  30. package/dist/utils/arrayToMap.d.ts +2 -2
  31. package/dist/utils/findParent.d.ts +7 -7
  32. package/dist/utils/index.d.ts +4 -4
  33. package/package.json +19 -7
  34. package/src/@types/global.d.ts +8 -0
  35. package/src/bin.ts +2 -2
  36. package/src/commands/esbuild/ESBuildProgram.ts +263 -63
  37. package/src/commands/esbuild/__tests__/ESBuildProgram.test.ts +125 -0
  38. package/src/commands/esbuild/__tests__/spinnies.test.ts +11 -0
  39. package/src/commands/esbuild/index.ts +14 -6
  40. package/src/commands/esbuild/util/debounce.ts +29 -0
  41. package/src/commands/esbuild/util/esbuildPlugins.ts +82 -0
  42. package/src/commands/generate/GenerateProgram.ts +7 -5
  43. package/src/commands/sync/SyncProgram.ts +6 -12
  44. package/src/commands/sync/__tests__/SyncProgram.test.ts +2 -2
  45. package/src/index.ts +3 -1
  46. package/src/utils/__tests__/appendScript.test.ts +1 -1
  47. package/templates/cli/package.json +1 -1
  48. package/templates/lib/package.json +1 -1
  49. package/dist/commands/generate/__tests__/GenerateProgram.test.d.ts +0 -2
  50. package/dist/commands/generate/__tests__/GenerateProgram.test.d.ts.map +0 -1
  51. package/dist/commands/sync/__tests__/SyncProgram.test.d.ts +0 -2
  52. package/dist/commands/sync/__tests__/SyncProgram.test.d.ts.map +0 -1
  53. package/dist/commands/sync/__tests__/when.test.d.ts +0 -2
  54. package/dist/commands/sync/__tests__/when.test.d.ts.map +0 -1
  55. package/dist/tsconfig.tsbuildinfo +0 -1
  56. package/dist/utils/__tests__/appendScript.test.d.ts +0 -2
  57. package/dist/utils/__tests__/appendScript.test.d.ts.map +0 -1
  58. package/dist/utils/__tests__/arrayToMap.test.d.ts +0 -2
  59. package/dist/utils/__tests__/arrayToMap.test.d.ts.map +0 -1
  60. package/dist/utils/__tests__/findParent.test.d.ts +0 -2
  61. package/dist/utils/__tests__/findParent.test.d.ts.map +0 -1
  62. package/dist/utils/execPromise.d.ts +0 -4
  63. package/dist/utils/execPromise.d.ts.map +0 -1
  64. package/src/utils/execPromise.ts +0 -16
@@ -1,11 +1,71 @@
1
- import { BuildOptions } from 'esbuild';
2
- export declare class ESBuildProgram {
3
- private readonly base;
4
- constructor(base: string);
5
- build(options: BuildOptions[]): Promise<void>;
6
- getDeps(): Promise<string[]>;
7
- genDTS(isWatch: boolean): Promise<void>;
8
- buildPkg(isWatch: boolean): Promise<void>;
9
- buildCli(isWatch: boolean): Promise<void>;
10
- }
1
+ import { BuildOptions, Platform, Plugin } from 'esbuild';
2
+ import { IOptions } from 'glob';
3
+ import Spinnies from 'spinnies';
4
+ interface ESBuildProgramOptions {
5
+ base: string;
6
+ isWatch: boolean;
7
+ }
8
+ interface Task {
9
+ title: string;
10
+ task(): Promise<any>;
11
+ }
12
+ export declare class ESBuildProgram {
13
+ private readonly options;
14
+ constructor(options: ESBuildProgramOptions);
15
+ static readonly globalExternal: string[];
16
+ /**
17
+ * 获取所有依赖
18
+ */
19
+ static getDeps(base: string): Promise<string[]>;
20
+ /**
21
+ * 获取所在模块的类型
22
+ */
23
+ static getPlatform(base: string): Promise<Platform>;
24
+ static getWatchOptions(base: string): {
25
+ pattern: string;
26
+ options: IOptions;
27
+ };
28
+ /**
29
+ * 生成类型定义
30
+ */
31
+ genDTS(): Promise<void>;
32
+ /**
33
+ * 获取构建 cjs 的选项
34
+ * @param deps
35
+ * @param platform
36
+ * @param plugins
37
+ */
38
+ getBuildCjsOption({ deps, platform, }: {
39
+ deps: string[];
40
+ platform: Platform;
41
+ }): BuildOptions;
42
+ /**
43
+ * 获取构建 esm 的选项
44
+ * @param deps
45
+ * @param platform
46
+ * @param plugins
47
+ */
48
+ getBuildESMOption({ deps, platform, }: {
49
+ deps: string[];
50
+ platform: Platform;
51
+ }): BuildOptions;
52
+ /**
53
+ * 获取构建 cli 的选项
54
+ * @param deps
55
+ * @param platform
56
+ * @param plugins
57
+ */
58
+ getBuildCliOption({ deps, platform, }: {
59
+ deps: string[];
60
+ platform: Platform;
61
+ }): BuildOptions;
62
+ static getPlugins(platform: string): Plugin[];
63
+ buildLib(): Promise<void>;
64
+ buildCli(): Promise<void>;
65
+ getBuildLibTask(deps: string[], platform: Platform): Task[];
66
+ getBuildCliTask(deps: string[], platform: Platform): Task[];
67
+ static execTask(spinnies: Spinnies, task: Task): Promise<void>;
68
+ build(genTasks: (deps: string[], platform: Platform) => Task[]): Promise<void>;
69
+ }
70
+ export {};
11
71
  //# sourceMappingURL=ESBuildProgram.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ESBuildProgram.d.ts","sourceRoot":"","sources":["../../../src/commands/esbuild/ESBuildProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,MAAM,SAAS,CAAA;AAM7C,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IACnC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAW5B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BzC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBhD"}
1
+ {"version":3,"file":"ESBuildProgram.d.ts","sourceRoot":"","sources":["../../../src/commands/esbuild/ESBuildProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAM/D,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAG/B,OAAO,QAAQ,MAAM,UAAU,CAAA;AAG/B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,UAAU,IAAI;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;CACrB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,qBAAqB;IAE3D,MAAM,CAAC,QAAQ,CAAC,cAAc,WAAoC;IAElE;;OAEG;WACU,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWrD;;OAEG;WACU,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqBzD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;QACpC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,QAAQ,CAAA;KAClB;IAQD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB7B;;;;;OAKG;IACH,iBAAiB,CAAC,EAChB,IAAI,EACJ,QAAQ,GACT,EAAE;QACD,IAAI,EAAE,MAAM,EAAE,CAAA;QACd,QAAQ,EAAE,QAAQ,CAAA;KACnB,GAAG,YAAY;IAchB;;;;;OAKG;IACH,iBAAiB,CAAC,EAChB,IAAI,EACJ,QAAQ,GACT,EAAE;QACD,IAAI,EAAE,MAAM,EAAE,CAAA;QACd,QAAQ,EAAE,QAAQ,CAAA;KACnB,GAAG,YAAY;IAchB;;;;;OAKG;IACH,iBAAiB,CAAC,EAChB,IAAI,EACJ,QAAQ,GACT,EAAE;QACD,IAAI,EAAE,MAAM,EAAE,CAAA;QACd,QAAQ,EAAE,QAAQ,CAAA;KACnB,GAAG,YAAY;IAsBhB,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAQvC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE;IA4B3D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE;WAgB9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9D,KAAK,CACT,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE,GACvD,OAAO,CAAC,IAAI,CAAC;CAyBjB"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
2
- export declare const buildCommand: Command;
1
+ import { Command } from 'commander';
2
+ export declare const esbuildCommand: Command;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/esbuild/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,YAAY,SAkBtB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/esbuild/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,eAAO,MAAM,cAAc,SA2BxB,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 函数去抖
3
+ * 去抖 (debounce) 去抖就是对于一定时间段的连续的函数调用,只让其执行一次
4
+ * 注: 包装后的函数如果两次操作间隔小于 delay 则不会被执行, 如果一直在操作就会一直不执行, 直到操作停止的时间大于 delay 最小间隔时间才会执行一次, 不管任何时间调用都需要停止操作等待最小延迟时间
5
+ * 应用场景主要在那些连续的操作, 例如页面滚动监听, 包装后的函数只会执行最后一次
6
+ * 注: 该函数第一次调用一定不会执行,第一次一定拿不到缓存值,后面的连续调用都会拿到上一次的缓存值。如果需要在第一次调用获取到的缓存值,则需要传入第三个参数 {@param init},默认为 {@code undefined} 的可选参数
7
+ * 注: 返回函数结果的高阶函数需要使用 {@see Proxy} 实现,以避免原函数原型链上的信息丢失
8
+ *
9
+ * @param fn 真正需要执行的操作
10
+ * @param delay 最小延迟时间,单位为 ms
11
+ * @param init 初始的缓存值,不填默认为 {@see undefined}
12
+ * @return 包装后有去抖功能的函数。该函数是异步的,与需要包装的函数 {@param fn} 是否异步没有太大关联
13
+ */
14
+ export declare function debounce<T extends (...args: any[]) => any, R extends (...args: Parameters<T>) => Promise<ReturnType<T>>>(fn: T, delay: number, init?: any): R;
15
+ //# sourceMappingURL=debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../../../src/commands/esbuild/util/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACjC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAC5D,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,GAAU,GAAG,CAAC,CAY3C"}
@@ -0,0 +1,16 @@
1
+ import { Plugin } from 'esbuild';
2
+ /**
3
+ * 处理 nodejs 原生模块
4
+ * @link https://github.com/evanw/esbuild/issues/1051#issuecomment-806325487
5
+ */
6
+ export declare function nativeNodeModules(): Plugin;
7
+ /**
8
+ * 排除和替换 node 内置模块
9
+ */
10
+ export declare function nodeExternals(): Plugin;
11
+ /**
12
+ * 自动排除所有依赖项
13
+ * golang 不支持 js 的一些语法,参考 https://github.com/evanw/esbuild/issues/1634
14
+ */
15
+ export declare function autoExternal(): Plugin;
16
+ //# sourceMappingURL=esbuildPlugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esbuildPlugins.d.ts","sourceRoot":"","sources":["../../../../src/commands/esbuild/util/esbuildPlugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhC;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAuC1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAUtC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAerC"}
@@ -1,18 +1,18 @@
1
- export declare enum TemplateTypeEnum {
2
- Cli = "cli",
3
- Lib = "lib"
4
- }
5
- export interface GenerateConfig {
6
- template: TemplateTypeEnum;
7
- dest: string;
8
- initSync?: boolean;
9
- }
10
- export declare class GenerateProgram {
11
- /**
12
- * 生成项目
13
- */
14
- generate(config: GenerateConfig): Promise<void>;
15
- static updatePackageJSON(destFile: string): Promise<void>;
16
- static updateReadme(destFile: string): Promise<void>;
17
- }
1
+ export declare enum TemplateTypeEnum {
2
+ Cli = "cli",
3
+ Lib = "lib"
4
+ }
5
+ export interface GenerateConfig {
6
+ template: TemplateTypeEnum;
7
+ dest: string;
8
+ initSync?: boolean;
9
+ }
10
+ export declare class GenerateProgram {
11
+ /**
12
+ * 生成项目
13
+ */
14
+ generate(config: GenerateConfig): Promise<void>;
15
+ static updatePackageJSON(destFile: string): Promise<void>;
16
+ static updateReadme(destFile: string): Promise<void>;
17
+ }
18
18
  //# sourceMappingURL=GenerateProgram.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateProgram.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/GenerateProgram.ts"],"names":[],"mappings":"AAeA,oBAAY,gBAAgB;IAC1B,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;WA8DxC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAclD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3D"}
1
+ {"version":3,"file":"GenerateProgram.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/GenerateProgram.ts"],"names":[],"mappings":"AAeA,oBAAY,gBAAgB;IAC1B,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;WAgExC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAclD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3D"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
2
- export declare const generateCommand: Command;
1
+ import { Command } from 'commander';
2
+ export declare const generateCommand: Command;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,16 +1,15 @@
1
- export declare function installDeps(base: string, deps: string[]): void;
2
- export declare function mergeJson(base: string, json: object): Promise<void>;
3
- export declare type SyncConfigType = 'prettier' | 'commitlint' | 'simplehooks' | 'workspaces' | 'gitignore' | 'eslint-ts' | 'eslint-vue-ts' | 'eslint-react-ts' | 'jest';
4
- export interface SyncConfig {
5
- type: SyncConfigType;
6
- handler(): Promise<void>;
7
- when?(): Promise<boolean>;
8
- }
9
- export declare class SyncProgram {
10
- private readonly base;
11
- constructor(base: string);
12
- private syncConfigs;
13
- sync(): Promise<void>;
14
- init(): Promise<void>;
15
- }
1
+ export declare function mergeJson(base: string, json: object): Promise<void>;
2
+ export declare type SyncConfigType = 'prettier' | 'commitlint' | 'simplehooks' | 'workspaces' | 'gitignore' | 'eslint-ts' | 'eslint-vue-ts' | 'eslint-react-ts' | 'jest';
3
+ export interface SyncConfig {
4
+ type: SyncConfigType;
5
+ handler(): Promise<void>;
6
+ when?(): Promise<boolean>;
7
+ }
8
+ export declare class SyncProgram {
9
+ private readonly base;
10
+ constructor(base: string);
11
+ private syncConfigs;
12
+ sync(): Promise<void>;
13
+ init(): Promise<void>;
14
+ }
16
15
  //# sourceMappingURL=SyncProgram.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SyncProgram.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/SyncProgram.ts"],"names":[],"mappings":"AAcA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAK9D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AAED,oBAAY,cAAc,GACtB,UAAU,GACV,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,WAAW,GACX,WAAW,GACX,eAAe,GACf,iBAAiB,GACjB,MAAM,CAAA;AAEV,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAC1B;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IACzC,OAAO,CAAC,WAAW,CAkKlB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB5B"}
1
+ {"version":3,"file":"SyncProgram.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/SyncProgram.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AAED,oBAAY,cAAc,GACtB,UAAU,GACV,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,WAAW,GACX,WAAW,GACX,eAAe,GACf,iBAAiB,GACjB,MAAM,CAAA;AAEV,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAC1B;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IACzC,OAAO,CAAC,WAAW,CAkKlB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB5B"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
2
- export declare const syncCommand: Command;
1
+ import { Command } from 'commander';
2
+ export declare const syncCommand: Command;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,21 +1,21 @@
1
- /**
2
- * 判断是否包含 package.json
3
- * @param cwd
4
- */
5
- export declare function isNpmPackage(cwd?: string): Promise<boolean>;
6
- /**
7
- * 判断是 yarn2 monorepo 项目
8
- * @param cwd
9
- */
10
- export declare function isYarnRoot(cwd?: string): Promise<boolean>;
11
- /**
12
- * 判断是 yarn2 monorepo 的子模块
13
- */
14
- export declare function isYarnSubModule(cwd?: string): Promise<boolean>;
15
- /**
16
- * 是否包含指定依赖
17
- * @param deps
18
- * @param cwd
19
- */
20
- export declare function isIncludeDep(deps: string[], cwd?: string): Promise<boolean>;
1
+ /**
2
+ * 判断是否包含 package.json
3
+ * @param cwd
4
+ */
5
+ export declare function isNpmPackage(cwd?: string): Promise<boolean>;
6
+ /**
7
+ * 判断是 yarn2 monorepo 项目
8
+ * @param cwd
9
+ */
10
+ export declare function isYarnRoot(cwd?: string): Promise<boolean>;
11
+ /**
12
+ * 判断是 yarn2 monorepo 的子模块
13
+ */
14
+ export declare function isYarnSubModule(cwd?: string): Promise<boolean>;
15
+ /**
16
+ * 是否包含指定依赖
17
+ * @param deps
18
+ * @param cwd
19
+ */
20
+ export declare function isIncludeDep(deps: string[], cwd?: string): Promise<boolean>;
21
21
  //# sourceMappingURL=when.d.ts.map
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export {};
1
+ export * from './commands/esbuild/ESBuildProgram';
2
+ export * from './commands/generate/GenerateProgram';
3
+ export * from './commands/sync/SyncProgram';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAA;AACjD,cAAc,qCAAqC,CAAA;AACnD,cAAc,6BAA6B,CAAA"}
package/dist/index.esm.js CHANGED
@@ -1 +1,6 @@
1
+ var G=Object.defineProperty;var z=(s,t,e)=>t in s?G(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var S=(s=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(s,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):s)(function(s){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+s+'" is not supported')});var g=(s,t,e)=>(z(s,typeof t!="symbol"?t+"":t,e),e);import{build as j}from"esbuild";import{pathExists as E,readJson as O}from"fs-extra";import{resolve as P}from"path";import{Project as H}from"ts-morph";import{promise as Q}from"glob-promise";function D(){return{name:"native-node-modules",setup(s){s.onResolve({filter:/\.node$/,namespace:"file"},e=>({path:S.resolve(e.path,{paths:[e.resolveDir]}),namespace:"node-file"})),s.onLoad({filter:/.*/,namespace:"node-file"},e=>({contents:`
2
+ import path from ${JSON.stringify(e.path)}
3
+ try { module.exports = require(path) }
4
+ catch {}
5
+ `})),s.onResolve({filter:/\.node$/,namespace:"node-file"},e=>({path:e.path,namespace:"file"}));let t=s.initialOptions;t.loader=t.loader||{},t.loader[".node"]="file"}}}function F(){return{name:"esbuild-plugin-node-externals",setup(s){s.onResolve({filter:/(^node:)/},t=>({path:t.path.slice(5),external:!0}))}}}import{watch as X}from"chokidar";import Z from"spinnies";function B(s,t,e=null){let i,a=e;return async function(...n){return new Promise(r=>{i&&clearTimeout(i),i=setTimeout(()=>r(a=s(...n)),t),setTimeout(()=>r(a),t)})}}var l=class{constructor(t){this.options=t}static async getDeps(t){let e=await O(P(t,"package.json"));return Object.keys({...e.dependencies,...e.devDependencies,...e.peerDependencies})}static async getPlatform(t){let e=P(t,"tsconfig.json");if(await E(e)&&(await O(e)).compilerOptions.lib.some(n=>n.toLowerCase()==="dom"))return"browser";let i=P(t,"package.json");if(await E(i)){let a=await O(i);if(Object.keys(a.devDependencies??{}).includes("@types/node"))return"node"}return"neutral"}static getWatchOptions(t){return{pattern:"src/**/*.ts",options:{cwd:t,ignore:"**/__tests__/**/*"}}}async genDTS(){let t=this.options.base,{pattern:e,options:i}=l.getWatchOptions(this.options.base),a=new H({tsConfigFilePath:P(t,"tsconfig.json"),skipAddingFilesFromTsConfig:!0,compilerOptions:{emitDeclarationOnly:!0,noEmit:!1,incremental:this.options.isWatch}}),n=(await Q(e,i)).map(r=>P(t,r));a.addSourceFilesAtPaths(n),await a.emit({emitOnlyDtsFiles:!0})}getBuildCjsOption({deps:t,platform:e}){return{outfile:"./dist/index.js",format:"cjs",sourcemap:!0,entryPoints:["./src/index.ts"],bundle:!0,external:[...l.globalExternal,...t],platform:e,minify:!this.options.isWatch,incremental:this.options.isWatch}}getBuildESMOption({deps:t,platform:e}){return{outfile:"./dist/index.esm.js",format:"esm",sourcemap:!0,entryPoints:["./src/index.ts"],bundle:!0,external:[...l.globalExternal,...t],platform:e,minify:!this.options.isWatch,incremental:this.options.isWatch}}getBuildCliOption({deps:t,platform:e}){let i=l.getPlugins(e);return{entryPoints:["./src/bin.ts"],outfile:"./dist/bin.js",format:"cjs",sourcemap:!0,platform:e,bundle:!0,banner:{js:"#!/usr/bin/env node"},external:[...l.globalExternal,...this.options.isWatch?t:[]],plugins:i,minify:!this.options.isWatch,incremental:this.options.isWatch}}static getPlugins(t){let e=[];return t==="node"&&e.push(F(),D()),e}async buildLib(){await this.build(this.getBuildLibTask.bind(this))}async buildCli(){await this.build(this.getBuildCliTask.bind(this))}getBuildLibTask(t,e){return[{title:"\u6784\u5EFA esm",task:()=>j(this.getBuildESMOption({deps:t,platform:e}))},{title:"\u6784\u5EFA cjs",task:()=>j(this.getBuildCjsOption({deps:t,platform:e}))},{title:"\u751F\u6210\u7C7B\u578B\u5B9A\u4E49",task:()=>this.genDTS()}]}getBuildCliTask(t,e){return[{title:"\u6784\u5EFA cli",task:()=>j(this.getBuildCliOption({deps:t,platform:e}))},...this.getBuildLibTask(t,e)]}static async execTask(t,e){let i=Date.now();t.add(e.title,{text:e.title});try{await e.task(),t.succeed(e.title,{text:`${e.title}: ${Date.now()-i}ms`})}catch(a){t.fail(e.title,{text:e.title})}}async build(t){let e=async()=>{let n=Date.now(),r=await l.getDeps(this.options.base),R=await l.getPlatform(this.options.base),q=t(r,R),Y=new Z;await Promise.all(q.map(async U=>l.execTask(Y,U))),console.log(`\u6784\u5EFA\u5B8C\u6210: ${Date.now()-n}ms`)};if(!this.options.isWatch){await e();return}let{pattern:i,options:a}=l.getWatchOptions(this.options.base);await new Promise((n,r)=>{X(i,a).on("error",r).on("all",B(e,10))})}},L=l;g(L,"globalExternal",["esbuild","pnpapi","ts-morph"]);import m from"path";import{copy as lt,pathExists as V,readdir as pt,readFile as ct,readJSON as mt,remove as ut,writeFile as dt,writeJSON as ft}from"fs-extra";import{prompt as C}from"enquirer";import{readFile as et,readJson as w,writeFile as it,writeJson as I}from"fs-extra";import d from"path";import{merge as N}from"lodash-es";import st from"@liuli-util/prettier-standard-config/package.json";import at from"@liuli-util/eslint-config-ts/package.json";import nt from"@liuli-util/eslint-config-react-ts/package.json";import rt from"@liuli-util/commitlint-standard-config/package.json";import{prompt as ot}from"enquirer";import{pathExists as A,readJson as K}from"fs-extra";import b from"path";function W(s,t,e=i=>i){return s.reduce((i,a,n,r)=>i.set(t(a,n,r),e(a,n,r)),new Map)}function $(s,t){return s?s.includes(t)?s:s+" && "+t:t}import _ from"path";function M(s,t){let e=t(s);function i(a){if(a)return s;let n=_.dirname(s);return n===s?null:M(n,t)}return e instanceof Promise?e.then(i):i(e)}var o;(function(n){n.Filter="filter",n.Map="map",n.ForEach="forEach",n.Reduce="reduce",n.FlatMap="flatMap"})(o||(o={}));var h=class{constructor(t,e){this.type=t;this.args=e;this.type=t,this.args=e}};g(h,"Type",o);var p=class{constructor(t){this.arr=t}static reduce(t,e,i){return t.reduce((a,n,r)=>a.then(R=>e(R,n,r)),Promise.resolve(i))}static map(t,e){return Promise.all(t.map((i,a)=>e(i,a)))}static async filter(t,e){let i=[];return await p.map(t,async(a,n)=>{await e(a,n)&&i.push(a)}),i}static async flatMap(t,e){return(await Promise.all(t.map((i,a)=>e(i,a)))).flatMap(i=>i)}static async forEach(t,e){await p.map(t,e)}tasks=[];map(t){return this.tasks.push(new h(o.Map,[t])),this}flatMap(t){return this.tasks.push(new h(o.FlatMap,[t])),this}filter(t){return this.tasks.push(new h(o.Filter,[t])),this}async forEach(t){this.tasks.push(new h(o.Map,[t])),await this}then(t,e){let i=this.value();return i.then(a=>(t&&t(i),a)).catch(a=>{throw e&&e(a),a}),i}async value(){let t=this.arr;for(let e of this.tasks)switch(e.type){case o.Filter:t=await p.filter(t,e.args[0]);break;case o.Map:t=await p.map(t,e.args[0]);break;case o.FlatMap:t=await p.flatMap(t,e.args[0]);break;case o.ForEach:await p.forEach(t,e.args[0]);return;case o.Reduce:return await p.reduce(t,e.args[0],e.args[1])}return t}};async function c(s=process.cwd()){return await A(b.resolve(s,"./package.json"))}async function u(s=process.cwd()){return await c(s)?!!(await K(b.resolve(s,"./package.json"))).workspaces:!1}async function x(s=process.cwd()){return!await c(s)||await u(s)?!1:await M(b.dirname(s),u)!==null}async function k(s,t=process.cwd()){if(!await c(t))return!1;let e=await K(b.resolve(t,"./package.json")),i=new Set(Object.keys({...e.dependencies,...e.devDependencies}));return s.every(a=>i.has(a))}import tt from"path";var y=class{};g(y,"RootPath",tt.resolve(__dirname,".."));async function f(s,t){let e=d.resolve(s,"./package.json");await I(e,N(await w(e),t),{spaces:2})}var J=class{constructor(t){this.base=t}syncConfigs=[{type:"workspaces",handler:async()=>{let t=d.resolve(this.base,"./package.json"),e=d.resolve(this.base,"lerna.json"),i=await w(t),a=await w(e);a.packages=i.workspaces,await I(e,a,{spaces:2})},when:u},{type:"prettier",handler:async()=>{await f(this.base,{prettier:"@liuli-util/prettier-standard-config",devDependencies:{prettier:"^2.3.2","@liuli-util/prettier-standard-config":`^${st.version}`}})},async when(){return await c()&&(await u()||!await x())}},{type:"commitlint",handler:async()=>{await f(this.base,{"simple-git-hooks":{"commit-msg":"yarn commitlint --edit $1"},commitlint:{extends:["@liuli-util/commitlint-standard-config"]},devDependencies:{"@commitlint/cli":"^12.1.4","@liuli-util/commitlint-standard-config":`^${rt.version}`}})},async when(){return await c()&&(await u()||!await x())}},{type:"gitignore",handler:async()=>{let t=d.resolve(this.base,".gitignore");await it(t,await et(d.resolve(y.RootPath,"_gitignore"),"utf-8"))}},{type:"eslint-ts",handler:async()=>{await f(this.base,{eslintConfig:{extends:["@liuli-util/eslint-config-ts"]},devDependencies:{"@liuli-util/eslint-config-ts":`^${at.version}`}})},async when(){return await c()&&!await k(["vue"])&&!await k(["react"])}},{type:"eslint-react-ts",handler:async()=>{await f(this.base,{eslintConfig:{extends:["@liuli-util/eslint-config-react-ts"]},devDependencies:{"@liuli-util/eslint-config-react-ts":`^${nt.version}`}})},async when(){return await c()&&await k(["react"])}},{type:"jest",handler:async()=>{await f(this.base,{jest:{preset:"ts-jest",testMatch:["<rootDir>/src/**/__tests__/*.test.ts"]}})}},{type:"simplehooks",handler:async()=>{let t=await w(d.resolve(this.base,"./package.json")),e=[];t.prettier&&e.push("prettier --write"),t.eslintConfig&&e.push("eslint --fix");let i={scripts:{postinstall:$(t?.scripts?.postinstall,"npx simple-git-hooks")},"simple-git-hooks":{"pre-commit":"yarn lint-staged"},"lint-staged":{"*.{ts,tsx,js,jsx,css,vue}":[...e,"git add"]},devDependencies:{"simple-git-hooks":"^2.5.1","lint-staged":"^11.1.1"}};t.commitlint&&(i=N(i,{"simple-git-hooks":{"commit-msg":"yarn commitlint --edit $1"}})),await f(this.base,i)},async when(){return await c()&&(await u()||!await x())}}];async sync(){let{sync:t}=await w(d.resolve(this.base,"package.json"));if(!t)return;let e=this.syncConfigs.filter(i=>t.includes(i.type));for(let i of e)await i.handler()}async init(){let t=W(await p.filter(this.syncConfigs,async i=>i.when?await i.when():!0),i=>i.type),e=await ot({type:"multiselect",message:"\u8BF7\u9009\u62E9\u9700\u8981\u540C\u6B65\u7684\u914D\u7F6E\u9879",name:"sync",choices:[...t.keys()]});await f(this.base,{sync:e.sync})}};var v;(function(e){e.Cli="cli",e.Lib="lib"})(v||(v={}));var T=class{async generate(t){if(!t.dest){let{dest:a}=await C({name:"dest",type:"input",message:"\u8BF7\u8F93\u5165\u9879\u76EE\u540D",validate(n){return n.trim()!==""}});t.dest=m.resolve(a)}if(!t.template){let{template:a}=await C({name:"template",type:"list",message:"\u8BF7\u9009\u62E9\u6A21\u677F",choices:[v.Lib,v.Cli]});t.template=a}let e=m.resolve(y.RootPath,`templates/${t.template}`),i=m.resolve(t.dest);if(await V(i)&&(await pt(i)).some(a=>V(a))){let{override:a}=await C({name:"override",type:"confirm",initial:!0,message:"\u76EE\u6807\u4F4D\u7F6E\u4E0D\u662F\u4E00\u4E2A\u7A7A\u76EE\u5F55\uFF0C\u786E\u8BA4\u8981\u8986\u76D6\u4E48\uFF1F"});if(!a)return}if(await ut(i),await lt(e,i),await T.updatePackageJSON(i),await T.updateReadme(i),t.initSync){let a=new J(m.resolve(t.dest));await a.init(),await a.sync()}}static async updatePackageJSON(t){let e=m.resolve(t,"package.json");await ft(e,{...await mt(e),name:m.basename(t)},{spaces:2})}static async updateReadme(t){let e=m.resolve(t,"README.md"),i=await ct(e,"utf-8");i=i.replace("template",m.basename(t)),await dt(e,i)}};export{L as ESBuildProgram,T as GenerateProgram,J as SyncProgram,v as TemplateTypeEnum,f as mergeJson};
1
6
  //# sourceMappingURL=index.esm.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
3
+ "sources": ["../src/commands/esbuild/ESBuildProgram.ts", "../src/commands/esbuild/util/esbuildPlugins.ts", "../src/commands/esbuild/util/debounce.ts", "../src/commands/generate/GenerateProgram.ts", "../src/commands/sync/SyncProgram.ts", "../src/commands/sync/when.ts", "../src/utils/arrayToMap.ts", "../src/utils/appendScript.ts", "../src/utils/findParent.ts", "../src/utils/AsyncArray.ts", "../src/PathUtil.ts"],
4
+ "sourcesContent": ["import { build, BuildOptions, Platform, Plugin } from 'esbuild'\r\nimport { pathExists, readJson } from 'fs-extra'\r\nimport * as path from 'path'\r\nimport { PackageJson } from 'type-fest'\r\nimport { Project } from 'ts-morph'\r\nimport { promise } from 'glob-promise'\r\nimport { IOptions } from 'glob'\r\nimport { nativeNodeModules, nodeExternals } from './util/esbuildPlugins'\r\nimport { watch } from 'chokidar'\r\nimport Spinnies from 'spinnies'\r\nimport { debounce } from './util/debounce'\r\n\r\ninterface ESBuildProgramOptions {\r\n base: string\r\n isWatch: boolean\r\n}\r\n\r\ninterface Task {\r\n title: string\r\n task(): Promise<any>\r\n}\r\n\r\nexport class ESBuildProgram {\r\n constructor(private readonly options: ESBuildProgramOptions) {}\r\n\r\n static readonly globalExternal = ['esbuild', 'pnpapi', 'ts-morph']\r\n\r\n /**\r\n * \u83B7\u53D6\u6240\u6709\u4F9D\u8D56\r\n */\r\n static async getDeps(base: string): Promise<string[]> {\r\n const json = (await readJson(\r\n path.resolve(base, 'package.json'),\r\n )) as PackageJson\r\n return Object.keys({\r\n ...json.dependencies,\r\n ...json.devDependencies,\r\n ...json.peerDependencies,\r\n })\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6240\u5728\u6A21\u5757\u7684\u7C7B\u578B\r\n */\r\n static async getPlatform(base: string): Promise<Platform> {\r\n const tsconfigPath = path.resolve(base, 'tsconfig.json')\r\n if (await pathExists(tsconfigPath)) {\r\n const tsconfigJson = await readJson(tsconfigPath)\r\n if (\r\n (tsconfigJson.compilerOptions.lib as string[]).some(\r\n (lib) => lib.toLowerCase() === 'dom',\r\n )\r\n ) {\r\n return 'browser'\r\n }\r\n }\r\n const pkgPath = path.resolve(base, 'package.json')\r\n if (await pathExists(pkgPath)) {\r\n const pkgJson = (await readJson(pkgPath)) as PackageJson\r\n if (Object.keys(pkgJson.devDependencies ?? {}).includes('@types/node')) {\r\n return 'node'\r\n }\r\n }\r\n return 'neutral'\r\n }\r\n static getWatchOptions(base: string): {\r\n pattern: string\r\n options: IOptions\r\n } {\r\n const pattern = 'src/**/*.ts'\r\n const options: Pick<IOptions, 'cwd' | 'ignore'> = {\r\n cwd: base,\r\n ignore: '**/__tests__/**/*',\r\n }\r\n return { pattern, options }\r\n }\r\n /**\r\n * \u751F\u6210\u7C7B\u578B\u5B9A\u4E49\r\n */\r\n async genDTS(): Promise<void> {\r\n const base = this.options.base\r\n const { pattern, options } = ESBuildProgram.getWatchOptions(\r\n this.options.base,\r\n )\r\n const project = new Project({\r\n tsConfigFilePath: path.resolve(base, 'tsconfig.json'),\r\n skipAddingFilesFromTsConfig: true,\r\n compilerOptions: {\r\n emitDeclarationOnly: true,\r\n noEmit: false,\r\n incremental: this.options.isWatch,\r\n },\r\n })\r\n const fileList = (await promise(pattern, options)).map((filePath) =>\r\n path.resolve(base, filePath),\r\n )\r\n project.addSourceFilesAtPaths(fileList)\r\n await project.emit({\r\n emitOnlyDtsFiles: true,\r\n })\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cjs \u7684\u9009\u9879\r\n * @param deps\r\n * @param platform\r\n * @param plugins\r\n */\r\n getBuildCjsOption({\r\n deps,\r\n platform,\r\n }: {\r\n deps: string[]\r\n platform: Platform\r\n }): BuildOptions {\r\n return {\r\n outfile: './dist/index.js',\r\n format: 'cjs',\r\n sourcemap: true,\r\n entryPoints: ['./src/index.ts'],\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal, ...deps],\r\n platform: platform,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA esm \u7684\u9009\u9879\r\n * @param deps\r\n * @param platform\r\n * @param plugins\r\n */\r\n getBuildESMOption({\r\n deps,\r\n platform,\r\n }: {\r\n deps: string[]\r\n platform: Platform\r\n }): BuildOptions {\r\n return {\r\n outfile: './dist/index.esm.js',\r\n format: 'esm',\r\n sourcemap: true,\r\n entryPoints: ['./src/index.ts'],\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal, ...deps],\r\n platform: platform,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cli \u7684\u9009\u9879\r\n * @param deps\r\n * @param platform\r\n * @param plugins\r\n */\r\n getBuildCliOption({\r\n deps,\r\n platform,\r\n }: {\r\n deps: string[]\r\n platform: Platform\r\n }): BuildOptions {\r\n const plugins = ESBuildProgram.getPlugins(platform)\r\n return {\r\n entryPoints: ['./src/bin.ts'],\r\n outfile: './dist/bin.js',\r\n format: 'cjs',\r\n sourcemap: true,\r\n platform: platform,\r\n bundle: true,\r\n banner: {\r\n js: '#!/usr/bin/env node',\r\n },\r\n external: [\r\n ...ESBuildProgram.globalExternal,\r\n ...(this.options.isWatch ? deps : []),\r\n ],\r\n plugins,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n }\r\n }\r\n\r\n static getPlugins(platform: string): Plugin[] {\r\n const plugins: Plugin[] = []\r\n if (platform === 'node') {\r\n plugins.push(nodeExternals(), nativeNodeModules())\r\n }\r\n return plugins\r\n }\r\n\r\n async buildLib(): Promise<void> {\r\n await this.build(this.getBuildLibTask.bind(this))\r\n }\r\n\r\n async buildCli(): Promise<void> {\r\n await this.build(this.getBuildCliTask.bind(this))\r\n }\r\n\r\n getBuildLibTask(deps: string[], platform: Platform): Task[] {\r\n return [\r\n {\r\n title: '\u6784\u5EFA esm',\r\n task: () =>\r\n build(\r\n this.getBuildESMOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n {\r\n title: '\u6784\u5EFA cjs',\r\n task: () =>\r\n build(\r\n this.getBuildCjsOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n {\r\n title: '\u751F\u6210\u7C7B\u578B\u5B9A\u4E49',\r\n task: () => this.genDTS(),\r\n },\r\n ]\r\n }\r\n getBuildCliTask(deps: string[], platform: Platform): Task[] {\r\n return [\r\n {\r\n title: '\u6784\u5EFA cli',\r\n task: () =>\r\n build(\r\n this.getBuildCliOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n ...this.getBuildLibTask(deps, platform),\r\n ]\r\n }\r\n\r\n static async execTask(spinnies: Spinnies, task: Task): Promise<void> {\r\n const start = Date.now()\r\n spinnies.add(task.title, { text: task.title })\r\n try {\r\n await task.task()\r\n spinnies.succeed(task.title, {\r\n text: `${task.title}: ${Date.now() - start}ms`,\r\n })\r\n } catch (e) {\r\n spinnies.fail(task.title, { text: task.title })\r\n }\r\n }\r\n async build(\r\n genTasks: (deps: string[], platform: Platform) => Task[],\r\n ): Promise<void> {\r\n const run = async () => {\r\n const start = Date.now()\r\n const deps = await ESBuildProgram.getDeps(this.options.base)\r\n const platform = await ESBuildProgram.getPlatform(this.options.base)\r\n const tasks = genTasks(deps, platform)\r\n const spinnies = new Spinnies()\r\n await Promise.all(\r\n tasks.map(async (task) => ESBuildProgram.execTask(spinnies, task)),\r\n )\r\n console.log(`\u6784\u5EFA\u5B8C\u6210: ${Date.now() - start}ms`)\r\n }\r\n\r\n if (!this.options.isWatch) {\r\n await run()\r\n return\r\n }\r\n\r\n const { pattern, options } = ESBuildProgram.getWatchOptions(\r\n this.options.base,\r\n )\r\n await new Promise((resolve, reject) => {\r\n watch(pattern, options).on('error', reject).on('all', debounce(run, 10))\r\n })\r\n }\r\n}\r\n", "import { Plugin } from 'esbuild'\r\n\r\n/**\r\n * \u5904\u7406 nodejs \u539F\u751F\u6A21\u5757\r\n * @link https://github.com/evanw/esbuild/issues/1051#issuecomment-806325487\r\n */\r\nexport function nativeNodeModules(): Plugin {\r\n return {\r\n name: 'native-node-modules',\r\n setup(build) {\r\n // If a \".node\" file is imported within a module in the \"file\" namespace, resolve\r\n // it to an absolute path and put it into the \"node-file\" virtual namespace.\r\n build.onResolve({ filter: /\\.node$/, namespace: 'file' }, (args) => ({\r\n path: require.resolve(args.path, { paths: [args.resolveDir] }),\r\n namespace: 'node-file',\r\n }))\r\n\r\n // Files in the \"node-file\" virtual namespace call \"require()\" on the\r\n // path from esbuild of the \".node\" file in the output directory.\r\n build.onLoad({ filter: /.*/, namespace: 'node-file' }, (args) => ({\r\n contents: `\r\n import path from ${JSON.stringify(args.path)}\r\n try { module.exports = require(path) }\r\n catch {}\r\n `,\r\n }))\r\n\r\n // If a \".node\" file is imported within a module in the \"node-file\" namespace, put\r\n // it in the \"file\" namespace where esbuild's default loading behavior will handle\r\n // it. It is already an absolute path since we resolved it to one above.\r\n build.onResolve(\r\n { filter: /\\.node$/, namespace: 'node-file' },\r\n (args) => ({\r\n path: args.path,\r\n namespace: 'file',\r\n }),\r\n )\r\n\r\n // Tell esbuild's default loading behavior to use the \"file\" loader for\r\n // these \".node\" files.\r\n const opts = build.initialOptions\r\n opts.loader = opts.loader || {}\r\n opts.loader['.node'] = 'file'\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * \u6392\u9664\u548C\u66FF\u6362 node \u5185\u7F6E\u6A21\u5757\r\n */\r\nexport function nodeExternals(): Plugin {\r\n return {\r\n name: 'esbuild-plugin-node-externals',\r\n setup(build) {\r\n build.onResolve({ filter: /(^node:)/ }, (args) => ({\r\n path: args.path.slice(5),\r\n external: true,\r\n }))\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * \u81EA\u52A8\u6392\u9664\u6240\u6709\u4F9D\u8D56\u9879\r\n * golang \u4E0D\u652F\u6301 js \u7684\u4E00\u4E9B\u8BED\u6CD5\uFF0C\u53C2\u8003 https://github.com/evanw/esbuild/issues/1634\r\n */\r\nexport function autoExternal(): Plugin {\r\n return {\r\n name: 'esbuild-plugin-auto-external',\r\n setup(build) {\r\n build.onResolve({ filter: /.*/ }, (args) => {\r\n if (/^\\.{1,2}\\//.test(args.path)) {\r\n return\r\n }\r\n return {\r\n path: args.path,\r\n external: true,\r\n }\r\n })\r\n },\r\n }\r\n}\r\n", "/**\r\n * \u51FD\u6570\u53BB\u6296\r\n * \u53BB\u6296 (debounce) \u53BB\u6296\u5C31\u662F\u5BF9\u4E8E\u4E00\u5B9A\u65F6\u95F4\u6BB5\u7684\u8FDE\u7EED\u7684\u51FD\u6570\u8C03\u7528\uFF0C\u53EA\u8BA9\u5176\u6267\u884C\u4E00\u6B21\r\n * \u6CE8: \u5305\u88C5\u540E\u7684\u51FD\u6570\u5982\u679C\u4E24\u6B21\u64CD\u4F5C\u95F4\u9694\u5C0F\u4E8E delay \u5219\u4E0D\u4F1A\u88AB\u6267\u884C, \u5982\u679C\u4E00\u76F4\u5728\u64CD\u4F5C\u5C31\u4F1A\u4E00\u76F4\u4E0D\u6267\u884C, \u76F4\u5230\u64CD\u4F5C\u505C\u6B62\u7684\u65F6\u95F4\u5927\u4E8E delay \u6700\u5C0F\u95F4\u9694\u65F6\u95F4\u624D\u4F1A\u6267\u884C\u4E00\u6B21, \u4E0D\u7BA1\u4EFB\u4F55\u65F6\u95F4\u8C03\u7528\u90FD\u9700\u8981\u505C\u6B62\u64CD\u4F5C\u7B49\u5F85\u6700\u5C0F\u5EF6\u8FDF\u65F6\u95F4\r\n * \u5E94\u7528\u573A\u666F\u4E3B\u8981\u5728\u90A3\u4E9B\u8FDE\u7EED\u7684\u64CD\u4F5C, \u4F8B\u5982\u9875\u9762\u6EDA\u52A8\u76D1\u542C, \u5305\u88C5\u540E\u7684\u51FD\u6570\u53EA\u4F1A\u6267\u884C\u6700\u540E\u4E00\u6B21\r\n * \u6CE8: \u8BE5\u51FD\u6570\u7B2C\u4E00\u6B21\u8C03\u7528\u4E00\u5B9A\u4E0D\u4F1A\u6267\u884C\uFF0C\u7B2C\u4E00\u6B21\u4E00\u5B9A\u62FF\u4E0D\u5230\u7F13\u5B58\u503C\uFF0C\u540E\u9762\u7684\u8FDE\u7EED\u8C03\u7528\u90FD\u4F1A\u62FF\u5230\u4E0A\u4E00\u6B21\u7684\u7F13\u5B58\u503C\u3002\u5982\u679C\u9700\u8981\u5728\u7B2C\u4E00\u6B21\u8C03\u7528\u83B7\u53D6\u5230\u7684\u7F13\u5B58\u503C\uFF0C\u5219\u9700\u8981\u4F20\u5165\u7B2C\u4E09\u4E2A\u53C2\u6570 {@param init}\uFF0C\u9ED8\u8BA4\u4E3A {@code undefined} \u7684\u53EF\u9009\u53C2\u6570\r\n * \u6CE8: \u8FD4\u56DE\u51FD\u6570\u7ED3\u679C\u7684\u9AD8\u9636\u51FD\u6570\u9700\u8981\u4F7F\u7528 {@see Proxy} \u5B9E\u73B0\uFF0C\u4EE5\u907F\u514D\u539F\u51FD\u6570\u539F\u578B\u94FE\u4E0A\u7684\u4FE1\u606F\u4E22\u5931\r\n *\r\n * @param fn \u771F\u6B63\u9700\u8981\u6267\u884C\u7684\u64CD\u4F5C\r\n * @param delay \u6700\u5C0F\u5EF6\u8FDF\u65F6\u95F4\uFF0C\u5355\u4F4D\u4E3A ms\r\n * @param init \u521D\u59CB\u7684\u7F13\u5B58\u503C\uFF0C\u4E0D\u586B\u9ED8\u8BA4\u4E3A {@see undefined}\r\n * @return \u5305\u88C5\u540E\u6709\u53BB\u6296\u529F\u80FD\u7684\u51FD\u6570\u3002\u8BE5\u51FD\u6570\u662F\u5F02\u6B65\u7684\uFF0C\u4E0E\u9700\u8981\u5305\u88C5\u7684\u51FD\u6570 {@param fn} \u662F\u5426\u5F02\u6B65\u6CA1\u6709\u592A\u5927\u5173\u8054\r\n */\r\nexport function debounce<\r\n T extends (...args: any[]) => any,\r\n R extends (...args: Parameters<T>) => Promise<ReturnType<T>>,\r\n>(fn: T, delay: number, init: any = null): R {\r\n let flag: number\r\n let result = init\r\n return async function (...args) {\r\n return new Promise((resolve) => {\r\n if (flag) {\r\n clearTimeout(flag as any)\r\n }\r\n flag = setTimeout(() => resolve((result = fn(...args))), delay) as any\r\n setTimeout(() => resolve(result), delay)\r\n })\r\n } as R\r\n}\r\n", "import path from 'path'\r\nimport {\r\n copy,\r\n pathExists,\r\n readdir,\r\n readFile,\r\n readJSON,\r\n remove,\r\n writeFile,\r\n writeJSON,\r\n} from 'fs-extra'\r\nimport { prompt } from 'enquirer'\r\nimport { SyncProgram } from '../sync/SyncProgram'\r\nimport { PathUtil } from '../../PathUtil'\r\n\r\nexport enum TemplateTypeEnum {\r\n Cli = 'cli',\r\n Lib = 'lib',\r\n}\r\n\r\nexport interface GenerateConfig {\r\n template: TemplateTypeEnum\r\n dest: string\r\n initSync?: boolean\r\n}\r\n\r\nexport class GenerateProgram {\r\n /**\r\n * \u751F\u6210\u9879\u76EE\r\n */\r\n async generate(config: GenerateConfig): Promise<void> {\r\n if (!config.dest) {\r\n const { dest } = await prompt<{ dest: string }>({\r\n name: 'dest',\r\n type: 'input',\r\n message: '\u8BF7\u8F93\u5165\u9879\u76EE\u540D',\r\n validate(input: string): boolean {\r\n return input.trim() !== ''\r\n },\r\n })\r\n config.dest = path.resolve(dest)\r\n }\r\n if (!config.template) {\r\n const { template } = await prompt<{ template: TemplateTypeEnum }>({\r\n name: 'template',\r\n type: 'list',\r\n message: '\u8BF7\u9009\u62E9\u6A21\u677F',\r\n choices: [\r\n TemplateTypeEnum.Lib,\r\n TemplateTypeEnum.Cli,\r\n ] as TemplateTypeEnum[],\r\n })\r\n config.template = template\r\n }\r\n\r\n /*\r\n \u514B\u9686\u9879\u76EE\r\n \u4FEE\u6539\u4E00\u4E9B\u5185\u5BB9\r\n \u5171\u901A\u4FEE\u6539\r\n - \u4FEE\u6539 package.json\uFF0C\u5220\u9664 private\uFF0C\u4FEE\u6539\u540D\u5B57\r\n \u6A21\u677F\u7279\u5B9A\u4FEE\u6539\r\n */\r\n const srcFile = path.resolve(\r\n PathUtil.RootPath,\r\n `templates/${config.template}`,\r\n )\r\n const destFile = path.resolve(config.dest)\r\n if (\r\n (await pathExists(destFile)) &&\r\n (await readdir(destFile)).some((file) => pathExists(file))\r\n ) {\r\n const { override } = await prompt<{\r\n override: boolean\r\n }>({\r\n name: 'override',\r\n type: 'confirm',\r\n initial: true,\r\n message: '\u76EE\u6807\u4F4D\u7F6E\u4E0D\u662F\u4E00\u4E2A\u7A7A\u76EE\u5F55\uFF0C\u786E\u8BA4\u8981\u8986\u76D6\u4E48\uFF1F',\r\n })\r\n if (!override) {\r\n return\r\n }\r\n }\r\n await remove(destFile)\r\n await copy(srcFile, destFile)\r\n await GenerateProgram.updatePackageJSON(destFile)\r\n await GenerateProgram.updateReadme(destFile)\r\n if (config.initSync) {\r\n const syncProgram = new SyncProgram(path.resolve(config.dest))\r\n await syncProgram.init()\r\n await syncProgram.sync()\r\n }\r\n }\r\n\r\n static async updatePackageJSON(destFile: string): Promise<void> {\r\n const pkgPath = path.resolve(destFile, 'package.json')\r\n await writeJSON(\r\n pkgPath,\r\n {\r\n ...(await readJSON(pkgPath)),\r\n name: path.basename(destFile),\r\n },\r\n {\r\n spaces: 2,\r\n },\r\n )\r\n }\r\n\r\n static async updateReadme(destFile: string): Promise<void> {\r\n const readmePath = path.resolve(destFile, 'README.md')\r\n let readmeFile = await readFile(readmePath, 'utf-8')\r\n readmeFile = readmeFile.replace('template', path.basename(destFile))\r\n await writeFile(readmePath, readmeFile)\r\n }\r\n}\r\n", "import { readFile, readJson, writeFile, writeJson } from 'fs-extra'\r\nimport path from 'path'\r\nimport { merge } from 'lodash-es'\r\nimport { PackageJson } from 'type-fest'\r\nimport prettier from '@liuli-util/prettier-standard-config/package.json'\r\nimport eslintTs from '@liuli-util/eslint-config-ts/package.json'\r\nimport eslintReactTs from '@liuli-util/eslint-config-react-ts/package.json'\r\nimport commitlint from '@liuli-util/commitlint-standard-config/package.json'\r\nimport { prompt } from 'enquirer'\r\nimport { isIncludeDep, isNpmPackage, isYarnRoot, isYarnSubModule } from './when'\r\nimport { appendScript, arrayToMap, AsyncArray } from '../../utils'\r\nimport { PathUtil } from '../../PathUtil'\r\n\r\nexport async function mergeJson(base: string, json: object): Promise<void> {\r\n const pkgJsonFilePath = path.resolve(base, './package.json')\r\n await writeJson(\r\n pkgJsonFilePath,\r\n merge(await readJson(pkgJsonFilePath), json),\r\n {\r\n spaces: 2,\r\n },\r\n )\r\n}\r\n\r\nexport type SyncConfigType =\r\n | 'prettier'\r\n | 'commitlint'\r\n | 'simplehooks'\r\n | 'workspaces'\r\n | 'gitignore'\r\n | 'eslint-ts'\r\n | 'eslint-vue-ts'\r\n | 'eslint-react-ts'\r\n | 'jest'\r\n\r\nexport interface SyncConfig {\r\n type: SyncConfigType\r\n handler(): Promise<void>\r\n when?(): Promise<boolean>\r\n}\r\n\r\nexport class SyncProgram {\r\n constructor(private readonly base: string) {}\r\n private syncConfigs: SyncConfig[] = [\r\n {\r\n type: 'workspaces',\r\n handler: async () => {\r\n const pkgPath = path.resolve(this.base, './package.json')\r\n const lernaPath = path.resolve(this.base, 'lerna.json')\r\n const pkgJson = (await readJson(pkgPath)) as { workspaces: string[] }\r\n const lernaJson = await readJson(lernaPath)\r\n lernaJson.packages = pkgJson.workspaces\r\n await writeJson(lernaPath, lernaJson, {\r\n spaces: 2,\r\n })\r\n },\r\n when: isYarnRoot,\r\n },\r\n {\r\n type: 'prettier',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n prettier: '@liuli-util/prettier-standard-config',\r\n devDependencies: {\r\n prettier: '^2.3.2',\r\n '@liuli-util/prettier-standard-config': `^${prettier.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n )\r\n },\r\n },\r\n {\r\n type: 'commitlint',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n 'simple-git-hooks': {\r\n 'commit-msg': 'yarn commitlint --edit $1',\r\n },\r\n commitlint: {\r\n extends: ['@liuli-util/commitlint-standard-config'],\r\n },\r\n devDependencies: {\r\n '@commitlint/cli': '^12.1.4',\r\n '@liuli-util/commitlint-standard-config': `^${commitlint.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n )\r\n },\r\n },\r\n {\r\n type: 'gitignore',\r\n handler: async () => {\r\n const gitignorePath = path.resolve(this.base, '.gitignore')\r\n await writeFile(\r\n gitignorePath,\r\n await readFile(\r\n path.resolve(PathUtil.RootPath, '_gitignore'),\r\n 'utf-8',\r\n ),\r\n )\r\n },\r\n },\r\n {\r\n type: 'eslint-ts',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n eslintConfig: {\r\n extends: ['@liuli-util/eslint-config-ts'],\r\n },\r\n devDependencies: {\r\n '@liuli-util/eslint-config-ts': `^${eslintTs.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n !(await isIncludeDep(['vue'])) &&\r\n !(await isIncludeDep(['react']))\r\n )\r\n },\r\n },\r\n {\r\n type: 'eslint-react-ts',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n eslintConfig: {\r\n extends: ['@liuli-util/eslint-config-react-ts'],\r\n },\r\n devDependencies: {\r\n '@liuli-util/eslint-config-react-ts': `^${eslintReactTs.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (await isNpmPackage()) && (await isIncludeDep(['react']))\r\n },\r\n },\r\n {\r\n type: 'jest',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n jest: {\r\n preset: 'ts-jest',\r\n testMatch: ['<rootDir>/src/**/__tests__/*.test.ts'],\r\n },\r\n })\r\n },\r\n },\r\n //\u5FC5\u987B\u653E\u5230\u6700\u540E\u4E00\u4E2A\uFF0C\u540E\u7EED\u6839\u636E\u68C0\u6D4B\u7ED3\u679C\u6DFB\u52A0 hooks\r\n {\r\n type: 'simplehooks',\r\n handler: async () => {\r\n const json = await readJson(path.resolve(this.base, './package.json'))\r\n const lintStaged: string[] = []\r\n if (json.prettier) {\r\n lintStaged.push('prettier --write')\r\n }\r\n if (json.eslintConfig) {\r\n lintStaged.push('eslint --fix')\r\n }\r\n let config = {\r\n scripts: {\r\n postinstall: appendScript(\r\n json?.scripts?.postinstall,\r\n 'npx simple-git-hooks',\r\n ),\r\n },\r\n 'simple-git-hooks': {\r\n 'pre-commit': 'yarn lint-staged',\r\n },\r\n 'lint-staged': {\r\n '*.{ts,tsx,js,jsx,css,vue}': [...lintStaged, 'git add'],\r\n },\r\n devDependencies: {\r\n 'simple-git-hooks': '^2.5.1',\r\n 'lint-staged': '^11.1.1',\r\n },\r\n }\r\n if (json.commitlint) {\r\n config = merge(config, {\r\n 'simple-git-hooks': {\r\n 'commit-msg': 'yarn commitlint --edit $1',\r\n },\r\n })\r\n }\r\n await mergeJson(this.base, config as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n )\r\n },\r\n },\r\n ]\r\n\r\n async sync(): Promise<void> {\r\n const { sync } = (await readJson(\r\n path.resolve(this.base, 'package.json'),\r\n )) as {\r\n sync?: SyncConfigType[]\r\n }\r\n if (!sync) {\r\n return\r\n }\r\n const syncConfigs = this.syncConfigs.filter((config) =>\r\n sync.includes(config.type),\r\n )\r\n for (const syncConfig of syncConfigs) {\r\n await syncConfig.handler()\r\n }\r\n }\r\n\r\n async init(): Promise<void> {\r\n const configMap = arrayToMap(\r\n await AsyncArray.filter(this.syncConfigs, async (config) => {\r\n if (!config.when) {\r\n return true\r\n }\r\n return await config.when()\r\n }),\r\n (item) => item.type,\r\n )\r\n const res = await prompt<{\r\n sync: string[]\r\n }>({\r\n type: 'multiselect',\r\n message: '\u8BF7\u9009\u62E9\u9700\u8981\u540C\u6B65\u7684\u914D\u7F6E\u9879',\r\n name: 'sync',\r\n choices: [...configMap.keys()],\r\n })\r\n await mergeJson(this.base, {\r\n sync: res.sync,\r\n })\r\n }\r\n}\r\n", "import { pathExists, readJson } from 'fs-extra'\r\nimport path from 'path'\r\nimport { PackageJson } from 'type-fest'\r\nimport { findParent } from '../../utils'\r\n\r\n/**\r\n * \u5224\u65AD\u662F\u5426\u5305\u542B package.json\r\n * @param cwd\r\n */\r\nexport async function isNpmPackage(\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n return await pathExists(path.resolve(cwd, './package.json'))\r\n}\r\n\r\n/**\r\n * \u5224\u65AD\u662F yarn2 monorepo \u9879\u76EE\r\n * @param cwd\r\n */\r\nexport async function isYarnRoot(\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(\r\n path.resolve(cwd, './package.json'),\r\n )) as PackageJson\r\n return !!json.workspaces\r\n}\r\n\r\n/**\r\n * \u5224\u65AD\u662F yarn2 monorepo \u7684\u5B50\u6A21\u5757\r\n */\r\nexport async function isYarnSubModule(\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n //\u5982\u679C\u662F yarn monorepo \u6839\u6A21\u5757\u5219\u76F4\u63A5\u8FD4\u56DE true\r\n if (await isYarnRoot(cwd)) {\r\n return false\r\n }\r\n return (await findParent(path.dirname(cwd), isYarnRoot)) !== null\r\n}\r\n\r\n/**\r\n * \u662F\u5426\u5305\u542B\u6307\u5B9A\u4F9D\u8D56\r\n * @param deps\r\n * @param cwd\r\n */\r\nexport async function isIncludeDep(\r\n deps: string[],\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(\r\n path.resolve(cwd, './package.json'),\r\n )) as PackageJson\r\n const set = new Set(\r\n Object.keys({ ...json.dependencies, ...json.devDependencies }),\r\n )\r\n return deps.every((dep) => set.has(dep))\r\n}\r\n", "export function arrayToMap<T, K>(\r\n arr: T[],\r\n kFn: (item: T, index: number, arr: T[]) => K,\r\n): Map<K, T>\r\nexport function arrayToMap<T, K, V>(\r\n arr: T[],\r\n kFn: (item: T, index: number, arr: T[]) => K,\r\n vFn: (item: T, index: number, arr: T[]) => V,\r\n): Map<K, V>\r\n/**\r\n * \u5C06\u6570\u7EC4\u6620\u5C04\u4E3A Map\r\n * @param arr \u6570\u7EC4\r\n * @param kFn \u4EA7\u751F Map \u5143\u7D20\u552F\u4E00\u6807\u8BC6\u7684\u51FD\u6570\r\n * @param vFn \u4EA7\u751F Map \u503C\u7684\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3A\u8FD4\u56DE\u6570\u7EC4\u7684\u5143\u7D20\r\n * @returns \u6620\u5C04\u4EA7\u751F\u7684 map \u96C6\u5408\r\n */\r\nexport function arrayToMap<T, K, V>(\r\n arr: T[],\r\n kFn: (item: T, index: number, arr: T[]) => K,\r\n vFn: (item: T, index: number, arr: T[]) => V = (v) => v as any,\r\n): Map<K, V> {\r\n return arr.reduce(\r\n (res, item, index, arr) =>\r\n res.set(kFn(item, index, arr), vFn(item, index, arr)),\r\n new Map<K, V>(),\r\n )\r\n}\r\n", "/**\r\n * \u5728\u4E4B\u524D\u7684\u811A\u672C\u4E2D\u8FFD\u52A0\u65B0\u7684\u811A\u672C\r\n * @param oldScript\r\n * @param newScript\r\n */\r\nexport function appendScript(\r\n oldScript: string | undefined,\r\n newScript: string,\r\n): string {\r\n if (!oldScript) {\r\n return newScript\r\n }\r\n if (oldScript.includes(newScript)) {\r\n return oldScript\r\n }\r\n return oldScript + ' && ' + newScript\r\n}\r\n", "import path from 'path'\r\n\r\n/**\r\n * \u5411\u4E0A\u67E5\u627E\u76EE\u5F55\r\n * @param cwd\r\n * @param predicate\r\n */\r\nexport function findParent(\r\n cwd: string,\r\n predicate: (dir: string) => boolean,\r\n): string | null\r\nexport function findParent(\r\n cwd: string,\r\n predicate: (dir: string) => Promise<boolean>,\r\n): Promise<string | null>\r\nexport function findParent<\r\n T extends (dir: string) => boolean | Promise<boolean>,\r\n R extends string | null,\r\n>(\r\n cwd: string,\r\n predicate: T,\r\n): ReturnType<T> extends Promise<any> ? Promise<R> : R {\r\n const res = predicate(cwd)\r\n function f(res: boolean): string | null {\r\n if (res) {\r\n return cwd\r\n }\r\n const parent = path.dirname(cwd)\r\n if (parent === cwd) {\r\n return null\r\n }\r\n return findParent(parent, predicate as any)\r\n }\r\n\r\n return res instanceof Promise ? res.then(f) : (f(res) as any)\r\n}\r\n", "import { IterableElement } from 'type-fest'\r\n\r\nenum ActionTypeEnum {\r\n Filter = 'filter',\r\n Map = 'map',\r\n ForEach = 'forEach',\r\n Reduce = 'reduce',\r\n FlatMap = 'flatMap',\r\n}\r\n\r\nclass Action {\r\n public static Type = ActionTypeEnum\r\n\r\n constructor(\r\n public readonly type: ActionTypeEnum,\r\n public readonly args: any[],\r\n ) {\r\n this.type = type\r\n this.args = args\r\n }\r\n}\r\n\r\n/**\r\n * \u5F02\u6B65\u6570\u7EC4\uFF0C\u652F\u6301\u9759\u6001\u65B9\u6CD5\u548C\u94FE\u5F0F\u8C03\u7528\r\n */\r\nexport class AsyncArray<T> implements PromiseLike<T[]> {\r\n static reduce<T extends any[], R>(\r\n arr: T,\r\n fn: (res: R, item: IterableElement<T>, index: number) => Promise<R>,\r\n res: R,\r\n ): Promise<R> {\r\n return arr.reduce(\r\n (res: Promise<R>, item: IterableElement<T>, index: number) =>\r\n res.then((r) => fn(r, item, index)),\r\n Promise.resolve(res),\r\n )\r\n }\r\n\r\n static map<T, R>(\r\n arr: T[],\r\n fn: (item: T, index: number) => Promise<R>,\r\n ): Promise<R[]> {\r\n return Promise.all(arr.map((item, index) => fn(item, index)))\r\n }\r\n\r\n static async filter<T>(\r\n arr: T[],\r\n fn: (item: T, index: number) => Promise<boolean>,\r\n ): Promise<T[]> {\r\n const res: T[] = []\r\n await AsyncArray.map(arr, async (item, index) => {\r\n if (await fn(item, index)) {\r\n res.push(item)\r\n }\r\n })\r\n return res\r\n }\r\n\r\n static async flatMap<T, R>(\r\n arr: T[],\r\n fn: (item: T, index: number) => Promise<R[]>,\r\n ): Promise<R[]> {\r\n return (\r\n await Promise.all(arr.map((item, index) => fn(item, index)))\r\n ).flatMap((r) => r)\r\n }\r\n\r\n static async forEach<T extends any[]>(\r\n arr: T,\r\n fn: (item: IterableElement<T>, index: number) => Promise<void>,\r\n ): Promise<void> {\r\n await AsyncArray.map(arr, fn)\r\n }\r\n\r\n private tasks: Action[] = []\r\n\r\n constructor(private readonly arr: T[]) {}\r\n\r\n map<R>(fn: (item: T, index: number) => Promise<R>): AsyncArray<R> {\r\n this.tasks.push(new Action(ActionTypeEnum.Map, [fn]))\r\n return this as any\r\n }\r\n\r\n flatMap<R>(fn: (item: T, index: number) => Promise<R[]>): AsyncArray<R> {\r\n this.tasks.push(new Action(ActionTypeEnum.FlatMap, [fn]))\r\n return this as any\r\n }\r\n\r\n filter(fn: (item: T, index: number) => Promise<boolean>): this {\r\n this.tasks.push(new Action(ActionTypeEnum.Filter, [fn]))\r\n return this\r\n }\r\n\r\n async forEach<R>(fn: (item: T, index: number) => Promise<R>): Promise<void> {\r\n this.tasks.push(new Action(ActionTypeEnum.Map, [fn]))\r\n await this\r\n }\r\n\r\n then<TResult1 = T[], TResult2 = never>(\r\n resolve?:\r\n | ((value: T[]) => PromiseLike<TResult1> | TResult1)\r\n | undefined\r\n | null,\r\n reject?:\r\n | ((reason: any) => PromiseLike<TResult2> | TResult2)\r\n | undefined\r\n | null,\r\n ): PromiseLike<TResult1 | TResult2> {\r\n const res = this.value()\r\n res\r\n .then((r) => {\r\n resolve && resolve(res as any)\r\n return r\r\n })\r\n .catch((e) => {\r\n reject && reject(e as any)\r\n throw e\r\n })\r\n return res as any\r\n }\r\n\r\n private async value(): Promise<any> {\r\n let res = this.arr\r\n for (const task of this.tasks) {\r\n switch (task.type) {\r\n case ActionTypeEnum.Filter:\r\n res = await AsyncArray.filter(res, task.args[0])\r\n break\r\n case ActionTypeEnum.Map:\r\n res = await AsyncArray.map(res, task.args[0])\r\n break\r\n case ActionTypeEnum.FlatMap:\r\n res = await AsyncArray.flatMap(res, task.args[0])\r\n break\r\n case ActionTypeEnum.ForEach:\r\n await AsyncArray.forEach(res, task.args[0])\r\n return\r\n case ActionTypeEnum.Reduce:\r\n return await AsyncArray.reduce(res, task.args[0], task.args[1])\r\n }\r\n }\r\n return res\r\n }\r\n}\r\n", "import path from 'path'\r\n\r\nexport class PathUtil {\r\n /**\r\n * \u4ECE\u8FD9\u4E2A\u9879\u76EE\u7684\u6839\u76EE\u5F55\u8BFB\u53D6\uFF0C\u5F00\u53D1\u73AF\u5883\u662F src/../\uFF0C\u8FD0\u884C\u65F6\u5219\u662F dist/../\r\n */\r\n static readonly RootPath = path.resolve(__dirname, '..')\r\n}\r\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- var __defProp = Object.defineProperty;
2
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
3
-
4
- // src/index.ts
5
- __markAsModule(exports);
1
+ var st=Object.create;var v=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var lt=(s,t,e)=>t in s?v(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var W=s=>v(s,"__esModule",{value:!0});var pt=(s,t)=>{W(s);for(var e in t)v(s,e,{get:t[e],enumerable:!0})},ct=(s,t,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of nt(t))!ot.call(s,i)&&i!=="default"&&v(s,i,{get:()=>t[i],enumerable:!(e=at(t,i))||e.enumerable});return s},r=s=>ct(W(v(s!=null?st(rt(s)):{},"default",s&&s.__esModule&&"default"in s?{get:()=>s.default,enumerable:!0}:{value:s,enumerable:!0})),s);var w=(s,t,e)=>(lt(s,typeof t!="symbol"?t+"":t,e),e);pt(exports,{ESBuildProgram:()=>B,GenerateProgram:()=>O,SyncProgram:()=>S,TemplateTypeEnum:()=>j,mergeJson:()=>h});var M=r(require("esbuild")),y=r(require("fs-extra")),b=r(require("path")),N=r(require("ts-morph")),V=r(require("glob-promise"));function $(){return{name:"native-node-modules",setup(s){s.onResolve({filter:/\.node$/,namespace:"file"},e=>({path:require.resolve(e.path,{paths:[e.resolveDir]}),namespace:"node-file"})),s.onLoad({filter:/.*/,namespace:"node-file"},e=>({contents:`
2
+ import path from ${JSON.stringify(e.path)}
3
+ try { module.exports = require(path) }
4
+ catch {}
5
+ `})),s.onResolve({filter:/\.node$/,namespace:"node-file"},e=>({path:e.path,namespace:"file"}));let t=s.initialOptions;t.loader=t.loader||{},t.loader[".node"]="file"}}}function K(){return{name:"esbuild-plugin-node-externals",setup(s){s.onResolve({filter:/(^node:)/},t=>({path:t.path.slice(5),external:!0}))}}}var q=r(require("chokidar")),Y=r(require("spinnies"));function I(s,t,e=null){let i,a=e;return async function(...n){return new Promise(l=>{i&&clearTimeout(i),i=setTimeout(()=>l(a=s(...n)),t),setTimeout(()=>l(a),t)})}}var m=class{constructor(t){this.options=t}static async getDeps(t){let e=await(0,y.readJson)(b.resolve(t,"package.json"));return Object.keys({...e.dependencies,...e.devDependencies,...e.peerDependencies})}static async getPlatform(t){let e=b.resolve(t,"tsconfig.json");if(await(0,y.pathExists)(e)&&(await(0,y.readJson)(e)).compilerOptions.lib.some(n=>n.toLowerCase()==="dom"))return"browser";let i=b.resolve(t,"package.json");if(await(0,y.pathExists)(i)){let a=await(0,y.readJson)(i);if(Object.keys(a.devDependencies??{}).includes("@types/node"))return"node"}return"neutral"}static getWatchOptions(t){return{pattern:"src/**/*.ts",options:{cwd:t,ignore:"**/__tests__/**/*"}}}async genDTS(){let t=this.options.base,{pattern:e,options:i}=m.getWatchOptions(this.options.base),a=new N.Project({tsConfigFilePath:b.resolve(t,"tsconfig.json"),skipAddingFilesFromTsConfig:!0,compilerOptions:{emitDeclarationOnly:!0,noEmit:!1,incremental:this.options.isWatch}}),n=(await(0,V.promise)(e,i)).map(l=>b.resolve(t,l));a.addSourceFilesAtPaths(n),await a.emit({emitOnlyDtsFiles:!0})}getBuildCjsOption({deps:t,platform:e}){return{outfile:"./dist/index.js",format:"cjs",sourcemap:!0,entryPoints:["./src/index.ts"],bundle:!0,external:[...m.globalExternal,...t],platform:e,minify:!this.options.isWatch,incremental:this.options.isWatch}}getBuildESMOption({deps:t,platform:e}){return{outfile:"./dist/index.esm.js",format:"esm",sourcemap:!0,entryPoints:["./src/index.ts"],bundle:!0,external:[...m.globalExternal,...t],platform:e,minify:!this.options.isWatch,incremental:this.options.isWatch}}getBuildCliOption({deps:t,platform:e}){let i=m.getPlugins(e);return{entryPoints:["./src/bin.ts"],outfile:"./dist/bin.js",format:"cjs",sourcemap:!0,platform:e,bundle:!0,banner:{js:"#!/usr/bin/env node"},external:[...m.globalExternal,...this.options.isWatch?t:[]],plugins:i,minify:!this.options.isWatch,incremental:this.options.isWatch}}static getPlugins(t){let e=[];return t==="node"&&e.push(K(),$()),e}async buildLib(){await this.build(this.getBuildLibTask.bind(this))}async buildCli(){await this.build(this.getBuildCliTask.bind(this))}getBuildLibTask(t,e){return[{title:"\u6784\u5EFA esm",task:()=>(0,M.build)(this.getBuildESMOption({deps:t,platform:e}))},{title:"\u6784\u5EFA cjs",task:()=>(0,M.build)(this.getBuildCjsOption({deps:t,platform:e}))},{title:"\u751F\u6210\u7C7B\u578B\u5B9A\u4E49",task:()=>this.genDTS()}]}getBuildCliTask(t,e){return[{title:"\u6784\u5EFA cli",task:()=>(0,M.build)(this.getBuildCliOption({deps:t,platform:e}))},...this.getBuildLibTask(t,e)]}static async execTask(t,e){let i=Date.now();t.add(e.title,{text:e.title});try{await e.task(),t.succeed(e.title,{text:`${e.title}: ${Date.now()-i}ms`})}catch(a){t.fail(e.title,{text:e.title})}}async build(t){let e=async()=>{let n=Date.now(),l=await m.getDeps(this.options.base),F=await m.getPlatform(this.options.base),tt=t(l,F),et=new Y.default;await Promise.all(tt.map(async it=>m.execTask(et,it))),console.log(`\u6784\u5EFA\u5B8C\u6210: ${Date.now()-n}ms`)};if(!this.options.isWatch){await e();return}let{pattern:i,options:a}=m.getWatchOptions(this.options.base);await new Promise((n,l)=>{(0,q.watch)(i,a).on("error",l).on("all",I(e,10))})}},B=m;w(B,"globalExternal",["esbuild","pnpapi","ts-morph"]);var f=r(require("path")),o=r(require("fs-extra")),D=r(require("enquirer"));var p=r(require("fs-extra")),g=r(require("path")),L=r(require("lodash-es")),Q=r(require("@liuli-util/prettier-standard-config/package.json")),X=r(require("@liuli-util/eslint-config-ts/package.json")),Z=r(require("@liuli-util/eslint-config-react-ts/package.json")),_=r(require("@liuli-util/commitlint-standard-config/package.json")),A=r(require("enquirer"));var T=r(require("fs-extra")),R=r(require("path"));function U(s,t,e=i=>i){return s.reduce((i,a,n,l)=>i.set(t(a,n,l),e(a,n,l)),new Map)}function G(s,t){return s?s.includes(t)?s:s+" && "+t:t}var z=r(require("path"));function E(s,t){let e=t(s);function i(a){if(a)return s;let n=z.default.dirname(s);return n===s?null:E(n,t)}return e instanceof Promise?e.then(i):i(e)}var c;(function(n){n.Filter="filter",n.Map="map",n.ForEach="forEach",n.Reduce="reduce",n.FlatMap="flatMap"})(c||(c={}));var x=class{constructor(t,e){this.type=t;this.args=e;this.type=t,this.args=e}};w(x,"Type",c);var u=class{constructor(t){this.arr=t}static reduce(t,e,i){return t.reduce((a,n,l)=>a.then(F=>e(F,n,l)),Promise.resolve(i))}static map(t,e){return Promise.all(t.map((i,a)=>e(i,a)))}static async filter(t,e){let i=[];return await u.map(t,async(a,n)=>{await e(a,n)&&i.push(a)}),i}static async flatMap(t,e){return(await Promise.all(t.map((i,a)=>e(i,a)))).flatMap(i=>i)}static async forEach(t,e){await u.map(t,e)}tasks=[];map(t){return this.tasks.push(new x(c.Map,[t])),this}flatMap(t){return this.tasks.push(new x(c.FlatMap,[t])),this}filter(t){return this.tasks.push(new x(c.Filter,[t])),this}async forEach(t){this.tasks.push(new x(c.Map,[t])),await this}then(t,e){let i=this.value();return i.then(a=>(t&&t(i),a)).catch(a=>{throw e&&e(a),a}),i}async value(){let t=this.arr;for(let e of this.tasks)switch(e.type){case c.Filter:t=await u.filter(t,e.args[0]);break;case c.Map:t=await u.map(t,e.args[0]);break;case c.FlatMap:t=await u.flatMap(t,e.args[0]);break;case c.ForEach:await u.forEach(t,e.args[0]);return;case c.Reduce:return await u.reduce(t,e.args[0],e.args[1])}return t}};async function d(s=process.cwd()){return await(0,T.pathExists)(R.default.resolve(s,"./package.json"))}async function P(s=process.cwd()){return await d(s)?!!(await(0,T.readJson)(R.default.resolve(s,"./package.json"))).workspaces:!1}async function J(s=process.cwd()){return!await d(s)||await P(s)?!1:await E(R.default.dirname(s),P)!==null}async function C(s,t=process.cwd()){if(!await d(t))return!1;let e=await(0,T.readJson)(R.default.resolve(t,"./package.json")),i=new Set(Object.keys({...e.dependencies,...e.devDependencies}));return s.every(a=>i.has(a))}var H=r(require("path")),k=class{};w(k,"RootPath",H.default.resolve(__dirname,".."));async function h(s,t){let e=g.default.resolve(s,"./package.json");await(0,p.writeJson)(e,(0,L.merge)(await(0,p.readJson)(e),t),{spaces:2})}var S=class{constructor(t){this.base=t}syncConfigs=[{type:"workspaces",handler:async()=>{let t=g.default.resolve(this.base,"./package.json"),e=g.default.resolve(this.base,"lerna.json"),i=await(0,p.readJson)(t),a=await(0,p.readJson)(e);a.packages=i.workspaces,await(0,p.writeJson)(e,a,{spaces:2})},when:P},{type:"prettier",handler:async()=>{await h(this.base,{prettier:"@liuli-util/prettier-standard-config",devDependencies:{prettier:"^2.3.2","@liuli-util/prettier-standard-config":`^${Q.default.version}`}})},async when(){return await d()&&(await P()||!await J())}},{type:"commitlint",handler:async()=>{await h(this.base,{"simple-git-hooks":{"commit-msg":"yarn commitlint --edit $1"},commitlint:{extends:["@liuli-util/commitlint-standard-config"]},devDependencies:{"@commitlint/cli":"^12.1.4","@liuli-util/commitlint-standard-config":`^${_.default.version}`}})},async when(){return await d()&&(await P()||!await J())}},{type:"gitignore",handler:async()=>{let t=g.default.resolve(this.base,".gitignore");await(0,p.writeFile)(t,await(0,p.readFile)(g.default.resolve(k.RootPath,"_gitignore"),"utf-8"))}},{type:"eslint-ts",handler:async()=>{await h(this.base,{eslintConfig:{extends:["@liuli-util/eslint-config-ts"]},devDependencies:{"@liuli-util/eslint-config-ts":`^${X.default.version}`}})},async when(){return await d()&&!await C(["vue"])&&!await C(["react"])}},{type:"eslint-react-ts",handler:async()=>{await h(this.base,{eslintConfig:{extends:["@liuli-util/eslint-config-react-ts"]},devDependencies:{"@liuli-util/eslint-config-react-ts":`^${Z.default.version}`}})},async when(){return await d()&&await C(["react"])}},{type:"jest",handler:async()=>{await h(this.base,{jest:{preset:"ts-jest",testMatch:["<rootDir>/src/**/__tests__/*.test.ts"]}})}},{type:"simplehooks",handler:async()=>{let t=await(0,p.readJson)(g.default.resolve(this.base,"./package.json")),e=[];t.prettier&&e.push("prettier --write"),t.eslintConfig&&e.push("eslint --fix");let i={scripts:{postinstall:G(t?.scripts?.postinstall,"npx simple-git-hooks")},"simple-git-hooks":{"pre-commit":"yarn lint-staged"},"lint-staged":{"*.{ts,tsx,js,jsx,css,vue}":[...e,"git add"]},devDependencies:{"simple-git-hooks":"^2.5.1","lint-staged":"^11.1.1"}};t.commitlint&&(i=(0,L.merge)(i,{"simple-git-hooks":{"commit-msg":"yarn commitlint --edit $1"}})),await h(this.base,i)},async when(){return await d()&&(await P()||!await J())}}];async sync(){let{sync:t}=await(0,p.readJson)(g.default.resolve(this.base,"package.json"));if(!t)return;let e=this.syncConfigs.filter(i=>t.includes(i.type));for(let i of e)await i.handler()}async init(){let t=U(await u.filter(this.syncConfigs,async i=>i.when?await i.when():!0),i=>i.type),e=await(0,A.prompt)({type:"multiselect",message:"\u8BF7\u9009\u62E9\u9700\u8981\u540C\u6B65\u7684\u914D\u7F6E\u9879",name:"sync",choices:[...t.keys()]});await h(this.base,{sync:e.sync})}};var j;(function(e){e.Cli="cli",e.Lib="lib"})(j||(j={}));var O=class{async generate(t){if(!t.dest){let{dest:a}=await(0,D.prompt)({name:"dest",type:"input",message:"\u8BF7\u8F93\u5165\u9879\u76EE\u540D",validate(n){return n.trim()!==""}});t.dest=f.default.resolve(a)}if(!t.template){let{template:a}=await(0,D.prompt)({name:"template",type:"list",message:"\u8BF7\u9009\u62E9\u6A21\u677F",choices:[j.Lib,j.Cli]});t.template=a}let e=f.default.resolve(k.RootPath,`templates/${t.template}`),i=f.default.resolve(t.dest);if(await(0,o.pathExists)(i)&&(await(0,o.readdir)(i)).some(a=>(0,o.pathExists)(a))){let{override:a}=await(0,D.prompt)({name:"override",type:"confirm",initial:!0,message:"\u76EE\u6807\u4F4D\u7F6E\u4E0D\u662F\u4E00\u4E2A\u7A7A\u76EE\u5F55\uFF0C\u786E\u8BA4\u8981\u8986\u76D6\u4E48\uFF1F"});if(!a)return}if(await(0,o.remove)(i),await(0,o.copy)(e,i),await O.updatePackageJSON(i),await O.updateReadme(i),t.initSync){let a=new S(f.default.resolve(t.dest));await a.init(),await a.sync()}}static async updatePackageJSON(t){let e=f.default.resolve(t,"package.json");await(0,o.writeJSON)(e,{...await(0,o.readJSON)(e),name:f.default.basename(t)},{spaces:2})}static async updateReadme(t){let e=f.default.resolve(t,"README.md"),i=await(0,o.readFile)(e,"utf-8");i=i.replace("template",f.default.basename(t)),await(0,o.writeFile)(e,i)}};0&&(module.exports={ESBuildProgram,GenerateProgram,SyncProgram,TemplateTypeEnum,mergeJson});
6
6
  //# sourceMappingURL=index.js.map