basecampjs 0.0.13 → 0.0.14

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 (77) hide show
  1. package/dist/build/assets.d.ts +36 -0
  2. package/dist/build/assets.d.ts.map +1 -0
  3. package/dist/build/assets.js +272 -0
  4. package/dist/build/assets.js.map +1 -0
  5. package/dist/build/data.d.ts +6 -0
  6. package/dist/build/data.d.ts.map +1 -0
  7. package/dist/build/data.js +33 -0
  8. package/dist/build/data.js.map +1 -0
  9. package/dist/build/pages.d.ts +19 -0
  10. package/dist/build/pages.d.ts.map +1 -0
  11. package/dist/build/pages.js +110 -0
  12. package/dist/build/pages.js.map +1 -0
  13. package/dist/build/pipeline.d.ts +6 -0
  14. package/dist/build/pipeline.d.ts.map +1 -0
  15. package/dist/build/pipeline.js +98 -0
  16. package/dist/build/pipeline.js.map +1 -0
  17. package/dist/cli.d.ts +3 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +140 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/config.d.ts +11 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +60 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/dev/server.d.ts +6 -0
  26. package/dist/dev/server.d.ts.map +1 -0
  27. package/dist/dev/server.js +64 -0
  28. package/dist/dev/server.js.map +1 -0
  29. package/dist/dev/watcher.d.ts +5 -0
  30. package/dist/dev/watcher.d.ts.map +1 -0
  31. package/dist/dev/watcher.js +49 -0
  32. package/dist/dev/watcher.js.map +1 -0
  33. package/dist/index.d.ts +17 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +25 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/render/engines.d.ts +30 -0
  38. package/dist/render/engines.d.ts.map +1 -0
  39. package/dist/render/engines.js +102 -0
  40. package/dist/render/engines.js.map +1 -0
  41. package/dist/scaffolding.d.ts +25 -0
  42. package/dist/scaffolding.d.ts.map +1 -0
  43. package/dist/scaffolding.js +596 -0
  44. package/dist/scaffolding.js.map +1 -0
  45. package/dist/types.d.ts +91 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +5 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/utils/fs.d.ts +29 -0
  50. package/dist/utils/fs.d.ts.map +1 -0
  51. package/dist/utils/fs.js +104 -0
  52. package/dist/utils/fs.js.map +1 -0
  53. package/dist/utils/logger.d.ts +9 -0
  54. package/dist/utils/logger.d.ts.map +1 -0
  55. package/dist/utils/logger.js +21 -0
  56. package/dist/utils/logger.js.map +1 -0
  57. package/dist/utils/paths.d.ts +17 -0
  58. package/dist/utils/paths.d.ts.map +1 -0
  59. package/dist/utils/paths.js +55 -0
  60. package/dist/utils/paths.js.map +1 -0
  61. package/package.json +36 -6
  62. package/src/build/assets.ts +314 -0
  63. package/src/build/data.ts +32 -0
  64. package/src/build/pages.ts +143 -0
  65. package/src/build/pipeline.ts +111 -0
  66. package/src/cli.ts +155 -0
  67. package/src/config.ts +61 -0
  68. package/src/dev/server.ts +66 -0
  69. package/src/dev/watcher.ts +52 -0
  70. package/src/index.ts +45 -0
  71. package/src/render/engines.ts +139 -0
  72. package/src/scaffolding.ts +656 -0
  73. package/src/types.ts +110 -0
  74. package/src/utils/fs.ts +109 -0
  75. package/src/utils/logger.ts +27 -0
  76. package/src/utils/paths.ts +56 -0
  77. package/index.js +0 -1532
