zard-cli 1.0.0-beta.99 → 1.0.1

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 (258) hide show
  1. package/README.md +98 -36
  2. package/commands/add/component-installer.d.ts +3 -0
  3. package/commands/add/component-installer.d.ts.map +1 -1
  4. package/commands/add/component-installer.js +31 -8
  5. package/commands/add/component-installer.js.map +1 -1
  6. package/commands/add/component-selector.d.ts +6 -0
  7. package/commands/add/component-selector.d.ts.map +1 -1
  8. package/commands/add/component-selector.js +9 -27
  9. package/commands/add/component-selector.js.map +1 -1
  10. package/commands/add/dark-mode-setup.d.ts +2 -0
  11. package/commands/add/dark-mode-setup.d.ts.map +1 -1
  12. package/commands/add/dark-mode-setup.js +16 -11
  13. package/commands/add/dark-mode-setup.js.map +1 -1
  14. package/commands/add/dependency-resolver.d.ts +8 -1
  15. package/commands/add/dependency-resolver.d.ts.map +1 -1
  16. package/commands/add/dependency-resolver.js +87 -16
  17. package/commands/add/dependency-resolver.js.map +1 -1
  18. package/commands/add/index.d.ts.map +1 -1
  19. package/commands/add/index.js +142 -96
  20. package/commands/add/index.js.map +1 -1
  21. package/commands/add/stylesheet-setup.d.ts +3 -0
  22. package/commands/add/stylesheet-setup.d.ts.map +1 -0
  23. package/commands/add/stylesheet-setup.js +92 -0
  24. package/commands/add/stylesheet-setup.js.map +1 -0
  25. package/commands/add/wizard.d.ts +35 -0
  26. package/commands/add/wizard.d.ts.map +1 -0
  27. package/commands/add/wizard.js +299 -0
  28. package/commands/add/wizard.js.map +1 -0
  29. package/commands/init/config-prompter.d.ts +65 -3
  30. package/commands/init/config-prompter.d.ts.map +1 -1
  31. package/commands/init/config-prompter.js +93 -74
  32. package/commands/init/config-prompter.js.map +1 -1
  33. package/commands/init/dependencies.d.ts +1 -8
  34. package/commands/init/dependencies.d.ts.map +1 -1
  35. package/commands/init/dependencies.js +54 -24
  36. package/commands/init/dependencies.js.map +1 -1
  37. package/commands/init/index.d.ts.map +1 -1
  38. package/commands/init/index.js +175 -81
  39. package/commands/init/index.js.map +1 -1
  40. package/commands/init/library-peers.d.ts +28 -0
  41. package/commands/init/library-peers.d.ts.map +1 -0
  42. package/commands/init/library-peers.js +61 -0
  43. package/commands/init/library-peers.js.map +1 -0
  44. package/commands/init/project-kind.d.ts +82 -0
  45. package/commands/init/project-kind.d.ts.map +1 -0
  46. package/commands/init/project-kind.js +166 -0
  47. package/commands/init/project-kind.js.map +1 -0
  48. package/commands/init/steps.d.ts +15 -0
  49. package/commands/init/steps.d.ts.map +1 -0
  50. package/commands/init/steps.js +188 -0
  51. package/commands/init/steps.js.map +1 -0
  52. package/commands/init/tailwind-setup.d.ts +9 -2
  53. package/commands/init/tailwind-setup.d.ts.map +1 -1
  54. package/commands/init/tailwind-setup.js +47 -12
  55. package/commands/init/tailwind-setup.js.map +1 -1
  56. package/commands/init/tsconfig-updater.d.ts +8 -1
  57. package/commands/init/tsconfig-updater.d.ts.map +1 -1
  58. package/commands/init/tsconfig-updater.js +30 -11
  59. package/commands/init/tsconfig-updater.js.map +1 -1
  60. package/commands/init/update-angular-config.d.ts.map +1 -1
  61. package/commands/init/update-angular-config.js +28 -50
  62. package/commands/init/update-angular-config.js.map +1 -1
  63. package/commands/init/vite-setup.d.ts +11 -0
  64. package/commands/init/vite-setup.d.ts.map +1 -0
  65. package/commands/init/vite-setup.js +61 -0
  66. package/commands/init/vite-setup.js.map +1 -0
  67. package/commands/init/wizard.d.ts +33 -0
  68. package/commands/init/wizard.d.ts.map +1 -0
  69. package/commands/init/wizard.js +561 -0
  70. package/commands/init/wizard.js.map +1 -0
  71. package/constants/app.constants.d.ts +17 -0
  72. package/constants/app.constants.d.ts.map +1 -1
  73. package/constants/app.constants.js +39 -16
  74. package/constants/app.constants.js.map +1 -1
  75. package/core/icons/families.d.ts +38 -0
  76. package/core/icons/families.d.ts.map +1 -0
  77. package/core/icons/families.js +26 -0
  78. package/core/icons/families.js.map +1 -0
  79. package/core/icons/icon-map.d.ts +24 -0
  80. package/core/icons/icon-map.d.ts.map +1 -0
  81. package/core/icons/icon-map.js +141 -0
  82. package/core/icons/icon-map.js.map +1 -0
  83. package/core/icons/index.d.ts +107 -0
  84. package/core/icons/index.d.ts.map +1 -0
  85. package/core/icons/index.js +183 -0
  86. package/core/icons/index.js.map +1 -0
  87. package/core/registry/registry-data.d.ts.map +1 -1
  88. package/core/registry/registry-data.js +498 -36
  89. package/core/registry/registry-data.js.map +1 -1
  90. package/core/themes/theme-definitions.d.ts.map +1 -1
  91. package/core/themes/theme-definitions.js +61 -72
  92. package/core/themes/theme-definitions.js.map +1 -1
  93. package/index.js +6 -3
  94. package/index.js.map +1 -1
  95. package/package.json +6 -11
  96. package/ui/blocks.d.ts +71 -0
  97. package/ui/blocks.d.ts.map +1 -0
  98. package/ui/blocks.js +116 -0
  99. package/ui/blocks.js.map +1 -0
  100. package/ui/brand.d.ts +14 -0
  101. package/ui/brand.d.ts.map +1 -0
  102. package/ui/brand.js +35 -0
  103. package/ui/brand.js.map +1 -0
  104. package/ui/engine/animation/index.d.ts +38 -0
  105. package/ui/engine/animation/index.d.ts.map +1 -0
  106. package/ui/engine/animation/index.js +102 -0
  107. package/ui/engine/animation/index.js.map +1 -0
  108. package/ui/engine/ansi/index.d.ts +51 -0
  109. package/ui/engine/ansi/index.d.ts.map +1 -0
  110. package/ui/engine/ansi/index.js +116 -0
  111. package/ui/engine/ansi/index.js.map +1 -0
  112. package/ui/engine/components/index.d.ts +211 -0
  113. package/ui/engine/components/index.d.ts.map +1 -0
  114. package/ui/engine/components/index.js +109 -0
  115. package/ui/engine/components/index.js.map +1 -0
  116. package/ui/engine/cursor/index.d.ts +16 -0
  117. package/ui/engine/cursor/index.d.ts.map +1 -0
  118. package/ui/engine/cursor/index.js +40 -0
  119. package/ui/engine/cursor/index.js.map +1 -0
  120. package/ui/engine/diff/index.d.ts +26 -0
  121. package/ui/engine/diff/index.d.ts.map +1 -0
  122. package/ui/engine/diff/index.js +56 -0
  123. package/ui/engine/diff/index.js.map +1 -0
  124. package/ui/engine/events/index.d.ts +24 -0
  125. package/ui/engine/events/index.d.ts.map +1 -0
  126. package/ui/engine/events/index.js +60 -0
  127. package/ui/engine/events/index.js.map +1 -0
  128. package/ui/engine/focus/index.d.ts +25 -0
  129. package/ui/engine/focus/index.d.ts.map +1 -0
  130. package/ui/engine/focus/index.js +77 -0
  131. package/ui/engine/focus/index.js.map +1 -0
  132. package/ui/engine/frame/index.d.ts +48 -0
  133. package/ui/engine/frame/index.d.ts.map +1 -0
  134. package/ui/engine/frame/index.js +0 -0
  135. package/ui/engine/frame/index.js.map +1 -0
  136. package/ui/engine/index.d.ts +28 -0
  137. package/ui/engine/index.d.ts.map +1 -0
  138. package/ui/engine/index.js +28 -0
  139. package/ui/engine/index.js.map +1 -0
  140. package/ui/engine/input/index.d.ts +36 -0
  141. package/ui/engine/input/index.d.ts.map +1 -0
  142. package/ui/engine/input/index.js +224 -0
  143. package/ui/engine/input/index.js.map +1 -0
  144. package/ui/engine/layout/index.d.ts +42 -0
  145. package/ui/engine/layout/index.d.ts.map +1 -0
  146. package/ui/engine/layout/index.js +241 -0
  147. package/ui/engine/layout/index.js.map +1 -0
  148. package/ui/engine/renderer/index.d.ts +43 -0
  149. package/ui/engine/renderer/index.d.ts.map +1 -0
  150. package/ui/engine/renderer/index.js +619 -0
  151. package/ui/engine/renderer/index.js.map +1 -0
  152. package/ui/engine/scheduler/index.d.ts +22 -0
  153. package/ui/engine/scheduler/index.d.ts.map +1 -0
  154. package/ui/engine/scheduler/index.js +77 -0
  155. package/ui/engine/scheduler/index.js.map +1 -0
  156. package/ui/engine/screen/index.d.ts +39 -0
  157. package/ui/engine/screen/index.d.ts.map +1 -0
  158. package/ui/engine/screen/index.js +255 -0
  159. package/ui/engine/screen/index.js.map +1 -0
  160. package/ui/engine/terminal/index.d.ts +84 -0
  161. package/ui/engine/terminal/index.d.ts.map +1 -0
  162. package/ui/engine/terminal/index.js +235 -0
  163. package/ui/engine/terminal/index.js.map +1 -0
  164. package/ui/engine/testing/index.d.ts +27 -0
  165. package/ui/engine/testing/index.d.ts.map +1 -0
  166. package/ui/engine/testing/index.js +63 -0
  167. package/ui/engine/testing/index.js.map +1 -0
  168. package/ui/engine/theme/index.d.ts +26 -0
  169. package/ui/engine/theme/index.d.ts.map +1 -0
  170. package/ui/engine/theme/index.js +128 -0
  171. package/ui/engine/theme/index.js.map +1 -0
  172. package/ui/engine/utils/index.d.ts +12 -0
  173. package/ui/engine/utils/index.d.ts.map +1 -0
  174. package/ui/engine/utils/index.js +143 -0
  175. package/ui/engine/utils/index.js.map +1 -0
  176. package/ui/gate.d.ts +19 -0
  177. package/ui/gate.d.ts.map +1 -0
  178. package/ui/gate.js +36 -0
  179. package/ui/gate.js.map +1 -0
  180. package/ui/index.d.ts +18 -0
  181. package/ui/index.d.ts.map +1 -0
  182. package/ui/index.js +18 -0
  183. package/ui/index.js.map +1 -0
  184. package/ui/log-sink.d.ts +24 -0
  185. package/ui/log-sink.d.ts.map +1 -0
  186. package/ui/log-sink.js +35 -0
  187. package/ui/log-sink.js.map +1 -0
  188. package/ui/output.d.ts +14 -0
  189. package/ui/output.d.ts.map +1 -0
  190. package/ui/output.js +28 -0
  191. package/ui/output.js.map +1 -0
  192. package/ui/report.d.ts +30 -0
  193. package/ui/report.d.ts.map +1 -0
  194. package/ui/report.js +45 -0
  195. package/ui/report.js.map +1 -0
  196. package/ui/runner.d.ts +66 -0
  197. package/ui/runner.d.ts.map +1 -0
  198. package/ui/runner.js +135 -0
  199. package/ui/runner.js.map +1 -0
  200. package/ui/style.d.ts +24 -0
  201. package/ui/style.d.ts.map +1 -0
  202. package/ui/style.js +44 -0
  203. package/ui/style.js.map +1 -0
  204. package/ui/testing/fake-tty.d.ts +26 -0
  205. package/ui/testing/fake-tty.d.ts.map +1 -0
  206. package/ui/testing/fake-tty.js +61 -0
  207. package/ui/testing/fake-tty.js.map +1 -0
  208. package/ui/text-input.d.ts +31 -0
  209. package/ui/text-input.d.ts.map +1 -0
  210. package/ui/text-input.js +89 -0
  211. package/ui/text-input.js.map +1 -0
  212. package/ui/theme.d.ts +10 -0
  213. package/ui/theme.d.ts.map +1 -0
  214. package/ui/theme.js +20 -0
  215. package/ui/theme.js.map +1 -0
  216. package/utils/angular-compat.d.ts +21 -0
  217. package/utils/angular-compat.d.ts.map +1 -0
  218. package/utils/angular-compat.js +52 -0
  219. package/utils/angular-compat.js.map +1 -0
  220. package/utils/config.d.ts +29 -0
  221. package/utils/config.d.ts.map +1 -1
  222. package/utils/config.js +50 -4
  223. package/utils/config.js.map +1 -1
  224. package/utils/errors.d.ts +11 -0
  225. package/utils/errors.d.ts.map +1 -1
  226. package/utils/errors.js +14 -0
  227. package/utils/errors.js.map +1 -1
  228. package/utils/get-project-info.d.ts +29 -0
  229. package/utils/get-project-info.d.ts.map +1 -1
  230. package/utils/get-project-info.js +246 -1
  231. package/utils/get-project-info.js.map +1 -1
  232. package/utils/http-client.d.ts.map +1 -1
  233. package/utils/http-client.js +18 -3
  234. package/utils/http-client.js.map +1 -1
  235. package/utils/icon-catalog.d.ts +34 -0
  236. package/utils/icon-catalog.d.ts.map +1 -0
  237. package/utils/icon-catalog.js +63 -0
  238. package/utils/icon-catalog.js.map +1 -0
  239. package/utils/logger.d.ts +13 -1
  240. package/utils/logger.d.ts.map +1 -1
  241. package/utils/logger.js +95 -15
  242. package/utils/logger.js.map +1 -1
  243. package/utils/package-manager.d.ts +42 -1
  244. package/utils/package-manager.d.ts.map +1 -1
  245. package/utils/package-manager.js +204 -11
  246. package/utils/package-manager.js.map +1 -1
  247. package/utils/registry.d.ts +106 -2
  248. package/utils/registry.d.ts.map +1 -1
  249. package/utils/registry.js +155 -21
  250. package/utils/registry.js.map +1 -1
  251. package/utils/schema-version.d.ts +21 -0
  252. package/utils/schema-version.d.ts.map +1 -0
  253. package/utils/schema-version.js +28 -0
  254. package/utils/schema-version.js.map +1 -0
  255. package/utils/source-file.d.ts +40 -0
  256. package/utils/source-file.d.ts.map +1 -0
  257. package/utils/source-file.js +104 -0
  258. package/utils/source-file.js.map +1 -0
