@farris/cli 2.3.8 → 2.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commands/add-app.js +5 -5
- package/lib/commands/add-lib.js +5 -5
- package/lib/commands/add-micro.js +11 -11
- package/lib/commands/add-project.js +196 -196
- package/lib/commands/add-project.js.map +1 -1
- package/lib/commands/build-components.js +60 -60
- package/lib/commands/build-components.js.map +1 -1
- package/lib/commands/build-css.js +38 -38
- package/lib/commands/build-css.js.map +1 -1
- package/lib/commands/build-lib.js +30 -30
- package/lib/commands/build.js +19 -19
- package/lib/commands/build.js.map +1 -1
- package/lib/commands/create-app-options.js +85 -85
- package/lib/commands/create-app-options.js.map +1 -1
- package/lib/commands/create-app.js +131 -131
- package/lib/commands/create-app.js.map +1 -1
- package/lib/commands/create-options.js +58 -58
- package/lib/commands/create-options.js.map +1 -1
- package/lib/commands/create.js +341 -341
- package/lib/commands/create.js.map +1 -1
- package/lib/commands/dev-serve.js +18 -18
- package/lib/commands/extract-i18n.js +74 -74
- package/lib/commands/extract-i18n.js.map +1 -1
- package/lib/commands/generate/api.js +124 -124
- package/lib/commands/generate/api.js.map +1 -1
- package/lib/commands/generate/common.js +101 -101
- package/lib/commands/generate/common.js.map +1 -1
- package/lib/commands/generate/component.js +156 -156
- package/lib/commands/generate/component.js.map +1 -1
- package/lib/commands/generate/view.js +168 -168
- package/lib/commands/generate/view.js.map +1 -1
- package/lib/commands/preview-serve.js +16 -16
- package/lib/commands/workspace/add-app.js +15 -15
- package/lib/commands/workspace/add-app.js.map +1 -1
- package/lib/commands/workspace/create.js +62 -62
- package/lib/commands/workspace/create.js.map +1 -1
- package/lib/commands/workspace/inspect.js +30 -30
- package/lib/commands/workspace/inspect.js.map +1 -1
- package/lib/commands/workspace/verify.js +38 -38
- package/lib/commands/workspace/verify.js.map +1 -1
- package/lib/common/agents-doc.js +33 -33
- package/lib/common/agents-doc.js.map +1 -1
- package/lib/common/apply-catalog-deps.js +15 -15
- package/lib/common/apply-catalog-deps.js.map +1 -1
- package/lib/common/component-file-name.js +3 -3
- package/lib/common/constant.js +85 -84
- package/lib/common/constant.js.map +1 -1
- package/lib/common/create-app-target.js +46 -46
- package/lib/common/create-app-target.js.map +1 -1
- package/lib/common/generate-app.js +106 -106
- package/lib/common/generate-app.js.map +1 -1
- package/lib/common/get-dependencies.js +9 -9
- package/lib/common/get-farris-config.js +25 -25
- package/lib/common/get-farris-config.js.map +1 -1
- package/lib/common/get-version.js +6 -6
- package/lib/common/get-vite-config.js +192 -192
- package/lib/common/get-vite-config.js.map +1 -1
- package/lib/common/lib-package-exports.js +24 -24
- package/lib/common/lib-package-exports.js.map +1 -1
- package/lib/common/list-lib-components.js +23 -23
- package/lib/common/list-lib-components.js.map +1 -1
- package/lib/common/output.js +164 -164
- package/lib/common/output.js.map +1 -1
- package/lib/common/project-layout.js +155 -155
- package/lib/common/project-layout.js.map +1 -1
- package/lib/common/safety.js +172 -172
- package/lib/common/safety.js.map +1 -1
- package/lib/common/template-manifest.js +18 -18
- package/lib/common/template-manifest.js.map +1 -1
- package/lib/common/template-renderer.js +114 -114
- package/lib/common/template-renderer.js.map +1 -1
- package/lib/common/transaction.js +83 -83
- package/lib/common/transaction.js.map +1 -1
- package/lib/common/verifier.js +187 -187
- package/lib/common/verifier.js.map +1 -1
- package/lib/common/workspace-contract.js +191 -191
- package/lib/common/workspace-contract.js.map +1 -1
- package/lib/config/vite-app.js +13 -13
- package/lib/config/vite-common.js +20 -20
- package/lib/config/vite-common.js.map +1 -1
- package/lib/config/vite-component.js +32 -32
- package/lib/config/vite-component.js.map +1 -1
- package/lib/config/vite-lib.js +26 -26
- package/lib/index.js +261 -261
- package/lib/plugins/create-app-package-json.js +23 -23
- package/lib/plugins/create-component-style.js +44 -44
- package/lib/plugins/create-package-json.js +48 -48
- package/lib/plugins/create-package-json.js.map +1 -1
- package/lib/plugins/dts.js +8 -8
- package/lib/plugins/html-system.js +9 -9
- package/lib/plugins/mock.js +240 -292
- package/lib/plugins/mock.js.map +1 -1
- package/lib/plugins/msw-adapter.js +141 -0
- package/lib/plugins/msw-adapter.js.map +1 -0
- package/lib/plugins/replace.js +17 -17
- package/lib/plugins/systemjs-bundle.js +15 -15
- package/lib/plugins/systemjs-bundle.js.map +1 -1
- package/package.json +6 -1
- package/templates/create/AGENTS.md +4 -3
- package/templates/micro/mock/README.md +39 -26
- package/templates/micro/mock/tsconfig.json +10 -0
- package/templates/micro/package.json +1 -0
- package/templates/mobile/mock/README.md +39 -26
- package/templates/mobile/mock/tsconfig.json +10 -0
- package/templates/mobile/package.json +1 -0
- package/templates/web/mock/README.md +39 -26
- package/templates/web/mock/tsconfig.json +10 -0
- package/templates/web/package.json +1 -0
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { inspectTarget } from '../../common/safety.js';
|
|
2
|
-
import { sendJson, logInfo, logWarn, setJsonMode } from '../../common/output.js';
|
|
3
|
-
export async function inspectWorkspace(target = '.', options = {}) {
|
|
4
|
-
const isJson = !!options.json;
|
|
5
|
-
setJsonMode(isJson);
|
|
6
|
-
const result = inspectTarget(target);
|
|
7
|
-
if (isJson) {
|
|
8
|
-
sendJson({
|
|
9
|
-
command: 'workspace.inspect',
|
|
10
|
-
ok: true,
|
|
11
|
-
status: result.status,
|
|
12
|
-
target: result.target,
|
|
13
|
-
canCreate: result.canCreate,
|
|
14
|
-
conflicts: result.conflicts,
|
|
15
|
-
preservedInputEntries: result.preservedInputEntries,
|
|
16
|
-
message: result.message
|
|
17
|
-
});
|
|
18
|
-
return result;
|
|
19
|
-
}
|
|
20
|
-
logInfo(`\n🔍 目标检查: ${result.target}`);
|
|
21
|
-
logInfo(`- 状态: ${result.status}`);
|
|
22
|
-
logInfo(`- 允许创建: ${result.canCreate ? '是' : '否'}`);
|
|
23
|
-
if (result.preservedInputEntries.length > 0) {
|
|
24
|
-
logInfo(`- 发现受保护输入 (${result.preservedInputEntries.length} 项): ${result.preservedInputEntries.join(', ')}`);
|
|
25
|
-
}
|
|
26
|
-
if (result.conflicts.length > 0) {
|
|
27
|
-
logWarn(`- 冲突文件/目录: ${result.conflicts.join(', ')}`);
|
|
28
|
-
}
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
1
|
+
import { inspectTarget } from '../../common/safety.js';
|
|
2
|
+
import { sendJson, logInfo, logWarn, setJsonMode } from '../../common/output.js';
|
|
3
|
+
export async function inspectWorkspace(target = '.', options = {}) {
|
|
4
|
+
const isJson = !!options.json;
|
|
5
|
+
setJsonMode(isJson);
|
|
6
|
+
const result = inspectTarget(target);
|
|
7
|
+
if (isJson) {
|
|
8
|
+
sendJson({
|
|
9
|
+
command: 'workspace.inspect',
|
|
10
|
+
ok: true,
|
|
11
|
+
status: result.status,
|
|
12
|
+
target: result.target,
|
|
13
|
+
canCreate: result.canCreate,
|
|
14
|
+
conflicts: result.conflicts,
|
|
15
|
+
preservedInputEntries: result.preservedInputEntries,
|
|
16
|
+
message: result.message
|
|
17
|
+
});
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
logInfo(`\n🔍 目标检查: ${result.target}`);
|
|
21
|
+
logInfo(`- 状态: ${result.status}`);
|
|
22
|
+
logInfo(`- 允许创建: ${result.canCreate ? '是' : '否'}`);
|
|
23
|
+
if (result.preservedInputEntries.length > 0) {
|
|
24
|
+
logInfo(`- 发现受保护输入 (${result.preservedInputEntries.length} 项): ${result.preservedInputEntries.join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
if (result.conflicts.length > 0) {
|
|
27
|
+
logWarn(`- 冲突文件/目录: ${result.conflicts.join(', ')}`);
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
31
|
//# sourceMappingURL=inspect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/workspace/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAY,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO3F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,GAAG,EAAE,UAA0B,EAAE;IACvF,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/workspace/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAY,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO3F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,GAAG,EAAE,UAA0B,EAAE;IACvF,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC;YACP,OAAO,EAAE,mBAAmB;YAC5B,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,WAAW,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,MAAM,CAAC,qBAAqB,CAAC,MAAM,QAAQ,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { verifyWorkspace } from '../../common/verifier.js';
|
|
2
|
-
import { sendJson, logInfo, logError, setJsonMode, fail } from '../../common/output.js';
|
|
3
|
-
import { ExitCode } from '../../common/constant.js';
|
|
4
|
-
export async function verifyWorkspaceCommand(target = '.', options = {}) {
|
|
5
|
-
const isJson = !!options.json;
|
|
6
|
-
setJsonMode(isJson);
|
|
7
|
-
const result = verifyWorkspace(target);
|
|
8
|
-
if (isJson) {
|
|
9
|
-
sendJson({
|
|
10
|
-
command: 'workspace.verify',
|
|
11
|
-
ok: result.ok,
|
|
12
|
-
target: result.target,
|
|
13
|
-
checks: result.checks,
|
|
14
|
-
errors: result.errors
|
|
15
|
-
}, result.ok ? ExitCode.SUCCESS : ExitCode.VERIFY_FAILED);
|
|
16
|
-
return result;
|
|
17
|
-
}
|
|
18
|
-
logInfo(`\n📋 Workspace 验证报告: ${result.target}`);
|
|
19
|
-
result.checks.forEach((chk) => {
|
|
20
|
-
if (chk.passed) {
|
|
21
|
-
logInfo(` ✔ [PASS] ${chk.name}`);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
logError(` ✖ [FAIL] ${chk.name}: ${chk.message}`);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
if (!result.ok) {
|
|
28
|
-
fail({
|
|
29
|
-
command: 'workspace.verify',
|
|
30
|
-
error: `Workspace 验证未通过,共发现 ${result.errors.length} 处问题`,
|
|
31
|
-
exitCode: ExitCode.VERIFY_FAILED
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
logInfo('\n🎉 验证全部通过!\n');
|
|
36
|
-
}
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
1
|
+
import { verifyWorkspace } from '../../common/verifier.js';
|
|
2
|
+
import { sendJson, logInfo, logError, setJsonMode, fail } from '../../common/output.js';
|
|
3
|
+
import { ExitCode } from '../../common/constant.js';
|
|
4
|
+
export async function verifyWorkspaceCommand(target = '.', options = {}) {
|
|
5
|
+
const isJson = !!options.json;
|
|
6
|
+
setJsonMode(isJson);
|
|
7
|
+
const result = verifyWorkspace(target);
|
|
8
|
+
if (isJson) {
|
|
9
|
+
sendJson({
|
|
10
|
+
command: 'workspace.verify',
|
|
11
|
+
ok: result.ok,
|
|
12
|
+
target: result.target,
|
|
13
|
+
checks: result.checks,
|
|
14
|
+
errors: result.errors
|
|
15
|
+
}, result.ok ? ExitCode.SUCCESS : ExitCode.VERIFY_FAILED);
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
logInfo(`\n📋 Workspace 验证报告: ${result.target}`);
|
|
19
|
+
result.checks.forEach((chk) => {
|
|
20
|
+
if (chk.passed) {
|
|
21
|
+
logInfo(` ✔ [PASS] ${chk.name}`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
logError(` ✖ [FAIL] ${chk.name}: ${chk.message}`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
if (!result.ok) {
|
|
28
|
+
fail({
|
|
29
|
+
command: 'workspace.verify',
|
|
30
|
+
error: `Workspace 验证未通过,共发现 ${result.errors.length} 处问题`,
|
|
31
|
+
exitCode: ExitCode.VERIFY_FAILED
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
logInfo('\n🎉 验证全部通过!\n');
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
39
|
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/workspace/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAW,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAMpD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB,GAAG,EAAE,UAAkC,EAAE;IACrG,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/workspace/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAW,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAMpD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB,GAAG,EAAE,UAAkC,EAAE;IACrG,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CACN;YACE,OAAO,EAAE,kBAAkB;YAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,EACD,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CACtD,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,CAAC;YACH,OAAO,EAAE,kBAAkB;YAC3B,KAAK,EAAE,uBAAuB,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM;YACxD,QAAQ,EAAE,QAAQ,CAAC,aAAa;SACjC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/lib/common/agents-doc.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { listProjects } from './project-layout.js';
|
|
4
|
-
import { renderProjectList } from './workspace-contract.js';
|
|
5
|
-
export const AGENTS_DOC_NAME = 'AGENTS.md';
|
|
6
|
-
export const AGENTS_PROJECTS_START = '<!-- projects:start -->';
|
|
7
|
-
export const AGENTS_PROJECTS_END = '<!-- projects:end -->';
|
|
8
|
-
/**
|
|
9
|
-
* 用真实工程列表刷新 AGENTS.md 的子工程清单区块。
|
|
10
|
-
* 文件或标记缺失时返回 false,由调用方决定是否告警(不作为失败原因,见设计文档 §8.1 第 3 条)。
|
|
11
|
-
*/
|
|
12
|
-
export function refreshAgentsProjectList(wsRoot) {
|
|
13
|
-
const agentsPath = join(wsRoot, AGENTS_DOC_NAME);
|
|
14
|
-
if (!existsSync(agentsPath)) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
const content = readFileSync(agentsPath, 'utf-8');
|
|
18
|
-
const start = content.indexOf(AGENTS_PROJECTS_START);
|
|
19
|
-
const end = content.indexOf(AGENTS_PROJECTS_END);
|
|
20
|
-
if (start === -1 || end === -1 || end < start) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
const block = [
|
|
24
|
-
AGENTS_PROJECTS_START,
|
|
25
|
-
renderProjectList(listProjects(wsRoot)),
|
|
26
|
-
AGENTS_PROJECTS_END
|
|
27
|
-
].join('\n');
|
|
28
|
-
const next = content.slice(0, start) + block + content.slice(end + AGENTS_PROJECTS_END.length);
|
|
29
|
-
if (next !== content) {
|
|
30
|
-
writeFileSync(agentsPath, next, 'utf-8');
|
|
31
|
-
}
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { listProjects } from './project-layout.js';
|
|
4
|
+
import { renderProjectList } from './workspace-contract.js';
|
|
5
|
+
export const AGENTS_DOC_NAME = 'AGENTS.md';
|
|
6
|
+
export const AGENTS_PROJECTS_START = '<!-- projects:start -->';
|
|
7
|
+
export const AGENTS_PROJECTS_END = '<!-- projects:end -->';
|
|
8
|
+
/**
|
|
9
|
+
* 用真实工程列表刷新 AGENTS.md 的子工程清单区块。
|
|
10
|
+
* 文件或标记缺失时返回 false,由调用方决定是否告警(不作为失败原因,见设计文档 §8.1 第 3 条)。
|
|
11
|
+
*/
|
|
12
|
+
export function refreshAgentsProjectList(wsRoot) {
|
|
13
|
+
const agentsPath = join(wsRoot, AGENTS_DOC_NAME);
|
|
14
|
+
if (!existsSync(agentsPath)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const content = readFileSync(agentsPath, 'utf-8');
|
|
18
|
+
const start = content.indexOf(AGENTS_PROJECTS_START);
|
|
19
|
+
const end = content.indexOf(AGENTS_PROJECTS_END);
|
|
20
|
+
if (start === -1 || end === -1 || end < start) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const block = [
|
|
24
|
+
AGENTS_PROJECTS_START,
|
|
25
|
+
renderProjectList(listProjects(wsRoot)),
|
|
26
|
+
AGENTS_PROJECTS_END
|
|
27
|
+
].join('\n');
|
|
28
|
+
const next = content.slice(0, start) + block + content.slice(end + AGENTS_PROJECTS_END.length);
|
|
29
|
+
if (next !== content) {
|
|
30
|
+
writeFileSync(agentsPath, next, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
34
|
//# sourceMappingURL=agents-doc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/common/agents-doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/common/agents-doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,qBAAqB;QACrB,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,mBAAmB;KACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/F,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { DEFAULT_CATALOG_VERSIONS } from './constant.js';
|
|
2
|
-
export function applyCatalogDeps(pkg) {
|
|
3
|
-
const keys = Object.keys(DEFAULT_CATALOG_VERSIONS).filter((key) => key !== 'pnpm');
|
|
4
|
-
for (const section of ['dependencies', 'devDependencies']) {
|
|
5
|
-
const block = pkg[section];
|
|
6
|
-
if (!block || typeof block !== 'object') {
|
|
7
|
-
continue;
|
|
8
|
-
}
|
|
9
|
-
for (const key of keys) {
|
|
10
|
-
if (block[key] !== undefined) {
|
|
11
|
-
block[key] = 'catalog:';
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
import { DEFAULT_CATALOG_VERSIONS } from './constant.js';
|
|
2
|
+
export function applyCatalogDeps(pkg) {
|
|
3
|
+
const keys = Object.keys(DEFAULT_CATALOG_VERSIONS).filter((key) => key !== 'pnpm');
|
|
4
|
+
for (const section of ['dependencies', 'devDependencies']) {
|
|
5
|
+
const block = pkg[section];
|
|
6
|
+
if (!block || typeof block !== 'object') {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
for (const key of keys) {
|
|
10
|
+
if (block[key] !== undefined) {
|
|
11
|
+
block[key] = 'catalog:';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
16
|
//# sourceMappingURL=apply-catalog-deps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-catalog-deps.js","sourceRoot":"","sources":["../../src/common/apply-catalog-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,GAAwB;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACnF,KAAK,MAAM,OAAO,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"apply-catalog-deps.js","sourceRoot":"","sources":["../../src/common/apply-catalog-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,GAAwB;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACnF,KAAK,MAAM,OAAO,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAU,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function componentFileName(_format, entryName) {
|
|
2
|
-
return `${entryName}/index.esm.js`;
|
|
3
|
-
}
|
|
1
|
+
export function componentFileName(_format, entryName) {
|
|
2
|
+
return `${entryName}/index.esm.js`;
|
|
3
|
+
}
|
|
4
4
|
//# sourceMappingURL=component-file-name.js.map
|
package/lib/common/constant.js
CHANGED
|
@@ -1,85 +1,86 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
-
import { join, dirname } from 'node:path';
|
|
4
|
-
import { getVersion } from './get-version.js';
|
|
5
|
-
function findRootDir(dir) {
|
|
6
|
-
if (existsSync(join(dir, 'farris.config.js')) || existsSync(join(dir, 'farris.config.mjs'))) {
|
|
7
|
-
return dir;
|
|
8
|
-
}
|
|
9
|
-
const parentDir = dirname(dir);
|
|
10
|
-
if (dir === parentDir) {
|
|
11
|
-
return dir;
|
|
12
|
-
}
|
|
13
|
-
return findRootDir(parentDir);
|
|
14
|
-
}
|
|
15
|
-
export const getDirname = (url) => fileURLToPath(new URL('.', url));
|
|
16
|
-
// Root paths
|
|
17
|
-
export const CWD = process.cwd();
|
|
18
|
-
export const ROOT = findRootDir(CWD);
|
|
19
|
-
export const FAARIS_CONFIG_FILE = join(CWD, 'farris.config.mjs');
|
|
20
|
-
export const getPackageName = () => {
|
|
21
|
-
const { PackageName = '@components' } = process.env;
|
|
22
|
-
return PackageName;
|
|
23
|
-
};
|
|
24
|
-
// Schema & Version Baseline
|
|
25
|
-
export const SCHEMA_VERSION = 1;
|
|
26
|
-
export const CLI_VERSION = getVersion();
|
|
27
|
-
// Catalog Dependency Versions Baseline
|
|
28
|
-
export const DEFAULT_CATALOG_VERSIONS = {
|
|
29
|
-
'@farris/ui-vue': 'beta',
|
|
30
|
-
'@farris/cli': CLI_VERSION,
|
|
31
|
-
'@vitejs/plugin-vue': '5.2.4',
|
|
32
|
-
'@vitejs/plugin-vue-jsx': '3.0.0',
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'vite
|
|
36
|
-
'vite-plugin-
|
|
37
|
-
'
|
|
38
|
-
'vue
|
|
39
|
-
'vue-
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
.
|
|
54
|
-
.
|
|
55
|
-
.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
ExitCode[ExitCode["
|
|
69
|
-
ExitCode[ExitCode["
|
|
70
|
-
ExitCode[ExitCode["
|
|
71
|
-
ExitCode[ExitCode["
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
WorkspaceStatus["
|
|
78
|
-
WorkspaceStatus["
|
|
79
|
-
WorkspaceStatus["
|
|
80
|
-
WorkspaceStatus["
|
|
81
|
-
WorkspaceStatus["
|
|
82
|
-
WorkspaceStatus["
|
|
83
|
-
WorkspaceStatus["
|
|
84
|
-
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { join, dirname } from 'node:path';
|
|
4
|
+
import { getVersion } from './get-version.js';
|
|
5
|
+
function findRootDir(dir) {
|
|
6
|
+
if (existsSync(join(dir, 'farris.config.js')) || existsSync(join(dir, 'farris.config.mjs'))) {
|
|
7
|
+
return dir;
|
|
8
|
+
}
|
|
9
|
+
const parentDir = dirname(dir);
|
|
10
|
+
if (dir === parentDir) {
|
|
11
|
+
return dir;
|
|
12
|
+
}
|
|
13
|
+
return findRootDir(parentDir);
|
|
14
|
+
}
|
|
15
|
+
export const getDirname = (url) => fileURLToPath(new URL('.', url));
|
|
16
|
+
// Root paths
|
|
17
|
+
export const CWD = process.cwd();
|
|
18
|
+
export const ROOT = findRootDir(CWD);
|
|
19
|
+
export const FAARIS_CONFIG_FILE = join(CWD, 'farris.config.mjs');
|
|
20
|
+
export const getPackageName = () => {
|
|
21
|
+
const { PackageName = '@components' } = process.env;
|
|
22
|
+
return PackageName;
|
|
23
|
+
};
|
|
24
|
+
// Schema & Version Baseline
|
|
25
|
+
export const SCHEMA_VERSION = 1;
|
|
26
|
+
export const CLI_VERSION = getVersion();
|
|
27
|
+
// Catalog Dependency Versions Baseline
|
|
28
|
+
export const DEFAULT_CATALOG_VERSIONS = {
|
|
29
|
+
'@farris/ui-vue': '1.8.5-beta.14',
|
|
30
|
+
'@farris/cli': CLI_VERSION,
|
|
31
|
+
'@vitejs/plugin-vue': '5.2.4',
|
|
32
|
+
'@vitejs/plugin-vue-jsx': '3.0.0',
|
|
33
|
+
'msw': '2.15.0',
|
|
34
|
+
'typescript': '5.7.3',
|
|
35
|
+
'vite': '5.4.19',
|
|
36
|
+
'vite-plugin-css-injected-by-js': '3.5.2',
|
|
37
|
+
'vite-plugin-dts': '3.9.1',
|
|
38
|
+
'vue': '3.5.13',
|
|
39
|
+
'vue-router': '4.5.0',
|
|
40
|
+
'vue-tsc': '2.2.0',
|
|
41
|
+
'sass': '1.90.0',
|
|
42
|
+
'pnpm': '9.15.4'
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* 渲染生成的 workspace 的 catalog 区块(YAML 缩进片段)。
|
|
46
|
+
*
|
|
47
|
+
* 单一来源:catalog 内容与 applyCatalogDeps 的改写范围必须完全一致,
|
|
48
|
+
* 任何出现在这里但模板 devDependencies 里没有的依赖都只是多一行,不会出错;
|
|
49
|
+
* 反之若有模板依赖被改写为 `catalog:` 却不在这里,生成的 workspace 将无法安装。
|
|
50
|
+
*/
|
|
51
|
+
export function renderCatalogEntries() {
|
|
52
|
+
return Object.entries(DEFAULT_CATALOG_VERSIONS)
|
|
53
|
+
// pnpm 只用于根 package.json 的 packageManager 字段,不作为子工程依赖
|
|
54
|
+
.filter(([name]) => name !== 'pnpm')
|
|
55
|
+
.map(([name, version]) => ` "${name}": "${version}"`)
|
|
56
|
+
.join('\n');
|
|
57
|
+
}
|
|
58
|
+
// Standard Engines
|
|
59
|
+
export const DEFAULT_ENGINES = {
|
|
60
|
+
node: '^18.0.0 || >=20.0.0',
|
|
61
|
+
pnpm: '>=9.0.0 <10.0.0'
|
|
62
|
+
};
|
|
63
|
+
// App 产物交付格式;iife 为 IBP 微前端单文件产物(单文件、无代码分割)
|
|
64
|
+
export const ALLOWED_APP_FORMATS = ['es', 'umd', 'systemjs', 'iife'];
|
|
65
|
+
// Exit Codes
|
|
66
|
+
export var ExitCode;
|
|
67
|
+
(function (ExitCode) {
|
|
68
|
+
ExitCode[ExitCode["SUCCESS"] = 0] = "SUCCESS";
|
|
69
|
+
ExitCode[ExitCode["GENERAL_ERROR"] = 1] = "GENERAL_ERROR";
|
|
70
|
+
ExitCode[ExitCode["TARGET_CONFLICT"] = 2] = "TARGET_CONFLICT";
|
|
71
|
+
ExitCode[ExitCode["VERIFY_FAILED"] = 3] = "VERIFY_FAILED";
|
|
72
|
+
ExitCode[ExitCode["FS_ERROR"] = 4] = "FS_ERROR";
|
|
73
|
+
})(ExitCode || (ExitCode = {}));
|
|
74
|
+
// Workspace Safety Status
|
|
75
|
+
export var WorkspaceStatus;
|
|
76
|
+
(function (WorkspaceStatus) {
|
|
77
|
+
WorkspaceStatus["MISSING"] = "missing";
|
|
78
|
+
WorkspaceStatus["EMPTY"] = "empty";
|
|
79
|
+
WorkspaceStatus["AI_CONFIG_ONLY"] = "ai-config-only";
|
|
80
|
+
WorkspaceStatus["PRESERVED_INPUT_ONLY"] = "preserved-input-only";
|
|
81
|
+
WorkspaceStatus["EXISTING_WORKSPACE"] = "existing-workspace";
|
|
82
|
+
WorkspaceStatus["EXISTING_OR_UNKNOWN_PROJECT"] = "existing-or-unknown-project";
|
|
83
|
+
WorkspaceStatus["NON_EMPTY_PROJECT"] = "non-empty-project";
|
|
84
|
+
WorkspaceStatus["INVALID_TARGET"] = "invalid-target";
|
|
85
|
+
})(WorkspaceStatus || (WorkspaceStatus = {}));
|
|
85
86
|
//# sourceMappingURL=constant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/common/constant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,SAAS,WAAW,CAAC,GAAW;IAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/common/constant.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { isAbsolute, relative, resolve } from 'node:path';
|
|
2
|
-
import { ExitCode } from './constant.js';
|
|
3
|
-
export class CreateAppError extends Error {
|
|
4
|
-
constructor(message, exitCode = ExitCode.GENERAL_ERROR) {
|
|
5
|
-
super(message);
|
|
6
|
-
this.name = 'CreateAppError';
|
|
7
|
-
this.exitCode = exitCode;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export function isValidPackageName(name) {
|
|
11
|
-
return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(name);
|
|
12
|
-
}
|
|
13
|
-
export function toValidPackageName(name) {
|
|
14
|
-
return name
|
|
15
|
-
.trim()
|
|
16
|
-
.toLowerCase()
|
|
17
|
-
.replace(/\s+/g, '-')
|
|
18
|
-
.replace(/^[._]/, '')
|
|
19
|
-
.replace(/[^a-z0-9-~]+/g, '-')
|
|
20
|
-
.replace(/^-+|-+$/g, '');
|
|
21
|
-
}
|
|
22
|
-
export function resolvePackageName(name) {
|
|
23
|
-
const trimmed = name.trim();
|
|
24
|
-
if (isValidPackageName(trimmed)) {
|
|
25
|
-
return trimmed;
|
|
26
|
-
}
|
|
27
|
-
const derived = toValidPackageName(trimmed);
|
|
28
|
-
if (!derived || !isValidPackageName(derived)) {
|
|
29
|
-
throw new CreateAppError(`无法从目标名推导合法包名: ${name}`);
|
|
30
|
-
}
|
|
31
|
-
return derived;
|
|
32
|
-
}
|
|
33
|
-
export function assertTargetInsideCwd(name, cwd = process.cwd()) {
|
|
34
|
-
const trimmed = name.trim();
|
|
35
|
-
if (!trimmed || trimmed === '.' || trimmed === './') {
|
|
36
|
-
throw new CreateAppError('目标目录不能是当前目录');
|
|
37
|
-
}
|
|
38
|
-
if (trimmed.includes('\0')) {
|
|
39
|
-
throw new CreateAppError('目标路径包含非法字符');
|
|
40
|
-
}
|
|
41
|
-
const resolved = resolve(cwd, trimmed);
|
|
42
|
-
const rel = relative(cwd, resolved);
|
|
43
|
-
if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) {
|
|
44
|
-
throw new CreateAppError(`目标目录必须位于当前工作目录内: ${name}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
1
|
+
import { isAbsolute, relative, resolve } from 'node:path';
|
|
2
|
+
import { ExitCode } from './constant.js';
|
|
3
|
+
export class CreateAppError extends Error {
|
|
4
|
+
constructor(message, exitCode = ExitCode.GENERAL_ERROR) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'CreateAppError';
|
|
7
|
+
this.exitCode = exitCode;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function isValidPackageName(name) {
|
|
11
|
+
return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(name);
|
|
12
|
+
}
|
|
13
|
+
export function toValidPackageName(name) {
|
|
14
|
+
return name
|
|
15
|
+
.trim()
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.replace(/\s+/g, '-')
|
|
18
|
+
.replace(/^[._]/, '')
|
|
19
|
+
.replace(/[^a-z0-9-~]+/g, '-')
|
|
20
|
+
.replace(/^-+|-+$/g, '');
|
|
21
|
+
}
|
|
22
|
+
export function resolvePackageName(name) {
|
|
23
|
+
const trimmed = name.trim();
|
|
24
|
+
if (isValidPackageName(trimmed)) {
|
|
25
|
+
return trimmed;
|
|
26
|
+
}
|
|
27
|
+
const derived = toValidPackageName(trimmed);
|
|
28
|
+
if (!derived || !isValidPackageName(derived)) {
|
|
29
|
+
throw new CreateAppError(`无法从目标名推导合法包名: ${name}`);
|
|
30
|
+
}
|
|
31
|
+
return derived;
|
|
32
|
+
}
|
|
33
|
+
export function assertTargetInsideCwd(name, cwd = process.cwd()) {
|
|
34
|
+
const trimmed = name.trim();
|
|
35
|
+
if (!trimmed || trimmed === '.' || trimmed === './') {
|
|
36
|
+
throw new CreateAppError('目标目录不能是当前目录');
|
|
37
|
+
}
|
|
38
|
+
if (trimmed.includes('\0')) {
|
|
39
|
+
throw new CreateAppError('目标路径包含非法字符');
|
|
40
|
+
}
|
|
41
|
+
const resolved = resolve(cwd, trimmed);
|
|
42
|
+
const rel = relative(cwd, resolved);
|
|
43
|
+
if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) {
|
|
44
|
+
throw new CreateAppError(`目标目录必须位于当前工作目录内: ${name}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
47
|
//# sourceMappingURL=create-app-target.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app-target.js","sourceRoot":"","sources":["../../src/common/create-app-target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGvC,YAAY,OAAe,EAAE,WAAqB,QAAQ,CAAC,aAAa;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,4DAA4D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"create-app-target.js","sourceRoot":"","sources":["../../src/common/create-app-target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGvC,YAAY,OAAe,EAAE,WAAqB,QAAQ,CAAC,aAAa;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,4DAA4D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,cAAc,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,cAAc,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
|