zard-cli 1.0.0-beta.11 → 1.0.0-beta.111

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 (257) hide show
  1. package/README.md +39 -167
  2. package/commands/add/component-installer.d.ts +4 -1
  3. package/commands/add/component-installer.d.ts.map +1 -1
  4. package/commands/add/component-installer.js +33 -5
  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 +5 -11
  13. package/commands/add/dark-mode-setup.js.map +1 -1
  14. package/commands/add/dependency-resolver.d.ts +3 -2
  15. package/commands/add/dependency-resolver.d.ts.map +1 -1
  16. package/commands/add/dependency-resolver.js +23 -9
  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 +137 -85
  20. package/commands/add/index.js.map +1 -1
  21. package/commands/add/wizard.d.ts +31 -0
  22. package/commands/add/wizard.d.ts.map +1 -0
  23. package/commands/add/wizard.js +289 -0
  24. package/commands/add/wizard.js.map +1 -0
  25. package/commands/init/config-prompter.d.ts +61 -56
  26. package/commands/init/config-prompter.d.ts.map +1 -1
  27. package/commands/init/config-prompter.js +84 -74
  28. package/commands/init/config-prompter.js.map +1 -1
  29. package/commands/init/dependencies.d.ts +1 -8
  30. package/commands/init/dependencies.d.ts.map +1 -1
  31. package/commands/init/dependencies.js +47 -16
  32. package/commands/init/dependencies.js.map +1 -1
  33. package/commands/init/index.d.ts.map +1 -1
  34. package/commands/init/index.js +150 -86
  35. package/commands/init/index.js.map +1 -1
  36. package/commands/init/project-kind.d.ts +82 -0
  37. package/commands/init/project-kind.d.ts.map +1 -0
  38. package/commands/init/project-kind.js +166 -0
  39. package/commands/init/project-kind.js.map +1 -0
  40. package/commands/init/steps.d.ts +16 -0
  41. package/commands/init/steps.d.ts.map +1 -0
  42. package/commands/init/steps.js +153 -0
  43. package/commands/init/steps.js.map +1 -0
  44. package/commands/init/tailwind-setup.d.ts +9 -2
  45. package/commands/init/tailwind-setup.d.ts.map +1 -1
  46. package/commands/init/tailwind-setup.js +33 -9
  47. package/commands/init/tailwind-setup.js.map +1 -1
  48. package/commands/init/theme-loader.d.ts.map +1 -1
  49. package/commands/init/theme-loader.js +1 -3
  50. package/commands/init/theme-loader.js.map +1 -1
  51. package/commands/init/tsconfig-updater.d.ts +8 -1
  52. package/commands/init/tsconfig-updater.d.ts.map +1 -1
  53. package/commands/init/tsconfig-updater.js +30 -11
  54. package/commands/init/tsconfig-updater.js.map +1 -1
  55. package/commands/init/update-angular-config.d.ts.map +1 -1
  56. package/commands/init/update-angular-config.js +28 -47
  57. package/commands/init/update-angular-config.js.map +1 -1
  58. package/commands/init/vite-setup.d.ts +10 -0
  59. package/commands/init/vite-setup.d.ts.map +1 -0
  60. package/commands/init/vite-setup.js +60 -0
  61. package/commands/init/vite-setup.js.map +1 -0
  62. package/commands/init/wizard.d.ts +30 -0
  63. package/commands/init/wizard.d.ts.map +1 -0
  64. package/commands/init/wizard.js +560 -0
  65. package/commands/init/wizard.js.map +1 -0
  66. package/core/icons/families.d.ts +38 -0
  67. package/core/icons/families.d.ts.map +1 -0
  68. package/core/icons/families.js +26 -0
  69. package/core/icons/families.js.map +1 -0
  70. package/core/icons/icon-map.d.ts +24 -0
  71. package/core/icons/icon-map.d.ts.map +1 -0
  72. package/core/icons/icon-map.js +130 -0
  73. package/core/icons/icon-map.js.map +1 -0
  74. package/core/icons/index.d.ts +107 -0
  75. package/core/icons/index.d.ts.map +1 -0
  76. package/core/icons/index.js +183 -0
  77. package/core/icons/index.js.map +1 -0
  78. package/core/registry/registry-data.d.ts.map +1 -1
  79. package/core/registry/registry-data.js +571 -84
  80. package/core/registry/registry-data.js.map +1 -1
  81. package/core/themes/theme-definitions.d.ts +5 -5
  82. package/core/themes/theme-definitions.d.ts.map +1 -1
  83. package/core/themes/theme-definitions.js +65 -61
  84. package/core/themes/theme-definitions.js.map +1 -1
  85. package/index.js +40 -4
  86. package/index.js.map +1 -1
  87. package/package.json +4 -7
  88. package/ui/blocks.d.ts +70 -0
  89. package/ui/blocks.d.ts.map +1 -0
  90. package/ui/blocks.js +116 -0
  91. package/ui/blocks.js.map +1 -0
  92. package/ui/brand.d.ts +14 -0
  93. package/ui/brand.d.ts.map +1 -0
  94. package/ui/brand.js +35 -0
  95. package/ui/brand.js.map +1 -0
  96. package/ui/engine/animation/index.d.ts +39 -0
  97. package/ui/engine/animation/index.d.ts.map +1 -0
  98. package/ui/engine/animation/index.js +103 -0
  99. package/ui/engine/animation/index.js.map +1 -0
  100. package/ui/engine/ansi/index.d.ts +52 -0
  101. package/ui/engine/ansi/index.d.ts.map +1 -0
  102. package/ui/engine/ansi/index.js +117 -0
  103. package/ui/engine/ansi/index.js.map +1 -0
  104. package/ui/engine/components/index.d.ts +211 -0
  105. package/ui/engine/components/index.d.ts.map +1 -0
  106. package/ui/engine/components/index.js +109 -0
  107. package/ui/engine/components/index.js.map +1 -0
  108. package/ui/engine/cursor/index.d.ts +17 -0
  109. package/ui/engine/cursor/index.d.ts.map +1 -0
  110. package/ui/engine/cursor/index.js +41 -0
  111. package/ui/engine/cursor/index.js.map +1 -0
  112. package/ui/engine/diff/index.d.ts +27 -0
  113. package/ui/engine/diff/index.d.ts.map +1 -0
  114. package/ui/engine/diff/index.js +57 -0
  115. package/ui/engine/diff/index.js.map +1 -0
  116. package/ui/engine/events/index.d.ts +24 -0
  117. package/ui/engine/events/index.d.ts.map +1 -0
  118. package/ui/engine/events/index.js +60 -0
  119. package/ui/engine/events/index.js.map +1 -0
  120. package/ui/engine/focus/index.d.ts +25 -0
  121. package/ui/engine/focus/index.d.ts.map +1 -0
  122. package/ui/engine/focus/index.js +77 -0
  123. package/ui/engine/focus/index.js.map +1 -0
  124. package/ui/engine/frame/index.d.ts +48 -0
  125. package/ui/engine/frame/index.d.ts.map +1 -0
  126. package/ui/engine/frame/index.js +0 -0
  127. package/ui/engine/frame/index.js.map +1 -0
  128. package/ui/engine/index.d.ts +28 -0
  129. package/ui/engine/index.d.ts.map +1 -0
  130. package/ui/engine/index.js +28 -0
  131. package/ui/engine/index.js.map +1 -0
  132. package/ui/engine/input/index.d.ts +36 -0
  133. package/ui/engine/input/index.d.ts.map +1 -0
  134. package/ui/engine/input/index.js +224 -0
  135. package/ui/engine/input/index.js.map +1 -0
  136. package/ui/engine/layout/index.d.ts +42 -0
  137. package/ui/engine/layout/index.d.ts.map +1 -0
  138. package/ui/engine/layout/index.js +241 -0
  139. package/ui/engine/layout/index.js.map +1 -0
  140. package/ui/engine/renderer/index.d.ts +43 -0
  141. package/ui/engine/renderer/index.d.ts.map +1 -0
  142. package/ui/engine/renderer/index.js +619 -0
  143. package/ui/engine/renderer/index.js.map +1 -0
  144. package/ui/engine/scheduler/index.d.ts +22 -0
  145. package/ui/engine/scheduler/index.d.ts.map +1 -0
  146. package/ui/engine/scheduler/index.js +77 -0
  147. package/ui/engine/scheduler/index.js.map +1 -0
  148. package/ui/engine/screen/index.d.ts +39 -0
  149. package/ui/engine/screen/index.d.ts.map +1 -0
  150. package/ui/engine/screen/index.js +255 -0
  151. package/ui/engine/screen/index.js.map +1 -0
  152. package/ui/engine/terminal/index.d.ts +84 -0
  153. package/ui/engine/terminal/index.d.ts.map +1 -0
  154. package/ui/engine/terminal/index.js +235 -0
  155. package/ui/engine/terminal/index.js.map +1 -0
  156. package/ui/engine/testing/index.d.ts +27 -0
  157. package/ui/engine/testing/index.d.ts.map +1 -0
  158. package/ui/engine/testing/index.js +63 -0
  159. package/ui/engine/testing/index.js.map +1 -0
  160. package/ui/engine/theme/index.d.ts +27 -0
  161. package/ui/engine/theme/index.d.ts.map +1 -0
  162. package/ui/engine/theme/index.js +129 -0
  163. package/ui/engine/theme/index.js.map +1 -0
  164. package/ui/engine/utils/index.d.ts +12 -0
  165. package/ui/engine/utils/index.d.ts.map +1 -0
  166. package/ui/engine/utils/index.js +143 -0
  167. package/ui/engine/utils/index.js.map +1 -0
  168. package/ui/gate.d.ts +19 -0
  169. package/ui/gate.d.ts.map +1 -0
  170. package/ui/gate.js +36 -0
  171. package/ui/gate.js.map +1 -0
  172. package/ui/index.d.ts +18 -0
  173. package/ui/index.d.ts.map +1 -0
  174. package/ui/index.js +18 -0
  175. package/ui/index.js.map +1 -0
  176. package/ui/log-sink.d.ts +24 -0
  177. package/ui/log-sink.d.ts.map +1 -0
  178. package/ui/log-sink.js +35 -0
  179. package/ui/log-sink.js.map +1 -0
  180. package/ui/output.d.ts +14 -0
  181. package/ui/output.d.ts.map +1 -0
  182. package/ui/output.js +28 -0
  183. package/ui/output.js.map +1 -0
  184. package/ui/report.d.ts +30 -0
  185. package/ui/report.d.ts.map +1 -0
  186. package/ui/report.js +45 -0
  187. package/ui/report.js.map +1 -0
  188. package/ui/runner.d.ts +66 -0
  189. package/ui/runner.d.ts.map +1 -0
  190. package/ui/runner.js +135 -0
  191. package/ui/runner.js.map +1 -0
  192. package/ui/style.d.ts +24 -0
  193. package/ui/style.d.ts.map +1 -0
  194. package/ui/style.js +44 -0
  195. package/ui/style.js.map +1 -0
  196. package/ui/testing/fake-tty.d.ts +26 -0
  197. package/ui/testing/fake-tty.d.ts.map +1 -0
  198. package/ui/testing/fake-tty.js +61 -0
  199. package/ui/testing/fake-tty.js.map +1 -0
  200. package/ui/text-input.d.ts +30 -0
  201. package/ui/text-input.d.ts.map +1 -0
  202. package/ui/text-input.js +87 -0
  203. package/ui/text-input.js.map +1 -0
  204. package/ui/theme.d.ts +10 -0
  205. package/ui/theme.d.ts.map +1 -0
  206. package/ui/theme.js +20 -0
  207. package/ui/theme.js.map +1 -0
  208. package/utils/config.d.ts +52 -69
  209. package/utils/config.d.ts.map +1 -1
  210. package/utils/config.js +58 -7
  211. package/utils/config.js.map +1 -1
  212. package/utils/errors.d.ts +27 -0
  213. package/utils/errors.d.ts.map +1 -0
  214. package/utils/errors.js +45 -0
  215. package/utils/errors.js.map +1 -0
  216. package/utils/get-package-info.js +4 -4
  217. package/utils/get-package-info.js.map +1 -1
  218. package/utils/get-project-info.d.ts +30 -0
  219. package/utils/get-project-info.d.ts.map +1 -1
  220. package/utils/get-project-info.js +195 -6
  221. package/utils/get-project-info.js.map +1 -1
  222. package/utils/http-client.d.ts +8 -0
  223. package/utils/http-client.d.ts.map +1 -0
  224. package/utils/http-client.js +68 -0
  225. package/utils/http-client.js.map +1 -0
  226. package/utils/icon-catalog.d.ts +33 -0
  227. package/utils/icon-catalog.d.ts.map +1 -0
  228. package/utils/icon-catalog.js +62 -0
  229. package/utils/icon-catalog.js.map +1 -0
  230. package/utils/logger.d.ts +16 -1
  231. package/utils/logger.d.ts.map +1 -1
  232. package/utils/logger.js +104 -12
  233. package/utils/logger.js.map +1 -1
  234. package/utils/package-manager.d.ts +44 -1
  235. package/utils/package-manager.d.ts.map +1 -1
  236. package/utils/package-manager.js +210 -14
  237. package/utils/package-manager.js.map +1 -1
  238. package/utils/registry.d.ts +44 -2
  239. package/utils/registry.d.ts.map +1 -1
  240. package/utils/registry.js +82 -27
  241. package/utils/registry.js.map +1 -1
  242. package/utils/schema-version.d.ts +20 -0
  243. package/utils/schema-version.d.ts.map +1 -0
  244. package/utils/schema-version.js +27 -0
  245. package/utils/schema-version.js.map +1 -0
  246. package/utils/source-file.d.ts +40 -0
  247. package/utils/source-file.d.ts.map +1 -0
  248. package/utils/source-file.js +104 -0
  249. package/utils/source-file.js.map +1 -0
  250. package/utils/theme-selector.d.ts +1 -1
  251. package/utils/theme-selector.d.ts.map +1 -1
  252. package/utils/theme-selector.js +6 -6
  253. package/utils/theme-selector.js.map +1 -1
  254. package/utils/fetch-component.d.ts +0 -3
  255. package/utils/fetch-component.d.ts.map +0 -1
  256. package/utils/fetch-component.js +0 -75
  257. package/utils/fetch-component.js.map +0 -1
