@actuate-media/cli 0.5.0 → 0.7.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @actuate-media/cli@0.5.0 build /home/runner/work/actuatecms/actuatecms/packages/cli
2
+ > @actuate-media/cli@0.7.0 build /home/runner/work/actuatecms/actuatecms/packages/cli
3
3
  > tsc
4
4
 
@@ -1,12 +1,12 @@
1
1
 
2
- > @actuate-media/cli@0.5.0 test /home/runner/work/actuatecms/actuatecms/packages/cli
2
+ > @actuate-media/cli@0.7.0 test /home/runner/work/actuatecms/actuatecms/packages/cli
3
3
  > vitest run
4
4
 
5
5
 
6
6
   RUN  v4.1.8 /home/runner/work/actuatecms/actuatecms/packages/cli
7
7
 
8
- ✓ dist/__tests__/db-sync.test.js (6 tests) 268ms
9
- ✓ src/__tests__/db-sync.test.ts (6 tests) 337ms
8
+ ✓ dist/__tests__/db-sync.test.js (6 tests) 423ms
9
+ ✓ src/__tests__/db-sync.test.ts (6 tests) 330ms
10
10
  - Reading canonical Actuate schema...
11
11
  ✔ Actuate CMS models added to schema.
12
12
  - Running prisma generate...
@@ -21,21 +21,21 @@
21
21
 
22
22
  - Reading canonical Actuate schema...
23
23
  ✔ Actuate CMS models added to schema.
24
- - Running prisma generate...
25
24
  stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > is idempotent without --force
26
25
  ✔ Prisma client generated.
27
26
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
28
27
 
28
+ - Running prisma generate...
29
29
  - Reading canonical Actuate schema...
30
30
  ℹ Actuate CMS models already present in schema. Use --force to overwrite.
31
- ✓ dist/__tests__/db-init.test.js (4 tests) 259ms
31
+ ✓ dist/__tests__/db-init.test.js (4 tests) 183ms
32
32
  - Reading canonical Actuate schema...
33
+ ✔ Actuate CMS models added to schema.
33
34
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > injects canonical models with @@map and no duplicate datasource/generator
35
+ - Running prisma generate...
34
36
  ✔ Prisma client generated.
35
37
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
36
38
 
37
- ✔ Actuate CMS models added to schema.
38
- - Running prisma generate...
39
39
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > fails clearly when cms-core cannot be located
40
40
  ℹ Install it first: `npm install @actuate-media/cms-core`.
41
41
 
@@ -50,11 +50,11 @@
50
50
  - Running prisma generate...
51
51
  - Reading canonical Actuate schema...
52
52
  ℹ Actuate CMS models already present in schema. Use --force to overwrite.
53
- ✓ src/__tests__/db-init.test.ts (4 tests) 395ms
54
- ✓ dist/__tests__/deployment-diagnostics.test.js (5 tests) 59ms
55
- ✓ src/__tests__/deployment-diagnostics.test.ts (5 tests) 42ms
56
- ✓ dist/__tests__/seed.test.js (4 tests) 62ms
57
- ✓ src/__tests__/seed.test.ts (4 tests) 69ms
53
+ ✓ src/__tests__/db-init.test.ts (4 tests) 259ms
54
+ ✓ dist/__tests__/seed.test.js (5 tests) 88ms
55
+ ✓ dist/__tests__/deployment-diagnostics.test.js (5 tests) 61ms
56
+ ✓ src/__tests__/deployment-diagnostics.test.ts (5 tests) 60ms
57
+ ✓ src/__tests__/seed.test.ts (5 tests) 192ms
58
58
  - Reading canonical Actuate schema...
59
59
  ✔ Actuate CMS models added to schema.
60
60
  - Running prisma generate...
@@ -62,20 +62,20 @@
62
62
  ✔ Prisma client generated.
63
63
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
64
64
 
65
- ✓ dist/__tests__/schema-fragment.test.js (1 test) 206ms
65
+ ✓ dist/__tests__/schema-fragment.test.js (1 test) 149ms
66
66
  - Reading canonical Actuate schema...
67
67
  ✔ Actuate CMS models added to schema.
68
- - Running prisma generate...
69
68
  stdout | src/__tests__/schema-fragment.test.ts > db:init schema fragment > injects all deploy-critical Actuate models
70
69
  ✔ Prisma client generated.
71
70
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
71
+ - Running prisma generate...
72
72
 
73
- ✓ src/__tests__/schema-fragment.test.ts (1 test) 181ms
74
- ✓ dist/__tests__/init.test.js (2 tests) 28ms
75
- ✓ src/__tests__/init.test.ts (2 tests) 33ms
73
+ ✓ src/__tests__/schema-fragment.test.ts (1 test) 233ms
74
+ ✓ dist/__tests__/init.test.js (2 tests) 62ms
75
+ ✓ src/__tests__/init.test.ts (2 tests) 148ms
76
76
 
77
77
   Test Files  12 passed (12)
