dcntui 0.1.7 → 0.1.8

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 (78) hide show
  1. package/dist/commands/add.d.ts.map +1 -1
  2. package/dist/commands/add.js +73 -19
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/config.d.ts +2 -0
  5. package/dist/commands/config.d.ts.map +1 -0
  6. package/dist/commands/config.js +68 -0
  7. package/dist/commands/config.js.map +1 -0
  8. package/dist/commands/doctor.d.ts +2 -0
  9. package/dist/commands/doctor.d.ts.map +1 -0
  10. package/dist/commands/doctor.js +348 -0
  11. package/dist/commands/doctor.js.map +1 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +10 -153
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/list.d.ts +6 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +104 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/remove.d.ts +2 -0
  20. package/dist/commands/remove.d.ts.map +1 -0
  21. package/dist/commands/remove.js +87 -0
  22. package/dist/commands/remove.js.map +1 -0
  23. package/dist/commands/search.d.ts +2 -0
  24. package/dist/commands/search.d.ts.map +1 -0
  25. package/dist/commands/search.js +124 -0
  26. package/dist/commands/search.js.map +1 -0
  27. package/dist/commands/update.d.ts +6 -0
  28. package/dist/commands/update.d.ts.map +1 -0
  29. package/dist/commands/update.js +247 -0
  30. package/dist/commands/update.js.map +1 -0
  31. package/dist/constants.d.ts +1 -0
  32. package/dist/constants.d.ts.map +1 -1
  33. package/dist/constants.js +1 -0
  34. package/dist/constants.js.map +1 -1
  35. package/dist/index.js +24 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/utils/banner.d.ts.map +1 -1
  38. package/dist/utils/banner.js.map +1 -1
  39. package/dist/utils/config.d.ts +2 -2
  40. package/dist/utils/config.d.ts.map +1 -1
  41. package/dist/utils/config.js.map +1 -1
  42. package/dist/utils/detect-css.d.ts +6 -6
  43. package/dist/utils/detect-css.d.ts.map +1 -1
  44. package/dist/utils/detect-css.js +16 -12
  45. package/dist/utils/detect-css.js.map +1 -1
  46. package/dist/utils/detect-framework.d.ts +1 -1
  47. package/dist/utils/detect-framework.d.ts.map +1 -1
  48. package/dist/utils/detect-package-manager.d.ts +1 -0
  49. package/dist/utils/detect-package-manager.d.ts.map +1 -1
  50. package/dist/utils/detect-package-manager.js +12 -0
  51. package/dist/utils/detect-package-manager.js.map +1 -1
  52. package/dist/utils/detect-typescript.d.ts.map +1 -1
  53. package/dist/utils/detect-typescript.js.map +1 -1
  54. package/dist/utils/helpers.d.ts +1 -1
  55. package/dist/utils/helpers.d.ts.map +1 -1
  56. package/dist/utils/helpers.js +4 -5
  57. package/dist/utils/helpers.js.map +1 -1
  58. package/dist/utils/lock.d.ts +6 -0
  59. package/dist/utils/lock.d.ts.map +1 -0
  60. package/dist/utils/lock.js +30 -0
  61. package/dist/utils/lock.js.map +1 -0
  62. package/dist/utils/registry.d.ts +27 -0
  63. package/dist/utils/registry.d.ts.map +1 -1
  64. package/dist/utils/registry.js +86 -2
  65. package/dist/utils/registry.js.map +1 -1
  66. package/dist/utils/search.d.ts +21 -0
  67. package/dist/utils/search.d.ts.map +1 -0
  68. package/dist/utils/search.js +104 -0
  69. package/dist/utils/search.js.map +1 -0
  70. package/dist/utils/wizard.d.ts +12 -0
  71. package/dist/utils/wizard.d.ts.map +1 -0
  72. package/dist/utils/wizard.js +168 -0
  73. package/dist/utils/wizard.js.map +1 -0
  74. package/dist/utils/write-component.d.ts +8 -0
  75. package/dist/utils/write-component.d.ts.map +1 -1
  76. package/dist/utils/write-component.js +83 -2
  77. package/dist/utils/write-component.js.map +1 -1
  78. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAU9C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAM3D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMhF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAM7D"}
