@actuate-media/cli 0.2.3 → 0.3.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.
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-test.log +15 -0
- package/CHANGELOG.md +22 -0
- package/dist/__tests__/init.test.d.ts +2 -0
- package/dist/__tests__/init.test.d.ts.map +1 -0
- package/dist/__tests__/init.test.js +25 -0
- package/dist/__tests__/init.test.js.map +1 -0
- package/dist/__tests__/seed.test.d.ts +2 -0
- package/dist/__tests__/seed.test.d.ts.map +1 -0
- package/dist/__tests__/seed.test.js +49 -0
- package/dist/__tests__/seed.test.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +31 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/seed.d.ts +14 -0
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +117 -35
- package/dist/commands/seed.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +12 -5
- package/src/__tests__/init.test.ts +30 -0
- package/src/__tests__/seed.test.ts +53 -0
- package/src/commands/init.ts +36 -0
- package/src/commands/seed.ts +152 -34
- package/src/index.ts +2 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
> @actuate-media/cli@0.3.0 test /home/runner/work/actuatecms/actuatecms/packages/cli
|
|
3
|
+
> vitest run
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/actuatecms/actuatecms/packages/cli[39m
|
|
7
|
+
|
|
8
|
+
[32m✓[39m src/__tests__/seed.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 32[2mms[22m[39m
|
|
9
|
+
[32m✓[39m src/__tests__/init.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 83[2mms[22m[39m
|
|
10
|
+
|
|
11
|
+
[2m Test Files [22m [1m[32m2 passed[39m[22m[90m (2)[39m
|
|
12
|
+
[2m Tests [22m [1m[32m4 passed[39m[22m[90m (4)[39m
|
|
13
|
+
[2m Start at [22m 17:30:59
|
|
14
|
+
[2m Duration [22m 5.90s[2m (transform 934ms, setup 0ms, collect 1.72s, tests 114ms, environment 0ms, prepare 1.52s)[22m
|
|
15
|
+
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @actuate-media/cli
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 266b657: Add first-class public site helpers, CLI init/populate workflows, and generated frontend boilerplate for globals, document resolution, and media normalization.
|
|
8
|
+
|
|
9
|
+
## 0.2.5
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- b5de8dd: Fix ESM module resolution and dependency duplication issues reported during consumer integration.
|
|
14
|
+
- Add "default" export condition to all platform and plugin packages so they resolve correctly from require() contexts (fixes ERR_PACKAGE_PATH_NOT_EXPORTED in next.config.ts and serverless functions).
|
|
15
|
+
- Move @actuate-media/cms-core from direct dependencies to peerDependencies across all packages to prevent duplicate installations when consumer version ranges don't exactly match the pinned version.
|
|
16
|
+
- Add "prepack" lifecycle script to create-actuate-cms to guarantee dist/ is built before npm publishes the package (fixes empty dist/ in v0.4.0).
|
|
17
|
+
|
|
18
|
+
## 0.2.4
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [54c7a3b]
|
|
23
|
+
- @actuate-media/cms-core@0.6.0
|
|
24
|
+
|
|
3
25
|
## 0.2.3
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/init.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { buildCreateActuateArgs, registerInitCommand } from '../commands/init.js';
|
|
5
|
+
describe('init command', () => {
|
|
6
|
+
it('registers an init command that delegates to create-actuate-cms', () => {
|
|
7
|
+
const program = new Command();
|
|
8
|
+
registerInitCommand(program);
|
|
9
|
+
const command = program.commands.find((candidate) => candidate.name() === 'init');
|
|
10
|
+
expect(command).toBeDefined();
|
|
11
|
+
expect(buildCreateActuateArgs()).toEqual(['create', 'actuate-cms@latest']);
|
|
12
|
+
expect(buildCreateActuateArgs('maidpro-site')).toEqual([
|
|
13
|
+
'create',
|
|
14
|
+
'actuate-cms@latest',
|
|
15
|
+
'maidpro-site',
|
|
16
|
+
]);
|
|
17
|
+
});
|
|
18
|
+
it('exposes an actuate-cms bin alias for installed CLI usage', async () => {
|
|
19
|
+
const raw = await readFile(new URL('../../package.json', import.meta.url), 'utf-8');
|
|
20
|
+
const pkg = JSON.parse(raw);
|
|
21
|
+
expect(pkg.bin?.actuate).toBe('dist/index.js');
|
|
22
|
+
expect(pkg.bin?.['actuate-cms']).toBe('dist/index.js');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=init.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/__tests__/init.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAElF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;QAElF,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,QAAQ;YACR,oBAAoB;YACpB,cAAc;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqC,CAAC;QAEhE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/seed.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { normalizeSeedPayload } from '../commands/seed.js';
|
|
3
|
+
describe('seed payload normalization', () => {
|
|
4
|
+
it('separates globals from collection documents', () => {
|
|
5
|
+
const normalized = normalizeSeedPayload({
|
|
6
|
+
globals: {
|
|
7
|
+
'site-settings': {
|
|
8
|
+
siteName: 'MaidPro',
|
|
9
|
+
phone: '555-0100',
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
collections: {
|
|
13
|
+
pages: [
|
|
14
|
+
{
|
|
15
|
+
data: { title: 'Home', slug: 'home' },
|
|
16
|
+
status: 'PUBLISHED',
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
expect(normalized.globals).toEqual([
|
|
22
|
+
{
|
|
23
|
+
slug: 'site-settings',
|
|
24
|
+
data: { siteName: 'MaidPro', phone: '555-0100' },
|
|
25
|
+
},
|
|
26
|
+
]);
|
|
27
|
+
expect(normalized.documents).toEqual([
|
|
28
|
+
{
|
|
29
|
+
collection: 'pages',
|
|
30
|
+
data: { title: 'Home', slug: 'home' },
|
|
31
|
+
status: 'PUBLISHED',
|
|
32
|
+
},
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
35
|
+
it('keeps backwards-compatible collection-key seed files', () => {
|
|
36
|
+
const normalized = normalizeSeedPayload({
|
|
37
|
+
pages: [{ title: 'Home', slug: 'home' }],
|
|
38
|
+
});
|
|
39
|
+
expect(normalized.globals).toEqual([]);
|
|
40
|
+
expect(normalized.documents).toEqual([
|
|
41
|
+
{
|
|
42
|
+
collection: 'pages',
|
|
43
|
+
data: { title: 'Home', slug: 'home' },
|
|
44
|
+
status: 'DRAFT',
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=seed.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.test.js","sourceRoot":"","sources":["../../src/__tests__/seed.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,UAAU,GAAG,oBAAoB,CAAC;YACtC,OAAO,EAAE;gBACP,eAAe,EAAE;oBACf,QAAQ,EAAE,SAAS;oBACnB,KAAK,EAAE,UAAU;iBAClB;aACF;YACD,WAAW,EAAE;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;wBACrC,MAAM,EAAE,WAAW;qBACpB;iBACF;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACjC;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;aACjD;SACF,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACnC;gBACE,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;gBACrC,MAAM,EAAE,WAAW;aACpB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,UAAU,GAAG,oBAAoB,CAAC;YACtC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACzC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACnC;gBACE,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;gBACrC,MAAM,EAAE,OAAO;aAChB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrE;AAsBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK1D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
export function buildCreateActuateArgs(projectName) {
|
|
4
|
+
const args = ['create', 'actuate-cms@latest'];
|
|
5
|
+
if (projectName)
|
|
6
|
+
args.push(projectName);
|
|
7
|
+
return args;
|
|
8
|
+
}
|
|
9
|
+
function npmCommand() {
|
|
10
|
+
return process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
11
|
+
}
|
|
12
|
+
async function runInit(projectName) {
|
|
13
|
+
const child = spawn(npmCommand(), buildCreateActuateArgs(projectName), {
|
|
14
|
+
stdio: 'inherit',
|
|
15
|
+
});
|
|
16
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
17
|
+
child.once('error', reject);
|
|
18
|
+
child.once('exit', resolve);
|
|
19
|
+
});
|
|
20
|
+
if (exitCode && exitCode !== 0) {
|
|
21
|
+
logger.error(`Project initialization failed with exit code ${exitCode}.`);
|
|
22
|
+
process.exit(exitCode);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function registerInitCommand(program) {
|
|
26
|
+
program
|
|
27
|
+
.command('init [project-name]')
|
|
28
|
+
.description('Scaffold a new Actuate CMS project')
|
|
29
|
+
.action(runInit);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,UAAU,sBAAsB,CAAC,WAAoB;IACzD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAC9C,IAAI,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,WAAoB;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE,sBAAsB,CAAC,WAAW,CAAC,EAAE;QACrE,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,gDAAgD,QAAQ,GAAG,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
|
package/dist/commands/seed.d.ts
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
export interface NormalizedSeedDocument {
|
|
3
|
+
collection: string;
|
|
4
|
+
data: Record<string, unknown>;
|
|
5
|
+
status: string;
|
|
6
|
+
}
|
|
7
|
+
export interface NormalizedSeedGlobal {
|
|
8
|
+
slug: string;
|
|
9
|
+
data: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface NormalizedSeedPayload {
|
|
12
|
+
documents: NormalizedSeedDocument[];
|
|
13
|
+
globals: NormalizedSeedGlobal[];
|
|
14
|
+
}
|
|
15
|
+
export declare function normalizeSeedPayload(seedData: unknown): NormalizedSeedPayload;
|
|
2
16
|
export declare function registerSeedCommand(program: Command): void;
|
|
3
17
|
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiLpC,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAyBD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,qBAAqB,CAgC7E;AAkPD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAe1D"}
|
package/dist/commands/seed.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
3
4
|
import { createInterface } from "node:readline/promises";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
4
6
|
import ora from "ora";
|
|
5
7
|
import { logger } from "../utils/logger.js";
|
|
6
8
|
async function confirm(question) {
|
|
@@ -146,9 +148,78 @@ const DEMO_USERS = [
|
|
|
146
148
|
{ email: "editor@example.com", name: "Demo Editor", role: "EDITOR" },
|
|
147
149
|
{ email: "author@example.com", name: "Demo Author", role: "AUTHOR" },
|
|
148
150
|
];
|
|
151
|
+
const SEED_FILE_CANDIDATES = [
|
|
152
|
+
"actuate.seed.json",
|
|
153
|
+
"actuate.seed.ts",
|
|
154
|
+
"actuate.seed.js",
|
|
155
|
+
"actuate.seed.mjs",
|
|
156
|
+
"cms.seed.json",
|
|
157
|
+
];
|
|
158
|
+
function asRecord(value) {
|
|
159
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
160
|
+
? value
|
|
161
|
+
: {};
|
|
162
|
+
}
|
|
163
|
+
function normalizeDocument(collection, doc) {
|
|
164
|
+
const record = asRecord(doc);
|
|
165
|
+
return {
|
|
166
|
+
collection,
|
|
167
|
+
data: asRecord(record.data ?? record),
|
|
168
|
+
status: typeof record.status === "string" ? record.status : "DRAFT",
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
export function normalizeSeedPayload(seedData) {
|
|
172
|
+
const documents = [];
|
|
173
|
+
const globals = [];
|
|
174
|
+
if (Array.isArray(seedData)) {
|
|
175
|
+
for (const doc of seedData) {
|
|
176
|
+
const record = asRecord(doc);
|
|
177
|
+
documents.push(normalizeDocument(typeof record.collection === "string" ? record.collection : "imported", record.data ? record : { data: record }));
|
|
178
|
+
}
|
|
179
|
+
return { documents, globals };
|
|
180
|
+
}
|
|
181
|
+
const root = asRecord(seedData);
|
|
182
|
+
const globalEntries = asRecord(root.globals);
|
|
183
|
+
for (const [slug, value] of Object.entries(globalEntries)) {
|
|
184
|
+
globals.push({ slug, data: asRecord(value) });
|
|
185
|
+
}
|
|
186
|
+
const collections = root.collections ? asRecord(root.collections) : root;
|
|
187
|
+
for (const [collection, docs] of Object.entries(collections)) {
|
|
188
|
+
if (collection === "globals" || collection === "collections")
|
|
189
|
+
continue;
|
|
190
|
+
if (!Array.isArray(docs))
|
|
191
|
+
continue;
|
|
192
|
+
for (const doc of docs) {
|
|
193
|
+
documents.push(normalizeDocument(collection, doc));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return { documents, globals };
|
|
197
|
+
}
|
|
198
|
+
function findConventionSeedFile() {
|
|
199
|
+
for (const candidate of SEED_FILE_CANDIDATES) {
|
|
200
|
+
if (existsSync(candidate))
|
|
201
|
+
return candidate;
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
async function loadSeedFile(filePath) {
|
|
206
|
+
const extension = path.extname(filePath);
|
|
207
|
+
if (extension === ".json" || extension === "") {
|
|
208
|
+
const raw = await readFile(filePath, "utf-8");
|
|
209
|
+
return JSON.parse(raw);
|
|
210
|
+
}
|
|
211
|
+
const fileUrl = pathToFileURL(path.resolve(filePath)).href;
|
|
212
|
+
const mod = extension === ".ts"
|
|
213
|
+
? await import("tsx/esm/api").then(({ tsImport }) => tsImport(fileUrl, import.meta.url))
|
|
214
|
+
: await import(fileUrl);
|
|
215
|
+
return mod.default
|
|
216
|
+
?? mod.seed;
|
|
217
|
+
}
|
|
149
218
|
async function runSeed(options) {
|
|
150
|
-
|
|
151
|
-
|
|
219
|
+
const conventionFile = !options.demo && !options.file ? findConventionSeedFile() : null;
|
|
220
|
+
const file = options.file ?? conventionFile ?? undefined;
|
|
221
|
+
if (!options.demo && !file) {
|
|
222
|
+
logger.error("Specify --demo, --file <path>, or add actuate.seed.json in the project root.");
|
|
152
223
|
process.exit(1);
|
|
153
224
|
}
|
|
154
225
|
try {
|
|
@@ -169,8 +240,8 @@ async function runSeed(options) {
|
|
|
169
240
|
if (options.demo) {
|
|
170
241
|
await seedDemoData(db);
|
|
171
242
|
}
|
|
172
|
-
if (
|
|
173
|
-
await seedFromFile(db,
|
|
243
|
+
if (file) {
|
|
244
|
+
await seedFromFile(db, file);
|
|
174
245
|
}
|
|
175
246
|
}
|
|
176
247
|
catch (err) {
|
|
@@ -269,13 +340,12 @@ async function seedFromFile(db, filePath) {
|
|
|
269
340
|
process.exit(1);
|
|
270
341
|
}
|
|
271
342
|
const spinner = ora(`Seeding from ${filePath}…`).start();
|
|
272
|
-
const raw = await readFile(filePath, "utf-8");
|
|
273
343
|
let seedData;
|
|
274
344
|
try {
|
|
275
|
-
seedData =
|
|
345
|
+
seedData = await loadSeedFile(filePath);
|
|
276
346
|
}
|
|
277
347
|
catch {
|
|
278
|
-
spinner.fail("Invalid
|
|
348
|
+
spinner.fail("Invalid seed file.");
|
|
279
349
|
process.exit(1);
|
|
280
350
|
}
|
|
281
351
|
if (!Array.isArray(seedData) && typeof seedData !== "object") {
|
|
@@ -296,47 +366,59 @@ async function seedFromFile(db, filePath) {
|
|
|
296
366
|
});
|
|
297
367
|
}
|
|
298
368
|
const userId = adminUser.id;
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
369
|
+
const normalized = normalizeSeedPayload(seedData);
|
|
370
|
+
const { extractPlainText, hashContent, updateGlobal } = await import("@actuate-media/cms-core");
|
|
371
|
+
const ctx = { userId, role: "ADMIN", db };
|
|
372
|
+
let documentCount = 0;
|
|
373
|
+
for (const doc of normalized.documents) {
|
|
374
|
+
const serialized = JSON.stringify(doc.data);
|
|
375
|
+
const plainText = extractPlainText(serialized);
|
|
376
|
+
const contentHash = await hashContent(serialized);
|
|
377
|
+
await db.$transaction(async (tx) => {
|
|
378
|
+
const created = await tx.document.create({
|
|
303
379
|
data: {
|
|
304
|
-
collection: doc.collection
|
|
305
|
-
|
|
306
|
-
|
|
380
|
+
collection: doc.collection,
|
|
381
|
+
title: typeof doc.data.title === "string" ? doc.data.title : null,
|
|
382
|
+
slug: typeof doc.data.slug === "string" ? doc.data.slug : null,
|
|
383
|
+
data: doc.data,
|
|
384
|
+
status: doc.status,
|
|
385
|
+
publishedAt: doc.status === "PUBLISHED" ? new Date() : null,
|
|
307
386
|
createdById: userId,
|
|
308
387
|
updatedById: userId,
|
|
388
|
+
plainText,
|
|
389
|
+
contentHash,
|
|
309
390
|
},
|
|
310
391
|
});
|
|
311
|
-
|
|
312
|
-
|
|
392
|
+
await tx.version.create({
|
|
393
|
+
data: {
|
|
394
|
+
documentId: created.id,
|
|
395
|
+
data: doc.data,
|
|
396
|
+
changedById: userId,
|
|
397
|
+
changeType: "CREATE",
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
documentCount++;
|
|
313
402
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
for (const doc of docs) {
|
|
319
|
-
await db.document.create({
|
|
320
|
-
data: {
|
|
321
|
-
collection,
|
|
322
|
-
data: doc.data ?? doc,
|
|
323
|
-
status: doc.status ?? "DRAFT",
|
|
324
|
-
createdById: userId,
|
|
325
|
-
updatedById: userId,
|
|
326
|
-
},
|
|
327
|
-
});
|
|
328
|
-
count++;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
403
|
+
let globalCount = 0;
|
|
404
|
+
for (const global of normalized.globals) {
|
|
405
|
+
await updateGlobal(global.slug, global.data, ctx);
|
|
406
|
+
globalCount++;
|
|
331
407
|
}
|
|
332
|
-
spinner.succeed(`Seeded ${
|
|
408
|
+
spinner.succeed(`Seeded ${documentCount} documents and ${globalCount} globals from ${filePath}.`);
|
|
333
409
|
}
|
|
334
410
|
export function registerSeedCommand(program) {
|
|
335
411
|
program
|
|
336
412
|
.command("seed")
|
|
337
413
|
.description("Seed the database with demo or custom data")
|
|
338
414
|
.option("--demo", "Seed demo content (pages, posts, forms, users)")
|
|
339
|
-
.option("--file <path>", "Seed from a JSON file")
|
|
415
|
+
.option("--file <path>", "Seed from a JSON, JavaScript, or TypeScript file")
|
|
416
|
+
.option("--reset", "Clear existing data before seeding")
|
|
417
|
+
.action(runSeed);
|
|
418
|
+
program
|
|
419
|
+
.command("populate")
|
|
420
|
+
.description("Populate the database from actuate.seed.json or a custom seed file")
|
|
421
|
+
.option("--file <path>", "Seed from a JSON, JavaScript, or TypeScript file")
|
|
340
422
|
.option("--reset", "Clear existing data before seeding")
|
|
341
423
|
.action(runSeed);
|
|
342
424
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,KAAK,UAAU,OAAO,CAAC,QAAgB;IACrC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC;IACvD,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,GAAG;IACjB;QACE,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,yDAAyD;KACnE;IACD;QACE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EACL,gEAAgE;KACnE;IACD;QACE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,OAAO,EACL,iEAAiE;KACpE;IACD;QACE,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EACL,iFAAiF;KACpF;IACD;QACE,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,OAAO;QACb,OAAO,EACL,4EAA4E;KAC/E;CACF,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB;QACE,KAAK,EAAE,kCAAkC;QACzC,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iDAAiD;QAC1D,OAAO,EACL,oGAAoG;QACtG,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,iCAAiC;QACxC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,6DAA6D;QACtE,OAAO,EACL,8FAA8F;QAChG,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,mDAAmD;QAC5D,OAAO,EACL,mFAAmF;QACrF,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,uBAAuB;QAC9B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,qDAAqD;QAC9D,OAAO,EACL,oFAAoF;QACtF,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,2CAA2C;QACpD,OAAO,EACL,sFAAsF;QACxF,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,wBAAwB;QAC/B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,oDAAoD;QAC7D,OAAO,EACL,8EAA8E;QAChF,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,oDAAoD;QAC7D,OAAO,EACL,iFAAiF;QACnF,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,wBAAwB;QAC/B,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,oDAAoD;QAC7D,OAAO,EACL,uFAAuF;QACzF,MAAM,EAAE,WAAW;KACpB;IACD;QACE,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,yDAAyD;QAClE,OAAO,EACL,mFAAmF;QACrF,MAAM,EAAE,OAAO;KAChB;IACD;QACE,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,uDAAuD;QAChE,OAAO,EACL,+EAA+E;QACjF,MAAM,EAAE,OAAO;KAChB;CACF,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB;QACE,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;SACtD;QACD,WAAW,EAAE,cAAc;QAC3B,cAAc,EAAE,sDAAsD;KACvE;IACD;QACE,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACrD;QACD,WAAW,EAAE,WAAW;QACxB,cAAc,EAAE,uDAAuD;KACxE;IACD;QACE,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;YACtF,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;SACxD;QACD,WAAW,EAAE,iBAAiB;QAC9B,cAAc,EAAE,8BAA8B;KAC/C;CACF,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAiB,EAAE;IAC7E,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAiB,EAAE;CAC9E,CAAC;AAQF,KAAK,UAAU,OAAO,CAAC,OAAoB;IACzC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,KAAK,EAAO,CAAC;QAExB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,iEAAiE,CAClE,CAAC;YACF,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5D,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjC,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAO;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,IAAI,EAAE;gBACJ,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAE5B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE;gBACJ,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,WAAW;gBACnB,WAAW,EAAE,IAAI,IAAI,EAAE;gBACvB,WAAW,EAAE,MAAM;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;aACxC;SACF,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE;gBACJ,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC5D,WAAW,EAAE,MAAM;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;aAC3C;SACF,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE;gBACJ,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,WAAW;gBACnB,WAAW,EAAE,IAAI,IAAI,EAAE;gBACvB,WAAW,EAAE,MAAM;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;aACxC;SACF,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE;oBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,IAAI;iBACpB;aACF,CAAC,CAAC;YACH,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,aAAa,YAAY,qBAAqB,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAO,EAAE,QAAgB;IACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,QAAa,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,IAAI,EAAE;gBACJ,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAE5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvB,IAAI,EAAE;oBACJ,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,UAAU;oBACxC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG;oBACrB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO;oBAC7B,WAAW,EAAE,MAAM;oBACnB,WAAW,EAAE,MAAM;iBACpB;aACF,CAAC,CAAC;YACH,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,KAAK,MAAM,GAAG,IAAI,IAAa,EAAE,CAAC;gBAChC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvB,IAAI,EAAE;wBACJ,UAAU;wBACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG;wBACrB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO;wBAC7B,WAAW,EAAE,MAAM;wBACnB,WAAW,EAAE,MAAM;qBACpB;iBACF,CAAC,CAAC;gBACH,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,mBAAmB,QAAQ,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,QAAQ,EAAE,gDAAgD,CAAC;SAClE,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;SACvD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { registerUpgradeCommand } from "./commands/upgrade.js";
|
|
|
9
9
|
import { registerUpdateCheckCommand } from "./commands/update-check.js";
|
|
10
10
|
import { registerDbInitCommand } from "./commands/db-init.js";
|
|
11
11
|
import { registerDbStatusCommand } from "./commands/db-status.js";
|
|
12
|
+
import { registerInitCommand } from "./commands/init.js";
|
|
12
13
|
const program = new Command();
|
|
13
14
|
program
|
|
14
15
|
.name("actuate")
|
|
@@ -23,5 +24,6 @@ registerUpgradeCommand(program);
|
|
|
23
24
|
registerUpdateCheckCommand(program);
|
|
24
25
|
registerDbInitCommand(program);
|
|
25
26
|
registerDbStatusCommand(program);
|
|
27
|
+
registerInitCommand(program);
|
|
26
28
|
program.parse();
|
|
27
29
|
//# sourceMappingURL=index.js.map
|
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,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuate-media/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "CLI for Actuate CMS — migrations, codegen, imports, exports, and upgrades",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,21 +12,28 @@
|
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
14
|
"bin": {
|
|
15
|
-
"actuate": "dist/index.js"
|
|
15
|
+
"actuate": "dist/index.js",
|
|
16
|
+
"actuate-cms": "dist/index.js"
|
|
16
17
|
},
|
|
17
18
|
"main": "dist/index.js",
|
|
18
19
|
"dependencies": {
|
|
19
|
-
"commander": "^13.1.0",
|
|
20
20
|
"chalk": "^5.4.1",
|
|
21
|
+
"commander": "^13.1.0",
|
|
21
22
|
"ora": "^8.2.0",
|
|
22
|
-
"
|
|
23
|
+
"tsx": "^4.0.0"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@actuate-media/cms-core": ">=0.1.0"
|
|
23
27
|
},
|
|
24
28
|
"devDependencies": {
|
|
25
|
-
"typescript": "^5.7.0"
|
|
29
|
+
"typescript": "^5.7.0",
|
|
30
|
+
"vitest": "^3.0.0",
|
|
31
|
+
"@actuate-media/cms-core": "0.10.0"
|
|
26
32
|
},
|
|
27
33
|
"scripts": {
|
|
28
34
|
"build": "tsc",
|
|
29
35
|
"dev": "tsc --watch",
|
|
36
|
+
"test": "vitest run",
|
|
30
37
|
"type-check": "tsc --noEmit",
|
|
31
38
|
"clean": "rm -rf dist"
|
|
32
39
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
|
|
5
|
+
import { buildCreateActuateArgs, registerInitCommand } from '../commands/init.js';
|
|
6
|
+
|
|
7
|
+
describe('init command', () => {
|
|
8
|
+
it('registers an init command that delegates to create-actuate-cms', () => {
|
|
9
|
+
const program = new Command();
|
|
10
|
+
registerInitCommand(program);
|
|
11
|
+
|
|
12
|
+
const command = program.commands.find((candidate) => candidate.name() === 'init');
|
|
13
|
+
|
|
14
|
+
expect(command).toBeDefined();
|
|
15
|
+
expect(buildCreateActuateArgs()).toEqual(['create', 'actuate-cms@latest']);
|
|
16
|
+
expect(buildCreateActuateArgs('maidpro-site')).toEqual([
|
|
17
|
+
'create',
|
|
18
|
+
'actuate-cms@latest',
|
|
19
|
+
'maidpro-site',
|
|
20
|
+
]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('exposes an actuate-cms bin alias for installed CLI usage', async () => {
|
|
24
|
+
const raw = await readFile(new URL('../../package.json', import.meta.url), 'utf-8');
|
|
25
|
+
const pkg = JSON.parse(raw) as { bin?: Record<string, string> };
|
|
26
|
+
|
|
27
|
+
expect(pkg.bin?.actuate).toBe('dist/index.js');
|
|
28
|
+
expect(pkg.bin?.['actuate-cms']).toBe('dist/index.js');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { normalizeSeedPayload } from '../commands/seed.js';
|
|
4
|
+
|
|
5
|
+
describe('seed payload normalization', () => {
|
|
6
|
+
it('separates globals from collection documents', () => {
|
|
7
|
+
const normalized = normalizeSeedPayload({
|
|
8
|
+
globals: {
|
|
9
|
+
'site-settings': {
|
|
10
|
+
siteName: 'MaidPro',
|
|
11
|
+
phone: '555-0100',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
collections: {
|
|
15
|
+
pages: [
|
|
16
|
+
{
|
|
17
|
+
data: { title: 'Home', slug: 'home' },
|
|
18
|
+
status: 'PUBLISHED',
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
expect(normalized.globals).toEqual([
|
|
25
|
+
{
|
|
26
|
+
slug: 'site-settings',
|
|
27
|
+
data: { siteName: 'MaidPro', phone: '555-0100' },
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
expect(normalized.documents).toEqual([
|
|
31
|
+
{
|
|
32
|
+
collection: 'pages',
|
|
33
|
+
data: { title: 'Home', slug: 'home' },
|
|
34
|
+
status: 'PUBLISHED',
|
|
35
|
+
},
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('keeps backwards-compatible collection-key seed files', () => {
|
|
40
|
+
const normalized = normalizeSeedPayload({
|
|
41
|
+
pages: [{ title: 'Home', slug: 'home' }],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
expect(normalized.globals).toEqual([]);
|
|
45
|
+
expect(normalized.documents).toEqual([
|
|
46
|
+
{
|
|
47
|
+
collection: 'pages',
|
|
48
|
+
data: { title: 'Home', slug: 'home' },
|
|
49
|
+
status: 'DRAFT',
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import type { Command } from 'commander';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
|
|
5
|
+
export function buildCreateActuateArgs(projectName?: string): string[] {
|
|
6
|
+
const args = ['create', 'actuate-cms@latest'];
|
|
7
|
+
if (projectName) args.push(projectName);
|
|
8
|
+
return args;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function npmCommand(): string {
|
|
12
|
+
return process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function runInit(projectName?: string): Promise<void> {
|
|
16
|
+
const child = spawn(npmCommand(), buildCreateActuateArgs(projectName), {
|
|
17
|
+
stdio: 'inherit',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const exitCode = await new Promise<number | null>((resolve, reject) => {
|
|
21
|
+
child.once('error', reject);
|
|
22
|
+
child.once('exit', resolve);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (exitCode && exitCode !== 0) {
|
|
26
|
+
logger.error(`Project initialization failed with exit code ${exitCode}.`);
|
|
27
|
+
process.exit(exitCode);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function registerInitCommand(program: Command): void {
|
|
32
|
+
program
|
|
33
|
+
.command('init [project-name]')
|
|
34
|
+
.description('Scaffold a new Actuate CMS project')
|
|
35
|
+
.action(runInit);
|
|
36
|
+
}
|
package/src/commands/seed.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { createInterface } from "node:readline/promises";
|
|
6
|
+
import { pathToFileURL } from "node:url";
|
|
5
7
|
import ora from "ora";
|
|
6
8
|
import { logger } from "../utils/logger.js";
|
|
7
9
|
|
|
@@ -173,9 +175,108 @@ interface SeedOptions {
|
|
|
173
175
|
reset?: boolean;
|
|
174
176
|
}
|
|
175
177
|
|
|
178
|
+
export interface NormalizedSeedDocument {
|
|
179
|
+
collection: string;
|
|
180
|
+
data: Record<string, unknown>;
|
|
181
|
+
status: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export interface NormalizedSeedGlobal {
|
|
185
|
+
slug: string;
|
|
186
|
+
data: Record<string, unknown>;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export interface NormalizedSeedPayload {
|
|
190
|
+
documents: NormalizedSeedDocument[];
|
|
191
|
+
globals: NormalizedSeedGlobal[];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const SEED_FILE_CANDIDATES = [
|
|
195
|
+
"actuate.seed.json",
|
|
196
|
+
"actuate.seed.ts",
|
|
197
|
+
"actuate.seed.js",
|
|
198
|
+
"actuate.seed.mjs",
|
|
199
|
+
"cms.seed.json",
|
|
200
|
+
];
|
|
201
|
+
|
|
202
|
+
function asRecord(value: unknown): Record<string, unknown> {
|
|
203
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
204
|
+
? value as Record<string, unknown>
|
|
205
|
+
: {};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function normalizeDocument(collection: string, doc: unknown): NormalizedSeedDocument {
|
|
209
|
+
const record = asRecord(doc);
|
|
210
|
+
return {
|
|
211
|
+
collection,
|
|
212
|
+
data: asRecord(record.data ?? record),
|
|
213
|
+
status: typeof record.status === "string" ? record.status : "DRAFT",
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export function normalizeSeedPayload(seedData: unknown): NormalizedSeedPayload {
|
|
218
|
+
const documents: NormalizedSeedDocument[] = [];
|
|
219
|
+
const globals: NormalizedSeedGlobal[] = [];
|
|
220
|
+
|
|
221
|
+
if (Array.isArray(seedData)) {
|
|
222
|
+
for (const doc of seedData) {
|
|
223
|
+
const record = asRecord(doc);
|
|
224
|
+
documents.push(normalizeDocument(
|
|
225
|
+
typeof record.collection === "string" ? record.collection : "imported",
|
|
226
|
+
record.data ? record : { data: record },
|
|
227
|
+
));
|
|
228
|
+
}
|
|
229
|
+
return { documents, globals };
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const root = asRecord(seedData);
|
|
233
|
+
|
|
234
|
+
const globalEntries = asRecord(root.globals);
|
|
235
|
+
for (const [slug, value] of Object.entries(globalEntries)) {
|
|
236
|
+
globals.push({ slug, data: asRecord(value) });
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const collections = root.collections ? asRecord(root.collections) : root;
|
|
240
|
+
for (const [collection, docs] of Object.entries(collections)) {
|
|
241
|
+
if (collection === "globals" || collection === "collections") continue;
|
|
242
|
+
if (!Array.isArray(docs)) continue;
|
|
243
|
+
for (const doc of docs) {
|
|
244
|
+
documents.push(normalizeDocument(collection, doc));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return { documents, globals };
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function findConventionSeedFile(): string | null {
|
|
252
|
+
for (const candidate of SEED_FILE_CANDIDATES) {
|
|
253
|
+
if (existsSync(candidate)) return candidate;
|
|
254
|
+
}
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
async function loadSeedFile(filePath: string): Promise<unknown> {
|
|
259
|
+
const extension = path.extname(filePath);
|
|
260
|
+
if (extension === ".json" || extension === "") {
|
|
261
|
+
const raw = await readFile(filePath, "utf-8");
|
|
262
|
+
return JSON.parse(raw);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const fileUrl = pathToFileURL(path.resolve(filePath)).href;
|
|
266
|
+
const mod = extension === ".ts"
|
|
267
|
+
? await import("tsx/esm/api").then(({ tsImport }) => tsImport(fileUrl, import.meta.url))
|
|
268
|
+
: await import(fileUrl);
|
|
269
|
+
|
|
270
|
+
return (mod as { default?: unknown; seed?: unknown }).default
|
|
271
|
+
?? (mod as { seed?: unknown }).seed;
|
|
272
|
+
}
|
|
273
|
+
|
|
176
274
|
async function runSeed(options: SeedOptions): Promise<void> {
|
|
177
|
-
|
|
178
|
-
|
|
275
|
+
const conventionFile = !options.demo && !options.file ? findConventionSeedFile() : null;
|
|
276
|
+
const file = options.file ?? conventionFile ?? undefined;
|
|
277
|
+
|
|
278
|
+
if (!options.demo && !file) {
|
|
279
|
+
logger.error("Specify --demo, --file <path>, or add actuate.seed.json in the project root.");
|
|
179
280
|
process.exit(1);
|
|
180
281
|
}
|
|
181
282
|
|
|
@@ -203,8 +304,8 @@ async function runSeed(options: SeedOptions): Promise<void> {
|
|
|
203
304
|
await seedDemoData(db);
|
|
204
305
|
}
|
|
205
306
|
|
|
206
|
-
if (
|
|
207
|
-
await seedFromFile(db,
|
|
307
|
+
if (file) {
|
|
308
|
+
await seedFromFile(db, file);
|
|
208
309
|
}
|
|
209
310
|
} catch (err) {
|
|
210
311
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -312,12 +413,11 @@ async function seedFromFile(db: any, filePath: string): Promise<void> {
|
|
|
312
413
|
|
|
313
414
|
const spinner = ora(`Seeding from ${filePath}…`).start();
|
|
314
415
|
|
|
315
|
-
const raw = await readFile(filePath, "utf-8");
|
|
316
416
|
let seedData: any;
|
|
317
417
|
try {
|
|
318
|
-
seedData =
|
|
418
|
+
seedData = await loadSeedFile(filePath);
|
|
319
419
|
} catch {
|
|
320
|
-
spinner.fail("Invalid
|
|
420
|
+
spinner.fail("Invalid seed file.");
|
|
321
421
|
process.exit(1);
|
|
322
422
|
}
|
|
323
423
|
|
|
@@ -341,40 +441,51 @@ async function seedFromFile(db: any, filePath: string): Promise<void> {
|
|
|
341
441
|
}
|
|
342
442
|
const userId = adminUser.id;
|
|
343
443
|
|
|
344
|
-
|
|
444
|
+
const normalized = normalizeSeedPayload(seedData);
|
|
445
|
+
const { extractPlainText, hashContent, updateGlobal } = await import("@actuate-media/cms-core");
|
|
446
|
+
const ctx = { userId, role: "ADMIN", db };
|
|
345
447
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
448
|
+
let documentCount = 0;
|
|
449
|
+
for (const doc of normalized.documents) {
|
|
450
|
+
const serialized = JSON.stringify(doc.data);
|
|
451
|
+
const plainText = extractPlainText(serialized);
|
|
452
|
+
const contentHash = await hashContent(serialized);
|
|
453
|
+
|
|
454
|
+
await db.$transaction(async (tx: any) => {
|
|
455
|
+
const created = await tx.document.create({
|
|
349
456
|
data: {
|
|
350
|
-
collection: doc.collection
|
|
351
|
-
|
|
352
|
-
|
|
457
|
+
collection: doc.collection,
|
|
458
|
+
title: typeof doc.data.title === "string" ? doc.data.title : null,
|
|
459
|
+
slug: typeof doc.data.slug === "string" ? doc.data.slug : null,
|
|
460
|
+
data: doc.data,
|
|
461
|
+
status: doc.status,
|
|
462
|
+
publishedAt: doc.status === "PUBLISHED" ? new Date() : null,
|
|
353
463
|
createdById: userId,
|
|
354
464
|
updatedById: userId,
|
|
465
|
+
plainText,
|
|
466
|
+
contentHash,
|
|
355
467
|
},
|
|
356
468
|
});
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
createdById: userId,
|
|
369
|
-
updatedById: userId,
|
|
370
|
-
},
|
|
371
|
-
});
|
|
372
|
-
count++;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
469
|
+
|
|
470
|
+
await tx.version.create({
|
|
471
|
+
data: {
|
|
472
|
+
documentId: created.id,
|
|
473
|
+
data: doc.data,
|
|
474
|
+
changedById: userId,
|
|
475
|
+
changeType: "CREATE",
|
|
476
|
+
},
|
|
477
|
+
});
|
|
478
|
+
});
|
|
479
|
+
documentCount++;
|
|
375
480
|
}
|
|
376
481
|
|
|
377
|
-
|
|
482
|
+
let globalCount = 0;
|
|
483
|
+
for (const global of normalized.globals) {
|
|
484
|
+
await updateGlobal(global.slug, global.data, ctx);
|
|
485
|
+
globalCount++;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
spinner.succeed(`Seeded ${documentCount} documents and ${globalCount} globals from ${filePath}.`);
|
|
378
489
|
}
|
|
379
490
|
|
|
380
491
|
export function registerSeedCommand(program: Command): void {
|
|
@@ -382,7 +493,14 @@ export function registerSeedCommand(program: Command): void {
|
|
|
382
493
|
.command("seed")
|
|
383
494
|
.description("Seed the database with demo or custom data")
|
|
384
495
|
.option("--demo", "Seed demo content (pages, posts, forms, users)")
|
|
385
|
-
.option("--file <path>", "Seed from a JSON file")
|
|
496
|
+
.option("--file <path>", "Seed from a JSON, JavaScript, or TypeScript file")
|
|
497
|
+
.option("--reset", "Clear existing data before seeding")
|
|
498
|
+
.action(runSeed);
|
|
499
|
+
|
|
500
|
+
program
|
|
501
|
+
.command("populate")
|
|
502
|
+
.description("Populate the database from actuate.seed.json or a custom seed file")
|
|
503
|
+
.option("--file <path>", "Seed from a JSON, JavaScript, or TypeScript file")
|
|
386
504
|
.option("--reset", "Clear existing data before seeding")
|
|
387
505
|
.action(runSeed);
|
|
388
506
|
}
|
package/src/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { registerUpgradeCommand } from "./commands/upgrade.js";
|
|
|
9
9
|
import { registerUpdateCheckCommand } from "./commands/update-check.js";
|
|
10
10
|
import { registerDbInitCommand } from "./commands/db-init.js";
|
|
11
11
|
import { registerDbStatusCommand } from "./commands/db-status.js";
|
|
12
|
+
import { registerInitCommand } from "./commands/init.js";
|
|
12
13
|
|
|
13
14
|
const program = new Command();
|
|
14
15
|
|
|
@@ -26,5 +27,6 @@ registerUpgradeCommand(program);
|
|
|
26
27
|
registerUpdateCheckCommand(program);
|
|
27
28
|
registerDbInitCommand(program);
|
|
28
29
|
registerDbStatusCommand(program);
|
|
30
|
+
registerInitCommand(program);
|
|
29
31
|
|
|
30
32
|
program.parse();
|