@longzai-intelligence-builder/cli 0.0.3 → 0.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,oCAAoC,CAAC;AA+DrF;;;;;GAKG;AACH,iBAAe,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DzF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,oCAAoC,CAAC;AAgErF;;;;;GAKG;AACH,iBAAe,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFzF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/build.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { rm } from 'node:fs/promises';
2
- import { resolve } from 'node:path';
2
+ import { dirname, resolve } from 'node:path';
3
3
  import process from 'node:process';
4
+ import { resolveTsconfig, readTsBuildInfoFile } from '@longzai-intelligence-builder/core';
4
5
  import { build } from 'rolldown';
5
6
  import { dts } from '@longzai-intelligence-tsdown/rolldown-plugin-dts';
6
7
  /**
@@ -62,11 +63,27 @@ async function runBuild(config, cwd = process.cwd()) {
62
63
  const formats = normalizeFormat(config.format);
63
64
  const outdir = config.outdir ?? 'dist';
64
65
  /**
65
- * 构建前清理输出目录
66
+ * 构建前清理产物
67
+ *
68
+ * 清理本次构建的全部产物:
69
+ * - outdir:rolldown 打包产物
70
+ * - tsBuildInfoFile:dts 经 tsgo 产生的增量缓存
71
+ *
72
+ * tsBuildInfoFile 路径相对 tsconfig 文件目录解析(非 cwd),
73
+ * 避免残留缓存导致 tsgo 跳过输出、dts 残缺
66
74
  */
67
75
  if (config.clean !== false) {
68
76
  const outPath = resolve(cwd, outdir);
69
77
  await rm(outPath, { recursive: true, force: true }).catch(() => { });
78
+ /**
79
+ * 读 tsconfig 的 tsBuildInfoFile,相对 tsconfig 文件目录解析后清理
80
+ */
81
+ const tsconfigPath = resolveTsconfig(cwd);
82
+ const tsBuildInfoFile = await readTsBuildInfoFile(tsconfigPath);
83
+ if (tsBuildInfoFile) {
84
+ const tsBuildInfoPath = resolve(dirname(tsconfigPath), tsBuildInfoFile);
85
+ await rm(tsBuildInfoPath, { recursive: true, force: true }).catch(() => { });
86
+ }
70
87
  }
