@vue-skuilder/cli 0.1.3 ā 0.1.5
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/cli.js +7 -11
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +2 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +41 -11
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pack.d.ts +3 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +124 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/types.d.ts +24 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +192 -16
- package/dist/types.js.map +1 -1
- package/dist/utils/prompts.d.ts +5 -2
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +67 -52
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/template.d.ts +10 -0
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +239 -8
- package/dist/utils/template.js.map +1 -1
- package/package.json +5 -3
- package/src/cli.ts +8 -12
- package/src/commands/init.ts +71 -21
- package/src/commands/pack.ts +163 -0
- package/src/types.ts +224 -18
- package/src/utils/prompts.ts +81 -54
- package/src/utils/template.ts +275 -37
package/dist/utils/prompts.js
CHANGED
|
@@ -1,6 +1,66 @@
|
|
|
1
1
|
import inquirer from 'inquirer';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { PREDEFINED_THEMES } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Convert hex color to closest ANSI color code
|
|
6
|
+
*/
|
|
7
|
+
function hexToAnsi(hex) {
|
|
8
|
+
// Remove # if present
|
|
9
|
+
hex = hex.replace('#', '');
|
|
10
|
+
// Convert hex to RGB
|
|
11
|
+
const r = parseInt(hex.substr(0, 2), 16);
|
|
12
|
+
const g = parseInt(hex.substr(2, 2), 16);
|
|
13
|
+
const b = parseInt(hex.substr(4, 2), 16);
|
|
14
|
+
// Convert to 256-color ANSI
|
|
15
|
+
const ansiCode = 16 + (36 * Math.round(r / 255 * 5)) + (6 * Math.round(g / 255 * 5)) + Math.round(b / 255 * 5);
|
|
16
|
+
return `\x1b[48;5;${ansiCode}m`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a color swatch for terminal display
|
|
20
|
+
*/
|
|
21
|
+
function createColorSwatch(hex, label) {
|
|
22
|
+
const colorCode = hexToAnsi(hex);
|
|
23
|
+
const reset = '\x1b[0m';
|
|
24
|
+
return `${colorCode} ${reset} ${label}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create theme preview with color swatches
|
|
28
|
+
*/
|
|
29
|
+
function createThemePreview(themeName) {
|
|
30
|
+
const theme = PREDEFINED_THEMES[themeName];
|
|
31
|
+
const lightColors = theme.light.colors;
|
|
32
|
+
const primarySwatch = createColorSwatch(lightColors.primary, 'Primary');
|
|
33
|
+
const secondarySwatch = createColorSwatch(lightColors.secondary, 'Secondary');
|
|
34
|
+
const accentSwatch = createColorSwatch(lightColors.accent, 'Accent');
|
|
35
|
+
return `${primarySwatch} ${secondarySwatch} ${accentSwatch}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Display comprehensive theme preview after selection
|
|
39
|
+
*/
|
|
40
|
+
export function displayThemePreview(themeName) {
|
|
41
|
+
const theme = PREDEFINED_THEMES[themeName];
|
|
42
|
+
console.log(chalk.cyan('\nšØ Theme Color Palette:'));
|
|
43
|
+
console.log(chalk.white(` ${theme.name.toUpperCase()} THEME`));
|
|
44
|
+
// Light theme colors
|
|
45
|
+
console.log(chalk.white('\n Light Mode:'));
|
|
46
|
+
const lightColors = theme.light.colors;
|
|
47
|
+
console.log(` ${createColorSwatch(lightColors.primary, `Primary: ${lightColors.primary}`)}`);
|
|
48
|
+
console.log(` ${createColorSwatch(lightColors.secondary, `Secondary: ${lightColors.secondary}`)}`);
|
|
49
|
+
console.log(` ${createColorSwatch(lightColors.accent, `Accent: ${lightColors.accent}`)}`);
|
|
50
|
+
console.log(` ${createColorSwatch(lightColors.success, `Success: ${lightColors.success}`)}`);
|
|
51
|
+
console.log(` ${createColorSwatch(lightColors.warning, `Warning: ${lightColors.warning}`)}`);
|
|
52
|
+
console.log(` ${createColorSwatch(lightColors.error, `Error: ${lightColors.error}`)}`);
|
|
53
|
+
// Dark theme colors
|
|
54
|
+
console.log(chalk.white('\n Dark Mode:'));
|
|
55
|
+
const darkColors = theme.dark.colors;
|
|
56
|
+
console.log(` ${createColorSwatch(darkColors.primary, `Primary: ${darkColors.primary}`)}`);
|
|
57
|
+
console.log(` ${createColorSwatch(darkColors.secondary, `Secondary: ${darkColors.secondary}`)}`);
|
|
58
|
+
console.log(` ${createColorSwatch(darkColors.accent, `Accent: ${darkColors.accent}`)}`);
|
|
59
|
+
console.log(` ${createColorSwatch(darkColors.success, `Success: ${darkColors.success}`)}`);
|
|
60
|
+
console.log(` ${createColorSwatch(darkColors.warning, `Warning: ${darkColors.warning}`)}`);
|
|
61
|
+
console.log(` ${createColorSwatch(darkColors.error, `Error: ${darkColors.error}`)}`);
|
|
62
|
+
console.log(chalk.gray(`\n Default mode: ${theme.defaultMode}`));
|
|
63
|
+
}
|
|
4
64
|
export async function gatherProjectConfig(projectName, options) {
|
|
5
65
|
console.log(chalk.cyan('\nš Creating a new Skuilder course application\n'));
|
|
6
66
|
let config = {
|
|
@@ -61,19 +121,19 @@ export async function gatherProjectConfig(projectName, options) {
|
|
|
61
121
|
message: 'Select theme:',
|
|
62
122
|
choices: [
|
|
63
123
|
{
|
|
64
|
-
name:
|
|
124
|
+
name: `Default (Material Blue) ${createThemePreview('default')}`,
|
|
65
125
|
value: 'default'
|
|
66
126
|
},
|
|
67
127
|
{
|
|
68
|
-
name:
|
|
128
|
+
name: `Medical (Healthcare Green) ${createThemePreview('medical')}`,
|
|
69
129
|
value: 'medical'
|
|
70
130
|
},
|
|
71
131
|
{
|
|
72
|
-
name:
|
|
132
|
+
name: `Educational (Academic Orange) ${createThemePreview('educational')}`,
|
|
73
133
|
value: 'educational'
|
|
74
134
|
},
|
|
75
135
|
{
|
|
76
|
-
name:
|
|
136
|
+
name: `Corporate (Professional Gray) ${createThemePreview('corporate')}`,
|
|
77
137
|
value: 'corporate'
|
|
78
138
|
}
|
|
79
139
|
],
|
|
@@ -88,6 +148,8 @@ export async function gatherProjectConfig(projectName, options) {
|
|
|
88
148
|
course: answers.courseId,
|
|
89
149
|
theme: PREDEFINED_THEMES[answers.themeName]
|
|
90
150
|
};
|
|
151
|
+
// Show comprehensive theme preview
|
|
152
|
+
displayThemePreview(answers.themeName);
|
|
91
153
|
}
|
|
92
154
|
else {
|
|
93
155
|
// Non-interactive mode: use provided options
|
|
@@ -117,7 +179,7 @@ export async function confirmProjectCreation(config, projectPath) {
|
|
|
117
179
|
if (config.course) {
|
|
118
180
|
console.log(` Course ID: ${chalk.white(config.course)}`);
|
|
119
181
|
}
|
|
120
|
-
console.log(` Theme: ${chalk.white(config.theme.name)}`);
|
|
182
|
+
console.log(` Theme: ${chalk.white(config.theme.name)} ${createThemePreview(config.theme.name)}`);
|
|
121
183
|
console.log(` Directory: ${chalk.white(projectPath)}`);
|
|
122
184
|
const { confirmed } = await inquirer.prompt([
|
|
123
185
|
{
|
|
@@ -129,57 +191,10 @@ export async function confirmProjectCreation(config, projectPath) {
|
|
|
129
191
|
]);
|
|
130
192
|
return confirmed;
|
|
131
193
|
}
|
|
132
|
-
export async function promptForCustomTheme() {
|
|
133
|
-
console.log(chalk.cyan('\nšØ Custom Theme Configuration\n'));
|
|
134
|
-
const answers = await inquirer.prompt([
|
|
135
|
-
{
|
|
136
|
-
type: 'input',
|
|
137
|
-
name: 'name',
|
|
138
|
-
message: 'Theme name:',
|
|
139
|
-
validate: (input) => input.trim().length > 0 || 'Theme name is required'
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
type: 'input',
|
|
143
|
-
name: 'primary',
|
|
144
|
-
message: 'Primary color (hex):',
|
|
145
|
-
default: '#1976D2',
|
|
146
|
-
validate: validateHexColor
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
type: 'input',
|
|
150
|
-
name: 'secondary',
|
|
151
|
-
message: 'Secondary color (hex):',
|
|
152
|
-
default: '#424242',
|
|
153
|
-
validate: validateHexColor
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
type: 'input',
|
|
157
|
-
name: 'accent',
|
|
158
|
-
message: 'Accent color (hex):',
|
|
159
|
-
default: '#82B1FF',
|
|
160
|
-
validate: validateHexColor
|
|
161
|
-
}
|
|
162
|
-
]);
|
|
163
|
-
return {
|
|
164
|
-
name: answers.name,
|
|
165
|
-
colors: {
|
|
166
|
-
primary: answers.primary,
|
|
167
|
-
secondary: answers.secondary,
|
|
168
|
-
accent: answers.accent
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
194
|
function formatProjectName(projectName) {
|
|
173
195
|
return projectName
|
|
174
196
|
.split(/[-_\s]+/)
|
|
175
197
|
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
176
198
|
.join(' ');
|
|
177
199
|
}
|
|
178
|
-
function validateHexColor(input) {
|
|
179
|
-
const hexColorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
|
|
180
|
-
if (!hexColorRegex.test(input)) {
|
|
181
|
-
return 'Please enter a valid hex color (e.g., #1976D2)';
|
|
182
|
-
}
|
|
183
|
-
return true;
|
|
184
|
-
}
|
|
185
200
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAA6B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/template.d.ts
CHANGED
|
@@ -11,10 +11,20 @@ export declare function copyDirectory(source: string, destination: string, exclu
|
|
|
11
11
|
* Transform package.json to use published dependencies instead of workspace references
|
|
12
12
|
*/
|
|
13
13
|
export declare function transformPackageJson(packageJsonPath: string, projectName: string, cliVersion: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Create a vite.config.ts to work with published packages instead of workspace sources
|
|
16
|
+
*
|
|
17
|
+
* // [ ] This should be revised so that it works from the existing vite.config.ts in standalone-ui. As is, it recreates 95% of the same config.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createViteConfig(viteConfigPath: string): Promise<void>;
|
|
14
20
|
/**
|
|
15
21
|
* Generate skuilder.config.json based on project configuration
|
|
16
22
|
*/
|
|
17
23
|
export declare function generateSkuilderConfig(configPath: string, config: ProjectConfig): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Generate .gitignore file for the project
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateGitignore(gitignorePath: string): Promise<void>;
|
|
18
28
|
/**
|
|
19
29
|
* Generate project README.md
|
|
20
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAK5D;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAe5D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAgD,GACtE,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D5E;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsH5E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG7F;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
package/dist/utils/template.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { promises as fs } from 'fs';
|
|
2
|
-
import { existsSync } from 'fs';
|
|
1
|
+
import { promises as fs, existsSync } from 'fs';
|
|
3
2
|
import path from 'path';
|
|
4
3
|
import { fileURLToPath } from 'url';
|
|
5
4
|
import chalk from 'chalk';
|
|
@@ -30,7 +29,7 @@ export async function copyDirectory(source, destination, excludePatterns = ['nod
|
|
|
30
29
|
const sourcePath = path.join(source, entry.name);
|
|
31
30
|
const destPath = path.join(destination, entry.name);
|
|
32
31
|
// Skip excluded patterns
|
|
33
|
-
if (excludePatterns.some(pattern => entry.name.includes(pattern))) {
|
|
32
|
+
if (excludePatterns.some((pattern) => entry.name.includes(pattern))) {
|
|
34
33
|
continue;
|
|
35
34
|
}
|
|
36
35
|
if (entry.isDirectory()) {
|
|
@@ -60,17 +59,88 @@ export async function transformPackageJson(packageJsonPath, projectName, cliVers
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
}
|
|
62
|
+
// Add missing terser devDependency for build minification
|
|
63
|
+
if (packageJson.devDependencies && !packageJson.devDependencies['terser']) {
|
|
64
|
+
packageJson.devDependencies['terser'] = '^5.39.0';
|
|
65
|
+
}
|
|
63
66
|
// Remove CLI-specific fields that don't belong in generated projects
|
|
64
67
|
delete packageJson.publishConfig;
|
|
65
68
|
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
66
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a vite.config.ts to work with published packages instead of workspace sources
|
|
72
|
+
*
|
|
73
|
+
* // [ ] This should be revised so that it works from the existing vite.config.ts in standalone-ui. As is, it recreates 95% of the same config.
|
|
74
|
+
*/
|
|
75
|
+
export async function createViteConfig(viteConfigPath) {
|
|
76
|
+
// Create a clean vite config for standalone projects
|
|
77
|
+
const transformedContent = `// packages/standalone-ui/vite.config.ts
|
|
78
|
+
import { defineConfig } from 'vite';
|
|
79
|
+
import vue from '@vitejs/plugin-vue';
|
|
80
|
+
import { fileURLToPath, URL } from 'node:url';
|
|
81
|
+
|
|
82
|
+
export default defineConfig({
|
|
83
|
+
plugins: [vue()],
|
|
84
|
+
resolve: {
|
|
85
|
+
alias: {
|
|
86
|
+
// Alias for internal src paths
|
|
87
|
+
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
|
88
|
+
|
|
89
|
+
// Add events alias if needed (often required by dependencies)
|
|
90
|
+
events: 'events',
|
|
91
|
+
},
|
|
92
|
+
extensions: ['.js', '.ts', '.json', '.vue'],
|
|
93
|
+
dedupe: [
|
|
94
|
+
// Ensure single instances of core libs and published packages
|
|
95
|
+
'vue',
|
|
96
|
+
'vuetify',
|
|
97
|
+
'pinia',
|
|
98
|
+
'vue-router',
|
|
99
|
+
'@vue-skuilder/db',
|
|
100
|
+
'@vue-skuilder/common',
|
|
101
|
+
'@vue-skuilder/common-ui',
|
|
102
|
+
'@vue-skuilder/courses',
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
// --- Dependencies optimization ---
|
|
106
|
+
optimizeDeps: {
|
|
107
|
+
// Help Vite pre-bundle dependencies from published packages
|
|
108
|
+
include: [
|
|
109
|
+
'@vue-skuilder/common-ui',
|
|
110
|
+
'@vue-skuilder/db',
|
|
111
|
+
'@vue-skuilder/common',
|
|
112
|
+
'@vue-skuilder/courses',
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
server: {
|
|
116
|
+
port: 5173, // Use standard Vite port for standalone projects
|
|
117
|
+
},
|
|
118
|
+
build: {
|
|
119
|
+
sourcemap: true,
|
|
120
|
+
target: 'es2020',
|
|
121
|
+
minify: 'terser',
|
|
122
|
+
terserOptions: {
|
|
123
|
+
keep_classnames: true,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
// Add define block for process polyfills
|
|
127
|
+
define: {
|
|
128
|
+
global: 'window',
|
|
129
|
+
'process.env': process.env,
|
|
130
|
+
'process.browser': true,
|
|
131
|
+
'process.version': JSON.stringify(process.version),
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
`;
|
|
135
|
+
await fs.writeFile(viteConfigPath, transformedContent);
|
|
136
|
+
}
|
|
67
137
|
/**
|
|
68
138
|
* Generate skuilder.config.json based on project configuration
|
|
69
139
|
*/
|
|
70
140
|
export async function generateSkuilderConfig(configPath, config) {
|
|
71
141
|
const skuilderConfig = {
|
|
72
142
|
title: config.title,
|
|
73
|
-
dataLayerType: config.dataLayerType
|
|
143
|
+
dataLayerType: config.dataLayerType,
|
|
74
144
|
};
|
|
75
145
|
if (config.course) {
|
|
76
146
|
skuilderConfig.course = config.course;
|
|
@@ -83,6 +153,127 @@ export async function generateSkuilderConfig(configPath, config) {
|
|
|
83
153
|
}
|
|
84
154
|
await fs.writeFile(configPath, JSON.stringify(skuilderConfig, null, 2));
|
|
85
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Generate .gitignore file for the project
|
|
158
|
+
*/
|
|
159
|
+
export async function generateGitignore(gitignorePath) {
|
|
160
|
+
const gitignoreContent = `# Dependencies
|
|
161
|
+
node_modules/
|
|
162
|
+
/.pnp
|
|
163
|
+
.pnp.js
|
|
164
|
+
|
|
165
|
+
# Production builds
|
|
166
|
+
/dist
|
|
167
|
+
/build
|
|
168
|
+
|
|
169
|
+
# Local env files
|
|
170
|
+
.env
|
|
171
|
+
.env.local
|
|
172
|
+
.env.development.local
|
|
173
|
+
.env.test.local
|
|
174
|
+
.env.production.local
|
|
175
|
+
|
|
176
|
+
# Log files
|
|
177
|
+
npm-debug.log*
|
|
178
|
+
yarn-debug.log*
|
|
179
|
+
yarn-error.log*
|
|
180
|
+
pnpm-debug.log*
|
|
181
|
+
lerna-debug.log*
|
|
182
|
+
|
|
183
|
+
# Runtime data
|
|
184
|
+
pids
|
|
185
|
+
*.pid
|
|
186
|
+
*.seed
|
|
187
|
+
*.pid.lock
|
|
188
|
+
|
|
189
|
+
# Coverage directory used by tools like istanbul
|
|
190
|
+
coverage/
|
|
191
|
+
*.lcov
|
|
192
|
+
|
|
193
|
+
# nyc test coverage
|
|
194
|
+
.nyc_output
|
|
195
|
+
|
|
196
|
+
# Dependency directories
|
|
197
|
+
jspm_packages/
|
|
198
|
+
|
|
199
|
+
# TypeScript cache
|
|
200
|
+
*.tsbuildinfo
|
|
201
|
+
|
|
202
|
+
# Optional npm cache directory
|
|
203
|
+
.npm
|
|
204
|
+
|
|
205
|
+
# Optional eslint cache
|
|
206
|
+
.eslintcache
|
|
207
|
+
|
|
208
|
+
# Microbundle cache
|
|
209
|
+
.rpt2_cache/
|
|
210
|
+
.rts2_cache_cjs/
|
|
211
|
+
.rts2_cache_es/
|
|
212
|
+
.rts2_cache_umd/
|
|
213
|
+
|
|
214
|
+
# Optional REPL history
|
|
215
|
+
.node_repl_history
|
|
216
|
+
|
|
217
|
+
# Output of 'npm pack'
|
|
218
|
+
*.tgz
|
|
219
|
+
|
|
220
|
+
# Yarn Integrity file
|
|
221
|
+
.yarn-integrity
|
|
222
|
+
|
|
223
|
+
# parcel-bundler cache (https://parceljs.org/)
|
|
224
|
+
.cache
|
|
225
|
+
.parcel-cache
|
|
226
|
+
|
|
227
|
+
# Next.js build output
|
|
228
|
+
.next
|
|
229
|
+
|
|
230
|
+
# Nuxt.js build / generate output
|
|
231
|
+
.nuxt
|
|
232
|
+
dist
|
|
233
|
+
|
|
234
|
+
# Gatsby files
|
|
235
|
+
.cache/
|
|
236
|
+
public
|
|
237
|
+
|
|
238
|
+
# Storybook build outputs
|
|
239
|
+
.out
|
|
240
|
+
.storybook-out
|
|
241
|
+
|
|
242
|
+
# Temporary folders
|
|
243
|
+
tmp/
|
|
244
|
+
temp/
|
|
245
|
+
|
|
246
|
+
# Editor directories and files
|
|
247
|
+
.vscode/
|
|
248
|
+
.idea
|
|
249
|
+
.DS_Store
|
|
250
|
+
*.suo
|
|
251
|
+
*.ntvs*
|
|
252
|
+
*.njsproj
|
|
253
|
+
*.sln
|
|
254
|
+
*.sw?
|
|
255
|
+
|
|
256
|
+
# OS generated files
|
|
257
|
+
Thumbs.db
|
|
258
|
+
|
|
259
|
+
# Cypress
|
|
260
|
+
/cypress/videos/
|
|
261
|
+
/cypress/screenshots/
|
|
262
|
+
|
|
263
|
+
# Local development
|
|
264
|
+
.env.development
|
|
265
|
+
.env.production
|
|
266
|
+
|
|
267
|
+
# Package manager lockfiles (uncomment if you want to ignore them)
|
|
268
|
+
# package-lock.json
|
|
269
|
+
# yarn.lock
|
|
270
|
+
# pnpm-lock.yaml
|
|
271
|
+
|
|
272
|
+
# Skuilder specific
|
|
273
|
+
/src/data/local-*.json
|
|
274
|
+
`;
|
|
275
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
276
|
+
}
|
|
86
277
|
/**
|
|
87
278
|
* Generate project README.md
|
|
88
279
|
*/
|
|
@@ -125,10 +316,42 @@ Course configuration is managed in \`skuilder.config.json\`. You can modify:
|
|
|
125
316
|
|
|
126
317
|
## Theme
|
|
127
318
|
|
|
128
|
-
Current theme: **${config.theme.name}**
|
|
129
|
-
- Primary: ${config.theme.colors.primary}
|
|
130
|
-
- Secondary: ${config.theme.colors.secondary}
|
|
131
|
-
- Accent: ${config.theme.colors.accent}
|
|
319
|
+
Current theme: **${config.theme.name}** (${config.theme.defaultMode} mode)
|
|
320
|
+
- Primary: ${config.theme.light.colors.primary}
|
|
321
|
+
- Secondary: ${config.theme.light.colors.secondary}
|
|
322
|
+
- Accent: ${config.theme.light.colors.accent}
|
|
323
|
+
|
|
324
|
+
This theme includes both light and dark variants. The application will use the ${config.theme.defaultMode} theme by default, but users can toggle between light and dark modes in their settings.
|
|
325
|
+
|
|
326
|
+
### Theme Customization
|
|
327
|
+
|
|
328
|
+
To customize the theme colors, edit the \`theme\` section in \`skuilder.config.json\`:
|
|
329
|
+
|
|
330
|
+
\`\`\`json
|
|
331
|
+
{
|
|
332
|
+
"theme": {
|
|
333
|
+
"name": "custom",
|
|
334
|
+
"defaultMode": "light",
|
|
335
|
+
"light": {
|
|
336
|
+
"dark": false,
|
|
337
|
+
"colors": {
|
|
338
|
+
"primary": "#your-color",
|
|
339
|
+
"secondary": "#your-color",
|
|
340
|
+
"accent": "#your-color"
|
|
341
|
+
// ... other semantic colors
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
"dark": {
|
|
345
|
+
"dark": true,
|
|
346
|
+
"colors": {
|
|
347
|
+
// ... dark variant colors
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
\`\`\`
|
|
353
|
+
|
|
354
|
+
The theme system supports all Vuetify semantic colors including error, success, warning, info, background, surface, and text colors. Changes to the configuration file are applied automatically on restart.
|
|
132
355
|
|
|
133
356
|
## Testing
|
|
134
357
|
|
|
@@ -159,12 +382,20 @@ export async function processTemplate(projectPath, config, cliVersion) {
|
|
|
159
382
|
console.log(chalk.blue('āļø Configuring package.json...'));
|
|
160
383
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
161
384
|
await transformPackageJson(packageJsonPath, config.projectName, cliVersion);
|
|
385
|
+
console.log(chalk.blue('š§ Creating vite.config.ts...'));
|
|
386
|
+
const viteConfigPath = path.join(projectPath, 'vite.config.ts');
|
|
387
|
+
if (existsSync(viteConfigPath)) {
|
|
388
|
+
await createViteConfig(viteConfigPath);
|
|
389
|
+
}
|
|
162
390
|
console.log(chalk.blue('š§ Generating configuration...'));
|
|
163
391
|
const configPath = path.join(projectPath, 'skuilder.config.json');
|
|
164
392
|
await generateSkuilderConfig(configPath, config);
|
|
165
393
|
console.log(chalk.blue('š Creating README...'));
|
|
166
394
|
const readmePath = path.join(projectPath, 'README.md');
|
|
167
395
|
await generateReadme(readmePath, config);
|
|
396
|
+
console.log(chalk.blue('š Generating .gitignore...'));
|
|
397
|
+
const gitignorePath = path.join(projectPath, '.gitignore');
|
|
398
|
+
await generateGitignore(gitignorePath);
|
|
168
399
|
console.log(chalk.green('ā
Template processing complete!'));
|
|
169
400
|
}
|
|
170
401
|
//# sourceMappingURL=template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.5",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"description": "CLI scaffolding tool for vue-skuilder projects",
|
|
9
9
|
"bin": {
|
|
@@ -33,11 +33,13 @@
|
|
|
33
33
|
"course"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@vue-skuilder/
|
|
36
|
+
"@vue-skuilder/db": "0.1.5",
|
|
37
|
+
"@vue-skuilder/standalone-ui": "^0.1.5",
|
|
37
38
|
"chalk": "^5.3.0",
|
|
38
39
|
"commander": "^11.0.0",
|
|
39
40
|
"fs-extra": "^11.2.0",
|
|
40
|
-
"inquirer": "^9.2.0"
|
|
41
|
+
"inquirer": "^9.2.0",
|
|
42
|
+
"pouchdb": "^9.0.0"
|
|
41
43
|
},
|
|
42
44
|
"devDependencies": {
|
|
43
45
|
"@types/fs-extra": "^11.0.0",
|
package/src/cli.ts
CHANGED
|
@@ -4,7 +4,8 @@ import { Command } from 'commander';
|
|
|
4
4
|
import { readFileSync } from 'fs';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
|
-
import {
|
|
7
|
+
import { createInitCommand } from './commands/init.js';
|
|
8
|
+
import { createPackCommand } from './commands/pack.js';
|
|
8
9
|
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
11
|
const __dirname = dirname(__filename);
|
|
@@ -20,16 +21,9 @@ program
|
|
|
20
21
|
.description('CLI tool for scaffolding Skuilder course applications')
|
|
21
22
|
.version(packageJson.version);
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.description('create a new Skuilder course application')
|
|
27
|
-
.option('--data-layer <type>', 'data layer type (static|dynamic)', 'dynamic')
|
|
28
|
-
.option('--theme <name>', 'theme name (default|medical|educational|corporate)', 'default')
|
|
29
|
-
.option('--no-interactive', 'skip interactive prompts')
|
|
30
|
-
.option('--couchdb-url <url>', 'CouchDB server URL (for dynamic data layer)')
|
|
31
|
-
.option('--course-id <id>', 'course ID to import (for dynamic data layer)')
|
|
32
|
-
.action(initCommand);
|
|
24
|
+
// Add commands
|
|
25
|
+
program.addCommand(createInitCommand());
|
|
26
|
+
program.addCommand(createPackCommand());
|
|
33
27
|
|
|
34
28
|
program.on('--help', () => {
|
|
35
29
|
console.log('');
|
|
@@ -37,6 +31,8 @@ program.on('--help', () => {
|
|
|
37
31
|
console.log(' $ skuilder init my-anatomy-course');
|
|
38
32
|
console.log(' $ skuilder init biology-101 --data-layer=static --theme=medical');
|
|
39
33
|
console.log(' $ skuilder init physics --no-interactive --data-layer=dynamic');
|
|
34
|
+
console.log(' $ skuilder pack sample-course-id');
|
|
35
|
+
console.log(' $ skuilder pack biology-101 --server http://localhost:5984 --username admin');
|
|
40
36
|
});
|
|
41
37
|
|
|
42
|
-
program.parse();
|
|
38
|
+
program.parse();
|