@vue-skuilder/cli 0.1.7 ā 0.1.8-1
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/README.md +122 -8
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +34 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pack.d.ts +10 -0
- package/dist/commands/pack.d.ts.map +1 -1
- package/dist/commands/pack.js +1 -1
- package/dist/commands/pack.js.map +1 -1
- package/dist/commands/studio.d.ts.map +1 -1
- package/dist/commands/studio.js +641 -106
- package/dist/commands/studio.js.map +1 -1
- package/dist/commands/unpack.d.ts +12 -0
- package/dist/commands/unpack.d.ts.map +1 -1
- package/dist/commands/unpack.js +1 -1
- package/dist/commands/unpack.js.map +1 -1
- package/dist/express-assets/app.d.ts +6 -0
- package/dist/express-assets/app.d.ts.map +1 -0
- package/dist/express-assets/app.js +209 -0
- package/dist/express-assets/app.js.map +1 -0
- package/dist/express-assets/assets/classroomDesignDoc.js +24 -0
- package/dist/express-assets/assets/courseValidateDocUpdate.js +56 -0
- package/dist/express-assets/assets/get-tagsDesignDoc.json +9 -0
- package/dist/express-assets/attachment-preprocessing/index.d.ts +11 -0
- package/dist/express-assets/attachment-preprocessing/index.d.ts.map +1 -0
- package/dist/express-assets/attachment-preprocessing/index.js +204 -0
- package/dist/express-assets/attachment-preprocessing/index.js.map +1 -0
- package/dist/express-assets/attachment-preprocessing/normalize.d.ts +7 -0
- package/dist/express-assets/attachment-preprocessing/normalize.d.ts.map +1 -0
- package/dist/express-assets/attachment-preprocessing/normalize.js +90 -0
- package/dist/express-assets/attachment-preprocessing/normalize.js.map +1 -0
- package/dist/express-assets/client-requests/classroom-requests.d.ts +26 -0
- package/dist/express-assets/client-requests/classroom-requests.d.ts.map +1 -0
- package/dist/express-assets/client-requests/classroom-requests.js +171 -0
- package/dist/express-assets/client-requests/classroom-requests.js.map +1 -0
- package/dist/express-assets/client-requests/course-requests.d.ts +10 -0
- package/dist/express-assets/client-requests/course-requests.d.ts.map +1 -0
- package/dist/express-assets/client-requests/course-requests.js +135 -0
- package/dist/express-assets/client-requests/course-requests.js.map +1 -0
- package/dist/express-assets/client-requests/pack-requests.d.ts +19 -0
- package/dist/express-assets/client-requests/pack-requests.d.ts.map +1 -0
- package/dist/express-assets/client-requests/pack-requests.js +130 -0
- package/dist/express-assets/client-requests/pack-requests.js.map +1 -0
- package/dist/express-assets/client.d.ts +31 -0
- package/dist/express-assets/client.d.ts.map +1 -0
- package/dist/express-assets/client.js +70 -0
- package/dist/express-assets/client.js.map +1 -0
- package/dist/express-assets/couchdb/authentication.d.ts +4 -0
- package/dist/express-assets/couchdb/authentication.d.ts.map +1 -0
- package/dist/express-assets/couchdb/authentication.js +69 -0
- package/dist/express-assets/couchdb/authentication.js.map +1 -0
- package/dist/express-assets/couchdb/index.d.ts +18 -0
- package/dist/express-assets/couchdb/index.d.ts.map +1 -0
- package/dist/express-assets/couchdb/index.js +52 -0
- package/dist/express-assets/couchdb/index.js.map +1 -0
- package/dist/express-assets/design-docs.d.ts +63 -0
- package/dist/express-assets/design-docs.d.ts.map +1 -0
- package/dist/express-assets/design-docs.js +90 -0
- package/dist/express-assets/design-docs.js.map +1 -0
- package/dist/express-assets/logger.d.ts +3 -0
- package/dist/express-assets/logger.d.ts.map +1 -0
- package/dist/express-assets/logger.js +62 -0
- package/dist/express-assets/logger.js.map +1 -0
- package/dist/express-assets/routes/logs.d.ts +3 -0
- package/dist/express-assets/routes/logs.d.ts.map +1 -0
- package/dist/express-assets/routes/logs.js +274 -0
- package/dist/express-assets/routes/logs.js.map +1 -0
- package/dist/express-assets/utils/env.d.ts +11 -0
- package/dist/express-assets/utils/env.d.ts.map +1 -0
- package/dist/express-assets/utils/env.js +39 -0
- package/dist/express-assets/utils/env.js.map +1 -0
- package/dist/express-assets/utils/processQueue.d.ts +39 -0
- package/dist/express-assets/utils/processQueue.d.ts.map +1 -0
- package/dist/express-assets/utils/processQueue.js +175 -0
- package/dist/express-assets/utils/processQueue.js.map +1 -0
- package/dist/studio-ui-src/App.vue +132 -0
- package/dist/studio-ui-src/api/index.ts +30 -0
- package/dist/studio-ui-src/components/StudioFlush.vue +108 -0
- package/dist/studio-ui-src/config/development.ts +98 -0
- package/dist/studio-ui-src/index.html +13 -0
- package/dist/studio-ui-src/main.ts +186 -0
- package/dist/studio-ui-src/package.json +35 -0
- package/dist/studio-ui-src/router/index.ts +32 -0
- package/dist/studio-ui-src/stores/useAuthStore.ts +3 -0
- package/dist/studio-ui-src/tsconfig.json +28 -0
- package/dist/studio-ui-src/utils/courseConfigRegistration.ts +297 -0
- package/dist/studio-ui-src/views/BrowseView.vue +82 -0
- package/dist/studio-ui-src/views/BulkImportView.vue +89 -0
- package/dist/studio-ui-src/views/CourseEditorView.vue +62 -0
- package/dist/studio-ui-src/views/CreateCardView.vue +144 -0
- package/dist/studio-ui-src/vite.config.base.js +103 -0
- package/dist/studio-ui-src/vite.config.ts +26 -0
- package/dist/templates/.skuilder/README.md +29 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/ExpressManager.d.ts +28 -0
- package/dist/utils/ExpressManager.d.ts.map +1 -0
- package/dist/utils/ExpressManager.js +166 -0
- package/dist/utils/ExpressManager.js.map +1 -0
- package/dist/utils/NodeFileSystemAdapter.d.ts +6 -0
- package/dist/utils/NodeFileSystemAdapter.d.ts.map +1 -1
- package/dist/utils/NodeFileSystemAdapter.js +29 -1
- package/dist/utils/NodeFileSystemAdapter.js.map +1 -1
- package/dist/utils/error-reporting.d.ts +54 -0
- package/dist/utils/error-reporting.d.ts.map +1 -0
- package/dist/utils/error-reporting.js +143 -0
- package/dist/utils/error-reporting.js.map +1 -0
- package/dist/utils/pack-courses.d.ts.map +1 -1
- package/dist/utils/pack-courses.js +10 -27
- package/dist/utils/pack-courses.js.map +1 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +24 -0
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/questions-hash.d.ts +22 -0
- package/dist/utils/questions-hash.d.ts.map +1 -0
- package/dist/utils/questions-hash.js +96 -0
- package/dist/utils/questions-hash.js.map +1 -0
- package/dist/utils/template.d.ts +1 -1
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +209 -27
- package/dist/utils/template.js.map +1 -1
- package/eslint.config.mjs +1 -1
- package/package.json +30 -11
- package/src/cli.ts +3 -1
- package/src/commands/init.ts +48 -3
- package/src/commands/pack.ts +1 -1
- package/src/commands/studio.ts +851 -122
- package/src/commands/unpack.ts +1 -1
- package/src/types.ts +5 -0
- package/src/utils/ExpressManager.ts +210 -0
- package/src/utils/NodeFileSystemAdapter.ts +46 -2
- package/src/utils/error-reporting.ts +192 -0
- package/src/utils/pack-courses.ts +11 -36
- package/src/utils/prompts.ts +34 -0
- package/src/utils/questions-hash.ts +109 -0
- package/src/utils/template.ts +243 -29
- package/templates/.skuilder/README.md +29 -0
- package/dist/studio-ui-assets/assets/BrowseView-BJbixGOU.js +0 -2
- package/dist/studio-ui-assets/assets/BrowseView-BJbixGOU.js.map +0 -1
- package/dist/studio-ui-assets/assets/BrowseView-CM4HBO4j.css +0 -1
- package/dist/studio-ui-assets/assets/BulkImportView-DB6DYDJU.js +0 -2
- package/dist/studio-ui-assets/assets/BulkImportView-DB6DYDJU.js.map +0 -1
- package/dist/studio-ui-assets/assets/BulkImportView-g4wQUfPA.css +0 -1
- package/dist/studio-ui-assets/assets/CourseEditorView-BIlhlhw1.js +0 -2
- package/dist/studio-ui-assets/assets/CourseEditorView-BIlhlhw1.js.map +0 -1
- package/dist/studio-ui-assets/assets/CourseEditorView-WuPNLVKp.css +0 -1
- package/dist/studio-ui-assets/assets/CreateCardView-CyNOKCkm.css +0 -1
- package/dist/studio-ui-assets/assets/CreateCardView-DPjPvzzt.js +0 -2
- package/dist/studio-ui-assets/assets/CreateCardView-DPjPvzzt.js.map +0 -1
- package/dist/studio-ui-assets/assets/edit-ui.es-DiUxqbgF.js +0 -330
- package/dist/studio-ui-assets/assets/edit-ui.es-DiUxqbgF.js.map +0 -1
- package/dist/studio-ui-assets/assets/index--zY88pg6.css +0 -14
- package/dist/studio-ui-assets/assets/index-BnAv1C72.js +0 -287
- package/dist/studio-ui-assets/assets/index-BnAv1C72.js.map +0 -1
- package/dist/studio-ui-assets/assets/index-DHMXQY3-.js +0 -192
- package/dist/studio-ui-assets/assets/index-DHMXQY3-.js.map +0 -1
- package/dist/studio-ui-assets/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
- package/dist/studio-ui-assets/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
- package/dist/studio-ui-assets/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
- package/dist/studio-ui-assets/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
- package/dist/studio-ui-assets/assets/vue-DZcMATiC.js +0 -28
- package/dist/studio-ui-assets/assets/vue-DZcMATiC.js.map +0 -1
- package/dist/studio-ui-assets/assets/vuetify-qg7mRxy_.js +0 -6
- package/dist/studio-ui-assets/assets/vuetify-qg7mRxy_.js.map +0 -1
- package/dist/studio-ui-assets/index.html +0 -16
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { createRequire } from 'module';
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
export class ExpressManager {
|
|
10
|
+
process = null;
|
|
11
|
+
options;
|
|
12
|
+
callbacks;
|
|
13
|
+
constructor(options, callbacks = {}) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
this.callbacks = callbacks;
|
|
16
|
+
}
|
|
17
|
+
async start() {
|
|
18
|
+
if (this.process) {
|
|
19
|
+
throw new Error('Express server is already running');
|
|
20
|
+
}
|
|
21
|
+
const expressAssetsPath = join(__dirname, '..', 'express-assets');
|
|
22
|
+
if (!fs.existsSync(expressAssetsPath)) {
|
|
23
|
+
throw new Error('Express assets not found. Please rebuild the CLI package.');
|
|
24
|
+
}
|
|
25
|
+
const expressMainPath = join(expressAssetsPath, 'app.js');
|
|
26
|
+
if (!fs.existsSync(expressMainPath)) {
|
|
27
|
+
throw new Error('Express main file not found at: ' + expressMainPath);
|
|
28
|
+
}
|
|
29
|
+
// Find available port starting from requested port
|
|
30
|
+
const availablePort = await this.findAvailablePort(this.options.port);
|
|
31
|
+
// Get version from package.json
|
|
32
|
+
let version = '0.0.0';
|
|
33
|
+
try {
|
|
34
|
+
const packageJsonPath = join(__dirname, '..', '..', 'package.json');
|
|
35
|
+
const packageJson = require(packageJsonPath);
|
|
36
|
+
version = packageJson.version || '0.0.0';
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.warn('Could not read package.json for version:', error);
|
|
40
|
+
// Fallback version if package.json not found
|
|
41
|
+
version = '0.0.0';
|
|
42
|
+
}
|
|
43
|
+
// Set environment variables for express
|
|
44
|
+
const env = {
|
|
45
|
+
...process.env,
|
|
46
|
+
PORT: availablePort.toString(),
|
|
47
|
+
COUCHDB_SERVER: this.extractServerFromUrl(this.options.couchdbUrl),
|
|
48
|
+
COUCHDB_PROTOCOL: this.extractProtocolFromUrl(this.options.couchdbUrl),
|
|
49
|
+
COUCHDB_ADMIN: this.options.couchdbUsername,
|
|
50
|
+
COUCHDB_PASSWORD: this.options.couchdbPassword,
|
|
51
|
+
VERSION: version,
|
|
52
|
+
NODE_ENV: 'studio',
|
|
53
|
+
PROJECT_PATH: this.options.projectPath || process.cwd(),
|
|
54
|
+
};
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
this.process = spawn('node', [expressMainPath], {
|
|
57
|
+
env,
|
|
58
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
59
|
+
cwd: expressAssetsPath,
|
|
60
|
+
});
|
|
61
|
+
if (!this.process) {
|
|
62
|
+
reject(new Error('Failed to start Express process'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
let started = false;
|
|
66
|
+
// Handle stdout
|
|
67
|
+
this.process.stdout?.on('data', (data) => {
|
|
68
|
+
const message = data.toString().trim();
|
|
69
|
+
if (message.includes('listening on port') && !started) {
|
|
70
|
+
started = true;
|
|
71
|
+
this.options.port = availablePort; // Update with actual port
|
|
72
|
+
resolve();
|
|
73
|
+
}
|
|
74
|
+
this.callbacks.onLog?.(message);
|
|
75
|
+
});
|
|
76
|
+
// Handle stderr
|
|
77
|
+
this.process.stderr?.on('data', (data) => {
|
|
78
|
+
const error = data.toString().trim();
|
|
79
|
+
this.callbacks.onError?.(error);
|
|
80
|
+
});
|
|
81
|
+
// Handle process exit
|
|
82
|
+
this.process.on('exit', (code) => {
|
|
83
|
+
this.process = null;
|
|
84
|
+
if (code !== 0 && code !== null) {
|
|
85
|
+
this.callbacks.onError?.(`Express process exited with code ${code}`);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Handle process errors
|
|
89
|
+
this.process.on('error', (error) => {
|
|
90
|
+
this.process = null;
|
|
91
|
+
if (!started) {
|
|
92
|
+
reject(error);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.callbacks.onError?.(`Express process error: ${error.message}`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// Timeout if server doesn't start within 10 seconds
|
|
99
|
+
setTimeout(() => {
|
|
100
|
+
if (!started) {
|
|
101
|
+
void this.stop();
|
|
102
|
+
reject(new Error('Express server failed to start within timeout'));
|
|
103
|
+
}
|
|
104
|
+
}, 10000);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
async stop() {
|
|
108
|
+
if (!this.process) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
return new Promise((resolve) => {
|
|
112
|
+
if (!this.process) {
|
|
113
|
+
resolve();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
this.process.on('exit', () => {
|
|
117
|
+
this.process = null;
|
|
118
|
+
resolve();
|
|
119
|
+
});
|
|
120
|
+
// Try graceful shutdown first
|
|
121
|
+
this.process.kill('SIGTERM');
|
|
122
|
+
// Force kill after 5 seconds if still running
|
|
123
|
+
setTimeout(() => {
|
|
124
|
+
if (this.process) {
|
|
125
|
+
this.process.kill('SIGKILL');
|
|
126
|
+
this.process = null;
|
|
127
|
+
resolve();
|
|
128
|
+
}
|
|
129
|
+
}, 5000);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
getConnectionDetails() {
|
|
133
|
+
return {
|
|
134
|
+
url: `http://localhost:${this.options.port}`,
|
|
135
|
+
port: this.options.port,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
async findAvailablePort(startPort) {
|
|
139
|
+
const net = await import('net');
|
|
140
|
+
for (let port = startPort; port < startPort + 100; port++) {
|
|
141
|
+
if (await this.isPortAvailable(port, net)) {
|
|
142
|
+
return port;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
throw new Error(`No available port found starting from ${startPort}`);
|
|
146
|
+
}
|
|
147
|
+
isPortAvailable(port, net) {
|
|
148
|
+
return new Promise((resolve) => {
|
|
149
|
+
const server = net.createServer();
|
|
150
|
+
server.listen(port, '127.0.0.1', () => {
|
|
151
|
+
server.close(() => resolve(true));
|
|
152
|
+
});
|
|
153
|
+
server.on('error', () => resolve(false));
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
extractServerFromUrl(url) {
|
|
157
|
+
// Extract hostname:port from URL like "http://localhost:5984"
|
|
158
|
+
const match = url.match(/https?:\/\/([^/]+)/);
|
|
159
|
+
return match ? match[1] : 'localhost:5984';
|
|
160
|
+
}
|
|
161
|
+
extractProtocolFromUrl(url) {
|
|
162
|
+
// Extract protocol from URL like "http://localhost:5984"
|
|
163
|
+
return url.startsWith('https') ? 'https' : 'http';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=ExpressManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpressManager.js","sourceRoot":"","sources":["../../src/utils/ExpressManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAetC,MAAM,OAAO,cAAc;IACjB,OAAO,GAAwB,IAAI,CAAC;IAC3B,OAAO,CAAwB;IAC/B,SAAS,CAA0B;IAEpD,YAAY,OAA8B,EAAE,YAAqC,EAAE;QACjF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAElE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAE1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,eAAe,CAAC,CAAC;QACxE,CAAC;QAED,mDAAmD;QACnD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEtE,gCAAgC;QAChC,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YAC7C,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YAChE,6CAA6C;YAC7C,OAAO,GAAG,OAAO,CAAC;QACpB,CAAC;QAED,wCAAwC;QACxC,MAAM,GAAG,GAAG;YACV,GAAG,OAAO,CAAC,GAAG;YACd,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE;YAC9B,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAClE,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACtE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC3C,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC9C,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE;SACxD,CAAC;QAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE;gBAC9C,GAAG;gBACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE,iBAAiB;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,gBAAgB;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACtD,OAAO,GAAG,IAAI,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,0BAA0B;oBAC7D,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,gBAAgB;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAChC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,wBAAwB;YACxB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,oDAAoD;YACpD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,8BAA8B;YAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE7B,8CAA8C;YAC9C,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;QAClB,OAAO;YACL,GAAG,EAAE,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;SACxB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhC,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1D,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAEO,eAAe,CAAC,IAAY,EAAE,GAAyB;QAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAElC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACtC,8DAA8D;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC7C,CAAC;IAEO,sBAAsB,CAAC,GAAW;QACxC,yDAAyD;QACzD,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -8,7 +8,13 @@ export declare class NodeFileSystemAdapter implements FileSystemAdapter {
|
|
|
8
8
|
readBinary(filePath: string): Promise<Buffer>;
|
|
9
9
|
exists(filePath: string): Promise<boolean>;
|
|
10
10
|
stat(filePath: string): Promise<FileStats>;
|
|
11
|
+
writeFile(filePath: string, data: string | Buffer): Promise<void>;
|
|
12
|
+
writeJson(filePath: string, data: unknown, options?: {
|
|
13
|
+
spaces?: number;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
ensureDir(dirPath: string): Promise<void>;
|
|
11
16
|
joinPath(...segments: string[]): string;
|
|
17
|
+
dirname(filePath: string): string;
|
|
12
18
|
isAbsolute(filePath: string): boolean;
|
|
13
19
|
}
|
|
14
20
|
//# sourceMappingURL=NodeFileSystemAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeFileSystemAdapter.d.ts","sourceRoot":"","sources":["../../src/utils/NodeFileSystemAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeFileSystemAdapter.d.ts","sourceRoot":"","sources":["../../src/utils/NodeFileSystemAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAEjF;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa7C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAkB1C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxF,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAIvC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGtC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// packages/cli/src/utils/NodeFileSystemAdapter.ts
|
|
2
2
|
import fs from 'fs';
|
|
3
|
+
import fse from 'fs-extra';
|
|
3
4
|
import path from 'path';
|
|
4
5
|
import { FileSystemError } from '@vue-skuilder/db';
|
|
5
6
|
/**
|
|
@@ -38,16 +39,43 @@ export class NodeFileSystemAdapter {
|
|
|
38
39
|
return {
|
|
39
40
|
isDirectory: () => stats.isDirectory(),
|
|
40
41
|
isFile: () => stats.isFile(),
|
|
41
|
-
size: stats.size
|
|
42
|
+
size: stats.size,
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
45
|
catch (error) {
|
|
45
46
|
throw new FileSystemError(`Failed to stat file: ${error instanceof Error ? error.message : String(error)}`, 'stat', filePath, error instanceof Error ? error : undefined);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
async writeFile(filePath, data) {
|
|
50
|
+
try {
|
|
51
|
+
await fse.writeFile(filePath, data);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw new FileSystemError(`Failed to write file: ${error instanceof Error ? error.message : String(error)}`, 'writeFile', filePath, error instanceof Error ? error : undefined);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async writeJson(filePath, data, options) {
|
|
58
|
+
try {
|
|
59
|
+
await fse.writeJson(filePath, data, options);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
throw new FileSystemError(`Failed to write JSON file: ${error instanceof Error ? error.message : String(error)}`, 'writeJson', filePath, error instanceof Error ? error : undefined);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async ensureDir(dirPath) {
|
|
66
|
+
try {
|
|
67
|
+
await fse.ensureDir(dirPath);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
throw new FileSystemError(`Failed to ensure directory: ${error instanceof Error ? error.message : String(error)}`, 'ensureDir', dirPath, error instanceof Error ? error : undefined);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
48
73
|
joinPath(...segments) {
|
|
49
74
|
return path.join(...segments);
|
|
50
75
|
}
|
|
76
|
+
dirname(filePath) {
|
|
77
|
+
return path.dirname(filePath);
|
|
78
|
+
}
|
|
51
79
|
isAbsolute(filePath) {
|
|
52
80
|
return path.isAbsolute(filePath);
|
|
53
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeFileSystemAdapter.js","sourceRoot":"","sources":["../../src/utils/NodeFileSystemAdapter.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAgC,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAChC,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CACvB,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAChF,UAAU,EACV,QAAQ,EACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CACvB,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACvF,YAAY,EACZ,QAAQ,EACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,OAAO;gBACL,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE;gBACtC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CACvB,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAChF,MAAM,EACN,QAAQ,EACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,GAAG,QAAkB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"NodeFileSystemAdapter.js","sourceRoot":"","sources":["../../src/utils/NodeFileSystemAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error categories for studio-ui build failures
|
|
3
|
+
*/
|
|
4
|
+
export declare enum StudioBuildErrorType {
|
|
5
|
+
QUESTIONS_HASH_ERROR = "questions-hash-error",
|
|
6
|
+
BUILD_FAILURE = "build-failure",
|
|
7
|
+
COPY_FAILURE = "copy-failure",
|
|
8
|
+
MISSING_SOURCE = "missing-source",
|
|
9
|
+
MISSING_DEPENDENCIES = "missing-dependencies",
|
|
10
|
+
VITE_BUILD_ERROR = "vite-build-error",
|
|
11
|
+
TYPESCRIPT_ERROR = "typescript-error",
|
|
12
|
+
CRITICAL_ERROR = "critical-error"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Structured error information for studio-ui build failures
|
|
16
|
+
*/
|
|
17
|
+
export interface StudioBuildError {
|
|
18
|
+
type: StudioBuildErrorType;
|
|
19
|
+
message: string;
|
|
20
|
+
cause?: Error;
|
|
21
|
+
context?: Record<string, unknown>;
|
|
22
|
+
recoverable: boolean;
|
|
23
|
+
fallbackAvailable: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a structured studio build error
|
|
27
|
+
*/
|
|
28
|
+
export declare function createStudioBuildError(type: StudioBuildErrorType, message: string, options?: {
|
|
29
|
+
cause?: Error;
|
|
30
|
+
context?: Record<string, unknown>;
|
|
31
|
+
recoverable?: boolean;
|
|
32
|
+
fallbackAvailable?: boolean;
|
|
33
|
+
}): StudioBuildError;
|
|
34
|
+
/**
|
|
35
|
+
* Report a studio build error with appropriate formatting and guidance
|
|
36
|
+
*/
|
|
37
|
+
export declare function reportStudioBuildError(error: StudioBuildError): void;
|
|
38
|
+
/**
|
|
39
|
+
* Wrap a studio build operation with error handling
|
|
40
|
+
*/
|
|
41
|
+
export declare function withStudioBuildErrorHandling<T>(operation: () => Promise<T>, errorType: StudioBuildErrorType, context?: Record<string, unknown>): Promise<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Check if error is a recoverable studio build error
|
|
44
|
+
*/
|
|
45
|
+
export declare function isRecoverableStudioBuildError(error: unknown): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Extract error details for logging
|
|
48
|
+
*/
|
|
49
|
+
export declare function extractErrorDetails(error: unknown): {
|
|
50
|
+
message: string;
|
|
51
|
+
stack?: string;
|
|
52
|
+
code?: string;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=error-reporting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-reporting.d.ts","sourceRoot":"","sources":["../../src/utils/error-reporting.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAC7C,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACxB,GACL,gBAAgB,CASlB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAgCpE;AAiDD;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,CAAC,EAClD,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,oBAAoB,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAYA"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Error categories for studio-ui build failures
|
|
4
|
+
*/
|
|
5
|
+
export var StudioBuildErrorType;
|
|
6
|
+
(function (StudioBuildErrorType) {
|
|
7
|
+
StudioBuildErrorType["QUESTIONS_HASH_ERROR"] = "questions-hash-error";
|
|
8
|
+
StudioBuildErrorType["BUILD_FAILURE"] = "build-failure";
|
|
9
|
+
StudioBuildErrorType["COPY_FAILURE"] = "copy-failure";
|
|
10
|
+
StudioBuildErrorType["MISSING_SOURCE"] = "missing-source";
|
|
11
|
+
StudioBuildErrorType["MISSING_DEPENDENCIES"] = "missing-dependencies";
|
|
12
|
+
StudioBuildErrorType["VITE_BUILD_ERROR"] = "vite-build-error";
|
|
13
|
+
StudioBuildErrorType["TYPESCRIPT_ERROR"] = "typescript-error";
|
|
14
|
+
StudioBuildErrorType["CRITICAL_ERROR"] = "critical-error";
|
|
15
|
+
})(StudioBuildErrorType || (StudioBuildErrorType = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Create a structured studio build error
|
|
18
|
+
*/
|
|
19
|
+
export function createStudioBuildError(type, message, options = {}) {
|
|
20
|
+
return {
|
|
21
|
+
type,
|
|
22
|
+
message,
|
|
23
|
+
cause: options.cause,
|
|
24
|
+
context: options.context,
|
|
25
|
+
recoverable: options.recoverable ?? true,
|
|
26
|
+
fallbackAvailable: options.fallbackAvailable ?? true
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Report a studio build error with appropriate formatting and guidance
|
|
31
|
+
*/
|
|
32
|
+
export function reportStudioBuildError(error) {
|
|
33
|
+
// Main error message
|
|
34
|
+
console.error(chalk.red(`ā Studio-UI Build Error: ${error.message}`));
|
|
35
|
+
// Error type context
|
|
36
|
+
console.error(chalk.gray(` Type: ${error.type}`));
|
|
37
|
+
// Underlying cause if available
|
|
38
|
+
if (error.cause) {
|
|
39
|
+
console.error(chalk.gray(` Cause: ${error.cause.message}`));
|
|
40
|
+
}
|
|
41
|
+
// Context information
|
|
42
|
+
if (error.context) {
|
|
43
|
+
for (const [key, value] of Object.entries(error.context)) {
|
|
44
|
+
console.error(chalk.gray(` ${key}: ${String(value)}`));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Recovery guidance
|
|
48
|
+
if (error.recoverable) {
|
|
49
|
+
if (error.fallbackAvailable) {
|
|
50
|
+
console.log(chalk.yellow(` Fallback: Using default studio-ui (without local questions)`));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(chalk.yellow(` Recovery: Manual intervention required`));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.error(chalk.red(` Critical: Studio session cannot continue`));
|
|
58
|
+
}
|
|
59
|
+
// Type-specific guidance
|
|
60
|
+
provideBuildErrorGuidance(error.type);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Provide specific guidance based on error type
|
|
64
|
+
*/
|
|
65
|
+
function provideBuildErrorGuidance(errorType) {
|
|
66
|
+
switch (errorType) {
|
|
67
|
+
case StudioBuildErrorType.QUESTIONS_HASH_ERROR:
|
|
68
|
+
console.log(chalk.cyan(` š” Check that src/questions/ directory is accessible`));
|
|
69
|
+
console.log(chalk.cyan(` š” Verify file permissions and disk space`));
|
|
70
|
+
break;
|
|
71
|
+
case StudioBuildErrorType.BUILD_FAILURE:
|
|
72
|
+
console.log(chalk.cyan(` š” Check that Vite build dependencies are installed`));
|
|
73
|
+
console.log(chalk.cyan(` š” Verify TypeScript configuration is valid`));
|
|
74
|
+
break;
|
|
75
|
+
case StudioBuildErrorType.COPY_FAILURE:
|
|
76
|
+
console.log(chalk.cyan(` š” Check write permissions for .skuilder/studio-builds/`));
|
|
77
|
+
console.log(chalk.cyan(` š” Verify sufficient disk space available`));
|
|
78
|
+
break;
|
|
79
|
+
case StudioBuildErrorType.MISSING_SOURCE:
|
|
80
|
+
console.log(chalk.cyan(` š” Rebuild CLI package: yarn workspace @vue-skuilder/cli build`));
|
|
81
|
+
console.log(chalk.cyan(` š” Verify studio-ui source was embedded during build`));
|
|
82
|
+
break;
|
|
83
|
+
case StudioBuildErrorType.MISSING_DEPENDENCIES:
|
|
84
|
+
console.log(chalk.cyan(` š” Install dependencies: yarn install`));
|
|
85
|
+
console.log(chalk.cyan(` š” Check that required packages are in package.json`));
|
|
86
|
+
break;
|
|
87
|
+
case StudioBuildErrorType.VITE_BUILD_ERROR:
|
|
88
|
+
console.log(chalk.cyan(` š” Check question type implementations for syntax errors`));
|
|
89
|
+
console.log(chalk.cyan(` š” Verify all imports and dependencies are available`));
|
|
90
|
+
break;
|
|
91
|
+
case StudioBuildErrorType.TYPESCRIPT_ERROR:
|
|
92
|
+
console.log(chalk.cyan(` š” Check TypeScript configuration in tsconfig.json`));
|
|
93
|
+
console.log(chalk.cyan(` š” Verify all question types have proper type definitions`));
|
|
94
|
+
break;
|
|
95
|
+
case StudioBuildErrorType.CRITICAL_ERROR:
|
|
96
|
+
console.log(chalk.cyan(` š” Report this issue to the vue-skuilder team`));
|
|
97
|
+
console.log(chalk.cyan(` š” Include the full error output in your report`));
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Wrap a studio build operation with error handling
|
|
103
|
+
*/
|
|
104
|
+
export async function withStudioBuildErrorHandling(operation, errorType, context) {
|
|
105
|
+
try {
|
|
106
|
+
return await operation();
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const buildError = createStudioBuildError(errorType, error instanceof Error ? error.message : String(error), {
|
|
110
|
+
cause: error instanceof Error ? error : undefined,
|
|
111
|
+
context,
|
|
112
|
+
recoverable: true,
|
|
113
|
+
fallbackAvailable: true
|
|
114
|
+
});
|
|
115
|
+
reportStudioBuildError(buildError);
|
|
116
|
+
throw buildError;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if error is a recoverable studio build error
|
|
121
|
+
*/
|
|
122
|
+
export function isRecoverableStudioBuildError(error) {
|
|
123
|
+
return error instanceof Error &&
|
|
124
|
+
'type' in error &&
|
|
125
|
+
'recoverable' in error &&
|
|
126
|
+
Boolean(error.recoverable);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Extract error details for logging
|
|
130
|
+
*/
|
|
131
|
+
export function extractErrorDetails(error) {
|
|
132
|
+
if (error instanceof Error) {
|
|
133
|
+
return {
|
|
134
|
+
message: error.message,
|
|
135
|
+
stack: error.stack,
|
|
136
|
+
code: 'code' in error ? String(error.code) : undefined
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
message: String(error)
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=error-reporting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-reporting.js","sourceRoot":"","sources":["../../src/utils/error-reporting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-courses.d.ts","sourceRoot":"","sources":["../../src/utils/pack-courses.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pack-courses.d.ts","sourceRoot":"","sources":["../../src/utils/pack-courses.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC5E"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { execFile } from 'child_process';
|
|
2
|
-
import { promisify } from 'util';
|
|
3
1
|
import chalk from 'chalk';
|
|
4
2
|
import path from 'path';
|
|
5
|
-
const execFileAsync = promisify(execFile);
|
|
6
3
|
/**
|
|
7
4
|
* Pack courses using the existing CLI pack command
|
|
8
5
|
* Outputs to targetProjectDir/public/static-courses/
|
|
@@ -12,34 +9,20 @@ export async function packCourses(options) {
|
|
|
12
9
|
// Output directory will be public/static-courses in the target project
|
|
13
10
|
const outputDir = path.join(targetProjectDir, 'public', 'static-courses');
|
|
14
11
|
console.log(chalk.cyan(`\nš¦ Packing ${courseIds.length} course(s) to ${outputDir}...`));
|
|
12
|
+
// Import the pack command function
|
|
13
|
+
const { packCourse } = await import('../commands/pack.js');
|
|
15
14
|
for (const courseId of courseIds) {
|
|
16
|
-
const args = ['pack', courseId, '--server', server, '--output', outputDir];
|
|
17
|
-
if (username) {
|
|
18
|
-
args.push('--username', username);
|
|
19
|
-
}
|
|
20
|
-
if (password) {
|
|
21
|
-
args.push('--password', password);
|
|
22
|
-
}
|
|
23
|
-
const cliPath = path.join(process.cwd(), 'dist', 'cli.js');
|
|
24
|
-
const commandArgs = ['pack', courseId, '--server', server, '--output', outputDir];
|
|
25
|
-
if (username) {
|
|
26
|
-
commandArgs.push('--username', username);
|
|
27
|
-
}
|
|
28
|
-
if (password) {
|
|
29
|
-
commandArgs.push('--password', password);
|
|
30
|
-
}
|
|
31
15
|
try {
|
|
32
16
|
console.log(chalk.gray(`š Packing course: ${courseId}`));
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
17
|
+
// Call the existing pack command directly instead of subprocess
|
|
18
|
+
await packCourse(courseId, {
|
|
19
|
+
server,
|
|
20
|
+
username,
|
|
21
|
+
password,
|
|
22
|
+
output: outputDir,
|
|
23
|
+
chunkSize: '1000',
|
|
24
|
+
noAttachments: false
|
|
36
25
|
});
|
|
37
|
-
if (stdout) {
|
|
38
|
-
console.log(stdout);
|
|
39
|
-
}
|
|
40
|
-
if (stderr) {
|
|
41
|
-
console.error(chalk.yellow(stderr));
|
|
42
|
-
}
|
|
43
26
|
console.log(chalk.green(`ā
Successfully packed course: ${courseId}`));
|
|
44
27
|
}
|
|
45
28
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-courses.js","sourceRoot":"","sources":["../../src/utils/pack-courses.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"pack-courses.js","sourceRoot":"","sources":["../../src/utils/pack-courses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAE5E,uEAAuE;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAE1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,iBAAiB,SAAS,KAAK,CAAC,CAAC,CAAC;IAEzF,mCAAmC;IACnC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAE3D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC,CAAC;YAE1D,gEAAgE;YAChE,MAAM,UAAU,CAAC,QAAQ,EAAE;gBACzB,MAAM;gBACN,QAAQ;gBACR,QAAQ;gBACR,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,MAAM;gBACjB,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,QAAQ,GAAG,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjF,4DAA4D;YAC5D,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAgH3E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA+B3D;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAgH3E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA+B3D;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,CA0RxB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
|
package/dist/utils/prompts.js
CHANGED
|
@@ -345,11 +345,35 @@ export async function gatherProjectConfig(projectName, options) {
|
|
|
345
345
|
couchdbUrl: options.couchdbUrl,
|
|
346
346
|
course: options.courseId,
|
|
347
347
|
theme: PREDEFINED_THEMES[options.theme],
|
|
348
|
+
// Handle import options for static data layer
|
|
349
|
+
importCourseData: options.importCourseData,
|
|
350
|
+
importServerUrl: options.importServerUrl,
|
|
351
|
+
importUsername: options.importUsername,
|
|
352
|
+
importPassword: options.importPassword,
|
|
348
353
|
};
|
|
354
|
+
// Parse comma-separated course IDs if provided
|
|
355
|
+
if (options.importCourseIds) {
|
|
356
|
+
config.importCourseIds = options.importCourseIds
|
|
357
|
+
.split(',')
|
|
358
|
+
.map((id) => id.trim())
|
|
359
|
+
.filter((id) => id.length > 0);
|
|
360
|
+
}
|
|
349
361
|
// Validate required fields for non-interactive mode
|
|
350
362
|
if (config.dataLayerType === 'couch' && !config.couchdbUrl) {
|
|
351
363
|
throw new Error('CouchDB URL is required when using dynamic data layer. Use --couchdb-url option.');
|
|
352
364
|
}
|
|
365
|
+
// Validate required fields for static data layer course import
|
|
366
|
+
if (config.importCourseData) {
|
|
367
|
+
if (config.dataLayerType !== 'static') {
|
|
368
|
+
throw new Error('Course import is only available for static data layer. Use --data-layer static.');
|
|
369
|
+
}
|
|
370
|
+
if (!config.importServerUrl) {
|
|
371
|
+
throw new Error('Import server URL is required when importing course data. Use --import-server-url option.');
|
|
372
|
+
}
|
|
373
|
+
if (!config.importCourseIds || config.importCourseIds.length === 0) {
|
|
374
|
+
throw new Error('Course IDs are required when importing course data. Use --import-course-ids option.');
|
|
375
|
+
}
|
|
376
|
+
}
|
|
353
377
|
}
|
|
354
378
|
return config;
|
|
355
379
|
}
|