create-lumal-admin 0.0.4-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.
Files changed (185) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +98 -12
  3. package/dist/cli.d.ts +18 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +308 -28
  6. package/dist/cli.js.map +1 -1
  7. package/dist/create.d.ts +11 -1
  8. package/dist/create.d.ts.map +1 -1
  9. package/dist/create.js +98 -2
  10. package/dist/create.js.map +1 -1
  11. package/dist/index.d.ts +2 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/presets.d.ts +41 -0
  16. package/dist/presets.d.ts.map +1 -0
  17. package/dist/presets.js +58 -0
  18. package/dist/presets.js.map +1 -0
  19. package/dist/project-cli.d.ts +3 -0
  20. package/dist/project-cli.d.ts.map +1 -0
  21. package/dist/project-cli.js +13 -0
  22. package/dist/project-cli.js.map +1 -0
  23. package/dist/projects.d.ts +21 -0
  24. package/dist/projects.d.ts.map +1 -0
  25. package/dist/projects.js +124 -0
  26. package/dist/projects.js.map +1 -0
  27. package/dist/scaffold.d.ts +2 -11
  28. package/dist/scaffold.d.ts.map +1 -1
  29. package/dist/scaffold.js +2 -1602
  30. package/dist/scaffold.js.map +1 -1
  31. package/dist/templates.d.ts +7 -0
  32. package/dist/templates.d.ts.map +1 -0
  33. package/dist/templates.js +91 -0
  34. package/dist/templates.js.map +1 -0
  35. package/dist/types.d.ts +64 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +2 -0
  38. package/dist/types.js.map +1 -0
  39. package/package.json +13 -4
  40. package/templates/base/.env.example +4 -0
  41. package/templates/base/API-CONTRACT.md +84 -0
  42. package/templates/base/README.md +59 -0
  43. package/templates/base/index.html +12 -0
  44. package/templates/base/package.json +38 -0
  45. package/templates/base/src/App.vue +206 -0
  46. package/templates/base/src/app/components/AppHeaderActions.vue +46 -0
  47. package/templates/base/src/app/components/AppSettingsDrawer.vue +37 -0
  48. package/templates/base/src/app/menu-policy.ts +163 -0
  49. package/templates/base/src/app/module.ts +46 -0
  50. package/templates/base/src/app/router/index.ts +107 -0
  51. package/templates/base/src/app/router/views.ts +12 -0
  52. package/templates/base/src/app/services/access.ts +2 -0
  53. package/templates/base/src/app/services/contracts.ts +54 -0
  54. package/templates/base/src/app/services/local-contracts.ts +18 -0
  55. package/templates/base/src/app/services/preferences.ts +41 -0
  56. package/templates/base/src/app/services/session-runtime.ts +186 -0
  57. package/templates/base/src/app/services/session.ts +14 -0
  58. package/templates/base/src/app/stored-menus.ts +72 -0
  59. package/templates/base/src/app/views/SafeIframeView.vue +34 -0
  60. package/templates/base/src/app/views/auth/LoginView.vue +75 -0
  61. package/templates/base/src/app/views/error/ForbiddenView.vue +20 -0
  62. package/templates/base/src/app/views/error/NotFoundView.vue +16 -0
  63. package/templates/base/src/main.ts +40 -0
  64. package/templates/base/src/modules/business/README.md +33 -0
  65. package/templates/base/src/modules/dashboard/DashboardView.vue +27 -0
  66. package/templates/base/src/modules/dashboard/module.ts +14 -0
  67. package/templates/base/src/shared/api.ts +53 -0
  68. package/templates/base/src/shared/components/BaseEntityDialog.vue +39 -0
  69. package/templates/base/src/shared/composables/use-async-data.ts +35 -0
  70. package/templates/base/src/shared/composables/use-entity-editor.ts +77 -0
  71. package/templates/base/src/shared/status.ts +4 -0
  72. package/templates/base/src/shared/tree.ts +41 -0
  73. package/templates/base/src/styles.scss +173 -0
  74. package/templates/base/tests/menu-policy.test.ts.template +89 -0
  75. package/templates/base/tests/session.test.ts.template +45 -0
  76. package/templates/base/vite.config.ts +54 -0
  77. package/templates/blank/README.md +6 -0
  78. package/templates/blank/src/App.vue +11 -0
  79. package/templates/common/AGENTS.md +13 -0
  80. package/templates/common/_editorconfig +15 -0
  81. package/templates/common/_gitattributes +6 -0
  82. package/templates/common/_gitignore +7 -0
  83. package/templates/common/_prettierignore +6 -0
  84. package/templates/common/docs/DEVELOPMENT.md +26 -0
  85. package/templates/common/eslint.config.mjs +60 -0
  86. package/templates/common/package.json +39 -0
  87. package/templates/common/prettier.config.mjs +8 -0
  88. package/templates/common/tsconfig.json +19 -0
  89. package/templates/common/vitest.config.ts +3 -0
  90. package/templates/features/examples/src/modules/examples/CrudExampleView.vue +51 -0
  91. package/templates/features/examples/src/modules/examples/FormExampleView.vue +32 -0
  92. package/templates/features/examples/src/modules/examples/module.ts +27 -0
  93. package/templates/features/system/src/modules/system/config/ConfigView.vue +104 -0
  94. package/templates/features/system/src/modules/system/config/api.ts +38 -0
  95. package/templates/features/system/src/modules/system/config/routes.ts +21 -0
  96. package/templates/features/system/src/modules/system/dictionary/DictionaryItemView.vue +141 -0
  97. package/templates/features/system/src/modules/system/dictionary/DictionaryTypeView.vue +107 -0
  98. package/templates/features/system/src/modules/system/dictionary/api.ts +61 -0
  99. package/templates/features/system/src/modules/system/dictionary/cache.ts +9 -0
  100. package/templates/features/system/src/modules/system/dictionary/routes.ts +32 -0
  101. package/templates/features/system/src/modules/system/dictionary/types.ts +22 -0
  102. package/templates/features/system/src/modules/system/local.ts +348 -0
  103. package/templates/features/system/src/modules/system/menu/MenuView.vue +133 -0
  104. package/templates/features/system/src/modules/system/menu/api.ts +73 -0
  105. package/templates/features/system/src/modules/system/menu/components/MenuEditorDialog.vue +106 -0
  106. package/templates/features/system/src/modules/system/menu/routes.ts +23 -0
  107. package/templates/features/system/src/modules/system/menu/types.ts +18 -0
  108. package/templates/features/system/src/modules/system/module.ts +22 -0
  109. package/templates/features/system/src/modules/system/organization/OrganizationView.vue +134 -0
  110. package/templates/features/system/src/modules/system/organization/api.ts +38 -0
  111. package/templates/features/system/src/modules/system/organization/routes.ts +23 -0
  112. package/templates/features/system/src/modules/system/organization/types.ts +17 -0
  113. package/templates/features/system/src/modules/system/role/RoleView.vue +90 -0
  114. package/templates/features/system/src/modules/system/role/api.ts +40 -0
  115. package/templates/features/system/src/modules/system/role/components/RoleAuthorizationDialog.vue +110 -0
  116. package/templates/features/system/src/modules/system/role/permission-tree.ts +31 -0
  117. package/templates/features/system/src/modules/system/role/routes.ts +24 -0
  118. package/templates/features/system/src/modules/system/role/types.ts +12 -0
  119. package/templates/features/system/src/modules/system/user/UserView.vue +297 -0
  120. package/templates/features/system/src/modules/system/user/api.ts +45 -0
  121. package/templates/features/system/src/modules/system/user/components/UserOrganizationFilter.vue +61 -0
  122. package/templates/features/system/src/modules/system/user/components/UserRoleDialog.vue +93 -0
  123. package/templates/features/system/src/modules/system/user/routes.ts +27 -0
  124. package/templates/features/system/src/modules/system/user/types.ts +28 -0
  125. package/templates/features/system/tests/system.test.ts.template +266 -0
  126. package/templates/modes/http/src/app/services/data-source.ts +124 -0
  127. package/templates/modes/http/src/app/services/http-adapter.ts +128 -0
  128. package/templates/modes/http/tests/http.test.ts.template +218 -0
  129. package/templates/modes/local/src/app/services/data-source.ts +113 -0
  130. package/templates/modes/local/src/app/services/local-database.ts +67 -0
  131. package/templates/modes/local/tests/local.test.ts.template +132 -0
  132. package/templates/presets/standard/src/modules/dashboard/DashboardView.vue +52 -0
  133. package/templates/presets/standard/src/modules/dashboard/components/DashboardSessionStatus.vue +41 -0
  134. package/templates/presets/standard/src/modules/dashboard/components/DashboardShortcuts.vue +51 -0
  135. package/templates/presets/standard/src/modules/profile/ProfileView.vue +109 -0
  136. package/templates/presets/standard/src/modules/profile/api.ts +49 -0
  137. package/templates/presets/standard/src/modules/profile/components/ProfilePasswordForm.vue +68 -0
  138. package/templates/presets/standard/src/modules/profile/local.ts +40 -0
  139. package/templates/presets/standard/src/modules/profile/module.ts +11 -0
  140. package/templates/presets/standard/tests/profile.test.ts.template +72 -0
  141. package/templates/screen/README.md +6 -0
  142. package/templates/screen/src/App.vue +7 -0
  143. package/templates/screen/src/screen/ScreenEntry.vue +18 -0
  144. package/templates/screen/src/screen/ScreenView.vue +48 -0
  145. package/templates/screen/src/screen/components/ScreenMetrics.vue +40 -0
  146. package/templates/screen-auth/src/screen/ScreenEntry.vue +52 -0
  147. package/templates/screen-auth/src/screen/components/ScreenLoginForm.vue +44 -0
  148. package/templates/screen-auth/src/services/session.ts +61 -0
  149. package/templates/screen-auth/tests/session.test.ts.template +54 -0
  150. package/templates/screen-auth-http/src/services/auth-adapter.ts +14 -0
  151. package/templates/screen-auth-http/tests/auth-adapter.test.ts.template +17 -0
  152. package/templates/screen-auth-local-demo/src/services/auth-adapter.ts +15 -0
  153. package/templates/screen-auth-local-demo/tests/auth-adapter.test.ts.template +18 -0
  154. package/templates/screen-data/src/screen/ScreenView.vue +69 -0
  155. package/templates/screen-data/src/services/metrics-types.ts +4 -0
  156. package/templates/screen-data-http/src/services/metrics.ts +20 -0
  157. package/templates/screen-data-http/src/services/request.ts +3 -0
  158. package/templates/screen-data-http/tests/metrics.test.ts.template +21 -0
  159. package/templates/screen-data-local/src/services/metrics.ts +11 -0
  160. package/templates/screen-data-local/tests/metrics.test.ts.template +9 -0
  161. package/templates/screen-http/API-CONTRACT.md +20 -0
  162. package/templates/screen-http/src/services/http.ts +17 -0
  163. package/templates/screen-request-auth/src/services/request.ts +15 -0
  164. package/templates/screen-router/src/App.vue +7 -0
  165. package/templates/screen-router/src/main.ts +13 -0
  166. package/templates/screen-router/src/router.ts +7 -0
  167. package/templates/screen-router/tests/app.test.ts.template +20 -0
  168. package/templates/screen-viewport/src/screen/ScreenViewport.vue +30 -0
  169. package/templates/screen-visualization-charts/src/screen/components/ScreenVisualization.vue +22 -0
  170. package/templates/screen-visualization-cockpit/src/screen/components/ScreenVisualization.vue +33 -0
  171. package/templates/screen-visualization-cockpit/src/screen/components/ScreenWidget.vue +10 -0
  172. package/templates/screen-visualization-datav/src/screen/components/ScreenVisualization.vue +11 -0
  173. package/templates/vben-compatible/MIGRATION.md +30 -0
  174. package/templates/vben-compatible/src/modules/vben-migration/VbenFormView.vue +11 -0
  175. package/templates/vben-compatible/src/modules/vben-migration/VbenUsersView.vue +12 -0
  176. package/templates/vben-compatible/src/modules/vben-migration/components/VbenFormExample.vue +64 -0
  177. package/templates/vben-compatible/src/modules/vben-migration/components/VbenUsers.vue +144 -0
  178. package/templates/vben-compatible/src/modules/vben-migration/local.ts +68 -0
  179. package/templates/vben-compatible/src/modules/vben-migration/module.ts +42 -0
  180. package/templates/vue/index.html +12 -0
  181. package/templates/vue/src/main.ts +5 -0
  182. package/templates/vue/src/styles.css +19 -0
  183. package/templates/vue/tests/app.test.ts.template +10 -0
  184. package/templates/vue/vite.config.ts +9 -0
  185. package/templates/vue/vitest.config.ts +4 -0
