@kywi-software/cli 0.1.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 (36) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +44 -0
  3. package/bin/kywi.js +22 -0
  4. package/dist/__tests__/command-wiring.test.d.ts +2 -0
  5. package/dist/__tests__/command-wiring.test.d.ts.map +1 -0
  6. package/dist/__tests__/command-wiring.test.js +55 -0
  7. package/dist/__tests__/command-wiring.test.js.map +1 -0
  8. package/dist/__tests__/migrate-generate.test.d.ts +2 -0
  9. package/dist/__tests__/migrate-generate.test.d.ts.map +1 -0
  10. package/dist/__tests__/migrate-generate.test.js +53 -0
  11. package/dist/__tests__/migrate-generate.test.js.map +1 -0
  12. package/dist/commands/migrate-generate.d.ts +2 -0
  13. package/dist/commands/migrate-generate.d.ts.map +1 -0
  14. package/dist/commands/migrate-generate.js +64 -0
  15. package/dist/commands/migrate-generate.js.map +1 -0
  16. package/dist/commands/migrate-status.d.ts +2 -0
  17. package/dist/commands/migrate-status.d.ts.map +1 -0
  18. package/dist/commands/migrate-status.js +22 -0
  19. package/dist/commands/migrate-status.js.map +1 -0
  20. package/dist/commands/migrate.d.ts +2 -0
  21. package/dist/commands/migrate.d.ts.map +1 -0
  22. package/dist/commands/migrate.js +72 -0
  23. package/dist/commands/migrate.js.map +1 -0
  24. package/dist/commands/seed-demo.d.ts +2 -0
  25. package/dist/commands/seed-demo.d.ts.map +1 -0
  26. package/dist/commands/seed-demo.js +451 -0
  27. package/dist/commands/seed-demo.js.map +1 -0
  28. package/dist/commands/seed.d.ts +2 -0
  29. package/dist/commands/seed.d.ts.map +1 -0
  30. package/dist/commands/seed.js +163 -0
  31. package/dist/commands/seed.js.map +1 -0
  32. package/dist/index.d.ts +6 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +27 -0
  35. package/dist/index.js.map +1 -0
  36. package/package.json +52 -0