@@ -0,0 +1,30 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { LOCK_FILE } from '../constants.js';
4
+ export function readLock(cwd) {
5
+ const lockPath = path.join(cwd, LOCK_FILE);
6
+ if (!fs.existsSync(lockPath))
7
+ return {};
8
+ try {
9
+ return JSON.parse(fs.readFileSync(lockPath, 'utf-8'));
10
+ }
11
+ catch {
12
+ return {};
13
+ }
14
+ }
15
+ export function writeLock(cwd, lock) {
16
+ const lockPath = path.join(cwd, LOCK_FILE);
17
+ const sorted = Object.fromEntries(Object.entries(lock).sort(([a], [b]) => a.localeCompare(b)));
18
+ fs.writeFileSync(lockPath, JSON.stringify(sorted, null, 2) + '\n', 'utf-8');
19
+ }
20
+ export function recordInstalled(cwd, name, version) {
21
+ const lock = readLock(cwd);
22
+ lock[name] = version;
23
+ writeLock(cwd, lock);
24
+ }
25
+ export function recordRemoved(cwd, name) {
26
+ const lock = readLock(cwd);
27
+ delete lock[name];
28
+ writeLock(cwd, lock);
29
+ }
30
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAa,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,IAAc;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/F,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,IAAY,EAAE,OAAe;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE3B,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAErB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE3B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC"}
@@ -8,6 +8,7 @@ export interface TailwindPatch {
8
8
  v3?: string;
9
9
  }
