@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.
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +155 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +107 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/template.d.ts +13 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +264 -0
- package/dist/utils/template.js.map +1 -0
- package/package.json +50 -0
- package/template/README.md +30 -0
|
@@ -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 @@
|
|
|
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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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)
|