package/dist/create.js CHANGED
@@ -1,3 +1,99 @@
1
- // 模板直接生成最终配置,保留原公开模块入口而不再二次读写文件。
2
- export { createLumalAdminProject } from './scaffold.js';
1
+ import { lstat, mkdir, open, readdir, rmdir, unlink } from 'node:fs/promises';
2
+ import { dirname, join, parse, resolve } from 'node:path';
3
+ import { resolveOptions } from './presets.js';
4
+ import { composeTemplates } from './templates.js';
5
+ export async function assertTargetDirectory(input) {
6
+ if (!input.trim() || /\p{Cc}/u.test(input))
7
+ throw new Error('目标目录不能为空或包含控制字符');
8
+ const targetDir = resolve(input);
9
+ if (targetDir === parse(targetDir).root)
10
+ throw new Error('不能在文件系统根目录创建项目');
11
+ const stat = await lstat(targetDir).catch((error) => {
12
+ if (error.code !== 'ENOENT')
13
+ throw error;
14
+ return undefined;
15
+ });
16
+ if (stat?.isSymbolicLink() || (stat && !stat.isDirectory()))
17
+ throw new Error('目标必须是普通目录,不能是文件或符号链接');
18
+ if (stat && (await readdir(targetDir)).length)
19
+ throw new Error('目标目录不是空目录');
20
+ // 不允许经由祖先符号链接 / junction 将输出重定向到另一个位置。
21
+ for (let directory = dirname(targetDir); directory !== dirname(directory); directory = dirname(directory)) {
22
+ const parent = await lstat(directory).catch((error) => {
23
+ if (error.code !== 'ENOENT')
24
+ throw error;
25
+ return undefined;
26
+ });
27
+ if (parent?.isSymbolicLink())
28
+ throw new Error('目标祖先目录不能包含符号链接');
29
+ }
30
+ }
31
+ export async function createLumalAdminProject(input) {
32
+ const options = resolveOptions(input);
33
+ const files = await composeTemplates(options);
34
+ return { ...options, ...await writeProjectFiles(options, files) };
35
+ }
36
+ /** 所有项目复用同一套目录校验、文件所有权与取消回滚。 */
37
+ export async function writeProjectFiles(input, files) {
38
+ const targetDir = resolve(input.targetDir);
39
+ await assertTargetDirectory(targetDir);
40
+ input.signal?.throwIfAborted();
41
+ // 先读取、校验全部发布资源,再开始写入。回滚从不递归删除目标目录。
42
+ const ownedFiles = [];
43
+ const ownedDirectories = [];
44
+ async function ensureDirectory(directory) {
45
+ try {
46
+ await mkdir(directory);
47
+ ownedDirectories.push(directory);
48
+ }
49
+ catch (error) {
50
+ const code = error.code;
51
+ if (code === 'ENOENT') {
52
+ await ensureDirectory(dirname(directory));
53
+ await ensureDirectory(directory);
54
+ }
55
+ else if (code === 'EEXIST') {
56
+ const existing = await lstat(directory);
57
+ if (!existing.isDirectory() || existing.isSymbolicLink())
58
+ throw new Error('写入路径必须是普通目录,不能包含符号链接');
59
+ }
60
+ else {
61
+ throw error;
62
+ }
63
+ }
64
+ }
65
+ try {
66
+ await ensureDirectory(targetDir);
67
+ for (const file of files) {
68
+ input.signal?.throwIfAborted();
69
+ const filePath = join(targetDir, file.path);
70
+ await ensureDirectory(dirname(filePath));
71
+ const handle = await open(filePath, 'wx');
72
+ ownedFiles.push(filePath);
73
+ try {
74
+ await handle.writeFile(file.content, 'utf8');
75
+ }
76
+ finally {
77
+ await handle.close();
78
+ }
79
+ }
80
+ input.signal?.throwIfAborted();
81
+ }
82
+ catch (error) {
83
+ const cleanupErrors = [];
84
+ for (const file of ownedFiles.reverse())
85
+ await unlink(file).catch(reason => cleanupErrors.push(reason));
86
+ for (const directory of ownedDirectories.reverse()) {
87
+ await rmdir(directory).catch((reason) => {
88
+ // 并发写入者的文件必须保留;只移除本次创建且仍为空的目录。
89
+ if (reason.code !== 'ENOTEMPTY' && reason.code !== 'ENOENT')
90
+ cleanupErrors.push(reason);
91
+ });
92
+ }
93
+ if (cleanupErrors.length)
94
+ throw new AggregateError([error, ...cleanupErrors], '创建失败,部分文件清理失败,请检查目标目录');
95
+ throw error;
96
+ }
97
+ return { targetDir, createdFiles: files.map(file => file.path) };
98
+ }
3
99
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { createLumalAdminProject, } from './create.js';
2
- export type { CreateLumalAdminProjectOptions, CreateLumalAdminProjectResult, } from './scaffold.js';
2
+ export { createLumalProject } from './projects.js';
3
+ export type { AdminFeature, AdminPreset, ApiMode, CreateLumalAdminProjectOptions, CreateLumalAdminProjectResult, CreateLumalProjectOptions, CreateLumalProjectResult, ProjectRouterMode, ProjectTemplate, RouterMode, ScreenAuth, ScreenData, ScreenViewport, ScreenVisualization, } from './types.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,OAAO,EACP,8BAA8B,EAC9B,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { createLumalAdminProject, } from './create.js';
2
+ export { createLumalProject } from './projects.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GACxB,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,41 @@
1
+ import type { AdminFeature, AdminPreset, CreateLumalAdminProjectOptions } from './types.js';
2
+ export declare const presets: readonly ["minimal", "standard", "vben-compatible"];
3
+ export declare const apiModes: readonly ["local", "http"];
4
+ export declare const routerModes: readonly ["hash", "history"];
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;
31
+ export declare function assertPackageName(name: string): void;
32
+ export declare function resolveOptions(options: CreateLumalAdminProjectOptions): {
33
+ preset: AdminPreset;
34
+ apiMode: import("./types.js").ApiMode;
35
+ routerMode: import("./types.js").RouterMode;
36
+ features: AdminFeature[];
37
+ name: string;
38
+ targetDir: string;
39
+ signal?: AbortSignal;
40
+ };
41
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,58 @@
1
+ import { builtinModules } from 'node:module';
2
+ export const presets = ['minimal', 'standard', 'vben-compatible'];
3
+ export const apiModes = ['local', 'http'];
4
+ export const routerModes = ['hash', 'history'];
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
+ }
34
+ export function assertPackageName(name) {
35
+ // 新建 npm 包不接受前导连字符或 ~;scope 与包名均限制为安全的小写子集。
36
+ const part = '[a-z0-9][a-z0-9._-]*';
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}`);
44
+ }
45
+ export function resolveOptions(options) {
46
+ assertPackageName(options.name);
47
+ const preset = options.preset ?? 'standard';
48
+ const apiMode = options.apiMode ?? 'local';
49
+ const routerMode = options.routerMode ?? 'hash';
50
+ const selected = [...new Set(options.features ?? defaultFeatures(preset))];
51
+ if (!presets.includes(preset) || !apiModes.includes(apiMode) || !routerModes.includes(routerMode))
52
+ throw new Error('预设、数据源或路由模式无效');
53
+ assertFeatures(selected, preset);
54
+ if (!options.targetDir?.trim())
55
+ throw new Error('目标目录不能为空');
56
+ return { ...options, preset, apiMode, routerMode, features: selected };
57
+ }
58
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +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;AAUvD,mCAAmC;AACnC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7G,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;CAC5E,CAAA;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAmB,CAAA;AAEzE,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAE,kBAAkB,CAAC,OAAO,CAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;AAChH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;AACzF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAwB,EAAE,MAAmB;IAC1E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAA;QACtC,MAAM,UAAU,GAAsB,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACjE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,UAAU,OAAO,oBAAoB,CAAC,CAAA;QACjE,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,WAAW,UAAU,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,QAAQ,QAAQ,OAAO,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,4CAA4C;IAC5C,MAAM,IAAI,GAAG,sBAAsB,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;QAC/B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/C,CAAC,CAAC,oDAAoD;YACtD,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5G,IAAI,OAAO;QACT,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI,OAAO,EAAE,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAuC;IACpE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAA;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAA;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAA;IAC/C,MAAM,QAAQ,GAAmB,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC1F,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;IAC7B,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AACxE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=project-cli.d.ts.map
@@ -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"}
@@ -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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"}
@@ -1,12 +1,3 @@
1
- export interface CreateLumalAdminProjectOptions {
2
- apiMode?: 'http' | 'local';
3
- name: string;
4
- targetDir: string;
5
- }
6
- export interface CreateLumalAdminProjectResult {
7
- targetDir: string;
8
- createdFiles: string[];
9
- }
10
- /***********************公开 API*********************/
11
- export declare function createLumalAdminProject(options: CreateLumalAdminProjectOptions): Promise<CreateLumalAdminProjectResult>;
1
+ export { createLumalAdminProject } from './create.js';
2
+ export type { CreateLumalAdminProjectOptions, CreateLumalAdminProjectResult } from './types.js';
12
3
  //# sourceMappingURL=scaffold.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAkmDD,oDAAoD;AACpD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,6BAA6B,CAAC,CAexC"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAA"}