78
-  Tests  44 passed (44)
79
-  Start at  15:30:20
80
-  Duration  20.76s (transform 1.62s, setup 0ms, import 5.02s, tests 1.94s, environment 2ms)
78
+  Tests  46 passed (46)
79
+  Start at  02:17:00
80
+  Duration  21.65s (transform 2.28s, setup 0ms, import 6.52s, tests 2.19s, environment 11ms)
81
81
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @actuate-media/cli
2
2
 
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - aa4bd1a: Unify the page content model at write time (ADR 0002). Visual Page-Builder pages now compile their `_layout` tree to the canonical `data.sections[]` on every save, so every reader (SDK, MCP, search, content graph, `/resolve`) sees one contract instead of the lazy read-time bridge.
8
+ - **cms-core**: `createDocument`/`updateDocument` derive `sections` from a `layout` envelope; the `/page-sections/*` write routes refuse a builder-owned page (one with `_layout`) with HTTP 409 to prevent silently-overwritten edits; the `/resolve` bridge is now a legacy fallback for un-migrated pages. New `migratePageBuilderSections()` export backfills legacy pages (idempotent).
9
+ - **cms-admin**: the flat Page Editor opens a builder-owned page read-only with an "Open in Page Builder" action; `EditorPage` gains a `builderOwned` flag.
10
+ - **cli**: new `actuate migrate:sections` command (with `--dry-run` / `--batch-size`) to backfill canonical sections for legacy page-builder documents.
11
+
12
+ ## 0.6.0
13
+
14
+ ### Minor Changes
15
+
16
+ - 31224ae: WS-E (E4 follow-up): seed demo navigation menus and render a footer nav so
17
+ navigation works end-to-end on a fresh scaffold.
18
+ - **cli:** `actuate seed --demo` now seeds two `navigations` documents — a
19
+ `main` menu (location `header`, linking Home/About/Contact) and a `footer`
20
+ menu (location `footer`, linking Privacy/Terms) — so the shipped `<SiteNav>`
21
+ renders real links out of the box instead of an empty header. Items point at
22
+ the demo pages by public URL.
23
+ - **create-actuate-cms:** the generated site layout now also fetches the
24
+ `footer` menu and renders it in a semantic `<footer>` (with a copyright line),
25
+ alongside the existing header nav. The body is a flex column so the footer
26
+ sits at the bottom. Both navs still degrade gracefully when no menu exists.
27
+
3
28
  ## 0.5.0
4
29
 
5
30
  ### Minor Changes
@@ -5,7 +5,7 @@ vi.mock('@actuate-media/cms-core', () => ({
5
5
  sanitizeHtml: vi.fn((value) => value.replace(/<script[\s\S]*?<\/script>/gi, '')),
6
6
  createInitialAdmin: vi.fn(),
7
7
  }));
8
- import { createSeedDocument, ensureSeedAdmin, normalizeSeedPayload } from '../commands/seed.js';
8
+ import { createSeedDocument, ensureSeedAdmin, normalizeSeedPayload, DEMO_NAVIGATIONS, } from '../commands/seed.js';
9
9
  afterEach(() => {
10
10
  vi.unstubAllEnvs();
11
11
  });
@@ -112,4 +112,23 @@ describe('seed document creation', () => {
112
112
  });
113
113
  });
114
114
  });
115
+ describe('demo navigations', () => {
116
+ // The scaffold site layout fetches menus by the `main` and `footer` slugs, so
117
+ // the demo seed must provide exactly those — guard against slug drift.
118
+ it('seeds header (main) and footer menus with well-formed items', () => {
119
+ const bySlug = new Map(DEMO_NAVIGATIONS.map((n) => [n.slug, n]));
120
+ expect(bySlug.has('main')).toBe(true);
121
+ expect(bySlug.has('footer')).toBe(true);
122
+ expect(bySlug.get('main')?.location).toBe('header');
123
+ expect(bySlug.get('footer')?.location).toBe('footer');
124
+ for (const nav of DEMO_NAVIGATIONS) {
125
+ expect(nav.items.length).toBeGreaterThan(0);
126
+ for (const item of nav.items) {
127
+ expect(typeof item.label).toBe('string');
128
+ expect(item.label.length).toBeGreaterThan(0);
129
+ expect(item.url.startsWith('/')).toBe(true);
130
+ }
131
+ }
132
+ });
133
+ });
115
134
  //# sourceMappingURL=seed.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seed.test.js","sourceRoot":"","sources":["../../src/__tests__/seed.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.test.js","sourceRoot":"","sources":["../../src/__tests__/seed.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerMigrateSectionsCommand(program: Command): void;
