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.
Files changed (194) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +39 -10
  3. package/dist/cli.d.ts +9 -3
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +236 -19
  6. package/dist/cli.js.map +1 -1
  7. package/dist/create.d.ts +10 -1
  8. package/dist/create.d.ts.map +1 -1
  9. package/dist/create.js +18 -5
  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 +29 -3
  16. package/dist/presets.d.ts.map +1 -1
  17. package/dist/presets.js +38 -10
  18. package/dist/presets.js.map +1 -1
  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/templates.d.ts +2 -0
  28. package/dist/templates.d.ts.map +1 -1
  29. package/dist/templates.js +42 -13
  30. package/dist/templates.js.map +1 -1
  31. package/dist/types.d.ts +39 -0
  32. package/dist/types.d.ts.map +1 -1
  33. package/package.json +11 -3
  34. package/templates/base/API-CONTRACT.md +67 -20
  35. package/templates/base/README.md +20 -3
  36. package/templates/base/src/App.vue +71 -79
  37. package/templates/base/src/app/components/AppHeaderActions.vue +46 -0
  38. package/templates/base/src/{components/app → app/components}/AppSettingsDrawer.vue +15 -15
  39. package/templates/base/src/app/menu-policy.ts +163 -0
  40. package/templates/base/src/app/module.ts +46 -0
  41. package/templates/base/src/app/router/index.ts +107 -0
  42. package/templates/base/src/app/router/views.ts +12 -0
  43. package/templates/base/src/{services → app/services}/access.ts +1 -1
  44. package/templates/base/src/app/services/contracts.ts +54 -0
  45. package/templates/base/src/app/services/local-contracts.ts +18 -0
  46. package/templates/base/src/{services → app/services}/preferences.ts +8 -8
  47. package/templates/base/src/app/services/session-runtime.ts +186 -0
  48. package/templates/base/src/{services → app/services}/session.ts +4 -4
  49. package/templates/base/src/app/stored-menus.ts +72 -0
  50. package/templates/base/src/app/views/SafeIframeView.vue +34 -0
  51. package/templates/base/src/{views → app/views}/auth/LoginView.vue +29 -34
  52. package/templates/base/src/app/views/error/ForbiddenView.vue +20 -0
  53. package/templates/base/src/{views → app/views}/error/NotFoundView.vue +5 -7
  54. package/templates/base/src/main.ts +21 -22
  55. package/templates/base/src/modules/business/README.md +33 -0
  56. package/templates/base/src/{views → modules}/dashboard/DashboardView.vue +3 -3
  57. package/templates/base/src/modules/dashboard/module.ts +14 -0
  58. package/templates/base/src/shared/api.ts +53 -0
  59. package/templates/base/src/shared/components/BaseEntityDialog.vue +39 -0
  60. package/templates/base/src/shared/composables/use-async-data.ts +35 -0
  61. package/templates/base/src/shared/composables/use-entity-editor.ts +77 -0
  62. package/templates/base/src/shared/status.ts +4 -0
  63. package/templates/base/src/shared/tree.ts +41 -0
  64. package/templates/base/src/styles.scss +1 -6
  65. package/templates/base/tests/menu-policy.test.ts.template +89 -0
  66. package/templates/base/tests/session.test.ts.template +38 -27
  67. package/templates/base/vite.config.ts +4 -4
  68. package/templates/blank/README.md +6 -0
  69. package/templates/blank/src/App.vue +11 -0
  70. package/templates/common/AGENTS.md +13 -0
  71. package/templates/common/_editorconfig +15 -0
  72. package/templates/common/_gitattributes +6 -0
  73. package/templates/{base → common}/_gitignore +1 -0
  74. package/templates/common/_prettierignore +6 -0
  75. package/templates/common/docs/DEVELOPMENT.md +26 -0
  76. package/templates/common/eslint.config.mjs +60 -0
  77. package/templates/common/package.json +39 -0
  78. package/templates/common/prettier.config.mjs +8 -0
  79. package/templates/{base → common}/tsconfig.json +2 -5
  80. package/templates/common/vitest.config.ts +3 -0
  81. package/templates/features/examples/src/modules/examples/CrudExampleView.vue +51 -0
  82. package/templates/features/examples/src/{views → modules}/examples/FormExampleView.vue +15 -8
  83. package/templates/features/examples/src/modules/examples/module.ts +27 -0
  84. package/templates/features/system/src/modules/system/config/ConfigView.vue +104 -0
  85. package/templates/features/system/src/modules/system/config/api.ts +38 -0
  86. package/templates/features/system/src/modules/system/config/routes.ts +21 -0
  87. package/templates/features/system/src/modules/system/dictionary/DictionaryItemView.vue +141 -0
  88. package/templates/features/system/src/modules/system/dictionary/DictionaryTypeView.vue +107 -0
  89. package/templates/features/system/src/modules/system/dictionary/api.ts +61 -0
  90. package/templates/features/system/src/modules/system/dictionary/cache.ts +9 -0
  91. package/templates/features/system/src/modules/system/dictionary/routes.ts +32 -0
  92. package/templates/features/system/src/modules/system/dictionary/types.ts +22 -0
  93. package/templates/features/system/src/modules/system/local.ts +348 -0
  94. package/templates/features/system/src/modules/system/menu/MenuView.vue +133 -0
  95. package/templates/features/system/src/modules/system/menu/api.ts +73 -0
  96. package/templates/features/system/src/modules/system/menu/components/MenuEditorDialog.vue +106 -0
  97. package/templates/features/system/src/modules/system/menu/routes.ts +23 -0
  98. package/templates/features/system/src/modules/system/menu/types.ts +18 -0
  99. package/templates/features/system/src/modules/system/module.ts +22 -0
  100. package/templates/features/system/src/modules/system/organization/OrganizationView.vue +134 -0
  101. package/templates/features/system/src/modules/system/organization/api.ts +38 -0
  102. package/templates/features/system/src/modules/system/organization/routes.ts +23 -0
  103. package/templates/features/system/src/modules/system/organization/types.ts +17 -0
  104. package/templates/features/system/src/modules/system/role/RoleView.vue +90 -0
  105. package/templates/features/system/src/modules/system/role/api.ts +40 -0
  106. package/templates/features/system/src/modules/system/role/components/RoleAuthorizationDialog.vue +110 -0
  107. package/templates/features/system/src/modules/system/role/permission-tree.ts +31 -0
  108. package/templates/features/system/src/modules/system/role/routes.ts +24 -0
  109. package/templates/features/system/src/modules/system/role/types.ts +12 -0
  110. package/templates/features/system/src/modules/system/user/UserView.vue +297 -0
  111. package/templates/features/system/src/modules/system/user/api.ts +45 -0
  112. package/templates/features/system/src/modules/system/user/components/UserOrganizationFilter.vue +61 -0
  113. package/templates/features/system/src/modules/system/user/components/UserRoleDialog.vue +93 -0
  114. package/templates/features/system/src/modules/system/user/routes.ts +27 -0
  115. package/templates/features/system/src/modules/system/user/types.ts +28 -0
  116. package/templates/features/system/tests/system.test.ts.template +266 -0
  117. package/templates/modes/http/src/app/services/data-source.ts +124 -0
  118. package/templates/modes/http/src/app/services/http-adapter.ts +128 -0
  119. package/templates/modes/http/tests/http.test.ts.template +186 -133
  120. package/templates/modes/local/src/app/services/data-source.ts +113 -0
  121. package/templates/modes/local/src/app/services/local-database.ts +67 -0
  122. package/templates/modes/local/tests/local.test.ts.template +117 -77
  123. package/templates/presets/standard/src/modules/dashboard/DashboardView.vue +52 -0
  124. package/templates/presets/standard/src/modules/dashboard/components/DashboardSessionStatus.vue +41 -0
  125. package/templates/presets/standard/src/modules/dashboard/components/DashboardShortcuts.vue +51 -0
  126. package/templates/presets/standard/src/modules/profile/ProfileView.vue +109 -0
  127. package/templates/presets/standard/src/modules/profile/api.ts +49 -0
  128. package/templates/presets/standard/src/modules/profile/components/ProfilePasswordForm.vue +68 -0
  129. package/templates/presets/standard/src/modules/profile/local.ts +40 -0
  130. package/templates/presets/standard/src/modules/profile/module.ts +11 -0
  131. package/templates/presets/standard/tests/profile.test.ts.template +72 -0
  132. package/templates/screen/README.md +6 -0
  133. package/templates/screen/src/App.vue +7 -0
  134. package/templates/screen/src/screen/ScreenEntry.vue +18 -0
  135. package/templates/screen/src/screen/ScreenView.vue +48 -0
  136. package/templates/screen/src/screen/components/ScreenMetrics.vue +40 -0
  137. package/templates/screen-auth/src/screen/ScreenEntry.vue +52 -0
  138. package/templates/screen-auth/src/screen/components/ScreenLoginForm.vue +44 -0
  139. package/templates/screen-auth/src/services/session.ts +61 -0
  140. package/templates/screen-auth/tests/session.test.ts.template +54 -0
  141. package/templates/screen-auth-http/src/services/auth-adapter.ts +14 -0
  142. package/templates/screen-auth-http/tests/auth-adapter.test.ts.template +17 -0
  143. package/templates/screen-auth-local-demo/src/services/auth-adapter.ts +15 -0
  144. package/templates/screen-auth-local-demo/tests/auth-adapter.test.ts.template +18 -0
  145. package/templates/screen-data/src/screen/ScreenView.vue +69 -0
  146. package/templates/screen-data/src/services/metrics-types.ts +4 -0
  147. package/templates/screen-data-http/src/services/metrics.ts +20 -0
  148. package/templates/screen-data-http/src/services/request.ts +3 -0
  149. package/templates/screen-data-http/tests/metrics.test.ts.template +21 -0
  150. package/templates/screen-data-local/src/services/metrics.ts +11 -0
  151. package/templates/screen-data-local/tests/metrics.test.ts.template +9 -0
  152. package/templates/screen-http/API-CONTRACT.md +20 -0
  153. package/templates/screen-http/src/services/http.ts +17 -0
  154. package/templates/screen-request-auth/src/services/request.ts +15 -0
  155. package/templates/screen-router/src/App.vue +7 -0
  156. package/templates/screen-router/src/main.ts +13 -0
  157. package/templates/screen-router/src/router.ts +7 -0
  158. package/templates/screen-router/tests/app.test.ts.template +20 -0
  159. package/templates/screen-viewport/src/screen/ScreenViewport.vue +30 -0
  160. package/templates/screen-visualization-charts/src/screen/components/ScreenVisualization.vue +22 -0
  161. package/templates/screen-visualization-cockpit/src/screen/components/ScreenVisualization.vue +33 -0
  162. package/templates/screen-visualization-cockpit/src/screen/components/ScreenWidget.vue +10 -0
  163. package/templates/screen-visualization-datav/src/screen/components/ScreenVisualization.vue +11 -0
  164. package/templates/vben-compatible/MIGRATION.md +2 -0
  165. package/templates/vben-compatible/src/{views/migration → modules/vben-migration}/VbenFormView.vue +2 -1
  166. package/templates/vben-compatible/src/{views/migration → modules/vben-migration}/VbenUsersView.vue +3 -2
  167. package/templates/vben-compatible/src/modules/vben-migration/components/VbenFormExample.vue +64 -0
  168. package/templates/vben-compatible/src/{components/migration → modules/vben-migration/components}/VbenUsers.vue +73 -64
  169. package/templates/vben-compatible/src/modules/vben-migration/local.ts +68 -0
  170. package/templates/vben-compatible/src/modules/vben-migration/module.ts +42 -0
  171. package/templates/vue/index.html +12 -0
  172. package/templates/vue/src/main.ts +5 -0
  173. package/templates/vue/src/styles.css +19 -0
  174. package/templates/vue/tests/app.test.ts.template +10 -0
  175. package/templates/vue/vite.config.ts +9 -0
  176. package/templates/vue/vitest.config.ts +4 -0
  177. package/templates/base/eslint.config.mjs +0 -8
  178. package/templates/base/src/components/app/AppHeaderActions.vue +0 -34
  179. package/templates/base/src/router/index.ts +0 -86
  180. package/templates/base/src/router/views.ts +0 -16
  181. package/templates/base/src/services/contracts.ts +0 -29
  182. package/templates/base/src/services/session-runtime.ts +0 -137
  183. package/templates/base/src/views/error/ForbiddenView.vue +0 -25
  184. package/templates/base/vitest.config.ts +0 -3
  185. package/templates/features/examples/src/modules/examples.ts +0 -10
  186. package/templates/features/examples/src/views/examples/CrudExampleView.vue +0 -30
  187. package/templates/features/system/src/business/system/entities.ts +0 -93
  188. package/templates/features/system/src/modules/system.ts +0 -28
  189. package/templates/features/system/src/views/system/SystemEntityView.vue +0 -85
  190. package/templates/modes/http/src/services/data-source.ts +0 -120
  191. package/templates/modes/http/src/services/http-adapter.ts +0 -124
  192. package/templates/modes/local/src/services/data-source.ts +0 -176
  193. package/templates/vben-compatible/src/components/migration/VbenFormExample.vue +0 -34
  194. package/templates/vben-compatible/src/modules/vben.ts +0 -17
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # create-lumal-admin
2
2
 
