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
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAUA,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgMxE"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAmBA,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmSxE"}
@@ -4,14 +4,16 @@ import { spawnSync } from 'node:child_process';
4
4
  import fs from 'node:fs';
5
5
  import path from 'node:path';
6
6
  import { readConfig, ConfigError } from '../utils/config.js';
7
- import { resolveRegistryUrl, fetchComponent, verifyPremiumToken, RegistryError } from '../utils/registry.js';
8
- import { detectPackageManager, buildInstallArgs } from '../utils/detect-package-manager.js';
7
+ import { resolveRegistryUrl, fetchComponent, fetchAny, isCollection, verifyPremiumToken, RegistryError } from '../utils/registry.js';
8
+ import { detectPackageManager, buildInstallArgs, getPackageRunner } from '../utils/detect-package-manager.js';
9
9
  import { writeComponentFiles, patchStylesFile } from '../utils/write-component.js';
10
+ import { recordInstalled } from '../utils/lock.js';
10
11
  export async function addCommand(componentNames) {
11
12
  console.clear();
12
- clack.intro(chalk.bgCyan.black(' DCNTUI ADD '));
13
+ clack.intro(chalk.bgCyan.black(' DCNT UI ADD '));
13
14
  const cwd = process.cwd();
14
- // Read config
15
+ const pm = detectPackageManager(cwd);
16
+ const packageRunner = getPackageRunner(pm);
15
17
  let config;
16
18
  try {
17
19
  config = readConfig(cwd);
@@ -24,16 +26,73 @@ export async function addCommand(componentNames) {
24
26
  }
25
27
  throw err;
26
28
  }
27
- // Resolve token
28
29
  const token = process.env['DCNTUI_TOKEN'] || config.premiumToken || undefined;
29
- // Process each component
30
- const pm = detectPackageManager(cwd);
30
+ const expandedNames = [];
31
+ for (const name of componentNames) {
32
+ const spinner = clack.spinner();
33
+ spinner.start(`Resolving ${chalk.bold(name)}…`);
34
+ let meta;
35
+ try {
36
+ meta = await fetchAny(config, name, token);
37
+ }
38
+ catch (err) {
39
+ if (err instanceof RegistryError) {
40
+ spinner.stop(chalk.red(`Could not resolve ${chalk.bold(name)}.`));
41
+ clack.log.error(chalk.red(err.message));
42
+ if (componentNames.length === 1) {
43
+ clack.outro(chalk.red('Installation aborted.'));
44
+ process.exit(1);
45
+ }
46
+ continue;
47
+ }
48
+ throw err;
49
+ }
50
+ if (isCollection(meta)) {
51
+ spinner.stop(`${chalk.cyan('◈')} ${chalk.bold(meta.name)} ${chalk.gray('v' + meta.version)} — ` +
52
+ chalk.cyan(`collection of ${meta.components.length} components`));
53
+ clack.log.info(chalk.gray(` ${meta.description}\n`) + meta.components.map((c) => ` ${chalk.gray('+')} ${c}`).join('\n'));
54
+ if (meta.premium && !token) {
55
+ clack.log.error(chalk.red(`${chalk.bold(meta.name)} is a premium collection.\n\n` +
56
+ `Provide your token via:\n` +
57
+ ` ${chalk.cyan(`DCNTUI_TOKEN=<token> ${packageRunner} dcntui add ${name}`)}\n\n` +
58
+ `Get a token at ${chalk.underline('https://dcntui.com')}`));
59
+ if (componentNames.length === 1) {
60
+ clack.outro(chalk.red('Installation aborted.'));
61
+ process.exit(1);
62
+ }
63
+ continue;
64
+ }
65
+ const confirmed = await clack.confirm({
66
+ message: `Install all ${meta.components.length} components from ${chalk.bold(meta.name)}?`,
67
+ initialValue: true
68
+ });
69
+ if (clack.isCancel(confirmed) || !confirmed) {
70
+ clack.log.warn(chalk.yellow(`Skipped collection ${chalk.bold(meta.name)}.`));
71
+ continue;
72
+ }
73
+ expandedNames.push(...meta.components);
74
+ if (meta.postInstall.length > 0) {
75
+ clack.log.info(chalk.cyan(`${meta.name} notes:\n`) + meta.postInstall.map((note) => ` ${note}`).join('\n'));
76
+ }
77
+ }
78
+ else {
79
+ spinner.stop(`${chalk.cyan('◆')} ${chalk.bold(meta.name)} ${chalk.gray('v' + meta.version)}`);
80
+ expandedNames.push(name);
81
+ }
82
+ }
83
+ if (expandedNames.length === 0) {
84
+ clack.outro(chalk.yellow('Nothing to install.'));
85
+ return;
86
+ }
87
+ const uniqueNames = [...new Set(expandedNames)];
88
+ if (uniqueNames.length < expandedNames.length) {
89
+ const dupes = expandedNames.length - uniqueNames.length;
90
+ clack.log.info(chalk.gray(`Removed ${dupes} duplicate${dupes === 1 ? '' : 's'} from install list.`));
91
+ }
31
92
  const results = [];
32
- for (const componentName of componentNames) {
93
+ for (const componentName of uniqueNames) {
33
94
  clack.log.step(chalk.cyan(`Installing ${chalk.bold(componentName)}…`));
34
- // Resolve registry variant URL
35
95
  const url = resolveRegistryUrl(config, componentName);
36
- // Fetch component metadata
37
96
  const spinner = clack.spinner();
38
97
  spinner.start('Fetching from registry…');
39
98
  let metadata;
@@ -45,7 +104,7 @@ export async function addCommand(componentNames) {
45
104
  if (err instanceof RegistryError) {
46
105
  spinner.stop(chalk.red('Fetch failed.'));
47
106
  clack.log.error(chalk.red(err.message));
48
- if (componentNames.length > 1) {
107
+ if (uniqueNames.length > 1) {
49
108
  results.push({ name: componentName, success: false });
50
109
  continue;
51
110
  }
@@ -54,12 +113,11 @@ export async function addCommand(componentNames) {
54
113
  }
55
114
  throw err;
56
115
  }
57
- // Premium verification
58
116
  if (metadata.premium) {
59
117
  if (!token) {
60
118
  clack.log.error(chalk.red(`${chalk.bold(componentName)} is a premium component.\n\n` +
61
119
  `Provide your token via:\n` +
62
- ` ${chalk.cyan('DCNTUI_TOKEN=<token> npx dcntui add ' + componentName)}\n` +
120
+ ` ${chalk.cyan(`DCNTUI_TOKEN=<token> ${packageRunner} dcntui add ` + componentName)}\n` +
63
121
  ` or add ${chalk.cyan('premiumToken')} to ${chalk.cyan('dcntui.config.json')}.\n\n` +
64
122
  `Get a token at ${chalk.underline('https://dcntui.com')}`));
65
123
  results.push({ name: componentName, success: false });
@@ -76,7 +134,6 @@ export async function addCommand(componentNames) {
76
134
  }
77
135
  spinner.stop(chalk.green('Premium token verified.'));
78
136
  }
79
- // Dependency management
80
137
  if (metadata.dependencies.length > 0) {
81
138
  const pkgJsonPath = path.join(cwd, 'package.json');
82
139
  const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
@@ -113,24 +170,21 @@ export async function addCommand(componentNames) {
113
170
  }
114
171
  }
115
172
  }
116
- // Write component files
117
173
  const written = writeComponentFiles(cwd, config, metadata);
118
174
  for (const f of written) {
119
175
  clack.log.success(chalk.green(` ${chalk.gray('+')} ${f}`));
120
176
  }
121
- // Patch styles file
122
177
  const patched = patchStylesFile(cwd, config, metadata);
123
178
  if (patched) {
124
179
  clack.log.success(chalk.green(` ${chalk.gray('~')} ${config.stylesFile} ${chalk.gray('(patched)')}`));
125
180
  }
126
- // Post-install notes
127
181
  if (metadata.postInstall.length > 0) {
128
182
  clack.log.info(chalk.cyan('Post-install notes:\n') + metadata.postInstall.map((note) => ` ${note}`).join('\n'));
129
183
  }
184
+ recordInstalled(cwd, metadata.name, metadata.version);
130
185
  results.push({ name: componentName, success: true });
131
186
  }
132
- // Summary
133
- if (componentNames.length > 1) {
187
+ if (uniqueNames.length > 1) {
134
188
  const succeeded = results.filter((r) => r.success);
135
189
  const failed = results.filter((r) => !r.success);
136
190
  clack.log.info([
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function configCommand(): Promise<void>;
2
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAOA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkGnD"}
@@ -0,0 +1,68 @@
1
+ import * as clack from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import { readConfig, ConfigError } from '../utils/config.js';
4
+ import { runConfigWizard } from '../utils/wizard.js';
5
+ import { detectPackageManager, getPackageRunner } from '../utils/detect-package-manager.js';
6
+ export async function configCommand() {
7
+ console.clear();
8
+ clack.intro(chalk.bgCyan.black(' DCNT UI CONFIG '));
9
+ const cwd = process.cwd();
10
+ const pm = detectPackageManager(cwd);
11
+ const packageRunner = getPackageRunner(pm);
12
+ let existing;
13
+ try {
14
+ existing = readConfig(cwd);
15
+ }
16
+ catch (err) {
17
+ if (err instanceof ConfigError) {
18
+ clack.log.error(chalk.red(err.message));
19
+ clack.outro(chalk.red(`Aborted. Run \`${packageRunner} dcntui init\` first.`));
20
+ process.exit(1);
21
+ }
22
+ throw err;
23
+ }
24
+ clack.log.info('Reconfiguring DCNT UI. Each prompt shows your current value — ' + chalk.gray('press Enter to keep it.'));
25
+ console.log();
26
+ const result = await runConfigWizard(cwd, {
27
+ existing: {
28
+ framework: existing.framework,
29
+ css: existing.css,
30
+ stylesFile: existing.stylesFile,
31
+ typescript: existing.typescript,
32
+ componentsDir: existing.componentsDir
33
+ }
34
+ });
35
+ const changed = [];
36
+ if (result.framework !== existing.framework)
37
+ changed.push(`framework ${chalk.gray(existing.framework)} → ${chalk.cyan(result.framework)}`);
38
+ if (result.css !== existing.css)
39
+ changed.push(`css ${chalk.gray(existing.css)} → ${chalk.cyan(result.css)}`);
40
+ if (result.stylesFile !== existing.stylesFile)
41
+ changed.push(`stylesFile ${chalk.gray(existing.stylesFile)} → ${chalk.cyan(result.stylesFile)}`);
42
+ if (result.typescript !== existing.typescript)
43
+ changed.push(`typescript ${chalk.gray(String(existing.typescript))} → ${chalk.cyan(String(result.typescript))}`);
44
+ if (result.componentsDir !== existing.componentsDir)
45
+ changed.push(`componentsDir ${chalk.gray(existing.componentsDir)} → ${chalk.cyan(result.componentsDir)}`);
46
+ if (changed.length === 0) {
47
+ clack.outro(chalk.cyan('No changes made — config is unchanged.'));
48
+ return;
49
+ }
50
+ clack.log.info(chalk.bold('Changes applied:\n') + changed.map((line) => ` ${line}`).join('\n'));
51
+ if (result.componentsDir !== existing.componentsDir) {
52
+ clack.log.warn(chalk.yellow(`Components directory changed from ${chalk.bold(existing.componentsDir)} to ${chalk.bold(result.componentsDir)}.\n\n` +
53
+ ` Existing components were installed at ${chalk.bold(existing.componentsDir)} and have NOT been moved.\n` +
54
+ ` To migrate: move the folder manually, then run ${chalk.cyan(`${packageRunner} dcntui doctor`)} to verify.`));
55
+ }
56
+ if (result.css !== existing.css) {
57
+ clack.log.warn(chalk.yellow(`CSS strategy changed from ${chalk.bold(existing.css)} to ${chalk.bold(result.css)}.\n\n` +
58
+ ` Any installed components were built for ${chalk.bold(existing.css)}.\n` +
59
+ ` Run ${chalk.cyan('npx dcntui update --all')} to reinstall them for the new strategy.`));
60
+ }
61
+ if (result.framework !== existing.framework) {
62
+ clack.log.warn(chalk.yellow(`Framework changed from ${chalk.bold(existing.framework)} to ${chalk.bold(result.framework)}.\n\n` +
63
+ ` Installed components were built for ${chalk.bold(existing.framework)}.\n` +
64
+ ` Run ${chalk.cyan(`${packageRunner} dcntui update --all`)} to reinstall them for the new framework.`));
65
+ }
66
+ clack.outro(chalk.cyan('Configuration updated successfully.'));
67
+ }
68
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function doctorCommand(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAsXA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA2EnD"}
@@ -0,0 +1,348 @@
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 { readConfig, ConfigError } from '../utils/config.js';
6
+ import { detectFramework, FRAMEWORK_OPTIONS } from '../utils/detect-framework.js';
7
+ import { detectCss } from '../utils/detect-css.js';
8
+ import { detectTypeScript } from '../utils/detect-typescript.js';
9
+ import { verifyPremiumToken } from '../utils/registry.js';
10
+ import { readLock } from '../utils/lock.js';
11
+ import { detectPackageManager, getPackageRunner } from '../utils/detect-package-manager.js';
12
+ const ICONS = {
13
+ pass: chalk.green('✔'),
14
+ warn: chalk.yellow('⚠'),
15
+ fail: chalk.red('✖')
16
+ };
17
+ function renderCheck(result) {
18
+ const icon = ICONS[result.status];
19
+ const label = result.status === 'pass'
20
+ ? chalk.white(result.label)
21
+ : result.status === 'warn'
22
+ ? chalk.yellow(result.label)
23
+ : chalk.red(result.label);
24
+ console.log(` ${icon} ${label}`);
25
+ if (result.detail) {
26
+ const lines = result.detail.split('\n');
27
+ for (const line of lines) {
28
+ console.log(` ${chalk.gray(line)}`);
29
+ }
30
+ }
31
+ }
32
+ function checkConfig(cwd) {
33
+ try {
34
+ const config = readConfig(cwd);
35
+ return {
36
+ result: { label: 'Config valid', status: 'pass' },
37
+ config
38
+ };
39
+ }
40
+ catch (err) {
41
+ return {
42
+ result: {
43
+ label: 'Config valid',
44
+ status: 'fail',
45
+ detail: err instanceof ConfigError ? err.message : 'Unexpected error reading dcntui.config.json.'
46
+ },
47
+ config: null
48
+ };
49
+ }
50
+ }
51
+ function checkFrameworkConsistency(cwd, config) {
52
+ const detected = detectFramework(cwd);
53
+ const configured = config.framework;
54
+ const pm = detectPackageManager(cwd);
55
+ const packageRunner = getPackageRunner(pm);
56
+ if (detected === null) {
57
+ return {
58
+ label: 'Framework consistency',
59
+ status: 'warn',
60
+ detail: `Config says: ${chalk.cyan(configured)}\n` +
61
+ `Detected: ${chalk.yellow('none')}\n` +
62
+ 'Could not detect a framework from package.json. Config may be from a different directory.'
63
+ };
64
+ }
65
+ if (detected !== configured) {
66
+ const detectedLabel = FRAMEWORK_OPTIONS.find((f) => f.value === detected)?.label ?? detected;
67
+ const configuredLabel = FRAMEWORK_OPTIONS.find((f) => f.value === configured)?.label ?? configured;
68
+ return {
69
+ label: 'Framework consistency',
70
+ status: 'warn',
71
+ detail: `Config says: ${chalk.cyan(configuredLabel)}\n` +
72
+ `Detected: ${chalk.yellow(detectedLabel)}\n` +
73
+ `Run ${chalk.cyan(`${packageRunner} dcntui init`)} to update your config if your framework has changed.`
74
+ };
75
+ }
76
+ const label = FRAMEWORK_OPTIONS.find((f) => f.value === configured)?.label ?? configured;
77
+ return {
78
+ label: `Framework: ${label}`,
79
+ status: 'pass'
80
+ };
81
+ }
82
+ function checkCssIntegration(cwd, config) {
83
+ const detected = detectCss(cwd);
84
+ const pm = detectPackageManager(cwd);
85
+ const packageRunner = getPackageRunner(pm);
86
+ if (detected !== config.css) {
87
+ return {
88
+ label: 'CSS integration',
89
+ status: 'warn',
90
+ detail: `Config says: ${chalk.cyan(config.css)}\n` +
91
+ `Detected: ${chalk.yellow(detected ?? 'none')}\n` +
92
+ `Run ${chalk.cyan(`${packageRunner} dcntui init`)} to update your config if your CSS strategy has changed.`
93
+ };
94
+ }
95
+ const stylesPath = path.join(cwd, config.stylesFile);
96
+ if (!fs.existsSync(stylesPath)) {
97
+ return {
98
+ label: 'CSS integration',
99
+ status: 'warn',
100
+ detail: `Styles file not found: ${chalk.yellow(config.stylesFile)}\n` +
101
+ `Create it or update ${chalk.cyan('stylesFile')} in dcntui.config.json.`
102
+ };
103
+ }
104
+ if (config.css === 'tailwind-v4') {
105
+ const content = fs.readFileSync(stylesPath, 'utf-8');
106
+ if (!/@import\s+['"]tailwindcss['"]/.test(content)) {
107
+ return {
108
+ label: 'Tailwind v4 integration',
109
+ status: 'warn',
110
+ detail: `${config.stylesFile} is missing ${chalk.cyan('@import "tailwindcss"')}.\n` +
111
+ 'Add it to the top of your base styles file to enable Tailwind v4.'
112
+ };
113
+ }
114
+ return { label: 'Tailwind v4 integration', status: 'pass' };
115
+ }
116
+ if (config.css === 'tailwind-v3') {
117
+ const hasConfig = fs.existsSync(path.join(cwd, 'tailwind.config.js')) || fs.existsSync(path.join(cwd, 'tailwind.config.ts'));
118
+ if (!hasConfig) {
119
+ return {
120
+ label: 'Tailwind v3 integration',
121
+ status: 'warn',
122
+ detail: 'No tailwind.config.js or tailwind.config.ts found.\n' + 'Create one to enable Tailwind v3.'
123
+ };
124
+ }
125
+ return { label: 'Tailwind v3 integration', status: 'pass' };
126
+ }
127
+ return { label: `CSS: ${config.css}`, status: 'pass' };
128
+ }
129
+ function checkTypeScriptConsistency(cwd, config) {
130
+ const detected = detectTypeScript(cwd);
131
+ const pm = detectPackageManager(cwd);
132
+ const packageRunner = getPackageRunner(pm);
133
+ if (detected && !config.typescript) {
134
+ return {
135
+ label: 'TypeScript consistency',
136
+ status: 'warn',
137
+ detail: `TypeScript detected in the project but config says ${chalk.yellow('false')}.\n` +
138
+ `Run ${chalk.cyan(`${packageRunner} dcntui init`)} to update your config.`
139
+ };
140
+ }
141
+ if (!detected && config.typescript) {
142
+ return {
143
+ label: 'TypeScript consistency',
144
+ status: 'warn',
145
+ detail: `Config says TypeScript but no tsconfig.json or typescript dep found.\n` +
146
+ `Run ${chalk.cyan(`${packageRunner} dcntui init`)} to update your config.`
147
+ };
148
+ }
149
+ return {
150
+ label: `Language: ${config.typescript ? 'TypeScript' : 'JavaScript'}`,
151
+ status: 'pass'
152
+ };
153
+ }
154
+ function checkDependencies(cwd) {
155
+ const lock = readLock(cwd);
156
+ const installed = Object.keys(lock);
157
+ const pm = detectPackageManager(cwd);
158
+ const packageRunner = getPackageRunner(pm);
159
+ if (installed.length === 0) {
160
+ return {
161
+ label: 'Component dependencies',
162
+ status: 'pass',
163
+ detail: 'No components installed yet.'
164
+ };
165
+ }
166
+ const missing = [];
167
+ const nodeModulesPath = path.join(cwd, 'node_modules');
168
+ if (!fs.existsSync(nodeModulesPath)) {
169
+ return {
170
+ label: 'Component dependencies',
171
+ status: 'fail',
172
+ detail: 'node_modules directory not found.\n' + 'Run your package manager install command first.'
173
+ };
174
+ }
175
+ for (const componentName of installed) {
176
+ const metaPath = path.join(cwd, '.dcntui', `${componentName}.json`);
177
+ if (!fs.existsSync(metaPath))
178
+ continue;
179
+ try {
180
+ const meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
181
+ for (const dep of meta.dependencies ?? []) {
182
+ const depPath = path.join(nodeModulesPath, dep);
183
+ if (!fs.existsSync(depPath)) {
184
+ missing.push(`${dep} (required by ${componentName})`);
185
+ }
186
+ }
187
+ }
188
+ catch { }
189
+ }
190
+ if (missing.length > 0) {
191
+ return {
192
+ label: 'Component dependencies',
193
+ status: 'fail',
194
+ detail: `Missing packages:\n` +
195
+ missing.map((m) => ` ${chalk.red(m)}`).join('\n') +
196
+ '\n' +
197
+ `Run ${chalk.cyan(`${packageRunner} dcntui doctor --fix`)} or install them manually.`
198
+ };
199
+ }
200
+ return {
201
+ label: `Component dependencies (${installed.length} component${installed.length === 1 ? '' : 's'} installed)`,
202
+ status: 'pass'
203
+ };
204
+ }
205
+ function checkGitIgnore(cwd, config) {
206
+ const token = process.env['DCNTUI_TOKEN'] || config.premiumToken;
207
+ if (!token || !config.premiumToken)
208
+ return null;
209
+ const pm = detectPackageManager(cwd);
210
+ const packageRunner = getPackageRunner(pm);
211
+ const gitignorePath = path.join(cwd, '.gitignore');
212
+ if (!fs.existsSync(gitignorePath)) {
213
+ return {
214
+ label: 'Premium token security',
215
+ status: 'warn',
216
+ detail: 'premiumToken is set in dcntui.config.json but no .gitignore found.\n' +
217
+ 'Your token could be accidentally committed.\n' +
218
+ `Recommended: use ${chalk.cyan('DCNTUI_TOKEN=<token>')} environment variable instead.`
219
+ };
220
+ }
221
+ const gitignore = fs.readFileSync(gitignorePath, 'utf-8');
222
+ const isIgnored = gitignore.split('\n').some((line) => {
223
+ const trimmed = line.trim();
224
+ return trimmed === 'dcntui.config.json' || trimmed === '/dcntui.config.json';
225
+ });
226
+ if (!isIgnored) {
227
+ return {
228
+ label: 'Premium token security',
229
+ status: 'warn',
230
+ detail: 'premiumToken is set in dcntui.config.json which is not in .gitignore.\n' +
231
+ 'Your token could be accidentally committed to version control.\n\n' +
232
+ `Add to .gitignore: ${chalk.cyan('dcntui.config.json')}\n` +
233
+ `Or use instead: ${chalk.cyan(`DCNTUI_TOKEN=<token> ${packageRunner} dcntui add <component>`)}`
234
+ };
235
+ }
236
+ return { label: 'Premium token security', status: 'pass' };
237
+ }
238
+ async function checkPremiumToken(config) {
239
+ const token = process.env['DCNTUI_TOKEN'] || config.premiumToken;
240
+ if (!token)
241
+ return null;
242
+ const spinner = clack.spinner();
243
+ spinner.start('Verifying premium token…');
244
+ const valid = await verifyPremiumToken(config.registry, token);
245
+ spinner.stop('');
246
+ if (!valid) {
247
+ return {
248
+ label: 'Premium token',
249
+ status: 'fail',
250
+ detail: 'Token is invalid or expired.\n' + `Manage your subscription at ${chalk.underline.cyan('https://dcntui.com')}`
251
+ };
252
+ }
253
+ return { label: 'Premium token valid', status: 'pass' };
254
+ }
255
+ async function checkRegistryConnectivity(config) {
256
+ const base = config.registry.replace(/\/$/, '');
257
+ const url = `${base}/catalog.json`;
258
+ const spinner = clack.spinner();
259
+ spinner.start('Checking registry connectivity…');
260
+ try {
261
+ const res = await fetch(url, {
262
+ method: 'HEAD',
263
+ headers: { 'User-Agent': 'dcntui-cli' },
264
+ signal: AbortSignal.timeout(8000)
265
+ });
266
+ spinner.stop('');
267
+ if (!res.ok) {
268
+ return {
269
+ label: 'Registry connectivity',
270
+ status: 'warn',
271
+ detail: `Registry responded with HTTP ${res.status}.\nURL: ${url}`
272
+ };
273
+ }
274
+ return {
275
+ label: `Registry reachable (${config.registry})`,
276
+ status: 'pass'
277
+ };
278
+ }
279
+ catch {
280
+ spinner.stop('');
281
+ return {
282
+ label: 'Registry connectivity',
283
+ status: 'fail',
284
+ detail: `Could not reach ${url}\n` + 'Check your internet connection or verify the registry URL in dcntui.config.json.'
285
+ };
286
+ }
287
+ }
288
+ export async function doctorCommand() {
289
+ console.clear();
290
+ clack.intro(chalk.bgCyan.black(' DCNT UI DOCTOR '));
291
+ const cwd = process.cwd();
292
+ const results = [];
293
+ console.log();
294
+ const { result: configResult, config } = checkConfig(cwd);
295
+ results.push(configResult);
296
+ renderCheck(configResult);
297
+ if (!config) {
298
+ console.log();
299
+ clack.outro(chalk.red('Fix the config issues above before re-running dcntui doctor.'));
300
+ process.exit(1);
301
+ }
302
+ const frameworkResult = checkFrameworkConsistency(cwd, config);
303
+ results.push(frameworkResult);
304
+ renderCheck(frameworkResult);
305
+ const cssResult = checkCssIntegration(cwd, config);
306
+ results.push(cssResult);
307
+ renderCheck(cssResult);
308
+ const tsResult = checkTypeScriptConsistency(cwd, config);
309
+ results.push(tsResult);
310
+ renderCheck(tsResult);
311
+ const depsResult = checkDependencies(cwd);
312
+ results.push(depsResult);
313
+ renderCheck(depsResult);
314
+ const gitignoreResult = checkGitIgnore(cwd, config);
315
+ if (gitignoreResult) {
316
+ results.push(gitignoreResult);
317
+ renderCheck(gitignoreResult);
318
+ }
319
+ const tokenResult = await checkPremiumToken(config);
320
+ if (tokenResult) {
321
+ results.push(tokenResult);
322
+ renderCheck(tokenResult);
323
+ }
324
+ const registryResult = await checkRegistryConnectivity(config);
325
+ results.push(registryResult);
326
+ renderCheck(registryResult);
327
+ console.log();
328
+ const passes = results.filter((r) => r.status === 'pass').length;
329
+ const warns = results.filter((r) => r.status === 'warn').length;
330
+ const fails = results.filter((r) => r.status === 'fail').length;
331
+ const summaryParts = [];
332
+ if (passes > 0)
333
+ summaryParts.push(chalk.green(`${passes} passed`));
334
+ if (warns > 0)
335
+ summaryParts.push(chalk.yellow(`${warns} warning${warns === 1 ? '' : 's'}`));
336
+ if (fails > 0)
337
+ summaryParts.push(chalk.red(`${fails} failed`));
338
+ if (fails > 0) {
339
+ clack.outro(chalk.red('Issues found: ') + summaryParts.join(' · '));
340
+ process.exit(1);
341
+ }
342
+ if (warns > 0) {
343
+ clack.outro(chalk.yellow('Warnings found: ') + summaryParts.join(' · '));
344
+ return;
345
+ }
346
+ clack.outro(chalk.green('Everything looks good! ') + summaryParts.join(' · '));
347
+ }
348
+ //# sourceMappingURL=doctor.js.map