@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.
Files changed (169) hide show
  1. package/README.md +122 -8
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +2 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +34 -3
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/pack.d.ts +10 -0
  10. package/dist/commands/pack.d.ts.map +1 -1
  11. package/dist/commands/pack.js +1 -1
  12. package/dist/commands/pack.js.map +1 -1
  13. package/dist/commands/studio.d.ts.map +1 -1
  14. package/dist/commands/studio.js +641 -106
  15. package/dist/commands/studio.js.map +1 -1
  16. package/dist/commands/unpack.d.ts +12 -0
  17. package/dist/commands/unpack.d.ts.map +1 -1
  18. package/dist/commands/unpack.js +1 -1
  19. package/dist/commands/unpack.js.map +1 -1
  20. package/dist/express-assets/app.d.ts +6 -0
  21. package/dist/express-assets/app.d.ts.map +1 -0
  22. package/dist/express-assets/app.js +209 -0
  23. package/dist/express-assets/app.js.map +1 -0
  24. package/dist/express-assets/assets/classroomDesignDoc.js +24 -0
  25. package/dist/express-assets/assets/courseValidateDocUpdate.js +56 -0
  26. package/dist/express-assets/assets/get-tagsDesignDoc.json +9 -0
  27. package/dist/express-assets/attachment-preprocessing/index.d.ts +11 -0
  28. package/dist/express-assets/attachment-preprocessing/index.d.ts.map +1 -0
  29. package/dist/express-assets/attachment-preprocessing/index.js +204 -0
  30. package/dist/express-assets/attachment-preprocessing/index.js.map +1 -0
  31. package/dist/express-assets/attachment-preprocessing/normalize.d.ts +7 -0
  32. package/dist/express-assets/attachment-preprocessing/normalize.d.ts.map +1 -0
  33. package/dist/express-assets/attachment-preprocessing/normalize.js +90 -0
  34. package/dist/express-assets/attachment-preprocessing/normalize.js.map +1 -0
  35. package/dist/express-assets/client-requests/classroom-requests.d.ts +26 -0
  36. package/dist/express-assets/client-requests/classroom-requests.d.ts.map +1 -0
  37. package/dist/express-assets/client-requests/classroom-requests.js +171 -0
  38. package/dist/express-assets/client-requests/classroom-requests.js.map +1 -0
  39. package/dist/express-assets/client-requests/course-requests.d.ts +10 -0
  40. package/dist/express-assets/client-requests/course-requests.d.ts.map +1 -0
  41. package/dist/express-assets/client-requests/course-requests.js +135 -0
  42. package/dist/express-assets/client-requests/course-requests.js.map +1 -0
  43. package/dist/express-assets/client-requests/pack-requests.d.ts +19 -0
  44. package/dist/express-assets/client-requests/pack-requests.d.ts.map +1 -0
  45. package/dist/express-assets/client-requests/pack-requests.js +130 -0
  46. package/dist/express-assets/client-requests/pack-requests.js.map +1 -0
  47. package/dist/express-assets/client.d.ts +31 -0
  48. package/dist/express-assets/client.d.ts.map +1 -0
  49. package/dist/express-assets/client.js +70 -0
  50. package/dist/express-assets/client.js.map +1 -0
  51. package/dist/express-assets/couchdb/authentication.d.ts +4 -0
  52. package/dist/express-assets/couchdb/authentication.d.ts.map +1 -0
  53. package/dist/express-assets/couchdb/authentication.js +69 -0
  54. package/dist/express-assets/couchdb/authentication.js.map +1 -0
  55. package/dist/express-assets/couchdb/index.d.ts +18 -0
  56. package/dist/express-assets/couchdb/index.d.ts.map +1 -0
  57. package/dist/express-assets/couchdb/index.js +52 -0
  58. package/dist/express-assets/couchdb/index.js.map +1 -0
  59. package/dist/express-assets/design-docs.d.ts +63 -0
  60. package/dist/express-assets/design-docs.d.ts.map +1 -0
  61. package/dist/express-assets/design-docs.js +90 -0
  62. package/dist/express-assets/design-docs.js.map +1 -0
  63. package/dist/express-assets/logger.d.ts +3 -0
  64. package/dist/express-assets/logger.d.ts.map +1 -0
  65. package/dist/express-assets/logger.js +62 -0
  66. package/dist/express-assets/logger.js.map +1 -0
  67. package/dist/express-assets/routes/logs.d.ts +3 -0
  68. package/dist/express-assets/routes/logs.d.ts.map +1 -0
  69. package/dist/express-assets/routes/logs.js +274 -0
  70. package/dist/express-assets/routes/logs.js.map +1 -0
  71. package/dist/express-assets/utils/env.d.ts +11 -0
  72. package/dist/express-assets/utils/env.d.ts.map +1 -0
  73. package/dist/express-assets/utils/env.js +39 -0
  74. package/dist/express-assets/utils/env.js.map +1 -0
  75. package/dist/express-assets/utils/processQueue.d.ts +39 -0
  76. package/dist/express-assets/utils/processQueue.d.ts.map +1 -0
  77. package/dist/express-assets/utils/processQueue.js +175 -0
  78. package/dist/express-assets/utils/processQueue.js.map +1 -0
  79. package/dist/studio-ui-src/App.vue +132 -0
  80. package/dist/studio-ui-src/api/index.ts +30 -0
  81. package/dist/studio-ui-src/components/StudioFlush.vue +108 -0
  82. package/dist/studio-ui-src/config/development.ts +98 -0
  83. package/dist/studio-ui-src/index.html +13 -0
  84. package/dist/studio-ui-src/main.ts +186 -0
  85. package/dist/studio-ui-src/package.json +35 -0
  86. package/dist/studio-ui-src/router/index.ts +32 -0
  87. package/dist/studio-ui-src/stores/useAuthStore.ts +3 -0
  88. package/dist/studio-ui-src/tsconfig.json +28 -0
  89. package/dist/studio-ui-src/utils/courseConfigRegistration.ts +297 -0
  90. package/dist/studio-ui-src/views/BrowseView.vue +82 -0
  91. package/dist/studio-ui-src/views/BulkImportView.vue +89 -0
  92. package/dist/studio-ui-src/views/CourseEditorView.vue +62 -0
  93. package/dist/studio-ui-src/views/CreateCardView.vue +144 -0
  94. package/dist/studio-ui-src/vite.config.base.js +103 -0
  95. package/dist/studio-ui-src/vite.config.ts +26 -0
  96. package/dist/templates/.skuilder/README.md +29 -0
  97. package/dist/types.d.ts +5 -0
  98. package/dist/types.d.ts.map +1 -1
  99. package/dist/types.js.map +1 -1
  100. package/dist/utils/ExpressManager.d.ts +28 -0
  101. package/dist/utils/ExpressManager.d.ts.map +1 -0
  102. package/dist/utils/ExpressManager.js +166 -0
  103. package/dist/utils/ExpressManager.js.map +1 -0
  104. package/dist/utils/NodeFileSystemAdapter.d.ts +6 -0
  105. package/dist/utils/NodeFileSystemAdapter.d.ts.map +1 -1
  106. package/dist/utils/NodeFileSystemAdapter.js +29 -1
  107. package/dist/utils/NodeFileSystemAdapter.js.map +1 -1
  108. package/dist/utils/error-reporting.d.ts +54 -0
  109. package/dist/utils/error-reporting.d.ts.map +1 -0
  110. package/dist/utils/error-reporting.js +143 -0
  111. package/dist/utils/error-reporting.js.map +1 -0
  112. package/dist/utils/pack-courses.d.ts.map +1 -1
  113. package/dist/utils/pack-courses.js +10 -27
  114. package/dist/utils/pack-courses.js.map +1 -1
  115. package/dist/utils/prompts.d.ts.map +1 -1
  116. package/dist/utils/prompts.js +24 -0
  117. package/dist/utils/prompts.js.map +1 -1
  118. package/dist/utils/questions-hash.d.ts +22 -0
  119. package/dist/utils/questions-hash.d.ts.map +1 -0
  120. package/dist/utils/questions-hash.js +96 -0
  121. package/dist/utils/questions-hash.js.map +1 -0
  122. package/dist/utils/template.d.ts +1 -1
  123. package/dist/utils/template.d.ts.map +1 -1
  124. package/dist/utils/template.js +209 -27
  125. package/dist/utils/template.js.map +1 -1
  126. package/eslint.config.mjs +1 -1
  127. package/package.json +30 -11
  128. package/src/cli.ts +3 -1
  129. package/src/commands/init.ts +48 -3
  130. package/src/commands/pack.ts +1 -1
  131. package/src/commands/studio.ts +851 -122
  132. package/src/commands/unpack.ts +1 -1
  133. package/src/types.ts +5 -0
  134. package/src/utils/ExpressManager.ts +210 -0
  135. package/src/utils/NodeFileSystemAdapter.ts +46 -2
  136. package/src/utils/error-reporting.ts +192 -0
  137. package/src/utils/pack-courses.ts +11 -36
  138. package/src/utils/prompts.ts +34 -0
  139. package/src/utils/questions-hash.ts +109 -0
  140. package/src/utils/template.ts +243 -29
  141. package/templates/.skuilder/README.md +29 -0
  142. package/dist/studio-ui-assets/assets/BrowseView-BJbixGOU.js +0 -2
  143. package/dist/studio-ui-assets/assets/BrowseView-BJbixGOU.js.map +0 -1
  144. package/dist/studio-ui-assets/assets/BrowseView-CM4HBO4j.css +0 -1
  145. package/dist/studio-ui-assets/assets/BulkImportView-DB6DYDJU.js +0 -2
  146. package/dist/studio-ui-assets/assets/BulkImportView-DB6DYDJU.js.map +0 -1
  147. package/dist/studio-ui-assets/assets/BulkImportView-g4wQUfPA.css +0 -1
  148. package/dist/studio-ui-assets/assets/CourseEditorView-BIlhlhw1.js +0 -2
  149. package/dist/studio-ui-assets/assets/CourseEditorView-BIlhlhw1.js.map +0 -1
  150. package/dist/studio-ui-assets/assets/CourseEditorView-WuPNLVKp.css +0 -1
  151. package/dist/studio-ui-assets/assets/CreateCardView-CyNOKCkm.css +0 -1
  152. package/dist/studio-ui-assets/assets/CreateCardView-DPjPvzzt.js +0 -2
  153. package/dist/studio-ui-assets/assets/CreateCardView-DPjPvzzt.js.map +0 -1
  154. package/dist/studio-ui-assets/assets/edit-ui.es-DiUxqbgF.js +0 -330
  155. package/dist/studio-ui-assets/assets/edit-ui.es-DiUxqbgF.js.map +0 -1
  156. package/dist/studio-ui-assets/assets/index--zY88pg6.css +0 -14
  157. package/dist/studio-ui-assets/assets/index-BnAv1C72.js +0 -287
  158. package/dist/studio-ui-assets/assets/index-BnAv1C72.js.map +0 -1
  159. package/dist/studio-ui-assets/assets/index-DHMXQY3-.js +0 -192
  160. package/dist/studio-ui-assets/assets/index-DHMXQY3-.js.map +0 -1
  161. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
  162. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
  163. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
  164. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
  165. package/dist/studio-ui-assets/assets/vue-DZcMATiC.js +0 -28
  166. package/dist/studio-ui-assets/assets/vue-DZcMATiC.js.map +0 -1
  167. package/dist/studio-ui-assets/assets/vuetify-qg7mRxy_.js +0 -6
  168. package/dist/studio-ui-assets/assets/vuetify-qg7mRxy_.js.map +0 -1
  169. 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":"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"}
@@ -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":"AAIA,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;IAkBhD,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAIvC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGtC"}
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":"AAOA,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,CAyD5E"}
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
- const { stdout, stderr } = await execFileAsync('node', [cliPath, ...commandArgs], {
34
- cwd: process.cwd(),
35
- maxBuffer: 1024 * 1024 * 10, // 10MB buffer for large outputs
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":"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"}
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,CAwPxB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
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"}
@@ -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
  }