3
+ //# sourceMappingURL=migrate-sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-sections.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-sections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA+DnC,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASrE"}
@@ -0,0 +1,56 @@
1
+ import ora from 'ora';
2
+ import { logger } from '../utils/logger.js';
3
+ import { connectProjectDatabase } from '../utils/database.js';
4
+ /**
5
+ * `actuate migrate:sections` — backfill canonical `data.sections` for legacy
6
+ * page-builder documents (ADR 0002). Idempotent: safe to re-run.
7
+ */
8
+ async function runMigrateSections(options) {
9
+ const dryRun = options.dryRun ?? false;
10
+ const batchSize = options.batchSize ? Number.parseInt(options.batchSize, 10) : undefined;
11
+ if (batchSize !== undefined && (!Number.isFinite(batchSize) || batchSize <= 0)) {
12
+ logger.error('--batch-size must be a positive integer.');
13
+ process.exit(1);
14
+ }
15
+ let connection = null;
16
+ const spinner = ora(dryRun ? 'Scanning page-builder documents (dry run)…' : 'Backfilling page sections…').start();
17
+ try {
18
+ connection = await connectProjectDatabase();
19
+ const db = connection.db;
20
+ const { migratePageBuilderSections } = await import('@actuate-media/cms-core');
21
+ // Run as the system admin so per-collection update access is satisfied.
22
+ const admin = await db.user.findFirst({ where: { role: 'ADMIN' } });
23
+ if (!admin) {
24
+ spinner.fail('No ADMIN user found. Create an admin (setup wizard or seed) first.');
25
+ process.exit(1);
26
+ }
27
+ const ctx = { userId: admin.id, role: 'ADMIN', db };
28
+ const result = await migratePageBuilderSections(ctx, { dryRun, batchSize });
29
+ spinner.succeed(dryRun
30
+ ? `Dry run complete — ${result.migrated} document(s) would be migrated.`
31
+ : `Migrated ${result.migrated} document(s).`);
32
+ logger.info(` Scanned: ${result.scanned}`);
33
+ logger.info(` Migrated: ${result.migrated}`);
34
+ logger.info(` Skipped: ${result.skipped}`);
35
+ if (result.migratedIds.length > 0) {
36
+ logger.info(` IDs: ${result.migratedIds.join(', ')}`);
37
+ }
38
+ }
39
+ catch (err) {
40
+ const message = err instanceof Error ? err.message : String(err);
41
+ spinner.fail(`Section migration failed: ${message}`);
42
+ process.exit(1);
43
+ }
44
+ finally {
45
+ await connection?.disconnect();
46
+ }
47
+ }
48
+ export function registerMigrateSectionsCommand(program) {
49
+ program
50
+ .command('migrate:sections')
51
+ .description('Backfill canonical page sections for legacy page-builder documents (ADR 0002). Idempotent.')
52
+ .option('--dry-run', 'Report what would change without writing')
53
+ .option('--batch-size <n>', 'Documents to scan per DB page (default 100)')
54
+ .action(runMigrateSections);
55
+ }
56
+ //# sourceMappingURL=migrate-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-sections.js","sourceRoot":"","sources":["../../src/commands/migrate-sections.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,14 @@
1
1
  import { Command } from 'commander';