3
+ ## 0.0.6-beta (2026-10-25)
4
+
5
+ ### Minor Changes
6
+
7
+ - 使用 Clack 键盘向导、功能注册表和创建前摘要确认,保留参数与非交互调用。
8
+ - 按 `app/modules/shared` 组织生成源码;系统管理七页独立实现,开发示例和迁移示例独立分组。
9
+ - 增加模块级强类型服务、角色授权、机构和菜单树、字典缓存、配置表单、工作台和个人中心。
10
+ - 加固远程菜单、外链、iframe 与权限刷新,保留 Local/HTTP 的失败传播和会话隔离。
11
+ - 增加真实 PTY、可选模块组合、生产浏览器业务测试及可复现体积比较。
12
+ - 新增 create-lumal binary 和 Admin/Screen/Blank 项目类型,不发布另一个未经验证的 create-lumal npm 包。
13
+ - Screen 的认证、数据、路由、Charts/DataV/Cockpit 和视口适配按需生成;Blank 默认仅依赖 Vue。
14
+ - 统一 ESLint/Prettier/EditorConfig、测试与 check、分层 AI 开发规范,生成依赖精确同步为 0.0.6-beta。
15
+
3
16
  ## 0.0.5-beta (2026-10-20)
4
17
 
5
18
  ### Minor Changes
