zard-cli 1.0.0-beta.103 → 1.0.0-beta.104

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 (234) hide show
  1. package/commands/add/component-installer.d.ts +2 -0
  2. package/commands/add/component-installer.d.ts.map +1 -1
  3. package/commands/add/component-installer.js +9 -4
  4. package/commands/add/component-installer.js.map +1 -1
  5. package/commands/add/component-selector.d.ts +6 -0
  6. package/commands/add/component-selector.d.ts.map +1 -1
  7. package/commands/add/component-selector.js +9 -27
  8. package/commands/add/component-selector.js.map +1 -1
  9. package/commands/add/dark-mode-setup.d.ts.map +1 -1
  10. package/commands/add/dark-mode-setup.js +2 -11
  11. package/commands/add/dark-mode-setup.js.map +1 -1
  12. package/commands/add/dependency-resolver.d.ts +2 -1
  13. package/commands/add/dependency-resolver.d.ts.map +1 -1
  14. package/commands/add/dependency-resolver.js +19 -4
  15. package/commands/add/dependency-resolver.js.map +1 -1
  16. package/commands/add/index.d.ts.map +1 -1
  17. package/commands/add/index.js +116 -86
  18. package/commands/add/index.js.map +1 -1
  19. package/commands/add/wizard.d.ts +31 -0
  20. package/commands/add/wizard.d.ts.map +1 -0
  21. package/commands/add/wizard.js +289 -0
  22. package/commands/add/wizard.js.map +1 -0
  23. package/commands/init/config-prompter.d.ts +49 -3
  24. package/commands/init/config-prompter.d.ts.map +1 -1
  25. package/commands/init/config-prompter.js +84 -74
  26. package/commands/init/config-prompter.js.map +1 -1
  27. package/commands/init/dependencies.d.ts +1 -8
  28. package/commands/init/dependencies.d.ts.map +1 -1
  29. package/commands/init/dependencies.js +47 -18
  30. package/commands/init/dependencies.js.map +1 -1
  31. package/commands/init/index.d.ts.map +1 -1
  32. package/commands/init/index.js +147 -81
  33. package/commands/init/index.js.map +1 -1
  34. package/commands/init/project-kind.d.ts +82 -0
  35. package/commands/init/project-kind.d.ts.map +1 -0
  36. package/commands/init/project-kind.js +166 -0
  37. package/commands/init/project-kind.js.map +1 -0
  38. package/commands/init/steps.d.ts +16 -0
  39. package/commands/init/steps.d.ts.map +1 -0
  40. package/commands/init/steps.js +153 -0
  41. package/commands/init/steps.js.map +1 -0
  42. package/commands/init/tailwind-setup.d.ts +9 -2
  43. package/commands/init/tailwind-setup.d.ts.map +1 -1
  44. package/commands/init/tailwind-setup.js +33 -12
  45. package/commands/init/tailwind-setup.js.map +1 -1
  46. package/commands/init/tsconfig-updater.d.ts +8 -1
  47. package/commands/init/tsconfig-updater.d.ts.map +1 -1
  48. package/commands/init/tsconfig-updater.js +30 -11
  49. package/commands/init/tsconfig-updater.js.map +1 -1
  50. package/commands/init/update-angular-config.d.ts.map +1 -1
  51. package/commands/init/update-angular-config.js +28 -50
  52. package/commands/init/update-angular-config.js.map +1 -1
  53. package/commands/init/vite-setup.d.ts +10 -0
  54. package/commands/init/vite-setup.d.ts.map +1 -0
  55. package/commands/init/vite-setup.js +60 -0
  56. package/commands/init/vite-setup.js.map +1 -0
  57. package/commands/init/wizard.d.ts +30 -0
  58. package/commands/init/wizard.d.ts.map +1 -0
  59. package/commands/init/wizard.js +560 -0
  60. package/commands/init/wizard.js.map +1 -0
  61. package/core/icons/families.d.ts +38 -0
  62. package/core/icons/families.d.ts.map +1 -0
  63. package/core/icons/families.js +26 -0
  64. package/core/icons/families.js.map +1 -0
  65. package/core/icons/icon-map.d.ts +22 -0
  66. package/core/icons/icon-map.d.ts.map +1 -0
  67. package/core/icons/icon-map.js +125 -0
  68. package/core/icons/icon-map.js.map +1 -0
  69. package/core/icons/index.d.ts +107 -0
  70. package/core/icons/index.d.ts.map +1 -0
  71. package/core/icons/index.js +183 -0
  72. package/core/icons/index.js.map +1 -0
  73. package/core/registry/registry-data.d.ts.map +1 -1
  74. package/core/registry/registry-data.js +8 -0
  75. package/core/registry/registry-data.js.map +1 -1
  76. package/index.js +5 -3
  77. package/index.js.map +1 -1
  78. package/package.json +1 -4
  79. package/ui/blocks.d.ts +70 -0
  80. package/ui/blocks.d.ts.map +1 -0
  81. package/ui/blocks.js +116 -0
  82. package/ui/blocks.js.map +1 -0
  83. package/ui/brand.d.ts +14 -0
  84. package/ui/brand.d.ts.map +1 -0
  85. package/ui/brand.js +35 -0
  86. package/ui/brand.js.map +1 -0
  87. package/ui/engine/animation/index.d.ts +39 -0
  88. package/ui/engine/animation/index.d.ts.map +1 -0
  89. package/ui/engine/animation/index.js +103 -0
  90. package/ui/engine/animation/index.js.map +1 -0
  91. package/ui/engine/ansi/index.d.ts +52 -0
  92. package/ui/engine/ansi/index.d.ts.map +1 -0
  93. package/ui/engine/ansi/index.js +117 -0
  94. package/ui/engine/ansi/index.js.map +1 -0
  95. package/ui/engine/components/index.d.ts +211 -0
  96. package/ui/engine/components/index.d.ts.map +1 -0
  97. package/ui/engine/components/index.js +109 -0
  98. package/ui/engine/components/index.js.map +1 -0
  99. package/ui/engine/cursor/index.d.ts +17 -0
  100. package/ui/engine/cursor/index.d.ts.map +1 -0
  101. package/ui/engine/cursor/index.js +41 -0
  102. package/ui/engine/cursor/index.js.map +1 -0
  103. package/ui/engine/diff/index.d.ts +27 -0
  104. package/ui/engine/diff/index.d.ts.map +1 -0
  105. package/ui/engine/diff/index.js +57 -0
  106. package/ui/engine/diff/index.js.map +1 -0
  107. package/ui/engine/events/index.d.ts +24 -0
  108. package/ui/engine/events/index.d.ts.map +1 -0
  109. package/ui/engine/events/index.js +60 -0
  110. package/ui/engine/events/index.js.map +1 -0
  111. package/ui/engine/focus/index.d.ts +25 -0
  112. package/ui/engine/focus/index.d.ts.map +1 -0
  113. package/ui/engine/focus/index.js +77 -0
  114. package/ui/engine/focus/index.js.map +1 -0
  115. package/ui/engine/frame/index.d.ts +48 -0
  116. package/ui/engine/frame/index.d.ts.map +1 -0
  117. package/ui/engine/frame/index.js +0 -0
  118. package/ui/engine/frame/index.js.map +1 -0
  119. package/ui/engine/index.d.ts +28 -0
  120. package/ui/engine/index.d.ts.map +1 -0
  121. package/ui/engine/index.js +28 -0
  122. package/ui/engine/index.js.map +1 -0
  123. package/ui/engine/input/index.d.ts +36 -0
  124. package/ui/engine/input/index.d.ts.map +1 -0
  125. package/ui/engine/input/index.js +224 -0
  126. package/ui/engine/input/index.js.map +1 -0
  127. package/ui/engine/layout/index.d.ts +42 -0
  128. package/ui/engine/layout/index.d.ts.map +1 -0
  129. package/ui/engine/layout/index.js +241 -0
  130. package/ui/engine/layout/index.js.map +1 -0
  131. package/ui/engine/renderer/index.d.ts +43 -0
  132. package/ui/engine/renderer/index.d.ts.map +1 -0
  133. package/ui/engine/renderer/index.js +619 -0
  134. package/ui/engine/renderer/index.js.map +1 -0
  135. package/ui/engine/scheduler/index.d.ts +22 -0
  136. package/ui/engine/scheduler/index.d.ts.map +1 -0
  137. package/ui/engine/scheduler/index.js +77 -0
  138. package/ui/engine/scheduler/index.js.map +1 -0
  139. package/ui/engine/screen/index.d.ts +39 -0
  140. package/ui/engine/screen/index.d.ts.map +1 -0
  141. package/ui/engine/screen/index.js +255 -0
  142. package/ui/engine/screen/index.js.map +1 -0
  143. package/ui/engine/terminal/index.d.ts +84 -0
  144. package/ui/engine/terminal/index.d.ts.map +1 -0
  145. package/ui/engine/terminal/index.js +235 -0
  146. package/ui/engine/terminal/index.js.map +1 -0
  147. package/ui/engine/testing/index.d.ts +27 -0
  148. package/ui/engine/testing/index.d.ts.map +1 -0
  149. package/ui/engine/testing/index.js +63 -0
  150. package/ui/engine/testing/index.js.map +1 -0
  151. package/ui/engine/theme/index.d.ts +27 -0
  152. package/ui/engine/theme/index.d.ts.map +1 -0
  153. package/ui/engine/theme/index.js +129 -0
  154. package/ui/engine/theme/index.js.map +1 -0
  155. package/ui/engine/utils/index.d.ts +12 -0
  156. package/ui/engine/utils/index.d.ts.map +1 -0
  157. package/ui/engine/utils/index.js +143 -0
  158. package/ui/engine/utils/index.js.map +1 -0
  159. package/ui/gate.d.ts +19 -0
  160. package/ui/gate.d.ts.map +1 -0
  161. package/ui/gate.js +36 -0
  162. package/ui/gate.js.map +1 -0
  163. package/ui/index.d.ts +18 -0
  164. package/ui/index.d.ts.map +1 -0
  165. package/ui/index.js +18 -0
  166. package/ui/index.js.map +1 -0
  167. package/ui/log-sink.d.ts +24 -0
  168. package/ui/log-sink.d.ts.map +1 -0
  169. package/ui/log-sink.js +35 -0
  170. package/ui/log-sink.js.map +1 -0
  171. package/ui/output.d.ts +14 -0
  172. package/ui/output.d.ts.map +1 -0
  173. package/ui/output.js +28 -0
  174. package/ui/output.js.map +1 -0
  175. package/ui/report.d.ts +30 -0
  176. package/ui/report.d.ts.map +1 -0
  177. package/ui/report.js +45 -0
  178. package/ui/report.js.map +1 -0
  179. package/ui/runner.d.ts +66 -0
  180. package/ui/runner.d.ts.map +1 -0
  181. package/ui/runner.js +135 -0
  182. package/ui/runner.js.map +1 -0
  183. package/ui/style.d.ts +24 -0
  184. package/ui/style.d.ts.map +1 -0
  185. package/ui/style.js +44 -0
  186. package/ui/style.js.map +1 -0
  187. package/ui/testing/fake-tty.d.ts +26 -0
  188. package/ui/testing/fake-tty.d.ts.map +1 -0
  189. package/ui/testing/fake-tty.js +61 -0
  190. package/ui/testing/fake-tty.js.map +1 -0
  191. package/ui/text-input.d.ts +30 -0
  192. package/ui/text-input.d.ts.map +1 -0
  193. package/ui/text-input.js +87 -0
  194. package/ui/text-input.js.map +1 -0
  195. package/ui/theme.d.ts +10 -0
  196. package/ui/theme.d.ts.map +1 -0
  197. package/ui/theme.js +20 -0
  198. package/ui/theme.js.map +1 -0
  199. package/utils/config.d.ts +26 -0
  200. package/utils/config.d.ts.map +1 -1
  201. package/utils/config.js +41 -1
  202. package/utils/config.js.map +1 -1
  203. package/utils/errors.d.ts +11 -0
  204. package/utils/errors.d.ts.map +1 -1
  205. package/utils/errors.js +14 -0
  206. package/utils/errors.js.map +1 -1
  207. package/utils/get-project-info.d.ts +29 -0
  208. package/utils/get-project-info.d.ts.map +1 -1
  209. package/utils/get-project-info.js +176 -1
  210. package/utils/get-project-info.js.map +1 -1
  211. package/utils/icon-catalog.d.ts +33 -0
  212. package/utils/icon-catalog.d.ts.map +1 -0
  213. package/utils/icon-catalog.js +62 -0
  214. package/utils/icon-catalog.js.map +1 -0
  215. package/utils/logger.d.ts +13 -1
  216. package/utils/logger.d.ts.map +1 -1
  217. package/utils/logger.js +95 -15
  218. package/utils/logger.js.map +1 -1
  219. package/utils/package-manager.d.ts +42 -1
  220. package/utils/package-manager.d.ts.map +1 -1
  221. package/utils/package-manager.js +204 -11
  222. package/utils/package-manager.js.map +1 -1
  223. package/utils/registry.d.ts +42 -2
  224. package/utils/registry.d.ts.map +1 -1
  225. package/utils/registry.js +51 -9
  226. package/utils/registry.js.map +1 -1
  227. package/utils/schema-version.d.ts +20 -0
  228. package/utils/schema-version.d.ts.map +1 -0
  229. package/utils/schema-version.js +27 -0
  230. package/utils/schema-version.js.map +1 -0
  231. package/utils/source-file.d.ts +40 -0
  232. package/utils/source-file.d.ts.map +1 -0
  233. package/utils/source-file.js +104 -0
  234. package/utils/source-file.js.map +1 -0