@@ -0,0 +1,596 @@
1
+ import { existsSync } from "fs";
2
+ import { readFile, readdir, rm, writeFile } from "fs/promises";
3
+ import { basename, dirname, extname, join, relative, resolve } from "path";
4
+ import { loadConfig } from "./config.js";
5
+ import { ensureDir, walkFiles } from "./utils/fs.js";
6
+ import { slugify, formatDate } from "./utils/paths.js";
7
+ import { kolor } from "./utils/logger.js";
8
+ const cwd = process.cwd();
9
+ /**
10
+ * Initialize a new Campsite project
11
+ */
12
+ export async function init() {
13
+ const targetDir = cwd;
14
+ console.log(kolor.cyan(kolor.bold("🏕️ Initializing Campsite in current directory...")));
15
+ // Check if already initialized
16
+ if (existsSync(join(targetDir, "campsite.config.js"))) {
17
+ console.log(kolor.yellow("⚠️ This directory already has a campsite.config.js file."));
18
+ console.log(kolor.dim("Run 'camper dev' to start developing.\n"));
19
+ return;
20
+ }
21
+ // Create basic structure
22
+ const dirs = [
23
+ join(targetDir, "src", "pages"),
24
+ join(targetDir, "src", "layouts"),
25
+ join(targetDir, "public")
26
+ ];
27
+ for (const dir of dirs) {
28
+ await ensureDir(dir);
29
+ }
30
+ // Create basic config file
31
+ const configContent = `export default {
32
+ siteName: "My Campsite",
33
+ srcDir: "src",
34
+ outDir: "dist",
35
+ templateEngine: "nunjucks",
36
+ markdown: true,
37
+ integrations: {
38
+ nunjucks: true,
39
+ liquid: false,
40
+ mustache: false,
41
+ vue: false,
42
+ alpine: false
43
+ }
44
+ };
45
+ `;
46
+ await writeFile(join(targetDir, "campsite.config.js"), configContent, "utf8");
47
+ // Create basic layout
48
+ const layoutContent = `<!DOCTYPE html>
49
+ <html lang="en">
50
+ <head>
51
+ <meta charset="UTF-8">
52
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
53
+ <title>{{ title or site.name }}</title>
54
+ <link rel="stylesheet" href="/style.css">
55
+ </head>
56
+ <body>
57
+ {% block content %}
58
+ {{ content | safe }}
59
+ {% endblock %}
60
+ </body>
61
+ </html>
62
+ `;
63
+ await writeFile(join(targetDir, "src", "layouts", "base.njk"), layoutContent, "utf8");
64
+ // Create sample page
65
+ const pageContent = `---
66
+ layout: base.njk
67
+ title: Welcome to Campsite
68
+ ---
69
+
70
+ # Welcome to Campsite! 🏕️
71
+
72
+ Your cozy static site is ready to build.
73
+
74
+ ## Get Started
75
+
76
+ - Run \`camper dev\` to start developing
77
+ - Edit pages in \`src/pages/\`
78
+ - Customize layouts in \`src/layouts/\`
79
+
80
+ Happy camping! 🌲🦊
81
+ `;
82
+ await writeFile(join(targetDir, "src", "pages", "index.md"), pageContent, "utf8");
83
+ // Create basic CSS
84
+ const cssContent = `* {
85
+ margin: 0;
86
+ padding: 0;
87
+ box-sizing: border-box;
88
+ }
89
+
90
+ body {
91
+ font-family: system-ui, -apple-system, sans-serif;
92
+ line-height: 1.6;
93
+ padding: 2rem;
94
+ max-width: 800px;
95
+ margin: 0 auto;
96
+ }
97
+
98
+ h1 { color: #2d5016; margin-bottom: 1rem; }
99
+ h2 { color: #4a7c2c; margin-top: 1.5rem; }
100
+ `;
101
+ await writeFile(join(targetDir, "public", "style.css"), cssContent, "utf8");
102
+ // Create .gitignore
103
+ const gitignoreContent = `node_modules/
104
+ dist/
105
+ .DS_Store
106
+ `;
107
+ await writeFile(join(targetDir, ".gitignore"), gitignoreContent, "utf8");
108
+ // Create package.json
109
+ const packageJson = {
110
+ name: basename(targetDir),
111
+ version: "0.0.1",
112
+ type: "module",
113
+ scripts: {
114
+ dev: "camper dev",
115
+ build: "camper build",
116
+ serve: "camper serve",
117
+ preview: "camper preview"
118
+ },
119
+ dependencies: {
120
+ basecampjs: "^0.0.8"
121
+ }
122
+ };
123
+ await writeFile(join(targetDir, "package.json"), JSON.stringify(packageJson, null, 2), "utf8");
124
+ console.log(kolor.green("✅ Campsite initialized successfully!\n"));
125
+ console.log(kolor.bold("Next steps:"));
126
+ console.log(kolor.dim(" 1. Install dependencies: npm install"));
127
+ console.log(kolor.dim(" 2. Start developing: camper dev\n"));
128
+ }
129
+ /**
130
+ * Clean the build output directory
131
+ */
132
+ export async function clean() {
133
+ const config = await loadConfig(cwd);
134
+ const outDir = resolve(cwd, config.outDir || "dist");
135
+ if (!existsSync(outDir)) {
136
+ console.log(kolor.dim(`Nothing to clean. ${outDir} does not exist.`));
137
+ return;
138
+ }
139
+ console.log(kolor.cyan(`🧹 Cleaning ${relative(cwd, outDir)}...`));
140
+ await rm(outDir, { recursive: true, force: true });
141
+ console.log(kolor.green(`✅ Cleaned ${relative(cwd, outDir)}\n`));
142
+ }
143
+ /**
144
+ * Check project configuration and structure
145
+ */
146
+ export async function check() {
147
+ console.log(kolor.cyan(kolor.bold("🔍 Checking Campsite project...\n")));
148
+ let hasIssues = false;
149
+ // Check if campsite.config.js exists
150
+ const configPath = join(cwd, "campsite.config.js");
151
+ if (!existsSync(configPath)) {
152
+ console.log(kolor.red("❌ campsite.config.js not found"));
153
+ console.log(kolor.dim(" Run 'camper init' to initialize a project\n"));
154
+ hasIssues = true;
155
+ }
156
+ else {
157
+ console.log(kolor.green("✅ campsite.config.js found"));
158
+ }
159
+ // Load and validate config
160
+ const config = await loadConfig(cwd);
161
+ const srcDir = resolve(cwd, config.srcDir || "src");
162
+ const pagesDir = join(srcDir, "pages");
163
+ const layoutsDir = join(srcDir, "layouts");
164
+ const publicDir = resolve(cwd, "public");
165
+ // Check src directory
166
+ if (!existsSync(srcDir)) {
167
+ console.log(kolor.red(`❌ Source directory not found: ${relative(cwd, srcDir)}`));
168
+ hasIssues = true;
169
+ }
170
+ else {
171
+ console.log(kolor.green(`✅ Source directory exists: ${relative(cwd, srcDir)}`));
172
+ }
173
+ // Check pages directory
174
+ if (!existsSync(pagesDir)) {
175
+ console.log(kolor.yellow(`⚠️ Pages directory not found: ${relative(cwd, pagesDir)}`));
176
+ hasIssues = true;
177
+ }
178
+ else {
179
+ const files = await walkFiles(pagesDir);
180
+ if (files.length === 0) {
181
+ console.log(kolor.yellow(`⚠️ No pages found in ${relative(cwd, pagesDir)}`));
182
+ hasIssues = true;
183
+ }
184
+ else {
185
+ console.log(kolor.green(`✅ Found ${files.length} page(s) in ${relative(cwd, pagesDir)}`));
186
+ }
187
+ }
188
+ // Check layouts directory
189
+ if (existsSync(layoutsDir)) {
190
+ const layouts = await readdir(layoutsDir).catch(() => []);
191
+ console.log(kolor.green(`✅ Found ${layouts.length} layout(s) in ${relative(cwd, layoutsDir)}`));
192
+ }
193
+ else {
194
+ console.log(kolor.dim(`ℹ️ No layouts directory (${relative(cwd, layoutsDir)})`));
195
+ }
196
+ // Check public directory
197
+ if (existsSync(publicDir)) {
198
+ console.log(kolor.green(`✅ Public directory exists: ${relative(cwd, publicDir)}`));
199
+ }
200
+ else {
201
+ console.log(kolor.dim(`ℹ️ No public directory (${relative(cwd, publicDir)})`));
202
+ }
203
+ // Check for package.json and dependencies
204
+ const pkgPath = join(cwd, "package.json");
205
+ if (existsSync(pkgPath)) {
206
+ try {
207
+ const pkgRaw = await readFile(pkgPath, "utf8");
208
+ const pkg = JSON.parse(pkgRaw);
209
+ if (pkg.dependencies?.basecampjs || pkg.devDependencies?.basecampjs) {
210
+ console.log(kolor.green("✅ basecampjs dependency found"));
211
+ }
212
+ else {
213
+ console.log(kolor.yellow("⚠️ basecampjs not listed in dependencies"));
214
+ console.log(kolor.dim(" Consider adding: npm install basecampjs"));
215
+ }
216
+ }
217
+ catch {
218
+ console.log(kolor.yellow("⚠️ Could not parse package.json"));
219
+ }
220
+ }
221
+ else {
222
+ console.log(kolor.dim("ℹ️ No package.json found"));
223
+ }
224
+ console.log();
225
+ if (hasIssues) {
226
+ console.log(kolor.yellow("⚠️ Some issues found. Review the messages above."));
227
+ }
228
+ else {
229
+ console.log(kolor.green(kolor.bold("🎉 Everything looks good! Ready to build.")));
230
+ }
231
+ console.log();
232
+ }
233
+ /**
234
+ * List all project content
235
+ */
236
+ export async function list() {
237
+ console.log(kolor.cyan(kolor.bold("🗺️ Listing Campsite content...\n")));
238
+ const config = await loadConfig(cwd);
239
+ const srcDir = resolve(cwd, config.srcDir || "src");
240
+ const pagesDir = join(srcDir, "pages");
241
+ const layoutsDir = join(srcDir, "layouts");
242
+ const componentsDir = join(srcDir, "components");
243
+ const partialsDir = join(srcDir, "partials");
244
+ const collectionsDir = join(srcDir, "collections");
245
+ const dataDir = join(srcDir, "data");
246
+ // List pages
247
+ if (existsSync(pagesDir)) {
248
+ const pages = await walkFiles(pagesDir);
249
+ if (pages.length > 0) {
250
+ console.log(kolor.bold("📄 Pages (") + kolor.cyan(pages.length.toString()) + kolor.bold(")"));
251
+ pages.forEach(page => {
252
+ const rel = relative(pagesDir, page);
253
+ console.log(" " + kolor.dim("• ") + rel);
254
+ });
255
+ console.log();
256
+ }
257
+ }
258
+ // List layouts
259
+ if (existsSync(layoutsDir)) {
260
+ const layouts = await readdir(layoutsDir).catch(() => []);
261
+ if (layouts.length > 0) {
262
+ console.log(kolor.bold("📝 Layouts (") + kolor.cyan(layouts.length.toString()) + kolor.bold(")"));
263
+ layouts.forEach(layout => {
264
+ console.log(" " + kolor.dim("• ") + layout);
265
+ });
266
+ console.log();
267
+ }
268
+ }
269
+ // List components
270
+ if (existsSync(componentsDir)) {
271
+ const components = await readdir(componentsDir).catch(() => []);
272
+ if (components.length > 0) {
273
+ console.log(kolor.bold("🧩 Components (") + kolor.cyan(components.length.toString()) + kolor.bold(")"));
274
+ components.forEach(component => {
275
+ console.log(" " + kolor.dim("• ") + component);
276
+ });
277
+ console.log();
278
+ }
279
+ }
280
+ // List partials
281
+ if (existsSync(partialsDir)) {
282
+ const partials = await readdir(partialsDir).catch(() => []);
283
+ if (partials.length > 0) {
284
+ console.log(kolor.bold("🧰 Partials (") + kolor.cyan(partials.length.toString()) + kolor.bold(")"));
285
+ partials.forEach(partial => {
286
+ console.log(" " + kolor.dim("• ") + partial);
287
+ });
288
+ console.log();
289
+ }
290
+ }
291
+ // List collections
292
+ if (existsSync(collectionsDir)) {
293
+ const collections = await readdir(collectionsDir).catch(() => []);
294
+ const jsonFiles = collections.filter(f => f.endsWith(".json"));
295
+ if (jsonFiles.length > 0) {
296
+ console.log(kolor.bold("📁 Collections (") + kolor.cyan(jsonFiles.length.toString()) + kolor.bold(")"));
297
+ jsonFiles.forEach(collection => {
298
+ console.log(" " + kolor.dim("• ") + collection);
299
+ });
300
+ console.log();
301
+ }
302
+ }
303
+ // List data files
304
+ if (existsSync(dataDir)) {
305
+ const dataFiles = await readdir(dataDir).catch(() => []);
306
+ const jsonFiles = dataFiles.filter(f => f.endsWith(".json"));
307
+ if (jsonFiles.length > 0) {
308
+ console.log(kolor.bold("📊 Data (") + kolor.cyan(jsonFiles.length.toString()) + kolor.bold(")"));
309
+ jsonFiles.forEach(dataFile => {
310
+ console.log(" " + kolor.dim("• ") + dataFile);
311
+ });
312
+ console.log();
313
+ }
314
+ }
315
+ console.log(kolor.dim("🌲 Tip: Use 'camper make:<type> <name>' to create new content\n"));
316
+ }
317
+ /**
318
+ * Upgrade CampsiteJS to latest version
319
+ */
320
+ export async function upgrade() {
321
+ console.log(kolor.cyan(kolor.bold("⬆️ Checking for CampsiteJS updates...\n")));
322
+ // Check if package.json exists
323
+ const pkgPath = join(cwd, "package.json");
324
+ if (!existsSync(pkgPath)) {
325
+ console.log(kolor.red("❌ package.json not found"));
326
+ console.log(kolor.dim("This command should be run in a Campsite project directory.\n"));
327
+ process.exit(1);
328
+ }
329
+ // Read current package.json
330
+ let pkg;
331
+ try {
332
+ const pkgRaw = await readFile(pkgPath, "utf8");
333
+ pkg = JSON.parse(pkgRaw);
334
+ }
335
+ catch {
336
+ console.log(kolor.red("❌ Could not read package.json\n"));
337
+ process.exit(1);
338
+ }
339
+ const currentVersion = pkg.dependencies?.basecampjs || pkg.devDependencies?.basecampjs;
340
+ if (!currentVersion) {
341
+ console.log(kolor.yellow("⚠️ basecampjs not found in dependencies"));
342
+ console.log(kolor.dim("Install it with: npm install basecampjs\n"));
343
+ process.exit(1);
344
+ }
345
+ console.log(kolor.dim(`Current version: ${currentVersion}`));
346
+ console.log(kolor.cyan("\nUpgrading basecampjs to latest version...\n"));
347
+ // Use dynamic import to run npm commands
348
+ const { spawn } = await import("child_process");
349
+ return new Promise((resolve, reject) => {
350
+ const child = spawn("npm", ["install", "basecampjs@latest"], {
351
+ cwd,
352
+ stdio: "inherit",
353
+ shell: process.platform === "win32"
354
+ });
355
+ child.on("close", async (code) => {
356
+ if (code === 0) {
357
+ console.log();
358
+ console.log(kolor.green("✅ CampsiteJS updated successfully!"));
359
+ // Read updated version
360
+ try {
361
+ const updatedPkgRaw = await readFile(pkgPath, "utf8");
362
+ const updatedPkg = JSON.parse(updatedPkgRaw);
363
+ const newVersion = updatedPkg.dependencies?.basecampjs || updatedPkg.devDependencies?.basecampjs;
364
+ console.log(kolor.dim(`New version: ${newVersion}`));
365
+ }
366
+ catch {
367
+ // Ignore errors reading updated version
368
+ }
369
+ console.log();
370
+ console.log(kolor.dim("🌲 Tip: Run 'camper dev' to start developing with the latest version\n"));
371
+ resolve();
372
+ }
373
+ else {
374
+ console.log();
375
+ console.log(kolor.red(`❌ Update failed with code ${code}\n`));
376
+ reject(new Error(`npm install failed with code ${code}`));
377
+ }
378
+ });
379
+ child.on("error", (err) => {
380
+ console.log(kolor.red(`❌ Update failed: ${err.message}\n`));
381
+ reject(err);
382
+ });
383
+ });
384
+ }
385
+ /**
386
+ * Create new content (page, post, layout, component, partial, collection)
387
+ */
388
+ export async function makeContent(type, args) {
389
+ if (!args || args.length === 0) {
390
+ console.log(kolor.red("❌ Missing name argument"));
391
+ console.log(kolor.dim(`Usage: camper make:${type} <name> [name2, name3, ...]`));
392
+ console.log(kolor.dim("\nExamples:"));
393
+ console.log(kolor.dim(" camper make:page about"));
394
+ console.log(kolor.dim(" camper make:page home, about, contact"));
395
+ console.log(kolor.dim(" camper make:collection products, categories\n"));
396
+ process.exit(1);
397
+ }
398
+ // Join all args and split by comma to support both formats:
399
+ // camper make:page home about contact
400
+ // camper make:page home, about, contact
401
+ const namesString = args.join(" ");
402
+ const names = namesString.split(",").map(n => n.trim()).filter(n => n.length > 0);
403
+ if (names.length === 0) {
404
+ console.log(kolor.red("❌ No valid names provided\n"));
405
+ process.exit(1);
406
+ }
407
+ console.log(kolor.cyan(`\n🏕️ Creating ${names.length} ${type}(s)...\n`));
408
+ const config = await loadConfig(cwd);
409
+ const srcDir = resolve(cwd, config.srcDir || "src");
410
+ // Determine file extension based on template engine
411
+ const engineExtMap = {
412
+ nunjucks: ".njk",
413
+ liquid: ".liquid",
414
+ mustache: ".mustache"
415
+ };
416
+ const defaultExt = engineExtMap[config.templateEngine] || ".njk";
417
+ let successCount = 0;
418
+ let skipCount = 0;
419
+ for (const name of names) {
420
+ const result = await createSingleContent(type, name, srcDir, config, defaultExt);
421
+ if (result.success)
422
+ successCount++;
423
+ if (result.skipped)
424
+ skipCount++;
425
+ }
426
+ console.log();
427
+ if (successCount > 0) {
428
+ console.log(kolor.green(`✅ Created ${successCount} ${type}(s)`));
429
+ }
430
+ if (skipCount > 0) {
431
+ console.log(kolor.yellow(`⚠️ Skipped ${skipCount} existing file(s)`));
432
+ }
433
+ console.log(kolor.dim("\n🌲 Happy camping!\n"));
434
+ }
435
+ async function createSingleContent(type, name, srcDir, config, defaultExt) {
436
+ // Check if user provided an extension
437
+ const hasExtension = name.includes(".");
438
+ const providedExt = hasExtension ? extname(name) : null;
439
+ const nameWithoutExt = hasExtension ? basename(name, providedExt) : name;
440
+ const slug = slugify(nameWithoutExt);
441
+ const today = formatDate(new Date());
442
+ const title = nameWithoutExt.charAt(0).toUpperCase() + nameWithoutExt.slice(1);
443
+ let targetPath;
444
+ let content;
445
+ let fileExt;
446
+ switch (type.toLowerCase()) {
447
+ case "page": {
448
+ // Priority: provided extension > template engine
449
+ if (providedExt) {
450
+ fileExt = providedExt;
451
+ }
452
+ else {
453
+ fileExt = defaultExt;
454
+ }
455
+ targetPath = join(srcDir, "pages", `${slug}${fileExt}`);
456
+ // Determine if we should use markdown content based on extension
457
+ const useMarkdown = fileExt === ".md";
458
+ if (useMarkdown) {
459
+ content = `---
460
+ layout: base${defaultExt}
461
+ title: ${title}
462
+ ---
463
+
464
+ # ${title}
465
+
466
+ Your new page content goes here.
467
+ `;
468
+ }
469
+ else {
470
+ content = `---
471
+ layout: base${defaultExt}
472
+ title: ${title}
473
+ ---
474
+
475
+ <h1>${title}</h1>
476
+ <p>Your new page content goes here.</p>
477
+ `;
478
+ }
479
+ break;
480
+ }
481
+ case "post": {
482
+ const postsDir = join(srcDir, "pages", "blog");
483
+ await ensureDir(postsDir);
484
+ if (providedExt) {
485
+ fileExt = providedExt;
486
+ }
487
+ else {
488
+ fileExt = defaultExt;
489
+ }
490
+ targetPath = join(postsDir, `${slug}${fileExt}`);
491
+ const useMarkdown = fileExt === ".md";
492
+ if (useMarkdown) {
493
+ content = `---
494
+ layout: base${defaultExt}
495
+ title: ${title}
496
+ date: ${today}
497
+ author: Your Name
498
+ ---
499
+
500
+ # ${title}
501
+
502
+ Your blog post content goes here.
503
+ `;
504
+ }
505
+ else {
506
+ content = `---
507
+ layout: base${defaultExt}
508
+ title: ${title}
509
+ date: ${today}
510
+ author: Your Name
511
+ ---
512
+
513
+ <h1>${title}</h1>
514
+ <p>Your blog post content goes here.</p>
515
+ `;
516
+ }
517
+ break;
518
+ }
519
+ case "layout": {
520
+ const layoutsDir = join(srcDir, "layouts");
521
+ await ensureDir(layoutsDir);
522
+ targetPath = join(layoutsDir, `${slug}.njk`);
523
+ fileExt = ".njk";
524
+ content = `<!DOCTYPE html>
525
+ <html lang="en">
526
+ <head>
527
+ <meta charset="UTF-8">
528
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
529
+ <title>{{ title or site.name }}</title>
530
+ <link rel="stylesheet" href="/style.css">
531
+ </head>
532
+ <body>
533
+ <main>
534
+ {% block content %}
535
+ {{ content | safe }}
536
+ {% endblock %}
537
+ </main>
538
+ </body>
539
+ </html>
540
+ `;
541
+ break;
542
+ }
543
+ case "component": {
544
+ const componentsDir = join(srcDir, "components");
545
+ await ensureDir(componentsDir);
546
+ targetPath = join(componentsDir, `${slug}.njk`);
547
+ fileExt = ".njk";
548
+ content = `{# ${title} Component #}
549
+ <div class="${slug}">
550
+ {{ content | safe }}
551
+ </div>
552
+ `;
553
+ break;
554
+ }
555
+ case "partial": {
556
+ const partialsDir = join(srcDir, "partials");
557
+ await ensureDir(partialsDir);
558
+ targetPath = join(partialsDir, `${slug}.njk`);
559
+ fileExt = ".njk";
560
+ content = `{# ${title} Partial #}
561
+ <div class="${slug}">
562
+ {# Your partial content here #}
563
+ </div>
564
+ `;
565
+ break;
566
+ }
567
+ case "collection": {
568
+ const collectionsDir = join(srcDir, "collections");
569
+ await ensureDir(collectionsDir);
570
+ targetPath = join(collectionsDir, `${slug}.json`);
571
+ fileExt = ".json";
572
+ content = `[
573
+ {
574
+ "id": 1,
575
+ "title": "Sample ${title} Item",
576
+ "description": "Add your collection items here"
577
+ }
578
+ ]
579
+ `;
580
+ break;
581
+ }
582
+ default:
583
+ console.log(kolor.red(`❌ Unknown content type: ${type}`));
584
+ console.log(kolor.dim("\nSupported types: page, post, layout, component, partial, collection\n"));
585
+ return { success: false, skipped: false };
586
+ }
587
+ if (existsSync(targetPath)) {
588
+ console.log(kolor.dim(` ⚠️ Skipped ${relative(cwd, targetPath)} (already exists)`));
589
+ return { success: false, skipped: true };
590
+ }
591
+ await ensureDir(dirname(targetPath));
592
+ await writeFile(targetPath, content, "utf8");
593
+ console.log(kolor.dim(` ✅ ${relative(cwd, targetPath)}`));
594
+ return { success: true, skipped: false };
595
+ }
596
+ //# sourceMappingURL=scaffolding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../src/scaffolding.ts"],"names":[],"mappings":"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"}