package/README.md CHANGED
@@ -1,26 +1,52 @@
1
1
  # create-lumal-admin
2
2
 
3
- `create-lumal-admin` 是 Lumal 的轻量后台基座脚手架,用于生成通过公开包入口消费 `@lumal/core`、`@lumal/icons` 和 `@lumal/icons-vue` 的 Vue 应用。
3
+ `create-lumal-admin` 保留轻量后台入口,同时提供通用 `create-lumal` 二进制,可生成 Admin、Screen 或 Blank。
4
+ 本文面向 `0.0.6-beta`,实际版本可用性以 registry 为准;发布核验前使用本包候选 tarball。
5
+ 通用 binary 由本包分发,没有新增独立 `create-lumal` npm 包,不能把 `pnpm create lumal` 当成已发布命令。
6
+
7
+ ## 项目类型与可选能力
8
+
9
+ ```bash
10
+ pnpm --package=create-lumal-admin@0.0.6-beta dlx create-lumal my-blank --template blank --no-interactive
11
+ pnpm --package=create-lumal-admin@0.0.6-beta dlx create-lumal my-screen --template screen --no-interactive
12
+ pnpm --package=create-lumal-admin@0.0.6-beta dlx create-lumal my-api-screen --template screen --auth http --data http --router-mode history --no-interactive
13
+ pnpm --package=create-lumal-admin@0.0.6-beta dlx create-lumal my-datav --template screen --visualization datav --viewport contain --no-interactive
14
+ ```
15
+
16
+ Blank 只安装 Vue 运行时。Screen 默认没有 Router、认证、API、Admin 或可视化依赖,
17
+ `--auth none|local-demo|http`、`--data none|local|http`、`--router-mode none|hash|history`
18
+ 分别控制认证、业务数据和路由;HTTP 认证本身需要网络,不受业务数据模式影响。
19
+ `--visualization none|charts|datav|cockpit` 只加入所选可视化,Cockpit 使用 runtime/external,
20
+ 不加载 Designer;DataV 数字/边框不安装 ECharts。
21
+
22
+ `--viewport disabled|responsive|contain|width|vw` 默认 responsive,无额外视口包。
23
+ contain 按设计宽高完整等比缩放,width 可能纵向滚动,vw 提供实际容器单位、不全局转换CSS。
24
+ 历史实验参数 scale 是 contain 别名。设计尺寸在生成的 ScreenViewport 中显式配置,
25
+ 登录栏独立占位,不能把整屏高度误当内容高度。详见仓库 `docs/screen-viewport-guide.md`。
26
+ 所有项目生成相同语义的 lint、format:check、typecheck、test、build 和 check。
4
27
 
