@longzai-intelligence-builder/core 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -28,6 +28,29 @@ declare function isPackageJsonLike(value: unknown): value is PackageJsonLike;
|
|
|
28
28
|
* @returns 命中则返回 true
|
|
29
29
|
*/
|
|
30
30
|
declare function matchAlwaysBundle(id: string, alwaysBundle: (string | RegExp)[]): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 将依赖名转成正则,使 rolldown 的正则匹配同时覆盖裸名与子路径导入
|
|
33
|
+
*
|
|
34
|
+
* rolldown 对字符串形态的 external 仅做精确匹配,不覆盖子路径(`pkg/sub`
|
|
35
|
+
* 不命中 `pkg`)。转成 `^pkg(/|$)` 正则后,裸名 `pkg` 与子路径 `pkg/sub`
|
|
36
|
+
* 均被外部化,与 tsdown 的 `resolveId` 钩子行为对齐
|
|
37
|
+
* (tsdown 用 `id === dep || id.startsWith(dep + '/')`,见 tsdown
|
|
38
|
+
* `src/features/deps.ts`)。
|
|
39
|
+
*
|
|
40
|
+
* 仅对 builder 派生/合并出的依赖名生效;消费方显式传入的 RegExp 原样保留,
|
|
41
|
+
* 由其自行决定匹配范围。
|
|
42
|
+
*
|
|
43
|
+
* @param id - 依赖名(裸包名)
|
|
44
|
+
* @returns 匹配裸名与子路径的正则
|
|
45
|
+
*/
|
|
46
|
+
declare function toExternalRegExp(id: string): RegExp;
|
|
47
|
+
/**
|
|
48
|
+
* 转义字符串中的正则元字符,使 toExternalRegExp 能安全拼接裸包名
|
|
49
|
+
*
|
|
50
|
+
* @param raw - 待转义的字符串
|
|
51
|
+
* @returns 元字符被反斜杠转义后的字符串
|
|
52
|
+
*/
|
|
53
|
+
declare function escapeRegExp(raw: string): string;
|
|
31
54
|
/**
|
|
32
55
|
* 将若干 ExternalOption 来源合并为一个数组
|
|
33
56
|
*
|
|
@@ -71,6 +94,6 @@ declare function readPackageDependencies(cwd?: string): Promise<string[]>;
|
|
|
71
94
|
* @returns 解析后的 external,可能为 undefined(表示不外部化,全量打包)
|
|
72
95
|
*/
|
|
73
96
|
declare function resolveExternal(configExternal: ExternalOption | undefined, deps: DepsOptions | undefined, cwd?: string): Promise<ExternalOption | undefined>;
|
|
74
|
-
export { resolveExternal, readPackageDependencies, matchAlwaysBundle, collectExternal, isPackageJsonLike, };
|
|
97
|
+
export { resolveExternal, readPackageDependencies, matchAlwaysBundle, collectExternal, toExternalRegExp, escapeRegExp, isPackageJsonLike, };
|
|
75
98
|
export type { PackageJsonLike };
|
|
76
99
|
//# sourceMappingURL=resolve-external.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-external.utils.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-external.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS/C;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C,CAAC;AAEF;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CA+BnE;AAED;;;;;;;;;GASG;AACH,iBAAS,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAWjF;AAED;;;;;;;GAOG;AACH,iBAAS,eAAe,CAAC,OAAO,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAWrF;AAED;;;;;;;;;GASG;AACH,iBAAe,uBAAuB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BrF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iBAAe,eAAe,CAC5B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"resolve-external.utils.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-external.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS/C;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C,CAAC;AAEF;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CA+BnE;AAED;;;;;;;;;GASG;AACH,iBAAS,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAWjF;AAED;;;;;;;;;;;;;;GAcG;AACH,iBAAS,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;;GAOG;AACH,iBAAS,eAAe,CAAC,OAAO,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAWrF;AAED;;;;;;;;;GASG;AACH,iBAAe,uBAAuB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BrF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iBAAe,eAAe,CAC5B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAoDrC;AAED,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,GAClB,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -63,6 +63,33 @@ function matchAlwaysBundle(id, alwaysBundle) {
|
|
|
63
63
|
return id === rule || id.startsWith(`${rule}/`);
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* 将依赖名转成正则,使 rolldown 的正则匹配同时覆盖裸名与子路径导入
|
|
68
|
+
*
|
|
69
|
+
* rolldown 对字符串形态的 external 仅做精确匹配,不覆盖子路径(`pkg/sub`
|
|
70
|
+
* 不命中 `pkg`)。转成 `^pkg(/|$)` 正则后,裸名 `pkg` 与子路径 `pkg/sub`
|
|
71
|
+
* 均被外部化,与 tsdown 的 `resolveId` 钩子行为对齐
|
|
72
|
+
* (tsdown 用 `id === dep || id.startsWith(dep + '/')`,见 tsdown
|
|
73
|
+
* `src/features/deps.ts`)。
|
|
74
|
+
*
|
|
75
|
+
* 仅对 builder 派生/合并出的依赖名生效;消费方显式传入的 RegExp 原样保留,
|
|
76
|
+
* 由其自行决定匹配范围。
|
|
77
|
+
*
|
|
78
|
+
* @param id - 依赖名(裸包名)
|
|
79
|
+
* @returns 匹配裸名与子路径的正则
|
|
80
|
+
*/
|
|
81
|
+
function toExternalRegExp(id) {
|
|
82
|
+
return new RegExp(`^${escapeRegExp(id)}(/|$)`);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 转义字符串中的正则元字符,使 toExternalRegExp 能安全拼接裸包名
|
|
86
|
+
*
|
|
87
|
+
* @param raw - 待转义的字符串
|
|
88
|
+
* @returns 元字符被反斜杠转义后的字符串
|
|
89
|
+
*/
|
|
90
|
+
function escapeRegExp(raw) {
|
|
91
|
+
return raw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
92
|
+
}
|
|
66
93
|
/**
|
|
67
94
|
* 将若干 ExternalOption 来源合并为一个数组
|
|
68
95
|
*
|
|
@@ -173,7 +200,17 @@ async function resolveExternal(configExternal, deps, cwd = process.cwd()) {
|
|
|
173
200
|
}
|
|
174
201
|
return !matchAlwaysBundle(rule, alwaysBundle);
|
|
175
202
|
});
|
|
176
|
-
|
|
203
|
+
if (filtered.length === 0) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 字符串依赖名正则化:裸包名转成 `^pkg(/|$)`,覆盖子路径导入。
|
|
208
|
+
*
|
|
209
|
+
* alwaysBundle 过滤在正则化之前完成,仍按原始字符串精确比较,
|
|
210
|
+
* 避免 `alwaysBundle: ['pkg']` 误伤 `pkg-other` 之类的前缀近似依赖。
|
|
211
|
+
* 消费方显式声明的 RegExp 原样保留。
|
|
212
|
+
*/
|
|
213
|
+
return filtered.map((rule) => (typeof rule === 'string' ? toExternalRegExp(rule) : rule));
|
|
177
214
|
}
|
|
178
|
-
export { resolveExternal, readPackageDependencies, matchAlwaysBundle, collectExternal, isPackageJsonLike, };
|
|
215
|
+
export { resolveExternal, readPackageDependencies, matchAlwaysBundle, collectExternal, toExternalRegExp, escapeRegExp, isPackageJsonLike, };
|
|
179
216
|
//# sourceMappingURL=resolve-external.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-external.utils.js","sourceRoot":"","sources":["../../src/utils/resolve-external.utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resolve-external.utils.js","sourceRoot":"","sources":["../../src/utils/resolve-external.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DepsOptions } from '@/core/types';\nimport type { ExternalOption } from 'rolldown';\n\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport process from 'node:process';\n\nimport { normalizeArrayConfig } from './merge-array-config.utils.js';\nimport { normalizeExternal } from './merge-external-config.utils.js';\n\n/**\n * package.json 的最小结构(仅读取 external 派生所需字段)\n */\ntype PackageJsonLike = {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n};\n\n/**\n * 判定未知值是否为 PackageJsonLike 结构\n *\n * 替代 as 类型断言,用类型守卫安全窄化 JSON.parse 的 unknown 返回值。\n * dependencies / peerDependencies 可选,存在时须为对象。\n *\n * @param value - 待判定的值\n * @returns 符合 PackageJsonLike 结构则返回 true\n */\nfunction isPackageJsonLike(value: unknown): value is PackageJsonLike {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n /**\n * dependencies 可选,存在时须为对象\n */\n if ('dependencies' in value) {\n /**\n * dependencies 字段值\n */\n const deps = value.dependencies;\n if (deps !== undefined && (typeof deps !== 'object' || deps === null)) {\n return false;\n }\n }\n\n /**\n * peerDependencies 可选,存在时须为对象\n */\n if ('peerDependencies' in value) {\n /**\n * peerDependencies 字段值\n */\n const peerDeps = value.peerDependencies;\n if (peerDeps !== undefined && (typeof peerDeps !== 'object' || peerDeps === null)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * 判断目标依赖名是否匹配 alwaysBundle 中的某一条规则\n *\n * alwaysBundle 元素可为字符串(精确匹配或前缀匹配)或 RegExp。\n * 字符串规则匹配依赖名本身或 `${依赖名}/...` 子路径,使 `'zod'` 能覆盖 `'zod/v4'`。\n *\n * @param id - 待判定的依赖名\n * @param alwaysBundle - 始终打包规则数组\n * @returns 命中则返回 true\n */\nfunction matchAlwaysBundle(id: string, alwaysBundle: (string | RegExp)[]): boolean {\n return alwaysBundle.some((rule) => {\n if (rule instanceof RegExp) {\n return rule.test(id);\n }\n\n /**\n * 字符串规则:精确匹配或以 `${rule}/` 开头(覆盖子路径导入)\n */\n return id === rule || id.startsWith(`${rule}/`);\n });\n}\n\n/**\n * 将依赖名转成正则,使 rolldown 的正则匹配同时覆盖裸名与子路径导入\n *\n * rolldown 对字符串形态的 external 仅做精确匹配,不覆盖子路径(`pkg/sub`\n * 不命中 `pkg`)。转成 `^pkg(/|$)` 正则后,裸名 `pkg` 与子路径 `pkg/sub`\n * 均被外部化,与 tsdown 的 `resolveId` 钩子行为对齐\n * (tsdown 用 `id === dep || id.startsWith(dep + '/')`,见 tsdown\n * `src/features/deps.ts`)。\n *\n * 仅对 builder 派生/合并出的依赖名生效;消费方显式传入的 RegExp 原样保留,\n * 由其自行决定匹配范围。\n *\n * @param id - 依赖名(裸包名)\n * @returns 匹配裸名与子路径的正则\n */\nfunction toExternalRegExp(id: string): RegExp {\n return new RegExp(`^${escapeRegExp(id)}(/|$)`);\n}\n\n/**\n * 转义字符串中的正则元字符,使 toExternalRegExp 能安全拼接裸包名\n *\n * @param raw - 待转义的字符串\n * @returns 元字符被反斜杠转义后的字符串\n */\nfunction escapeRegExp(raw: string): string {\n return raw.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * 将若干 ExternalOption 来源合并为一个数组\n *\n * 函数类型的 external 无法与其他来源合并,遇到时跳过(由调用方决定透传策略)。\n *\n * @param sources - 待合并的 external 来源\n * @returns 合并后的数组,可能为空\n */\nfunction collectExternal(sources: (ExternalOption | undefined)[]): (string | RegExp)[] {\n /**\n * 合并后的外部依赖数组\n */\n const collected: (string | RegExp)[] = [];\n\n for (const source of sources) {\n collected.push(...normalizeExternal(source));\n }\n\n return collected;\n}\n\n/**\n * 读取指定目录的 package.json 的 dependencies 与 peerDependencies 依赖名\n *\n * 仅读取依赖键名(用于派生 external),不解析版本号。\n * dependencies 与 peerDependencies 均纳入(与 tsdown 默认行为一致)。\n * 不读 devDependencies(开发依赖不进产物,无需外部化)。\n *\n * @param cwd - 当前包目录,默认为 process.cwd()\n * @returns 依赖名数组,读取失败或无依赖时返回空数组\n */\nasync function readPackageDependencies(cwd: string = process.cwd()): Promise<string[]> {\n try {\n /**\n * package.json 文件绝对路径\n */\n const pkgPath = resolve(cwd, 'package.json');\n\n /**\n * package.json 原始内容\n */\n const raw = await readFile(pkgPath, 'utf-8');\n\n /**\n * 解析后的 package.json(仅取依赖字段)\n */\n const parsed: unknown = JSON.parse(raw);\n\n if (!isPackageJsonLike(parsed)) {\n return [];\n }\n\n return Object.keys({\n ...parsed.dependencies,\n ...parsed.peerDependencies,\n });\n } catch {\n return [];\n }\n}\n\n/**\n * 解析最终作用于 rolldown 的 external 配置\n *\n * 库模式(deps.skipNodeModulesBundle !== false)默认外部化 package.json 的\n * dependencies + peerDependencies,消费方零配置即与 tsdown 默认行为对齐。\n *\n * 合并优先级(后者追加,不覆盖前者):\n * 1. package.json 派生的依赖名(默认基底)\n * 2. deps.neverBundle(始终外部化的补充规则)\n * 3. config.external(消费方显式声明)\n *\n * 随后用 deps.alwaysBundle 过滤:命中的依赖从 external 移除,强制打包进产物,\n * 用于库包需要把某些 dependencies 内联分发的场景。\n *\n * 应用模式(deps.skipNodeModulesBundle === false)跳过派生,直接返回\n * config.external(通常为 undefined,即全量打包)。\n *\n * @param configExternal - 消费方在 BuilderConfig.external 声明的外部依赖\n * @param deps - 依赖处理选项\n * @param cwd - 当前包目录,默认为 process.cwd()\n * @returns 解析后的 external,可能为 undefined(表示不外部化,全量打包)\n */\nasync function resolveExternal(\n configExternal: ExternalOption | undefined,\n deps: DepsOptions | undefined,\n cwd: string = process.cwd(),\n): Promise<ExternalOption | undefined> {\n /**\n * 应用模式:全量打包,仅透传消费方显式声明\n */\n if (deps?.skipNodeModulesBundle === false) {\n return configExternal;\n }\n\n /**\n * 消费方若以函数形式声明 external,无法与派生列表合并,直接透传\n */\n if (typeof configExternal === 'function') {\n return configExternal;\n }\n\n /**\n * 从 package.json 派生默认 external 基底\n */\n const packageDeps = await readPackageDependencies(cwd);\n\n /**\n * 合并三处来源:package.json 依赖名 + neverBundle + config.external\n */\n const merged = collectExternal([packageDeps, deps?.neverBundle, configExternal]);\n\n /**\n * alwaysBundle 命中的依赖强制打包,从 external 中剔除\n */\n const alwaysBundle = normalizeArrayConfig(deps?.alwaysBundle);\n\n /**\n * 过滤后的 external 列表(移除 alwaysBundle 命中项)\n */\n const filtered = merged.filter((rule) => {\n if (typeof rule !== 'string') {\n return true;\n }\n return !matchAlwaysBundle(rule, alwaysBundle);\n });\n\n if (filtered.length === 0) {\n return undefined;\n }\n\n /**\n * 字符串依赖名正则化:裸包名转成 `^pkg(/|$)`,覆盖子路径导入。\n *\n * alwaysBundle 过滤在正则化之前完成,仍按原始字符串精确比较,\n * 避免 `alwaysBundle: ['pkg']` 误伤 `pkg-other` 之类的前缀近似依赖。\n * 消费方显式声明的 RegExp 原样保留。\n */\n return filtered.map((rule) => (typeof rule === 'string' ? toExternalRegExp(rule) : rule));\n}\n\nexport {\n resolveExternal,\n readPackageDependencies,\n matchAlwaysBundle,\n collectExternal,\n toExternalRegExp,\n escapeRegExp,\n isPackageJsonLike,\n};\n\nexport type { PackageJsonLike };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@longzai-intelligence-builder/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"files": [
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"clean": "lzi-dev-cli clean"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@longzai-intelligence-builder/config": "0.0.
|
|
34
|
+
"@longzai-intelligence-builder/config": "0.0.9"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@typescript/native-preview": "^7.0.0-dev.20260707.2"
|