10
10
  export interface ComponentMetadata {
11
+ type?: 'component';
11
12
  name: string;
12
13
  version: string;
13
14
  framework: string;
@@ -19,12 +20,38 @@ export interface ComponentMetadata {
19
20
  tailwind: TailwindPatch;
20
21
  postInstall: string[];
21
22
  }
23
+ export interface CollectionMetadata {
24
+ type: 'collection';
25
+ name: string;
26
+ version: string;
27
+ description: string;
28
+ premium: boolean;
29
+ components: string[];
30
+ postInstall: string[];
31
+ }
32
+ export type AnyMetadata = ComponentMetadata | CollectionMetadata;
33
+ export declare function isCollection(meta: AnyMetadata): meta is CollectionMetadata;
22
34
  export declare function resolveVariantSlug(config: DCNTUIConfig): string;
23
35
  export declare function resolveRegistryUrl(config: DCNTUIConfig, componentName: string): string;
36
+ export declare function resolveCollectionUrl(config: DCNTUIConfig, collectionName: string): string;
37
+ export declare function fetchAny(config: DCNTUIConfig, name: string, token?: string): Promise<AnyMetadata>;
24
38
  export declare class RegistryError extends Error {
25
39
  readonly statusCode?: number | undefined;
26
40
  constructor(message: string, statusCode?: number | undefined);
27
41
  }
28
42
  export declare function fetchComponent(url: string, token?: string): Promise<ComponentMetadata>;
29
43
  export declare function verifyPremiumToken(registry: string, token: string): Promise<boolean>;
44
+ export interface CatalogEntry {
45
+ name: string;
46
+ description: string;
47
+ premium: boolean;
48
+ }
49
+ export interface CatalogCategory {
50
+ name: string;
51
+ components: CatalogEntry[];
52
+ }
53
+ export interface Catalog {
54
+ categories: CatalogCategory[];
55
+ }
56
+ export declare function fetchCatalog(registry: string): Promise<Catalog>;
30
57
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAI/D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAKtF;AAID,qBAAa,aAAc,SAAQ,KAAK;aAGpB,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiD5F;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAe1F"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,kBAAkB,CAE1E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAI/D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAKtF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAKzF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA4EvG;AAED,qBAAa,aAAc,SAAQ,KAAK;aAGpB,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiD5F;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB1F;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBrE"}
@@ -1,4 +1,6 @@
1
- // Variant resolution
1
+ export function isCollection(meta) {
2
+ return meta.type === 'collection';
3
+ }
2
4
  export function resolveVariantSlug(config) {
3
5
  const lang = config.typescript ? 'ts' : 'js';
4
6
  return `${config.framework}-${config.css}-${lang}`;
@@ -8,7 +10,67 @@ export function resolveRegistryUrl(config, componentName) {
8
10
  const base = config.registry.replace(/\/$/, '');
9
11
  return `${base}/components/${componentName}/${slug}.json`;
10
12
  }
11
- // Fetch helpers
13
+ export function resolveCollectionUrl(config, collectionName) {
14
+ const slug = resolveVariantSlug(config);
15
+ const base = config.registry.replace(/\/$/, '');
16
+ return `${base}/collections/${collectionName}/${slug}.json`;
17
+ }
18
+ export async function fetchAny(config, name, token) {
19
+ const componentUrl = resolveRegistryUrl(config, name);
20
+ const collectionUrl = resolveCollectionUrl(config, name);
21
+ const headers = {
22
+ Accept: 'application/json',
23
+ 'User-Agent': 'dcntui-cli'
24
+ };
25
+ if (token)
26
+ headers['Authorization'] = `Bearer ${token}`;
27
+ let res;
28
+ try {
29
+ res = await fetch(componentUrl, { headers });
30
+ }
31
+ catch {
32
+ throw new RegistryError(`Could not reach the DCNT UI registry.\n\nCheck your internet connection.\nRegistry: ${componentUrl}`);
33
+ }
34
+ if (res.ok) {
35
+ try {
36
+ return (await res.json());
37
+ }
38
+ catch {
39
+ throw new RegistryError(`Registry response could not be parsed as JSON.\nURL: ${componentUrl}`);
40
+ }
41
+ }
42
+ if (res.status === 404) {
43
+ let colRes;
44
+ try {
45
+ colRes = await fetch(collectionUrl, { headers });
46
+ }
47
+ catch {
48
+ throw new RegistryError(`Could not reach the DCNT UI registry.\n\nCheck your internet connection.\nRegistry: ${collectionUrl}`);
49
+ }
50
+ if (colRes.ok) {
51
+ try {
52
+ return (await colRes.json());
53
+ }
54
+ catch {
55
+ throw new RegistryError(`Registry response could not be parsed as JSON.\nURL: ${collectionUrl}`);
56
+ }
57
+ }
58
+ if (colRes.status === 404) {
59
+ throw new RegistryError(`"${name}" was not found as a component or collection.\n\n` +
60
+ `Run ${`npx dcntui list`} to browse available components and collections.`, 404);
61
+ }
62
+ if (colRes.status === 401 || colRes.status === 403) {
63
+ throw new RegistryError(`Access denied. "${name}" requires a valid premium token.\n` +
64
+ `Set DCNTUI_TOKEN or add premiumToken to dcntui.config.json.`, colRes.status);
65
+ }
66
+ throw new RegistryError(`Registry returned an unexpected error (HTTP ${colRes.status}).`, colRes.status);
67
+ }
68
+ if (res.status === 401 || res.status === 403) {
69
+ throw new RegistryError(`Access denied. "${name}" requires a valid premium token.\n` +
70
+ `Set DCNTUI_TOKEN or add premiumToken to dcntui.config.json.`, res.status);
71
+ }
72
+ throw new RegistryError(`Registry returned an unexpected error (HTTP ${res.status}).`, res.status);
73
+ }
12
74
  export class RegistryError extends Error {
13
75
  constructor(message, statusCode) {
14
76
  super(message);
@@ -71,4 +133,26 @@ export async function verifyPremiumToken(registry, token) {
71
133
  return false;
72
134
  }
73
135
  }
136
+ export async function fetchCatalog(registry) {
137
+ const base = registry.replace(/\/$/, '');
138
+ const url = `${base}/catalog.json`;
139
+ let response;
140
+ try {
141
+ response = await fetch(url, {
142
+ headers: { Accept: 'application/json', 'User-Agent': 'dcntui-cli' }
143
+ });
144
+ }
145
+ catch {
146
+ throw new RegistryError(`Could not reach the DCNT UI registry.\n\nCheck your internet connection or try again later.\nRegistry: ${url}`);
147
+ }
148
+ if (!response.ok) {
149
+ throw new RegistryError(`Registry returned an unexpected error (HTTP ${response.status}).`, response.status);
150
+ }
151
+ try {
152
+ return (await response.json());
153
+ }
154
+ catch {
155
+ throw new RegistryError(`Catalog response could not be parsed as JSON.\nURL: ${url}`);
156
+ }
157
+ }
74
158
  //# sourceMappingURL=registry.js.map
@@ -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,21 @@
1
+ import type { CatalogEntry } from './registry.js';
2
+ export interface SearchResult {
3
+ name: string;
4
+ description: string;
5
+ premium: boolean;
6
+ category: string;
7
+ reason: string;
8
+ score: number;
9
+ }
10
+ export declare class SearchError extends Error {
11
+ constructor(message: string);
12
+ }
13
+ export declare function keywordSearch(query: string, catalog: Array<{
14
+ entry: CatalogEntry;
15
+ category: string;
16
+ }>): SearchResult[];
17
+ export declare function aiSearch(query: string, catalog: Array<{
18
+ entry: CatalogEntry;
19
+ category: string;
20
+ }>, apiKey: string): Promise<SearchResult[]>;
21
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,YAAY,EAAE,CAoBhB;AAED,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EACzD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,EAAE,CAAC,CAyFzB"}
@@ -0,0 +1,104 @@
1
+ export class SearchError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'SearchError';
5
+ }
6
+ }
7
+ export function keywordSearch(query, catalog) {
8
+ const tokens = query.toLowerCase().split(/\s+/).filter(Boolean);
9
+ const scored = catalog
10
+ .map(({ entry, category }) => {
11
+ const haystack = `${entry.name} ${entry.description}`.toLowerCase();
12
+ const matches = tokens.filter((t) => haystack.includes(t));
13
+ return {
14
+ name: entry.name,
15
+ description: entry.description,
16
+ premium: entry.premium,
17
+ category,
18
+ reason: matches.length > 0 ? `Matches: ${matches.join(', ')}` : '',
19
+ score: Math.round((matches.length / tokens.length) * 100)
20
+ };
21
+ })
22
+ .filter((r) => r.score > 0)
23
+ .sort((a, b) => b.score - a.score);
24
+ return scored;
25
+ }
26
+ export async function aiSearch(query, catalog, apiKey) {
27
+ const catalogText = catalog
28
+ .map(({ entry, category }) => `${entry.name} [${category}] — ${entry.description}${entry.premium ? ' (premium)' : ''}`)
29
+ .join('\n');
30
+ const systemPrompt = `You are a UI component search engine. Given a user query and a component catalog, return the most relevant components as a JSON array. Each item must have:
31
+ - "name": exact component name from the catalog
32
+ - "reason": one concise sentence (max 12 words) explaining why it matches
33
+ - "score": integer 0-100 relevance score
34
+
35
+ Return ONLY valid JSON — no markdown, no explanation. Example:
36
+ [{"name":"button","reason":"Core interactive element for any UI","score":95}]
37
+
38
+ If nothing is relevant, return an empty array: []`;
39
+ const userPrompt = `Query: "${query}"\n\nCatalog:\n${catalogText}`;
40
+ let response;
41
+ try {
42
+ response = await fetch('https://api.anthropic.com/v1/messages', {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ 'x-api-key': apiKey,
47
+ 'anthropic-version': '2023-06-01'
48
+ },
49
+ body: JSON.stringify({
50
+ model: 'claude-sonnet-4-20250514',
51
+ max_tokens: 1024,
52
+ system: systemPrompt,
53
+ messages: [{ role: 'user', content: userPrompt }]
54
+ })
55
+ });
56
+ }
57
+ catch {
58
+ throw new SearchError('Could not reach the Anthropic API. Falling back to keyword search.');
59
+ }
60
+ if (!response.ok) {
61
+ if (response.status === 401) {
62
+ throw new SearchError('Invalid ANTHROPIC_API_KEY. Falling back to keyword search.');
63
+ }
64
+ throw new SearchError(`Anthropic API error (HTTP ${response.status}). Falling back to keyword search.`);
65
+ }
66
+ let data;
67
+ try {
68
+ data = (await response.json());
69
+ }
70
+ catch {
71
+ throw new SearchError('Could not parse Anthropic API response. Falling back to keyword search.');
72
+ }
73
+ const rawText = data.content
74
+ .filter((b) => b.type === 'text')
75
+ .map((b) => b.text)
76
+ .join('');
77
+ let ranked;
78
+ try {
79
+ const cleaned = rawText.replace(/```json|```/g, '').trim();
80
+ ranked = JSON.parse(cleaned);
81
+ if (!Array.isArray(ranked))
82
+ throw new Error('not an array');
83
+ }
84
+ catch {
85
+ throw new SearchError('AI response was not valid JSON. Falling back to keyword search.');
86
+ }
87
+ const catalogMap = new Map(catalog.map(({ entry, category }) => [entry.name, { entry, category }]));
88
+ const results = [];
89
+ for (const item of ranked) {
90
+ const catalogItem = catalogMap.get(item.name);
91
+ if (!catalogItem)
92
+ continue;
93
+ results.push({
94
+ name: item.name,
95
+ description: catalogItem.entry.description,
96
+ premium: catalogItem.entry.premium,
97
+ category: catalogItem.category,
98
+ reason: item.reason,
99
+ score: Math.max(0, Math.min(100, item.score))
100
+ });
101
+ }
102
+ return results.sort((a, b) => b.score - a.score);
103
+ }
104
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface WizardResult {
2
+ framework: string;
3
+ css: string;
4
+ stylesFile: string;
5
+ typescript: boolean;
6
+ componentsDir: string;
7
+ }
8
+ export interface WizardOptions {
9
+ existing?: Partial<WizardResult>;
10
+ }
11
+ export declare function runConfigWizard(cwd: string, options?: WizardOptions): Promise<WizardResult>;
12
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/utils/wizard.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAClC;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA4NrG"}
@@ -0,0 +1,168 @@
1
+ import * as clack from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import { detectFramework, FRAMEWORK_OPTIONS } from './detect-framework.js';
6
+ import { detectCss, detectBaseStylesFile, CSS_OPTIONS } from './detect-css.js';
7
+ import { detectTypeScript } from './detect-typescript.js';
8
+ import { CONFIG_FILE, REGISTRY_BASE } from '../constants.js';
9
+ export async function runConfigWizard(cwd, options = {}) {
10
+ const { existing } = options;
11
+ const configPath = path.join(cwd, CONFIG_FILE);
12
+ let config = {};
13
+ if (fs.existsSync(configPath)) {
14
+ try {
15
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
16
+ }
17
+ catch {
18
+ config = {};
19
+ }
20
+ }
21
+ config['version'] ?? (config['version'] = 1);
22
+ config['registry'] ?? (config['registry'] = REGISTRY_BASE);
23
+ const detectedFramework = detectFramework(cwd);
24
+ const frameworkDefault = existing?.framework ?? detectedFramework;
25
+ if (existing?.framework) {
26
+ clack.log.info(`Current framework: ${chalk.cyan(FRAMEWORK_OPTIONS.find((f) => f.value === existing.framework)?.label ?? existing.framework)}`);
27
+ }
28
+ else if (detectedFramework) {
29
+ clack.log.info(`Detected framework: ${chalk.cyan(FRAMEWORK_OPTIONS.find((f) => f.value === detectedFramework)?.label ?? detectedFramework)}`);
30
+ }
31
+ else {
32
+ clack.log.warn('No supported framework detected.\n\n' +
33
+ ' Supported: Next.js, React, Svelte, SvelteKit.\n' +
34
+ ' Select your framework manually, or choose None to exit.');
35
+ }
36
+ const framework = await clack.select({
37
+ message: 'Framework:',
38
+ options: FRAMEWORK_OPTIONS,
39
+ initialValue: frameworkDefault
40
+ });
41
+ if (clack.isCancel(framework)) {
42
+ clack.outro(chalk.yellow('Cancelled. No changes made.'));
43
+ process.exit(0);
44
+ }
45
+ if (framework === null) {
46
+ clack.log.error(chalk.red('DCNT UI requires a supported framework to function correctly.\n\n' +
47
+ ' Supported frameworks: Next.js (App Router & Pages Router), React, Svelte, SvelteKit.\n'));
48
+ clack.outro(chalk.red('Aborted. Please set up a supported framework first.'));
49
+ process.exit(1);
50
+ }
51
+ config['framework'] = framework;
52
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
53
+ const frameworkLabel = FRAMEWORK_OPTIONS.find((f) => f.value === framework).label;
54
+ clack.log.success(chalk.green(`Framework set to ${chalk.bold(frameworkLabel)}.`));
55
+ const detectedCss = detectCss(cwd);
56
+ const cssDefault = existing?.css ?? detectedCss ?? 'css';
57
+ if (existing?.css) {
58
+ clack.log.info(`Current CSS strategy: ${chalk.cyan(CSS_OPTIONS.find((c) => c.value === existing.css)?.label ?? existing.css)}`);
59
+ }
60
+ else if (detectedCss) {
61
+ clack.log.info(`Detected CSS strategy: ${chalk.cyan(CSS_OPTIONS.find((c) => c.value === detectedCss)?.label ?? detectedCss)}`);
62
+ }
63
+ else {
64
+ clack.log.warn('Could not auto-detect a CSS strategy. Please select one manually.');
65
+ }
66
+ const css = await clack.select({
67
+ message: 'CSS strategy:',
68
+ options: CSS_OPTIONS,
69
+ initialValue: cssDefault
70
+ });
71
+ if (clack.isCancel(css)) {
72
+ clack.outro(chalk.yellow('Cancelled. No changes made.'));
73
+ process.exit(0);
74
+ }
75
+ config['css'] = css;
76
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
77
+ const cssLabel = CSS_OPTIONS.find((c) => c.value === css).label;
78
+ clack.log.success(chalk.green(`CSS strategy set to ${chalk.bold(cssLabel)}.`));
79
+ const detectedStylesFile = detectBaseStylesFile(cwd, css);
80
+ const defaultStylesExt = css === 'scss' ? '.scss' : '.css';
81
+ const stylesFileDefault = existing?.stylesFile ?? detectedStylesFile ?? `src/index${defaultStylesExt}`;
82
+ if (existing?.stylesFile) {
83
+ clack.log.info(`Current base styles file: ${chalk.cyan(existing.stylesFile)}`);
84
+ }
85
+ else if (detectedStylesFile) {
86
+ clack.log.info(`Detected base styles file: ${chalk.cyan(detectedStylesFile)}`);
87
+ }
88
+ else {
89
+ clack.log.warn('Could not find a base styles file. Please enter the path manually.');
90
+ }
91
+ const stylesFile = await clack.text({
92
+ message: 'Base styles file:',
93
+ placeholder: stylesFileDefault,
94
+ defaultValue: stylesFileDefault,
95
+ validate(value) {
96
+ const trimmed = value.trim();
97
+ if (trimmed.length === 0)
98
+ return 'Styles file path cannot be empty.';
99
+ if (path.isAbsolute(trimmed))
100
+ return 'Please use a relative path (e.g. src/index.css).';
101
+ if (trimmed.includes('..'))
102
+ return 'Path must not traverse outside the project root.';
103
+ const ext = path.extname(trimmed).toLowerCase();
104
+ if (!['.css', '.scss'].includes(ext))
105
+ return 'File must have a .css or .scss extension.';
106
+ }
107
+ });
108
+ if (clack.isCancel(stylesFile)) {
109
+ clack.outro(chalk.yellow('Cancelled. No changes made.'));
110
+ process.exit(0);
111
+ }
112
+ config['stylesFile'] = stylesFile.trim();
113
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
114
+ clack.log.success(chalk.green(`Base styles file set to ${chalk.bold(stylesFile.trim())}.`));
115
+ const detectedTs = detectTypeScript(cwd);
116
+ const tsDefault = existing?.typescript ?? detectedTs;
117
+ if (existing?.typescript !== undefined) {
118
+ clack.log.info(`Current language: ${chalk.cyan(existing.typescript ? 'TypeScript' : 'JavaScript')}`);
119
+ }
120
+ else {
121
+ clack.log.info(`Detected language: ${chalk.cyan(detectedTs ? 'TypeScript' : 'JavaScript')}`);
122
+ }
123
+ const typescript = await clack.confirm({
124
+ message: 'Use TypeScript?',
125
+ initialValue: tsDefault
126
+ });
127
+ if (clack.isCancel(typescript)) {
128
+ clack.outro(chalk.yellow('Cancelled. No changes made.'));
129
+ process.exit(0);
130
+ }
131
+ config['typescript'] = typescript;
132
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
133
+ clack.log.success(chalk.green(`Language set to ${chalk.bold(typescript ? 'TypeScript' : 'JavaScript')}.`));
134
+ const defaultComponentsDir = existing?.componentsDir ?? (fs.existsSync(path.join(cwd, 'src')) ? 'src/components/ui' : 'components/ui');
135
+ if (existing?.componentsDir) {
136
+ clack.log.info(`Current components directory: ${chalk.cyan(existing.componentsDir)}`);
137
+ }
138
+ const componentsDir = await clack.text({
139
+ message: 'Components directory:',
140
+ placeholder: defaultComponentsDir,
141
+ defaultValue: defaultComponentsDir,
142
+ validate(value) {
143
+ const trimmed = value.trim();
144
+ if (trimmed.length === 0)
145
+ return 'Directory path cannot be empty.';
146
+ if (path.isAbsolute(trimmed))
147
+ return 'Please use a relative path (e.g. src/components/ui).';
148
+ if (trimmed.includes('..'))
149
+ return 'Path must not traverse outside the project root.';
150
+ }
151
+ });
152
+ if (clack.isCancel(componentsDir)) {
153
+ clack.outro(chalk.yellow('Cancelled. No changes made.'));
154
+ process.exit(0);
155
+ }
156
+ config['componentsDir'] = componentsDir.trim();
157
+ config['premiumToken'] ?? (config['premiumToken'] = '');
158
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
159
+ clack.log.success(chalk.green(`Components directory set to ${chalk.bold(componentsDir.trim())}.`));
160
+ return {
161
+ framework: framework,
162
+ css: css,
163
+ stylesFile: stylesFile.trim(),
164
+ typescript,
165
+ componentsDir: componentsDir.trim()
166
+ };
167
+ }
168
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/utils/wizard.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,13 @@
1
1
  import type { ComponentMetadata } from './registry.js';
2
2
  import type { DCNTUIConfig } from './config.js';
3
3
  export declare function writeComponentFiles(cwd: string, config: DCNTUIConfig, metadata: ComponentMetadata): string[];
4
+ export declare function hashContent(content: string): string;
5
+ export interface FileDiff {
6
+ filePath: string;
7
+ locallyModified: boolean;
8
+ diffLines: string[];
9
+ }
10
+ export declare function diffComponentFiles(cwd: string, config: DCNTUIConfig, metadata: ComponentMetadata): FileDiff[];
4
11
  export declare function patchStylesFile(cwd: string, config: DCNTUIConfig, metadata: ComponentMetadata): boolean;
12
+ export declare function revertStylesPatch(cwd: string, config: DCNTUIConfig): boolean;
5
13
  //# sourceMappingURL=write-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-component.d.ts","sourceRoot":"","sources":["../../src/utils/write-component.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAc5G;AAOD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CA0BvG"}
1
+ {"version":3,"file":"write-component.d.ts","sourceRoot":"","sources":["../../src/utils/write-component.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,EAAE,CA4C5G;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,QAAQ,EAAE,CAsC7G;AAwCD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CA4BvG;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAc5E"}