2
+ export declare const DEMO_NAVIGATIONS: {
3
+ name: string;
4
+ slug: string;
5
+ location: string;
6
+ items: {
7
+ id: string;
8
+ label: string;
9
+ url: string;
10
+ }[];
11
+ }[];
2
12
  export interface NormalizedSeedDocument {
3
13
  collection: string;
4
14
  data: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAuKnC,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,sBAAsB,EAAE,CAAA;IACnC,OAAO,EAAE,oBAAoB,EAAE,CAAA;CAChC;AAyBD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,qBAAqB,CAkC7E;AA8HD,wBAAsB,eAAe,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBtE;AAoBD,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgCf;AA0GD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAe1D"}
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA+JnC,eAAO,MAAM,gBAAgB;;;;;;;;;GAoB5B,CAAA;AAaD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,sBAAsB,EAAE,CAAA;IACnC,OAAO,EAAE,oBAAoB,EAAE,CAAA;CAChC;AAyBD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,qBAAqB,CAkC7E;AAwED,wBAAsB,eAAe,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBtE;AAoBD,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,sBAAsB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgCf;AAqHD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAe1D"}
@@ -1,11 +1,11 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { existsSync } from 'node:fs';
3
- import { createRequire } from 'node:module';
4
3
  import path from 'node:path';
5
4
  import { createInterface } from 'node:readline/promises';
6
5
  import { pathToFileURL } from 'node:url';
7
6
  import ora from 'ora';
8
7
  import { logger } from '../utils/logger.js';
8
+ import { connectProjectDatabase } from '../utils/database.js';
9
9
  async function confirm(question) {
10
10
  const rl = createInterface({ input: process.stdin, output: process.stdout });
11
11
  const answer = await rl.question(`${question} (y/N) `);
@@ -145,6 +145,30 @@ const DEMO_FORMS = [
145
145
  successMessage: 'Thank you for your feedback!',
146
146
  },
147
147
  ];
148
+ // Demo navigation menus. Items reference the demo pages by their public URL so
149
+ // the scaffold header/footer render real links out of the box. `location` is
150
+ // admin metadata; the public site looks menus up by `slug` (`main`/`footer`).
151
+ export const DEMO_NAVIGATIONS = [
152
+ {
153
+ name: 'Main Menu',
154
+ slug: 'main',
155
+ location: 'header',
156
+ items: [
157
+ { id: 'nav-home', label: 'Home', url: '/' },
158
+ { id: 'nav-about', label: 'About', url: '/about' },
159
+ { id: 'nav-contact', label: 'Contact', url: '/contact' },
160
+ ],
161
+ },
162
+ {
163
+ name: 'Footer Menu',
164
+ slug: 'footer',
165
+ location: 'footer',
166
+ items: [
167
+ { id: 'nav-privacy', label: 'Privacy Policy', url: '/privacy-policy' },
168
+ { id: 'nav-terms', label: 'Terms of Service', url: '/terms' },
169
+ ],
170
+ },
171
+ ];
148
172
  const DEMO_USERS = [
149
173
  { email: 'editor@example.com', name: 'Demo Editor', role: 'EDITOR' },
150
174
  { email: 'author@example.com', name: 'Demo Author', role: 'AUTHOR' },
@@ -224,7 +248,7 @@ async function runSeed(options) {
224
248
  }
225
249
  let seededDb = null;
226
250
  try {
227
- seededDb = await getSeedDatabase();
251
+ seededDb = await connectProjectDatabase();
228
252
  const db = seededDb.db;
229
253
  if (options.reset) {
230
254
  const yes = await confirm('This will delete ALL existing documents and versions. Continue?');
@@ -256,44 +280,6 @@ async function runSeed(options) {
256
280
  await seededDb?.disconnect();
257
281
  }
258
282
  }
259
- async function getSeedDatabase() {
260
- const { getDB, initDB, isDBInitialized } = await import('@actuate-media/cms-core');
261
- if (isDBInitialized()) {
262
- return { db: getDB(), disconnect: async () => { } };
263
- }
264
- const db = await createProjectPrismaClient();
265
- initDB(db);
266
- return {
267
- db,
268
- disconnect: async () => {
269
- if (typeof db.$disconnect === 'function') {
270
- await db.$disconnect();
271
- }
272
- },
273
- };
274
- }
275
- async function createProjectPrismaClient() {
276
- if (!process.env.DATABASE_URL) {
277
- throw new Error('DATABASE_URL is required to run seed/populate.');
278
- }
279
- const requireFromProject = createRequire(path.join(process.cwd(), 'package.json'));
280
- const generatedClient = path.resolve('generated', 'prisma', 'client.ts');
281
- if (existsSync(generatedClient)) {
282
- const [{ tsImport }, adapterModule, pgModule] = await Promise.all([
283
- import('tsx/esm/api'),
284
- import(pathToFileURL(requireFromProject.resolve('@prisma/adapter-pg')).href),
285
- import(pathToFileURL(requireFromProject.resolve('pg')).href),
286
- ]);
287
- const { PrismaClient } = (await tsImport(pathToFileURL(generatedClient).href, import.meta.url));
288
- const { PrismaPg } = adapterModule;
289
- const pg = pgModule.default ?? pgModule;
290
- const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
291
- const adapter = new PrismaPg(pool);
292
- return new PrismaClient({ adapter });
293
- }
294
- const clientModule = (await import(pathToFileURL(requireFromProject.resolve('@prisma/client')).href));
295
- return new clientModule.PrismaClient();
296
- }
297
283
  export async function ensureSeedAdmin(db) {
298
284
  const existing = await db.user.findFirst({ where: { role: 'ADMIN' } });
299
285
  if (existing)
@@ -388,6 +374,15 @@ async function seedDemoData(db) {
388
374
  });
389
375
  formsCreated++;
390
376
  }
377
+ let navigationsCreated = 0;
378
+ for (const navigation of DEMO_NAVIGATIONS) {
379
+ await createSeedDocument(db, userId, {
380
+ collection: 'navigations',
381
+ data: navigation,
382
+ status: 'PUBLISHED',
383
+ });
384
+ navigationsCreated++;
385
+ }
391
386
  let usersCreated = 0;
392
387
  for (const user of DEMO_USERS) {
393
388
  const exists = await db.user.findFirst({ where: { email: user.email } });
@@ -406,10 +401,11 @@ async function seedDemoData(db) {
406
401
  }
407
402
  }
408
403
  spinner.succeed('Demo data seeded successfully.');
409
- logger.info(` Pages: ${pagesCreated}`);
410
- logger.info(` Posts: ${postsCreated}`);
411
- logger.info(` Forms: ${formsCreated}`);
412
- logger.info(` Users: ${usersCreated} (+ existing admin)`);
404
+ logger.info(` Pages: ${pagesCreated}`);
405
+ logger.info(` Posts: ${postsCreated}`);
406
+ logger.info(` Forms: ${formsCreated}`);
407
+ logger.info(` Navigations: ${navigationsCreated}`);
408
+ logger.info(` Users: ${usersCreated} (+ existing admin)`);
413
409
  }
414
410
  async function seedFromFile(db, filePath) {
415
411
  if (!existsSync(filePath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import { registerMigrateCommand } from './commands/migrate.js';
4
+ import { registerMigrateSectionsCommand } from './commands/migrate-sections.js';
4
5
  import { registerGenerateCommand } from './commands/generate.js';
5
6
  import { registerSeedCommand } from './commands/seed.js';
6
7
  import { registerImportCommand } from './commands/import.js';
@@ -18,6 +19,7 @@ program
18
19
  .description('Actuate CMS — CLI toolkit for migrations, codegen, and more')
19
20
  .version('0.1.0');
20
21
  registerMigrateCommand(program);
22
+ registerMigrateSectionsCommand(program);
21
23
  registerGenerateCommand(program);
22
24
  registerSeedCommand(program);
23
25
  registerImportCommand(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,0BAA0B,CAAC,OAAO,CAAC,CAAA;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,0BAA0B,CAAC,OAAO,CAAC,CAAA;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,8BAA8B,CAAC,OAAO,CAAC,CAAA;AACvC,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,0BAA0B,CAAC,OAAO,CAAC,CAAA;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,0BAA0B,CAAC,OAAO,CAAC,CAAA;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared helper for CLI commands that need a live connection to the consumer
3
+ * project's database (seed, populate, data migrations…).
4
+ *
5
+ * Resolution order mirrors how a scaffolded Actuate project exposes Prisma:
6
+ * 1. If `cms-core` already has an initialized client (e.g. set up by the host
7
+ * app in-process), reuse it.
8
+ * 2. Otherwise build a client from the project's generated Prisma client
9
+ * (`generated/prisma/client.ts`, Prisma 7 + pg driver adapter).
10
+ * 3. Fall back to a plain `@prisma/client` resolved from the project.
11
+ *
12
+ * The returned `disconnect()` only tears down clients this helper created — a
13
+ * pre-initialized in-process client is left untouched.
14
+ */
15
+ export declare function connectProjectDatabase(): Promise<{
16
+ db: any;
17
+ disconnect: () => Promise<void>;
18
+ }>;
19
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IAEtD,EAAE,EAAE,GAAG,CAAA;IACP,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC,CAAC,CAiBD"}
@@ -0,0 +1,58 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+ /**
6
+ * Shared helper for CLI commands that need a live connection to the consumer
7
+ * project's database (seed, populate, data migrations…).
8
+ *
9
+ * Resolution order mirrors how a scaffolded Actuate project exposes Prisma:
10
+ * 1. If `cms-core` already has an initialized client (e.g. set up by the host
11
+ * app in-process), reuse it.
12
+ * 2. Otherwise build a client from the project's generated Prisma client
13
+ * (`generated/prisma/client.ts`, Prisma 7 + pg driver adapter).
14
+ * 3. Fall back to a plain `@prisma/client` resolved from the project.
15
+ *
16
+ * The returned `disconnect()` only tears down clients this helper created — a
17
+ * pre-initialized in-process client is left untouched.
18
+ */
19
+ export async function connectProjectDatabase() {
20
+ const { getDB, initDB, isDBInitialized } = await import('@actuate-media/cms-core');
21
+ if (isDBInitialized()) {
22
+ return { db: getDB(), disconnect: async () => { } };
23
+ }
24
+ const db = await createProjectPrismaClient();
25
+ initDB(db);
26
+ return {
27
+ db,
28
+ disconnect: async () => {
29
+ if (typeof db.$disconnect === 'function') {
30
+ await db.$disconnect();
31
+ }
32
+ },
33
+ };
34
+ }
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- see above.
36
+ async function createProjectPrismaClient() {
37
+ if (!process.env.DATABASE_URL) {
38
+ throw new Error('DATABASE_URL is required to connect to the project database.');
39
+ }
40
+ const requireFromProject = createRequire(path.join(process.cwd(), 'package.json'));
41
+ const generatedClient = path.resolve('generated', 'prisma', 'client.ts');
42
+ if (existsSync(generatedClient)) {
43
+ const [{ tsImport }, adapterModule, pgModule] = await Promise.all([
44
+ import('tsx/esm/api'),
45
+ import(pathToFileURL(requireFromProject.resolve('@prisma/adapter-pg')).href),
46
+ import(pathToFileURL(requireFromProject.resolve('pg')).href),
47
+ ]);
48
+ const { PrismaClient } = (await tsImport(pathToFileURL(generatedClient).href, import.meta.url));
49
+ const { PrismaPg } = adapterModule;
50
+ const pg = pgModule.default ?? pgModule;
51
+ const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
52
+ const adapter = new PrismaPg(pool);
53
+ return new PrismaClient({ adapter });
54
+ }
55
+ const clientModule = (await import(pathToFileURL(requireFromProject.resolve('@prisma/client')).href));
56
+ return new clientModule.PrismaClient();
57
+ }
58
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAK1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAElF,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAO,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAA;IACzD,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,yBAAyB,EAAE,CAAA;IAC5C,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,OAAO;QACL,EAAE;QACF,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACzC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAA;YACxB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,yBAAyB;IACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IAED,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;IAClF,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;IAExE,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChE,MAAM,CAAC,aAAa,CAAC;YACrB,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7D,CAAC,CAAA;QACF,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,QAAQ,CACtC,aAAa,CAAC,eAAe,CAAC,CAAC,IAAI,EACnC,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CAEA,CAAA;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,aAA6D,CAAA;QAClF,MAAM,EAAE,GAAI,QAA0C,CAAC,OAAO,IAAI,QAAQ,CAAA;QAC1E,MAAM,IAAI,GAAG,IAAK,EAAU,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;QACjF,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAS,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAChC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CACjE,CAEA,CAAA;IACD,OAAO,IAAI,YAAY,CAAC,YAAY,EAAE,CAAA;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cli",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "CLI for Actuate CMS — migrations, codegen, imports, exports, and upgrades",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,7 +28,7 @@
28
28
  "devDependencies": {
29
29
  "typescript": "^5.7.0",
30
30
  "vitest": "^4.1.0",
31
- "@actuate-media/cms-core": "0.51.0"
31
+ "@actuate-media/cms-core": "0.53.0"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "tsc",
@@ -7,7 +7,12 @@ vi.mock('@actuate-media/cms-core', () => ({
7
7
  createInitialAdmin: vi.fn(),
8
8
  }))
9
9
 
10
- import { createSeedDocument, ensureSeedAdmin, normalizeSeedPayload } from '../commands/seed.js'
10
+ import {
11
+ createSeedDocument,
12
+ ensureSeedAdmin,
13
+ normalizeSeedPayload,
14
+ DEMO_NAVIGATIONS,
15
+ } from '../commands/seed.js'
11
16
 
12
17
  afterEach(() => {
13
18
  vi.unstubAllEnvs()
@@ -124,3 +129,24 @@ describe('seed document creation', () => {
124
129
  })
125
130
  })
126
131
  })
132
+
133
+ describe('demo navigations', () => {
134
+ // The scaffold site layout fetches menus by the `main` and `footer` slugs, so
135
+ // the demo seed must provide exactly those — guard against slug drift.
136
+ it('seeds header (main) and footer menus with well-formed items', () => {
137
+ const bySlug = new Map(DEMO_NAVIGATIONS.map((n) => [n.slug, n]))
138
+ expect(bySlug.has('main')).toBe(true)
139
+ expect(bySlug.has('footer')).toBe(true)
140
+ expect(bySlug.get('main')?.location).toBe('header')
141
+ expect(bySlug.get('footer')?.location).toBe('footer')
142
+
143
+ for (const nav of DEMO_NAVIGATIONS) {
144
+ expect(nav.items.length).toBeGreaterThan(0)
145
+ for (const item of nav.items) {
146
+ expect(typeof item.label).toBe('string')
147
+ expect(item.label.length).toBeGreaterThan(0)
148
+ expect(item.url.startsWith('/')).toBe(true)
149
+ }
150
+ }
151
+ })
152
+ })
@@ -0,0 +1,73 @@
1
+ import { Command } from 'commander'
2
+ import ora from 'ora'
3
+ import { logger } from '../utils/logger.js'
4
+ import { connectProjectDatabase } from '../utils/database.js'
5
+
6
+ interface MigrateSectionsOptions {
7
+ dryRun?: boolean
8
+ batchSize?: string
9
+ }
10
+
11
+ /**
12
+ * `actuate migrate:sections` — backfill canonical `data.sections` for legacy
13
+ * page-builder documents (ADR 0002). Idempotent: safe to re-run.
14
+ */
15
+ async function runMigrateSections(options: MigrateSectionsOptions): Promise<void> {
16
+ const dryRun = options.dryRun ?? false
17
+ const batchSize = options.batchSize ? Number.parseInt(options.batchSize, 10) : undefined
18
+ if (batchSize !== undefined && (!Number.isFinite(batchSize) || batchSize <= 0)) {
19
+ logger.error('--batch-size must be a positive integer.')
20
+ process.exit(1)
21
+ }
22
+
23
+ let connection: { db: any; disconnect: () => Promise<void> } | null = null
24
+ const spinner = ora(
25
+ dryRun ? 'Scanning page-builder documents (dry run)…' : 'Backfilling page sections…',
26
+ ).start()
27
+
28
+ try {
29
+ connection = await connectProjectDatabase()
30
+ const db = connection.db
31
+
32
+ const { migratePageBuilderSections } = await import('@actuate-media/cms-core')
33
+
34
+ // Run as the system admin so per-collection update access is satisfied.
35
+ const admin = await db.user.findFirst({ where: { role: 'ADMIN' } })
36
+ if (!admin) {
37
+ spinner.fail('No ADMIN user found. Create an admin (setup wizard or seed) first.')
38
+ process.exit(1)
39
+ }
40
+
41
+ const ctx = { userId: admin.id, role: 'ADMIN', db }
42
+ const result = await migratePageBuilderSections(ctx, { dryRun, batchSize })
43
+
44
+ spinner.succeed(
45
+ dryRun
46
+ ? `Dry run complete — ${result.migrated} document(s) would be migrated.`
47
+ : `Migrated ${result.migrated} document(s).`,
48
+ )
49
+ logger.info(` Scanned: ${result.scanned}`)
50
+ logger.info(` Migrated: ${result.migrated}`)
51
+ logger.info(` Skipped: ${result.skipped}`)
52
+ if (result.migratedIds.length > 0) {
53
+ logger.info(` IDs: ${result.migratedIds.join(', ')}`)
54
+ }
55
+ } catch (err) {
56
+ const message = err instanceof Error ? err.message : String(err)
57
+ spinner.fail(`Section migration failed: ${message}`)
58
+ process.exit(1)
59
+ } finally {
60
+ await connection?.disconnect()
61
+ }
62
+ }
63
+
64
+ export function registerMigrateSectionsCommand(program: Command): void {
65
+ program
66
+ .command('migrate:sections')
67
+ .description(
68
+ 'Backfill canonical page sections for legacy page-builder documents (ADR 0002). Idempotent.',
69
+ )
70
+ .option('--dry-run', 'Report what would change without writing')
71
+ .option('--batch-size <n>', 'Documents to scan per DB page (default 100)')
72
+ .action(runMigrateSections)
73
+ }
@@ -1,12 +1,12 @@
1
1
  import { Command } from 'commander'
2
2
  import { readFile } from 'node:fs/promises'
3
3
  import { existsSync } from 'node:fs'
4
- import { createRequire } from 'node:module'
5
4
  import path from 'node:path'
6
5
  import { createInterface } from 'node:readline/promises'
7
6
  import { pathToFileURL } from 'node:url'
8
7
  import ora from 'ora'
9
8
  import { logger } from '../utils/logger.js'
9
+ import { connectProjectDatabase } from '../utils/database.js'
10
10
 
11
11
  async function confirm(question: string): Promise<boolean> {
12
12
  const rl = createInterface({ input: process.stdin, output: process.stdout })
@@ -154,6 +154,31 @@ const DEMO_FORMS = [
154
154
  },
155
155
  ]
156
156
 
157
+ // Demo navigation menus. Items reference the demo pages by their public URL so
158
+ // the scaffold header/footer render real links out of the box. `location` is
159
+ // admin metadata; the public site looks menus up by `slug` (`main`/`footer`).
160
+ export const DEMO_NAVIGATIONS = [
161
+ {
162
+ name: 'Main Menu',
163
+ slug: 'main',
164
+ location: 'header',
165
+ items: [
166
+ { id: 'nav-home', label: 'Home', url: '/' },
167
+ { id: 'nav-about', label: 'About', url: '/about' },
168
+ { id: 'nav-contact', label: 'Contact', url: '/contact' },
169
+ ],
170
+ },
171
+ {
172
+ name: 'Footer Menu',
173
+ slug: 'footer',
174
+ location: 'footer',
175
+ items: [
176
+ { id: 'nav-privacy', label: 'Privacy Policy', url: '/privacy-policy' },
177
+ { id: 'nav-terms', label: 'Terms of Service', url: '/terms' },
178
+ ],
179
+ },
180
+ ]
181
+
157
182
  const DEMO_USERS = [
158
183
  { email: 'editor@example.com', name: 'Demo Editor', role: 'EDITOR' as const },
159
184
  { email: 'author@example.com', name: 'Demo Author', role: 'AUTHOR' as const },
@@ -275,7 +300,7 @@ async function runSeed(options: SeedOptions): Promise<void> {
275
300
  let seededDb: { db: any; disconnect: () => Promise<void> } | null = null
276
301
 
277
302
  try {
278
- seededDb = await getSeedDatabase()
303
+ seededDb = await connectProjectDatabase()
279
304
  const db = seededDb.db
280
305
 
281
306
  if (options.reset) {
@@ -310,60 +335,6 @@ async function runSeed(options: SeedOptions): Promise<void> {
310
335
  }
311
336
  }
312
337
 
313
- async function getSeedDatabase(): Promise<{ db: any; disconnect: () => Promise<void> }> {
314
- const { getDB, initDB, isDBInitialized } = await import('@actuate-media/cms-core')
315
-
316
- if (isDBInitialized()) {
317
- return { db: getDB<any>(), disconnect: async () => {} }
318
- }
319
-
320
- const db = await createProjectPrismaClient()
321
- initDB(db)
322
- return {
323
- db,
324
- disconnect: async () => {
325
- if (typeof db.$disconnect === 'function') {
326
- await db.$disconnect()
327
- }
328
- },
329
- }
330
- }
331
-
332
- async function createProjectPrismaClient(): Promise<any> {
333
- if (!process.env.DATABASE_URL) {
334
- throw new Error('DATABASE_URL is required to run seed/populate.')
335
- }
336
-
337
- const requireFromProject = createRequire(path.join(process.cwd(), 'package.json'))
338
- const generatedClient = path.resolve('generated', 'prisma', 'client.ts')
339
-
340
- if (existsSync(generatedClient)) {
341
- const [{ tsImport }, adapterModule, pgModule] = await Promise.all([
342
- import('tsx/esm/api'),
343
- import(pathToFileURL(requireFromProject.resolve('@prisma/adapter-pg')).href),
344
- import(pathToFileURL(requireFromProject.resolve('pg')).href),
345
- ])
346
- const { PrismaClient } = (await tsImport(
347
- pathToFileURL(generatedClient).href,
348
- import.meta.url,
349
- )) as {
350
- PrismaClient: new (options?: unknown) => any
351
- }
352
- const { PrismaPg } = adapterModule as { PrismaPg: new (pool: unknown) => unknown }
353
- const pg = (pgModule as { default?: typeof pgModule }).default ?? pgModule
354
- const pool = new (pg as any).Pool({ connectionString: process.env.DATABASE_URL })
355
- const adapter = new PrismaPg(pool)
356
- return new PrismaClient({ adapter } as any)
357
- }
358
-
359
- const clientModule = (await import(
360
- pathToFileURL(requireFromProject.resolve('@prisma/client')).href
361
- )) as {
362
- PrismaClient: new () => any
363
- }
364
- return new clientModule.PrismaClient()
365
- }
366
-
367
338
  export async function ensureSeedAdmin(db: any): Promise<{ id: string }> {
368
339
  const existing = await db.user.findFirst({ where: { role: 'ADMIN' } })
369
340
  if (existing) return existing
@@ -479,6 +450,16 @@ async function seedDemoData(db: any): Promise<void> {
479
450
  formsCreated++
480
451
  }
481
452
 
453
+ let navigationsCreated = 0
454
+ for (const navigation of DEMO_NAVIGATIONS) {
455
+ await createSeedDocument(db, userId, {
456
+ collection: 'navigations',
457
+ data: navigation,
458
+ status: 'PUBLISHED',
459
+ })
460
+ navigationsCreated++
461
+ }
462
+
482
463
  let usersCreated = 0
483
464
  for (const user of DEMO_USERS) {
484
465
  const exists = await db.user.findFirst({ where: { email: user.email } })
@@ -498,10 +479,11 @@ async function seedDemoData(db: any): Promise<void> {
498
479
  }
499
480
 
500
481
  spinner.succeed('Demo data seeded successfully.')
501
- logger.info(` Pages: ${pagesCreated}`)
502
- logger.info(` Posts: ${postsCreated}`)
503
- logger.info(` Forms: ${formsCreated}`)
504
- logger.info(` Users: ${usersCreated} (+ existing admin)`)
482
+ logger.info(` Pages: ${pagesCreated}`)
483
+ logger.info(` Posts: ${postsCreated}`)
484
+ logger.info(` Forms: ${formsCreated}`)
485
+ logger.info(` Navigations: ${navigationsCreated}`)
486
+ logger.info(` Users: ${usersCreated} (+ existing admin)`)
505
487
  }
506
488
 
507
489
  async function seedFromFile(db: any, filePath: string): Promise<void> {
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander'
3
3
  import { registerMigrateCommand } from './commands/migrate.js'
4
+ import { registerMigrateSectionsCommand } from './commands/migrate-sections.js'
4
5
  import { registerGenerateCommand } from './commands/generate.js'
5
6
  import { registerSeedCommand } from './commands/seed.js'
6
7
  import { registerImportCommand } from './commands/import.js'
@@ -25,6 +26,7 @@ program
25
26
  .version('0.1.0')
26
27
 
27
28
  registerMigrateCommand(program)
29
+ registerMigrateSectionsCommand(program)
28
30
  registerGenerateCommand(program)
29
31
  registerSeedCommand(program)
30
32
  registerImportCommand(program)
@@ -0,0 +1,77 @@
1
+ import { existsSync } from 'node:fs'
2
+ import { createRequire } from 'node:module'
3
+ import path from 'node:path'
4
+ import { pathToFileURL } from 'node:url'
5
+
6
+ /**
7
+ * Shared helper for CLI commands that need a live connection to the consumer
8
+ * project's database (seed, populate, data migrations…).
9
+ *
10
+ * Resolution order mirrors how a scaffolded Actuate project exposes Prisma:
11
+ * 1. If `cms-core` already has an initialized client (e.g. set up by the host
12
+ * app in-process), reuse it.
13
+ * 2. Otherwise build a client from the project's generated Prisma client
14
+ * (`generated/prisma/client.ts`, Prisma 7 + pg driver adapter).
15
+ * 3. Fall back to a plain `@prisma/client` resolved from the project.
16
+ *
17
+ * The returned `disconnect()` only tears down clients this helper created — a
18
+ * pre-initialized in-process client is left untouched.
19
+ */
20
+ export async function connectProjectDatabase(): Promise<{
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Prisma client shape varies by project; callers treat it structurally.
22
+ db: any
23
+ disconnect: () => Promise<void>
24
+ }> {
25
+ const { getDB, initDB, isDBInitialized } = await import('@actuate-media/cms-core')
26
+
27
+ if (isDBInitialized()) {
28
+ return { db: getDB<any>(), disconnect: async () => {} }
29
+ }
30
+
31
+ const db = await createProjectPrismaClient()
32
+ initDB(db)
33
+ return {
34
+ db,
35
+ disconnect: async () => {
36
+ if (typeof db.$disconnect === 'function') {
37
+ await db.$disconnect()
38
+ }
39
+ },
40
+ }
41
+ }
42
+
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- see above.
44
+ async function createProjectPrismaClient(): Promise<any> {
45
+ if (!process.env.DATABASE_URL) {
46
+ throw new Error('DATABASE_URL is required to connect to the project database.')
47
+ }
48
+
49
+ const requireFromProject = createRequire(path.join(process.cwd(), 'package.json'))
50
+ const generatedClient = path.resolve('generated', 'prisma', 'client.ts')
51
+
52
+ if (existsSync(generatedClient)) {
53
+ const [{ tsImport }, adapterModule, pgModule] = await Promise.all([
54
+ import('tsx/esm/api'),
55
+ import(pathToFileURL(requireFromProject.resolve('@prisma/adapter-pg')).href),
56
+ import(pathToFileURL(requireFromProject.resolve('pg')).href),
57
+ ])
58
+ const { PrismaClient } = (await tsImport(
59
+ pathToFileURL(generatedClient).href,
60
+ import.meta.url,
61
+ )) as {
62
+ PrismaClient: new (options?: unknown) => any
63
+ }
64
+ const { PrismaPg } = adapterModule as { PrismaPg: new (pool: unknown) => unknown }
65
+ const pg = (pgModule as { default?: typeof pgModule }).default ?? pgModule
66
+ const pool = new (pg as any).Pool({ connectionString: process.env.DATABASE_URL })
67
+ const adapter = new PrismaPg(pool)
68
+ return new PrismaClient({ adapter } as any)
69
+ }
70
+
71
+ const clientModule = (await import(
72
+ pathToFileURL(requireFromProject.resolve('@prisma/client')).href
73
+ )) as {
74
+ PrismaClient: new () => any
75
+ }
76
+ return new clientModule.PrismaClient()
77
+ }