zard-cli 1.0.0-beta.84 → 1.1.0-alpha.0

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 (207) hide show
  1. package/README.md +60 -60
  2. package/commands/add/component-installer.d.ts +2 -0
  3. package/commands/add/component-installer.d.ts.map +1 -1
  4. package/commands/add/component-installer.js +9 -4
  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.map +1 -1
  11. package/commands/add/dark-mode-setup.js +2 -11
  12. package/commands/add/dark-mode-setup.js.map +1 -1
  13. package/commands/add/index.d.ts.map +1 -1
  14. package/commands/add/index.js +106 -86
  15. package/commands/add/index.js.map +1 -1
  16. package/commands/add/wizard.d.ts +31 -0
  17. package/commands/add/wizard.d.ts.map +1 -0
  18. package/commands/add/wizard.js +289 -0
  19. package/commands/add/wizard.js.map +1 -0
  20. package/commands/init/config-prompter.d.ts +47 -3
  21. package/commands/init/config-prompter.d.ts.map +1 -1
  22. package/commands/init/config-prompter.js +76 -74
  23. package/commands/init/config-prompter.js.map +1 -1
  24. package/commands/init/dependencies.d.ts +1 -8
  25. package/commands/init/dependencies.d.ts.map +1 -1
  26. package/commands/init/dependencies.js +35 -17
  27. package/commands/init/dependencies.js.map +1 -1
  28. package/commands/init/index.d.ts.map +1 -1
  29. package/commands/init/index.js +129 -81
  30. package/commands/init/index.js.map +1 -1
  31. package/commands/init/project-kind.d.ts +82 -0
  32. package/commands/init/project-kind.d.ts.map +1 -0
  33. package/commands/init/project-kind.js +166 -0
  34. package/commands/init/project-kind.js.map +1 -0
  35. package/commands/init/steps.d.ts +16 -0
  36. package/commands/init/steps.d.ts.map +1 -0
  37. package/commands/init/steps.js +151 -0
  38. package/commands/init/steps.js.map +1 -0
  39. package/commands/init/tailwind-setup.d.ts +9 -2
  40. package/commands/init/tailwind-setup.d.ts.map +1 -1
  41. package/commands/init/tailwind-setup.js +33 -12
  42. package/commands/init/tailwind-setup.js.map +1 -1
  43. package/commands/init/tsconfig-updater.d.ts +8 -1
  44. package/commands/init/tsconfig-updater.d.ts.map +1 -1
  45. package/commands/init/tsconfig-updater.js +30 -11
  46. package/commands/init/tsconfig-updater.js.map +1 -1
  47. package/commands/init/update-angular-config.d.ts.map +1 -1
  48. package/commands/init/update-angular-config.js +28 -50
  49. package/commands/init/update-angular-config.js.map +1 -1
  50. package/commands/init/vite-setup.d.ts +10 -0
  51. package/commands/init/vite-setup.d.ts.map +1 -0
  52. package/commands/init/vite-setup.js +60 -0
  53. package/commands/init/vite-setup.js.map +1 -0
  54. package/commands/init/wizard.d.ts +30 -0
  55. package/commands/init/wizard.d.ts.map +1 -0
  56. package/commands/init/wizard.js +560 -0
  57. package/commands/init/wizard.js.map +1 -0
  58. package/core/registry/registry-data.d.ts.map +1 -1
  59. package/core/registry/registry-data.js +8 -45
  60. package/core/registry/registry-data.js.map +1 -1
  61. package/index.js +5 -3
  62. package/index.js.map +1 -1
  63. package/package.json +58 -61
  64. package/ui/blocks.d.ts +70 -0
  65. package/ui/blocks.d.ts.map +1 -0
  66. package/ui/blocks.js +116 -0
  67. package/ui/blocks.js.map +1 -0
  68. package/ui/brand.d.ts +14 -0
  69. package/ui/brand.d.ts.map +1 -0
  70. package/ui/brand.js +35 -0
  71. package/ui/brand.js.map +1 -0
  72. package/ui/engine/animation/index.d.ts +39 -0
  73. package/ui/engine/animation/index.d.ts.map +1 -0
  74. package/ui/engine/animation/index.js +103 -0
  75. package/ui/engine/animation/index.js.map +1 -0
  76. package/ui/engine/ansi/index.d.ts +52 -0
  77. package/ui/engine/ansi/index.d.ts.map +1 -0
  78. package/ui/engine/ansi/index.js +117 -0
  79. package/ui/engine/ansi/index.js.map +1 -0
  80. package/ui/engine/components/index.d.ts +211 -0
  81. package/ui/engine/components/index.d.ts.map +1 -0
  82. package/ui/engine/components/index.js +109 -0
  83. package/ui/engine/components/index.js.map +1 -0
  84. package/ui/engine/cursor/index.d.ts +17 -0
  85. package/ui/engine/cursor/index.d.ts.map +1 -0
  86. package/ui/engine/cursor/index.js +41 -0
  87. package/ui/engine/cursor/index.js.map +1 -0
  88. package/ui/engine/diff/index.d.ts +27 -0
  89. package/ui/engine/diff/index.d.ts.map +1 -0
  90. package/ui/engine/diff/index.js +57 -0
  91. package/ui/engine/diff/index.js.map +1 -0
  92. package/ui/engine/events/index.d.ts +24 -0
  93. package/ui/engine/events/index.d.ts.map +1 -0
  94. package/ui/engine/events/index.js +60 -0
  95. package/ui/engine/events/index.js.map +1 -0
  96. package/ui/engine/focus/index.d.ts +25 -0
  97. package/ui/engine/focus/index.d.ts.map +1 -0
  98. package/ui/engine/focus/index.js +77 -0
  99. package/ui/engine/focus/index.js.map +1 -0
  100. package/ui/engine/frame/index.d.ts +48 -0
  101. package/ui/engine/frame/index.d.ts.map +1 -0
  102. package/ui/engine/frame/index.js +0 -0
  103. package/ui/engine/frame/index.js.map +1 -0
  104. package/ui/engine/index.d.ts +28 -0
  105. package/ui/engine/index.d.ts.map +1 -0
  106. package/ui/engine/index.js +28 -0
  107. package/ui/engine/index.js.map +1 -0
  108. package/ui/engine/input/index.d.ts +36 -0
  109. package/ui/engine/input/index.d.ts.map +1 -0
  110. package/ui/engine/input/index.js +224 -0
  111. package/ui/engine/input/index.js.map +1 -0
  112. package/ui/engine/layout/index.d.ts +42 -0
  113. package/ui/engine/layout/index.d.ts.map +1 -0
  114. package/ui/engine/layout/index.js +241 -0
  115. package/ui/engine/layout/index.js.map +1 -0
  116. package/ui/engine/renderer/index.d.ts +43 -0
  117. package/ui/engine/renderer/index.d.ts.map +1 -0
  118. package/ui/engine/renderer/index.js +619 -0
  119. package/ui/engine/renderer/index.js.map +1 -0
  120. package/ui/engine/scheduler/index.d.ts +22 -0
  121. package/ui/engine/scheduler/index.d.ts.map +1 -0
  122. package/ui/engine/scheduler/index.js +77 -0
  123. package/ui/engine/scheduler/index.js.map +1 -0
  124. package/ui/engine/screen/index.d.ts +39 -0
  125. package/ui/engine/screen/index.d.ts.map +1 -0
  126. package/ui/engine/screen/index.js +255 -0
  127. package/ui/engine/screen/index.js.map +1 -0
  128. package/ui/engine/terminal/index.d.ts +38 -0
  129. package/ui/engine/terminal/index.d.ts.map +1 -0
  130. package/ui/engine/terminal/index.js +104 -0
  131. package/ui/engine/terminal/index.js.map +1 -0
  132. package/ui/engine/testing/index.d.ts +27 -0
  133. package/ui/engine/testing/index.d.ts.map +1 -0
  134. package/ui/engine/testing/index.js +63 -0
  135. package/ui/engine/testing/index.js.map +1 -0
  136. package/ui/engine/theme/index.d.ts +27 -0
  137. package/ui/engine/theme/index.d.ts.map +1 -0
  138. package/ui/engine/theme/index.js +129 -0
  139. package/ui/engine/theme/index.js.map +1 -0
  140. package/ui/engine/utils/index.d.ts +12 -0
  141. package/ui/engine/utils/index.d.ts.map +1 -0
  142. package/ui/engine/utils/index.js +143 -0
  143. package/ui/engine/utils/index.js.map +1 -0
  144. package/ui/gate.d.ts +19 -0
  145. package/ui/gate.d.ts.map +1 -0
  146. package/ui/gate.js +36 -0
  147. package/ui/gate.js.map +1 -0
  148. package/ui/index.d.ts +18 -0
  149. package/ui/index.d.ts.map +1 -0
  150. package/ui/index.js +18 -0
  151. package/ui/index.js.map +1 -0
  152. package/ui/log-sink.d.ts +24 -0
  153. package/ui/log-sink.d.ts.map +1 -0
  154. package/ui/log-sink.js +35 -0
  155. package/ui/log-sink.js.map +1 -0
  156. package/ui/output.d.ts +14 -0
  157. package/ui/output.d.ts.map +1 -0
  158. package/ui/output.js +28 -0
  159. package/ui/output.js.map +1 -0
  160. package/ui/report.d.ts +30 -0
  161. package/ui/report.d.ts.map +1 -0
  162. package/ui/report.js +45 -0
  163. package/ui/report.js.map +1 -0
  164. package/ui/runner.d.ts +57 -0
  165. package/ui/runner.d.ts.map +1 -0
  166. package/ui/runner.js +119 -0
  167. package/ui/runner.js.map +1 -0
  168. package/ui/style.d.ts +24 -0
  169. package/ui/style.d.ts.map +1 -0
  170. package/ui/style.js +44 -0
  171. package/ui/style.js.map +1 -0
  172. package/ui/testing/fake-tty.d.ts +26 -0
  173. package/ui/testing/fake-tty.d.ts.map +1 -0
  174. package/ui/testing/fake-tty.js +61 -0
  175. package/ui/testing/fake-tty.js.map +1 -0
  176. package/ui/text-input.d.ts +30 -0
  177. package/ui/text-input.d.ts.map +1 -0
  178. package/ui/text-input.js +87 -0
  179. package/ui/text-input.js.map +1 -0
  180. package/ui/theme.d.ts +10 -0
  181. package/ui/theme.d.ts.map +1 -0
  182. package/ui/theme.js +20 -0
  183. package/ui/theme.js.map +1 -0
  184. package/utils/config.d.ts +22 -0
  185. package/utils/config.d.ts.map +1 -1
  186. package/utils/config.js +26 -1
  187. package/utils/config.js.map +1 -1
  188. package/utils/get-project-info.d.ts +29 -0
  189. package/utils/get-project-info.d.ts.map +1 -1
  190. package/utils/get-project-info.js +176 -1
  191. package/utils/get-project-info.js.map +1 -1
  192. package/utils/logger.d.ts +13 -1
  193. package/utils/logger.d.ts.map +1 -1
  194. package/utils/logger.js +95 -15
  195. package/utils/logger.js.map +1 -1
  196. package/utils/package-manager.d.ts +42 -1
  197. package/utils/package-manager.d.ts.map +1 -1
  198. package/utils/package-manager.js +204 -11
  199. package/utils/package-manager.js.map +1 -1
  200. package/utils/registry.d.ts +12 -2
  201. package/utils/registry.d.ts.map +1 -1
  202. package/utils/registry.js +21 -6
  203. package/utils/registry.js.map +1 -1
  204. package/utils/source-file.d.ts +40 -0
  205. package/utils/source-file.d.ts.map +1 -0
  206. package/utils/source-file.js +104 -0
  207. package/utils/source-file.js.map +1 -0