@@ -1,20 +1,58 @@
1
+ import { bundlerFor, isLibraryKind } from '../../commands/init/project-kind.js';
2
+ import { iconPackagesFor } from '../../core/icons/index.js';
1
3
  import { getProjectInfo } from '../../utils/get-project-info.js';
4
+ import { iconCatalog } from '../../utils/icon-catalog.js';
2
5
  import { logger } from '../../utils/logger.js';
3
- import { installPackages } from '../../utils/package-manager.js';
6
+ import { filterInstalledPackages, installPackagesWithRetry } from '../../utils/package-manager.js';
4
7
  export async function installDependencies(cwd, config, projectInfo) {
5
8
  const info = projectInfo || (await getProjectInfo(cwd));
6
9
  const cdkVersion = getCdkVersion(info.angularVersion);
7
- const deps = [cdkVersion, 'class-variance-authority', 'clsx', 'tailwind-merge', '@ng-icons/core', '@ng-icons/lucide'];
8
- const devDeps = info.hasTailwind
9
- ? ['tailwindcss-animate']
10
- : ['tailwindcss', '@tailwindcss/postcss', 'postcss', 'tailwindcss-animate'];
10
+ // O pacote de ícones sai da família escolhida em `components.json`, e não de
11
+ // uma lista fixa: é o que faz `"icons"` valer alguma coisa no dia em que
12
+ // houver mais de uma família.
13
+ const deps = [
14
+ cdkVersion,
15
+ 'class-variance-authority',
16
+ 'clsx',
17
+ 'tailwind-merge',
18
+ ...iconPackagesFor(config.icons, iconCatalog()),
19
+ ];
20
+ const devDeps = tailwindPackages(config.projectType);
11
21
  if (info.hasTailwind) {
12
- logger.info('Tailwind CSS is already installed. Skipping Tailwind dependencies installation.');
22
+ logger.info('Tailwind CSS is already installed. Only the missing pieces will be added.');
13
23
  }
14
- await installWithRetry(deps, cwd, config.packageManager, false);
15
- if (devDeps.length > 0) {
16
- await installWithRetry(devDeps, cwd, config.packageManager, true);
24
+ // Cada lote que sobra vazio é uma invocação inteira do gerenciador poupada —
25
+ // o caso comum de um `init` repetido é justamente esse, nada a instalar.
26
+ const [missingDeps, missingDevDeps] = await Promise.all([
27
+ filterInstalledPackages(deps, cwd),
28
+ filterInstalledPackages(devDeps, cwd),
29
+ ]);
30
+ if (!missingDeps.length && !missingDevDeps.length) {
31
+ logger.info('All dependencies are already installed.');
32
+ return;
17
33
  }
34
+ await installPackagesWithRetry(missingDeps, cwd, config.packageManager, false);
35
+ await installPackagesWithRetry(missingDevDeps, cwd, config.packageManager, true);
36
+ }
37
+ /**
38
+ * O que o Tailwind precisa para rodar naquele tipo de projeto.
39
+ *
40
+ * A lista é sempre a completa e o filtro de instalados decide o que sobra:
41
+ * checar só a presença do `tailwindcss` deixava passar o caso de quem já o
42
+ * tinha instalado mas sem o adaptador do bundler, e aí o build não gerava
43
+ * utilitário nenhum.
44
+ *
45
+ * Numa biblioteca não há bundler a configurar — quem compila o CSS é a
46
+ * aplicação que a consome —, mas os pacotes ficam porque o tema que o init
47
+ * escreve ali os declara.
48
+ */
49
+ function tailwindPackages(kind) {
50
+ const shared = ['tailwindcss', 'tailwindcss-animate'];
51
+ if (isLibraryKind(kind))
52
+ return shared;
53
+ return bundlerFor(kind) === 'vite'
54
+ ? [...shared, '@tailwindcss/vite']
55
+ : [...shared, '@tailwindcss/postcss', 'postcss'];
18
56
  }
19
57
  function getCdkVersion(angularVersion) {
20
58
  if (!angularVersion) {
@@ -23,13 +61,4 @@ function getCdkVersion(angularVersion) {
23
61
  const majorVersion = Number.parseInt(angularVersion.split('.')[0]);
24
62
  return `@angular/cdk@^${majorVersion}`;
25
63
  }
26
- async function installWithRetry(packages, cwd, packageManager, isDev) {
27
- try {
28
- await installPackages(packages, cwd, packageManager, isDev);
29
- }
30
- catch {
31
- logger.warn('Installation failed, retrying with --legacy-peer-deps...');
32
- await installPackages(packages, cwd, packageManager, isDev, true);
33
- }
34
- }
35
64
  //# sourceMappingURL=dependencies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAUhE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAc,EAAE,WAAyB;IAC9F,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IAEtH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;QAC9B,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACzB,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAE9E,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,cAAuB;IAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,OAAO,iBAAiB,YAAY,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,QAAkB,EAClB,GAAW,EACX,cAA+C,EAC/C,KAAc;IAEd,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACxE,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAoB,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAElG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAc,EAAE,WAAyB;IAC9F,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,6EAA6E;IAC7E,yEAAyE;IACzE,8BAA8B;IAC9B,MAAM,IAAI,GAAG;QACX,UAAU;QACV,0BAA0B;QAC1B,MAAM;QACN,gBAAgB;QAChB,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;KAChD,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtD,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC;QAClC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC;KACtC,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,wBAAwB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC/E,MAAM,wBAAwB,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,gBAAgB,CAAC,IAA2B;IACnD,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAEtD,IAAI,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,MAAM;QAChC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,mBAAmB,CAAC;QAClC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,cAA8B;IACnD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,OAAO,iBAAiB,YAAY,EAAE,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,IAAI,SA2Cb,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,IAAI,SAkEb,CAAC"}
@@ -1,53 +1,88 @@
1
- import { installComponent } from '../../commands/add/component-installer.js';
2
- import { promptForConfig } from '../../commands/init/config-prompter.js';
3
- import { installDependencies } from '../../commands/init/dependencies.js';
4
- import { applyThemeToStyles, createPostCssConfig } from '../../commands/init/tailwind-setup.js';
5
- import { updateTsConfig } from '../../commands/init/tsconfig-updater.js';
6
- import { resolveConfigPaths } from '../../utils/config.js';
1
+ import { buildConfig, defaultAnswers, inspectCssFile } from '../../commands/init/config-prompter.js';
2
+ import { candidateProjects, detectProjectKind, isLibraryKind, PROJECT_KINDS, } from '../../commands/init/project-kind.js';
3
+ import { buildInitSteps } from '../../commands/init/steps.js';
4
+ import { runInitWizard } from '../../commands/init/wizard.js';
5
+ import { isInteractive, printReport, WizardCancelledError } from '../../ui/index.js';
7
6
  import { CliError } from '../../utils/errors.js';
8
7
  import { getProjectInfo } from '../../utils/get-project-info.js';
8
+ import { loadIconCatalog } from '../../utils/icon-catalog.js';
9
9
  import { logger, spinner } from '../../utils/logger.js';
10
- import { detectPackageManager } from '../../utils/package-manager.js';
11
- import chalk from 'chalk';
10
+ import { detectPackageManager, suggestedRunner } from '../../utils/package-manager.js';
11
+ import { getRegistryUrl } from '../../utils/registry.js';
12
12
  import { Command } from 'commander';
13
13
  import { existsSync } from 'node:fs';
14
- import { mkdir, writeFile } from 'node:fs/promises';
15
14
  import * as path from 'node:path';
16
- import prompts from 'prompts';
17
- import { updateAngularConfig } from './update-angular-config.js';
18
15
  export const init = new Command()
19
16
  .name('init')
20
17
  .description('initialize your project and install dependencies')
21
18
  .option('-y, --yes', 'skip confirmation prompt.', false)
22
19
  .option('-c, --cwd <cwd>', 'the working directory. defaults to the current directory.', process.cwd())
20
+ .option('-t, --type <type>', `the project type: ${PROJECT_KINDS.map(kind => kind.value).join(', ')}.`)
21
+ .option('-p, --project <name>', 'the workspace project to configure. defaults to the first compatible one.')
23
22
  .action(async (options) => {
24
23
  const cwd = path.resolve(options.cwd);
25
24
  validateWorkingDirectory(cwd);
26
25
  const projectInfo = await getProjectInfo(cwd);
27
26
  validateAngularProject(projectInfo);
28
- const componentsJsonPath = path.resolve(cwd, 'components.json');
29
- const isReInitializing = existsSync(componentsJsonPath);
30
- if (isReInitializing) {
31
- const shouldContinue = await confirmReinitialization();
32
- if (!shouldContinue) {
33
- logger.info('Re-initialization cancelled.');
34
- process.exit(0);
35
- }
27
+ const kind = resolveKind(options.type);
28
+ const projectRoot = resolveProjectRoot(options.project, kind ?? detectProjectKind(projectInfo), projectInfo);
29
+ const isReInitializing = existsSync(path.resolve(cwd, 'components.json'));
30
+ const packageManager = await detectPackageManager(cwd);
31
+ // Antes de qualquer etapa: é o catálogo que diz qual pacote de ícones
32
+ // instalar, e ele vem do registry para não depender da versão da CLI.
33
+ await loadIconCatalog(getRegistryUrl());
34
+ const buildSteps = (config) => buildInitSteps(cwd, config, projectInfo, isReInitializing);
35
+ if (!isInteractive()) {
36
+ logHeadlessReason();
37
+ await runHeadless({
38
+ cwd,
39
+ projectInfo,
40
+ packageManager,
41
+ isReInitializing,
42
+ buildSteps,
43
+ yes: options.yes,
44
+ kind,
45
+ projectRoot,
46
+ });
47
+ return;
36
48
  }
37
- logger.info(isReInitializing ? 'Re-initializing ZardUI...' : 'Initializing ZardUI...');
38
- logger.break();
39
- const detectedPm = await detectPackageManager();
40
- logger.break();
41
- const config = await promptForConfig(cwd, projectInfo, detectedPm);
42
- if (!options.yes) {
43
- const shouldProceed = await confirmConfiguration();
44
- if (!shouldProceed) {
49
+ try {
50
+ const { config, logs } = await runInitWizard({
51
+ cwd,
52
+ projectInfo,
53
+ packageManager,
54
+ isReInitializing,
55
+ skipConfirmation: options.yes,
56
+ buildSteps,
57
+ presetKind: kind,
58
+ presetProjectRoot: projectRoot,
59
+ });
60
+ reportSuccess(config, buildSteps(config), logs);
61
+ }
62
+ catch (error) {
63
+ if (error instanceof WizardCancelledError) {
64
+ printReport({
65
+ status: 'cancelled',
66
+ headline: error.message,
67
+ notes: ['Nothing was changed in your project.'],
68
+ });
45
69
  process.exit(0);
46
70
  }
71
+ throw error;
47
72
  }
48
- await runInitializationSteps(cwd, config, projectInfo, isReInitializing);
49
- displaySuccessMessage(config);
50
73
  });
74
+ /**
75
+ * Por que a tela cheia não foi montada.
76
+ *
77
+ * A CLI sair em modo texto é indistinguível, para quem está olhando, de a
78
+ * interface não existir — foi assim que a degradação no macOS e no Linux passou
79
+ * despercebida até virar relato de que "não apareceu". Com `--debug`, a resposta
80
+ * vem do próprio comando.
81
+ */
82
+ function logHeadlessReason() {
83
+ logger.debug(`No terminal to draw on (stdin TTY: ${Boolean(process.stdin.isTTY)}, ` +
84
+ `stdout TTY: ${Boolean(process.stdout.isTTY)}, controlling terminal: unreachable) — running headless.`);
85
+ }
51
86
  function validateWorkingDirectory(cwd) {
52
87
  if (!existsSync(cwd)) {
53
88
  throw new CliError(`The path ${cwd} does not exist. Please try again.`, 'INVALID_CWD');
@@ -58,62 +93,93 @@ function validateAngularProject(projectInfo) {
58
93
  throw new CliError('This project does not appear to be an Angular project.', 'NOT_ANGULAR');
59
94
  }
60
95
  }
61
- async function confirmReinitialization() {
62
- logger.warn('ZardUI is already initialized in this project.');
63
- const { reinitialize } = await prompts({
64
- type: 'confirm',
65
- name: 'reinitialize',
66
- message: 'Do you want to re-initialize? This will overwrite your existing configuration and utils.',
67
- initial: true,
68
- });
69
- return reinitialize;
96
+ /**
97
+ * O tipo pedido em `--type`, quando houver.
98
+ *
99
+ * É a resposta à primeira pergunta do wizard dada de antemão — o que torna o
100
+ * init utilizável em CI, onde ninguém pode escolher no menu.
101
+ */
102
+ function resolveKind(value) {
103
+ if (!value)
104
+ return undefined;
105
+ const kind = PROJECT_KINDS.find(option => option.value === value);
106
+ if (!kind) {
107
+ throw new CliError(`Unknown project type "${value}". Expected one of: ${PROJECT_KINDS.map(option => option.value).join(', ')}.`, 'UNKNOWN_PROJECT_TYPE');
108
+ }
109
+ return kind.value;
70
110
  }
71
- async function confirmConfiguration() {
72
- const { proceed } = await prompts({
73
- type: 'confirm',
74
- name: 'proceed',
75
- message: 'Write configuration to components.json?',
76
- initial: true,
77
- });
78
- return proceed;
111
+ /** A raiz do projeto pedido em `--project`, procurado entre os compatíveis. */
112
+ function resolveProjectRoot(name, kind, projectInfo) {
113
+ if (!name)
114
+ return undefined;
115
+ const candidates = candidateProjects(kind, projectInfo);
116
+ const project = candidates.find(candidate => candidate.name === name);
117
+ if (!project) {
118
+ const available = candidates.map(candidate => candidate.name).join(', ') || 'none';
119
+ throw new CliError(`Project "${name}" is not a ${kind} project in this workspace. Available: ${available}.`, 'UNKNOWN_PROJECT');
120
+ }
121
+ return project.root;
79
122
  }
80
- async function runInitializationSteps(cwd, config, projectInfo, isReInitializing) {
81
- const initSpinner = spinner('Initializing project...').start();
82
- await writeFile(path.resolve(cwd, 'components.json'), JSON.stringify(config, null, 2), 'utf8');
83
- initSpinner.text = 'Installing dependencies...';
84
- await installDependencies(cwd, config, projectInfo);
85
- initSpinner.text = 'Configuring Angular...';
86
- await updateAngularConfig(cwd, config);
87
- if (!projectInfo.hasTailwind || isReInitializing) {
88
- initSpinner.text = 'Setting up PostCSS...';
89
- await createPostCssConfig(cwd);
123
+ /**
124
+ * Caminho sem UI — CI, pipes e terminais não interativos.
125
+ *
126
+ * Aqui ninguém pode responder nada, então os defaults valem e `--yes` é
127
+ * obrigatório: sem ele a CLI se recusa a sobrescrever o CSS global do projeto.
128
+ */
129
+ async function runHeadless(options) {
130
+ if (!options.yes) {
131
+ throw new CliError('Running without an interactive terminal requires --yes, since init overwrites your global CSS.', 'NOT_INTERACTIVE');
132
+ }
133
+ const kind = options.kind ?? detectProjectKind(options.projectInfo);
134
+ const answers = defaultAnswers(options.projectInfo, kind, options.projectRoot);
135
+ const cssState = await inspectCssFile(options.cwd, answers.globalCss);
136
+ // Numa biblioteca o CSS de tema é criado pelo init, então não existir é o
137
+ // esperado; numa aplicação, o arquivo tem que estar lá e ligado ao build.
138
+ if (cssState === 'missing' && !isLibraryKind(answers.kind)) {
139
+ throw new CliError(`CSS file not found at: ${answers.globalCss}. Run init in an interactive terminal to choose another path.`, 'CSS_NOT_FOUND');
140
+ }
141
+ const config = buildConfig(answers, options.packageManager);
142
+ const steps = options.buildSteps(config);
143
+ logger.info(options.isReInitializing ? 'Re-initializing zard/ui...' : 'Initializing zard/ui...');
144
+ for (const step of steps) {
145
+ const stepSpinner = spinner(`${step.label} — ${step.note}`).start();
146
+ try {
147
+ await step.run();
148
+ stepSpinner.succeed(step.label);
149
+ }
150
+ catch (error) {
151
+ stepSpinner.fail(`${step.label}: ${error instanceof Error ? error.message : String(error)}`);
152
+ throw error;
153
+ }
90
154
  }
91
- initSpinner.text = 'Applying theme...';
92
- await applyThemeToStyles(cwd, config);
93
- initSpinner.text = 'Updating TypeScript config...';
94
- await updateTsConfig(cwd, config);
95
- initSpinner.text = 'Installing core dependencies...';
96
- await installCoreDependencies(cwd, config);
97
- initSpinner.succeed('Project initialized');
155
+ reportSuccess(config, steps, []);
98
156
  }
99
- async function installCoreDependencies(cwd, config) {
100
- const resolvedConfig = await resolveConfigPaths(cwd, config);
101
- await mkdir(resolvedConfig.resolvedPaths.core, { recursive: true });
102
- await mkdir(resolvedConfig.resolvedPaths.utils, { recursive: true });
103
- await installComponent('core', resolvedConfig.resolvedPaths.core, resolvedConfig);
104
- await installComponent('utils', resolvedConfig.resolvedPaths.utils, resolvedConfig);
157
+ function reportSuccess(config, steps, logs) {
158
+ printReport({
159
+ status: 'success',
160
+ headline: 'zard/ui has been initialized successfully!',
161
+ items: steps.map(step => `${step.label} — ${step.note}`),
162
+ notes: nextStepsFor(config),
163
+ commands: [{ command: `${suggestedRunner(config.packageManager)} zard-cli add`, argument: '[component]' }],
164
+ logs,
165
+ });
105
166
  }
106
- function displaySuccessMessage(config) {
107
- logger.break();
108
- logger.success('ZardUI has been initialized successfully!');
109
- logger.break();
110
- const runCommand = config.packageManager === 'npm'
111
- ? 'npx'
112
- : config.packageManager === 'yarn'
113
- ? 'yarn dlx'
114
- : `${config.packageManager}x`;
115
- logger.info('You can now add components using:');
116
- logger.info(chalk.bold(` ${runCommand} zard-cli add [component]`));
117
- logger.break();
167
+ /**
168
+ * O que ainda falta fazer à mão.
169
+ *
170
+ * Numa biblioteca o init não tem onde registrar `provideZard()` nem como
171
+ * importar os tokens — as duas coisas pertencem ao app que consome a lib, e
172
+ * sem esse aviso o usuário só descobre quando os componentes não renderizam.
173
+ */
174
+ function nextStepsFor(config) {
175
+ if (!isLibraryKind(config.projectType)) {
176
+ return ['You can now add components using:'];
177
+ }
178
+ return [
179
+ 'The consuming app still needs to register provideZard() in its app.config.ts',
180
+ `and import the theme tokens from this library's ${path.basename(config.tailwind.css)}.`,
181
+ '',
182
+ 'You can now add components using:',
183
+ ];
118
184
  }
119
185
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Que tipo de projeto o `init` está configurando.
3
+ *
4
+ * Quem responde é o usuário, na primeira pergunta do wizard — a CLI não decide
5
+ * por ele. O que o workspace revela entra depois, para preencher os caminhos
6
+ * sugeridos do tipo escolhido; a detecção só vira decisão no caminho headless,
7
+ * onde não há ninguém para perguntar.
8
+ *
9
+ * As diferenças entre os tipos não são cosméticas: uma biblioteca não tem
10
+ * `app.config.ts` onde registrar providers nem CSS global pré-existente, o Nx
11
+ * guarda os paths do TypeScript noutro arquivo, e o Analog troca o build do
12
+ * Angular por Vite — e com ele a forma de configurar o Tailwind. Concentrar
13
+ * essas diferenças aqui evita que cada etapa precise redescobri-las.
14
+ */
15
+ import type { ProjectInfo, WorkspaceProject } from '../../utils/get-project-info.js';
16
+ export type ProjectKind = 'angular' | 'angular-library' | 'nx' | 'nx-library' | 'analog';
17
+ export interface ProjectKindOption {
18
+ readonly value: ProjectKind;
19
+ readonly label: string;
20
+ readonly detail: string;
21
+ /** A cor do ecossistema, para o menu dizer de relance a que mundo o tipo pertence. */
22
+ readonly color: string;
23
+ }
24
+ /**
25
+ * A ordem é a do menu: cada ecossistema com a aplicação antes da biblioteca,
26
+ * do mais comum ao mais raro. Angular abre a lista porque é o default.
27
+ */
28
+ export declare const PROJECT_KINDS: readonly ProjectKindOption[];
29
+ export declare function isLibraryKind(kind: ProjectKind): boolean;
30
+ /** Onde os paths do TypeScript precisam ser escritos para o projeto enxergá-los. */
31
+ export declare function tsconfigFileFor(kind: ProjectKind, projectInfo: ProjectInfo): string;
32
+ /** Se o Tailwind entra pelo PostCSS do Angular ou pelo plugin do Vite. */
33
+ export declare function bundlerFor(kind: ProjectKind): 'angular' | 'vite';
34
+ /**
35
+ * Os projetos do workspace que podem receber a instalação.
36
+ *
37
+ * Escolhido o tipo, só faz sentido oferecer o que combina com ele: pedir para
38
+ * instalar numa aplicação quem escolheu biblioteca seria oferecer um alvo que
39
+ * as etapas seguintes não sabem configurar.
40
+ */
41
+ export declare function candidateProjects(kind: ProjectKind, projectInfo: ProjectInfo): WorkspaceProject[];
42
+ /** Raiz padrão quando o workspace não declara nenhum projeto compatível. */
43
+ export declare function fallbackRootFor(kind: ProjectKind): string;
44
+ /**
45
+ * O tipo que o caminho headless assume.
46
+ *
47
+ * Sem terminal interativo ninguém responde à primeira pergunta, então aqui — e
48
+ * só aqui — o workspace decide: o gerenciador dá o mundo (Nx ou Angular), o
49
+ * Analog se anuncia pelas próprias dependências, e a ausência de qualquer
50
+ * aplicação é o que sugere que o alvo é uma biblioteca.
51
+ */
52
+ export declare function detectProjectKind(projectInfo: ProjectInfo): ProjectKind;
53
+ /**
54
+ * Onde o código da biblioteca vive.
55
+ *
56
+ * `src/lib` é a convenção tanto do `ng generate library` quanto do
57
+ * `nx g @nx/angular:library`: `src/` guarda o ponto de entrada público, e tudo
58
+ * que ele exporta fica em `src/lib`.
59
+ */
60
+ export declare function libraryBaseUrl(libraryRoot: string): string;
61
+ /** O CSS de tema que a biblioteca passa a expor para quem a consome. */
62
+ export declare function libraryStylesPath(libraryRoot: string): string;
63
+ /**
64
+ * A raiz do projeto, deduzida do `baseUrl`.
65
+ *
66
+ * Os dois layouts terminam dois níveis abaixo da raiz — `<root>/src/app` numa
67
+ * aplicação, `<root>/src/lib` numa biblioteca —, então subir dois níveis
68
+ * devolve o diretório onde vivem o `project.json`, o `ng-package.json` e o
69
+ * `.postcssrc.json` daquele projeto. Um app único na raiz devolve `.`.
70
+ */
71
+ export declare function projectRootOf(baseUrl: string): string;
72
+ /** O diretório de fontes do projeto — onde `index.html` e `main.ts` ficam. */
73
+ export declare function sourceRootOf(baseUrl: string): string;
74
+ /**
75
+ * Onde procurar o `index.html` do projeto.
76
+ *
77
+ * No Analog ele é a página de entrada do Vite e fica na raiz, e não em `src/`
78
+ * como no build do Angular — sugerir o caminho errado fazia o `add dark-mode`
79
+ * falhar logo depois de perguntar.
80
+ */
81
+ export declare function indexHtmlFor(kind: ProjectKind, baseUrl: string): string;
82
+ //# sourceMappingURL=project-kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-kind.d.ts","sourceRoot":"","sources":["../../../src/commands/init/project-kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGpF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAYD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EA+BrD,CAAC;AAqBF,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAExD;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAOnF;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAIjG;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CASvE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOvE"}