@vue-skuilder/cli 0.1.7 → 0.1.8-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) 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 +640 -105
  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 +148 -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/views/BrowseView.vue +82 -0
  90. package/dist/studio-ui-src/views/BulkImportView.vue +89 -0
  91. package/dist/studio-ui-src/views/CourseEditorView.vue +62 -0
  92. package/dist/studio-ui-src/views/CreateCardView.vue +140 -0
  93. package/dist/studio-ui-src/vite.config.base.js +100 -0
  94. package/dist/studio-ui-src/vite.config.ts +26 -0
  95. package/dist/templates/.skuilder/README.md +29 -0
  96. package/dist/types.d.ts +5 -0
  97. package/dist/types.d.ts.map +1 -1
  98. package/dist/types.js.map +1 -1
  99. package/dist/utils/ExpressManager.d.ts +28 -0
  100. package/dist/utils/ExpressManager.d.ts.map +1 -0
  101. package/dist/utils/ExpressManager.js +166 -0
  102. package/dist/utils/ExpressManager.js.map +1 -0
  103. package/dist/utils/NodeFileSystemAdapter.d.ts +6 -0
  104. package/dist/utils/NodeFileSystemAdapter.d.ts.map +1 -1
  105. package/dist/utils/NodeFileSystemAdapter.js +29 -1
  106. package/dist/utils/NodeFileSystemAdapter.js.map +1 -1
  107. package/dist/utils/error-reporting.d.ts +54 -0
  108. package/dist/utils/error-reporting.d.ts.map +1 -0
  109. package/dist/utils/error-reporting.js +143 -0
  110. package/dist/utils/error-reporting.js.map +1 -0
  111. package/dist/utils/pack-courses.d.ts.map +1 -1
  112. package/dist/utils/pack-courses.js +10 -27
  113. package/dist/utils/pack-courses.js.map +1 -1
  114. package/dist/utils/prompts.d.ts.map +1 -1
  115. package/dist/utils/prompts.js +24 -0
  116. package/dist/utils/prompts.js.map +1 -1
  117. package/dist/utils/questions-hash.d.ts +22 -0
  118. package/dist/utils/questions-hash.d.ts.map +1 -0
  119. package/dist/utils/questions-hash.js +96 -0
  120. package/dist/utils/questions-hash.js.map +1 -0
  121. package/dist/utils/template.d.ts +1 -1
  122. package/dist/utils/template.d.ts.map +1 -1
  123. package/dist/utils/template.js +202 -25
  124. package/dist/utils/template.js.map +1 -1
  125. package/eslint.config.mjs +1 -1
  126. package/package.json +30 -11
  127. package/src/cli.ts +3 -1
  128. package/src/commands/init.ts +48 -3
  129. package/src/commands/pack.ts +1 -1
  130. package/src/commands/studio.ts +850 -121
  131. package/src/commands/unpack.ts +1 -1
  132. package/src/types.ts +5 -0
  133. package/src/utils/ExpressManager.ts +210 -0
  134. package/src/utils/NodeFileSystemAdapter.ts +46 -2
  135. package/src/utils/error-reporting.ts +192 -0
  136. package/src/utils/pack-courses.ts +11 -36
  137. package/src/utils/prompts.ts +34 -0
  138. package/src/utils/questions-hash.ts +109 -0
  139. package/src/utils/template.ts +231 -27
  140. package/templates/.skuilder/README.md +29 -0
  141. package/dist/studio-ui-assets/assets/BrowseView-BJbixGOU.js +0 -2
  142. package/dist/studio-ui-assets/assets/BrowseView-BJbixGOU.js.map +0 -1
  143. package/dist/studio-ui-assets/assets/BrowseView-CM4HBO4j.css +0 -1
  144. package/dist/studio-ui-assets/assets/BulkImportView-DB6DYDJU.js +0 -2
  145. package/dist/studio-ui-assets/assets/BulkImportView-DB6DYDJU.js.map +0 -1
  146. package/dist/studio-ui-assets/assets/BulkImportView-g4wQUfPA.css +0 -1
  147. package/dist/studio-ui-assets/assets/CourseEditorView-BIlhlhw1.js +0 -2
  148. package/dist/studio-ui-assets/assets/CourseEditorView-BIlhlhw1.js.map +0 -1
  149. package/dist/studio-ui-assets/assets/CourseEditorView-WuPNLVKp.css +0 -1
  150. package/dist/studio-ui-assets/assets/CreateCardView-CyNOKCkm.css +0 -1
  151. package/dist/studio-ui-assets/assets/CreateCardView-DPjPvzzt.js +0 -2
  152. package/dist/studio-ui-assets/assets/CreateCardView-DPjPvzzt.js.map +0 -1
  153. package/dist/studio-ui-assets/assets/edit-ui.es-DiUxqbgF.js +0 -330
  154. package/dist/studio-ui-assets/assets/edit-ui.es-DiUxqbgF.js.map +0 -1
  155. package/dist/studio-ui-assets/assets/index--zY88pg6.css +0 -14
  156. package/dist/studio-ui-assets/assets/index-BnAv1C72.js +0 -287
  157. package/dist/studio-ui-assets/assets/index-BnAv1C72.js.map +0 -1
  158. package/dist/studio-ui-assets/assets/index-DHMXQY3-.js +0 -192
  159. package/dist/studio-ui-assets/assets/index-DHMXQY3-.js.map +0 -1
  160. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
  161. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
  162. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
  163. package/dist/studio-ui-assets/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
  164. package/dist/studio-ui-assets/assets/vue-DZcMATiC.js +0 -28
  165. package/dist/studio-ui-assets/assets/vue-DZcMATiC.js.map +0 -1
  166. package/dist/studio-ui-assets/assets/vuetify-qg7mRxy_.js +0 -6
  167. package/dist/studio-ui-assets/assets/vuetify-qg7mRxy_.js.map +0 -1
  168. package/dist/studio-ui-assets/index.html +0 -16