package/utils/logger.js CHANGED
@@ -1,5 +1,6 @@
1
- import chalk from 'chalk';
2
- import ora from 'ora';
1
+ import { capture, isCapturing } from '../ui/log-sink.js';
2
+ import { formatRecord, writeLine } from '../ui/output.js';
3
+ import { style } from '../ui/style.js';
3
4
  let debugEnabled = false;
4
5
  export function enableDebug() {
5
6
  debugEnabled = true;
@@ -7,33 +8,112 @@ export function enableDebug() {
7
8
  export function isDebugEnabled() {
8
9
  return debugEnabled;
9
10
  }
11
+ function toMessage(args) {
12
+ return args
13
+ .map(arg => {
14
+ if (typeof arg === 'string')
15
+ return arg;
16
+ if (arg instanceof Error)
17
+ return arg.message;
18
+ return String(arg);
19
+ })
20
+ .join(' ');
21
+ }
22
+ /**
23
+ * Escreve uma mensagem — ou a retém, quando a tela interativa está montada.
24
+ *
25
+ * Sem esse desvio, um `logger.warn` disparado no meio de uma instalação
26
+ * escreveria por cima do frame que a engine acabou de pintar.
27
+ */
28
+ function emit(level, args) {
29
+ const message = toMessage(args);
30
+ if (capture(level, message))
31
+ return;
32
+ writeLine(formatRecord({ level, message }));
33
+ }
10
34
  export const logger = {
11
35
  error(...args) {
12
- console.log(chalk.red(...args));
36
+ emit('error', args);
13
37
  },
14
38
  warn(...args) {
15
- console.log(chalk.yellow(...args));
39
+ emit('warn', args);
16
40
  },
17
41
  info(...args) {
18
- console.log(chalk.cyan(...args));
42
+ emit('info', args);
19
43
  },
20
44
  success(...args) {
21
- console.log(chalk.green(...args));
45
+ emit('success', args);
22
46
  },
23
47
  debug(...args) {
24
- if (debugEnabled) {
25
- console.log(chalk.gray('[debug]', ...args));
26
- }
48
+ if (!debugEnabled)
49
+ return;
50
+ emit('debug', args);
27
51
  },
28
52
  break() {
29
- console.log('');
53
+ if (isCapturing())
54
+ return;
55
+ writeLine();
30
56
  },
31
57
  };
58
+ const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
59
+ const FRAME_MS = 80;
60
+ /**
61
+ * Indicador de progresso para os caminhos que rodam fora da tela interativa
62
+ * (headless, --yes, CI). Dentro de um wizard quem anima é a engine, e aqui as
63
+ * transições viram apenas registros no sink.
64
+ */
32
65
  export function spinner(text) {
33
- return ora({
34
- text: chalk.dim(text),
35
- spinner: 'dots',
36
- color: 'cyan',
37
- });
66
+ const animated = Boolean(process.stdout.isTTY) && !isCapturing();
67
+ let timer;
68
+ let frame = 0;
69
+ const clearLine = () => {
70
+ if (animated)
71
+ process.stdout.write('\r\x1b[2K');
72
+ };
73
+ const paint = () => {
74
+ // A captura pode começar depois que o spinner já estava rodando; nesse caso
75
+ // a tela é dona do terminal e nada mais pode escrever direto nele.
76
+ if (isCapturing())
77
+ return;
78
+ clearLine();
79
+ process.stdout.write(`${style.primary(FRAMES[frame] ?? FRAMES[0] ?? '')} ${style.dim(instance.text)}`);
80
+ frame = (frame + 1) % FRAMES.length;
81
+ };
82
+ const finish = (level, message) => {
83
+ instance.stop();
84
+ emit(level, [message ?? instance.text]);
85
+ return instance;
86
+ };
87
+ const instance = {
88
+ text,
89
+ start() {
90
+ if (!animated) {
91
+ emit('info', [instance.text]);
92
+ return instance;
93
+ }
94
+ if (timer)
95
+ return instance;
96
+ paint();
97
+ timer = setInterval(paint, FRAME_MS);
98
+ // Um spinner ativo não deve segurar o processo vivo por si só.
99
+ timer.unref?.();
100
+ return instance;
101
+ },
102
+ stop() {
103
+ if (timer) {
104
+ clearInterval(timer);
105
+ timer = undefined;
106
+ clearLine();
107
+ }
108
+ return instance;
109
+ },
110
+ succeed(message) {
111
+ return finish('success', message);
112
+ },
113
+ fail(message) {
114
+ return finish('error', message);
115
+ },
116
+ };
117
+ return instance;
38
118
  }
39
119
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,MAAM,UAAU,WAAW;IACzB,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,CAAC,GAAG,IAAe;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,GAAG,IAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,GAAG,IAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,GAAG,IAAe;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,GAAG,IAAe;QACtB,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,KAAK;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,GAAG,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,48 @@
1
1
  type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';
2
- export declare function detectPackageManager(): Promise<PackageManager>;
2
+ /**
3
+ * Qual gerenciador o *projeto* usa.
4
+ *
5
+ * A ordem importa. `npm_config_user_agent` descreve como a CLI foi chamada
6
+ * (`npx` sempre diz npm), não o que o projeto usa — confiar nele primeiro fazia
7
+ * um projeto bun receber `packageManager: "npm"` no components.json e ganhar um
8
+ * package-lock.json ao lado do bun.lock. O projeto responde por si: primeiro o
9
+ * campo `packageManager` do package.json, depois os lockfiles.
10
+ */
11
+ export declare function detectPackageManager(cwd?: string): Promise<PackageManager>;
12
+ /**
13
+ * Como sugerir que o usuário rode a CLI de novo.
14
+ *
15
+ * Aqui a pergunta é outra: não é qual gerenciador o projeto usa para instalar
16
+ * dependências, e sim por onde a CLI acabou de ser executada. Quem chamou
17
+ * `npx zard-cli init` num projeto bun não espera terminar lendo `bunx` — e o
18
+ * `npx` que ele já usou funciona. Só quando não dá para saber é que o
19
+ * gerenciador do projeto responde.
20
+ */
21
+ export declare function suggestedRunner(packageManager: PackageManager): string;
3
22
  export declare function getPackageManager(cwd?: string): Promise<'npm' | 'yarn' | 'pnpm' | 'bun'>;
4
23
  export declare function getInstallCommand(packageManager: string, isDev?: boolean): Promise<string[]>;
5
24
  export declare function installPackages(packages: string[], cwd: string, packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun', isDev?: boolean, legacyPeerDeps?: boolean): Promise<void>;
25
+ /**
26
+ * Instala o lote e, se o gerenciador recusar a árvore por conflito de peers,
27
+ * repete com a checagem relaxada.
28
+ *
29
+ * A queda fica registrada para o resto da execução: quando o primeiro lote
30
+ * precisou do fallback, os seguintes vão precisar pelo mesmo motivo, e a
31
+ * tentativa que já se sabe condenada custa uma resolução inteira da árvore.
32
+ */
33
+ export declare function installPackagesWithRetry(packages: string[], cwd: string, packageManager: PackageManager, isDev?: boolean): Promise<void>;
34
+ /**
35
+ * Descarta do lote os pacotes que o projeto já declara e já resolve.
36
+ *
37
+ * O gerenciador cobra caro por invocação — revalida a árvore inteira mesmo
38
+ * quando não há nada a fazer —, então o ganho não está em acelerar a instalação
39
+ * e sim em não chamá-la. Um `add` em projeto já inicializado pede justamente as
40
+ * dependências que o `init` colocou lá.
41
+ *
42
+ * O filtro é deliberadamente conservador: na dúvida o pacote continua no lote e
43
+ * quem decide é o gerenciador. Comparar apenas a major basta porque as versões
44
+ * que a CLI pede são sempre da forma `^N`.
45
+ */
46
+ export declare function filterInstalledPackages(packages: string[], cwd: string): Promise<string[]>;
6
47
  export {};
7
48
  //# sourceMappingURL=package-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAGA,KAAK,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAItD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAkBpE;AAED,wBAAsB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,CAG7G;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYhG;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,EAC/C,KAAK,UAAQ,EACb,cAAc,UAAQ,GACrB,OAAO,CAAC,IAAI,CAAC,CAWf"}
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAQA,KAAK,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAYtD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgB/F;AASD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAStE;AAYD,wBAAsB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,CAG7G;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYhG;AAaD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,EAC/C,KAAK,UAAQ,EACb,cAAc,UAAQ,GACrB,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAcD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,cAAc,EAC9B,KAAK,UAAQ,GACZ,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAchG"}
@@ -1,9 +1,35 @@
1
1
  import { detect } from '@antfu/ni';
2
+ import { isCapturing } from '../ui/log-sink.js';
2
3
  import { getConfig } from '../utils/config.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { existsSync } from 'node:fs';
6
+ import { readFile } from 'node:fs/promises';
7
+ import * as path from 'node:path';
3
8
  let cachedPackageManager = null;
4
- export async function detectPackageManager() {
9
+ const SUPPORTED = ['npm', 'yarn', 'pnpm', 'bun'];
10
+ function asPackageManager(value) {
11
+ // `yarn@berry`, `pnpm@6`, `bun@1.3.14` — só a família interessa.
12
+ const name = value?.split('@')[0];
13
+ return SUPPORTED.includes(name) ? name : null;
14
+ }
15
+ /**
16
+ * Qual gerenciador o *projeto* usa.
17
+ *
18
+ * A ordem importa. `npm_config_user_agent` descreve como a CLI foi chamada
19
+ * (`npx` sempre diz npm), não o que o projeto usa — confiar nele primeiro fazia
20
+ * um projeto bun receber `packageManager: "npm"` no components.json e ganhar um
21
+ * package-lock.json ao lado do bun.lock. O projeto responde por si: primeiro o
22
+ * campo `packageManager` do package.json, depois os lockfiles.
23
+ */
24
+ export async function detectPackageManager(cwd = process.cwd()) {
5
25
  if (cachedPackageManager)
6
26
  return cachedPackageManager;
27
+ const declared = asPackageManager(await readPackageManagerField(cwd));
28
+ if (declared)
29
+ return (cachedPackageManager = declared);
30
+ const fromLockfile = asPackageManager(await detect({ programmatic: true, cwd }));
31
+ if (fromLockfile)
32
+ return (cachedPackageManager = fromLockfile);
7
33
  const userAgent = process.env.npm_config_user_agent || '';
8
34
  if (userAgent.includes('bun'))
9
35
  return (cachedPackageManager = 'bun');
@@ -11,16 +37,45 @@ export async function detectPackageManager() {
11
37
  return (cachedPackageManager = 'pnpm');
12
38
  if (userAgent.includes('yarn'))
13
39
  return (cachedPackageManager = 'yarn');
14
- if (userAgent.includes('npm'))
15
- return (cachedPackageManager = 'npm');
16
- const agent = await detect({ programmatic: true });
17
- if (agent === 'yarn@berry')
18
- return (cachedPackageManager = 'yarn');
19
- if (agent && ['npm', 'yarn', 'pnpm', 'bun'].includes(agent)) {
20
- return (cachedPackageManager = agent);
21
- }
22
40
  return (cachedPackageManager = 'npm');
23
41
  }
42
+ const RUNNER = {
43
+ npm: 'npx',
44
+ yarn: 'yarn dlx',
45
+ pnpm: 'pnpm dlx',
46
+ bun: 'bunx',
47
+ };
48
+ /**
49
+ * Como sugerir que o usuário rode a CLI de novo.
50
+ *
51
+ * Aqui a pergunta é outra: não é qual gerenciador o projeto usa para instalar
52
+ * dependências, e sim por onde a CLI acabou de ser executada. Quem chamou
53
+ * `npx zard-cli init` num projeto bun não espera terminar lendo `bunx` — e o
54
+ * `npx` que ele já usou funciona. Só quando não dá para saber é que o
55
+ * gerenciador do projeto responde.
56
+ */
57
+ export function suggestedRunner(packageManager) {
58
+ const userAgent = process.env.npm_config_user_agent || '';
59
+ if (userAgent.startsWith('bun'))
60
+ return RUNNER.bun;
61
+ if (userAgent.startsWith('pnpm'))
62
+ return RUNNER.pnpm;
63
+ if (userAgent.startsWith('yarn'))
64
+ return RUNNER.yarn;
65
+ if (userAgent.startsWith('npm'))
66
+ return RUNNER.npm;
67
+ return RUNNER[packageManager];
68
+ }
69
+ /** O campo `packageManager` do package.json — padrão do Corepack, é declaração explícita. */
70
+ async function readPackageManagerField(cwd) {
71
+ try {
72
+ const manifest = JSON.parse(await readFile(path.join(cwd, 'package.json'), 'utf8'));
73
+ return typeof manifest.packageManager === 'string' ? manifest.packageManager : null;
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ }
24
79
  export async function getPackageManager(cwd = process.cwd()) {
25
80
  const config = await getConfig(cwd);
26
81
  return config?.packageManager ?? 'npm';
@@ -38,13 +93,151 @@ export async function getInstallCommand(packageManager, isDev = false) {
38
93
  return isDev ? ['install', '-D'] : ['install'];
39
94
  }
40
95
  }
96
+ /**
97
+ * Trabalho que o gerenciador faz por hábito e que não serve à instalação em si.
98
+ *
99
+ * A auditoria de vulnerabilidades manda a árvore inteira para o registro e
100
+ * espera a resposta; em projeto Angular, com mais de mil pacotes, ela sozinha
101
+ * responde por vários segundos de uma chamada que instala meia dúzia deles.
102
+ */
103
+ function speedFlags(packageManager) {
104
+ return packageManager === 'npm' ? ['--no-audit', '--no-fund'] : [];
105
+ }
41
106
  export async function installPackages(packages, cwd, packageManager, isDev = false, legacyPeerDeps = false) {
42
107
  const { execa } = await import('execa');
43
108
  const installCmd = await getInstallCommand(packageManager, isDev);
44
- const args = [...installCmd, ...packages];
109
+ const args = [...installCmd, ...packages, ...speedFlags(packageManager)];
45
110
  if (legacyPeerDeps && packageManager === 'npm') {
46
111
  args.push('--legacy-peer-deps');
47
112
  }
48
- await execa(packageManager, args, { cwd, stdio: 'inherit' });
113
+ if (legacyPeerDeps && packageManager === 'pnpm') {
114
+ args.push('--no-strict-peer-dependencies');
115
+ }
116
+ // Com a tela interativa montada, herdar o stdio deixaria o gerenciador de
117
+ // pacotes escrever por cima do frame. Nesse caso a saída é capturada e só
118
+ // aparece em modo debug; fora dela, o comportamento continua sendo o de
119
+ // repassar a saída ao vivo.
120
+ if (isCapturing()) {
121
+ const command = `${packageManager} ${args.join(' ')}`;
122
+ try {
123
+ // stdin ignorado, não em pipe: um pipe de entrada aberto nunca recebe EOF
124
+ // e o gerenciador de pacotes fica esperando nele para sempre. Fechar o
125
+ // stdin também garante que ele nunca tente abrir um prompt, o que seria
126
+ // invisível atrás da tela cheia.
127
+ const result = await execa(packageManager, args, {
128
+ cwd,
129
+ stdin: 'ignore',
130
+ stdout: 'pipe',
131
+ stderr: 'pipe',
132
+ });
133
+ logger.debug(`${command}\n${result.stdout}`);
134
+ }
135
+ catch (error) {
136
+ // Sem isso a falha chega ao usuário como uma linha genérica: a saída real
137
+ // do gerenciador de pacotes fica no sink e é impressa junto do resumo.
138
+ logger.error(`${command} failed:\n${outputOf(error)}`);
139
+ throw error;
140
+ }
141
+ return;
142
+ }
143
+ // stdin ignorado aqui também. A instalação recebe os pacotes por argumento e
144
+ // nunca tem o que perguntar; herdar um stdin que não fecha (pipe, CI, job em
145
+ // background) prende o gerenciador esperando um EOF que não vem — a saída
146
+ // continua ao vivo porque stdout e stderr seguem herdados.
147
+ await execa(packageManager, args, { cwd, stdin: 'ignore', stdout: 'inherit', stderr: 'inherit' });
148
+ }
149
+ function outputOf(error) {
150
+ const { stderr, stdout, message } = (error ?? {});
151
+ return (stderr?.trim() || stdout?.trim() || message || String(error)).trim();
152
+ }
153
+ /** Só npm e pnpm têm como relaxar a checagem de peers; nos outros, repetir é repetir a mesma falha. */
154
+ function canRelaxPeers(packageManager) {
155
+ return packageManager === 'npm' || packageManager === 'pnpm';
156
+ }
157
+ let peerRelaxationEngaged = false;
158
+ /**
159
+ * Instala o lote e, se o gerenciador recusar a árvore por conflito de peers,
160
+ * repete com a checagem relaxada.
161
+ *
162
+ * A queda fica registrada para o resto da execução: quando o primeiro lote
163
+ * precisou do fallback, os seguintes vão precisar pelo mesmo motivo, e a
164
+ * tentativa que já se sabe condenada custa uma resolução inteira da árvore.
165
+ */
166
+ export async function installPackagesWithRetry(packages, cwd, packageManager, isDev = false) {
167
+ if (packages.length === 0)
168
+ return;
169
+ if (peerRelaxationEngaged) {
170
+ await installPackages(packages, cwd, packageManager, isDev, true);
171
+ return;
172
+ }
173
+ try {
174
+ await installPackages(packages, cwd, packageManager, isDev);
175
+ }
176
+ catch (error) {
177
+ if (!canRelaxPeers(packageManager))
178
+ throw error;
179
+ logger.warn('Installation failed, retrying with relaxed peer dependency resolution...');
180
+ await installPackages(packages, cwd, packageManager, isDev, true);
181
+ peerRelaxationEngaged = true;
182
+ }
183
+ }
184
+ /**
185
+ * Descarta do lote os pacotes que o projeto já declara e já resolve.
186
+ *
187
+ * O gerenciador cobra caro por invocação — revalida a árvore inteira mesmo
188
+ * quando não há nada a fazer —, então o ganho não está em acelerar a instalação
189
+ * e sim em não chamá-la. Um `add` em projeto já inicializado pede justamente as
190
+ * dependências que o `init` colocou lá.
191
+ *
192
+ * O filtro é deliberadamente conservador: na dúvida o pacote continua no lote e
193
+ * quem decide é o gerenciador. Comparar apenas a major basta porque as versões
194
+ * que a CLI pede são sempre da forma `^N`.
195
+ */
196
+ export async function filterInstalledPackages(packages, cwd) {
197
+ const declared = await readDeclaredDependencies(cwd);
198
+ if (!declared)
199
+ return packages;
200
+ return packages.filter(spec => {
201
+ const { name, range } = parseSpec(spec);
202
+ const declaredRange = declared[name];
203
+ if (!declaredRange)
204
+ return true;
205
+ if (!isResolvable(name, cwd))
206
+ return true;
207
+ if (range && majorOf(range) !== majorOf(declaredRange))
208
+ return true;
209
+ return false;
210
+ });
211
+ }
212
+ function parseSpec(spec) {
213
+ // O `@` de `@ng-icons/core` abre o escopo, não a versão — por isso o último.
214
+ const separator = spec.lastIndexOf('@');
215
+ if (separator <= 0)
216
+ return { name: spec, range: null };
217
+ return { name: spec.slice(0, separator), range: spec.slice(separator + 1) };
218
+ }
219
+ function majorOf(range) {
220
+ return /(\d+)/.exec(range)?.[1] ?? null;
221
+ }
222
+ async function readDeclaredDependencies(cwd) {
223
+ try {
224
+ const manifest = JSON.parse(await readFile(path.join(cwd, 'package.json'), 'utf8'));
225
+ return { ...manifest.dependencies, ...manifest.devDependencies };
226
+ }
227
+ catch {
228
+ return null;
229
+ }
230
+ }
231
+ /** node_modules pode estar acima do projeto — workspaces içam tudo para a raiz. */
232
+ function isResolvable(name, cwd) {
233
+ let dir = path.resolve(cwd);
234
+ for (;;) {
235
+ if (existsSync(path.join(dir, 'node_modules', name)))
236
+ return true;
237
+ const parent = path.dirname(dir);
238
+ if (parent === dir)
239
+ return false;
240
+ dir = parent;
241
+ }
49
242
  }
50
243
  //# sourceMappingURL=package-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,IAAI,oBAAoB,GAA0B,IAAI,CAAC;AAEvD,MAAM,SAAS,GAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5E,SAAS,gBAAgB,CAAC,KAAgC;IACxD,iEAAiE;IACjE,MAAM,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAsB,CAAC,CAAC,CAAC,CAAE,IAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpE,IAAI,oBAAoB;QAAE,OAAO,oBAAoB,CAAC;IAEtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,QAAQ;QAAE,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACjF,IAAI,YAAY;QAAE,OAAO,CAAC,oBAAoB,GAAG,YAAY,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAE1D,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC,CAAC;IACrE,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,oBAAoB,GAAG,MAAM,CAAC,CAAC;IACvE,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,oBAAoB,GAAG,MAAM,CAAC,CAAC;IAEvE,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,MAAM,GAAmC;IAC7C,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,cAA8B;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAE1D,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACnD,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACrD,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACrD,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAEnD,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;AAChC,CAAC;AAED,6FAA6F;AAC7F,KAAK,UAAU,uBAAuB,CAAC,GAAW;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,OAAO,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,MAAM,EAAE,cAAc,IAAI,KAAK,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,cAAsB,EAAE,KAAK,GAAG,KAAK;IAC3E,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,KAAK,CAAC;QACX;YACE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,cAA8B;IAChD,OAAO,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAkB,EAClB,GAAW,EACX,cAA+C,EAC/C,KAAK,GAAG,KAAK,EACb,cAAc,GAAG,KAAK;IAEtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAEzE,IAAI,cAAc,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,cAAc,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,4BAA4B;IAC5B,IAAI,WAAW,EAAE,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,0EAA0E;YAC1E,uEAAuE;YACvE,wEAAwE;YACxE,iCAAiC;YACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE;gBAC/C,GAAG;gBACH,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,aAAa,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAA2D,CAAC;IAC5G,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC;AAED,uGAAuG;AACvG,SAAS,aAAa,CAAC,cAA8B;IACnD,OAAO,cAAc,KAAK,KAAK,IAAI,cAAc,KAAK,MAAM,CAAC;AAC/D,CAAC;AAED,IAAI,qBAAqB,GAAG,KAAK,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAkB,EAClB,GAAW,EACX,cAA8B,EAC9B,KAAK,GAAG,KAAK;IAEb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,MAAM,KAAK,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACxF,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAClE,qBAAqB,GAAG,IAAI,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAkB,EAAE,GAAW;IAC3E,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE/B,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC;YAAE,OAAO,IAAI,CAAC;QAEpE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,6EAA6E;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEvD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACjD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,OAAO,EAAE,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,IAAY,EAAE,GAAW;IAC7C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5B,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAElE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QACjC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -33,6 +33,16 @@ export declare function fetchRegistryIndex(registryUrl?: string): Promise<Regist
33
33
  export declare function invalidateRegistryCache(): void;
34
34
  export declare function fetchComponentFromRegistry(componentName: string, registryUrl?: string): Promise<RegistryItem>;
35
35
  export declare function getAvailableComponents(registryUrl?: string): Promise<string[]>;
36
- export declare function transformContent(content: string, config: Config): string;
37
- export declare function fetchComponent(componentName: string, config: Config, registryUrl?: string): Promise<RegistryItem>;
36
+ export interface TransformOptions {
37
+ /**
38
+ * O destino veio de `--path`, fora do alias configurado.
39
+ *
40
+ * Nesse caso os componentes do lote viram vizinhos no disco, e é o caminho
41
+ * relativo que resolve — o alias apontaria para a pasta onde eles não estão.
42
+ * `utils` e `core` continuam no alias, porque quem os instalou foi o `init`.
43
+ */
44
+ readonly siblingComponents?: boolean;
45
+ }
46
+ export declare function transformContent(content: string, config: Config, options?: TransformOptions): string;
47
+ export declare function fetchComponent(componentName: string, config: Config, registryUrl?: string, options?: TransformOptions): Promise<RegistryItem>;
38
48
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAInD,eAAO,MAAM,oBAAoB,QAE0D,CAAC;AAE5F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAarD;AAKD,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAYrF;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAInH;AAED,wBAAsB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGpF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAyCxE;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAInD,eAAO,MAAM,oBAAoB,QAE0D,CAAC;AAE5F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAarD;AAKD,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAYrF;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAInH;AAED,wBAAsB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGpF;AAOD,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAoDxG;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
package/utils/registry.js CHANGED
@@ -45,9 +45,18 @@ export async function getAvailableComponents(registryUrl) {
45
45
  const index = await fetchRegistryIndex(registryUrl);
46
46
  return index.items.map(item => item.name);
47
47
  }
48
- export function transformContent(content, config) {
48
+ /** Sem isto, um alias digitado como `@/ui/components/` produz `@/ui/components//button`. */
49
+ function trimSlashes(alias) {
50
+ return alias.replace(/\/+$/, '');
51
+ }
52
+ export function transformContent(content, config, options = {}) {
49
53
  let transformed = content;
50
- const { aliases } = config;
54
+ const aliases = {
55
+ components: options.siblingComponents ? '..' : trimSlashes(config.aliases.components),
56
+ utils: trimSlashes(config.aliases.utils),
57
+ core: trimSlashes(config.aliases.core),
58
+ services: trimSlashes(config.aliases.services),
59
+ };
51
60
  // Replace utils imports
52
61
  transformed = transformed.replace(/from ['"]\.\.\/\.\.\/shared\/utils\/utils['"]/g, `from '${aliases.utils}/merge-classes'`);
53
62
  transformed = transformed.replace(/from ['"]\.\.\/\.\.\/shared\/utils\/number['"]/g, `from '${aliases.utils}/number'`);
@@ -62,19 +71,25 @@ export function transformContent(content, config) {
62
71
  if (!value) {
63
72
  continue;
64
73
  }
65
- const regex = new RegExp(`(['"])@\\/shared\\/${key}\\/([\\w\\-\\/.]+)\\1`, 'g');
66
- transformed = transformed.replace(regex, `$1${value}/$2$1`);
74
+ // O subpath é opcional: `card.component.ts` importa o barrel direto
75
+ // (`from '@/shared/core'`). Exigindo `/algo` depois da chave, esse import
76
+ // escapava da substituição e o componente instalado continuava apontando
77
+ // para `@/shared/core` — uma pasta que não existe com alias customizado.
78
+ const regex = new RegExp(`(['"])@\\/shared\\/${key}(\\/[\\w\\-\\/.]+)?\\1`, 'g');
79
+ transformed = transformed.replace(regex, (_match, quote, subpath) => {
80
+ return `${quote}${value}${subpath ?? ''}${quote}`;
81
+ });
67
82
  }
68
83
  return transformed;
69
84
  }
70
- export async function fetchComponent(componentName, config, registryUrl) {
85
+ export async function fetchComponent(componentName, config, registryUrl, options = {}) {
71
86
  const item = await fetchComponentFromRegistry(componentName, registryUrl);
72
87
  if (!item.files || !Array.isArray(item.files)) {
73
88
  throw new ConfigError(`Component "${componentName}" has no files in the registry`);
74
89
  }
75
90
  const transformedFiles = item.files.map(file => ({
76
91
  name: file.name,
77
- content: transformContent(file.content, config),
92
+ content: transformContent(file.content, config, options),
78
93
  }));
79
94
  return {
80
95
  ...item,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Edições de código-fonte que mais de um passo do init precisa fazer.
3
+ *
4
+ * Inserir um import parece trivial até o arquivo estar em CRLF: um `\n` cru
5
+ * gera terminações misturadas, faz o git marcar o arquivo inteiro como alterado
6
+ * e — quando a expressão que procura os imports esquece o `\r` — emenda a linha
7
+ * nova no fim da anterior.
8
+ */
9
+ /** A quebra de linha que o arquivo já usa. */
10
+ export declare function lineEndingOf(content: string): string;
11
+ /**
12
+ * Insere uma linha de import logo depois do último import do arquivo.
13
+ *
14
+ * Devolve o conteúdo intocado quando o import já está lá, para que chamar duas
15
+ * vezes seja o mesmo que chamar uma.
16
+ */
17
+ export declare function withImport(content: string, importLine: string): string;
18
+ /** Onde um literal de array começa e termina, em índices do conteúdo. */
19
+ export interface ArrayRange {
20
+ /** Índice do `[` que abre. */
21
+ readonly open: number;
22
+ /** Índice do `]` que fecha. */
23
+ readonly close: number;
24
+ /** O que está entre os dois, sem os colchetes. */
25
+ readonly body: string;
26
+ }
27
+ /**
28
+ * O intervalo do array atribuído a `key`, achado contando colchetes.
29
+ *
30
+ * Uma expressão regular para no primeiro `]` que aparece, e em código real esse
31
+ * `]` costuma ser o de um array aninhado — `withInterceptors([...])` num
32
+ * `providers`, um plugin com opções num `plugins`. O que fosse inserido ali
33
+ * caía dentro do array errado, e o build quebrava com um erro de tipo que não
34
+ * menciona ZardUI em lugar nenhum.
35
+ *
36
+ * Strings e comentários são pulados, para que um `]` escrito dentro deles não
37
+ * conte como fechamento.
38
+ */
39
+ export declare function arrayRange(content: string, key: string): ArrayRange | null;
40
+ //# sourceMappingURL=source-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-file.d.ts","sourceRoot":"","sources":["../../src/utils/source-file.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAgBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAYtE;AAED,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAyB1E"}