@liuli-util/cli 3.22.0 → 3.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.js +1 -1
- package/dist/PathUtil.d.ts +7 -0
- package/dist/PathUtil.d.ts.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +217 -0
- package/dist/bin.js.map +7 -0
- package/dist/commands/deploy/DeployService.d.ts +74 -0
- package/dist/commands/deploy/DeployService.d.ts.map +1 -0
- package/dist/commands/deploy/deploy.d.ts +3 -0
- package/dist/commands/deploy/deploy.d.ts.map +1 -0
- package/dist/commands/deploy/index.d.ts +3 -0
- package/dist/commands/deploy/index.d.ts.map +1 -0
- package/dist/commands/deploy/util/PromiseUtil.d.ts +14 -0
- package/dist/commands/deploy/util/PromiseUtil.d.ts.map +1 -0
- package/dist/commands/deploy/util/createArchive.d.ts +10 -0
- package/dist/commands/deploy/util/createArchive.d.ts.map +1 -0
- package/dist/commands/deploy/util/execPromise.d.ts +5 -0
- package/dist/commands/deploy/util/execPromise.d.ts.map +1 -0
- package/dist/commands/deploy/util/validate.d.ts +8 -0
- package/dist/commands/deploy/util/validate.d.ts.map +1 -0
- package/dist/commands/deploy/util/wait.d.ts +9 -0
- package/dist/commands/deploy/util/wait.d.ts.map +1 -0
- package/dist/commands/esbuild/ESBuildProgram.d.ts +77 -0
- package/dist/commands/esbuild/ESBuildProgram.d.ts.map +1 -0
- package/dist/commands/esbuild/index.d.ts +3 -0
- package/dist/commands/esbuild/index.d.ts.map +1 -0
- package/dist/commands/esbuild/util/autoExternal.d.ts +7 -0
- package/dist/commands/esbuild/util/autoExternal.d.ts.map +1 -0
- package/dist/commands/esbuild/util/debounce.d.ts +15 -0
- package/dist/commands/esbuild/util/debounce.d.ts.map +1 -0
- package/dist/commands/esbuild/util/env.d.ts +16 -0
- package/dist/commands/esbuild/util/env.d.ts.map +1 -0
- package/dist/commands/esbuild/util/getPkgGlobalName.d.ts +6 -0
- package/dist/commands/esbuild/util/getPkgGlobalName.d.ts.map +1 -0
- package/dist/commands/esbuild/util/index.d.ts +11 -0
- package/dist/commands/esbuild/util/index.d.ts.map +1 -0
- package/dist/commands/esbuild/util/log.d.ts +3 -0
- package/dist/commands/esbuild/util/log.d.ts.map +1 -0
- package/dist/commands/esbuild/util/metafile.d.ts +7 -0
- package/dist/commands/esbuild/util/metafile.d.ts.map +1 -0
- package/dist/commands/esbuild/util/nativeNodeModules.d.ts +7 -0
- package/dist/commands/esbuild/util/nativeNodeModules.d.ts.map +1 -0
- package/dist/commands/esbuild/util/nodeExternal.d.ts +6 -0
- package/dist/commands/esbuild/util/nodeExternal.d.ts.map +1 -0
- package/dist/commands/esbuild/util/raw.d.ts +7 -0
- package/dist/commands/esbuild/util/raw.d.ts.map +1 -0
- package/dist/commands/esbuild/util/resolve.d.ts +8 -0
- package/dist/commands/esbuild/util/resolve.d.ts.map +1 -0
- package/dist/commands/esbuild/util/sideEffect.d.ts +8 -0
- package/dist/commands/esbuild/util/sideEffect.d.ts.map +1 -0
- package/dist/commands/esbuild/util/userJS.d.ts +3 -0
- package/dist/commands/esbuild/util/userJS.d.ts.map +1 -0
- package/dist/commands/generate/GenerateProgram.d.ts +18 -0
- package/dist/commands/generate/GenerateProgram.d.ts.map +1 -0
- package/dist/commands/generate/index.d.ts +3 -0
- package/dist/commands/generate/index.d.ts.map +1 -0
- package/dist/commands/sync/SyncProgram.d.ts +15 -0
- package/dist/commands/sync/SyncProgram.d.ts.map +1 -0
- package/dist/commands/sync/index.d.ts +3 -0
- package/dist/commands/sync/index.d.ts.map +1 -0
- package/dist/commands/sync/when.d.ts +21 -0
- package/dist/commands/sync/when.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +8 -0
- package/dist/index.esm.js.map +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +7 -0
- package/dist/utils/AsyncArray.d.ts +21 -0
- package/dist/utils/AsyncArray.d.ts.map +1 -0
- package/dist/utils/appendScript.d.ts +7 -0
- package/dist/utils/appendScript.d.ts.map +1 -0
- package/dist/utils/arrayToMap.d.ts +3 -0
- package/dist/utils/arrayToMap.d.ts.map +1 -0
- package/dist/utils/findParent.d.ts +8 -0
- package/dist/utils/findParent.d.ts.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/nodeCacheDir.d.ts +2 -0
- package/dist/utils/nodeCacheDir.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/commands/esbuild/ESBuildProgram.ts", "../src/commands/esbuild/util/debounce.ts", "../src/commands/esbuild/util/getPkgGlobalName.ts", "../src/commands/esbuild/util/metafile.ts", "../src/commands/esbuild/util/nativeNodeModules.ts", "../src/commands/esbuild/util/nodeExternal.ts", "../src/commands/esbuild/util/raw.ts", "../src/commands/esbuild/util/resolve.ts", "../src/commands/esbuild/util/userJS.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, readFile, readJson, remove } 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 { watch } from 'chokidar'\r\nimport Spinnies from 'spinnies'\r\nimport { debounce } from './util/debounce'\r\nimport { parse } from 'json5'\r\nimport { getPkgGlobalName } from './util/getPkgGlobalName'\r\nimport { nativeNodeModules, nodeExternal, resolve, userJS } from './util'\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 type TaskTypeEnum = 'esm' | 'cjs' | 'iife' | 'cli' | 'dts' | 'userjs'\r\n\r\nexport class ESBuildProgram {\r\n constructor(private readonly options: ESBuildProgramOptions) {}\r\n\r\n set isWatch(isWatch: boolean) {\r\n this.options.isWatch = isWatch\r\n }\r\n\r\n static readonly globalExternal = ['esbuild', 'pnpapi', 'ts-morph', 'ssh2']\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(path.resolve(base, 'package.json'))) 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 = parse(await readFile(tsconfigPath, 'utf-8'))\r\n if ((tsconfigJson?.compilerOptions?.lib as string[])?.some((lib) => lib.toLowerCase() === 'dom')) {\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(this.options.base)\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) => path.resolve(base, filePath))\r\n project.addSourceFilesAtPaths(fileList)\r\n await project.emit({\r\n emitOnlyDtsFiles: true,\r\n })\r\n }\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cjs \u7684\u9009\u9879\r\n */\r\n getBuildUserJSOption(): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.user.js'),\r\n format: 'iife',\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal],\r\n platform: 'browser',\r\n plugins: [userJS() as any],\r\n incremental: this.options.isWatch,\r\n absWorkingDir: this.options.base,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cjs \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildCjsOption({ deps, platform }: { deps: string[]; platform: Platform }): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.js'),\r\n format: 'cjs',\r\n sourcemap: true,\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 metafile: this.options.isWatch,\r\n plugins: [resolve([['@liuli-util/esbuild-plugins/src/', '@liuli-util/esbuild-plugins']])] as any,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA esm \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildESMOption({ deps, platform }: { deps: string[]; platform: Platform }): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.esm.js'),\r\n format: 'esm',\r\n sourcemap: true,\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 metafile: this.options.isWatch,\r\n plugins: [resolve([['@liuli-util/esbuild-plugins/src/', '@liuli-util/esbuild-plugins']])] as any,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA iife \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildIifeOption({ platform, globalName }: { platform: Platform; globalName: string }): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.iife.js'),\r\n format: 'iife',\r\n sourcemap: true,\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal],\r\n platform: platform,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n metafile: this.options.isWatch,\r\n globalName,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cli \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildCliOption({ platform }: { deps: string[]; platform: Platform }): BuildOptions {\r\n const plugins = ESBuildProgram.getPlugins(platform)\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/bin.ts')],\r\n outfile: path.resolve(this.options.base, './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: [...ESBuildProgram.globalExternal],\r\n plugins,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n metafile: 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(nodeExternal() as any, nativeNodeModules() as any)\r\n }\r\n return plugins\r\n }\r\n\r\n async build(options: BuildOptions): Promise<void> {\r\n // if (this.options.isWatch) {\r\n // options.plugins = [...(options.plugins ?? []), metafile(options.outfile + '.meta.json')]\r\n // }\r\n await build(options)\r\n }\r\n\r\n async getTasks(): Promise<Record<TaskTypeEnum, Task>> {\r\n const deps = await ESBuildProgram.getDeps(this.options.base)\r\n const platform = await ESBuildProgram.getPlatform(this.options.base)\r\n return {\r\n esm: {\r\n title: '\u6784\u5EFA esm',\r\n task: () =>\r\n this.build(\r\n this.getBuildESMOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n cjs: {\r\n title: '\u6784\u5EFA cjs',\r\n task: () =>\r\n this.build(\r\n this.getBuildCjsOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n iife: {\r\n title: '\u6784\u5EFA iife',\r\n task: async () => {\r\n return await this.build(\r\n this.getBuildIifeOption({\r\n platform: platform,\r\n globalName: getPkgGlobalName(\r\n ((await readJson(path.resolve(this.options.base, './package.json'))) as PackageJson).name!,\r\n ),\r\n }),\r\n )\r\n },\r\n },\r\n cli: {\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 dts: {\r\n title: '\u751F\u6210\u7C7B\u578B\u5B9A\u4E49',\r\n task: () => this.genDTS(),\r\n },\r\n userjs: {\r\n title: '\u6253\u5305 userjs',\r\n task: () => this.build(this.getBuildUserJSOption()),\r\n },\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 execTasks(tasks: Task[]): Promise<void> {\r\n const run = async () => {\r\n const start = Date.now()\r\n const spinnies = new Spinnies()\r\n await Promise.all(tasks.map(async (task) => ESBuildProgram.execTask(spinnies, task)))\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 remove(path.resolve(this.options.base, 'dist'))\r\n await run()\r\n return\r\n }\r\n\r\n const { pattern, options } = ESBuildProgram.getWatchOptions(this.options.base)\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", "/**\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", "/**\r\n * \u8F6C\u6362 npm \u5305\u540D\u4E3A\u4E00\u4E2A\u5408\u9002\u7684\u5168\u5C40\u53D8\u91CF\u540D\r\n * @param name\r\n */\r\nexport function getPkgGlobalName(name: string): string {\r\n const temp = name.startsWith('@') ? name.slice(name.indexOf('/') + 1) : name\r\n return temp\r\n .split('-')\r\n .map((s) => s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase())\r\n .join('')\r\n}\r\n", "import { Plugin } from 'esbuild'\r\nimport { writeJson } from 'fs-extra'\r\n\r\n/**\r\n * \u751F\u6210 metafile \u7684\u63D2\u4EF6\r\n * @param metafilePath\r\n */\r\n export function metafile(metafilePath: string): Plugin {\r\n return {\r\n name: 'metafile',\r\n setup(builder) {\r\n builder.onEnd(async (result) => {\r\n await writeJson(metafilePath, result.metafile)\r\n })\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({ filter: /\\.node$/, namespace: 'node-file' }, (args) => ({\r\n path: args.path,\r\n namespace: 'file',\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", "import { Plugin } from 'esbuild'\r\n\r\n/**\r\n * \u6392\u9664\u548C\u66FF\u6362 node \u5185\u7F6E\u6A21\u5757\r\n */\r\nexport function nodeExternal(): Plugin {\r\n return {\r\n name: 'nodeExternals',\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", "import { Plugin } from 'esbuild'\r\nimport { readFile } from 'fs-extra'\r\nimport * as path from 'path'\r\n\r\n/**\r\n * \u901A\u8FC7 ?raw \u5C06\u8D44\u6E90\u4F5C\u4E3A\u5B57\u7B26\u4E32\u6253\u5305\u8FDB\u6765\r\n * @returns\r\n */\r\nexport function raw(): Plugin {\r\n return {\r\n name: 'raw',\r\n setup(build) {\r\n build.onResolve({ filter: /\\?raw$/ }, (args) => {\r\n return {\r\n path: path.isAbsolute(args.path) ? args.path : path.join(args.resolveDir, args.path),\r\n namespace: 'raw-loader',\r\n }\r\n })\r\n build.onLoad({ filter: /\\?raw$/, namespace: 'raw-loader' }, async (args) => {\r\n return {\r\n contents: await readFile(args.path.replace(/\\?raw$/, '')),\r\n loader: 'text',\r\n }\r\n })\r\n },\r\n }\r\n}\r\n", "import { build, Plugin } from 'esbuild'\r\nimport path from 'path'\r\n\r\n/**\r\n * \u5C06\u6307\u5B9A\u7684 import \u91CD\u5199\u4E3A\u53E6\u4E00\u4E2A\r\n * @param entries\r\n * @returns\r\n */\r\nexport function resolve(entries: [from: string, to: string][]): Plugin {\r\n return {\r\n name: 'resolve',\r\n setup(build) {\r\n build.onResolve({ filter: /.*/ }, async (args) => {\r\n const findEntries = entries.find((item) => item[0] === args.path)\r\n if (!findEntries) {\r\n return\r\n }\r\n return await build.resolve(findEntries[1])\r\n })\r\n },\r\n }\r\n}\r\n", "import { Plugin } from 'esbuild'\r\nimport { readJson } from 'fs-extra'\r\nimport path from 'path'\r\n\r\nfunction generateBanner(meta: object) {\r\n return (\r\n [\r\n '// ==UserScript==',\r\n ...Object.entries(meta)\r\n .map(([key, value]) => {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => `// @${key} ${item}`)\r\n }\r\n return `// @${key} ${value}`\r\n })\r\n .flat(),\r\n '// ==/UserScript==',\r\n ].join('\\n') + '\\n'\r\n )\r\n}\r\n\r\nexport function userJS(): Plugin {\r\n return {\r\n name: 'userJS',\r\n async setup(build) {\r\n const json = (await readJson(path.resolve(build.initialOptions.absWorkingDir!, 'package.json'))) as {\r\n userjs: object\r\n }\r\n if (!json.userjs) {\r\n throw new Error('userjs is not supported')\r\n }\r\n if (!build.initialOptions.banner) {\r\n build.initialOptions.banner = {}\r\n }\r\n build.initialOptions.banner!['js'] = generateBanner(json.userjs)\r\n },\r\n }\r\n}\r\n", "import path from 'path'\r\nimport { copy, pathExists, readdir, readFile, readJSON, remove, writeFile, writeJSON } 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: 'select',\r\n message: '\u8BF7\u9009\u62E9\u6A21\u677F',\r\n choices: [TemplateTypeEnum.Lib, TemplateTypeEnum.Cli] 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(PathUtil.RootPath, `templates/${config.template}`)\r\n const destFile = path.resolve(config.dest)\r\n if ((await pathExists(destFile)) && (await readdir(destFile)).some((file) => pathExists(file))) {\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 filter: (source) => path.basename(source) !== 'node_modules',\r\n })\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'\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(pkgJsonFilePath, merge(await readJson(pkgJsonFilePath), json), {\r\n spaces: 2,\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 (await isNpmPackage()) && ((await isYarnRoot()) || !(await isYarnSubModule()))\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 (await isNpmPackage()) && ((await isYarnRoot()) || !(await isYarnSubModule()))\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(gitignorePath, await readFile(path.resolve(PathUtil.RootPath, '_gitignore'), 'utf-8'))\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 (await isNpmPackage()) && !(await isIncludeDep(['vue'])) && !(await isIncludeDep(['react']))\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 devDependencies: {\r\n jest: '^27.4.3',\r\n 'ts-jest': '^27.0.7',\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: Record<string, string[]> = {}\r\n if (json.prettier) {\r\n lintStaged['src/**/*.{ts,tsx,js,jsx,css,vue}'] = ['prettier --write', 'git add']\r\n }\r\n if (json.eslintConfig) {\r\n lintStaged['src/**/*.{ts,tsx,js,jsx}'] = ['eslint --fix --quiet', 'git add']\r\n }\r\n let config = {\r\n scripts: {\r\n postinstall: appendScript(json?.scripts?.postinstall, 'npx simple-git-hooks'),\r\n },\r\n 'simple-git-hooks': {\r\n 'pre-commit': 'yarn lint-staged',\r\n },\r\n 'lint-staged': lintStaged,\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 (await isNpmPackage()) && ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n },\r\n },\r\n ]\r\n\r\n async sync(): Promise<void> {\r\n const { sync } = (await readJson(path.resolve(this.base, 'package.json'))) as {\r\n sync?: SyncConfigType[]\r\n }\r\n if (!sync) {\r\n return\r\n }\r\n const syncConfigs = this.syncConfigs.filter((config) => sync.includes(config.type))\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 * as 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(cwd: string = process.cwd()): 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(cwd: string = process.cwd()): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(path.resolve(cwd, './package.json'))) 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(cwd: string = process.cwd()): 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(deps: string[], cwd: string = process.cwd()): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(path.resolve(cwd, './package.json'))) as PackageJson\r\n const set = new Set(Object.keys({ ...json.dependencies, ...json.devDependencies }))\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
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
var ae=Object.create;var k=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var pe=Object.getOwnPropertyNames;var le=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var me=(i,e,t)=>e in i?k(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var ue=(i,e)=>{for(var t in e)k(i,t,{get:e[t],enumerable:!0})},$=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of pe(e))!ce.call(i,n)&&n!==t&&k(i,n,{get:()=>e[n],enumerable:!(s=oe(e,n))||s.enumerable});return i};var m=(i,e,t)=>(t=i!=null?ae(le(i)):{},$(e||!i||!i.__esModule?k(t,"default",{value:i,enumerable:!0}):t,i)),fe=i=>$(k({},"__esModule",{value:!0}),i);var x=(i,e,t)=>(me(i,typeof e!="symbol"?e+"":e,t),t);var ye={};ue(ye,{ESBuildProgram:()=>O,GenerateProgram:()=>T,SyncProgram:()=>R,TemplateTypeEnum:()=>re,mergeJson:()=>h});module.exports=fe(ye);var C=require("esbuild"),f=require("fs-extra"),a=m(require("path")),Y=require("ts-morph"),q=require("glob-promise"),G=require("chokidar"),z=m(require("spinnies"));function B(i,e,t=null){let s,n=t;return async function(...r){return new Promise(p=>{s&&clearTimeout(s),s=setTimeout(()=>p(n=i(...r)),e),setTimeout(()=>p(n),e)})}}var A=require("json5");function N(i){return(i.startsWith("@")?i.slice(i.indexOf("/")+1):i).split("-").map(t=>t.slice(0,1).toUpperCase()+t.slice(1).toLowerCase()).join("")}var de=require("fs-extra");function I(){return{name:"native-node-modules",setup(i){i.onResolve({filter:/\.node$/,namespace:"file"},t=>({path:require.resolve(t.path,{paths:[t.resolveDir]}),namespace:"node-file"})),i.onLoad({filter:/.*/,namespace:"node-file"},t=>({contents:`
|
|
2
|
+
import path from ${JSON.stringify(t.path)}
|
|
3
|
+
try { module.exports = require(path) }
|
|
4
|
+
catch {}
|
|
5
|
+
`})),i.onResolve({filter:/\.node$/,namespace:"node-file"},t=>({path:t.path,namespace:"file"}));let e=i.initialOptions;e.loader=e.loader||{},e.loader[".node"]="file"}}}function L(){return{name:"nodeExternals",setup(i){i.onResolve({filter:/(^node:)/},e=>({path:e.path.slice(5),external:!0}))}}}var ge=require("fs-extra");function M(i){return{name:"resolve",setup(e){e.onResolve({filter:/.*/},async t=>{let s=i.find(n=>n[0]===t.path);if(!!s)return await e.resolve(s[1])})}}}var K=require("fs-extra"),V=m(require("path"));function he(i){return["// ==UserScript==",...Object.entries(i).map(([e,t])=>Array.isArray(t)?t.map(s=>`// @${e} ${s}`):`// @${e} ${t}`).flat(),"// ==/UserScript=="].join(`
|
|
6
|
+
`)+`
|
|
7
|
+
`}function U(){return{name:"userJS",async setup(i){let e=await(0,K.readJson)(V.default.resolve(i.initialOptions.absWorkingDir,"package.json"));if(!e.userjs)throw new Error("userjs is not supported");i.initialOptions.banner||(i.initialOptions.banner={}),i.initialOptions.banner.js=he(e.userjs)}}}var l=class{constructor(e){this.options=e}set isWatch(e){this.options.isWatch=e}static async getDeps(e){let t=await(0,f.readJson)(a.resolve(e,"package.json"));return Object.keys({...t.dependencies,...t.devDependencies,...t.peerDependencies})}static async getPlatform(e){let t=a.resolve(e,"tsconfig.json");if(await(0,f.pathExists)(t)&&(0,A.parse)(await(0,f.readFile)(t,"utf-8"))?.compilerOptions?.lib?.some(r=>r.toLowerCase()==="dom"))return"browser";let s=a.resolve(e,"package.json");if(await(0,f.pathExists)(s)){let n=await(0,f.readJson)(s);if(Object.keys(n.devDependencies??{}).includes("@types/node"))return"node"}return"neutral"}static getWatchOptions(e){return{pattern:"src/**/*.ts",options:{cwd:e,ignore:"**/__tests__/**/*"}}}async genDTS(){let e=this.options.base,{pattern:t,options:s}=l.getWatchOptions(this.options.base),n=new Y.Project({tsConfigFilePath:a.resolve(e,"tsconfig.json"),skipAddingFilesFromTsConfig:!0,compilerOptions:{emitDeclarationOnly:!0,noEmit:!1,incremental:this.options.isWatch}}),r=(await(0,q.promise)(t,s)).map(p=>a.resolve(e,p));n.addSourceFilesAtPaths(r),await n.emit({emitOnlyDtsFiles:!0})}getBuildUserJSOption(){return{entryPoints:[a.resolve(this.options.base,"./src/index.ts")],outfile:a.resolve(this.options.base,"./dist/index.user.js"),format:"iife",bundle:!0,external:[...l.globalExternal],platform:"browser",plugins:[U()],incremental:this.options.isWatch,absWorkingDir:this.options.base}}getBuildCjsOption({deps:e,platform:t}){return{entryPoints:[a.resolve(this.options.base,"./src/index.ts")],outfile:a.resolve(this.options.base,"./dist/index.js"),format:"cjs",sourcemap:!0,bundle:!0,external:[...l.globalExternal,...e],platform:t,minify:!this.options.isWatch,incremental:this.options.isWatch,metafile:this.options.isWatch,plugins:[M([["@liuli-util/esbuild-plugins/src/","@liuli-util/esbuild-plugins"]])]}}getBuildESMOption({deps:e,platform:t}){return{entryPoints:[a.resolve(this.options.base,"./src/index.ts")],outfile:a.resolve(this.options.base,"./dist/index.esm.js"),format:"esm",sourcemap:!0,bundle:!0,external:[...l.globalExternal,...e],platform:t,minify:!this.options.isWatch,incremental:this.options.isWatch,metafile:this.options.isWatch,plugins:[M([["@liuli-util/esbuild-plugins/src/","@liuli-util/esbuild-plugins"]])]}}getBuildIifeOption({platform:e,globalName:t}){return{entryPoints:[a.resolve(this.options.base,"./src/index.ts")],outfile:a.resolve(this.options.base,"./dist/index.iife.js"),format:"iife",sourcemap:!0,bundle:!0,external:[...l.globalExternal],platform:e,minify:!this.options.isWatch,incremental:this.options.isWatch,metafile:this.options.isWatch,globalName:t}}getBuildCliOption({platform:e}){let t=l.getPlugins(e);return{entryPoints:[a.resolve(this.options.base,"./src/bin.ts")],outfile:a.resolve(this.options.base,"./dist/bin.js"),format:"cjs",sourcemap:!0,platform:e,bundle:!0,banner:{js:"#!/usr/bin/env node"},external:[...l.globalExternal],plugins:t,minify:!this.options.isWatch,incremental:this.options.isWatch,metafile:this.options.isWatch}}static getPlugins(e){let t=[];return e==="node"&&t.push(L(),I()),t}async build(e){await(0,C.build)(e)}async getTasks(){let e=await l.getDeps(this.options.base),t=await l.getPlatform(this.options.base);return{esm:{title:"\u6784\u5EFA esm",task:()=>this.build(this.getBuildESMOption({deps:e,platform:t}))},cjs:{title:"\u6784\u5EFA cjs",task:()=>this.build(this.getBuildCjsOption({deps:e,platform:t}))},iife:{title:"\u6784\u5EFA iife",task:async()=>await this.build(this.getBuildIifeOption({platform:t,globalName:N((await(0,f.readJson)(a.resolve(this.options.base,"./package.json"))).name)}))},cli:{title:"\u6784\u5EFA cli",task:()=>(0,C.build)(this.getBuildCliOption({deps:e,platform:t}))},dts:{title:"\u751F\u6210\u7C7B\u578B\u5B9A\u4E49",task:()=>this.genDTS()},userjs:{title:"\u6253\u5305 userjs",task:()=>this.build(this.getBuildUserJSOption())}}}static async execTask(e,t){let s=Date.now();e.add(t.title,{text:t.title});try{await t.task(),e.succeed(t.title,{text:`${t.title}: ${Date.now()-s}ms`})}catch{e.fail(t.title,{text:t.title})}}async execTasks(e){let t=async()=>{let r=Date.now(),p=new z.default;await Promise.all(e.map(async S=>l.execTask(p,S))),console.log(`\u6784\u5EFA\u5B8C\u6210: ${Date.now()-r}ms`)};if(!this.options.isWatch){await(0,f.remove)(a.resolve(this.options.base,"dist")),await t();return}let{pattern:s,options:n}=l.getWatchOptions(this.options.base);await new Promise((r,p)=>{(0,G.watch)(s,n).on("error",p).on("all",B(t,10))})}},O=l;x(O,"globalExternal",["esbuild","pnpapi","ts-morph","ssh2"]);var d=m(require("path")),o=require("fs-extra"),D=require("enquirer");var c=require("fs-extra"),y=m(require("path")),W=require("lodash"),ee=m(require("@liuli-util/prettier-standard-config/package.json")),te=m(require("@liuli-util/eslint-config-ts/package.json")),ie=m(require("@liuli-util/eslint-config-react-ts/package.json")),se=m(require("@liuli-util/commitlint-standard-config/package.json")),ne=require("enquirer");var j=require("fs-extra"),v=m(require("path"));function H(i,e,t=s=>s){return i.reduce((s,n,r,p)=>s.set(e(n,r,p),t(n,r,p)),new Map)}function Q(i,e){return i?i.includes(e)?i:i+" && "+e:e}var X=m(require("path"));function F(i,e){let t=e(i);function s(n){if(n)return i;let r=X.default.dirname(i);return r===i?null:F(r,e)}return t instanceof Promise?t.then(s):s(t)}var Z=(r=>(r.Filter="filter",r.Map="map",r.ForEach="forEach",r.Reduce="reduce",r.FlatMap="flatMap",r))(Z||{}),w=class{constructor(e,t){this.type=e;this.args=t;this.type=e,this.args=t}};x(w,"Type",Z);var u=class{constructor(e){this.arr=e}static reduce(e,t,s){return e.reduce((n,r,p)=>n.then(S=>t(S,r,p)),Promise.resolve(s))}static map(e,t){return Promise.all(e.map((s,n)=>t(s,n)))}static async filter(e,t){let s=[];return await u.map(e,async(n,r)=>{await t(n,r)&&s.push(n)}),s}static async flatMap(e,t){return(await Promise.all(e.map((s,n)=>t(s,n)))).flatMap(s=>s)}static async forEach(e,t){await u.map(e,t)}tasks=[];map(e){return this.tasks.push(new w("map",[e])),this}flatMap(e){return this.tasks.push(new w("flatMap",[e])),this}filter(e){return this.tasks.push(new w("filter",[e])),this}async forEach(e){this.tasks.push(new w("map",[e])),await this}then(e,t){let s=this.value();return s.then(n=>(e&&e(s),n)).catch(n=>{throw t&&t(n),n}),s}async value(){let e=this.arr;for(let t of this.tasks)switch(t.type){case"filter":e=await u.filter(e,t.args[0]);break;case"map":e=await u.map(e,t.args[0]);break;case"flatMap":e=await u.flatMap(e,t.args[0]);break;case"forEach":await u.forEach(e,t.args[0]);return;case"reduce":return await u.reduce(e,t.args[0],t.args[1])}return e}};async function g(i=process.cwd()){return await(0,j.pathExists)(v.resolve(i,"./package.json"))}async function P(i=process.cwd()){return await g(i)?!!(await(0,j.readJson)(v.resolve(i,"./package.json"))).workspaces:!1}async function E(i=process.cwd()){return!await g(i)||await P(i)?!1:await F(v.dirname(i),P)!==null}async function J(i,e=process.cwd()){if(!await g(e))return!1;let t=await(0,j.readJson)(v.resolve(e,"./package.json")),s=new Set(Object.keys({...t.dependencies,...t.devDependencies}));return i.every(n=>s.has(n))}var _=m(require("path")),b=class{};x(b,"RootPath",_.default.resolve(__dirname,".."));async function h(i,e){let t=y.default.resolve(i,"./package.json");await(0,c.writeJson)(t,(0,W.merge)(await(0,c.readJson)(t),e),{spaces:2})}var R=class{constructor(e){this.base=e}syncConfigs=[{type:"workspaces",handler:async()=>{let e=y.default.resolve(this.base,"./package.json"),t=y.default.resolve(this.base,"lerna.json"),s=await(0,c.readJson)(e),n=await(0,c.readJson)(t);n.packages=s.workspaces,await(0,c.writeJson)(t,n,{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":`^${ee.default.version}`}})},async when(){return await g()&&(await P()||!await E())}},{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":`^${se.default.version}`}})},async when(){return await g()&&(await P()||!await E())}},{type:"gitignore",handler:async()=>{let e=y.default.resolve(this.base,".gitignore");await(0,c.writeFile)(e,await(0,c.readFile)(y.default.resolve(b.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":`^${te.default.version}`}})},async when(){return await g()&&!await J(["vue"])&&!await J(["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":`^${ie.default.version}`}})},async when(){return await g()&&await J(["react"])}},{type:"jest",handler:async()=>{await h(this.base,{jest:{preset:"ts-jest",testMatch:["<rootDir>/src/**/__tests__/*.test.ts"]},devDependencies:{jest:"^27.4.3","ts-jest":"^27.0.7"}})}},{type:"simplehooks",handler:async()=>{let e=await(0,c.readJson)(y.default.resolve(this.base,"./package.json")),t={};e.prettier&&(t["src/**/*.{ts,tsx,js,jsx,css,vue}"]=["prettier --write","git add"]),e.eslintConfig&&(t["src/**/*.{ts,tsx,js,jsx}"]=["eslint --fix --quiet","git add"]);let s={scripts:{postinstall:Q(e?.scripts?.postinstall,"npx simple-git-hooks")},"simple-git-hooks":{"pre-commit":"yarn lint-staged"},"lint-staged":t,devDependencies:{"simple-git-hooks":"^2.5.1","lint-staged":"^11.1.1"}};e.commitlint&&(s=(0,W.merge)(s,{"simple-git-hooks":{"commit-msg":"yarn commitlint --edit $1"}})),await h(this.base,s)},async when(){return await g()&&(await P()||!await E())}}];async sync(){let{sync:e}=await(0,c.readJson)(y.default.resolve(this.base,"package.json"));if(!e)return;let t=this.syncConfigs.filter(s=>e.includes(s.type));for(let s of t)await s.handler()}async init(){let e=H(await u.filter(this.syncConfigs,async s=>s.when?await s.when():!0),s=>s.type),t=await(0,ne.prompt)({type:"multiselect",message:"\u8BF7\u9009\u62E9\u9700\u8981\u540C\u6B65\u7684\u914D\u7F6E\u9879",name:"sync",choices:[...e.keys()]});await h(this.base,{sync:t.sync})}};var re=(t=>(t.Cli="cli",t.Lib="lib",t))(re||{}),T=class{async generate(e){if(!e.dest){let{dest:n}=await(0,D.prompt)({name:"dest",type:"input",message:"\u8BF7\u8F93\u5165\u9879\u76EE\u540D",validate(r){return r.trim()!==""}});e.dest=d.default.resolve(n)}if(!e.template){let{template:n}=await(0,D.prompt)({name:"template",type:"select",message:"\u8BF7\u9009\u62E9\u6A21\u677F",choices:["lib","cli"]});e.template=n}let t=d.default.resolve(b.RootPath,`templates/${e.template}`),s=d.default.resolve(e.dest);if(await(0,o.pathExists)(s)&&(await(0,o.readdir)(s)).some(n=>(0,o.pathExists)(n))){let{override:n}=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(!n)return}if(await(0,o.remove)(s),await(0,o.copy)(t,s,{filter:n=>d.default.basename(n)!=="node_modules"}),await T.updatePackageJSON(s),await T.updateReadme(s),e.initSync){let n=new R(d.default.resolve(e.dest));await n.init(),await n.sync()}}static async updatePackageJSON(e){let t=d.default.resolve(e,"package.json");await(0,o.writeJSON)(t,{...await(0,o.readJSON)(t),name:d.default.basename(e)},{spaces:2})}static async updateReadme(e){let t=d.default.resolve(e,"README.md"),s=await(0,o.readFile)(t,"utf-8");s=s.replace("template",d.default.basename(e)),await(0,o.writeFile)(t,s)}};0&&(module.exports={ESBuildProgram,GenerateProgram,SyncProgram,TemplateTypeEnum,mergeJson});
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/commands/esbuild/ESBuildProgram.ts", "../src/commands/esbuild/util/debounce.ts", "../src/commands/esbuild/util/getPkgGlobalName.ts", "../src/commands/esbuild/util/metafile.ts", "../src/commands/esbuild/util/nativeNodeModules.ts", "../src/commands/esbuild/util/nodeExternal.ts", "../src/commands/esbuild/util/raw.ts", "../src/commands/esbuild/util/resolve.ts", "../src/commands/esbuild/util/userJS.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": ["export * from './commands/esbuild/ESBuildProgram'\r\nexport * from './commands/generate/GenerateProgram'\r\nexport * from './commands/sync/SyncProgram'\r\n", "import { build, BuildOptions, Platform, Plugin } from 'esbuild'\r\nimport { pathExists, readFile, readJson, remove } 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 { watch } from 'chokidar'\r\nimport Spinnies from 'spinnies'\r\nimport { debounce } from './util/debounce'\r\nimport { parse } from 'json5'\r\nimport { getPkgGlobalName } from './util/getPkgGlobalName'\r\nimport { nativeNodeModules, nodeExternal, resolve, userJS } from './util'\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 type TaskTypeEnum = 'esm' | 'cjs' | 'iife' | 'cli' | 'dts' | 'userjs'\r\n\r\nexport class ESBuildProgram {\r\n constructor(private readonly options: ESBuildProgramOptions) {}\r\n\r\n set isWatch(isWatch: boolean) {\r\n this.options.isWatch = isWatch\r\n }\r\n\r\n static readonly globalExternal = ['esbuild', 'pnpapi', 'ts-morph', 'ssh2']\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(path.resolve(base, 'package.json'))) 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 = parse(await readFile(tsconfigPath, 'utf-8'))\r\n if ((tsconfigJson?.compilerOptions?.lib as string[])?.some((lib) => lib.toLowerCase() === 'dom')) {\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(this.options.base)\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) => path.resolve(base, filePath))\r\n project.addSourceFilesAtPaths(fileList)\r\n await project.emit({\r\n emitOnlyDtsFiles: true,\r\n })\r\n }\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cjs \u7684\u9009\u9879\r\n */\r\n getBuildUserJSOption(): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.user.js'),\r\n format: 'iife',\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal],\r\n platform: 'browser',\r\n plugins: [userJS() as any],\r\n incremental: this.options.isWatch,\r\n absWorkingDir: this.options.base,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cjs \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildCjsOption({ deps, platform }: { deps: string[]; platform: Platform }): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.js'),\r\n format: 'cjs',\r\n sourcemap: true,\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 metafile: this.options.isWatch,\r\n plugins: [resolve([['@liuli-util/esbuild-plugins/src/', '@liuli-util/esbuild-plugins']])] as any,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA esm \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildESMOption({ deps, platform }: { deps: string[]; platform: Platform }): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.esm.js'),\r\n format: 'esm',\r\n sourcemap: true,\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 metafile: this.options.isWatch,\r\n plugins: [resolve([['@liuli-util/esbuild-plugins/src/', '@liuli-util/esbuild-plugins']])] as any,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA iife \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildIifeOption({ platform, globalName }: { platform: Platform; globalName: string }): BuildOptions {\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/index.ts')],\r\n outfile: path.resolve(this.options.base, './dist/index.iife.js'),\r\n format: 'iife',\r\n sourcemap: true,\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal],\r\n platform: platform,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n metafile: this.options.isWatch,\r\n globalName,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cli \u7684\u9009\u9879\r\n * @param deps\r\n */\r\n getBuildCliOption({ platform }: { deps: string[]; platform: Platform }): BuildOptions {\r\n const plugins = ESBuildProgram.getPlugins(platform)\r\n return {\r\n entryPoints: [path.resolve(this.options.base, './src/bin.ts')],\r\n outfile: path.resolve(this.options.base, './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: [...ESBuildProgram.globalExternal],\r\n plugins,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n metafile: 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(nodeExternal() as any, nativeNodeModules() as any)\r\n }\r\n return plugins\r\n }\r\n\r\n async build(options: BuildOptions): Promise<void> {\r\n // if (this.options.isWatch) {\r\n // options.plugins = [...(options.plugins ?? []), metafile(options.outfile + '.meta.json')]\r\n // }\r\n await build(options)\r\n }\r\n\r\n async getTasks(): Promise<Record<TaskTypeEnum, Task>> {\r\n const deps = await ESBuildProgram.getDeps(this.options.base)\r\n const platform = await ESBuildProgram.getPlatform(this.options.base)\r\n return {\r\n esm: {\r\n title: '\u6784\u5EFA esm',\r\n task: () =>\r\n this.build(\r\n this.getBuildESMOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n cjs: {\r\n title: '\u6784\u5EFA cjs',\r\n task: () =>\r\n this.build(\r\n this.getBuildCjsOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n iife: {\r\n title: '\u6784\u5EFA iife',\r\n task: async () => {\r\n return await this.build(\r\n this.getBuildIifeOption({\r\n platform: platform,\r\n globalName: getPkgGlobalName(\r\n ((await readJson(path.resolve(this.options.base, './package.json'))) as PackageJson).name!,\r\n ),\r\n }),\r\n )\r\n },\r\n },\r\n cli: {\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 dts: {\r\n title: '\u751F\u6210\u7C7B\u578B\u5B9A\u4E49',\r\n task: () => this.genDTS(),\r\n },\r\n userjs: {\r\n title: '\u6253\u5305 userjs',\r\n task: () => this.build(this.getBuildUserJSOption()),\r\n },\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 execTasks(tasks: Task[]): Promise<void> {\r\n const run = async () => {\r\n const start = Date.now()\r\n const spinnies = new Spinnies()\r\n await Promise.all(tasks.map(async (task) => ESBuildProgram.execTask(spinnies, task)))\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 remove(path.resolve(this.options.base, 'dist'))\r\n await run()\r\n return\r\n }\r\n\r\n const { pattern, options } = ESBuildProgram.getWatchOptions(this.options.base)\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", "/**\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", "/**\r\n * \u8F6C\u6362 npm \u5305\u540D\u4E3A\u4E00\u4E2A\u5408\u9002\u7684\u5168\u5C40\u53D8\u91CF\u540D\r\n * @param name\r\n */\r\nexport function getPkgGlobalName(name: string): string {\r\n const temp = name.startsWith('@') ? name.slice(name.indexOf('/') + 1) : name\r\n return temp\r\n .split('-')\r\n .map((s) => s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase())\r\n .join('')\r\n}\r\n", "import { Plugin } from 'esbuild'\r\nimport { writeJson } from 'fs-extra'\r\n\r\n/**\r\n * \u751F\u6210 metafile \u7684\u63D2\u4EF6\r\n * @param metafilePath\r\n */\r\n export function metafile(metafilePath: string): Plugin {\r\n return {\r\n name: 'metafile',\r\n setup(builder) {\r\n builder.onEnd(async (result) => {\r\n await writeJson(metafilePath, result.metafile)\r\n })\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({ filter: /\\.node$/, namespace: 'node-file' }, (args) => ({\r\n path: args.path,\r\n namespace: 'file',\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", "import { Plugin } from 'esbuild'\r\n\r\n/**\r\n * \u6392\u9664\u548C\u66FF\u6362 node \u5185\u7F6E\u6A21\u5757\r\n */\r\nexport function nodeExternal(): Plugin {\r\n return {\r\n name: 'nodeExternals',\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", "import { Plugin } from 'esbuild'\r\nimport { readFile } from 'fs-extra'\r\nimport * as path from 'path'\r\n\r\n/**\r\n * \u901A\u8FC7 ?raw \u5C06\u8D44\u6E90\u4F5C\u4E3A\u5B57\u7B26\u4E32\u6253\u5305\u8FDB\u6765\r\n * @returns\r\n */\r\nexport function raw(): Plugin {\r\n return {\r\n name: 'raw',\r\n setup(build) {\r\n build.onResolve({ filter: /\\?raw$/ }, (args) => {\r\n return {\r\n path: path.isAbsolute(args.path) ? args.path : path.join(args.resolveDir, args.path),\r\n namespace: 'raw-loader',\r\n }\r\n })\r\n build.onLoad({ filter: /\\?raw$/, namespace: 'raw-loader' }, async (args) => {\r\n return {\r\n contents: await readFile(args.path.replace(/\\?raw$/, '')),\r\n loader: 'text',\r\n }\r\n })\r\n },\r\n }\r\n}\r\n", "import { build, Plugin } from 'esbuild'\r\nimport path from 'path'\r\n\r\n/**\r\n * \u5C06\u6307\u5B9A\u7684 import \u91CD\u5199\u4E3A\u53E6\u4E00\u4E2A\r\n * @param entries\r\n * @returns\r\n */\r\nexport function resolve(entries: [from: string, to: string][]): Plugin {\r\n return {\r\n name: 'resolve',\r\n setup(build) {\r\n build.onResolve({ filter: /.*/ }, async (args) => {\r\n const findEntries = entries.find((item) => item[0] === args.path)\r\n if (!findEntries) {\r\n return\r\n }\r\n return await build.resolve(findEntries[1])\r\n })\r\n },\r\n }\r\n}\r\n", "import { Plugin } from 'esbuild'\r\nimport { readJson } from 'fs-extra'\r\nimport path from 'path'\r\n\r\nfunction generateBanner(meta: object) {\r\n return (\r\n [\r\n '// ==UserScript==',\r\n ...Object.entries(meta)\r\n .map(([key, value]) => {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => `// @${key} ${item}`)\r\n }\r\n return `// @${key} ${value}`\r\n })\r\n .flat(),\r\n '// ==/UserScript==',\r\n ].join('\\n') + '\\n'\r\n )\r\n}\r\n\r\nexport function userJS(): Plugin {\r\n return {\r\n name: 'userJS',\r\n async setup(build) {\r\n const json = (await readJson(path.resolve(build.initialOptions.absWorkingDir!, 'package.json'))) as {\r\n userjs: object\r\n }\r\n if (!json.userjs) {\r\n throw new Error('userjs is not supported')\r\n }\r\n if (!build.initialOptions.banner) {\r\n build.initialOptions.banner = {}\r\n }\r\n build.initialOptions.banner!['js'] = generateBanner(json.userjs)\r\n },\r\n }\r\n}\r\n", "import path from 'path'\r\nimport { copy, pathExists, readdir, readFile, readJSON, remove, writeFile, writeJSON } 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: 'select',\r\n message: '\u8BF7\u9009\u62E9\u6A21\u677F',\r\n choices: [TemplateTypeEnum.Lib, TemplateTypeEnum.Cli] 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(PathUtil.RootPath, `templates/${config.template}`)\r\n const destFile = path.resolve(config.dest)\r\n if ((await pathExists(destFile)) && (await readdir(destFile)).some((file) => pathExists(file))) {\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 filter: (source) => path.basename(source) !== 'node_modules',\r\n })\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'\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(pkgJsonFilePath, merge(await readJson(pkgJsonFilePath), json), {\r\n spaces: 2,\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 (await isNpmPackage()) && ((await isYarnRoot()) || !(await isYarnSubModule()))\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 (await isNpmPackage()) && ((await isYarnRoot()) || !(await isYarnSubModule()))\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(gitignorePath, await readFile(path.resolve(PathUtil.RootPath, '_gitignore'), 'utf-8'))\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 (await isNpmPackage()) && !(await isIncludeDep(['vue'])) && !(await isIncludeDep(['react']))\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 devDependencies: {\r\n jest: '^27.4.3',\r\n 'ts-jest': '^27.0.7',\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: Record<string, string[]> = {}\r\n if (json.prettier) {\r\n lintStaged['src/**/*.{ts,tsx,js,jsx,css,vue}'] = ['prettier --write', 'git add']\r\n }\r\n if (json.eslintConfig) {\r\n lintStaged['src/**/*.{ts,tsx,js,jsx}'] = ['eslint --fix --quiet', 'git add']\r\n }\r\n let config = {\r\n scripts: {\r\n postinstall: appendScript(json?.scripts?.postinstall, 'npx simple-git-hooks'),\r\n },\r\n 'simple-git-hooks': {\r\n 'pre-commit': 'yarn lint-staged',\r\n },\r\n 'lint-staged': lintStaged,\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 (await isNpmPackage()) && ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n },\r\n },\r\n ]\r\n\r\n async sync(): Promise<void> {\r\n const { sync } = (await readJson(path.resolve(this.base, 'package.json'))) as {\r\n sync?: SyncConfigType[]\r\n }\r\n if (!sync) {\r\n return\r\n }\r\n const syncConfigs = this.syncConfigs.filter((config) => sync.includes(config.type))\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 * as 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(cwd: string = process.cwd()): 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(cwd: string = process.cwd()): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(path.resolve(cwd, './package.json'))) 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(cwd: string = process.cwd()): 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(deps: string[], cwd: string = process.cwd()): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(path.resolve(cwd, './package.json'))) as PackageJson\r\n const set = new Set(Object.keys({ ...json.dependencies, ...json.devDependencies }))\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
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IterableElement } from 'type-fest';
|
|
2
|
+
/**
|
|
3
|
+
* 异步数组,支持静态方法和链式调用
|
|
4
|
+
*/
|
|
5
|
+
export declare class AsyncArray<T> implements PromiseLike<T[]> {
|
|
6
|
+
private readonly arr;
|
|
7
|
+
static reduce<T extends any[], R>(arr: T, fn: (res: R, item: IterableElement<T>, index: number) => Promise<R>, res: R): Promise<R>;
|
|
8
|
+
static map<T, R>(arr: T[], fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
9
|
+
static filter<T>(arr: T[], fn: (item: T, index: number) => Promise<boolean>): Promise<T[]>;
|
|
10
|
+
static flatMap<T, R>(arr: T[], fn: (item: T, index: number) => Promise<R[]>): Promise<R[]>;
|
|
11
|
+
static forEach<T extends any[]>(arr: T, fn: (item: IterableElement<T>, index: number) => Promise<void>): Promise<void>;
|
|
12
|
+
private tasks;
|
|
13
|
+
constructor(arr: T[]);
|
|
14
|
+
map<R>(fn: (item: T, index: number) => Promise<R>): AsyncArray<R>;
|
|
15
|
+
flatMap<R>(fn: (item: T, index: number) => Promise<R[]>): AsyncArray<R>;
|
|
16
|
+
filter(fn: (item: T, index: number) => Promise<boolean>): this;
|
|
17
|
+
forEach<R>(fn: (item: T, index: number) => Promise<R>): Promise<void>;
|
|
18
|
+
then<TResult1 = T[], TResult2 = never>(resolve?: ((value: T[]) => PromiseLike<TResult1> | TResult1) | undefined | null, reject?: ((reason: any) => PromiseLike<TResult2> | TResult2) | undefined | null): PromiseLike<TResult1 | TResult2>;
|
|
19
|
+
private value;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=AsyncArray.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncArray.d.ts","sourceRoot":"","sources":["../../src/utils/AsyncArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAsB3C;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,EAAE,CAAC;IAmDxC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAlDhC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAC9B,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnE,GAAG,EAAE,CAAC,GACL,OAAO,CAAC,CAAC,CAAC;IAQb,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EACb,GAAG,EAAE,CAAC,EAAE,EACR,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC;WAIF,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,CAAC,EAAE,EACR,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC/C,OAAO,CAAC,CAAC,EAAE,CAAC;WAUF,OAAO,CAAC,CAAC,EAAE,CAAC,EACvB,GAAG,EAAE,CAAC,EAAE,EACR,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAC3C,OAAO,CAAC,CAAC,EAAE,CAAC;WAMF,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,EAClC,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7D,OAAO,CAAC,IAAI,CAAC;IAIhB,OAAO,CAAC,KAAK,CAAe;gBAEC,GAAG,EAAE,CAAC,EAAE;IAErC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAKjE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAKvE,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAKxD,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3E,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,EACnC,OAAO,CAAC,EACJ,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAClD,SAAS,GACT,IAAI,EACR,MAAM,CAAC,EACH,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GACnD,SAAS,GACT,IAAI,GACP,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAcrB,KAAK;CAsBpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appendScript.d.ts","sourceRoot":"","sources":["../../src/utils/appendScript.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAChB,MAAM,CAQR"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function arrayToMap<T, K>(arr: T[], kFn: (item: T, index: number, arr: T[]) => K): Map<K, T>;
|
|
2
|
+
export declare function arrayToMap<T, K, V>(arr: T[], kFn: (item: T, index: number, arr: T[]) => K, vFn: (item: T, index: number, arr: T[]) => V): Map<K, V>;
|
|
3
|
+
//# sourceMappingURL=arrayToMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrayToMap.d.ts","sourceRoot":"","sources":["../../src/utils/arrayToMap.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,GAAG,EAAE,CAAC,EAAE,EACR,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,GAC3C,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACZ,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAChC,GAAG,EAAE,CAAC,EAAE,EACR,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAC5C,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,GAC3C,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 向上查找目录
|
|
3
|
+
* @param cwd
|
|
4
|
+
* @param predicate
|
|
5
|
+
*/
|
|
6
|
+
export declare function findParent(cwd: string, predicate: (dir: string) => boolean): string | null;
|
|
7
|
+
export declare function findParent(cwd: string, predicate: (dir: string) => Promise<boolean>): Promise<string | null>;
|
|
8
|
+
//# sourceMappingURL=findParent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findParent.d.ts","sourceRoot":"","sources":["../../src/utils/findParent.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAClC,MAAM,GAAG,IAAI,CAAA;AAChB,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeCacheDir.d.ts","sourceRoot":"","sources":["../../src/utils/nodeCacheDir.ts"],"names":[],"mappings":"AA4CA,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAS/C"}
|