5
28
  ## 使用
6
29
 
7
- 环境要求:Node.js `>=22.12.0`、pnpm `10.33.0`。以下命令面向 `0.0.5-beta`,
30
+ 环境要求:Node.js `>=22.12.0`、pnpm `10.33.0`。以下命令面向 `0.0.6-beta`,
8
31
  显式指定版本,不依赖 npm 的 `latest`。源码开发时以真实 tarball 验证独立消费者,
9
32
  不使用旧版 CLI 代替新版模板能力。
10
33
  在线文档:https://lumal.cuteyuchen.top/packages/create-lumal-admin。
11
34
 
12
35
  ```bash
13
- pnpm create lumal-admin@0.0.5-beta my-admin
14
- pnpm create lumal-admin@0.0.5-beta my-admin-http --api-mode http
36
+ pnpm create lumal-admin@0.0.6-beta my-admin
37
+ pnpm create lumal-admin@0.0.6-beta my-admin-http --api-mode http
15
38
  ```
16
39
 
17
- 在 TTY 中依次选择目录、npm 名称、预设、数据源、路由和业务模块。默认
40
+ 本版模块化向导不会覆盖历史发布版本,不能用旧 CLI 代替本地构建或候选 tarball 验收。
41
+
42
+ 在 TTY 中依次选择目录、npm 名称、预设、数据源、路由和业务模块。单选使用上下方向键和
43
+ Enter,多选使用 Space,最后展示摘要并确认,确认前不写文件。Ctrl+C / Escape 取消不残留文件。默认
18
44
  `standard / local / hash`。CI、非 TTY 或 `--no-interactive` 均使用确定性默认值,不等待输入。
19
45
 
20
46
  ```bash
21
- pnpm create lumal-admin@0.0.5-beta my-admin --preset standard --api-mode http --router-mode history --no-interactive
22
- pnpm create lumal-admin@0.0.5-beta my-admin-v5 --preset vben-compatible
23
- pnpm create lumal-admin@0.0.5-beta my-minimal --preset minimal
47
+ pnpm create lumal-admin@0.0.6-beta my-admin --preset standard --api-mode http --router-mode history --no-interactive
48
+ pnpm create lumal-admin@0.0.6-beta my-admin-v5 --preset vben-compatible
49
+ pnpm create lumal-admin@0.0.6-beta my-minimal --preset minimal
24
50
  ```
25
51
 
26
52
  | 参数 | 取值 |
@@ -45,7 +71,7 @@ pnpm build
45
71
  pnpm preview
