dcntui 0.1.2 → 0.1.4

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.
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsIjD"}
@@ -0,0 +1,109 @@
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 { renderBanner } from '../utils/banner.js';
6
+ import { detectFramework, FRAMEWORK_OPTIONS } from '../utils/detect-framework.js';
7
+ import { CSS_OPTIONS, detectCss } from '../utils/detect-css.js';
8
+ import { detectTypeScript } from '../utils/detect-typescript.js';
9
+ const CONFIG_FILE = 'dcntui.config.json';
10
+ export async function initCommand() {
11
+ console.clear();
12
+ renderBanner();
13
+ clack.intro(chalk.bgCyan.black(' DCNTUI INIT '));
14
+ const cwd = process.cwd();
15
+ const packageJsonPath = path.join(cwd, 'package.json');
16
+ if (!fs.existsSync(packageJsonPath)) {
17
+ clack.log.error(chalk.red('No package.json found in the current directory.\n\n' +
18
+ 'dcntui init must be run from the root of your project — ' +
19
+ 'the same folder that contains your package.json.'));
20
+ clack.outro(chalk.red('Initialization aborted. Please try again from your project root.'));
21
+ process.exit(1);
22
+ }
23
+ clack.log.success(chalk.green("package.json found — you're in the right place."));
24
+ clack.log.info('Checking existing configuration…\n');
25
+ const configPath = path.join(cwd, CONFIG_FILE);
26
+ if (fs.existsSync(configPath)) {
27
+ clack.log.warn(chalk.yellow(`A ${CONFIG_FILE} already exists in this directory.\n\n` +
28
+ 'Continuing will overwrite your current configuration.'));
29
+ const shouldContinue = await clack.select({
30
+ message: 'Do you want to continue?',
31
+ options: [
32
+ { value: false, label: 'No — keep my existing config' },
33
+ { value: true, label: 'Yes — overwrite and reconfigure' }
34
+ ],
35
+ initialValue: false
36
+ });
37
+ if (clack.isCancel(shouldContinue) || shouldContinue === false) {
38
+ clack.outro(chalk.cyan('No changes made. Your existing config is untouched.'));
39
+ process.exit(0);
40
+ }
41
+ }
42
+ const detectedFramework = detectFramework(cwd);
43
+ if (detectedFramework) {
44
+ const detected = FRAMEWORK_OPTIONS.find((f) => f.value === detectedFramework);
45
+ clack.log.info(`Detected framework: ${chalk.cyan(detected.label)}`);
46
+ }
47
+ else {
48
+ clack.log.warn('Could not auto-detect a framework. Please select one manually.');
49
+ }
50
+ const framework = await clack.select({
51
+ message: 'Framework:',
52
+ options: FRAMEWORK_OPTIONS,
53
+ initialValue: detectedFramework ?? 'react'
54
+ });
55
+ if (clack.isCancel(framework)) {
56
+ clack.outro(chalk.yellow('Initialization cancelled.'));
57
+ process.exit(0);
58
+ }
59
+ let config = {};
60
+ if (fs.existsSync(configPath)) {
61
+ try {
62
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
63
+ }
64
+ catch {
65
+ config = {};
66
+ }
67
+ }
68
+ config['version'] ?? (config['version'] = 1);
69
+ config['registry'] ?? (config['registry'] = 'https://registry.dcntui.com');
70
+ config['framework'] = framework;
71
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
72
+ const frameworkLabel = FRAMEWORK_OPTIONS.find((f) => f.value === framework).label;
73
+ clack.log.success(chalk.green(`Framework set to ${chalk.bold(frameworkLabel)}.`));
74
+ const detectedCss = detectCss(cwd);
75
+ if (detectedCss) {
76
+ const detected = CSS_OPTIONS.find((c) => c.value === detectedCss);
77
+ clack.log.info(`Detected CSS strategy: ${chalk.cyan(detected.label)}`);
78
+ }
79
+ else {
80
+ clack.log.warn('Could not auto-detect a CSS strategy. Please select one manually.');
81
+ }
82
+ const css = await clack.select({
83
+ message: 'CSS strategy:',
84
+ options: CSS_OPTIONS,
85
+ initialValue: detectedCss ?? 'css'
86
+ });
87
+ if (clack.isCancel(css)) {
88
+ clack.outro(chalk.yellow('Initialization cancelled.'));
89
+ process.exit(0);
90
+ }
91
+ config['css'] = css;
92
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
93
+ const cssLabel = CSS_OPTIONS.find((c) => c.value === css).label;
94
+ clack.log.success(chalk.green(`CSS strategy set to ${chalk.bold(cssLabel)}.`));
95
+ const detectedTypeScript = detectTypeScript(cwd);
96
+ clack.log.info(`Detected language: ${chalk.cyan(detectedTypeScript ? 'TypeScript' : 'JavaScript')}`);
97
+ const typescript = await clack.confirm({
98
+ message: 'Use TypeScript?',
99
+ initialValue: detectedTypeScript
100
+ });
101
+ if (clack.isCancel(typescript)) {
102
+ clack.outro(chalk.yellow('Initialization cancelled.'));
103
+ process.exit(0);
104
+ }
105
+ config['typescript'] = typescript;
106
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
107
+ clack.log.success(chalk.green(`Language set to ${chalk.bold(typescript ? 'TypeScript' : 'JavaScript')}.`));
108
+ }
109
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { initCommand } from './commands/init.js';
4
+ const program = new Command();
5
+ program.name('dcntui').description('DCNTUI — Beautiful UI components for modern frameworks').version('0.1.0');
6
+ program.command('init').description('Initialize DCNTUI in your project').action(initCommand);
7
+ program.parse(process.argv);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9G,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAE7F,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function renderBanner(): void;
2
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,IAAI,IAAI,CAanC"}
@@ -0,0 +1,15 @@
1
+ import chalk from 'chalk';
2
+ export function renderBanner() {
3
+ const lines = [
4
+ chalk.cyanBright(' ╔╦╗╔═╗╔╗╔╔╦╗╦ ╦╦'),
5
+ chalk.blueBright(' ║║║ ║║║ ║ ║ ║║'),
6
+ chalk.magentaBright(' ═╩╝╚═╝╝╚╝ ╩ ╚═╝╩')
7
+ ];
8
+ console.log();
9
+ for (const line of lines) {
10
+ console.log(line);
11
+ }
12
+ console.log();
13
+ console.log(chalk.gray(' Beautiful UI components for modern frameworks.\n'));
14
+ }
15
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACtC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACtC,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC;KAC1C,CAAC;IAEF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type CssStrategy = 'tailwind-v4' | 'tailwind-v3' | 'scss' | 'css';
2
+ export interface CssOption {
3
+ value: CssStrategy;
4
+ label: string;
5
+ }
6
+ export declare const CSS_OPTIONS: CssOption[];
7
+ export declare function detectCss(cwd: string): CssStrategy | null;
8
+ //# sourceMappingURL=detect-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-css.d.ts","sourceRoot":"","sources":["../../src/utils/detect-css.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,EAKlC,CAAC;AAoCF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgCzD"}
@@ -0,0 +1,67 @@
1
+ import fg from 'fast-glob';
2
+ import fs from 'node:fs';
3
+ import { fileExists, hasDep, readPackageJson } from './helpers.js';
4
+ export const CSS_OPTIONS = [
5
+ { value: 'tailwind-v4', label: 'Tailwind CSS v4' },
6
+ { value: 'tailwind-v3', label: 'Tailwind CSS v3' },
7
+ { value: 'scss', label: 'SASS / SCSS' },
8
+ { value: 'css', label: 'Plain CSS' }
9
+ ];
10
+ const IGNORE = ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/.next/**', '**/.svelte-kit/**', '**/build/**'];
11
+ function hasTailwindV4Import(cwd) {
12
+ const cssFiles = fg.sync('**/*.css', { cwd, ignore: IGNORE, deep: 4, absolute: true });
13
+ const pattern = /@import\s+['"]tailwindcss['"]/;
14
+ for (const file of cssFiles) {
15
+ try {
16
+ if (pattern.test(fs.readFileSync(file, 'utf-8')))
17
+ return true;
18
+ }
19
+ catch {
20
+ // unreadable file — skip
21
+ }
22
+ }
23
+ return false;
24
+ }
25
+ function hasScssFiles(cwd) {
26
+ return fg.sync('**/*.scss', { cwd, ignore: IGNORE, deep: 4 }).length > 0;
27
+ }
28
+ function tailwindMajorVersion(pkg) {
29
+ const deps = {
30
+ ...pkg['dependencies'],
31
+ ...pkg['devDependencies']
32
+ };
33
+ const raw = deps['tailwindcss'];
34
+ if (!raw)
35
+ return null;
36
+ const match = raw.match(/(\d+)\./);
37
+ return match ? parseInt(match[1], 10) : null;
38
+ }
39
+ export function detectCss(cwd) {
40
+ const pkg = readPackageJson(cwd);
41
+ if (!pkg)
42
+ return null;
43
+ const hasConfigJs = fileExists(cwd, 'tailwind.config.js');
44
+ const hasConfigTs = fileExists(cwd, 'tailwind.config.ts');
45
+ const hasTailwindConfig = hasConfigJs || hasConfigTs;
46
+ if (!hasTailwindConfig && hasTailwindV4Import(cwd)) {
47
+ return 'tailwind-v4';
48
+ }
49
+ const twMajor = tailwindMajorVersion(pkg);
50
+ if (!hasTailwindConfig && twMajor !== null && twMajor >= 4) {
51
+ return 'tailwind-v4';
52
+ }
53
+ if (hasTailwindConfig) {
54
+ return 'tailwind-v3';
55
+ }
56
+ if (twMajor !== null && twMajor === 3) {
57
+ return 'tailwind-v3';
58
+ }
59
+ if (hasDep(pkg, 'sass') || hasDep(pkg, 'sass-embedded')) {
60
+ return 'scss';
61
+ }
62
+ if (hasScssFiles(cwd)) {
63
+ return 'scss';
64
+ }
65
+ return 'css';
66
+ }
67
+ //# sourceMappingURL=detect-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-css.js","sourceRoot":"","sources":["../../src/utils/detect-css.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type Framework = 'next-app' | 'next-pages' | 'svelte-kit' | 'svelte' | 'react';
2
+ export interface FrameworkOption {
3
+ value: Framework;
4
+ label: string;
5
+ hint?: string;
6
+ }
7
+ export declare const FRAMEWORK_OPTIONS: FrameworkOption[];
8
+ export declare function detectFramework(cwd: string): Framework | null;
9
+ //# sourceMappingURL=detect-framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-framework.d.ts","sourceRoot":"","sources":["../../src/utils/detect-framework.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAM9C,CAAC;AAEF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAwB7D"}
@@ -0,0 +1,32 @@
1
+ import { dirExists, hasDep, readPackageJson } from './helpers.js';
2
+ export const FRAMEWORK_OPTIONS = [
3
+ { value: 'next-app', label: 'Next.js App Router' },
4
+ { value: 'next-pages', label: 'Next.js Pages Router' },
5
+ { value: 'svelte-kit', label: 'SvelteKit' },
6
+ { value: 'svelte', label: 'Svelte' },
7
+ { value: 'react', label: 'React' }
8
+ ];
9
+ export function detectFramework(cwd) {
10
+ const pkg = readPackageJson(cwd);
11
+ if (!pkg)
12
+ return null;
13
+ if (hasDep(pkg, '@sveltejs/kit'))
14
+ return 'svelte-kit';
15
+ if (hasDep(pkg, 'svelte'))
16
+ return 'svelte';
17
+ if (hasDep(pkg, 'next')) {
18
+ const hasAppDir = dirExists(cwd, 'app') || dirExists(cwd, 'src/app');
19
+ const hasPagesDir = dirExists(cwd, 'pages') || dirExists(cwd, 'src/pages');
20
+ if (hasAppDir && !hasPagesDir)
21
+ return 'next-app';
22
+ if (hasPagesDir && !hasAppDir)
23
+ return 'next-pages';
24
+ if (hasAppDir && hasPagesDir)
25
+ return 'next-app';
26
+ return 'next-app';
27
+ }
28
+ if (hasDep(pkg, 'react'))
29
+ return 'react';
30
+ return null;
31
+ }
32
+ //# sourceMappingURL=detect-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-framework.js","sourceRoot":"","sources":["../../src/utils/detect-framework.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAUlE,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAClD,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,sBAAsB,EAAE;IACtD,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE;IAC3C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;CACnC,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,IAAI,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC;QAAE,OAAO,YAAY,CAAC;IAEtD,IAAI,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE3C,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAErE,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAE3E,IAAI,SAAS,IAAI,CAAC,WAAW;YAAE,OAAO,UAAU,CAAC;QACjD,IAAI,WAAW,IAAI,CAAC,SAAS;YAAE,OAAO,YAAY,CAAC;QAEnD,IAAI,SAAS,IAAI,WAAW;YAAE,OAAO,UAAU,CAAC;QAEhD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAEzC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function detectTypeScript(cwd: string): boolean;
2
+ //# sourceMappingURL=detect-typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-typescript.d.ts","sourceRoot":"","sources":["../../src/utils/detect-typescript.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQrD"}
@@ -0,0 +1,12 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { hasDep, readPackageJson } from './helpers.js';
4
+ export function detectTypeScript(cwd) {
5
+ if (fs.existsSync(path.join(cwd, 'tsconfig.json')))
6
+ return true;
7
+ const pkg = readPackageJson(cwd);
8
+ if (pkg && hasDep(pkg, 'typescript'))
9
+ return true;
10
+ return false;
11
+ }
12
+ //# sourceMappingURL=detect-typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-typescript.js","sourceRoot":"","sources":["../../src/utils/detect-typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function readPackageJson(cwd: string): Record<string, unknown> | null;
2
+ export declare function hasDep(pkg: Record<string, unknown>, name: string): boolean;
3
+ export declare function dirExists(cwd: string, dir: string): boolean;
4
+ export declare function fileExists(cwd: string, ...segments: string[]): boolean;
5
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQ3E;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAEtE"}
@@ -0,0 +1,23 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export function readPackageJson(cwd) {
4
+ try {
5
+ const raw = fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8');
6
+ return JSON.parse(raw);
7
+ }
8
+ catch {
9
+ return null;
10
+ }
11
+ }
12
+ export function hasDep(pkg, name) {
13
+ const deps = (pkg['dependencies'] ?? {});
14
+ const dev = (pkg['devDependencies'] ?? {});
15
+ return name in deps || name in dev;
16
+ }
17
+ export function dirExists(cwd, dir) {
18
+ return fs.existsSync(path.join(cwd, dir));
19
+ }
20
+ export function fileExists(cwd, ...segments) {
21
+ return fs.existsSync(path.join(cwd, ...segments));
22
+ }
23
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAErE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAA4B,EAAE,IAAY;IAC/D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAA2B,CAAC;IACnE,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAA2B,CAAC;IAErE,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAW;IAChD,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,GAAG,QAAkB;IAC3D,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dcntui",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "CLI for initializing DCNT UI and adding components to projects",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",