@@ -1,12 +1,20 @@
1
+ import { aliasPattern } from '../../utils/config.js';
1
2
  import { logger } from '../../utils/logger.js';
2
3
  import * as commentJson from 'comment-json';
3
4
  import { existsSync } from 'fs';
4
5
  import { writeFile, readFile } from 'node:fs/promises';
5
6
  import * as path from 'path';
6
- export async function updateTsConfig(cwd, config) {
7
- const tsconfigPath = path.join(cwd, 'tsconfig.json');
7
+ /**
8
+ * Writes the alias into the tsconfig the projects actually extend.
9
+ *
10
+ * In an Nx workspace that is `tsconfig.base.json`: the root `tsconfig.json` is
11
+ * inherited by no project, and a mapping written there would never reach the
12
+ * compiler — the alias resolved in the editor and broke in the build.
13
+ */
14
+ export async function updateTsConfig(cwd, config, tsconfigFile = 'tsconfig.json') {
15
+ const tsconfigPath = path.join(cwd, tsconfigFile);
8
16
  if (!existsSync(tsconfigPath)) {
9
- logger.warn('tsconfig.json not found, skipping path configuration');
17
+ logger.warn(`${tsconfigFile} not found, skipping path configuration`);
10
18
  return;
11
19
  }
12
20
  try {
@@ -15,7 +23,7 @@ export async function updateTsConfig(cwd, config) {
15
23
  await writeTsConfig(tsconfigPath, updatedTsConfig);
16
24
  }
17
25
  catch (error) {
18
- logger.warn('Failed to update tsconfig.json paths');
26
+ logger.warn(`Failed to update ${tsconfigFile} paths`);
19
27
  logger.error(error);
20
28
  }
21
29
  }
@@ -27,21 +35,32 @@ function updatePaths(tsconfig, config) {
27
35
  if (!tsconfig.compilerOptions) {
28
36
  tsconfig.compilerOptions = {};
29
37
  }
30
- if (!tsconfig.compilerOptions.baseUrl) {
31
- tsconfig.compilerOptions.baseUrl = './';
32
- }
33
38
  if (!tsconfig.compilerOptions.paths) {
34
39
  tsconfig.compilerOptions.paths = {};
35
40
  }
36
- const pathMappings = {
37
- '@/*': [`${config.baseUrl}/*`],
38
- };
41
+ // The key comes from the chosen alias, not from a fixed `@/*`: someone who
42
+ // configured `@app/components` generates imports with that prefix, and mapping
43
+ // a different one would leave every import in the project unresolved.
39
44
  tsconfig.compilerOptions.paths = {
40
45
  ...tsconfig.compilerOptions.paths,
41
- ...pathMappings,
46
+ [aliasPattern(config.aliases.components)]: [`${pathMappingBase(tsconfig, config)}/*`],
42
47
  };
43
48
  return tsconfig;
44
49
  }
50
+ /**
51
+ * Writes the mapping without introducing `baseUrl`.
52
+ *
53
+ * Declaring `baseUrl` breaks the build on TypeScript 6 — the option became an
54
+ * error and disappears in 7 — and since 4.1 it is no longer necessary: without
55
+ * it, paths are resolved relative to the tsconfig itself. Projects that already
56
+ * declare the option are still honoured, with the mapping written relative to it.
57
+ */
58
+ function pathMappingBase(tsconfig, config) {
59
+ const baseUrl = tsconfig.compilerOptions.baseUrl;
60
+ if (!baseUrl)
61
+ return `./${config.baseUrl}`;
62
+ return path.posix.relative(path.posix.normalize(baseUrl), path.posix.normalize(config.baseUrl)) || '.';
63
+ }
45
64
  async function writeTsConfig(tsconfigPath, tsconfig) {
46
65
  const updatedContent = commentJson.stringify(tsconfig, null, 2);
47
66
  await writeFile(tsconfigPath, updatedContent, 'utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"tsconfig-updater.js","sourceRoot":"","sources":["../../../src/commands/init/tsconfig-updater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,MAAc;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,YAAoB;IAC9C,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC,KAAK,CAAC,eAAe,CAAQ,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,QAAa,EAAE,MAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC9B,QAAQ,CAAC,eAAe,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACtC,QAAQ,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;KAC/B,CAAC;IAEF,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG;QAC/B,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK;QACjC,GAAG,YAAY;KAChB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,QAAa;IAC9D,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"tsconfig-updater.js","sourceRoot":"","sources":["../../../src/commands/init/tsconfig-updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,MAAc,EAAE,YAAY,GAAG,eAAe;IAC9F,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,yCAAyC,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,oBAAoB,YAAY,QAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,YAAoB;IAC9C,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC,KAAK,CAAC,eAAe,CAAQ,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,QAAa,EAAE,MAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC9B,QAAQ,CAAC,eAAe,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,2EAA2E;IAC3E,+EAA+E;IAC/E,sEAAsE;IACtE,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG;QAC/B,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK;QACjC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;KACtF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,QAAa,EAAE,MAAc;IACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;IAEjD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;IAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC;AACzG,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,QAAa;IAC9D,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-angular-config.d.ts","sourceRoot":"","sources":["../../../src/commands/init/update-angular-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAWnD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EpF"}
1
+ {"version":3,"file":"update-angular-config.d.ts","sourceRoot":"","sources":["../../../src/commands/init/update-angular-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA4BnD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCpF"}
@@ -1,11 +1,24 @@
1
1
  import { logger } from '../../utils/logger.js';
2
+ import { arrayRange, lineEndingOf, withImport } from '../../utils/source-file.js';
2
3
  import { existsSync } from 'fs';
3
4
  import * as fsPromises from 'fs/promises';
4
5
  import * as path from 'path';
5
- const ZARD_PROVIDER_IMPORT = (corePath) => `
6
- import { provideZard } from '${corePath}/provider/providezard';
7
- `;
8
- const ZARD_PROVIDER_ENTRY = 'provideZard(),';
6
+ const ZARD_PROVIDER_IMPORT = (corePath) => `import { provideZard } from '${corePath}/provider/providezard';`;
7
+ const ZARD_PROVIDER_ENTRY = 'provideZard()';
8
+ /**
9
+ * Appends the provider to the end of the list.
10
+ *
11
+ * The `]` stays on its own line: the list is code the user will read and edit
12
+ * later, and welding the closing bracket onto the last provider leaves the file
13
+ * crooked the moment the project's Prettier does not run afterwards.
14
+ */
15
+ function withProvider(content, providers, eol) {
16
+ const body = providers.body.replace(/\s+$/, '');
17
+ const entries = body.trim() === '' ? '' : `${body.endsWith(',') ? body : `${body},`}`;
18
+ return (content.slice(0, providers.open) +
19
+ `[${entries}${eol} ${ZARD_PROVIDER_ENTRY},${eol} ]` +
20
+ content.slice(providers.close + 1));
21
+ }
9
22
  /**
10
23
  * Asynchronously reads, modifies, and writes the Angular application configuration file.
11
24
  * @returns {Promise<void>} A promise that resolves when the file operation is complete.
@@ -18,55 +31,20 @@ export async function updateAngularConfig(cwd, config) {
18
31
  }
19
32
  try {
20
33
  await fsPromises.access(appConfigPath);
21
- let content = await fsPromises.readFile(appConfigPath, 'utf8');
22
- // Add new import at the top
23
- if (!content.includes(ZARD_PROVIDER_IMPORT(config.aliases.core).trim())) {
24
- const importRegex = /^import .* from '.*';\n?/gm;
25
- let lastImportMatch = null;
26
- let match;
27
- while ((match = importRegex.exec(content)) !== null) {
28
- lastImportMatch = match;
29
- }
30
- if (lastImportMatch && lastImportMatch.index) {
31
- const insertionIndex = lastImportMatch.index + lastImportMatch[0].length;
32
- content =
33
- content.slice(0, insertionIndex) + ZARD_PROVIDER_IMPORT(config.aliases.core) + content.slice(insertionIndex);
34
- }
35
- else {
36
- content = ZARD_PROVIDER_IMPORT(config.aliases.core) + content;
37
- }
38
- }
39
- else {
40
- logger.warn('Import statement already exists. Skipping.');
41
- }
42
- // Add the provider to the providers array
43
- const providersRegex = /providers:\s*\[([^\]]*?)\]/s;
44
- if (providersRegex.test(content)) {
45
- content = content.replace(providersRegex, (match, providersContent) => {
46
- const entryToCheck = ZARD_PROVIDER_ENTRY.replace(/,$/, '').trim();
47
- if (providersContent.includes(entryToCheck)) {
48
- logger.warn('Provider already exists in the list. Skipping.');
49
- return match;
50
- }
51
- let newProvidersContent;
52
- const trimmedContent = providersContent.trim();
53
- if (trimmedContent === '') {
54
- newProvidersContent = `\n ${ZARD_PROVIDER_ENTRY.trim().replace(/,$/, '')}\n `;
55
- }
56
- else {
57
- const contentWithTrailingComma = trimmedContent.endsWith(',')
58
- ? providersContent
59
- : providersContent.trimEnd() + ',';
60
- newProvidersContent = `${contentWithTrailingComma}\n ${ZARD_PROVIDER_ENTRY}`;
61
- }
62
- return `providers: [${newProvidersContent.replace(/,\s*$/, ',')}]`;
63
- });
64
- }
65
- else {
34
+ const original = await fsPromises.readFile(appConfigPath, 'utf8');
35
+ const eol = lineEndingOf(original);
36
+ const content = withImport(original, ZARD_PROVIDER_IMPORT(config.aliases.core));
37
+ const providers = arrayRange(content, 'providers');
38
+ if (!providers) {
66
39
  logger.error('Could not find the "providers: [...]" array in app.config.ts. The file structure may be unsupported.');
67
40
  return;
68
41
  }
69
- await fsPromises.writeFile(appConfigPath, content, 'utf8');
42
+ if (providers.body.includes(ZARD_PROVIDER_ENTRY)) {
43
+ logger.warn('Provider already exists in the list. Skipping.');
44
+ await fsPromises.writeFile(appConfigPath, content, 'utf8');
45
+ return;
46
+ }
47
+ await fsPromises.writeFile(appConfigPath, withProvider(content, providers, eol), 'utf8');
70
48
  }
71
49
  catch (e) {
72
50
  if (e && typeof e === 'object' && 'code' in e && e.code === 'ENOENT') {
@@ -1 +1 @@
1
- {"version":3,"file":"update-angular-config.js","sourceRoot":"","sources":["../../../src/commands/init/update-angular-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-angular-config.js","sourceRoot":"","sources":["../../../src/commands/init/update-angular-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare function findViteConfig(cwd: string): string | null;
2
+ /**
3
+ * Registers Tailwind as a Vite plugin.
4
+ *
5
+ * In Analog it is Vite that compiles, not the Angular build — a
6
+ * `.postcssrc.json` there is read by nobody, and without the plugin the
7
+ * `@import 'tailwindcss'` the theme writes into the global CSS emits no
8
+ * utilities at all.
9
+ */
10
+ export declare function setupVitePlugin(cwd: string): Promise<void>;
11
+ //# sourceMappingURL=vite-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/init/vite-setup.ts"],"names":[],"mappings":"AAYA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE"}
@@ -0,0 +1,61 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import { arrayRange, lineEndingOf, withImport } from '../../utils/source-file.js';
3
+ import { existsSync } from 'node:fs';
4
+ import { readFile, writeFile } from 'node:fs/promises';
5
+ import * as path from 'node:path';
6
+ const TAILWIND_IMPORT = "import tailwindcss from '@tailwindcss/vite';";
7
+ const TAILWIND_PLUGIN = 'tailwindcss()';
8
+ /** The names Vite accepts, in the order it looks for them. */
9
+ const CONFIG_FILES = ['vite.config.ts', 'vite.config.mts', 'vite.config.js', 'vite.config.mjs'];
10
+ export function findViteConfig(cwd) {
11
+ return CONFIG_FILES.map(name => path.join(cwd, name)).find(existsSync) ?? null;
12
+ }
13
+ /**
14
+ * Registers Tailwind as a Vite plugin.
15
+ *
16
+ * In Analog it is Vite that compiles, not the Angular build — a
17
+ * `.postcssrc.json` there is read by nobody, and without the plugin the
18
+ * `@import 'tailwindcss'` the theme writes into the global CSS emits no
19
+ * utilities at all.
20
+ */
21
+ export async function setupVitePlugin(cwd) {
22
+ const configPath = findViteConfig(cwd);
23
+ if (!configPath) {
24
+ logger.warn('vite.config.ts not found; add the @tailwindcss/vite plugin manually.');
25
+ return;
26
+ }
27
+ const original = await readFile(configPath, 'utf8');
28
+ if (original.includes('@tailwindcss/vite')) {
29
+ logger.info('Tailwind is already registered as a Vite plugin. Skipping.');
30
+ return;
31
+ }
32
+ const withPlugin = registerPlugin(withImport(original, TAILWIND_IMPORT), lineEndingOf(original));
33
+ if (withPlugin === null) {
34
+ logger.warn(`Could not find the "plugins: [...]" array in ${path.basename(configPath)}; add tailwindcss() manually.`);
35
+ return;
36
+ }
37
+ await writeFile(configPath, withPlugin, 'utf8');
38
+ }
39
+ /**
40
+ * Appends `tailwindcss()` to the plugin list.
41
+ *
42
+ * It goes at the end: order matters to Vite, and Analog's plugin has to process
43
+ * the Angular files before Tailwind scans them for classes.
44
+ */
45
+ function registerPlugin(content, eol) {
46
+ const plugins = arrayRange(content, 'plugins');
47
+ if (!plugins)
48
+ return null;
49
+ if (plugins.body.includes(TAILWIND_PLUGIN))
50
+ return content;
51
+ // The existing items' indentation is whatever the file already uses; matching
52
+ // it keeps the new line from standing out when no Prettier runs afterwards.
53
+ const indent = /\n([ \t]+)\S/.exec(plugins.body)?.[1] ?? ' ';
54
+ const closingIndent = indent.slice(0, Math.max(0, indent.length - 2));
55
+ const trimmed = plugins.body.replace(/\s+$/, '');
56
+ const entries = trimmed.trim() ? `${trimmed.endsWith(',') ? trimmed : `${trimmed},`}` : '';
57
+ return (content.slice(0, plugins.open) +
58
+ `[${entries}${eol}${indent}${TAILWIND_PLUGIN},${eol}${closingIndent}]` +
59
+ content.slice(plugins.close + 1));
60
+ }
61
+ //# sourceMappingURL=vite-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-setup.js","sourceRoot":"","sources":["../../../src/commands/init/vite-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,eAAe,GAAG,8CAA8C,CAAC;AACvE,MAAM,eAAe,GAAG,eAAe,CAAC;AAExC,8DAA8D;AAC9D,MAAM,YAAY,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AAEhG,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACjF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEjG,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CACT,gDAAgD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CACzG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,GAAW;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,OAAO,CAAC;IAE3D,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,OAAO,CACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,eAAe,IAAI,GAAG,GAAG,aAAa,GAAG;QACtE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type PresetAnswers } from '../../commands/init/config-prompter.js';
2
+ import { type ProjectKind } from '../../commands/init/project-kind.js';
3
+ import { type InitStep } from '../../commands/init/steps.js';
4
+ import { type LogRecord } from '../../ui/index.js';
5
+ import { type Config } from '../../utils/config.js';
6
+ import { type ProjectInfo } from '../../utils/get-project-info.js';
7
+ export interface InitWizardOptions {
8
+ readonly cwd: string;
9
+ readonly projectInfo: ProjectInfo;
10
+ readonly packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun';
11
+ readonly isReInitializing: boolean;
12
+ /** Skips the final confirmation (`--yes`). */
13
+ readonly skipConfirmation: boolean;
14
+ /**
15
+ * The type asked for with `--type`, if any.
16
+ *
17
+ * The question is still asked — the flag only puts the cursor on what the user
18
+ * already said they wanted, instead of making them find it in the list again.
19
+ */
20
+ readonly presetKind?: ProjectKind;
21
+ /** O projeto pedido em `--project`, pelo mesmo motivo. */
22
+ readonly presetProjectRoot?: string;
23
+ /** What `--css`, `--app-config`, `--base-color` and the alias flags answered — each question opens filled with it. */
24
+ readonly presetAnswers?: PresetAnswers;
25
+ /** Execution steps, built only once the config is ready. */
26
+ buildSteps(config: Config): InitStep[];
27
+ }
28
+ export interface InitWizardResult {
29
+ readonly config: Config;
30
+ readonly logs: readonly LogRecord[];
31
+ }
32
+ export declare function runInitWizard(options: InitWizardOptions): Promise<InitWizardResult>;
33
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../../src/commands/init/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAmD,KAAK,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACvH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAwBL,KAAK,SAAS,EAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,gCAAgC,CAAC;AAuMzF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IACzD,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,sHAAsH;IACtH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,4DAA4D;IAC5D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuVzF"}