46
72
  ```
47
73
 
48
- ## 生成内容
74
+ ## Admin 生成内容
49
75
 
50
76
  - Vue 3 + TypeScript + Vite。
51
77
  - Element Plus 作为 UI 基础。
@@ -57,6 +83,9 @@ pnpm preview
57
83
  - 主题切换、布局与标签偏好持久化、全局设置抽屉。
58
84
  - 统一应用服务、真实 HTTP 认证与显式后端 adapter。
59
85
  - Element Plus、Vue 和 Lumal 公共能力的明确 vendor 分包配置。
86
+ - `src/app` 基础设施、`modules` 独立业务、`shared` 共享能力;每个 module.ts 注册菜单、懒加载器与真实权限。
87
+ - 系统管理父路由及七个独立页面;用户批量/角色分配、独立授权树、菜单和机构树、字典关联、配置表单。
88
+ - standard 工作台和个人中心;examples 与 vben-migration 各有独立目录和父菜单。
60
89
 
61
90
  脚手架生成的项目只通过 `@lumal/core`、`@lumal/icons`、`@lumal/icons-vue` 等公开包入口消费能力,不依赖 monorepo 内部源码路径。
62
91
 
@@ -91,7 +120,7 @@ History 部署需要服务器回退 `index.html`,不应把 API 请求回退到
91
120
  ## 维护与验收
92
121
 
93
122
  `src/cli.ts` 负责参数和交互,`create.ts` 负责安全写入,`templates.ts` 组合
94
- `templates/base`、`modes`、`features` 和 `vben-compatible` 真实资源。
123
+ `templates/base`、`modes`、`features`、`presets/standard` 和 `vben-compatible` 真实资源。
95
124
  资源随 npm tarball 发布,不依赖工作区源码。
96
125
 
97
126
  仓库运行 `pnpm build` 后执行 `pnpm test:create-consumer`:真实 tarball CLI、
package/dist/cli.d.ts CHANGED
@@ -3,12 +3,18 @@ export declare function parseCliArgs(args: string[]): {
3
3
  target: string;
4
4
  name: string | undefined;
5
5
  apiMode: "http" | "local" | undefined;
6
+ template: "admin" | "blank" | "screen" | undefined;
7
+ auth: "http" | "none" | "local-demo" | undefined;
8
+ data: "http" | "local" | "none" | undefined;
9
+ visualization: "none" | "charts" | "datav" | "cockpit" | undefined;
10
+ viewport: "disabled" | "responsive" | "width" | "contain" | "scale" | "vw" | undefined;
6
11
  preset: "minimal" | "standard" | "vben-compatible" | undefined;
7
- routerMode: "hash" | "history" | undefined;
8
- features: ("examples" | "system")[] | undefined;
12
+ routerMode: "hash" | "history" | "none" | undefined;
13
+ features: import("./types.js").AdminFeature[] | undefined;
9
14
  help: boolean | undefined;
10
15
  version: boolean | undefined;
11
16
  interactive: boolean;
12
17
  };
13
- export declare function main(args?: string[]): Promise<void>;
18
+ export declare function main(args?: string[], unified?: boolean): Promise<void>;
19
+ export declare function canInteract(): boolean;
14
20
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAWA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;;;;;;;;;;EAqC1C;AAeD,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BtE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAaA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;EA+C1C;AAqBD,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiNvF;AAoBD,wBAAgB,WAAW,IAAI,OAAO,CAIrC"}
package/dist/cli.js CHANGED
@@ -2,11 +2,13 @@
2
2
  import { realpathSync } from 'node:fs';
3
3
  import { basename, resolve } from 'node:path';
4
4
  import process from 'node:process';
5
- import { createInterface } from 'node:readline/promises';
5
+ import { PassThrough } from 'node:stream';
6
6
  import { pathToFileURL } from 'node:url';
7
7
  import { parseArgs } from 'node:util';
8
- import { createLumalAdminProject } from './create.js';
9
- import { apiModes, features, presets, routerModes } from './presets.js';
8
+ import { cancel, confirm, intro, isCancel, multiselect, note, outro, select, spinner, text } from '@clack/prompts';
9
+ import { assertTargetDirectory } from './create.js';
10
+ import { apiModes, assertPackageName, availableFeatures, defaultFeatures, featureDefinitions, features, presets, routerModes } from './presets.js';
11
+ import { createLumalProject, projectRouterModes, projectTemplates, resolveProjectOptions, screenAuthModes, screenDataModes, screenViewports, screenVisualizations } from './projects.js';
10
12
  import { getVersion } from './templates.js';
11
13
  export function parseCliArgs(args) {
12
14
  const { values, positionals } = parseArgs({
@@ -15,6 +17,11 @@ export function parseCliArgs(args) {
15
17
  strict: true,
16
18
  options: {
17
19
  'api-mode': { type: 'string' },
20
+ 'template': { type: 'string' },
21
+ 'auth': { type: 'string' },
22
+ 'data': { type: 'string' },
23
+ 'visualization': { type: 'string' },
24
+ 'viewport': { type: 'string' },
18
25
  'features': { type: 'string' },
19
26
  'help': { type: 'boolean', short: 'h' },
20
27
  'name': { type: 'string' },
@@ -38,8 +45,13 @@ export function parseCliArgs(args) {
38
45
  target: positionals[0],
39
46
  name: values.name,
40
47
  apiMode: choice('api-mode', values['api-mode'], apiModes),
48
+ template: choice('template', values.template, projectTemplates),
49
+ auth: choice('auth', values.auth, screenAuthModes),
50
+ data: choice('data', values.data, screenDataModes),
51
+ visualization: choice('visualization', values.visualization, screenVisualizations),
52
+ viewport: choice('viewport', values.viewport, screenViewports),
41
53
  preset: choice('preset', values.preset, presets),
42
- routerMode: choice('router-mode', values['router-mode'], routerModes),
54
+ routerMode: choice('router-mode', values['router-mode'], projectRouterModes),
43
55
  features: selected,
44
56
  help: values.help,
45
57
  version: values.version,
@@ -49,8 +61,14 @@ export function parseCliArgs(args) {
49
61
  const help = `用法:pnpm create lumal-admin [目录] [选项]
50
62
 
51
63
  --preset minimal|standard|vben-compatible 模板(默认 standard)
64
+ --template admin|screen|blank 项目类型(旧入口默认 admin)
52
65
  --api-mode local|http 数据源(默认 local)
53
- --router-mode hash|history 路由(默认 hash)
66
+ --router-mode none|hash|history 路由(Admin 默认 hash;Screen/Blank 默认 none)
67
+ Admin 仅 hash|history;Blank 仅 none
68
+ --auth none|local-demo|http Screen 认证(默认 none)
69
+ --data none|local|http Screen 业务数据(默认 none)
70
+ --visualization none|charts|datav|cockpit Screen 可视化(默认 none)
71
+ --viewport disabled|responsive|contain|width|vw Screen 适配(scale 为 contain 别名)
54
72
  --features system,examples|none 业务模块(标准预设默认全部)
55
73
  --name <npm包名> 项目名称(默认目录名)
56
74
  --no-interactive 禁用交互,CI/非 TTY 自动禁用
@@ -58,8 +76,10 @@ const help = `用法:pnpm create lumal-admin [目录] [选项]
58
76
  -v, --version 显示版本
59
77
 
60
78
  非空目录拒绝覆盖;HTTP 模式必须自行配置后端。`;