@@ -1,6 +1,7 @@
1
1
  import { promises as fs, existsSync } from 'fs';
2
2
  import path from 'path';
3
3
  import { fileURLToPath } from 'url';
4
+ import { randomUUID } from 'crypto';
4
5
  import chalk from 'chalk';
5
6
  const __filename = fileURLToPath(import.meta.url);
6
7
  const __dirname = path.dirname(__filename);
@@ -50,19 +51,22 @@ export async function transformPackageJson(packageJsonPath, projectName, cliVers
50
51
  packageJson.name = projectName;
51
52
  packageJson.description = `Skuilder course application: ${projectName}`;
52
53
  packageJson.version = '1.0.0';
53
- // Transform workspace dependencies to published versions
54
+ // Transform workspace and file dependencies to published versions
54
55
  if (packageJson.dependencies) {
55
56
  for (const [depName, version] of Object.entries(packageJson.dependencies)) {
56
- if (typeof version === 'string' && version.startsWith('workspace:')) {
57
- // Replace workspace references with CLI's version
57
+ if (typeof version === 'string' && (version.startsWith('workspace:') || version.startsWith('file:'))) {
58
+ // Replace workspace and file references with CLI's version
58
59
  packageJson.dependencies[depName] = `^${cliVersion}`;
59
60
  }
60
61
  }
61
62
  }
62
- // Add missing terser devDependency for build minification
63
+ // Add missing devDependencies for build system
63
64
  if (packageJson.devDependencies && !packageJson.devDependencies['terser']) {
64
65
  packageJson.devDependencies['terser'] = '^5.39.0';
65
66
  }
67
+ if (packageJson.devDependencies && !packageJson.devDependencies['vite-plugin-dts']) {
68
+ packageJson.devDependencies['vite-plugin-dts'] = '^4.3.0';
69
+ }
66
70
  // Add CLI as devDependency for all projects
67
71
  if (!packageJson.devDependencies) {
68
72
  packageJson.devDependencies = {};
@@ -85,19 +89,34 @@ export async function transformPackageJson(packageJsonPath, projectName, cliVers
85
89
  * // [ ] This should be revised so that it works from the existing vite.config.ts in standalone-ui. As is, it recreates 95% of the same config.
86
90
  */
87
91
  export async function createViteConfig(viteConfigPath) {
88
- // Create a clean vite config for standalone projects
89
- const transformedContent = `// packages/standalone-ui/vite.config.ts
90
- import { defineConfig } from 'vite';
92
+ // Create dual build config similar to standalone-ui but without workspace dependencies
93
+ const transformedContent = `import { defineConfig } from 'vite';
91
94
  import vue from '@vitejs/plugin-vue';
95
+ import dts from 'vite-plugin-dts';
96
+ import { resolve } from 'path';
92
97
  import { fileURLToPath, URL } from 'node:url';
93
98
 
99
+ // Determine build mode from environment variable
100
+ const buildMode = process.env.BUILD_MODE || 'webapp';
101
+
94
102
  export default defineConfig({
95
- plugins: [vue()],
103
+ plugins: [
104
+ vue(),
105
+ // Only include dts plugin for library builds
106
+ ...(buildMode === 'library'
107
+ ? [dts({
108
+ insertTypesEntry: true,
109
+ include: ['src/questions/**/*.ts', 'src/questions/**/*.vue'],
110
+ exclude: ['**/*.spec.ts', '**/*.test.ts'],
111
+ outDir: 'dist-lib',
112
+ })]
113
+ : []
114
+ )
115
+ ],
96
116
  resolve: {
97
117
  alias: {
98
118
  // Alias for internal src paths
99
119
  '@': fileURLToPath(new URL('./src', import.meta.url)),
100
-
101
120
  // Add events alias if needed (often required by dependencies)
102
121
  events: 'events',
103
122
  },
@@ -116,8 +135,8 @@ export default defineConfig({
116
135
  },
117
136
  // --- Dependencies optimization ---
118
137
  optimizeDeps: {
119
- // Help Vite pre-bundle dependencies from published packages
120
138
  include: [
139
+ 'events',
121
140
  '@vue-skuilder/common-ui',
122
141
  '@vue-skuilder/db',
123
142
  '@vue-skuilder/common',
@@ -127,14 +146,65 @@ export default defineConfig({
127
146
  server: {
128
147
  port: 5173, // Use standard Vite port for standalone projects
129
148
  },
130
- build: {
131
- sourcemap: true,
132
- target: 'es2020',
133
- minify: 'terser',
134
- terserOptions: {
135
- keep_classnames: true,
136
- },
137
- },
149
+ build: buildMode === 'library'
150
+ ? {
151
+ // Library build configuration
152
+ sourcemap: true,
153
+ target: 'es2020',
154
+ minify: 'terser',
155
+ terserOptions: {
156
+ keep_classnames: true,
157
+ },
158
+ lib: {
159
+ entry: resolve(__dirname, 'src/questions/index.ts'),
160
+ name: 'VueSkuilderStandaloneQuestions',
161
+ fileName: (format) => \`questions.\${format === 'es' ? 'mjs' : 'cjs.js'}\`,
162
+ },
163
+ rollupOptions: {
164
+ // External packages that shouldn't be bundled in library mode
165
+ external: [
166
+ 'vue',
167
+ 'vue-router',
168
+ 'vuetify',
169
+ 'pinia',
170
+ '@vue-skuilder/common',
171
+ '@vue-skuilder/common-ui',
172
+ '@vue-skuilder/courses',
173
+ '@vue-skuilder/db',
174
+ ],
175
+ output: {
176
+ // Global variables for UMD build
177
+ globals: {
178
+ 'vue': 'Vue',
179
+ 'vue-router': 'VueRouter',
180
+ 'vuetify': 'Vuetify',
181
+ 'pinia': 'Pinia',
182
+ '@vue-skuilder/common': 'VueSkuilderCommon',
183
+ '@vue-skuilder/common-ui': 'VueSkuilderCommonUI',
184
+ '@vue-skuilder/courses': 'VueSkuilderCourses',
185
+ '@vue-skuilder/db': 'VueSkuilderDB',
186
+ },
187
+ exports: 'named',
188
+ // Preserve CSS in the output bundle
189
+ assetFileNames: 'assets/[name].[ext]',
190
+ },
191
+ },
192
+ // Output to separate directory for library build
193
+ outDir: 'dist-lib',
194
+ // Allow CSS code splitting for component libraries
195
+ cssCodeSplit: true,
196
+ }
197
+ : {
198
+ // Webapp build configuration (existing)
199
+ sourcemap: true,
200
+ target: 'es2020',
201
+ minify: 'terser',
202
+ terserOptions: {
203
+ keep_classnames: true,
204
+ },
205
+ // Standard webapp output directory
206
+ outDir: 'dist',
207
+ },
138
208
  // Add define block for process polyfills
139
209
  define: {
140
210
  global: 'window',
@@ -149,7 +219,7 @@ export default defineConfig({
149
219
  /**
150
220
  * Generate skuilder.config.json based on project configuration
151
221
  */
152
- export async function generateSkuilderConfig(configPath, config) {
222
+ export async function generateSkuilderConfig(configPath, config, outputPath) {
153
223
  const skuilderConfig = {
154
224
  title: config.title,
155
225
  dataLayerType: config.dataLayerType,
@@ -158,11 +228,15 @@ export async function generateSkuilderConfig(configPath, config) {
158
228
  if (config.dataLayerType === 'couch' && config.course) {
159
229
  skuilderConfig.course = config.course;
160
230
  }
161
- // For static data layer with imported courses, use the first course as primary
162
- if (config.dataLayerType === 'static' &&
163
- config.importCourseIds &&
164
- config.importCourseIds.length > 0) {
165
- skuilderConfig.course = config.importCourseIds[0];
231
+ // For static data layer, use imported course ID or generate new one
232
+ if (config.dataLayerType === 'static') {
233
+ if (config.importCourseIds && config.importCourseIds.length > 0) {
234
+ skuilderConfig.course = config.importCourseIds[0];
235
+ }
236
+ else {
237
+ // Generate UUID for new static courses without imports
238
+ skuilderConfig.course = randomUUID();
239
+ }
166
240
  }
167
241
  if (config.couchdbUrl) {
168
242
  skuilderConfig.couchdbUrl = config.couchdbUrl;
@@ -171,6 +245,10 @@ export async function generateSkuilderConfig(configPath, config) {
171
245
  skuilderConfig.theme = config.theme;
172
246
  }
173
247
  await fs.writeFile(configPath, JSON.stringify(skuilderConfig, null, 2));
248
+ // For static data layer without imports, create empty course structure
249
+ if (config.dataLayerType === 'static' && (!config.importCourseIds || config.importCourseIds.length === 0) && outputPath) {
250
+ await createEmptyCourseStructure(outputPath, skuilderConfig.course, config.title);
251
+ }
174
252
  }
175
253
  /**
176
254
  * Transform tsconfig.json to be standalone (remove base config reference)
@@ -204,6 +282,51 @@ export async function transformTsConfig(tsconfigPath) {
204
282
  };
205
283
  await fs.writeFile(tsconfigPath, JSON.stringify(tsconfig, null, 2));
206
284
  }
285
+ /**
286
+ * Create empty course structure for new static courses
287
+ */
288
+ async function createEmptyCourseStructure(projectPath, courseId, title) {
289
+ const staticCoursesPath = path.join(projectPath, 'public', 'static-courses');
290
+ const coursePath = path.join(staticCoursesPath, courseId);
291
+ // Create directory structure
292
+ await fs.mkdir(coursePath, { recursive: true });
293
+ await fs.mkdir(path.join(coursePath, 'chunks'), { recursive: true });
294
+ await fs.mkdir(path.join(coursePath, 'indices'), { recursive: true });
295
+ // Create minimal CourseConfig
296
+ const courseConfig = {
297
+ courseID: courseId,
298
+ name: title,
299
+ description: '',
300
+ public: false,
301
+ deleted: false,
302
+ creator: 'system',
303
+ admins: [],
304
+ moderators: [],
305
+ dataShapes: [],
306
+ questionTypes: []
307
+ };
308
+ // Create manifest.json with proper structure
309
+ const manifest = {
310
+ version: '1.0.0',
311
+ courseId,
312
+ courseName: title,
313
+ courseConfig,
314
+ lastUpdated: new Date().toISOString(),
315
+ documentCount: 0,
316
+ chunks: [],
317
+ indices: [],
318
+ designDocs: []
319
+ };
320
+ await fs.writeFile(path.join(coursePath, 'manifest.json'), JSON.stringify(manifest, null, 2));
321
+ // Create empty tags index
322
+ await fs.writeFile(path.join(coursePath, 'indices', 'tags.json'), JSON.stringify({ tags: [] }, null, 2));
323
+ // Create CourseConfig chunk
324
+ await fs.writeFile(path.join(coursePath, 'chunks', 'CourseConfig.json'), JSON.stringify([{
325
+ _id: 'CourseConfig',
326
+ ...courseConfig
327
+ }], null, 2));
328
+ console.log(chalk.green(`✅ Created empty course structure for ${courseId}`));
329
+ }
207
330
  /**
208
331
  * Generate .gitignore file for the project
209
332
  */
@@ -322,6 +445,7 @@ Thumbs.db
322
445
 
323
446
  # Skuilder specific
324
447
  /src/data/local-*.json
448
+ .skuilder/
325
449
  `;
326
450
  await fs.writeFile(gitignorePath, gitignoreContent);
327
451
  }
@@ -363,8 +487,32 @@ npm run dev
363
487
  Build for production:
364
488
  \`\`\`bash
365
489
  npm run build
490
+ \`\`\`${config.dataLayerType === 'static'
491
+ ? `
492
+
493
+ ## Studio Mode (Content Editing)
494
+
495
+ This project supports **Studio Mode** - a content editing web interface for modifying course data:
496
+
497
+ \`\`\`bash
498
+ npm run studio
366
499
  \`\`\`
367
500
 
501
+ Studio mode provides:
502
+ - **Visual Course Editor**: Interactive interface for editing course content
503
+ - **Live Preview**: See changes immediately in the browser
504
+ - **Hot Reload**: Changes are saved automatically to your course files
505
+ - **No Setup Required**: Built into the Skuilder CLI - just run the command
506
+
507
+ When you run \`npm run studio\`, it will:
508
+ 1. Start a local CouchDB instance for temporary editing
509
+ 2. Load your course data from \`public/static-courses/\`
510
+ 3. Launch the studio interface at http://localhost:7174
511
+ 4. Save changes back to your static course files when you flush
512
+
513
+ **Important**: Studio mode **overwrites** existing static data source files in \`public/static-courses/\`. Make sure to commit or backup your course data before making major edits.`
514
+ : ''}
515
+
368
516
  ## Configuration
369
517
 
370
518
  Course configuration is managed in \`skuilder.config.json\`. You can modify:
@@ -430,6 +578,33 @@ Visit the [Skuilder documentation](https://github.com/NiloCK/vue-skuilder) for m
430
578
  `;
431
579
  await fs.writeFile(readmePath, readme);
432
580
  }
581
+ /**
582
+ * Create .skuilder directory structure for studio builds cache
583
+ */
584
+ async function createSkuilderDirectory(projectPath) {
585
+ const skuilderPath = path.join(projectPath, '.skuilder');
586
+ const templatesPath = path.join(__dirname, '..', '..', 'templates', '.skuilder');
587
+ // Create .skuilder directory
588
+ await fs.mkdir(skuilderPath, { recursive: true });
589
+ // Create studio-builds subdirectory
590
+ await fs.mkdir(path.join(skuilderPath, 'studio-builds'), { recursive: true });
591
+ // Copy README template if it exists
592
+ if (existsSync(templatesPath)) {
593
+ await copyDirectory(templatesPath, skuilderPath);
594
+ }
595
+ else {
596
+ // Fallback: create basic README
597
+ const readmeContent = `# .skuilder Directory
598
+
599
+ **⚠️ WARNING: GENERATED CONTENT - DO NOT EDIT MANUALLY ⚠️**
600
+
601
+ This directory contains files generated by the Skuilder CLI tools.
602
+
603
+ Generated by @vue-skuilder/cli
604
+ `;
605
+ await fs.writeFile(path.join(skuilderPath, 'README.md'), readmeContent);
606
+ }
607
+ }
433
608
  /**
434
609
  * Copy and transform the standalone-ui template to create a new project
435
610
  */
@@ -453,13 +628,15 @@ export async function processTemplate(projectPath, config, cliVersion) {
453
628
  }
454
629
  console.log(chalk.blue('🔧 Generating configuration...'));
455
630
  const configPath = path.join(projectPath, 'skuilder.config.json');
456
- await generateSkuilderConfig(configPath, config);
631
+ await generateSkuilderConfig(configPath, config, projectPath);
457
632
  console.log(chalk.blue('📝 Creating README...'));
458
633
  const readmePath = path.join(projectPath, 'README.md');
459
634
  await generateReadme(readmePath, config);
460
635
  console.log(chalk.blue('📄 Generating .gitignore...'));
461
636
  const gitignorePath = path.join(projectPath, '.gitignore');
462
637
  await generateGitignore(gitignorePath);
638
+ console.log(chalk.blue('📁 Creating .skuilder directory structure...'));
639
+ await createSkuilderDirectory(projectPath);
463
640
  console.log(chalk.green('✅ Template processing complete!'));
464
641
  }
465
642
  //# sourceMappingURL=template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
package/eslint.config.mjs CHANGED
@@ -3,7 +3,7 @@ import backendConfig from '../../eslint.config.backend.mjs';
3
3
  export default [
4
4
  ...backendConfig,
5
5
  {
6
- ignores: ['node_modules/**', 'dist/**', 'eslint.config.mjs', 'tsconfig.json'],
6
+ ignores: ['node_modules/**', 'dist/**', 'eslint.config.mjs', 'tsconfig.json', 'testproject/**'],
7
7
  },
8
8
  {
9
9
  languageOptions: {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.1.7",
6
+ "version": "0.1.8-0",
7
7
  "type": "module",
8
8
  "description": "CLI scaffolding tool for vue-skuilder projects",
9
9
  "bin": {
@@ -18,13 +18,16 @@
18
18
  }
19
19
  },
20
20
  "scripts": {
21
- "build": "rm -rf dist && npm run build:studio-ui && tsc && npm run embed:studio-ui",
22
- "build:studio-ui": "cd ../studio-ui && npm run build",
23
- "embed:studio-ui": "mkdir -p dist/studio-ui-assets && cp -r ../studio-ui/dist/* dist/studio-ui-assets/",
21
+ "build": "rm -rf dist && npm run build:express && tsc && npm run embed:studio-ui-src && npm run embed:express && npm run embed:templates",
22
+ "build:express": "cd ../express && npm run build",
23
+ "embed:studio-ui-src": "mkdir -p dist/studio-ui-src && cp -r ../studio-ui/src/* dist/studio-ui-src/ && cp ../studio-ui/package.json dist/studio-ui-src/ && cp ../studio-ui/vite.config.ts dist/studio-ui-src/ && cp ../studio-ui/tsconfig.json dist/studio-ui-src/ && cp ../studio-ui/index.html dist/studio-ui-src/ && cp ../../vite.config.base.js dist/studio-ui-src/ && sed -i 's|../../vite.config.base.js|./vite.config.base.js|' dist/studio-ui-src/vite.config.ts && sed -i 's|resolve(__dirname, \\.\\., \\.\\.)|resolve(__dirname)|' dist/studio-ui-src/vite.config.ts && sed -i 's|/src/main.ts|./main.ts|' dist/studio-ui-src/index.html",
24
+ "embed:express": "mkdir -p dist/express-assets && cp -r ../express/dist/* dist/express-assets/ && cp -r ../express/assets dist/express-assets/",
25
+ "embed:templates": "mkdir -p dist/templates && cp -r templates/.skuilder dist/templates/",
24
26
  "dev": "tsc --watch",
25
27
  "lint": "npx eslint .",
26
28
  "lint:fix": "npx eslint . --fix",
27
- "lint:check": "npx eslint . --max-warnings 0"
29
+ "lint:check": "npx eslint . --max-warnings 0",
30
+ "try:init": "node dist/cli.js init testproject --dangerously-clobber --no-interactive --data-layer static --import-course-data --import-server-url http://localhost:5984 --import-username admin --import-password password --import-course-ids 2aeb8315ef78f3e89ca386992d00825b && cd testproject && npm i && npm install --save-dev @vue-skuilder/cli@file:.. && npm install @vue-skuilder/db@file:../../db @vue-skuilder/courses@file:../../courses @vue-skuilder/common-ui@file:../../common-ui"
28
31
  },
29
32
  "keywords": [
30
33
  "cli",
@@ -35,23 +38,39 @@
35
38
  "course"
36
39
  ],
37
40
  "dependencies": {
38
- "@vue-skuilder/db": "0.1.7",
39
- "@vue-skuilder/standalone-ui": "^0.1.7",
41
+ "@mdi/font": "^7.3.67",
42
+ "@vue-skuilder/common": "0.1.8-0",
43
+ "@vue-skuilder/common-ui": "0.1.8-0",
44
+ "@vue-skuilder/courses": "0.1.8-0",
45
+ "@vue-skuilder/db": "0.1.8-0",
46
+ "@vue-skuilder/edit-ui": "0.1.8-0",
47
+ "@vue-skuilder/standalone-ui": "^0.1.8-0",
40
48
  "chalk": "^5.3.0",
41
49
  "commander": "^11.0.0",
42
50
  "fs-extra": "^11.2.0",
43
51
  "inquirer": "^9.2.0",
44
- "pouchdb": "^9.0.0"
52
+ "pinia": "^2.3.0",
53
+ "pouchdb": "^9.0.0",
54
+ "serve-static": "^1.15.0",
55
+ "vue": "^3.5.13",
56
+ "vue-router": "^4.2.0",
57
+ "vuetify": "^3.7.0"
45
58
  },
46
59
  "devDependencies": {
47
60
  "@types/fs-extra": "^11.0.0",
48
61
  "@types/inquirer": "^9.0.0",
49
62
  "@types/node": "^20.0.0",
50
- "@vue-skuilder/studio-ui": "0.1.7",
51
- "typescript": "~5.7.2"
63
+ "@types/serve-static": "^1.15.0",
64
+ "@vitejs/plugin-vue": "^5.2.1",
65
+ "@vue-skuilder/express": "0.1.8-0",
66
+ "@vue-skuilder/studio-ui": "0.1.8-0",
67
+ "typescript": "~5.7.2",
68
+ "vite": "^6.0.9",
69
+ "vue-tsc": "^1.8.0"
52
70
  },
53
71
  "engines": {
54
72
  "node": ">=18.0.0"
55
73
  },
56
- "packageManager": "yarn@4.6.0"
74
+ "packageManager": "yarn@4.6.0",
75
+ "stableVersion": "0.1.7"
57
76
  }
package/src/cli.ts CHANGED
@@ -16,12 +16,14 @@ const __dirname = dirname(__filename);
16
16
  const packagePath = join(__dirname, '..', 'package.json');
17
17
  const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
18
18
 
19
+ export const VERSION: string = packageJson.version;
20
+
19
21
  const program = new Command();
20
22
 
21
23
  program
22
24
  .name('skuilder')
23
25
  .description('CLI tool for scaffolding Skuilder course applications')
24
- .version(packageJson.version);
26
+ .version(VERSION);
25
27
 
26
28
  // Add commands
27
29
  program.addCommand(createInitCommand());
@@ -1,6 +1,6 @@
1
1
  import chalk from 'chalk';
2
2
  import { Command } from 'commander';
3
- import { existsSync, readFileSync } from 'fs';
3
+ import { existsSync, readFileSync, rmSync } from 'fs';
4
4
  import path, { dirname, join } from 'path';
5
5
  import { fileURLToPath } from 'url';
6
6
  import { CliOptions, PREDEFINED_THEMES } from '../types.js';
@@ -24,6 +24,12 @@ export function createInitCommand(): Command {
24
24
  .option('--no-interactive', 'skip interactive prompts')
25
25
  .option('--couchdb-url <url>', 'CouchDB server URL (for dynamic data layer)')
26
26
  .option('--course-id <id>', 'course ID to import (for dynamic data layer)')
27
+ .option('--import-course-data', 'import course data from CouchDB (for static data layer)')
28
+ .option('--import-server-url <url>', 'CouchDB server URL for course import (for static data layer)')
29
+ .option('--import-username <username>', 'username for course import server')
30
+ .option('--import-password <password>', 'password for course import server')
31
+ .option('--import-course-ids <ids>', 'comma-separated course IDs to import')
32
+ .option('--dangerously-clobber', 'overwrite existing directory')
27
33
  .action(initCommand);
28
34
  }
29
35
 
@@ -33,6 +39,12 @@ interface InitOptions {
33
39
  interactive: boolean;
34
40
  couchdbUrl?: string;
35
41
  courseId?: string;
42
+ importCourseData?: boolean;
43
+ importServerUrl?: string;
44
+ importUsername?: string;
45
+ importPassword?: string;
46
+ importCourseIds?: string;
47
+ dangerouslyClobber?: boolean;
36
48
  }
37
49
 
38
50
  async function initCommand(projectName: string, options: InitOptions): Promise<void> {
@@ -45,6 +57,29 @@ async function initCommand(projectName: string, options: InitOptions): Promise<v
45
57
  process.exit(1);
46
58
  }
47
59
 
60
+ // Validate that import-* options require --import-course-data flag
61
+ const importOptions = [
62
+ { flag: '--import-server-url', value: options.importServerUrl },
63
+ { flag: '--import-username', value: options.importUsername },
64
+ { flag: '--import-password', value: options.importPassword },
65
+ { flag: '--import-course-ids', value: options.importCourseIds }
66
+ ];
67
+
68
+ const usedImportOptions = importOptions.filter(opt => opt.value !== undefined);
69
+
70
+ if (usedImportOptions.length > 0 && !options.importCourseData) {
71
+ console.error(
72
+ chalk.red('❌ Import options require the --import-course-data flag.')
73
+ );
74
+ console.error(
75
+ chalk.yellow(`Used options: ${usedImportOptions.map(opt => opt.flag).join(', ')}`)
76
+ );
77
+ console.error(
78
+ chalk.yellow('Add --import-course-data to enable course data import.')
79
+ );
80
+ process.exit(1);
81
+ }
82
+
48
83
  // Validate theme option
49
84
  const validThemes = Object.keys(PREDEFINED_THEMES);
50
85
  if (!validThemes.includes(options.theme)) {
@@ -60,8 +95,13 @@ async function initCommand(projectName: string, options: InitOptions): Promise<v
60
95
  // Check if directory already exists
61
96
  const projectPath = path.resolve(process.cwd(), projectName);
62
97
  if (existsSync(projectPath)) {
63
- console.error(chalk.red(`❌ Directory "${projectName}" already exists.`));
64
- process.exit(1);
98
+ if (options.dangerouslyClobber) {
99
+ console.log(chalk.yellow(`--dangerously-clobber specified, removing existing directory: ${projectPath}`));
100
+ rmSync(projectPath, { recursive: true, force: true });
101
+ } else {
102
+ console.error(chalk.red(`❌ Directory "${projectName}" already exists.`));
103
+ process.exit(1);
104
+ }
65
105
  }
66
106
 
67
107
  // Get CLI version for dependency transformation
@@ -76,6 +116,11 @@ async function initCommand(projectName: string, options: InitOptions): Promise<v
76
116
  interactive: options.interactive,
77
117
  couchdbUrl: options.couchdbUrl,
78
118
  courseId: options.courseId,
119
+ importCourseData: options.importCourseData,
120
+ importServerUrl: options.importServerUrl,
121
+ importUsername: options.importUsername,
122
+ importPassword: options.importPassword,
123
+ importCourseIds: options.importCourseIds,
79
124
  };
80
125
 
81
126
  // Gather project configuration
@@ -27,7 +27,7 @@ interface PackOptions {
27
27
  noAttachments: boolean;
28
28
  }
29
29
 
30
- async function packCourse(courseId: string, options: PackOptions) {
30
+ export async function packCourse(courseId: string, options: PackOptions) {
31
31
  try {
32
32
  console.log(chalk.cyan(`🔧 Packing course: ${courseId}`));
33
33