71
88
  /**
72
89
  * 解析入口配置
package/dist/build.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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","sourcesContent":["import { rm } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport process from 'node:process';\n\nimport type { BuilderConfig, BuildFormat } from '@longzai-intelligence-builder/core';\nimport { build, type InputOptions, type OutputOptions, type Plugin } from 'rolldown';\nimport { dts } from '@longzai-intelligence-tsdown/rolldown-plugin-dts';\n\n/**\n * 规范化 format 为数组\n *\n * @param format - 格式配置\n * @returns 格式数组\n */\nfunction normalizeFormat(format: BuilderConfig['format']): BuildFormat[] {\n if (!format) return ['es'];\n return Array.isArray(format) ? format : [format];\n}\n\n/**\n * 根据 format 和 outExtensions 计算输出文件扩展名\n *\n * @param format - 输出格式\n * @param outExtensions - 自定义扩展名函数\n * @returns 文件扩展名对象\n */\nfunction resolveExtensions(\n format: BuildFormat,\n outExtensions?: BuilderConfig['outExtensions'],\n): { js: string; dts: string } {\n const custom = outExtensions?.();\n if (custom?.js) {\n return { js: custom.js, dts: custom.dts ?? '.d.ts' };\n }\n\n if (format === 'cjs') {\n return { js: '.cjs', dts: '.d.cts' };\n }\n\n return { js: '.js', dts: '.d.ts' };\n}\n\n/**\n * 构建 dts 插件配置\n *\n * @param config - 构建配置\n * @returns dts 插件选项或 null\n */\nfunction resolveDtsOptions(config: BuilderConfig): { tsconfig?: string; sourcemap?: boolean } | null {\n if (config.dts === false || config.dts === undefined) {\n return null;\n }\n\n if (config.dts === true) {\n return {};\n }\n\n if (config.dts.enabled === false) {\n return null;\n }\n\n return {\n tsconfig: config.dts.tsconfig,\n sourcemap: config.dts.sourcemap,\n };\n}\n\n/**\n * 将 BuilderConfig 转换为 rolldown 的 RolldownOptions 并执行构建\n *\n * @param config - builder 构建配置\n * @param cwd - 当前工作目录\n */\nasync function runBuild(config: BuilderConfig, cwd: string = process.cwd()): Promise<void> {\n const formats = normalizeFormat(config.format);\n const outdir = config.outdir ?? 'dist';\n\n /**\n * 构建前清理输出目录\n */\n if (config.clean !== false) {\n const outPath = resolve(cwd, outdir);\n await rm(outPath, { recursive: true, force: true }).catch(() => {});\n }\n\n /**\n * 解析入口配置\n */\n const entry = config.entry ?? { index: 'src/index.ts' };\n const resolvedEntry = typeof entry === 'string' ? { index: entry } : entry;\n\n /**\n * 构建 dts 插件(仅在需要时)\n */\n const dtsOptions = resolveDtsOptions(config);\n const dtsPlugins: Plugin[] = dtsOptions\n ? dts({\n tsconfig: dtsOptions.tsconfig ?? config.tsconfig,\n sourcemap: dtsOptions.sourcemap,\n })\n : [];\n\n /**\n * 构建 rolldown 输入选项\n */\n const inputOptions: InputOptions = {\n input: resolvedEntry,\n external: config.external,\n plugins: [...dtsPlugins, ...(config.plugins ?? [])],\n ...config.inputOptions,\n };\n\n if (config.deps?.skipNodeModulesBundle !== false) {\n inputOptions.external = config.external;\n }\n\n /**\n * 为每种格式构建输出选项并执行\n */\n for (const format of formats) {\n const ext = resolveExtensions(format, config.outExtensions);\n\n const outputOptions: OutputOptions = {\n format: format === 'es' ? 'esm' : format,\n dir: outdir,\n entryFileNames: `[name]${ext.js}`,\n sourcemap: config.sourcemap,\n minify: config.minify,\n ...config.outputOptions,\n };\n\n await build({\n ...inputOptions,\n output: outputOptions,\n });\n }\n}\n\nexport { runBuild };\n"]}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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","sourcesContent":["import { rm } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport process from 'node:process';\n\nimport type { BuilderConfig, BuildFormat } from '@longzai-intelligence-builder/core';\nimport { resolveTsconfig, readTsBuildInfoFile } from '@longzai-intelligence-builder/core';\nimport { build, type InputOptions, type OutputOptions, type Plugin } from 'rolldown';\nimport { dts } from '@longzai-intelligence-tsdown/rolldown-plugin-dts';\n\n/**\n * 规范化 format 为数组\n *\n * @param format - 格式配置\n * @returns 格式数组\n */\nfunction normalizeFormat(format: BuilderConfig['format']): BuildFormat[] {\n if (!format) return ['es'];\n return Array.isArray(format) ? format : [format];\n}\n\n/**\n * 根据 format 和 outExtensions 计算输出文件扩展名\n *\n * @param format - 输出格式\n * @param outExtensions - 自定义扩展名函数\n * @returns 文件扩展名对象\n */\nfunction resolveExtensions(\n format: BuildFormat,\n outExtensions?: BuilderConfig['outExtensions'],\n): { js: string; dts: string } {\n const custom = outExtensions?.();\n if (custom?.js) {\n return { js: custom.js, dts: custom.dts ?? '.d.ts' };\n }\n\n if (format === 'cjs') {\n return { js: '.cjs', dts: '.d.cts' };\n }\n\n return { js: '.js', dts: '.d.ts' };\n}\n\n/**\n * 构建 dts 插件配置\n *\n * @param config - 构建配置\n * @returns dts 插件选项或 null\n */\nfunction resolveDtsOptions(config: BuilderConfig): { tsconfig?: string; sourcemap?: boolean } | null {\n if (config.dts === false || config.dts === undefined) {\n return null;\n }\n\n if (config.dts === true) {\n return {};\n }\n\n if (config.dts.enabled === false) {\n return null;\n }\n\n return {\n tsconfig: config.dts.tsconfig,\n sourcemap: config.dts.sourcemap,\n };\n}\n\n/**\n * 将 BuilderConfig 转换为 rolldown 的 RolldownOptions 并执行构建\n *\n * @param config - builder 构建配置\n * @param cwd - 当前工作目录\n */\nasync function runBuild(config: BuilderConfig, cwd: string = process.cwd()): Promise<void> {\n const formats = normalizeFormat(config.format);\n const outdir = config.outdir ?? 'dist';\n\n /**\n * 构建前清理产物\n *\n * 清理本次构建的全部产物:\n * - outdir:rolldown 打包产物\n * - tsBuildInfoFile:dts 经 tsgo 产生的增量缓存\n *\n * tsBuildInfoFile 路径相对 tsconfig 文件目录解析(非 cwd),\n * 避免残留缓存导致 tsgo 跳过输出、dts 残缺\n */\n if (config.clean !== false) {\n const outPath = resolve(cwd, outdir);\n await rm(outPath, { recursive: true, force: true }).catch(() => {});\n\n /**\n * 读 tsconfig 的 tsBuildInfoFile,相对 tsconfig 文件目录解析后清理\n */\n const tsconfigPath = resolveTsconfig(cwd);\n const tsBuildInfoFile = await readTsBuildInfoFile(tsconfigPath);\n if (tsBuildInfoFile) {\n const tsBuildInfoPath = resolve(dirname(tsconfigPath), tsBuildInfoFile);\n await rm(tsBuildInfoPath, { recursive: true, force: true }).catch(() => {});\n }\n }\n\n /**\n * 解析入口配置\n */\n const entry = config.entry ?? { index: 'src/index.ts' };\n const resolvedEntry = typeof entry === 'string' ? { index: entry } : entry;\n\n /**\n * 构建 dts 插件(仅在需要时)\n */\n const dtsOptions = resolveDtsOptions(config);\n const dtsPlugins: Plugin[] = dtsOptions\n ? dts({\n tsconfig: dtsOptions.tsconfig ?? config.tsconfig,\n sourcemap: dtsOptions.sourcemap,\n })\n : [];\n\n /**\n * 构建 rolldown 输入选项\n */\n const inputOptions: InputOptions = {\n input: resolvedEntry,\n external: config.external,\n plugins: [...dtsPlugins, ...(config.plugins ?? [])],\n ...config.inputOptions,\n };\n\n if (config.deps?.skipNodeModulesBundle !== false) {\n inputOptions.external = config.external;\n }\n\n /**\n * 为每种格式构建输出选项并执行\n */\n for (const format of formats) {\n const ext = resolveExtensions(format, config.outExtensions);\n\n const outputOptions: OutputOptions = {\n format: format === 'es' ? 'esm' : format,\n dir: outdir,\n entryFileNames: `[name]${ext.js}`,\n sourcemap: config.sourcemap,\n minify: config.minify,\n ...config.outputOptions,\n };\n\n await build({\n ...inputOptions,\n output: outputOptions,\n });\n }\n}\n\nexport { runBuild };\n"]}
package/dist/config.d.ts CHANGED
@@ -1,12 +1,10 @@
1
1
  import type { BuilderConfig } from '@longzai-intelligence-builder/core';