61
- export async function main(args = process.argv.slice(2)) {
79
+ export async function main(args = process.argv.slice(2), unified = false) {
62
80
  const options = parseCliArgs(args);
81
+ if (!unified)
82
+ options.template ??= 'admin';
63
83
  if (options.help) {
64
84
  console.log(help);
65
85
  return;
@@ -68,27 +88,224 @@ export async function main(args = process.argv.slice(2)) {
68
88
  console.log(await getVersion());
69
89
  return;
70
90
  }
71
- if (options.interactive && process.stdin.isTTY && process.stdout.isTTY && !process.env.CI) {
72
- const rl = createInterface({ input: process.stdin, output: process.stdout });
91
+ const interactive = canInteract()
92
+ && options.interactive;
93
+ if (interactive) {
94
+ intro(unified ? '创建 Lumal 项目' : '创建 Lumal Admin');
95
+ const input = new PassThrough();
96
+ const previousRawMode = process.stdin.isRaw;
97
+ // Clack 每题关闭 readline;保持原始终端为 raw,避免 Windows 在题间启动 cooked read。
98
+ Object.assign(input, { isTTY: true, setRawMode: () => process.stdin.setRawMode(true) });
99
+ process.stdin.setRawMode(true);
100
+ process.stdin.pipe(input);
101
+ // 每一步的取消都发生在首次文件写入之前。
73
102
  try {
74
- options.target ??= (await rl.question('项目目录 [lumal-admin]:')).trim() || 'lumal-admin';
75
- options.name ??= (await rl.question(`npm 项目名称 [${basename(resolve(options.target))}]:`)).trim() || basename(resolve(options.target));
76
- options.preset ??= parseCliArgs(['--preset', (await rl.question('模板 minimal / standard / vben-compatible [standard]:')).trim() || 'standard']).preset;
77
- options.apiMode ??= parseCliArgs(['--api-mode', (await rl.question('数据源 local / http [local]:')).trim() || 'local']).apiMode;
78
- options.routerMode ??= parseCliArgs(['--router-mode', (await rl.question('路由 hash / history [hash]:')).trim() || 'hash']).routerMode;
79
- if (options.preset !== 'minimal')
80
- options.features ??= parseCliArgs(['--features', (await rl.question('可选能力 system,examples / none [system,examples]:')).trim() || 'system,examples']).features;
103
+ options.target ??= await answer(text({
104
+ input,
105
+ message: '项目目录',
106
+ placeholder: 'lumal-admin',
107
+ defaultValue: 'lumal-admin',
108
+ validate: value => validation(() => assertTargetDirectory(value?.trim() || 'lumal-admin')),
109
+ }));
110
+ await assertTargetDirectory(options.target);
111
+ const defaultName = basename(resolve(options.target));
112
+ options.name ??= await answer(text({
113
+ input,
114
+ message: 'npm 项目名称',
115
+ placeholder: defaultName,
116
+ defaultValue: defaultName,
117
+ validate: value => validation(() => assertPackageName(value?.trim() || defaultName)),
118
+ }));
119
+ assertPackageName(options.name);
120
+ options.template ??= await answer(select({
121
+ input,
122
+ message: '项目类型',
123
+ initialValue: 'admin',
124
+ options: [
125
+ { value: 'admin', label: 'Admin', hint: '完整管理后台' },
126
+ { value: 'screen', label: 'Screen', hint: '独立大屏,无后台布局' },
127
+ { value: 'blank', label: 'Blank', hint: '仅 Vue + TypeScript + Vite' },
128
+ ],
129
+ }));
130
+ if (options.template === 'admin') {
131
+ options.preset ??= await answer(select({
132
+ input,
133
+ message: '项目模板',
134
+ initialValue: 'standard',
135
+ options: [
136
+ { value: 'minimal', label: 'Minimal', hint: '极简开发基座' },
137
+ { value: 'standard', label: 'Standard', hint: '完整轻量后台,推荐' },
138
+ { value: 'vben-compatible', label: 'Vben Compatible', hint: '支持 Vben 5 高频业务 API 迁移' },
139
+ ],
140
+ }));
141
+ options.apiMode ??= await answer(select({
142
+ input,
143
+ message: '数据源模式',
144
+ initialValue: 'local',
145
+ options: [
146
+ { value: 'local', label: 'Local Mock', hint: '开箱即用的本地开发演示数据' },
147
+ { value: 'http', label: 'HTTP API', hint: '对接真实后端接口' },
148
+ ],
149
+ }));
150
+ options.routerMode ??= await answer(select({
151
+ input,
152
+ message: '路由模式',
153
+ initialValue: 'hash',
154
+ options: [
155
+ { value: 'hash', label: 'Hash', hint: '部署简单' },
156
+ { value: 'history', label: 'History', hint: '服务端需配置 SPA fallback' },
157
+ ],
158
+ }));
159
+ const available = availableFeatures(options.preset);
160
+ if (options.features === undefined) {
161
+ options.features = available.length
162
+ ? await answer(multiselect({
163
+ input,
164
+ message: '可选功能(Space 勾选,方向键移动,Enter 确认)',
165
+ options: available.map(value => ({ value, ...featureDefinitions[value] })),
166
+ initialValues: defaultFeatures(options.preset),
167
+ required: false,
168
+ }))
169
+ : [];
170
+ }
171
+ }
172
+ else if (options.template === 'screen') {
173
+ options.auth ??= await answer(select({
174
+ input,
175
+ message: 'Screen 认证',
176
+ initialValue: 'none',
177
+ options: [
178
+ { value: 'none', label: 'None', hint: '访客访问' },
179
+ { value: 'local-demo', label: 'Local Demo', hint: '仅开发演示,生产禁用' },
180
+ { value: 'http', label: 'HTTP', hint: '包含登录与刷新网络请求,与业务数据独立' },
181
+ ],
182
+ }));
183
+ options.data ??= options.apiMode ?? await answer(select({
184
+ input,
185
+ message: 'Screen 业务数据',
186
+ initialValue: 'none',
187
+ options: [
188
+ { value: 'none', label: 'None', hint: '纯静态页面' },
189
+ { value: 'local', label: 'Local', hint: '显式本地示例' },
190
+ { value: 'http', label: 'HTTP', hint: '真实接口,失败不回退' },
191
+ ],
192
+ }));
193
+ options.routerMode ??= await answer(select({
194
+ input,
195
+ message: 'Screen 路由',
196
+ initialValue: 'none',
197
+ options: [
198
+ { value: 'none', label: 'None', hint: '真正单页,无 Router 依赖' },
199
+ ...routerModes.map(value => ({ value, label: value === 'hash' ? 'Hash' : 'History' })),
200
+ ],
201
+ }));
202
+ options.visualization ??= await answer(select({
203
+ input,
204
+ message: 'Screen 可视化',
205
+ initialValue: 'none',
206
+ options: [
207
+ { value: 'none', label: 'None', hint: '不安装图表或编排依赖' },
208
+ { value: 'charts', label: 'Charts', hint: '按需注册 ECharts 引擎' },
209
+ { value: 'datav', label: 'DataV', hint: '数字与边框独立组件,无 Cockpit' },
210
+ { value: 'cockpit', label: 'Cockpit', hint: '仅 runtime,复杂编排时选择' },
211
+ ],
212
+ }));
213
+ options.viewport ??= await answer(select({
214
+ input,
215
+ message: 'Screen 适配',
216
+ initialValue: 'responsive',
217
+ options: [
218
+ { value: 'responsive', label: 'Responsive', hint: '普通响应式,无额外视口包' },
219
+ { value: 'contain', label: 'Contain', hint: '完整等比缩放,可能留白' },
220
+ { value: 'width', label: 'Width', hint: '按宽缩放,可能纵向滚动' },
221
+ { value: 'vw', label: 'Container units', hint: '局部容器尺寸变量,不全局转换 CSS' },
222
+ { value: 'disabled', label: 'Disabled', hint: '不生成适配代码' },
223
+ ],
224
+ }));
225
+ }
226
+ const resolved = resolveProjectOptions({ ...options, name: options.name, targetDir: options.target });
227
+ note([
228
+ `项目名称:${resolved.name}`,
229
+ `目标目录:${resolve(resolved.targetDir)}`,
230
+ `项目类型:${resolved.template}`,
231
+ ...('preset' in resolved
232
+ ? [
233
+ `模板:${resolved.preset}`,
234
+ `数据源:${resolved.apiMode}`,
235
+ `功能模块:${resolved.features.join('、') || '无'}`,
236
+ ]
237
+ : [
238
+ `认证:${resolved.auth}${resolved.auth === 'http' ? '(包含认证网络请求)' : ''}`,
239
+ `业务数据:${resolved.data}`,
240
+ `可视化:${resolved.visualization}`,
241
+ `适配:${resolved.viewport}`,
242
+ ]),
243
+ `路由:${resolved.routerMode}`,
244
+ ].join('\n'), '配置摘要');
245
+ if (!await answer(confirm({ input, message: '确认创建项目?', active: '创建', inactive: '取消' })))
246
+ throw new PromptCancelled();
247
+ }
248
+ catch (error) {
249
+ if (!(error instanceof PromptCancelled))
250
+ throw error;
251
+ cancel('已取消,未创建任何文件。');
252
+ return;
81
253
  }
82
254
  finally {
83
- rl.close();
255
+ process.stdin.unpipe(input);
256
+ input.destroy();
257
+ process.stdin.setRawMode(previousRawMode);
258
+ process.stdin.pause();
84
259
  }
85
260
  }
86
261
  const targetDir = resolve(options.target ?? 'lumal-admin');
87
- const result = await createLumalAdminProject({ ...options, name: options.name ?? basename(targetDir), targetDir });
88
- console.log(`已创建 ${result.preset} / ${result.apiMode} / ${result.routerMode} 项目:${result.targetDir}`);
262
+ const controller = new AbortController();
263
+ const abort = () => controller.abort(new Error('用户取消创建'));
264
+ const progress = interactive ? spinner({ onCancel: abort }) : undefined;
265
+ process.once('SIGINT', abort);
266
+ progress?.start('正在校验模板并创建文件');
267
+ let result;
268
+ try {
269
+ result = await createLumalProject({ ...options, name: options.name ?? basename(targetDir), targetDir, signal: controller.signal });
270
+ progress?.stop('项目文件创建完成');
271
+ }
272
+ catch (error) {
273
+ progress?.error('创建失败,本次拥有的文件已执行安全回滚');
274
+ throw error;
275
+ }
276
+ finally {
277
+ process.off('SIGINT', abort);
278
+ }
279
+ const summary = 'preset' in result
280
+ ? `${result.preset} / ${result.apiMode} / ${result.routerMode}`
281
+ : `${result.template} / ${result.data} / ${result.routerMode}`;
282
+ console.log(`已创建 ${summary} 项目:${result.targetDir}`);
89
283
  console.log(`下一步:\n cd ${JSON.stringify(result.targetDir)}\n pnpm install\n pnpm dev`);
90
- if (result.apiMode === 'http')
284
+ if (('apiMode' in result && result.apiMode === 'http') || ('data' in result && (result.data === 'http' || result.auth === 'http')))
91
285
  console.log('请先配置 .env.development 中的 VITE_API_BASE_URL,契约见 API-CONTRACT.md。');
286
+ if (interactive)
287
+ outro('创建成功');
288
+ }
289
+ class PromptCancelled extends Error {
290
+ }
291
+ async function answer(result) {
292
+ const value = await result;
293
+ if (isCancel(value))
294
+ throw new PromptCancelled();
295
+ return value;
296
+ }
297
+ async function validation(check) {
298
+ try {
299
+ await check();
300
+ }
301
+ catch (error) {
302
+ return error instanceof Error ? error.message : String(error);
303
+ }
304
+ }
305
+ export function canInteract() {
306
+ return Boolean(process.stdin.isTTY && process.stdout.isTTY
307
+ && typeof process.stdin.setRawMode === 'function'
308
+ && !process.env.CI && process.env.TERM !== 'dumb');
92
309
  }
93
310
  // npm/pnpm 的 node_modules 链接路径与模块真实路径可能不同。
94
311
  if (process.argv[1] && import.meta.url === pathToFileURL(realpathSync(resolve(process.argv[1]))).href) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/create.d.ts CHANGED
@@ -1,3 +1,12 @@
1
- import type { CreateLumalAdminProjectOptions, CreateLumalAdminProjectResult } from './types.js';
1
+ import type { CreateLumalAdminProjectOptions, CreateLumalAdminProjectResult, TemplateFile } from './types.js';
2
+ export declare function assertTargetDirectory(input: string): Promise<void>;
2
3
  export declare function createLumalAdminProject(input: CreateLumalAdminProjectOptions): Promise<CreateLumalAdminProjectResult>;
4
+ /** 所有项目复用同一套目录校验、文件所有权与取消回滚。 */
5
+ export declare function writeProjectFiles(input: {
6
+ targetDir: string;
7
+ signal?: AbortSignal;
8
+ }, files: TemplateFile[]): Promise<{
9
+ targetDir: string;
10
+ createdFiles: string[];
11
+ }>;
3
12
  //# sourceMappingURL=create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAA;AAM/F,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,6BAA6B,CAAC,CAkFxC"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM7G,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxE;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,6BAA6B,CAAC,CAIxC;AAED,gCAAgC;AAChC,wBAAsB,iBAAiB,CACrC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,EAClD,KAAK,EAAE,YAAY,EAAE,GACpB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8DxD"}
package/dist/create.js CHANGED
@@ -2,9 +2,10 @@ import { lstat, mkdir, open, readdir, rmdir, unlink } from 'node:fs/promises';
2
2
  import { dirname, join, parse, resolve } from 'node:path';
3
3
  import { resolveOptions } from './presets.js';
4
4
  import { composeTemplates } from './templates.js';
5
- export async function createLumalAdminProject(input) {
6
- const options = resolveOptions(input);
7
- const targetDir = resolve(options.targetDir);
5
+ export async function assertTargetDirectory(input) {
6
+ if (!input.trim() || /\p{Cc}/u.test(input))
7
+ throw new Error('目标目录不能为空或包含控制字符');
8
+ const targetDir = resolve(input);
8
9
  if (targetDir === parse(targetDir).root)
9
10
  throw new Error('不能在文件系统根目录创建项目');
10
11
  const stat = await lstat(targetDir).catch((error) => {
@@ -26,8 +27,18 @@ export async function createLumalAdminProject(input) {
26
27
  if (parent?.isSymbolicLink())
27
28
  throw new Error('目标祖先目录不能包含符号链接');
28
29
  }
29
- // 先读取、校验全部发布资源,再开始写入。回滚从不递归删除目标目录。
30
+ }
31
+ export async function createLumalAdminProject(input) {
32
+ const options = resolveOptions(input);
30
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
+ // 先读取、校验全部发布资源,再开始写入。回滚从不递归删除目标目录。
31
42
  const ownedFiles = [];
32
43
  const ownedDirectories = [];
33
44
  async function ensureDirectory(directory) {
@@ -54,6 +65,7 @@ export async function createLumalAdminProject(input) {
54
65
  try {
55
66
  await ensureDirectory(targetDir);
56
67
  for (const file of files) {
68
+ input.signal?.throwIfAborted();
57
69
  const filePath = join(targetDir, file.path);
58
70
  await ensureDirectory(dirname(filePath));
59
71
  const handle = await open(filePath, 'wx');
@@ -65,6 +77,7 @@ export async function createLumalAdminProject(input) {
65
77
  await handle.close();
66
78
  }
67
79
  }
80
+ input.signal?.throwIfAborted();
68
81
  }
69
82
  catch (error) {
70
83
  const cleanupErrors = [];
@@ -81,6 +94,6 @@ export async function createLumalAdminProject(input) {
81
94
  throw new AggregateError([error, ...cleanupErrors], '创建失败,部分文件清理失败,请检查目标目录');
82
95
  throw error;
83
96
  }
84
- return { ...options, targetDir, createdFiles: files.map(file => file.path) };
97
+ return { targetDir, createdFiles: files.map(file => file.path) };
85
98
  }
86
99
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
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 { AdminFeature, AdminPreset, ApiMode, CreateLumalAdminProjectOptions, CreateLumalAdminProjectResult, RouterMode, } from './types.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,YAAY,EACZ,WAAW,EACX,OAAO,EACP,8BAA8B,EAC9B,6BAA6B,EAC7B,UAAU,GACX,MAAM,YAAY,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"}