@odvi/create-dtt-framework 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const createCommand: Command;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,SAyJtB,CAAC"}
@@ -0,0 +1,155 @@
1
+ import { Command } from 'commander';
2
+ import inquirer from 'inquirer';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import path from 'path';
6
+ import fs from 'fs-extra';
7
+ import { copyTemplate } from '../utils/template.js';
8
+ export const createCommand = new Command('create')
9
+ .description('Create a new DTT Framework project')
10
+ .argument('[project-name]', 'Name of the project')
11
+ .option('-t, --template <template>', 'Template to use (default, minimal, full)', 'default')
12
+ .option('--use-npm', 'Use npm instead of pnpm')
13
+ .option('--use-yarn', 'Use yarn instead of pnpm')
14
+ .option('--no-git', 'Skip git initialization')
15
+ .option('--no-install', 'Skip dependency installation')
16
+ .action(async (projectName, options) => {
17
+ try {
18
+ // Get project name if not provided
19
+ if (!projectName) {
20
+ const answers = await inquirer.prompt([
21
+ {
22
+ type: 'input',
23
+ name: 'projectName',
24
+ message: 'What is your project name?',
25
+ default: 'my-dtt-app',
26
+ validate: (input) => {
27
+ if (!input.trim()) {
28
+ return 'Project name is required';
29
+ }
30
+ if (!/^[a-z0-9-]+$/.test(input)) {
31
+ return 'Project name must be lowercase and contain only letters, numbers, and hyphens';
32
+ }
33
+ return true;
34
+ },
35
+ },
36
+ ]);
37
+ projectName = answers.projectName;
38
+ }
39
+ // Get package manager preference
40
+ let packageManager = 'pnpm';
41
+ if (options?.useNpm) {
42
+ packageManager = 'npm';
43
+ }
44
+ else if (options?.useYarn) {
45
+ packageManager = 'yarn';
46
+ }
47
+ else {
48
+ const pmAnswers = await inquirer.prompt([
49
+ {
50
+ type: 'list',
51
+ name: 'packageManager',
52
+ message: 'Which package manager would you like to use?',
53
+ choices: ['pnpm', 'npm', 'yarn'],
54
+ default: 'pnpm',
55
+ },
56
+ ]);
57
+ packageManager = pmAnswers.packageManager;
58
+ }
59
+ // Get template preference
60
+ let template = options?.template || 'default';
61
+ if (!options?.template) {
62
+ const templateAnswers = await inquirer.prompt([
63
+ {
64
+ type: 'list',
65
+ name: 'template',
66
+ message: 'Which template would you like to use?',
67
+ choices: [
68
+ { name: 'Default - Full framework with all features', value: 'default' },
69
+ { name: 'Minimal - Core framework only', value: 'minimal' },
70
+ { name: 'Full - With additional integrations', value: 'full' },
71
+ ],
72
+ default: 'default',
73
+ },
74
+ ]);
75
+ template = templateAnswers.template;
76
+ }
77
+ const targetDir = path.resolve(process.cwd(), projectName);
78
+ // Check if directory already exists
79
+ if (await fs.pathExists(targetDir)) {
80
+ const { overwrite } = await inquirer.prompt([
81
+ {
82
+ type: 'confirm',
83
+ name: 'overwrite',
84
+ message: `Directory ${projectName} already exists. Overwrite?`,
85
+ default: false,
86
+ },
87
+ ]);
88
+ if (!overwrite) {
89
+ console.log(chalk.yellow('Operation cancelled.'));
90
+ process.exit(0);
91
+ }
92
+ await fs.remove(targetDir);
93
+ }
94
+ console.log();
95
+ console.log(chalk.cyan.bold('🚀 Creating a new DTT Framework project'));
96
+ console.log();
97
+ // Copy template
98
+ const spinner = ora('Copying template files...').start();
99
+ await copyTemplate(targetDir, template);
100
+ spinner.succeed('Template files copied');
101
+ // Update package.json with project name
102
+ spinner.text = 'Configuring project...';
103
+ spinner.start();
104
+ const packageJsonPath = path.join(targetDir, 'package.json');
105
+ const packageJson = await fs.readJson(packageJsonPath);
106
+ packageJson.name = projectName;
107
+ packageJson.version = '0.1.0';
108
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
109
+ spinner.succeed('Project configured');
110
+ // Initialize git if not disabled
111
+ if (options?.git !== false) {
112
+ spinner.text = 'Initializing git repository...';
113
+ spinner.start();
114
+ try {
115
+ await fs.ensureDir(path.join(targetDir, '.git'));
116
+ await fs.writeFile(path.join(targetDir, '.gitignore'), await fs.readFile(path.join(targetDir, '.gitignore')));
117
+ await fs.writeFile(path.join(targetDir, '.git'), '');
118
+ spinner.succeed('Git repository initialized');
119
+ }
120
+ catch (error) {
121
+ spinner.warn('Git initialization failed (git may not be installed)');
122
+ }
123
+ }
124
+ // Install dependencies if not disabled
125
+ if (options?.install !== false) {
126
+ spinner.text = `Installing dependencies with ${packageManager}...`;
127
+ spinner.start();
128
+ const { execSync } = await import('child_process');
129
+ try {
130
+ execSync(`${packageManager} install`, { cwd: targetDir, stdio: 'inherit' });
131
+ spinner.succeed('Dependencies installed');
132
+ }
133
+ catch (error) {
134
+ spinner.fail('Dependency installation failed');
135
+ console.log(chalk.yellow('You can install dependencies manually by running:'));
136
+ console.log(chalk.cyan(` cd ${projectName}`));
137
+ console.log(chalk.cyan(` ${packageManager} install`));
138
+ }
139
+ }
140
+ console.log();
141
+ console.log(chalk.green.bold('✨ Project created successfully!'));
142
+ console.log();
143
+ console.log(chalk.cyan('Next steps:'));
144
+ console.log(chalk.white(` cd ${projectName}`));
145
+ console.log(chalk.white(` ${packageManager} dev`));
146
+ console.log();
147
+ console.log(chalk.gray('Happy coding! 🎉'));
148
+ console.log();
149
+ }
150
+ catch (error) {
151
+ console.error(chalk.red('Error creating project:'), error);
152
+ process.exit(1);
153
+ }
154
+ });
155
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const updateCommand: Command;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SA6GtB,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import path from 'path';
5
+ import fs from 'fs-extra';
6
+ import { execSync } from 'child_process';
7
+ export const updateCommand = new Command('update')
8
+ .description('Update DTT Framework to the latest version')
9
+ .option('--check-only', 'Only check for updates without installing')
10
+ .option('--force', 'Force update even if already on latest version')
11
+ .action(async (options) => {
12
+ try {
13
+ console.log();
14
+ console.log(chalk.cyan.bold('🔄 Checking for DTT Framework updates...'));
15
+ console.log();
16
+ const spinner = ora('Checking version...').start();
17
+ // Get current version from package.json
18
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
19
+ if (!(await fs.pathExists(packageJsonPath))) {
20
+ spinner.fail('package.json not found in current directory');
21
+ console.log(chalk.yellow('Please run this command from a DTT Framework project directory.'));
22
+ process.exit(1);
23
+ }
24
+ const packageJson = await fs.readJson(packageJsonPath);
25
+ const currentVersion = packageJson.dependencies?.['dtt-framework'] || packageJson.devDependencies?.['dtt-framework'];
26
+ if (!currentVersion) {
27
+ spinner.fail('dtt-framework not found in dependencies');
28
+ console.log(chalk.yellow('This project does not appear to use DTT Framework.'));
29
+ process.exit(1);
30
+ }
31
+ spinner.succeed(`Current version: ${chalk.cyan(currentVersion)}`);
32
+ // Check for latest version
33
+ spinner.text = 'Checking for latest version...';
34
+ spinner.start();
35
+ try {
36
+ const latestVersion = execSync('npm view dtt-framework version', { encoding: 'utf-8' }).trim();
37
+ spinner.succeed(`Latest version: ${chalk.green(latestVersion)}`);
38
+ if (currentVersion === latestVersion && !options?.force) {
39
+ console.log();
40
+ console.log(chalk.green('You are already on the latest version!'));
41
+ console.log();
42
+ process.exit(0);
43
+ }
44
+ if (options?.checkOnly) {
45
+ console.log();
46
+ console.log(chalk.yellow('An update is available!'));
47
+ console.log(chalk.white(`Current: ${currentVersion}`));
48
+ console.log(chalk.white(`Latest: ${latestVersion}`));
49
+ console.log(chalk.cyan('\nRun "npx dtt-framework update" to update.'));
50
+ console.log();
51
+ process.exit(0);
52
+ }
53
+ // Perform update
54
+ console.log();
55
+ const updateSpinner = ora('Updating dtt-framework...').start();
56
+ try {
57
+ // Detect package manager
58
+ let packageManager = 'npm';
59
+ if (await fs.pathExists(path.join(process.cwd(), 'pnpm-lock.yaml'))) {
60
+ packageManager = 'pnpm';
61
+ }
62
+ else if (await fs.pathExists(path.join(process.cwd(), 'yarn.lock'))) {
63
+ packageManager = 'yarn';
64
+ }
65
+ execSync(`${packageManager} update dtt-framework@latest`, { stdio: 'inherit' });
66
+ updateSpinner.succeed('Update completed successfully!');
67
+ console.log();
68
+ console.log(chalk.green.bold('✨ DTT Framework updated successfully!'));
69
+ console.log();
70
+ console.log(chalk.cyan('Changes:'));
71
+ console.log(chalk.white(` Updated from ${currentVersion} to ${latestVersion}`));
72
+ console.log();
73
+ console.log(chalk.yellow('Please review the changelog for breaking changes:'));
74
+ console.log(chalk.cyan(' https://github.com/your-org/dtt-framework/releases'));
75
+ console.log();
76
+ console.log(chalk.cyan('Next steps:'));
77
+ console.log(chalk.white(' Review and update your code if needed'));
78
+ console.log(chalk.white(' Run tests to ensure everything works'));
79
+ console.log();
80
+ }
81
+ catch (error) {
82
+ updateSpinner.fail('Update failed');
83
+ console.log(chalk.red('Error updating dtt-framework:'), error);
84
+ console.log();
85
+ console.log(chalk.yellow('You can try updating manually:'));
86
+ console.log(chalk.cyan(' pnpm update dtt-framework@latest'));
87
+ console.log(chalk.cyan(' npm update dtt-framework@latest'));
88
+ console.log(chalk.cyan(' yarn upgrade dtt-framework@latest'));
89
+ console.log();
90
+ process.exit(1);
91
+ }
92
+ }
93
+ catch (error) {
94
+ spinner.fail('Failed to check for updates');
95
+ console.log(chalk.red('Error:'), error);
96
+ console.log();
97
+ console.log(chalk.yellow('You may need to update manually or check your internet connection.'));
98
+ console.log();
99
+ process.exit(1);
100
+ }
101
+ }
102
+ catch (error) {
103
+ console.error(chalk.red('Error during update:'), error);
104
+ process.exit(1);
105
+ }
106
+ });
107
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.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,27 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { createCommand } from './commands/create.js';
5
+ import { updateCommand } from './commands/update.js';
6
+ const program = new Command();
7
+ program
8
+ .name('create-dtt-framework')
9
+ .description('CLI tool to scaffold new projects with DTT Framework')
10
+ .version('0.1.0');
11
+ // Add create command
12
+ program.addCommand(createCommand);
13
+ // Add update command
14
+ program.addCommand(updateCommand);
15
+ // Handle unknown commands
16
+ program.on('command:*', (operands) => {
17
+ console.error(chalk.red(`error: unknown command '${operands[0]}'`));
18
+ console.log(chalk.yellow('Run --help for a list of available commands'));
19
+ process.exit(1);
20
+ });
21
+ // Parse arguments
22
+ program.parse(process.argv);
23
+ // Show help if no command provided
24
+ if (!process.argv.slice(2).length) {
25
+ program.outputHelp();
26
+ }
27
+ //# 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,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,0BAA0B;AAC1B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;IACnC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,2BAA2B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CACrD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,kBAAkB;AAClB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get the path to the template directory
3
+ */
4
+ export declare function getTemplatePath(): string;
5
+ /**
6
+ * Get the path to the source directory (for development)
7
+ */
8
+ export declare function getSourcePath(): string;
9
+ /**
10
+ * Copy template files to target directory
11
+ */
12
+ export declare function copyTemplate(targetDir: string, template?: string): Promise<void>;
13
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDjG"}
@@ -0,0 +1,264 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import chalk from 'chalk';
4
+ /**
5
+ * Get the path to the template directory
6
+ */
7
+ export function getTemplatePath() {
8
+ // When running from npm package, template is in package root
9
+ const packageRoot = path.resolve(__dirname, '../..');
10
+ return path.join(packageRoot, 'template');
11
+ }
12
+ /**
13
+ * Get the path to the source directory (for development)
14
+ */
15
+ export function getSourcePath() {
16
+ // When running from source during development
17
+ return path.resolve(process.cwd());
18
+ }
19
+ /**
20
+ * Copy template files to target directory
21
+ */
22
+ export async function copyTemplate(targetDir, template = 'default') {
23
+ const templatePath = getTemplatePath();
24
+ if (!(await fs.pathExists(templatePath))) {
25
+ // If template doesn't exist in CLI package, copy from source
26
+ console.log(chalk.yellow('Template not found in CLI package, copying from source...'));
27
+ await copyFromSource(targetDir, template);
28
+ return;
29
+ }
30
+ // Copy template files
31
+ await fs.copy(templatePath, targetDir, {
32
+ filter: (src) => {
33
+ const relative = path.relative(templatePath, src);
34
+ // Exclude certain files
35
+ const excludePatterns = [
36
+ 'node_modules',
37
+ '.git',
38
+ '.next',
39
+ 'dist',
40
+ 'build',
41
+ '.env.local',
42
+ '.env.*.local',
43
+ 'pnpm-lock.yaml',
44
+ 'yarn.lock',
45
+ 'package-lock.json',
46
+ '*.log',
47
+ '.DS_Store',
48
+ 'coverage',
49
+ '.nyc_output',
50
+ '.turbo',
51
+ '.vercel',
52
+ 'out',
53
+ ];
54
+ return !excludePatterns.some(pattern => {
55
+ if (pattern.includes('*')) {
56
+ const regex = new RegExp(pattern.replace('*', '.*'));
57
+ return regex.test(relative);
58
+ }
59
+ return relative === pattern || relative.startsWith(pattern + '/');
60
+ });
61
+ },
62
+ });
63
+ // Handle template-specific modifications
64
+ await applyTemplateModifications(targetDir, template);
65
+ }
66
+ /**
67
+ * Copy files from source directory (for development)
68
+ */
69
+ async function copyFromSource(targetDir, template) {
70
+ const sourcePath = getSourcePath();
71
+ // Files/directories to include
72
+ const includePatterns = [
73
+ 'src',
74
+ 'public',
75
+ 'docs',
76
+ 'components.json',
77
+ 'next.config.js',
78
+ 'postcss.config.js',
79
+ 'prettier.config.js',
80
+ 'tsconfig.json',
81
+ 'drizzle.config.ts',
82
+ 'vitest.config.ts',
83
+ '.env.example',
84
+ '.gitignore',
85
+ '.eslintrc.json',
86
+ '.npmrc',
87
+ ];
88
+ // Files/directories to exclude
89
+ const excludePatterns = [
90
+ 'node_modules',
91
+ '.git',
92
+ '.next',
93
+ 'dist',
94
+ 'build',
95
+ '.env.local',
96
+ '.env.*.local',
97
+ 'pnpm-lock.yaml',
98
+ 'yarn.lock',
99
+ 'package-lock.json',
100
+ '*.log',
101
+ '.DS_Store',
102
+ 'coverage',
103
+ '.nyc_output',
104
+ '.turbo',
105
+ '.vercel',
106
+ 'out',
107
+ '__tests__',
108
+ '.test.ts',
109
+ '.test.tsx',
110
+ '.spec.ts',
111
+ '.spec.tsx',
112
+ 'cli',
113
+ 'template',
114
+ ];
115
+ // Create target directory
116
+ await fs.ensureDir(targetDir);
117
+ // Copy included files
118
+ for (const pattern of includePatterns) {
119
+ const srcPath = path.join(sourcePath, pattern);
120
+ if (await fs.pathExists(srcPath)) {
121
+ await fs.copy(srcPath, path.join(targetDir, pattern), {
122
+ filter: (src) => {
123
+ const relative = path.relative(sourcePath, src);
124
+ return !excludePatterns.some(exclude => {
125
+ if (exclude.includes('*')) {
126
+ const regex = new RegExp(exclude.replace('*', '.*'));
127
+ return regex.test(relative);
128
+ }
129
+ return relative === exclude || relative.startsWith(exclude + '/');
130
+ });
131
+ },
132
+ });
133
+ }
134
+ }
135
+ // Create a basic package.json
136
+ await createPackageJson(targetDir, template);
137
+ }
138
+ /**
139
+ * Apply template-specific modifications
140
+ */
141
+ async function applyTemplateModifications(targetDir, template) {
142
+ const packageJsonPath = path.join(targetDir, 'package.json');
143
+ if (!(await fs.pathExists(packageJsonPath))) {
144
+ return;
145
+ }
146
+ const packageJson = await fs.readJson(packageJsonPath);
147
+ // Template-specific modifications
148
+ switch (template) {
149
+ case 'minimal':
150
+ // Remove some dependencies for minimal template
151
+ if (packageJson.dependencies) {
152
+ delete packageJson.dependencies['@clerk/nextjs'];
153
+ delete packageJson.dependencies['snowflake-sdk'];
154
+ delete packageJson.dependencies['@supabase/ssr'];
155
+ delete packageJson.dependencies['@supabase/supabase-js'];
156
+ }
157
+ break;
158
+ case 'full':
159
+ // Full template already has everything
160
+ break;
161
+ case 'default':
162
+ default:
163
+ // Default template
164
+ break;
165
+ }
166
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
167
+ }
168
+ /**
169
+ * Create package.json for new project
170
+ */
171
+ async function createPackageJson(targetDir, template) {
172
+ const packageJson = {
173
+ name: 'my-dtt-app',
174
+ version: '0.1.0',
175
+ private: true,
176
+ type: 'module',
177
+ scripts: {
178
+ 'build': 'next build',
179
+ 'check': 'next lint && tsc --noEmit',
180
+ 'db:generate': 'drizzle-kit generate',
181
+ 'db:migrate': 'drizzle-kit migrate',
182
+ 'db:push': 'drizzle-kit push',
183
+ 'db:studio': 'drizzle-kit studio',
184
+ 'dev': 'next dev --turbo',
185
+ 'format:check': 'prettier --check "**/*.{ts,tsx,js,jsx,mdx}" --cache',
186
+ 'format:write': 'prettier --write "**/*.{ts,tsx,js,jsx,mdx}" --cache',
187
+ 'lint': 'next lint',
188
+ 'lint:fix': 'next lint --fix',
189
+ 'preview': 'next build && next start',
190
+ 'start': 'next start',
191
+ 'test': 'vitest run',
192
+ 'test:watch': 'vitest',
193
+ 'test:ui': 'vitest --ui',
194
+ 'test:coverage': 'vitest run --coverage',
195
+ 'typecheck': 'tsc --noEmit',
196
+ },
197
+ dependencies: {
198
+ '@clerk/nextjs': '^6.36.5',
199
+ '@radix-ui/react-collapsible': '^1.1.12',
200
+ '@radix-ui/react-slot': '^1.2.4',
201
+ '@supabase/ssr': '^0.8.0',
202
+ '@supabase/supabase-js': '^2.89.0',
203
+ '@t3-oss/env-nextjs': '^0.12.0',
204
+ '@tanstack/react-query': '^5.90.14',
205
+ 'class-variance-authority': '^0.7.1',
206
+ clsx: '^2.1.1',
207
+ 'drizzle-orm': '^0.41.0',
208
+ hono: '^4.11.3',
209
+ 'lucide-react': '^0.562.0',
210
+ next: '^15.2.3',
211
+ postgres: '^3.4.4',
212
+ react: '^19.0.0',
213
+ 'react-dom': '^19.0.0',
214
+ 'snowflake-sdk': '^2.3.3',
215
+ svix: '^1.82.0',
216
+ 'tailwind-merge': '^3.4.0',
217
+ zod: '^3.24.2',
218
+ zustand: '^5.0.9',
219
+ },
220
+ devDependencies: {
221
+ '@eslint/eslintrc': '^3.3.1',
222
+ '@tailwindcss/postcss': '^4.0.15',
223
+ '@testing-library/jest-dom': '^6.9.1',
224
+ '@testing-library/react': '^16.3.1',
225
+ '@types/node': '^20.14.10',
226
+ '@types/react': '^19.0.0',
227
+ '@types/react-dom': '^19.0.0',
228
+ '@types/snowflake-sdk': '^1.6.24',
229
+ '@vitejs/plugin-react': '^5.1.2',
230
+ '@vitest/coverage-v8': '^4.0.16',
231
+ '@vitest/ui': '^4.0.16',
232
+ 'drizzle-kit': '^0.30.5',
233
+ eslint: '^9.23.0',
234
+ 'eslint-config-next': '^15.2.3',
235
+ 'eslint-plugin-drizzle': '^0.2.3',
236
+ 'happy-dom': '^20.0.11',
237
+ jsdom: '^27.4.0',
238
+ msw: '^2.12.7',
239
+ postcss: '^8.5.3',
240
+ prettier: '^3.5.3',
241
+ 'prettier-plugin-tailwindcss': '^0.6.11',
242
+ tailwindcss: '^4.0.15',
243
+ 'tw-animate-css': '^1.4.0',
244
+ typescript: '^5.8.2',
245
+ 'typescript-eslint': '^8.27.0',
246
+ vitest: '^4.0.16',
247
+ },
248
+ packageManager: 'pnpm@10.26.1',
249
+ };
250
+ // Apply template-specific modifications
251
+ switch (template) {
252
+ case 'minimal':
253
+ if (packageJson.dependencies) {
254
+ const deps = packageJson.dependencies;
255
+ delete deps['@clerk/nextjs'];
256
+ delete deps['snowflake-sdk'];
257
+ delete deps['@supabase/ssr'];
258
+ delete deps['@supabase/supabase-js'];
259
+ }
260
+ break;
261
+ }
262
+ await fs.writeJson(path.join(targetDir, 'package.json'), packageJson, { spaces: 2 });
263
+ }
264
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@odvi/create-dtt-framework",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool to scaffold new projects with DTT Framework",
5
+ "type": "module",
6
+ "bin": {
7
+ "create-dtt-framework": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "template"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "prepublishOnly": "pnpm build"
17
+ },
18
+ "dependencies": {
19
+ "chalk": "^5.3.0",
20
+ "commander": "^12.1.0",
21
+ "inquirer": "^9.2.23",
22
+ "ora": "^8.1.0",
23
+ "fs-extra": "^11.2.0"
24
+ },
25
+ "devDependencies": {
26
+ "@types/fs-extra": "^11.0.4",
27
+ "@types/inquirer": "^9.0.7",
28
+ "@types/node": "^20.14.10",
29
+ "typescript": "^5.8.2"
30
+ },
31
+ "engines": {
32
+ "node": ">=18.0.0"
33
+ },
34
+ "keywords": [
35
+ "dtt-framework",
36
+ "cli",
37
+ "scaffold",
38
+ "next.js",
39
+ "typescript"
40
+ ],
41
+ "license": "MIT",
42
+ "author": "DTT Framework",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/odvidtt/dtt-framework.git"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ }
50
+ }
@@ -0,0 +1,30 @@
1
+ # DTT Framework App
2
+
3
+ This is a DTT Framework application created with the CLI.
4
+
5
+ ## Getting Started
6
+
7
+ First, install dependencies:
8
+
9
+ ```bash
10
+ pnpm install
11
+ ```
12
+
13
+ Then, run the development server:
14
+
15
+ ```bash
16
+ pnpm dev
17
+ ```
18
+
19
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
20
+
21
+ ## Learn More
22
+
23
+ To learn more about DTT Framework, visit the [documentation](./docs/framework/01-overview.md).
24
+
25
+ ## Documentation
26
+
27
+ - [Overview](./docs/framework/01-overview.md)
28
+ - [Tech Stack](./docs/framework/02-techstack.md)
29
+ - [Environment Variables](./docs/framework/environment-variables.md)
30
+ - [CLI Installation](./docs/framework/cli-installation.md)