@@ -0,0 +1,451 @@
1
+ import { program } from 'commander';
2
+ import { resolve, dirname, join } from 'node:path';
3
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
4
+ import { fileURLToPath } from 'node:url';
5
+ /**
6
+ * `kywi seed:demo` — layer realistic reference/demo content on top of the base
7
+ * seed (which only creates a site, an admin, and an empty Home page).
8
+ *
9
+ * This is what makes the public reference site (Phase D) actually render
10
+ * something: pages under Home, published + draft blog posts, an event, a
11
+ * contact form, categories/tags, a featured image, and a "Recent Posts" feed.
12
+ *
13
+ * Idempotent: guarded on the presence of the `getting-started` post, so it is
14
+ * safe to run repeatedly (reset-db.sh calls it after the base seed).
15
+ */
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ // Repo root is packages/cli/src/commands -> up four levels.
18
+ const REPO_ROOT = resolve(__dirname, '..', '..', '..', '..');
19
+ // The reference app's local media storage root (config.media.localPath = ./uploads
20
+ // relative to apps/reference). The demo cover image is written here so the media
21
+ // file route (/api/v1/media/:id/file) can serve it.
22
+ const REFERENCE_UPLOADS = join(REPO_ROOT, 'apps', 'reference', 'uploads');
23
+ const SAMPLE_IMAGE = join(REPO_ROOT, 'e2e', 'fixtures', 'sample-image.png');
24
+ const COVER_KEY = 'demo/blog-cover.png';
25
+ program
26
+ .command('seed:demo')
27
+ .description('Seed realistic demo content (pages, blog posts, event, contact form, taxonomy, media, feed) for the reference site.')
28
+ .option('-c, --config <path>', 'Path to kywi.config.ts', 'kywi.config.ts')
29
+ .action(async (options) => {
30
+ const configPath = resolve(process.cwd(), options.config);
31
+ const configModule = await import(configPath);
32
+ const config = configModule.default;
33
+ const { createDb, kywiSites, kywiContent, createCategory, createTag, assignContentToCategory, assignTagToContent, createMediaRecord, createFeed, getFeedBySlug, resolveDatabaseUrl, explainDbError, } = await import('@kywi-software/core');
34
+ const { eq, and } = await import('drizzle-orm');
35
+ let dbUrl;
36
+ try {
37
+ dbUrl = resolveDatabaseUrl(config.db.url, 'postgres://localhost:5432/kywi_dev').url;
38
+ }
39
+ catch (err) {
40
+ console.error(`\n✖ ${err.message}\n`);
41
+ process.exit(1);
42
+ }
43
+ const db = createDb(dbUrl, config.db.provider);
44
+ try {
45
+ // ── Resolve site + admin + Home root ────────────────────────────────────
46
+ const siteSlug = config.sites?.[0]?.id ?? 'default';
47
+ const [site] = await db.select().from(kywiSites).where(eq(kywiSites.slug, siteSlug)).limit(1);
48
+ if (!site) {
49
+ console.error(`seed:demo — site "${siteSlug}" not found. Run \`kywi seed\` first.`);
50
+ process.exit(1);
51
+ }
52
+ const siteId = site.id;
53
+ const [home] = await db
54
+ .select()
55
+ .from(kywiContent)
56
+ .where(and(eq(kywiContent.slug, 'home'), eq(kywiContent.siteId, siteId)))
57
+ .limit(1);
58
+ if (!home) {
59
+ console.error('seed:demo — Home page not found. Run `kywi seed` first.');
60
+ process.exit(1);
61
+ }
62
+ const adminId = home.createdBy ?? null;
63
+ // Idempotency guard.
64
+ const [existing] = await db
65
+ .select({ id: kywiContent.id })
66
+ .from(kywiContent)
67
+ .where(and(eq(kywiContent.slug, 'getting-started'), eq(kywiContent.siteId, siteId)))
68
+ .limit(1);
69
+ if (existing) {
70
+ console.log('seed:demo — demo content already present, skipping content tree.');
71
+ }
72
+ else {
73
+ // ── Media: write the cover image + register it ────────────────────────
74
+ let coverId = null;
75
+ try {
76
+ const bytes = await readFile(SAMPLE_IMAGE);
77
+ const dest = join(REFERENCE_UPLOADS, COVER_KEY);
78
+ await mkdir(dirname(dest), { recursive: true });
79
+ await writeFile(dest, bytes);
80
+ const media = await createMediaRecord(db, {
81
+ siteId,
82
+ filename: 'blog-cover.png',
83
+ originalFilename: 'blog-cover.png',
84
+ mimeType: 'image/png',
85
+ fileSize: bytes.byteLength,
86
+ width: 1200,
87
+ height: 630,
88
+ storageKey: COVER_KEY,
89
+ uploadedBy: adminId ?? undefined,
90
+ });
91
+ coverId = media.id;
92
+ console.log(`Created demo media (${coverId}) -> ${COVER_KEY}`);
93
+ }
94
+ catch (err) {
95
+ console.warn('seed:demo — could not seed cover image (continuing without featured image):', err.message);
96
+ }
97
+ // ── Helper: insert a content node ─────────────────────────────────────
98
+ async function node(values) {
99
+ const [row] = await db
100
+ .insert(kywiContent)
101
+ .values({ siteId, createdBy: adminId, updatedBy: adminId, ...values })
102
+ .returning({ id: kywiContent.id });
103
+ return row;
104
+ }
105
+ const iso = (s) => new Date(s);
106
+ // ── Enrich the Home node so the homepage hero renders real DB content ──
107
+ // (base seed leaves it with a bare "Your site is ready" body). Title is
108
+ // left as "Home" because the admin site-tree tests assert on it.
109
+ await db
110
+ .update(kywiContent)
111
+ .set({
112
+ metaTitle: 'Build content-first sites with Kywi',
113
+ summary: 'Kywi renders every page, menu, and post straight from the database through a server-side scope — this whole site is proof.',
114
+ body: '<p>Welcome to the Kywi reference site. Everything you see — the navigation above, this paragraph, the posts below — is real content resolved server-side through <code>createKywiScope(config, db)</code>. Nothing is hardcoded.</p>',
115
+ updatedBy: adminId,
116
+ })
117
+ .where(eq(kywiContent.id, home.id));
118
+ // ── Top-level nav pages/folders under Home ────────────────────────────
119
+ await node({
120
+ parentId: home.id, title: 'About', slug: 'about', path: '/about/', depth: 1, sortOrder: 1,
121
+ status: 'published', baseType: 'content', contentTypeName: 'page', isNav: true,
122
+ publishedAt: iso('2026-04-02T00:00:00Z'),
123
+ summary: 'What Kywi is and why it exists.',
124
+ metaDescription: 'About the Kywi CMS reference site.',
125
+ body: '<p>Kywi is a modern, TypeScript-first content management system. This reference site is rendered entirely from the database through the server-side Kywi scope — navigation, pages, blog posts, feeds and this very paragraph all come from real content nodes.</p>' +
126
+ '<h2>How it works</h2>' +
127
+ '<p>Server components call <code>createKywiScope(config, db)</code> and resolve content by slug, build the navigation tree from <code>isNav</code> nodes, and run feeds through the feed engine — no hardcoded demo data.</p>',
128
+ });
129
+ const blog = await node({
130
+ parentId: home.id, title: 'Blog', slug: 'blog', path: '/blog/', depth: 1, sortOrder: 2,
131
+ status: 'published', baseType: 'folder', contentTypeName: 'page', isNav: true,
132
+ publishedAt: iso('2026-04-01T00:00:00Z'),
133
+ summary: 'Notes on building with Kywi.',
134
+ body: '<p>Articles about content modelling, layouts, and running Kywi in production.</p>',
135
+ });
136
+ const gettingStarted = await node({
137
+ parentId: blog.id, title: 'Getting Started with Kywi CMS', slug: 'getting-started',
138
+ path: '/blog/getting-started/', depth: 2, sortOrder: 0,
139
+ status: 'published', baseType: 'content', contentTypeName: 'blogPost', isNav: false,
140
+ publishedAt: iso('2026-05-01T09:00:00Z'),
141
+ featuredImageId: coverId,
142
+ summary: 'Set up your first Kywi-powered site with the scope SDK and content types.',
143
+ metaDescription: 'A walkthrough of installing Kywi and defining your first content types.',
144
+ body: '<p>Kywi CMS pairs a config-as-code content model with a server-side scope that renders straight from the database. This guide gets you from an empty project to a live page.</p>' +
145
+ '<h2>Install</h2>' +
146
+ '<p>Add <code>@kywi-software/core</code> and describe your sites and content types in <code>kywi.config.ts</code>.</p>' +
147
+ '<h2>Author</h2>' +
148
+ '<p>Create a page in the admin, publish it, and it appears on the public site immediately — this very post is proof.</p>',
149
+ });
150
+ await node({
151
+ parentId: blog.id, title: 'Content Modeling Best Practices', slug: 'content-modeling',
152
+ path: '/blog/content-modeling/', depth: 2, sortOrder: 1,
153
+ status: 'published', baseType: 'content', contentTypeName: 'blogPost', isNav: false,
154
+ publishedAt: iso('2026-05-12T09:00:00Z'),
155
+ summary: 'How to design content types, fields, and relationships that scale.',
156
+ body: '<p>Good content modelling is the foundation of a maintainable site. Kywi ships eight base types and fifteen field types so you can model most domains without custom tables.</p>' +
157
+ '<h2>Base types</h2><p>content, folder, media, event, gallery, link, form, and component.</p>',
158
+ });
159
+ const scaling = await node({
160
+ parentId: blog.id, title: 'Scaling Content with Feeds', slug: 'scaling-content',
161
+ path: '/blog/scaling-content/', depth: 2, sortOrder: 2,
162
+ status: 'published', baseType: 'content', contentTypeName: 'blogPost', isNav: false,
163
+ publishedAt: iso('2026-06-03T09:00:00Z'),
164
+ summary: 'Use saved feeds to render lists of content without hand-written queries.',
165
+ body: '<p>Feeds are saved, reusable queries. The homepage list you are reading is a real feed executed server-side through the feed engine.</p>',
166
+ });
167
+ // A draft post — must 404 for anonymous visitors.
168
+ await node({
169
+ parentId: blog.id, title: 'Upcoming: Realtime Collaboration', slug: 'draft-preview',
170
+ path: '/blog/draft-preview/', depth: 2, sortOrder: 3,
171
+ status: 'draft', baseType: 'content', contentTypeName: 'blogPost', isNav: false,
172
+ summary: 'A work-in-progress draft that should not be publicly visible.',
173
+ body: '<p>This draft is intentionally unpublished.</p>',
174
+ });
175
+ const events = await node({
176
+ parentId: home.id, title: 'Events', slug: 'events', path: '/events/', depth: 1, sortOrder: 3,
177
+ status: 'published', baseType: 'folder', contentTypeName: 'page', isNav: true,
178
+ publishedAt: iso('2026-04-01T00:00:00Z'),
179
+ summary: 'Meetups, launches, and workshops.',
180
+ body: '<p>Where to find the Kywi community.</p>',
181
+ });
182
+ await node({
183
+ parentId: events.id, title: 'Kywi 1.0 Launch Day', slug: 'launch-day',
184
+ path: '/events/launch-day/', depth: 2, sortOrder: 0,
185
+ status: 'published', baseType: 'event', contentTypeName: 'event', isNav: false,
186
+ publishedAt: iso('2026-06-20T09:00:00Z'),
187
+ startDate: iso('2026-08-15T17:00:00Z'),
188
+ endDate: iso('2026-08-15T20:00:00Z'),
189
+ location: 'Online — streamed live',
190
+ summary: 'Join us for the Kywi 1.0 launch livestream.',
191
+ body: '<p>A live walkthrough of everything new in Kywi 1.0, followed by community Q&amp;A.</p>',
192
+ });
193
+ // Contact form node — the public /contact page submits to /forms/contact/submit,
194
+ // which looks the form up by this slug and validates against formFields.
195
+ await node({
196
+ parentId: home.id, title: 'Contact', slug: 'contact', path: '/contact/', depth: 1, sortOrder: 4,
197
+ status: 'published', baseType: 'form', contentTypeName: 'form', isNav: true,
198
+ publishedAt: iso('2026-04-01T00:00:00Z'),
199
+ summary: 'Get in touch with the Kywi team.',
200
+ successMessage: 'Thanks for reaching out — we’ll get back to you soon.',
201
+ formFields: [
202
+ { name: 'name', type: 'text', label: 'Name', required: true },
203
+ { name: 'email', type: 'email', label: 'Email', required: true },
204
+ { name: 'message', type: 'textarea', label: 'Message', required: true },
205
+ ],
206
+ formSteps: [],
207
+ });
208
+ // ── Taxonomy ──────────────────────────────────────────────────────────
209
+ const news = await createCategory(db, { siteId, name: 'News', slug: 'news', sortOrder: 0 });
210
+ const tutorials = await createCategory(db, { siteId, name: 'Tutorials', slug: 'tutorials', sortOrder: 1 });
211
+ const product = await createCategory(db, { siteId, name: 'Product', slug: 'product', sortOrder: 2 });
212
+ const tagCms = await createTag(db, { siteId, slug: 'cms', label: 'CMS' });
213
+ const tagTs = await createTag(db, { siteId, slug: 'typescript', label: 'TypeScript' });
214
+ await createTag(db, { siteId, slug: 'nextjs', label: 'Next.js' });
215
+ await assignContentToCategory(db, gettingStarted.id, tutorials.id, true);
216
+ await assignContentToCategory(db, scaling.id, product.id);
217
+ await assignTagToContent(db, gettingStarted.id, tagCms.id);
218
+ await assignTagToContent(db, gettingStarted.id, tagTs.id);
219
+ await assignTagToContent(db, scaling.id, tagCms.id);
220
+ void news;
221
+ console.log('Created demo content tree (pages, posts, event, contact form, taxonomy).');
222
+ }
223
+ // ── Personalization demo: one audience + one page variant ──────────────────
224
+ // A "Paid Traffic" audience (utm.source == 'google') and an "Offers" page
225
+ // whose layout carries a page variant for that audience. An anonymous visitor
226
+ // sees the default offer; ?utm_source=google sees the paid-visitor variant.
227
+ // Also seeds a French "About" sibling so locale routing / nav / Accept-Language
228
+ // have real data. Powers journey-05/06/11 and the public-personalization e2e.
229
+ const { createAudience } = await import('@kywi-software/core/audiences');
230
+ const [existingOffers] = await db
231
+ .select({ id: kywiContent.id })
232
+ .from(kywiContent)
233
+ .where(and(eq(kywiContent.slug, 'offers'), eq(kywiContent.siteId, siteId)))
234
+ .limit(1);
235
+ if (existingOffers) {
236
+ console.log('seed:demo — personalization demo already present, skipping.');
237
+ }
238
+ else {
239
+ const paidTraffic = await createAudience(db, {
240
+ siteId,
241
+ name: 'Paid Traffic',
242
+ description: 'Visitors arriving from a paid Google campaign (utm_source=google).',
243
+ priority: 1,
244
+ status: 'active',
245
+ conditionGroups: [
246
+ { conditions: [{ type: 'instant', signal: 'utm.source', operator: 'equals', value: 'google' }] },
247
+ ],
248
+ });
249
+ const mkSection = (id, heading, copy) => ({
250
+ id,
251
+ type: 'section',
252
+ style: {},
253
+ columns: [
254
+ {
255
+ id: `${id}-c`,
256
+ width: 12,
257
+ nodes: [
258
+ { id: `${id}-h`, type: 'heading', instanceId: `${id}-h`, props: { text: heading, level: 'h2' }, style: {} },
259
+ { id: `${id}-t`, type: 'text', instanceId: `${id}-t`, props: { content: copy }, style: {} },
260
+ ],
261
+ },
262
+ ],
263
+ });
264
+ const offersLayout = {
265
+ regions: {
266
+ main: [mkSection('offers-default', 'Standard pricing for everyone', 'Our public pricing, available to every visitor.')],
267
+ },
268
+ pageVariants: [
269
+ {
270
+ id: 'pv-paid',
271
+ audienceId: paidTraffic.id,
272
+ regions: {
273
+ main: [mkSection('offers-paid', 'Welcome back — your exclusive paid-visitor offer', 'Because you arrived from a campaign, here is 20% off your first plan.')],
274
+ },
275
+ },
276
+ ],
277
+ };
278
+ await db
279
+ .insert(kywiContent)
280
+ .values({
281
+ siteId, createdBy: adminId, updatedBy: adminId,
282
+ parentId: home.id, title: 'Offers', slug: 'offers', path: '/offers/', depth: 1, sortOrder: 5,
283
+ status: 'published', baseType: 'content', contentTypeName: 'page', isNav: false,
284
+ publishedAt: new Date('2026-04-02T00:00:00Z'),
285
+ summary: 'Personalized offers — default for everyone, tailored for paid traffic.',
286
+ layout: offersLayout,
287
+ });
288
+ // French sibling of the About page (same parentId + slug, locale 'fr').
289
+ await db
290
+ .insert(kywiContent)
291
+ .values({
292
+ siteId, createdBy: adminId, updatedBy: adminId,
293
+ parentId: home.id, title: 'À propos', slug: 'about', path: '/about/', depth: 1, sortOrder: 1,
294
+ status: 'published', baseType: 'content', contentTypeName: 'page', isNav: true, locale: 'fr',
295
+ publishedAt: new Date('2026-04-02T00:00:00Z'),
296
+ summary: "Ce qu'est Kywi et pourquoi il existe.",
297
+ metaDescription: 'À propos du site de référence Kywi CMS.',
298
+ body: '<p>Kywi est un système de gestion de contenu moderne, pensé pour TypeScript. Ce site de référence est rendu entièrement depuis la base de données via le scope Kywi côté serveur — la navigation, les pages et ce paragraphe proviennent tous de vrais nœuds de contenu.</p>',
299
+ });
300
+ console.log(`Created personalization demo (audience "Paid Traffic" ${paidTraffic.id}, Offers page + variant, French About sibling).`);
301
+ }
302
+ // ── Theme Styleguide page (guarded separately) ────────────────────────────
303
+ // A kitchen-sink layout that places every hook-bearing module type plus two
304
+ // responsive sections, so the J03 theming contract (semantic data-kywi-*
305
+ // hooks, kywi-module--{type} classes, design-token CSS vars, per-breakpoint
306
+ // token application and responsive visibility) is observable on a real
307
+ // public page at /styleguide. Additive demo content.
308
+ const [existingStyleguide] = await db
309
+ .select({ id: kywiContent.id })
310
+ .from(kywiContent)
311
+ .where(and(eq(kywiContent.slug, 'styleguide'), eq(kywiContent.siteId, siteId)))
312
+ .limit(1);
313
+ if (existingStyleguide) {
314
+ console.log('seed:demo — theme styleguide already present, skipping.');
315
+ }
316
+ else {
317
+ const m = (id, type, props, style = {}) => ({ id, type, instanceId: id, props, style });
318
+ const col = (id, width, nodes) => ({ id, width, nodes });
319
+ const sec = (id, columns, style = {}) => ({ id, type: 'section', style, columns });
320
+ const styleguideLayout = {
321
+ regions: {
322
+ main: [
323
+ sec('sg-headings', [
324
+ col('sg-headings-c', 12, [
325
+ m('sg-h1', 'heading', { text: 'Heading level 1', level: 'h1' }),
326
+ m('sg-h2', 'heading', { text: 'Heading level 2', level: 'h2' }),
327
+ m('sg-h3', 'heading', { text: 'Heading level 3', level: 'h3' }),
328
+ m('sg-h4', 'heading', { text: 'Heading level 4', level: 'h4' }),
329
+ m('sg-copy', 'text', {
330
+ content: 'Each heading carries data-level, so .kywi-module--heading[data-level="1"] .. [data-level="6"] target them individually.',
331
+ }),
332
+ ]),
333
+ ]),
334
+ sec('sg-buttons', [
335
+ col('sg-buttons-c', 12, [
336
+ m('sg-btn-primary', 'button', { label: 'Primary', href: '#', variant: 'primary' }),
337
+ m('sg-btn-secondary', 'button', { label: 'Secondary', href: '#', variant: 'secondary' }),
338
+ m('sg-btn-ghost', 'button', { label: 'Ghost', href: '#', variant: 'ghost' }),
339
+ ]),
340
+ ]),
341
+ sec('sg-cards', [
342
+ col('sg-card-c', 6, [
343
+ m('sg-card', 'card', {
344
+ title: 'Card module',
345
+ body: 'Styleable via .kywi-module--card and the --kywi-* tokens (background, radius, shadow).',
346
+ footer: 'Card footer',
347
+ }),
348
+ ]),
349
+ col('sg-hero-c', 6, [
350
+ m('sg-hero', 'hero', {
351
+ headline: 'Hero module',
352
+ subtext: 'A hero with an overlaid call to action.',
353
+ buttonLabel: 'Call to action',
354
+ buttonHref: '#',
355
+ }),
356
+ ]),
357
+ ]),
358
+ sec('sg-interactive', [
359
+ col('sg-interactive-c', 12, [
360
+ m('sg-accordion', 'accordion', {
361
+ title: 'Accordion panel',
362
+ content: '<p>Accordion body content, shown because this panel is open.</p>',
363
+ open: true,
364
+ }),
365
+ m('sg-tabs', 'tabs', {
366
+ activeTab: 0,
367
+ tabs: [
368
+ { label: 'Tab one', content: '<p>First tab panel.</p>' },
369
+ { label: 'Tab two', content: '<p>Second tab panel.</p>' },
370
+ ],
371
+ }),
372
+ ]),
373
+ ]),
374
+ sec('sg-responsive', [
375
+ col('sg-responsive-c', 12, [
376
+ m('sg-responsive-h', 'heading', { text: 'Responsive padding section', level: 'h2' }),
377
+ m('sg-responsive-t', 'text', {
378
+ content: 'padding-top resolves to spacing.sm on mobile, spacing.md on tablet, spacing.lg on desktop.',
379
+ }),
380
+ ]),
381
+ ], {
382
+ paddingTop: 'spacing.sm',
383
+ 'paddingTop@tablet': 'spacing.md',
384
+ 'paddingTop@desktop': 'spacing.lg',
385
+ backgroundColor: 'colors.backgroundLight',
386
+ }),
387
+ sec('sg-hidden-mobile', [
388
+ col('sg-hidden-mobile-c', 12, [
389
+ m('sg-hidden-h', 'heading', { text: 'Hidden on mobile', level: 'h2' }),
390
+ m('sg-hidden-t', 'text', {
391
+ content: 'This section is display:none below 768px via a hidden@mobile style key.',
392
+ }),
393
+ ]),
394
+ ], { 'hidden@mobile': 'true' }),
395
+ ],
396
+ },
397
+ };
398
+ await db.insert(kywiContent).values({
399
+ siteId,
400
+ createdBy: adminId,
401
+ updatedBy: adminId,
402
+ parentId: home.id,
403
+ title: 'Theme Styleguide',
404
+ slug: 'styleguide',
405
+ path: '/styleguide/',
406
+ depth: 1,
407
+ sortOrder: 6,
408
+ status: 'published',
409
+ baseType: 'content',
410
+ contentTypeName: 'page',
411
+ isNav: false,
412
+ publishedAt: new Date('2026-04-02T00:00:00Z'),
413
+ summary: 'A kitchen-sink page exercising every themable module and responsive sections.',
414
+ layout: styleguideLayout,
415
+ });
416
+ console.log('Created theme styleguide page (/styleguide).');
417
+ }
418
+ // ── "Recent Posts" feed (guarded separately) ──────────────────────────────
419
+ const existingFeed = await getFeedBySlug(db, 'recent-posts', siteId);
420
+ if (existingFeed) {
421
+ console.log('seed:demo — "recent-posts" feed already present, skipping.');
422
+ }
423
+ else {
424
+ await createFeed(db, {
425
+ siteId,
426
+ name: 'Recent Posts',
427
+ slug: 'recent-posts',
428
+ query: {
429
+ contentType: 'blogPost',
430
+ siteId,
431
+ status: 'published',
432
+ sort: { field: 'publishedAt', direction: 'desc' },
433
+ limit: 5,
434
+ },
435
+ ...(adminId ? { createdBy: adminId } : {}),
436
+ });
437
+ console.log('Created "Recent Posts" feed (slug: recent-posts).');
438
+ }
439
+ console.log('\nseed:demo complete.');
440
+ process.exit(0);
441
+ }
442
+ catch (err) {
443
+ const friendly = explainDbError(err, dbUrl);
444
+ if (friendly) {
445
+ console.error(`\n✖ ${friendly}\n`);
446
+ process.exit(1);
447
+ }
448
+ throw err;
449
+ }
450
+ });
451
+ //# sourceMappingURL=seed-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-demo.js","sourceRoot":"","sources":["../../src/commands/seed-demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":""}