create-lumal-admin 0.0.5-beta → 0.0.6-beta
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/CHANGELOG.md +13 -0
- package/README.md +39 -10
- package/dist/cli.d.ts +9 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +236 -19
- package/dist/cli.js.map +1 -1
- package/dist/create.d.ts +10 -1
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +18 -5
- package/dist/create.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/presets.d.ts +29 -3
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +38 -10
- package/dist/presets.js.map +1 -1
- package/dist/project-cli.d.ts +3 -0
- package/dist/project-cli.d.ts.map +1 -0
- package/dist/project-cli.js +13 -0
- package/dist/project-cli.js.map +1 -0
- package/dist/projects.d.ts +21 -0
- package/dist/projects.d.ts.map +1 -0
- package/dist/projects.js +124 -0
- package/dist/projects.js.map +1 -0
- package/dist/templates.d.ts +2 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +42 -13
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -3
- package/templates/base/API-CONTRACT.md +67 -20
- package/templates/base/README.md +20 -3
- package/templates/base/src/App.vue +71 -79
- package/templates/base/src/app/components/AppHeaderActions.vue +46 -0
- package/templates/base/src/{components/app → app/components}/AppSettingsDrawer.vue +15 -15
- package/templates/base/src/app/menu-policy.ts +163 -0
- package/templates/base/src/app/module.ts +46 -0
- package/templates/base/src/app/router/index.ts +107 -0
- package/templates/base/src/app/router/views.ts +12 -0
- package/templates/base/src/{services → app/services}/access.ts +1 -1
- package/templates/base/src/app/services/contracts.ts +54 -0
- package/templates/base/src/app/services/local-contracts.ts +18 -0
- package/templates/base/src/{services → app/services}/preferences.ts +8 -8
- package/templates/base/src/app/services/session-runtime.ts +186 -0
- package/templates/base/src/{services → app/services}/session.ts +4 -4
- package/templates/base/src/app/stored-menus.ts +72 -0
- package/templates/base/src/app/views/SafeIframeView.vue +34 -0
- package/templates/base/src/{views → app/views}/auth/LoginView.vue +29 -34
- package/templates/base/src/app/views/error/ForbiddenView.vue +20 -0
- package/templates/base/src/{views → app/views}/error/NotFoundView.vue +5 -7
- package/templates/base/src/main.ts +21 -22
- package/templates/base/src/modules/business/README.md +33 -0
- package/templates/base/src/{views → modules}/dashboard/DashboardView.vue +3 -3
- package/templates/base/src/modules/dashboard/module.ts +14 -0
- package/templates/base/src/shared/api.ts +53 -0
- package/templates/base/src/shared/components/BaseEntityDialog.vue +39 -0
- package/templates/base/src/shared/composables/use-async-data.ts +35 -0
- package/templates/base/src/shared/composables/use-entity-editor.ts +77 -0
- package/templates/base/src/shared/status.ts +4 -0
- package/templates/base/src/shared/tree.ts +41 -0
- package/templates/base/src/styles.scss +1 -6
- package/templates/base/tests/menu-policy.test.ts.template +89 -0
- package/templates/base/tests/session.test.ts.template +38 -27
- package/templates/base/vite.config.ts +4 -4
- package/templates/blank/README.md +6 -0
- package/templates/blank/src/App.vue +11 -0
- package/templates/common/AGENTS.md +13 -0
- package/templates/common/_editorconfig +15 -0
- package/templates/common/_gitattributes +6 -0
- package/templates/{base → common}/_gitignore +1 -0
- package/templates/common/_prettierignore +6 -0
- package/templates/common/docs/DEVELOPMENT.md +26 -0
- package/templates/common/eslint.config.mjs +60 -0
- package/templates/common/package.json +39 -0
- package/templates/common/prettier.config.mjs +8 -0
- package/templates/{base → common}/tsconfig.json +2 -5
- package/templates/common/vitest.config.ts +3 -0
- package/templates/features/examples/src/modules/examples/CrudExampleView.vue +51 -0
- package/templates/features/examples/src/{views → modules}/examples/FormExampleView.vue +15 -8
- package/templates/features/examples/src/modules/examples/module.ts +27 -0
- package/templates/features/system/src/modules/system/config/ConfigView.vue +104 -0
- package/templates/features/system/src/modules/system/config/api.ts +38 -0
- package/templates/features/system/src/modules/system/config/routes.ts +21 -0
- package/templates/features/system/src/modules/system/dictionary/DictionaryItemView.vue +141 -0
- package/templates/features/system/src/modules/system/dictionary/DictionaryTypeView.vue +107 -0
- package/templates/features/system/src/modules/system/dictionary/api.ts +61 -0
- package/templates/features/system/src/modules/system/dictionary/cache.ts +9 -0
- package/templates/features/system/src/modules/system/dictionary/routes.ts +32 -0
- package/templates/features/system/src/modules/system/dictionary/types.ts +22 -0
- package/templates/features/system/src/modules/system/local.ts +348 -0
- package/templates/features/system/src/modules/system/menu/MenuView.vue +133 -0
- package/templates/features/system/src/modules/system/menu/api.ts +73 -0
- package/templates/features/system/src/modules/system/menu/components/MenuEditorDialog.vue +106 -0
- package/templates/features/system/src/modules/system/menu/routes.ts +23 -0
- package/templates/features/system/src/modules/system/menu/types.ts +18 -0
- package/templates/features/system/src/modules/system/module.ts +22 -0
- package/templates/features/system/src/modules/system/organization/OrganizationView.vue +134 -0
- package/templates/features/system/src/modules/system/organization/api.ts +38 -0
- package/templates/features/system/src/modules/system/organization/routes.ts +23 -0
- package/templates/features/system/src/modules/system/organization/types.ts +17 -0
- package/templates/features/system/src/modules/system/role/RoleView.vue +90 -0
- package/templates/features/system/src/modules/system/role/api.ts +40 -0
- package/templates/features/system/src/modules/system/role/components/RoleAuthorizationDialog.vue +110 -0
- package/templates/features/system/src/modules/system/role/permission-tree.ts +31 -0
- package/templates/features/system/src/modules/system/role/routes.ts +24 -0
- package/templates/features/system/src/modules/system/role/types.ts +12 -0
- package/templates/features/system/src/modules/system/user/UserView.vue +297 -0
- package/templates/features/system/src/modules/system/user/api.ts +45 -0
- package/templates/features/system/src/modules/system/user/components/UserOrganizationFilter.vue +61 -0
- package/templates/features/system/src/modules/system/user/components/UserRoleDialog.vue +93 -0
- package/templates/features/system/src/modules/system/user/routes.ts +27 -0
- package/templates/features/system/src/modules/system/user/types.ts +28 -0
- package/templates/features/system/tests/system.test.ts.template +266 -0
- package/templates/modes/http/src/app/services/data-source.ts +124 -0
- package/templates/modes/http/src/app/services/http-adapter.ts +128 -0
- package/templates/modes/http/tests/http.test.ts.template +186 -133
- package/templates/modes/local/src/app/services/data-source.ts +113 -0
- package/templates/modes/local/src/app/services/local-database.ts +67 -0
- package/templates/modes/local/tests/local.test.ts.template +117 -77
- package/templates/presets/standard/src/modules/dashboard/DashboardView.vue +52 -0
- package/templates/presets/standard/src/modules/dashboard/components/DashboardSessionStatus.vue +41 -0
- package/templates/presets/standard/src/modules/dashboard/components/DashboardShortcuts.vue +51 -0
- package/templates/presets/standard/src/modules/profile/ProfileView.vue +109 -0
- package/templates/presets/standard/src/modules/profile/api.ts +49 -0
- package/templates/presets/standard/src/modules/profile/components/ProfilePasswordForm.vue +68 -0
- package/templates/presets/standard/src/modules/profile/local.ts +40 -0
- package/templates/presets/standard/src/modules/profile/module.ts +11 -0
- package/templates/presets/standard/tests/profile.test.ts.template +72 -0
- package/templates/screen/README.md +6 -0
- package/templates/screen/src/App.vue +7 -0
- package/templates/screen/src/screen/ScreenEntry.vue +18 -0
- package/templates/screen/src/screen/ScreenView.vue +48 -0
- package/templates/screen/src/screen/components/ScreenMetrics.vue +40 -0
- package/templates/screen-auth/src/screen/ScreenEntry.vue +52 -0
- package/templates/screen-auth/src/screen/components/ScreenLoginForm.vue +44 -0
- package/templates/screen-auth/src/services/session.ts +61 -0
- package/templates/screen-auth/tests/session.test.ts.template +54 -0
- package/templates/screen-auth-http/src/services/auth-adapter.ts +14 -0
- package/templates/screen-auth-http/tests/auth-adapter.test.ts.template +17 -0
- package/templates/screen-auth-local-demo/src/services/auth-adapter.ts +15 -0
- package/templates/screen-auth-local-demo/tests/auth-adapter.test.ts.template +18 -0
- package/templates/screen-data/src/screen/ScreenView.vue +69 -0
- package/templates/screen-data/src/services/metrics-types.ts +4 -0
- package/templates/screen-data-http/src/services/metrics.ts +20 -0
- package/templates/screen-data-http/src/services/request.ts +3 -0
- package/templates/screen-data-http/tests/metrics.test.ts.template +21 -0
- package/templates/screen-data-local/src/services/metrics.ts +11 -0
- package/templates/screen-data-local/tests/metrics.test.ts.template +9 -0
- package/templates/screen-http/API-CONTRACT.md +20 -0
- package/templates/screen-http/src/services/http.ts +17 -0
- package/templates/screen-request-auth/src/services/request.ts +15 -0
- package/templates/screen-router/src/App.vue +7 -0
- package/templates/screen-router/src/main.ts +13 -0
- package/templates/screen-router/src/router.ts +7 -0
- package/templates/screen-router/tests/app.test.ts.template +20 -0
- package/templates/screen-viewport/src/screen/ScreenViewport.vue +30 -0
- package/templates/screen-visualization-charts/src/screen/components/ScreenVisualization.vue +22 -0
- package/templates/screen-visualization-cockpit/src/screen/components/ScreenVisualization.vue +33 -0
- package/templates/screen-visualization-cockpit/src/screen/components/ScreenWidget.vue +10 -0
- package/templates/screen-visualization-datav/src/screen/components/ScreenVisualization.vue +11 -0
- package/templates/vben-compatible/MIGRATION.md +2 -0
- package/templates/vben-compatible/src/{views/migration → modules/vben-migration}/VbenFormView.vue +2 -1
- package/templates/vben-compatible/src/{views/migration → modules/vben-migration}/VbenUsersView.vue +3 -2
- package/templates/vben-compatible/src/modules/vben-migration/components/VbenFormExample.vue +64 -0
- package/templates/vben-compatible/src/{components/migration → modules/vben-migration/components}/VbenUsers.vue +73 -64
- package/templates/vben-compatible/src/modules/vben-migration/local.ts +68 -0
- package/templates/vben-compatible/src/modules/vben-migration/module.ts +42 -0
- package/templates/vue/index.html +12 -0
- package/templates/vue/src/main.ts +5 -0
- package/templates/vue/src/styles.css +19 -0
- package/templates/vue/tests/app.test.ts.template +10 -0
- package/templates/vue/vite.config.ts +9 -0
- package/templates/vue/vitest.config.ts +4 -0
- package/templates/base/eslint.config.mjs +0 -8
- package/templates/base/src/components/app/AppHeaderActions.vue +0 -34
- package/templates/base/src/router/index.ts +0 -86
- package/templates/base/src/router/views.ts +0 -16
- package/templates/base/src/services/contracts.ts +0 -29
- package/templates/base/src/services/session-runtime.ts +0 -137
- package/templates/base/src/views/error/ForbiddenView.vue +0 -25
- package/templates/base/vitest.config.ts +0 -3
- package/templates/features/examples/src/modules/examples.ts +0 -10
- package/templates/features/examples/src/views/examples/CrudExampleView.vue +0 -30
- package/templates/features/system/src/business/system/entities.ts +0 -93
- package/templates/features/system/src/modules/system.ts +0 -28
- package/templates/features/system/src/views/system/SystemEntityView.vue +0 -85
- package/templates/modes/http/src/services/data-source.ts +0 -120
- package/templates/modes/http/src/services/http-adapter.ts +0 -124
- package/templates/modes/local/src/services/data-source.ts +0 -176
- package/templates/vben-compatible/src/components/migration/VbenFormExample.vue +0 -34
- package/templates/vben-compatible/src/modules/vben.ts +0 -17
package/dist/presets.d.ts
CHANGED
|
@@ -1,15 +1,41 @@
|
|
|
1
|
-
import type { AdminFeature, CreateLumalAdminProjectOptions } from './types.js';
|
|
1
|
+
import type { AdminFeature, AdminPreset, CreateLumalAdminProjectOptions } from './types.js';
|
|
2
2
|
export declare const presets: readonly ["minimal", "standard", "vben-compatible"];
|
|
3
3
|
export declare const apiModes: readonly ["local", "http"];
|
|
4
4
|
export declare const routerModes: readonly ["hash", "history"];
|
|
5
|
-
export
|
|
5
|
+
export interface FeatureDefinition {
|
|
6
|
+
label: string;
|
|
7
|
+
hint: string;
|
|
8
|
+
presets: readonly AdminPreset[];
|
|
9
|
+
default: boolean;
|
|
10
|
+
requires?: readonly AdminFeature[];
|
|
11
|
+
conflicts?: readonly AdminFeature[];
|
|
12
|
+
}
|
|
13
|
+
export declare const featureDefinitions: {
|
|
14
|
+
system: {
|
|
15
|
+
label: string;
|
|
16
|
+
hint: string;
|
|
17
|
+
presets: ("standard" | "vben-compatible")[];
|
|
18
|
+
default: true;
|
|
19
|
+
};
|
|
20
|
+
examples: {
|
|
21
|
+
label: string;
|
|
22
|
+
hint: string;
|
|
23
|
+
presets: ("standard" | "vben-compatible")[];
|
|
24
|
+
default: true;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export declare const features: AdminFeature[];
|
|
28
|
+
export declare function availableFeatures(preset: AdminPreset): AdminFeature[];
|
|
29
|
+
export declare function defaultFeatures(preset: AdminPreset): AdminFeature[];
|
|
30
|
+
export declare function assertFeatures(selected: AdminFeature[], preset: AdminPreset): void;
|
|
6
31
|
export declare function assertPackageName(name: string): void;
|
|
7
32
|
export declare function resolveOptions(options: CreateLumalAdminProjectOptions): {
|
|
8
|
-
preset:
|
|
33
|
+
preset: AdminPreset;
|
|
9
34
|
apiMode: import("./types.js").ApiMode;
|
|
10
35
|
routerMode: import("./types.js").RouterMode;
|
|
11
36
|
features: AdminFeature[];
|
|
12
37
|
name: string;
|
|
13
38
|
targetDir: string;
|
|
39
|
+
signal?: AbortSignal;
|
|
14
40
|
};
|
|
15
41
|
//# sourceMappingURL=presets.d.ts.map
|
package/dist/presets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAA;AAG3F,eAAO,MAAM,OAAO,qDAAsD,CAAA;AAC1E,eAAO,MAAM,QAAQ,4BAA6B,CAAA;AAClD,eAAO,MAAM,WAAW,8BAA+B,CAAA;AACvD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IAClC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;CACpC;AAGD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAGoB,CAAA;AACnD,eAAO,MAAM,QAAQ,EAAsC,YAAY,EAAE,CAAA;AAEzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAErE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAEnE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAgBlF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUpD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,8BAA8B;;;;;;;;EAYrE"}
|
package/dist/presets.js
CHANGED
|
@@ -2,27 +2,55 @@ import { builtinModules } from 'node:module';
|
|
|
2
2
|
export const presets = ['minimal', 'standard', 'vben-compatible'];
|
|
3
3
|
export const apiModes = ['local', 'http'];
|
|
4
4
|
export const routerModes = ['hash', 'history'];
|
|
5
|
-
|
|
5
|
+
// 特性选择、默认值和约束共享一份注册表,新增特性无需改写终端流程。
|
|
6
|
+
export const featureDefinitions = {
|
|
7
|
+
system: { label: '系统管理', hint: '用户、授权、菜单、机构、字典与配置', presets: ['standard', 'vben-compatible'], default: true },
|
|
8
|
+
examples: { label: '开发示例', hint: '独立的 Schema Form 与 CRUD Table 示例', presets: ['standard', 'vben-compatible'], default: true },
|
|
9
|
+
};
|
|
10
|
+
export const features = Object.keys(featureDefinitions);
|
|
11
|
+
export function availableFeatures(preset) {
|
|
12
|
+
return features.filter(feature => featureDefinitions[feature].presets.includes(preset));
|
|
13
|
+
}
|
|
14
|
+
export function defaultFeatures(preset) {
|
|
15
|
+
return availableFeatures(preset).filter(feature => featureDefinitions[feature].default);
|
|
16
|
+
}
|
|
17
|
+
export function assertFeatures(selected, preset) {
|
|
18
|
+
for (const feature of selected) {
|
|
19
|
+
if (!Object.hasOwn(featureDefinitions, feature))
|
|
20
|
+
throw new Error(`未知可选能力:${feature}`);
|
|
21
|
+
const definition = featureDefinitions[feature];
|
|
22
|
+
if (!definition.presets.includes(preset))
|
|
23
|
+
throw new Error(`${preset} 预设不包含 ${feature} 业务模块,请选择 standard`);
|
|
24
|
+
for (const dependency of definition.requires ?? []) {
|
|
25
|
+
if (!selected.includes(dependency))
|
|
26
|
+
throw new Error(`${feature} 需要同时启用 ${dependency}`);
|
|
27
|
+
}
|
|
28
|
+
for (const conflict of definition.conflicts ?? []) {
|
|
29
|
+
if (selected.includes(conflict))
|
|
30
|
+
throw new Error(`${feature} 不能与 ${conflict} 同时启用`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
6
34
|
export function assertPackageName(name) {
|
|
7
35
|
// 新建 npm 包不接受前导连字符或 ~;scope 与包名均限制为安全的小写子集。
|
|
8
36
|
const part = '[a-z0-9][a-z0-9._-]*';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
37
|
+
const invalid = name.length > 214
|
|
38
|
+
? '长度不能超过 214 个字符'
|
|
39
|
+
: !new RegExp(`^(?:@${part}/)?${part}$`).test(name)
|
|
40
|
+
? '仅支持小写字母、数字、点、下划线和连字符,且不能以符号开头;scope 使用 @scope/name'
|
|
41
|
+
: ['node_modules', 'favicon.ico', ...builtinModules].includes(name) ? '不能使用 npm 保留名称或 Node 内置模块名' : '';
|
|
42
|
+
if (invalid)
|
|
43
|
+
throw new Error(`非法 npm 项目名称:${name};${invalid}`);
|
|
13
44
|
}
|
|
14
45
|
export function resolveOptions(options) {
|
|
15
46
|
assertPackageName(options.name);
|
|
16
47
|
const preset = options.preset ?? 'standard';
|
|
17
48
|
const apiMode = options.apiMode ?? 'local';
|
|
18
49
|
const routerMode = options.routerMode ?? 'hash';
|
|
19
|
-
const selected = [...new Set(options.features ?? (preset
|
|
50
|
+
const selected = [...new Set(options.features ?? defaultFeatures(preset))];
|
|
20
51
|
if (!presets.includes(preset) || !apiModes.includes(apiMode) || !routerModes.includes(routerMode))
|
|
21
52
|
throw new Error('预设、数据源或路由模式无效');
|
|
22
|
-
|
|
23
|
-
throw new Error('可选能力仅支持 system、examples');
|
|
24
|
-
if (preset === 'minimal' && selected.length)
|
|
25
|
-
throw new Error('minimal 预设不包含业务模块,请选择 standard');
|
|
53
|
+
assertFeatures(selected, preset);
|
|
26
54
|
if (!options.targetDir?.trim())
|
|
27
55
|
throw new Error('目标目录不能为空');
|
|
28
56
|
return { ...options, preset, apiMode, routerMode, features: selected };
|
package/dist/presets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAU,CAAA;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAA;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,SAAS,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-cli.d.ts","sourceRoot":"","sources":["../src/project-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { main } from './cli.js';
|
|
7
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(realpathSync(resolve(process.argv[1]))).href) {
|
|
8
|
+
main(process.argv.slice(2), true).catch((error) => {
|
|
9
|
+
console.error(`创建失败:${error instanceof Error ? error.message : String(error)}`);
|
|
10
|
+
process.exitCode = 1;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=project-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-cli.js","sourceRoot":"","sources":["../src/project-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACzD,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC/E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CreateLumalProjectOptions, CreateLumalProjectResult, ResolvedScreenOptions, TemplateFile } from './types.js';
|
|
2
|
+
export declare const projectTemplates: readonly ["admin", "screen", "blank"];
|
|
3
|
+
export declare const screenAuthModes: readonly ["none", "local-demo", "http"];
|
|
4
|
+
export declare const screenDataModes: readonly ["none", "local", "http"];
|
|
5
|
+
export declare const screenVisualizations: readonly ["none", "charts", "datav", "cockpit"];
|
|
6
|
+
export declare const screenViewports: readonly ["disabled", "responsive", "width", "contain", "scale", "vw"];
|
|
7
|
+
export declare const projectRouterModes: readonly ["none", "hash", "history"];
|
|
8
|
+
export declare function resolveProjectOptions(input: CreateLumalProjectOptions): ResolvedScreenOptions | {
|
|
9
|
+
template: "admin";
|
|
10
|
+
preset: import("./types.js").AdminPreset;
|
|
11
|
+
apiMode: import("./types.js").ApiMode;
|
|
12
|
+
routerMode: import("./types.js").RouterMode;
|
|
13
|
+
features: import("./types.js").AdminFeature[];
|
|
14
|
+
name: string;
|
|
15
|
+
targetDir: string;
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
};
|
|
18
|
+
export declare function composeProjectTemplates(options: ResolvedScreenOptions): Promise<TemplateFile[]>;
|
|
19
|
+
/** 新入口不改变旧 createLumalAdminProject 的默认值与返回协议。 */
|
|
20
|
+
export declare function createLumalProject(input: CreateLumalProjectOptions): Promise<CreateLumalProjectResult>;
|
|
21
|
+
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,yBAAyB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK1J,eAAO,MAAM,gBAAgB,uCAAwC,CAAA;AACrE,eAAO,MAAM,eAAe,yCAA0C,CAAA;AACtE,eAAO,MAAM,eAAe,oCAAqC,CAAA;AACjE,eAAO,MAAM,oBAAoB,iDAAkD,CAAA;AACnF,eAAO,MAAM,eAAe,wEAAyE,CAAA;AACrG,eAAO,MAAM,kBAAkB,sCAAuC,CAAA;AAEtE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,yBAAyB;;;;;;;;;EAuCrE;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAiErG;AAED,iDAAiD;AACjD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAM5G"}
|
package/dist/projects.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { createLumalAdminProject, writeProjectFiles } from './create.js';
|
|
2
|
+
import { assertPackageName, resolveOptions } from './presets.js';
|
|
3
|
+
import { getVersion, readTemplateLayers } from './templates.js';
|
|
4
|
+
export const projectTemplates = ['admin', 'screen', 'blank'];
|
|
5
|
+
export const screenAuthModes = ['none', 'local-demo', 'http'];
|
|
6
|
+
export const screenDataModes = ['none', 'local', 'http'];
|
|
7
|
+
export const screenVisualizations = ['none', 'charts', 'datav', 'cockpit'];
|
|
8
|
+
export const screenViewports = ['disabled', 'responsive', 'width', 'contain', 'scale', 'vw'];
|
|
9
|
+
export const projectRouterModes = ['none', 'hash', 'history'];
|
|
10
|
+
export function resolveProjectOptions(input) {
|
|
11
|
+
const template = input.template ?? 'admin';
|
|
12
|
+
if (!projectTemplates.includes(template))
|
|
13
|
+
throw new Error('项目类型无效');
|
|
14
|
+
if (template === 'admin') {
|
|
15
|
+
if (input.auth !== undefined || input.data !== undefined || input.visualization !== undefined || input.viewport !== undefined)
|
|
16
|
+
throw new Error('Admin 使用 --api-mode 和 --features,不接受 Screen 专属选项');
|
|
17
|
+
if (input.routerMode === 'none')
|
|
18
|
+
throw new Error('Admin 需要 hash 或 history 路由');
|
|
19
|
+
return { ...resolveOptions(input), template: 'admin' };
|
|
20
|
+
}
|
|
21
|
+
assertPackageName(input.name);
|
|
22
|
+
if (!input.targetDir?.trim())
|
|
23
|
+
throw new Error('目标目录不能为空');
|
|
24
|
+
if (input.preset !== undefined || input.features !== undefined)
|
|
25
|
+
throw new Error('非 Admin 项目不能使用 --preset 或 --features');
|
|
26
|
+
if (input.data !== undefined && input.apiMode !== undefined && input.data !== input.apiMode)
|
|
27
|
+
throw new Error('--data 与 --api-mode 冲突');
|
|
28
|
+
const options = {
|
|
29
|
+
template,
|
|
30
|
+
name: input.name,
|
|
31
|
+
targetDir: input.targetDir,
|
|
32
|
+
signal: input.signal,
|
|
33
|
+
auth: input.auth ?? 'none',
|
|
34
|
+
data: input.data ?? input.apiMode ?? 'none',
|
|
35
|
+
routerMode: input.routerMode ?? 'none',
|
|
36
|
+
visualization: input.visualization ?? 'none',
|
|
37
|
+
viewport: input.viewport ?? 'responsive',
|
|
38
|
+
};
|
|
39
|
+
if (!screenAuthModes.includes(options.auth) || !screenDataModes.includes(options.data)
|
|
40
|
+
|| !projectRouterModes.includes(options.routerMode) || !screenVisualizations.includes(options.visualization)
|
|
41
|
+
|| !screenViewports.includes(options.viewport)) {
|
|
42
|
+
throw new Error('Screen 能力组合无效');
|
|
43
|
+
}
|
|
44
|
+
if (template === 'blank' && (options.auth !== 'none' || options.data !== 'none' || options.routerMode !== 'none'
|
|
45
|
+
|| options.visualization !== 'none' || (options.viewport !== 'responsive' && options.viewport !== 'disabled'))) {
|
|
46
|
+
throw new Error('Blank 不包含认证、数据、路由或可视化能力,请选择 Screen');
|
|
47
|
+
}
|
|
48
|
+
return options;
|
|
49
|
+
}
|
|
50
|
+
export async function composeProjectTemplates(options) {
|
|
51
|
+
const layers = ['common', 'vue', options.template];
|
|
52
|
+
const viewport = options.viewport !== 'responsive' && options.viewport !== 'disabled';
|
|
53
|
+
if (options.routerMode !== 'none')
|
|
54
|
+
layers.push('screen-router');
|
|
55
|
+
if (options.data !== 'none')
|
|
56
|
+
layers.push('screen-data', `screen-data-${options.data}`);
|
|
57
|
+
if (options.auth !== 'none')
|
|
58
|
+
layers.push('screen-auth', `screen-auth-${options.auth}`);
|
|
59
|
+
const http = options.auth === 'http' || options.data === 'http';
|
|
60
|
+
if (http)
|
|
61
|
+
layers.push('screen-http');
|
|
62
|
+
if (options.data === 'http' && options.auth !== 'none')
|
|
63
|
+
layers.push('screen-request-auth');
|
|
64
|
+
if (options.visualization !== 'none')
|
|
65
|
+
layers.push(`screen-visualization-${options.visualization}`);
|
|
66
|
+
if (viewport)
|
|
67
|
+
layers.push('screen-viewport');
|
|
68
|
+
const files = await readTemplateLayers(layers);
|
|
69
|
+
const manifest = JSON.parse(files.get('package.json'));
|
|
70
|
+
const version = await getVersion();
|
|
71
|
+
manifest.name = options.name;
|
|
72
|
+
if (options.routerMode !== 'none')
|
|
73
|
+
manifest.dependencies['vue-router'] = '^4.5.0';
|
|
74
|
+
if (options.auth !== 'none' || options.data === 'http')
|
|
75
|
+
manifest.dependencies['@lumal/core'] = version;
|
|
76
|
+
if (viewport)
|
|
77
|
+
manifest.dependencies['@lumal/viewport'] = version;
|
|
78
|
+
if (options.visualization !== 'none')
|
|
79
|
+
manifest.dependencies[`@lumal/${options.visualization}`] = version;
|
|
80
|
+
if (options.visualization === 'charts') {
|
|
81
|
+
manifest.dependencies.echarts = '^6.0.0';
|
|
82
|
+
manifest.dependencies['vue-echarts'] = '^8.0.0';
|
|
83
|
+
}
|
|
84
|
+
if (options.visualization === 'cockpit')
|
|
85
|
+
manifest.dependencies['element-plus'] = '^2.11.0';
|
|
86
|
+
manifest.dependencies = Object.fromEntries(Object.entries(manifest.dependencies).sort(([a], [b]) => a.localeCompare(b)));
|
|
87
|
+
manifest.devDependencies = Object.fromEntries(Object.entries(manifest.devDependencies).sort(([a], [b]) => a.localeCompare(b)));
|
|
88
|
+
files.set('package.json', `${JSON.stringify(manifest, null, 2)}\n`);
|
|
89
|
+
if (options.routerMode !== 'none') {
|
|
90
|
+
files.set('src/router.ts', files.get('src/router.ts').replaceAll('createWebHashHistory', options.routerMode === 'hash' ? 'createWebHashHistory' : 'createWebHistory'));
|
|
91
|
+
}
|
|
92
|
+
if (http) {
|
|
93
|
+
files.set('.env.development', 'VITE_API_BASE_URL=\n');
|
|
94
|
+
files.set('.env.production.example', 'VITE_API_BASE_URL=https://api.example.com\n');
|
|
95
|
+
}
|
|
96
|
+
const screenPath = 'src/screen/ScreenView.vue';
|
|
97
|
+
if (files.has(screenPath)) {
|
|
98
|
+
files.set(screenPath, files.get(screenPath)
|
|
99
|
+
.replace('// SCREEN_VISUALIZATION_IMPORT\n', options.visualization === 'none' ? '' : 'import ScreenVisualization from \'./components/ScreenVisualization.vue\';\n')
|
|
100
|
+
.replace(' <!-- SCREEN_VISUALIZATION -->\n', options.visualization === 'none' ? '' : ' <ScreenVisualization />\n'));
|
|
101
|
+
}
|
|
102
|
+
if (viewport) {
|
|
103
|
+
const entryPath = 'src/screen/ScreenEntry.vue';
|
|
104
|
+
files.set(entryPath, files.get(entryPath)
|
|
105
|
+
.replace('import ScreenView from \'./ScreenView.vue\';', 'import ScreenView from \'./ScreenView.vue\';\nimport ScreenViewport from \'./ScreenViewport.vue\';')
|
|
106
|
+
.replace(' <ScreenView />', ' <ScreenViewport>\n <ScreenView />\n </ScreenViewport>'));
|
|
107
|
+
files.set('src/screen/ScreenViewport.vue', files.get('src/screen/ScreenViewport.vue')
|
|
108
|
+
.replace('/* VIEWPORT_MODE */ \'contain\'', `'${options.viewport === 'scale' ? 'contain' : options.viewport}'`));
|
|
109
|
+
}
|
|
110
|
+
const conventions = options.template === 'blank'
|
|
111
|
+
? '## Blank\n\n默认只安装 Vue 运行时,不引入 Router、Pinia、Element Plus 或 Lumal Core。按业务需要逐项接入,不预建后台结构。'
|
|
112
|
+
: '## Screen\n\n页面只承担大屏组合,不生成管理菜单、标签和系统模块。普通响应式布局优先,地图按实际容器 resize,不默认 transform 整张地图。';
|
|
113
|
+
files.set('docs/DEVELOPMENT.md', files.get('docs/DEVELOPMENT.md').replace('<!-- PROJECT_CONVENTIONS -->', conventions));
|
|
114
|
+
return [...files].map(([path, content]) => ({ path, content })).sort((a, b) => a.path.localeCompare(b.path));
|
|
115
|
+
}
|
|
116
|
+
/** 新入口不改变旧 createLumalAdminProject 的默认值与返回协议。 */
|
|
117
|
+
export async function createLumalProject(input) {
|
|
118
|
+
const options = resolveProjectOptions(input);
|
|
119
|
+
if (options.template === 'admin')
|
|
120
|
+
return { ...await createLumalAdminProject(options), template: 'admin' };
|
|
121
|
+
const files = await composeProjectTemplates(options);
|
|
122
|
+
return { ...options, ...await writeProjectFiles(options, files) };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"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"}
|
package/dist/templates.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ import type { resolveOptions } from './presets.js';
|
|
|
2
2
|
import type { TemplateFile } from './types.js';
|
|
3
3
|
export declare function getVersion(): Promise<string>;
|
|
4
4
|
export declare function composeTemplates(options: ReturnType<typeof resolveOptions>): Promise<TemplateFile[]>;
|
|
5
|
+
/** 工程层只读合成,缺失资源在首次写入前失败。 */
|
|
6
|
+
export declare function readTemplateLayers(layers: string[]): Promise<Map<string, string>>;
|
|
5
7
|
//# sourceMappingURL=templates.d.ts.map
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAGlD;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAGlD;AAsBD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA6C1G;AAED,4BAA4B;AAC5B,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqBvF"}
|
package/dist/templates.js
CHANGED
|
@@ -10,13 +10,15 @@ export async function getVersion() {
|
|
|
10
10
|
async function readLayer(name, directory = '', result = []) {
|
|
11
11
|
const entries = await readdir(join(templateRoot, name, directory), { withFileTypes: true });
|
|
12
12
|
for (const entry of entries) {
|
|
13
|
+
if (entry.isSymbolicLink())
|
|
14
|
+
throw new Error(`模板资源不能是符号链接:${entry.name}`);
|
|
13
15
|
const path = directory ? `${directory}/${entry.name}` : entry.name;
|
|
14
16
|
if (entry.isDirectory()) {
|
|
15
17
|
await readLayer(name, path, result);
|
|
16
18
|
}
|
|
17
19
|
else {
|
|
18
20
|
result.push({
|
|
19
|
-
path: path.replace(/\.template$/, '').replace(/^
|
|
21
|
+
path: path.replace(/\.template$/, '').replace(/^_([^/]+)$/, '.$1'),
|
|
20
22
|
content: await readFile(join(templateRoot, name, path), 'utf8'),
|
|
21
23
|
});
|
|
22
24
|
}
|
|
@@ -24,14 +26,12 @@ async function readLayer(name, directory = '', result = []) {
|
|
|
24
26
|
return result;
|
|
25
27
|
}
|
|
26
28
|
export async function composeTemplates(options) {
|
|
27
|
-
const layers = ['base', `modes/${options.apiMode}`, ...options.features.map(feature => `features/${feature}`)];
|
|
29
|
+
const layers = ['base', 'common', `modes/${options.apiMode}`, ...options.features.map(feature => `features/${feature}`)];
|
|
30
|
+
if (options.preset !== 'minimal')
|
|
31
|
+
layers.push('presets/standard');
|
|
28
32
|
if (options.preset === 'vben-compatible')
|
|
29
33
|
layers.push('vben-compatible');
|
|
30
|
-
const files =
|
|
31
|
-
for (const layer of layers) {
|
|
32
|
-
for (const file of await readLayer(layer))
|
|
33
|
-
files.set(file.path, file.content);
|
|
34
|
-
}
|
|
34
|
+
const files = await readTemplateLayers(layers);
|
|
35
35
|
const version = await getVersion();
|
|
36
36
|
const manifest = JSON.parse(files.get('package.json'));
|
|
37
37
|
manifest.name = options.name;
|
|
@@ -40,23 +40,52 @@ export async function composeTemplates(options) {
|
|
|
40
40
|
if (options.preset === 'vben-compatible')
|
|
41
41
|
manifest.dependencies['@lumal/vben-compat'] = version;
|
|
42
42
|
manifest.dependencies = Object.fromEntries(Object.entries(manifest.dependencies).sort(([left], [right]) => left.localeCompare(right)));
|
|
43
|
+
manifest.devDependencies = Object.fromEntries(Object.entries(manifest.devDependencies).sort(([left], [right]) => left.localeCompare(right)));
|
|
43
44
|
files.set('package.json', `${JSON.stringify(manifest, null, 2)}\n`);
|
|
44
45
|
files.set('.env.development', 'VITE_API_BASE_URL=\nVITE_API_ADAPTER=standard\n');
|
|
45
46
|
files.set('.env.production.example', 'VITE_API_BASE_URL=https://api.example.com\nVITE_API_ADAPTER=standard\n# Local 演示生产构建默认禁止登录;仅演示站点显式启用。\nVITE_ENABLE_LOCAL_DEMO=false\n');
|
|
47
|
+
files.set('docs/DEVELOPMENT.md', files.get('docs/DEVELOPMENT.md').replace('<!-- PROJECT_CONVENTIONS -->', `## Admin
|
|
48
|
+
|
|
49
|
+
常规查询、分页、标准新增编辑优先使用 Lumal Schema/CRUD;地图、复杂交互和专用表单使用普通 Vue + Element Plus,不强行塞入 Schema。
|
|
50
|
+
模块通过 module.ts 声明菜单、视图和权限,公共层不依赖业务模块。API 字段转换位于服务 Adapter。
|
|
51
|
+
HTTP 登录失败不得回退 Local。Local 仅供演示,生产默认禁用。修改权限、接口和模块时补充负向测试。
|
|
52
|
+
`.trimEnd()));
|
|
46
53
|
// 只注入小型配置;完整 SFC、服务和工程文件均保存在模板目录中。
|
|
47
54
|
files.set('src/app.config.ts', `export const appConfig: {
|
|
48
|
-
apiMode: 'http' | 'local'
|
|
49
|
-
features: string[]
|
|
50
|
-
preset: 'minimal' | 'standard' | 'vben-compatible'
|
|
51
|
-
routerMode: 'hash' | 'history'
|
|
52
|
-
title: string
|
|
55
|
+
apiMode: 'http' | 'local';
|
|
56
|
+
features: string[];
|
|
57
|
+
preset: 'minimal' | 'standard' | 'vben-compatible';
|
|
58
|
+
routerMode: 'hash' | 'history';
|
|
59
|
+
title: string;
|
|
53
60
|
} = {
|
|
54
61
|
apiMode: '${options.apiMode}',
|
|
55
62
|
features: [${options.features.map(feature => `'${feature}'`).join(', ')}],
|
|
56
63
|
preset: '${options.preset}',
|
|
57
64
|
routerMode: '${options.routerMode}',
|
|
58
65
|
title: '${options.name}',
|
|
59
|
-
}
|
|
66
|
+
};\n`);
|
|
60
67
|
return [...files].map(([path, content]) => ({ path, content })).sort((a, b) => a.path.localeCompare(b.path));
|
|
61
68
|
}
|
|
69
|
+
/** 工程层只读合成,缺失资源在首次写入前失败。 */
|
|
70
|
+
export async function readTemplateLayers(layers) {
|
|
71
|
+
const files = new Map();
|
|
72
|
+
for (const layer of layers) {
|
|
73
|
+
for (const file of await readLayer(layer)) {
|
|
74
|
+
if (file.path === 'package.json' && files.has(file.path)) {
|
|
75
|
+
const previous = JSON.parse(files.get(file.path));
|
|
76
|
+
const current = JSON.parse(file.content);
|
|
77
|
+
files.set(file.path, JSON.stringify({
|
|
78
|
+
...previous,
|
|
79
|
+
...current,
|
|
80
|
+
dependencies: { ...previous.dependencies, ...current.dependencies },
|
|
81
|
+
devDependencies: { ...previous.devDependencies, ...current.devDependencies },
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
files.set(file.path, file.content);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return files;
|
|
90
|
+
}
|
|
62
91
|
//# sourceMappingURL=templates.js.map
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7E,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAA;IACvH,OAAO,QAAQ,CAAC,OAAO,CAAA;AACzB,CAAC;AAED,oDAAoD;AACpD,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,SAAS,GAAG,EAAE,EAAE,SAAyB,EAAE;IAChF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QAClE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACrC,CAAC;aACI,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7E,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAA;IACvH,OAAO,QAAQ,CAAC,OAAO,CAAA;AACzB,CAAC;AAED,oDAAoD;AACpD,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,SAAS,GAAG,EAAE,EAAE,SAAyB,EAAE;IAChF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,cAAc,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QAClE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACrC,CAAC;aACI,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;gBAClE,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;aAChE,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA0C;IAC/E,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAA;IACxH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB;QACtC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAE,CAIrD,CAAA;IACD,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,kBAAkB,CAAC;QACpE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB;QACtC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAA;IACvD,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACtI,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5I,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACnE,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAA;IAChF,KAAK,CAAC,GAAG,CAAC,yBAAyB,EAAE,uIAAuI,CAAC,CAAA;IAC7K,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAE,CAAC,OAAO,CAAC,8BAA8B,EAAE;;;;;CAK5G,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAEX,mCAAmC;IACnC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE;;;;;;;cAOnB,OAAO,CAAC,OAAO;eACd,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aAC5D,OAAO,CAAC,MAAM;iBACV,OAAO,CAAC,UAAU;YACvB,OAAO,CAAC,IAAI;KACnB,CAAC,CAAA;IACJ,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC9G,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAgB;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,CAAA;gBAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACxC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBAClC,GAAG,QAAQ;oBACX,GAAG,OAAO;oBACV,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE;oBACnE,eAAe,EAAE,EAAE,GAAG,QAAQ,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE;iBAC7E,CAAC,CAAC,CAAA;YACL,CAAC;iBACI,CAAC;gBACJ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface CreateLumalAdminProjectOptions {
|
|
|
9
9
|
preset?: AdminPreset;
|
|
10
10
|
routerMode?: RouterMode;
|
|
11
11
|
targetDir: string;
|
|
12
|
+
/** 取消创建时仅回滚本次拥有的文件。 */
|
|
13
|
+
signal?: AbortSignal;
|
|
12
14
|
}
|
|
13
15
|
export interface CreateLumalAdminProjectResult {
|
|
14
16
|
targetDir: string;
|
|
@@ -22,4 +24,41 @@ export interface TemplateFile {
|
|
|
22
24
|
path: string;
|
|
23
25
|
content: string;
|
|
24
26
|
}
|
|
27
|
+
/***********************通用项目生成协议*********************/
|
|
28
|
+
export type ProjectTemplate = 'admin' | 'blank' | 'screen';
|
|
29
|
+
export type ScreenAuth = 'none' | 'local-demo' | 'http';
|
|
30
|
+
export type ScreenData = 'none' | 'local' | 'http';
|
|
31
|
+
export type ScreenVisualization = 'none' | 'charts' | 'datav' | 'cockpit';
|
|
32
|
+
export type ScreenViewport = 'disabled' | 'responsive' | 'width' | 'contain' | 'scale' | 'vw';
|
|
33
|
+
export type ProjectRouterMode = RouterMode | 'none';
|
|
34
|
+
export interface CreateLumalProjectOptions {
|
|
35
|
+
targetDir: string;
|
|
36
|
+
name: string;
|
|
37
|
+
template?: ProjectTemplate;
|
|
38
|
+
preset?: AdminPreset;
|
|
39
|
+
apiMode?: ApiMode;
|
|
40
|
+
features?: AdminFeature[];
|
|
41
|
+
routerMode?: ProjectRouterMode;
|
|
42
|
+
auth?: ScreenAuth;
|
|
43
|
+
data?: ScreenData;
|
|
44
|
+
visualization?: ScreenVisualization;
|
|
45
|
+
viewport?: ScreenViewport;
|
|
46
|
+
signal?: AbortSignal;
|
|
47
|
+
}
|
|
48
|
+
export interface ResolvedScreenOptions {
|
|
49
|
+
template: 'blank' | 'screen';
|
|
50
|
+
name: string;
|
|
51
|
+
targetDir: string;
|
|
52
|
+
auth: ScreenAuth;
|
|
53
|
+
data: ScreenData;
|
|
54
|
+
routerMode: ProjectRouterMode;
|
|
55
|
+
visualization: ScreenVisualization;
|
|
56
|
+
viewport: ScreenViewport;
|
|
57
|
+
signal?: AbortSignal;
|
|
58
|
+
}
|
|
59
|
+
export type CreateLumalProjectResult = (ResolvedScreenOptions | (CreateLumalAdminProjectResult & {
|
|
60
|
+
template: 'admin';
|
|
61
|
+
})) & {
|
|
62
|
+
createdFiles: string[];
|
|
63
|
+
};
|
|
25
64
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAA;AACpE,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;AACtC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAC3C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEhD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAA;AACpE,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;AACtC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAC3C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEhD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,sDAAsD;AACtD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;AAC1D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAA;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAClD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;AACzE,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAA;AAC7F,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAA;AAEnD,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,iBAAiB,CAAA;IAC7B,aAAa,EAAE,mBAAmB,CAAA;IAClC,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,qBAAqB,GAAG,CAAC,6BAA6B,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,GAAG;IACzH,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-lumal-admin",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"description": "Create
|
|
4
|
+
"version": "0.0.6-beta",
|
|
5
|
+
"description": "Create lightweight Vue Blank, Screen or Lumal Admin projects with optional capabilities.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"lumal",
|
|
9
9
|
"vue",
|
|
10
10
|
"admin",
|
|
11
|
+
"screen",
|
|
11
12
|
"scaffold",
|
|
12
13
|
"create"
|
|
13
14
|
],
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
}
|
|
22
23
|
},
|
|
23
24
|
"bin": {
|
|
25
|
+
"create-lumal": "./dist/project-cli.js",
|
|
24
26
|
"create-lumal-admin": "./dist/cli.js"
|
|
25
27
|
},
|
|
26
28
|
"files": [
|
|
@@ -29,9 +31,15 @@
|
|
|
29
31
|
"dist",
|
|
30
32
|
"templates"
|
|
31
33
|
],
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@clack/prompts": "1.8.1"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@lydell/node-pty": "1.2.0-beta.15"
|
|
39
|
+
},
|
|
32
40
|
"scripts": {
|
|
33
41
|
"build": "tsc -p tsconfig.json && node ../../scripts/clean-package-dist.mjs dist && node ../../scripts/sync-create-lumal-admin-version.mjs",
|
|
34
42
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
35
|
-
"test": "vitest run --config ../../vitest.config.ts tests"
|
|
43
|
+
"test": "pnpm build && vitest run --config ../../vitest.config.ts tests"
|
|
36
44
|
}
|
|
37
45
|
}
|