2
2
  /**
3
- * 查找并加载 builder 配置文件
3
+ * 查找并加载 builder 配置
4
4
  *
5
- * 按两种模式查找,优先级从高到低:
6
- * 1. 单独配置:cwd 下的 lzi-builder.config.{ts,mts,js,mjs}
7
- * 2. 统一配置:从 cwd 向上查找 lzi.config.ts,取其中的 builder 字段
8
- *
9
- * 使用 bun 原生 import 加载(bun 生态原生支持 .ts),无需 unrun。
5
+ * 使用 shared-config 的 loadUnifiedConfig 统一加载:
6
+ * 1. 优先查找工具专属配置 lzi-builder.config.{ts,mts,js,mjs}
7
+ * 2. 回退到统一配置 lzi.config.ts builder 字段
10
8
  *
11
9
  * @param cwd - 当前工作目录
12
10
  * @returns 解析后的构建配置,未找到配置文件时返回默认空配置
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AA2CxE;;;;;;;;;;;GAWG;AACH,iBAAe,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CA0B7E;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAaxE;;;;;;;;;GASG;AACH,iBAAe,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ7E;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
package/dist/config.js CHANGED
@@ -1,8 +1,7 @@
1
- import { existsSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
1
  import process from 'node:process';
2
+ import { loadUnifiedConfig } from '@longzai-intelligence-shared-config/core';
4
3
  /**
5
- * builder 单独配置文件可能的名字
4
+ * builder 单独配置文件候选文件名
6
5
  */
