@vue-skuilder/cli 0.1.4 ā 0.1.6
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/CLAUDE.md +84 -0
- 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 +87 -12
- 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 +141 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/types.d.ts +29 -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/pack-courses.d.ts +13 -0
- package/dist/utils/pack-courses.d.ts.map +1 -0
- package/dist/utils/pack-courses.js +54 -0
- package/dist/utils/pack-courses.js.map +1 -0
- package/dist/utils/prompts.d.ts +5 -2
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +272 -72
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/template.d.ts +4 -0
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +93 -11
- package/dist/utils/template.js.map +1 -1
- package/package.json +5 -3
- package/src/cli.ts +8 -12
- package/src/commands/init.ts +128 -22
- package/src/commands/pack.ts +186 -0
- package/src/types.ts +230 -18
- package/src/utils/pack-courses.ts +77 -0
- package/src/utils/prompts.ts +321 -81
- package/src/utils/template.ts +129 -41
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# @vue-skuilder/cli Package
|
|
2
|
+
|
|
3
|
+
Command-line scaffolding tool for creating and managing vue-skuilder course projects.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
- Build: `yarn workspace @vue-skuilder/cli build` (TypeScript compilation)
|
|
7
|
+
- Dev: `yarn workspace @vue-skuilder/cli dev` (TypeScript watch mode)
|
|
8
|
+
- Lint: `yarn workspace @vue-skuilder/cli lint:fix`
|
|
9
|
+
|
|
10
|
+
## Binary Usage
|
|
11
|
+
Once built, the CLI is available as `skuilder` command:
|
|
12
|
+
```bash
|
|
13
|
+
# Install globally or use via npx
|
|
14
|
+
npx @vue-skuilder/cli init my-course
|
|
15
|
+
npx @vue-skuilder/cli pack my-course
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Build System
|
|
19
|
+
- **TypeScript**: Direct compilation to CommonJS in `dist/`
|
|
20
|
+
- **Binary Entry**: `dist/cli.js` with executable shebang
|
|
21
|
+
- **Module Type**: ES module with `.js` extension
|
|
22
|
+
|
|
23
|
+
## CLI Commands
|
|
24
|
+
|
|
25
|
+
### Project Initialization
|
|
26
|
+
- **init**: Scaffolds new course project structure
|
|
27
|
+
- **pack**: Packages course content for distribution
|
|
28
|
+
|
|
29
|
+
## Dependencies
|
|
30
|
+
|
|
31
|
+
### Core CLI Framework
|
|
32
|
+
- `commander` - Command-line argument parsing
|
|
33
|
+
- `inquirer` - Interactive prompts and wizards
|
|
34
|
+
- `chalk` - Terminal color output
|
|
35
|
+
|
|
36
|
+
### Vue-Skuilder Integration
|
|
37
|
+
- `@vue-skuilder/db` - Database utilities for course packaging
|
|
38
|
+
- `@vue-skuilder/standalone-ui` - Standalone player for packaged courses
|
|
39
|
+
|
|
40
|
+
### File Management
|
|
41
|
+
- `fs-extra` - Enhanced file system operations
|
|
42
|
+
- `pouchdb` - Local database for course data
|
|
43
|
+
|
|
44
|
+
## Command Implementation
|
|
45
|
+
|
|
46
|
+
### Init Command (`commands/init.ts`)
|
|
47
|
+
- **Project Setup**: Creates course directory structure
|
|
48
|
+
- **Template System**: Applies course template files
|
|
49
|
+
- **Configuration**: Generates initial course configuration
|
|
50
|
+
- **Dependencies**: Installs required npm packages
|
|
51
|
+
|
|
52
|
+
### Pack Command (`commands/pack.ts`)
|
|
53
|
+
- **Course Compilation**: Bundles course content for distribution
|
|
54
|
+
- **Static Data**: Converts dynamic course data to static format
|
|
55
|
+
- **Optimization**: Minifies and optimizes course assets
|
|
56
|
+
- **Packaging**: Creates deployable course bundle
|
|
57
|
+
|
|
58
|
+
## Utilities
|
|
59
|
+
|
|
60
|
+
### Template Management (`utils/template.ts`)
|
|
61
|
+
- **File Templates**: Course file and directory templates
|
|
62
|
+
- **Variable Substitution**: Dynamic template content generation
|
|
63
|
+
- **Asset Copying**: Static asset management
|
|
64
|
+
|
|
65
|
+
### Course Packing (`utils/pack-courses.ts`)
|
|
66
|
+
- **Data Extraction**: Converts CouchDB data to static files
|
|
67
|
+
- **Asset Bundling**: Packages course media and content
|
|
68
|
+
- **Optimization**: Compresses and optimizes output
|
|
69
|
+
|
|
70
|
+
### Interactive Prompts (`utils/prompts.ts`)
|
|
71
|
+
- **User Input**: Course configuration prompts
|
|
72
|
+
- **Validation**: Input validation and error handling
|
|
73
|
+
- **Help Text**: Contextual assistance
|
|
74
|
+
|
|
75
|
+
## Package Publishing
|
|
76
|
+
- **NPM Package**: Published as `@vue-skuilder/cli`
|
|
77
|
+
- **Global Installation**: Can be installed globally for `skuilder` command
|
|
78
|
+
- **Binary Linking**: Automatically creates `skuilder` command alias
|
|
79
|
+
|
|
80
|
+
## Use Cases
|
|
81
|
+
- **Course Authors**: Initialize new course projects
|
|
82
|
+
- **Content Creators**: Package courses for distribution
|
|
83
|
+
- **Developers**: Bootstrap vue-skuilder development environment
|
|
84
|
+
- **Deployment**: Automated course packaging for CI/CD
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,8 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { readFileSync } from 'fs';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import { dirname, join } from 'path';
|
|
6
|
-
import {
|
|
6
|
+
import { createInitCommand } from './commands/init.js';
|
|
7
|
+
import { createPackCommand } from './commands/pack.js';
|
|
7
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
9
|
const __dirname = dirname(__filename);
|
|
9
10
|
// Read package.json to get version
|
|
@@ -14,22 +15,17 @@ program
|
|
|
14
15
|
.name('skuilder')
|
|
15
16
|
.description('CLI tool for scaffolding Skuilder course applications')
|
|
16
17
|
.version(packageJson.version);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
.description('create a new Skuilder course application')
|
|
21
|
-
.option('--data-layer <type>', 'data layer type (static|dynamic)', 'dynamic')
|
|
22
|
-
.option('--theme <name>', 'theme name (default|medical|educational|corporate)', 'default')
|
|
23
|
-
.option('--no-interactive', 'skip interactive prompts')
|
|
24
|
-
.option('--couchdb-url <url>', 'CouchDB server URL (for dynamic data layer)')
|
|
25
|
-
.option('--course-id <id>', 'course ID to import (for dynamic data layer)')
|
|
26
|
-
.action(initCommand);
|
|
18
|
+
// Add commands
|
|
19
|
+
program.addCommand(createInitCommand());
|
|
20
|
+
program.addCommand(createPackCommand());
|
|
27
21
|
program.on('--help', () => {
|
|
28
22
|
console.log('');
|
|
29
23
|
console.log('Examples:');
|
|
30
24
|
console.log(' $ skuilder init my-anatomy-course');
|
|
31
25
|
console.log(' $ skuilder init biology-101 --data-layer=static --theme=medical');
|
|
32
26
|
console.log(' $ skuilder init physics --no-interactive --data-layer=dynamic');
|
|
27
|
+
console.log(' $ skuilder pack sample-course-id');
|
|
28
|
+
console.log(' $ skuilder pack biology-101 --server http://localhost:5984 --username admin');
|
|
33
29
|
});
|
|
34
30
|
program.parse();
|
|
35
31
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,mCAAmC;AACnC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAExC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;AAC/F,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare function createInitCommand(): Command;
|
|
3
3
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,20 +1,39 @@
|
|
|
1
|
-
import { existsSync } from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
1
|
import chalk from 'chalk';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { existsSync, readFileSync } from 'fs';
|
|
4
|
+
import path, { dirname, join } from 'path';
|
|
7
5
|
import { fileURLToPath } from 'url';
|
|
8
|
-
import {
|
|
6
|
+
import { PREDEFINED_THEMES } from '../types.js';
|
|
7
|
+
import { confirmProjectCreation, displayThemePreview, gatherProjectConfig, } from '../utils/prompts.js';
|
|
8
|
+
import { processTemplate } from '../utils/template.js';
|
|
9
|
+
import { packCourses } from '../utils/pack-courses.js';
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
11
|
const __dirname = dirname(__filename);
|
|
11
|
-
export
|
|
12
|
+
export function createInitCommand() {
|
|
13
|
+
return new Command('init')
|
|
14
|
+
.argument('<project-name>', 'name of the project to create')
|
|
15
|
+
.description('create a new Skuilder course application')
|
|
16
|
+
.option('--data-layer <type>', 'data layer type (static|dynamic)', 'dynamic')
|
|
17
|
+
.option('--theme <name>', 'theme name (default|medical|educational|corporate)', 'default')
|
|
18
|
+
.option('--no-interactive', 'skip interactive prompts')
|
|
19
|
+
.option('--couchdb-url <url>', 'CouchDB server URL (for dynamic data layer)')
|
|
20
|
+
.option('--course-id <id>', 'course ID to import (for dynamic data layer)')
|
|
21
|
+
.action(initCommand);
|
|
22
|
+
}
|
|
23
|
+
async function initCommand(projectName, options) {
|
|
12
24
|
try {
|
|
13
25
|
// Validate project name
|
|
14
26
|
if (!isValidProjectName(projectName)) {
|
|
15
27
|
console.error(chalk.red('ā Invalid project name. Use only letters, numbers, hyphens, and underscores.'));
|
|
16
28
|
process.exit(1);
|
|
17
29
|
}
|
|
30
|
+
// Validate theme option
|
|
31
|
+
const validThemes = Object.keys(PREDEFINED_THEMES);
|
|
32
|
+
if (!validThemes.includes(options.theme)) {
|
|
33
|
+
console.error(chalk.red(`ā Invalid theme: "${options.theme}"`));
|
|
34
|
+
console.error(chalk.yellow(`Valid themes: ${validThemes.join(', ')}`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
18
37
|
// Check if directory already exists
|
|
19
38
|
const projectPath = path.resolve(process.cwd(), projectName);
|
|
20
39
|
if (existsSync(projectPath)) {
|
|
@@ -25,10 +44,18 @@ export async function initCommand(projectName, options) {
|
|
|
25
44
|
const packagePath = join(__dirname, '..', '..', 'package.json');
|
|
26
45
|
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
27
46
|
const cliVersion = packageJson.version;
|
|
47
|
+
// Convert options to CliOptions format
|
|
48
|
+
const cliOptions = {
|
|
49
|
+
dataLayer: options.dataLayer,
|
|
50
|
+
theme: options.theme,
|
|
51
|
+
interactive: options.interactive,
|
|
52
|
+
couchdbUrl: options.couchdbUrl,
|
|
53
|
+
courseId: options.courseId,
|
|
54
|
+
};
|
|
28
55
|
// Gather project configuration
|
|
29
|
-
const config = await gatherProjectConfig(projectName,
|
|
56
|
+
const config = await gatherProjectConfig(projectName, cliOptions);
|
|
30
57
|
// Confirm project creation (only in interactive mode)
|
|
31
|
-
if (
|
|
58
|
+
if (cliOptions.interactive) {
|
|
32
59
|
const confirmed = await confirmProjectCreation(config, projectPath);
|
|
33
60
|
if (!confirmed) {
|
|
34
61
|
console.log(chalk.yellow('Project creation cancelled.'));
|
|
@@ -38,9 +65,41 @@ export async function initCommand(projectName, options) {
|
|
|
38
65
|
console.log(chalk.cyan(`\nš ļø Creating project "${projectName}"...\n`));
|
|
39
66
|
// Process template and create project
|
|
40
67
|
await processTemplate(projectPath, config, cliVersion);
|
|
68
|
+
// Import course data if requested for static data layer
|
|
69
|
+
if (config.dataLayerType === 'static' && config.importCourseData && config.importCourseIds && config.importCourseIds.length > 0) {
|
|
70
|
+
console.log(chalk.cyan('\nš¦ Importing course data...\n'));
|
|
71
|
+
try {
|
|
72
|
+
await packCourses({
|
|
73
|
+
server: config.importServerUrl,
|
|
74
|
+
username: config.importUsername,
|
|
75
|
+
password: config.importPassword,
|
|
76
|
+
courseIds: config.importCourseIds,
|
|
77
|
+
targetProjectDir: projectPath
|
|
78
|
+
});
|
|
79
|
+
console.log(chalk.green('ā
Course data imported successfully!'));
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error(chalk.red('\nā Failed to import course data:'));
|
|
83
|
+
let errorMessage = 'Unknown error';
|
|
84
|
+
if (error instanceof Error) {
|
|
85
|
+
errorMessage = error.message;
|
|
86
|
+
}
|
|
87
|
+
else if (typeof error === 'string') {
|
|
88
|
+
errorMessage = error;
|
|
89
|
+
}
|
|
90
|
+
else if (error && typeof error === 'object' && 'message' in error) {
|
|
91
|
+
errorMessage = String(error.message);
|
|
92
|
+
}
|
|
93
|
+
console.error(chalk.red(errorMessage));
|
|
94
|
+
console.log(chalk.yellow('\nā ļø Project created successfully, but without course data.'));
|
|
95
|
+
console.log(chalk.yellow('You can import course data later using the pack command.'));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
41
98
|
// Success message
|
|
42
99
|
console.log(chalk.green('\nš Project created successfully!\n'));
|
|
43
|
-
|
|
100
|
+
// Show theme preview
|
|
101
|
+
displayThemePreview(config.theme.name);
|
|
102
|
+
console.log(chalk.cyan('\nNext steps:'));
|
|
44
103
|
console.log(` ${chalk.white('cd')} ${projectName}`);
|
|
45
104
|
console.log(` ${chalk.white('npm install')}`);
|
|
46
105
|
console.log(` ${chalk.white('npm run dev')}`);
|
|
@@ -52,12 +111,28 @@ export async function initCommand(projectName, options) {
|
|
|
52
111
|
}
|
|
53
112
|
}
|
|
54
113
|
else {
|
|
55
|
-
|
|
114
|
+
if (config.importCourseIds && config.importCourseIds.length > 0) {
|
|
115
|
+
console.log(chalk.yellow(`š Note: This project uses static data with ${config.importCourseIds.length} imported course(s).`));
|
|
116
|
+
console.log(chalk.yellow(`š Course data is available in the public/static-courses/ directory.`));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.log(chalk.yellow('š Note: This project uses static data. No course data has been imported.'));
|
|
120
|
+
}
|
|
56
121
|
}
|
|
57
122
|
}
|
|
58
123
|
catch (error) {
|
|
59
124
|
console.error(chalk.red('\nā Failed to create project:'));
|
|
60
|
-
|
|
125
|
+
let errorMessage = 'Unknown error';
|
|
126
|
+
if (error instanceof Error) {
|
|
127
|
+
errorMessage = error.message;
|
|
128
|
+
}
|
|
129
|
+
else if (typeof error === 'string') {
|
|
130
|
+
errorMessage = error;
|
|
131
|
+
}
|
|
132
|
+
else if (error && typeof error === 'object' && 'message' in error) {
|
|
133
|
+
errorMessage = String(error.message);
|
|
134
|
+
}
|
|
135
|
+
console.error(chalk.red(errorMessage));
|
|
61
136
|
process.exit(1);
|
|
62
137
|
}
|
|
63
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import PouchDB from 'pouchdb';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { CouchDBToStaticPacker } from '@vue-skuilder/db/packer';
|
|
7
|
+
export function createPackCommand() {
|
|
8
|
+
return new Command('pack')
|
|
9
|
+
.description('Pack a CouchDB course into static files')
|
|
10
|
+
.argument('<courseId>', 'Course ID to pack')
|
|
11
|
+
.option('-s, --server <url>', 'CouchDB server URL', 'http://localhost:5984')
|
|
12
|
+
.option('-u, --username <username>', 'CouchDB username')
|
|
13
|
+
.option('-p, --password <password>', 'CouchDB password')
|
|
14
|
+
.option('-o, --output <dir>', 'Output directory', './static-courses')
|
|
15
|
+
.option('-c, --chunk-size <size>', 'Documents per chunk', '1000')
|
|
16
|
+
.option('--no-attachments', 'Exclude attachments')
|
|
17
|
+
.action(packCourse);
|
|
18
|
+
}
|
|
19
|
+
async function packCourse(courseId, options) {
|
|
20
|
+
try {
|
|
21
|
+
console.log(chalk.cyan(`š§ Packing course: ${courseId}`));
|
|
22
|
+
// Validate courseId
|
|
23
|
+
if (!courseId || courseId.trim() === '') {
|
|
24
|
+
throw new Error('Course ID is required');
|
|
25
|
+
}
|
|
26
|
+
// Connect to CouchDB
|
|
27
|
+
const dbUrl = `${options.server}/coursedb-${courseId}`;
|
|
28
|
+
const dbOptions = {};
|
|
29
|
+
if (options.username && options.password) {
|
|
30
|
+
dbOptions.auth = {
|
|
31
|
+
username: options.username,
|
|
32
|
+
password: options.password,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
console.log(chalk.gray(`š” Connecting to: ${dbUrl}`));
|
|
36
|
+
const sourceDB = new PouchDB(dbUrl, dbOptions);
|
|
37
|
+
// Test connection
|
|
38
|
+
try {
|
|
39
|
+
await sourceDB.info();
|
|
40
|
+
console.log(chalk.green('ā
Connected to database'));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
let errorMessage = 'Unknown error';
|
|
44
|
+
if (error instanceof Error) {
|
|
45
|
+
errorMessage = error.message;
|
|
46
|
+
}
|
|
47
|
+
else if (typeof error === 'string') {
|
|
48
|
+
errorMessage = error;
|
|
49
|
+
}
|
|
50
|
+
else if (error && typeof error === 'object' && 'message' in error) {
|
|
51
|
+
errorMessage = String(error.message);
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`Failed to connect to database: ${errorMessage}`);
|
|
54
|
+
}
|
|
55
|
+
// Configure packer (data transformation only)
|
|
56
|
+
const packerConfig = {
|
|
57
|
+
chunkSize: parseInt(options.chunkSize),
|
|
58
|
+
includeAttachments: !options.noAttachments,
|
|
59
|
+
};
|
|
60
|
+
console.log(chalk.gray(`š¦ Chunk size: ${packerConfig.chunkSize} documents`));
|
|
61
|
+
console.log(chalk.gray(`š Include attachments: ${packerConfig.includeAttachments}`));
|
|
62
|
+
// Pack the course (data transformation)
|
|
63
|
+
console.log(chalk.cyan('š Processing course data...'));
|
|
64
|
+
const packer = new CouchDBToStaticPacker(packerConfig);
|
|
65
|
+
const packedData = await packer.packCourse(sourceDB, courseId);
|
|
66
|
+
// Create output directory
|
|
67
|
+
const outputDir = path.resolve(options.output, courseId);
|
|
68
|
+
await fs.ensureDir(outputDir);
|
|
69
|
+
console.log(chalk.gray(`š Output directory: ${outputDir}`));
|
|
70
|
+
// Write files
|
|
71
|
+
await writePackedData(packedData, outputDir);
|
|
72
|
+
// Success summary
|
|
73
|
+
console.log(chalk.green('\nā
Successfully packed course!'));
|
|
74
|
+
console.log(chalk.white(`š Course: ${packedData.manifest.courseName}`));
|
|
75
|
+
console.log(chalk.white(`š Documents: ${packedData.manifest.documentCount}`));
|
|
76
|
+
console.log(chalk.white(`šļø Chunks: ${packedData.manifest.chunks.length}`));
|
|
77
|
+
console.log(chalk.white(`šļø Indices: ${packedData.manifest.indices.length}`));
|
|
78
|
+
if (packedData.attachments && packedData.attachments.size > 0) {
|
|
79
|
+
console.log(chalk.white(`š Attachments: ${packedData.attachments.size}`));
|
|
80
|
+
}
|
|
81
|
+
console.log(chalk.white(`š Location: ${outputDir}`));
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error(chalk.red('\nā Packing failed:'));
|
|
85
|
+
let errorMessage = 'Unknown error';
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
errorMessage = error.message;
|
|
88
|
+
}
|
|
89
|
+
else if (typeof error === 'string') {
|
|
90
|
+
errorMessage = error;
|
|
91
|
+
}
|
|
92
|
+
else if (error && typeof error === 'object' && 'message' in error) {
|
|
93
|
+
errorMessage = String(error.message);
|
|
94
|
+
}
|
|
95
|
+
console.error(chalk.red(errorMessage));
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function writePackedData(packedData, outputDir) {
|
|
100
|
+
console.log(chalk.cyan('š¾ Writing files...'));
|
|
101
|
+
// Write manifest
|
|
102
|
+
const manifestPath = path.join(outputDir, 'manifest.json');
|
|
103
|
+
await fs.writeJson(manifestPath, packedData.manifest, { spaces: 2 });
|
|
104
|
+
console.log(chalk.gray(`š Wrote manifest: ${manifestPath}`));
|
|
105
|
+
// Create directories
|
|
106
|
+
const chunksDir = path.join(outputDir, 'chunks');
|
|
107
|
+
const indicesDir = path.join(outputDir, 'indices');
|
|
108
|
+
await fs.ensureDir(chunksDir);
|
|
109
|
+
await fs.ensureDir(indicesDir);
|
|
110
|
+
// Write chunks
|
|
111
|
+
let chunkCount = 0;
|
|
112
|
+
for (const [chunkId, chunkData] of packedData.chunks) {
|
|
113
|
+
const chunkPath = path.join(chunksDir, `${chunkId}.json`);
|
|
114
|
+
await fs.writeJson(chunkPath, chunkData);
|
|
115
|
+
chunkCount++;
|
|
116
|
+
}
|
|
117
|
+
console.log(chalk.gray(`š¦ Wrote ${chunkCount} chunks`));
|
|
118
|
+
// Write indices
|
|
119
|
+
let indexCount = 0;
|
|
120
|
+
for (const [indexName, indexData] of packedData.indices) {
|
|
121
|
+
const indexPath = path.join(indicesDir, `${indexName}.json`);
|
|
122
|
+
await fs.writeJson(indexPath, indexData, { spaces: 2 });
|
|
123
|
+
indexCount++;
|
|
124
|
+
}
|
|
125
|
+
console.log(chalk.gray(`šļø Wrote ${indexCount} indices`));
|
|
126
|
+
// Write attachments
|
|
127
|
+
if (packedData.attachments && packedData.attachments.size > 0) {
|
|
128
|
+
console.log(chalk.cyan('š Writing attachments...'));
|
|
129
|
+
let attachmentCount = 0;
|
|
130
|
+
for (const [attachmentPath, attachmentData] of packedData.attachments) {
|
|
131
|
+
const fullAttachmentPath = path.join(outputDir, attachmentPath);
|
|
132
|
+
// Ensure directory exists
|
|
133
|
+
await fs.ensureDir(path.dirname(fullAttachmentPath));
|
|
134
|
+
// Write binary file
|
|
135
|
+
await fs.writeFile(fullAttachmentPath, attachmentData.buffer);
|
|
136
|
+
attachmentCount++;
|
|
137
|
+
}
|
|
138
|
+
console.log(chalk.gray(`š Wrote ${attachmentCount} attachment files`));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,15 +12,42 @@ export interface ProjectConfig {
|
|
|
12
12
|
course?: string;
|
|
13
13
|
couchdbUrl?: string;
|
|
14
14
|
theme: ThemeConfig;
|
|
15
|
+
importCourseData?: boolean;
|
|
16
|
+
importServerUrl?: string;
|
|
17
|
+
importUsername?: string;
|
|
18
|
+
importPassword?: string;
|
|
19
|
+
importCourseIds?: string[];
|
|
15
20
|
}
|
|
16
|
-
export interface
|
|
17
|
-
|
|
21
|
+
export interface VuetifyThemeDefinition {
|
|
22
|
+
dark: boolean;
|
|
18
23
|
colors: {
|
|
19
24
|
primary: string;
|
|
20
25
|
secondary: string;
|
|
21
26
|
accent: string;
|
|
27
|
+
error: string;
|
|
28
|
+
info: string;
|
|
29
|
+
success: string;
|
|
30
|
+
warning: string;
|
|
31
|
+
background: string;
|
|
32
|
+
surface: string;
|
|
33
|
+
'surface-bright': string;
|
|
34
|
+
'surface-light': string;
|
|
35
|
+
'surface-variant': string;
|
|
36
|
+
'on-surface-variant': string;
|
|
37
|
+
'primary-darken-1': string;
|
|
38
|
+
'secondary-darken-1': string;
|
|
39
|
+
'on-primary': string;
|
|
40
|
+
'on-secondary': string;
|
|
41
|
+
'on-background': string;
|
|
42
|
+
'on-surface': string;
|
|
22
43
|
};
|
|
23
44
|
}
|
|
45
|
+
export interface ThemeConfig {
|
|
46
|
+
name: string;
|
|
47
|
+
light: VuetifyThemeDefinition;
|
|
48
|
+
dark: VuetifyThemeDefinition;
|
|
49
|
+
defaultMode: 'light' | 'dark';
|
|
50
|
+
}
|
|
24
51
|
export interface SkuilderConfig {
|
|
25
52
|
title: string;
|
|
26
53
|
course?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IAEnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QAEN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAGhB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,oBAAoB,EAAE,MAAM,CAAC;QAG7B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,oBAAoB,EAAE,MAAM,CAAC;QAG7B,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,sBAAsB,CAAC;IAC9B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiNzD,CAAC"}
|