@@ -1,5 +1,23 @@
1
+ import { type IconFamily } from '../core/icons/index.js';
1
2
  import type { Config } from '../utils/config.js';
2
3
  export declare const DEFAULT_REGISTRY_URL: string;
4
+ /**
5
+ * Os ícones que um componente desenha, como o registry os publica.
6
+ *
7
+ * `family` é a família em que os arquivos estão escritos — quem instala com
8
+ * outra família em `components.json` sabe, por este campo, que precisa
9
+ * reescrevê-los. Ausente nos itens publicados antes desta propriedade.
10
+ */
11
+ export interface RegistryIcons {
12
+ family: string;
13
+ symbols: string[];
14
+ tokens: string[];
15
+ /** Os ícones que só aparecem nos demos. Ausente no índice, que não os carrega. */
16
+ demos?: {
17
+ symbols: string[];
18
+ tokens: string[];
19
+ };
20
+ }
3
21
  export interface RegistryItem {
4
22
  name: string;
5
23
  type: 'registry:component';
@@ -11,9 +29,12 @@ export interface RegistryItem {
11
29
  dependencies?: string[];
12
30
  devDependencies?: string[];
13
31
  registryDependencies?: string[];
32
+ icons?: RegistryIcons;
14
33
  }
15
34
  export interface RegistryIndex {
16
35
  $schema: string;
36
+ /** A forma do arquivo. Ausente nos registries anteriores ao campo. */
37
+ schemaVersion?: number;
17
38
  name: string;
18
39
  homepage: string;
19
40
  version: string;
@@ -24,13 +45,34 @@ export interface RegistryIndex {
24
45
  dependencies?: string[];
25
46
  devDependencies?: string[];
26
47
  registryDependencies?: string[];
48
+ icons?: RegistryIcons;
27
49
  files: string[];
28
50
  }>;
29
51
  }
52
+ /**
53
+ * A família em que os arquivos do item estão escritos.
54
+ *
55
+ * Um item sem `icons` — publicado antes da propriedade — está em lucide, que
56
+ * era a única possibilidade. Um valor desconhecido também: preferir o palpite
57
+ * certo a recusar a instalação por causa de um campo novo.
58
+ */
59
+ export declare function sourceFamilyOf(item: Pick<RegistryItem, 'icons'>): IconFamily;
30
60
  export declare function getRegistryUrl(config?: Config): string;
61
+ export declare function validateRegistryUrl(url: string): void;
31
62
  export declare function fetchRegistryIndex(registryUrl?: string): Promise<RegistryIndex>;
63
+ export declare function invalidateRegistryCache(): void;
32
64
  export declare function fetchComponentFromRegistry(componentName: string, registryUrl?: string): Promise<RegistryItem>;
33
65
  export declare function getAvailableComponents(registryUrl?: string): Promise<string[]>;
34
- export declare function transformContent(content: string, config: Config): string;
35
- export declare function fetchComponent(componentName: string, config: Config, registryUrl?: string): Promise<RegistryItem>;
66
+ export interface TransformOptions {
67
+ /**
68
+ * O destino veio de `--path`, fora do alias configurado.
69
+ *
70
+ * Nesse caso os componentes do lote viram vizinhos no disco, e é o caminho
71
+ * relativo que resolve — o alias apontaria para a pasta onde eles não estão.
72
+ * `utils` e `core` continuam no alias, porque quem os instalou foi o `init`.
73
+ */
74
+ readonly siblingComponents?: boolean;
75
+ }
76
+ export declare function transformContent(content: string, config: Config, options?: TransformOptions): string;
77
+ export declare function fetchComponent(componentName: string, config: Config, registryUrl?: string, options?: TransformOptions): Promise<RegistryItem>;
36
78
  //# 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;AAGnD,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;AA4BD,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAIrF;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,CA+BxE;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAYvB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAmD,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC5G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAOnD,eAAO,MAAM,oBAAoB,QAE0D,CAAC;AAE5F;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kFAAkF;IAClF,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjD;AAED,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;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,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,CAAC,EAAE,aAAa,CAAC;QACtB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,UAAU,CAG5E;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,CAcrF;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,CAoCvB"}
package/utils/registry.js CHANGED
@@ -1,38 +1,56 @@
1
1
  import { DEFAULT_REGISTRY_URL as BUILD_REGISTRY_URL } from '../config/registry-config.js';
2
- import { execa } from 'execa';
2
+ import { isIconFamily, retargetIcons, SOURCE_ICON_FAMILY } from '../core/icons/index.js';
3
+ import { ConfigError } from '../utils/errors.js';
4
+ import { fetchJson } from '../utils/http-client.js';
5
+ import { iconCatalog } from '../utils/icon-catalog.js';
6
+ import { logger } from '../utils/logger.js';
7
+ import { assertSupportedSchema } from '../utils/schema-version.js';
3
8
  export const DEFAULT_REGISTRY_URL = process.env['ZARD_REGISTRY_URL'] ||
4
9
  (BUILD_REGISTRY_URL !== '__REGISTRY_URL__' ? BUILD_REGISTRY_URL : 'https://zardui.com/r');
10
+ /**
11
+ * A família em que os arquivos do item estão escritos.
12
+ *
13
+ * Um item sem `icons` — publicado antes da propriedade — está em lucide, que
14
+ * era a única possibilidade. Um valor desconhecido também: preferir o palpite
15
+ * certo a recusar a instalação por causa de um campo novo.
16
+ */
17
+ export function sourceFamilyOf(item) {
18
+ const family = item.icons?.family;
19
+ return family !== undefined && isIconFamily(family, iconCatalog()) ? family : SOURCE_ICON_FAMILY;
20
+ }
5
21
  export function getRegistryUrl(config) {
6
22
  return config?.registryUrl || DEFAULT_REGISTRY_URL;
7
23
  }
8
- async function fetchJson(url) {
24
+ export function validateRegistryUrl(url) {
9
25
  try {
10
- const { stdout } = await execa('curl', [
11
- '-s',
12
- '-H',
13
- 'Accept: application/json',
14
- '-H',
15
- 'User-Agent: ngzard-cli',
16
- '--max-time',
17
- '30',
18
- url,
19
- ]);
20
- if (!stdout || stdout.includes('<!DOCTYPE') || stdout.includes('<html')) {
21
- throw new Error(`Invalid response from registry: ${url}`);
26
+ const parsed = new URL(url);
27
+ const isHttps = parsed.protocol === 'https:';
28
+ const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
29
+ if (!isHttps && !isLocalhost) {
30
+ throw new ConfigError('Registry URL must use HTTPS (or localhost for development)');
22
31
  }
23
- return JSON.parse(stdout);
24
32
  }
25
33
  catch (error) {
26
- if (error instanceof SyntaxError) {
27
- throw new Error(`Invalid JSON response from registry: ${url}`);
28
- }
29
- throw new Error(`Failed to fetch from registry: ${url} - ${error}`);
34
+ if (error instanceof ConfigError)
35
+ throw error;
36
+ throw new ConfigError(`Invalid registry URL: ${url}`);
30
37
  }
31
38
  }
39
+ const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
40
+ let registryIndexCache = null;
32
41
  export async function fetchRegistryIndex(registryUrl) {
33
42
  const baseUrl = registryUrl || DEFAULT_REGISTRY_URL;
43
+ if (registryIndexCache && Date.now() - registryIndexCache.timestamp < CACHE_TTL) {
44
+ return registryIndexCache.data;
45
+ }
34
46
  const url = `${baseUrl}/registry.json`;
35
- return fetchJson(url);
47
+ const data = await fetchJson(url);
48
+ assertSupportedSchema(data.schemaVersion, 'registry.json');
49
+ registryIndexCache = { data, timestamp: Date.now() };
50
+ return data;
51
+ }
52
+ export function invalidateRegistryCache() {
53
+ registryIndexCache = null;
36
54
  }
37
55
  export async function fetchComponentFromRegistry(componentName, registryUrl) {
38
56
  const baseUrl = registryUrl || DEFAULT_REGISTRY_URL;
@@ -43,9 +61,18 @@ export async function getAvailableComponents(registryUrl) {
43
61
  const index = await fetchRegistryIndex(registryUrl);
44
62
  return index.items.map(item => item.name);
45
63
  }
46
- export function transformContent(content, config) {
64
+ /** Sem isto, um alias digitado como `@/ui/components/` produz `@/ui/components//button`. */
65
+ function trimSlashes(alias) {
66
+ return alias.replace(/\/+$/, '');
67
+ }
68
+ export function transformContent(content, config, options = {}) {
47
69
  let transformed = content;
48
- const { aliases } = config;
70
+ const aliases = {
71
+ components: options.siblingComponents ? '..' : trimSlashes(config.aliases.components),
72
+ utils: trimSlashes(config.aliases.utils),
73
+ core: trimSlashes(config.aliases.core),
74
+ services: trimSlashes(config.aliases.services),
75
+ };
49
76
  // Replace utils imports
50
77
  transformed = transformed.replace(/from ['"]\.\.\/\.\.\/shared\/utils\/utils['"]/g, `from '${aliases.utils}/merge-classes'`);
51
78
  transformed = transformed.replace(/from ['"]\.\.\/\.\.\/shared\/utils\/number['"]/g, `from '${aliases.utils}/number'`);
@@ -55,14 +82,42 @@ export function transformContent(content, config) {
55
82
  // Replace ClassValue imports
56
83
  transformed = transformed.replace(/import \{ ClassValue \} from ['"]class-variance-authority\/dist\/types['"]/g, `import { ClassValue } from 'clsx'`);
57
84
  transformed = transformed.replace(/import \{ ClassValue \} from ['"]class-variance-authority['"]/g, `import { ClassValue } from 'clsx'`);
85
+ // Transform default @/shared/* to match aliases
86
+ for (const [key, value] of Object.entries(aliases)) {
87
+ if (!value) {
88
+ continue;
89
+ }
90
+ // O subpath é opcional: `card.component.ts` importa o barrel direto
91
+ // (`from '@/shared/core'`). Exigindo `/algo` depois da chave, esse import
92
+ // escapava da substituição e o componente instalado continuava apontando
93
+ // para `@/shared/core` — uma pasta que não existe com alias customizado.
94
+ const regex = new RegExp(`(['"])@\\/shared\\/${key}(\\/[\\w\\-\\/.]+)?\\1`, 'g');
95
+ transformed = transformed.replace(regex, (_match, quote, subpath) => {
96
+ return `${quote}${value}${subpath ?? ''}${quote}`;
97
+ });
98
+ }
58
99
  return transformed;
59
100
  }
60
- export async function fetchComponent(componentName, config, registryUrl) {
101
+ export async function fetchComponent(componentName, config, registryUrl, options = {}) {
61
102
  const item = await fetchComponentFromRegistry(componentName, registryUrl);
62
- const transformedFiles = item.files.map(file => ({
63
- name: file.name,
64
- content: transformContent(file.content, config),
65
- }));
103
+ if (!item.files || !Array.isArray(item.files)) {
104
+ throw new ConfigError(`Component "${componentName}" has no files in the registry`);
105
+ }
106
+ const sourceFamily = sourceFamilyOf(item);
107
+ const missing = new Set();
108
+ const transformedFiles = item.files.map(file => {
109
+ const retargeted = retargetIcons(transformContent(file.content, config, options), sourceFamily, config.icons, iconCatalog());
110
+ for (const symbol of retargeted.missing)
111
+ missing.add(symbol);
112
+ return { name: file.name, content: retargeted.content };
113
+ });
114
+ // Um ícone sem equivalente na família escolhida fica no símbolo original, e o
115
+ // import dele não resolve mais. Falhar a instalação inteira por causa disso
116
+ // seria pior: o resto do componente está correto e o conserto é uma linha.
117
+ if (missing.size > 0) {
118
+ logger.warn(`"${componentName}" uses icons that ${config.icons} does not provide: ${[...missing].sort().join(', ')}. ` +
119
+ 'They were left untouched — replace them by hand.');
120
+ }
66
121
  return {
67
122
  ...item,
68
123
  files: transformedFiles,
@@ -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,20 @@
1
+ /**
2
+ * A versão do FORMATO do registry que esta CLI entende.
3
+ *
4
+ * Não confundir com a versão do pacote, que o índice também publica: aquela diz
5
+ * de que release o conteúdo saiu, esta diz que forma ele tem. Sem separá-las não
6
+ * havia como o registry mudar de forma sem quebrar em silêncio quem já estava
7
+ * instalado — a CLI leria `files` de um item com outro shape e erraria calada.
8
+ *
9
+ * Sobe quando a mudança quebra quem lê: campo removido, significado alterado,
10
+ * item reorganizado. Campo novo e opcional não sobe nada.
11
+ */
12
+ export declare const SUPPORTED_SCHEMA_VERSION = 1;
13
+ /**
14
+ * Recusa um documento mais novo do que esta CLI sabe ler.
15
+ *
16
+ * A ausência do campo é um registry anterior à existência dele, que por
17
+ * definição é a versão 1.
18
+ */
19
+ export declare function assertSupportedSchema(schemaVersion: number | undefined, source: string): void;
20
+ //# sourceMappingURL=schema-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../src/utils/schema-version.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAS7F"}
@@ -0,0 +1,27 @@
1
+ import { SchemaVersionError } from '../utils/errors.js';
2
+ /**
3
+ * A versão do FORMATO do registry que esta CLI entende.
4
+ *
5
+ * Não confundir com a versão do pacote, que o índice também publica: aquela diz
6
+ * de que release o conteúdo saiu, esta diz que forma ele tem. Sem separá-las não
7
+ * havia como o registry mudar de forma sem quebrar em silêncio quem já estava
8
+ * instalado — a CLI leria `files` de um item com outro shape e erraria calada.
9
+ *
10
+ * Sobe quando a mudança quebra quem lê: campo removido, significado alterado,
11
+ * item reorganizado. Campo novo e opcional não sobe nada.
12
+ */
13
+ export const SUPPORTED_SCHEMA_VERSION = 1;
14
+ /**
15
+ * Recusa um documento mais novo do que esta CLI sabe ler.
16
+ *
17
+ * A ausência do campo é um registry anterior à existência dele, que por
18
+ * definição é a versão 1.
19
+ */
20
+ export function assertSupportedSchema(schemaVersion, source) {
21
+ const version = schemaVersion ?? 1;
22
+ if (version > SUPPORTED_SCHEMA_VERSION) {
23
+ throw new SchemaVersionError(`This registry publishes ${source} in format v${version}, and this CLI reads up to v${SUPPORTED_SCHEMA_VERSION}. ` +
24
+ 'Update it with `npm i -g zard-cli@latest`, or run it through npx, which always fetches the latest.');
25
+ }
26
+ }
27
+ //# sourceMappingURL=schema-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-version.js","sourceRoot":"","sources":["../../src/utils/schema-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAiC,EAAE,MAAc;IACrF,MAAM,OAAO,GAAG,aAAa,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,GAAG,wBAAwB,EAAE,CAAC;QACvC,MAAM,IAAI,kBAAkB,CAC1B,2BAA2B,MAAM,eAAe,OAAO,+BAA+B,wBAAwB,IAAI;YAChH,oGAAoG,CACvG,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -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"}
@@ -0,0 +1,104 @@
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 function lineEndingOf(content) {
11
+ return content.includes('\r\n') ? '\r\n' : '\n';
12
+ }
13
+ /** O último `import ... from '...'` do arquivo, ou null se não houver nenhum. */
14
+ function lastImport(content) {
15
+ // `[\s\S]*?` em vez de `.*`: a lista de símbolos importados quebra em várias
16
+ // linhas com frequência, e um padrão preso a uma linha só não a alcançava —
17
+ // num arquivo assim o import novo era jogado para antes de todos os outros.
18
+ const importRegex = /^import\s[\s\S]*?from\s+'[^']*';\r?\n?/gm;
19
+ let last = null;
20
+ let match;
21
+ while ((match = importRegex.exec(content)) !== null)
22
+ last = match;
23
+ return last;
24
+ }
25
+ /**
26
+ * Insere uma linha de import logo depois do último import do arquivo.
27
+ *
28
+ * Devolve o conteúdo intocado quando o import já está lá, para que chamar duas
29
+ * vezes seja o mesmo que chamar uma.
30
+ */
31
+ export function withImport(content, importLine) {
32
+ if (content.includes(importLine))
33
+ return content;
34
+ const eol = lineEndingOf(content);
35
+ const last = lastImport(content);
36
+ if (!last)
37
+ return importLine + eol + content;
38
+ const end = last.index + last[0].length;
39
+ const alreadyBroken = /\r?\n$/.test(last[0]);
40
+ return content.slice(0, end) + (alreadyBroken ? '' : eol) + importLine + eol + content.slice(end);
41
+ }
42
+ /**
43
+ * O intervalo do array atribuído a `key`, achado contando colchetes.
44
+ *
45
+ * Uma expressão regular para no primeiro `]` que aparece, e em código real esse
46
+ * `]` costuma ser o de um array aninhado — `withInterceptors([...])` num
47
+ * `providers`, um plugin com opções num `plugins`. O que fosse inserido ali
48
+ * caía dentro do array errado, e o build quebrava com um erro de tipo que não
49
+ * menciona ZardUI em lugar nenhum.
50
+ *
51
+ * Strings e comentários são pulados, para que um `]` escrito dentro deles não
52
+ * conte como fechamento.
53
+ */
54
+ export function arrayRange(content, key) {
55
+ const opening = new RegExp(`\\b${key}\\s*:\\s*\\[`).exec(content);
56
+ if (!opening)
57
+ return null;
58
+ const open = opening.index + opening[0].length - 1;
59
+ let depth = 0;
60
+ for (let index = open; index < content.length; index++) {
61
+ const skipped = skipStringOrComment(content, index);
62
+ if (skipped !== index) {
63
+ index = skipped - 1;
64
+ continue;
65
+ }
66
+ const char = content[index];
67
+ if (char === '[')
68
+ depth++;
69
+ else if (char === ']' && --depth === 0) {
70
+ return { open, close: index, body: content.slice(open + 1, index) };
71
+ }
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * O índice logo após a string ou o comentário que começa em `index`.
77
+ *
78
+ * Devolve o próprio `index` quando não há nenhum ali — quem chama usa isso para
79
+ * saber que o caractere é código e deve ser considerado.
80
+ */
81
+ function skipStringOrComment(content, index) {
82
+ const char = content[index];
83
+ const next = content[index + 1];
84
+ if (char === '/' && next === '/') {
85
+ const end = content.indexOf('\n', index);
86
+ return end === -1 ? content.length : end;
87
+ }
88
+ if (char === '/' && next === '*') {
89
+ const end = content.indexOf('*/', index + 2);
90
+ return end === -1 ? content.length : end + 2;
91
+ }
92
+ if (char !== '"' && char !== "'" && char !== '`')
93
+ return index;
94
+ for (let cursor = index + 1; cursor < content.length; cursor++) {
95
+ if (content[cursor] === '\\') {
96
+ cursor++;
97
+ continue;
98
+ }
99
+ if (content[cursor] === char)
100
+ return cursor + 1;
101
+ }
102
+ return content.length;
103
+ }
104
+ //# sourceMappingURL=source-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-file.js","sourceRoot":"","sources":["../../src/utils/source-file.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export declare function getAvailableThemes(): string[];
2
- export declare function getThemeContent(themeName: string): string;
2
+ export declare function getThemeContent(themeName: string, corePath: string): string;
3
3
  export declare function getThemeDisplayName(themeName: string): string;
4
4
  //# sourceMappingURL=theme-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-selector.d.ts","sourceRoot":"","sources":["../../src/utils/theme-selector.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkBzD;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7D"}
1
+ {"version":3,"file":"theme-selector.d.ts","sourceRoot":"","sources":["../../src/utils/theme-selector.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkB3E;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7D"}
@@ -2,20 +2,20 @@ import * as themes from '../core/themes/theme-definitions.js';
2
2
  export function getAvailableThemes() {
3
3
  return themes.availableThemes;
4
4
  }
5
- export function getThemeContent(themeName) {
5
+ export function getThemeContent(themeName, corePath) {
6
6
  const content = (() => {
7
7
  switch (themeName) {
8
8
  case 'stone':
9
- return themes.stone;
9
+ return themes.stone(corePath);
10
10
  case 'zinc':
11
- return themes.zinc;
11
+ return themes.zinc(corePath);
12
12
  case 'gray':
13
- return themes.gray;
13
+ return themes.gray(corePath);
14
14
  case 'slate':
15
- return themes.slate;
15
+ return themes.slate(corePath);
16
16
  case 'neutral':
17
17
  default:
18
- return themes.neutral;
18
+ return themes.neutral(corePath);
19
19
  }
20
20
  })();
21
21
  return content.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"theme-selector.js","sourceRoot":"","sources":["../../src/utils/theme-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAC;AAEhE,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,eAAe,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,KAAK,SAAS,CAAC;YACf;gBACE,OAAO,MAAM,CAAC,OAAO,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;KACf,CAAC;IACF,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"theme-selector.js","sourceRoot":"","sources":["../../src/utils/theme-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAC;AAEhE,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,eAAe,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB;IACjE,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,KAAK,SAAS,CAAC;YACf;gBACE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;KACf,CAAC;IACF,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Config } from '../utils/config.js';
2
- export declare function fetchComponentFromGithub(componentName: string, fileName: string, config: Config): Promise<string>;
3
- //# sourceMappingURL=fetch-component.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-component.d.ts","sourceRoot":"","sources":["../../src/utils/fetch-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA6EnD,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAYjB"}
@@ -1,75 +0,0 @@
1
- import { transformContent } from '../utils/registry.js';
2
- import { execa } from 'execa';
3
- import { readFileSync } from 'node:fs';
4
- import { join, dirname } from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = dirname(__filename);
8
- const GITHUB_API = 'https://api.github.com/repos/zard-ui/zardui/contents';
9
- function getCliVersion() {
10
- try {
11
- const packageJsonPath = join(__dirname, '../package.json');
12
- const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
13
- return packageJson.version;
14
- }
15
- catch (error) {
16
- console.warn('Failed to read CLI version from package.json, falling back to master branch');
17
- return 'master';
18
- }
19
- }
20
- /**
21
- * Get the GitHub ref (tag or branch) to fetch components from
22
- * Uses the CLI version tag (e.g., v1.2.3) to ensure component compatibility
23
- */
24
- function getGithubRef() {
25
- const version = getCliVersion();
26
- if (version === 'master' || version.includes('dev') || version === '0.0.0') {
27
- return 'master';
28
- }
29
- return `v${version}`;
30
- }
31
- const GITHUB_REF = getGithubRef();
32
- const GITHUB_RAW = `https://raw.githubusercontent.com/zard-ui/zardui/${GITHUB_REF}`;
33
- async function fetchFromGitHubAPI(filePath) {
34
- try {
35
- const apiUrl = `${GITHUB_API}/${filePath}?ref=${GITHUB_REF}`;
36
- const { stdout } = await execa('curl', [
37
- '-s',
38
- '-H',
39
- 'Accept: application/vnd.github.v3+json',
40
- '-H',
41
- 'User-Agent: zard-cli',
42
- apiUrl,
43
- ]);
44
- const response = JSON.parse(stdout);
45
- if (response.message) {
46
- throw new Error(response.message);
47
- }
48
- if (response.content && response.encoding === 'base64') {
49
- return Buffer.from(response.content, 'base64').toString('utf8');
50
- }
51
- throw new Error('Invalid response from GitHub API');
52
- }
53
- catch (error) {
54
- await new Promise(resolve => setTimeout(resolve, 3000));
55
- const rawUrl = `${GITHUB_RAW}/${filePath}`;
56
- const { stdout } = await execa('curl', ['-s', '-H', 'User-Agent: zard-cli', rawUrl]);
57
- if (!stdout || stdout.includes('429: Too Many Requests') || stdout.includes('404: Not Found')) {
58
- throw new Error(`Failed to fetch from both API and raw URL: ${filePath}`);
59
- }
60
- return stdout;
61
- }
62
- }
63
- export async function fetchComponentFromGithub(componentName, fileName, config) {
64
- try {
65
- const filePath = `libs/zard/src/lib/components/${componentName}/${fileName}`;
66
- const randomDelay = Math.random() * 2000 + 1000; // 1-3 seconds
67
- await new Promise(resolve => setTimeout(resolve, randomDelay));
68
- const content = await fetchFromGitHubAPI(filePath);
69
- return transformContent(content, config);
70
- }
71
- catch (error) {
72
- throw new Error(`Failed to fetch component ${componentName}/${fileName}: ${error}`);
73
- }
74
- }
75
- //# sourceMappingURL=fetch-component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-component.js","sourceRoot":"","sources":["../../src/utils/fetch-component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,UAAU,GAAG,sDAAsD,CAAC;AAE1E,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC5F,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY;IACnB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC3E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,OAAO,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;AAClC,MAAM,UAAU,GAAG,oDAAoD,UAAU,EAAE,CAAC;AAEpF,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,UAAU,IAAI,QAAQ,QAAQ,UAAU,EAAE,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACrC,IAAI;YACJ,IAAI;YACJ,wCAAwC;YACxC,IAAI;YACJ,sBAAsB;YACtB,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC;QAErF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,aAAqB,EACrB,QAAgB,EAChB,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,gCAAgC,aAAa,IAAI,QAAQ,EAAE,CAAC;QAE7E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc;QAC/D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,aAAa,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}