7
6
  const STANDALONE_CONFIG_FILES = [
8
7
  'lzi-builder.config.ts',
@@ -11,69 +10,22 @@ const STANDALONE_CONFIG_FILES = [
11
10
  'lzi-builder.config.mjs',
12
11
  ];
13
12
  /**
14
- * 统一配置文件名
15
- */
16
- const UNIFIED_CONFIG_FILE = 'lzi.config.ts';
17
- /**
18
- * 统一配置中 builder 字段名
19
- */
20
- const BUILDER_CONFIG_KEY = 'builder';
21
- /**
22
- * 从指定目录开始向上查找统一配置文件 lzi.config.ts
23
- *
24
- * @param cwd - 查找起点目录
25
- * @returns 配置文件绝对路径,未找到返回 null
26
- */
27
- function resolveUnifiedConfigPath(cwd) {
28
- let currentDir = resolve(cwd);
29
- while (true) {
30
- const candidate = resolve(currentDir, UNIFIED_CONFIG_FILE);
31
- if (existsSync(candidate)) {
32
- return candidate;
33
- }
34
- const parent = resolve(currentDir, '..');
35
- if (parent === currentDir) {
36
- return null;
37
- }
38
- currentDir = parent;
39
- }
40
- }
41
- /**
42
- * 查找并加载 builder 配置文件
43
- *
44
- * 按两种模式查找,优先级从高到低:
45
- * 1. 单独配置:cwd 下的 lzi-builder.config.{ts,mts,js,mjs}
46
- * 2. 统一配置:从 cwd 向上查找 lzi.config.ts,取其中的 builder 字段
13
+ * 查找并加载 builder 配置
47
14
  *
48
- * 使用 bun 原生 import 加载(bun 生态原生支持 .ts),无需 unrun。
15
+ * 使用 shared-config loadUnifiedConfig 统一加载:
16
+ * 1. 优先查找工具专属配置 lzi-builder.config.{ts,mts,js,mjs}
17
+ * 2. 回退到统一配置 lzi.config.ts 的 builder 字段
49
18
  *
50
19
  * @param cwd - 当前工作目录
51
20
  * @returns 解析后的构建配置,未找到配置文件时返回默认空配置
52
21
  */
53
22
  async function loadConfig(cwd = process.cwd()) {
54
- /**
55
- * 模式一:查找单独配置文件
56
- */
57
- for (const file of STANDALONE_CONFIG_FILES) {
58
- const filePath = resolve(cwd, file);
59
- if (existsSync(filePath)) {
60
- const module = await import(filePath);
61
- return (module.default ?? module);
62
- }
63
- }
64
- /**
65
- * 模式二:查找统一配置 lzi.config.ts 的 builder 字段
66
- */
67
- const unifiedPath = resolveUnifiedConfigPath(cwd);
68
- if (unifiedPath) {
69
- const module = await import(unifiedPath);
70
- const unifiedConfig = module.default ?? module;
71
- const builderConfig = unifiedConfig?.[BUILDER_CONFIG_KEY];
72
- if (builderConfig) {
73
- return builderConfig;
74
- }
75
- }
76
- return {};
23
+ const result = await loadUnifiedConfig({
24
+ cwd,
25
+ standaloneFile: [...STANDALONE_CONFIG_FILES],
26
+ unifiedField: 'builder',
27
+ });
28
+ return result.success ? result.config : {};
77
29
  }
78
30
  export { loadConfig };
79
31
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,cAAc,CAAC;AAInC;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC9B,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;CAChB,CAAC;AAEX;;GAEG;AACH,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,GAAW;IAC3C,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,UAAU,CAAC,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE;IACnD;;OAEG;IACH,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAkB,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,WAAW,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QAC/C,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC,kBAAkB,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAA8B,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport process from 'node:process';\n\nimport type { BuilderConfig } from '@longzai-intelligence-builder/core';\n\n/**\n * builder 单独配置文件可能的名字\n */\nconst STANDALONE_CONFIG_FILES = [\n 'lzi-builder.config.ts',\n 'lzi-builder.config.mts',\n 'lzi-builder.config.js',\n 'lzi-builder.config.mjs',\n] as const;\n\n/**\n * 统一配置文件名\n */\nconst UNIFIED_CONFIG_FILE = 'lzi.config.ts';\n\n/**\n * 统一配置中 builder 字段名\n */\nconst BUILDER_CONFIG_KEY = 'builder';\n\n/**\n * 从指定目录开始向上查找统一配置文件 lzi.config.ts\n *\n * @param cwd - 查找起点目录\n * @returns 配置文件绝对路径,未找到返回 null\n */\nfunction resolveUnifiedConfigPath(cwd: string): string | null {\n let currentDir = resolve(cwd);\n while (true) {\n const candidate = resolve(currentDir, UNIFIED_CONFIG_FILE);\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = resolve(currentDir, '..');\n if (parent === currentDir) {\n return null;\n }\n currentDir = parent;\n }\n}\n\n/**\n * 查找并加载 builder 配置文件\n *\n * 按两种模式查找,优先级从高到低:\n * 1. 单独配置:cwd 下的 lzi-builder.config.{ts,mts,js,mjs}\n * 2. 统一配置:从 cwd 向上查找 lzi.config.ts,取其中的 builder 字段\n *\n * 使用 bun 原生 import 加载(bun 生态原生支持 .ts),无需 unrun。\n *\n * @param cwd - 当前工作目录\n * @returns 解析后的构建配置,未找到配置文件时返回默认空配置\n */\nasync function loadConfig(cwd: string = process.cwd()): Promise<BuilderConfig> {\n /**\n * 模式一:查找单独配置文件\n */\n for (const file of STANDALONE_CONFIG_FILES) {\n const filePath = resolve(cwd, file);\n if (existsSync(filePath)) {\n const module = await import(filePath);\n return (module.default ?? module) as BuilderConfig;\n }\n }\n\n /**\n * 模式二:查找统一配置 lzi.config.ts 的 builder 字段\n */\n const unifiedPath = resolveUnifiedConfigPath(cwd);\n if (unifiedPath) {\n const module = await import(unifiedPath);\n const unifiedConfig = module.default ?? module;\n const builderConfig = unifiedConfig?.[BUILDER_CONFIG_KEY];\n if (builderConfig) {\n return builderConfig as BuilderConfig;\n }\n }\n\n return {};\n}\n\nexport { loadConfig };\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE7E;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC9B,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;CAChB,CAAC;AAEX;;;;;;;;;GASG;AACH,KAAK,UAAU,UAAU,CAAC,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE;IACnD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAgB;QACpD,GAAG;QACH,cAAc,EAAE,CAAC,GAAG,uBAAuB,CAAC;QAC5C,YAAY,EAAE,SAAS;KACxB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import process from 'node:process';\n\nimport type { BuilderConfig } from '@longzai-intelligence-builder/core';\nimport { loadUnifiedConfig } from '@longzai-intelligence-shared-config/core';\n\n/**\n * builder 单独配置文件候选文件名\n */\nconst STANDALONE_CONFIG_FILES = [\n 'lzi-builder.config.ts',\n 'lzi-builder.config.mts',\n 'lzi-builder.config.js',\n 'lzi-builder.config.mjs',\n] as const;\n\n/**\n * 查找并加载 builder 配置\n *\n * 使用 shared-config loadUnifiedConfig 统一加载:\n * 1. 优先查找工具专属配置 lzi-builder.config.{ts,mts,js,mjs}\n * 2. 回退到统一配置 lzi.config.ts builder 字段\n *\n * @param cwd - 当前工作目录\n * @returns 解析后的构建配置,未找到配置文件时返回默认空配置\n */\nasync function loadConfig(cwd: string = process.cwd()): Promise<BuilderConfig> {\n const result = await loadUnifiedConfig<BuilderConfig>({\n cwd,\n standaloneFile: [...STANDALONE_CONFIG_FILES],\n unifiedField: 'builder',\n });\n\n return result.success ? result.config : {};\n}\n\nexport { loadConfig };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longzai-intelligence-builder/cli",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -22,10 +22,11 @@
22
22
  "test": "bun test",
23
23
  "test:watch": "bun test --watch",
24
24
  "test:coverage": "bun test --coverage",
25
- "clean": "rimraf dist out .cache"
25
+ "clean": "lzi-dev-cli clean"
26
26
  },
27
27
  "dependencies": {
28
- "@longzai-intelligence-builder/core": "0.0.3",
28
+ "@longzai-intelligence-builder/core": "0.0.5",
29
+ "@longzai-intelligence-shared-config/core": "^0.0.4",
29
30
  "@longzai-intelligence-tsdown/rolldown-plugin-dts": "^0.1.1",
30
31
  "rolldown": "^1.1.5"
31
32
  },