@actuate-media/cli 0.8.0 → 0.10.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 +30 -28
- package/CHANGELOG.md +18 -0
- package/README.md +30 -0
- package/dist/__tests__/form-seed.test.d.ts +2 -0
- package/dist/__tests__/form-seed.test.d.ts.map +1 -0
- package/dist/__tests__/form-seed.test.js +79 -0
- package/dist/__tests__/form-seed.test.js.map +1 -0
- package/dist/__tests__/seed.test.js +73 -0
- package/dist/__tests__/seed.test.js.map +1 -1
- package/dist/commands/seed.d.ts +30 -1
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +146 -21
- package/dist/commands/seed.js.map +1 -1
- package/dist/utils/form-seed.d.ts +15 -0
- package/dist/utils/form-seed.d.ts.map +1 -0
- package/dist/utils/form-seed.js +97 -0
- package/dist/utils/form-seed.js.map +1 -0
- package/package.json +2 -2
- package/src/__tests__/form-seed.test.ts +91 -0
- package/src/__tests__/seed.test.ts +97 -0
- package/src/commands/seed.ts +167 -21
- package/src/utils/form-seed.ts +137 -0
package/.turbo/turbo-build.log
CHANGED
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
|
|
2
|
-
> @actuate-media/cli@0.
|
|
2
|
+
> @actuate-media/cli@0.10.0 test /home/runner/work/actuatecms/actuatecms/packages/cli
|
|
3
3
|
> vitest run
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.8 [39m[90m/home/runner/work/actuatecms/actuatecms/packages/cli[39m
|
|
7
7
|
|
|
8
|
-
[32m✓[39m dist/__tests__/db-sync.test.js [2m([22m[2m10 tests[22m[2m)[22m[33m
|
|
9
|
-
[32m✓[39m
|
|
10
|
-
[32m✓[39m
|
|
11
|
-
[32m✓[39m src/__tests__/
|
|
8
|
+
[32m✓[39m dist/__tests__/db-sync.test.js [2m([22m[2m10 tests[22m[2m)[22m[33m 324[2mms[22m[39m
|
|
9
|
+
[32m✓[39m dist/__tests__/seed.test.js [2m([22m[2m10 tests[22m[2m)[22m[32m 241[2mms[22m[39m
|
|
10
|
+
[32m✓[39m src/__tests__/db-sync.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 300[2mms[22m[39m
|
|
11
|
+
[32m✓[39m src/__tests__/seed.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 141[2mms[22m[39m
|
|
12
|
+
[32m✓[39m dist/__tests__/deployment-diagnostics.test.js [2m([22m[2m8 tests[22m[2m)[22m[32m 68[2mms[22m[39m
|
|
13
|
+
[32m✓[39m src/__tests__/deployment-diagnostics.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 58[2mms[22m[39m
|
|
12
14
|
- Reading canonical Actuate schema...
|
|
13
15
|
[90mstdout[2m | dist/__tests__/db-init.test.js[2m > [22m[2mdb:init (WS-D D5 — canonical schema, no stale fragment)[2m > [22m[2mcommand[2m > [22m[2minjects canonical models with @@map and no duplicate datasource/generator
|
|
14
16
|
[22m[39m✔ Prisma client generated.
|
|
@@ -18,45 +20,45 @@
|
|
|
18
20
|
- Running prisma generate...
|
|
19
21
|
[90mstdout[2m | dist/__tests__/db-init.test.js[2m > [22m[2mdb:init (WS-D D5 — canonical schema, no stale fragment)[2m > [22m[2mcommand[2m > [22m[2mfails clearly when cms-core cannot be located
|
|
20
22
|
[22m[39mℹ Install it first: `npm install @actuate-media/cms-core`.
|
|
21
|
-
|
|
22
23
|
- Reading canonical Actuate schema...
|
|
24
|
+
|
|
23
25
|
✖ Could not locate @actuate-media/cms-core.
|
|
24
26
|
- Reading canonical Actuate schema...
|
|
25
|
-
✔ Actuate CMS models added to schema.
|
|
26
|
-
- Running prisma generate...
|
|
27
27
|
[90mstdout[2m | dist/__tests__/db-init.test.js[2m > [22m[2mdb:init (WS-D D5 — canonical schema, no stale fragment)[2m > [22m[2mcommand[2m > [22m[2mis idempotent without --force
|
|
28
28
|
[22m[39m✔ Prisma client generated.
|
|
29
29
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
30
30
|
|
|
31
|
+
✔ Actuate CMS models added to schema.
|
|
32
|
+
- Running prisma generate...
|
|
31
33
|
- Reading canonical Actuate schema...
|
|
32
34
|
ℹ Actuate CMS models already present in schema. Use --force to overwrite.
|
|
33
|
-
[32m✓[39m dist/__tests__/db-init.test.js [2m([22m[2m4 tests[22m[2m)[22m[
|
|
35
|
+
[32m✓[39m dist/__tests__/db-init.test.js [2m([22m[2m4 tests[22m[2m)[22m[32m 285[2mms[22m[39m
|
|
34
36
|
- Reading canonical Actuate schema...
|
|
35
37
|
✔ Actuate CMS models added to schema.
|
|
38
|
+
- Running prisma generate...
|
|
36
39
|
[90mstdout[2m | src/__tests__/db-init.test.ts[2m > [22m[2mdb:init (WS-D D5 — canonical schema, no stale fragment)[2m > [22m[2mcommand[2m > [22m[2minjects canonical models with @@map and no duplicate datasource/generator
|
|
37
40
|
[22m[39m✔ Prisma client generated.
|
|
38
|
-
- Running prisma generate...
|
|
39
41
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
40
42
|
|
|
41
43
|
[90mstdout[2m | src/__tests__/db-init.test.ts[2m > [22m[2mdb:init (WS-D D5 — canonical schema, no stale fragment)[2m > [22m[2mcommand[2m > [22m[2mfails clearly when cms-core cannot be located
|
|
44
|
+
- Reading canonical Actuate schema...
|
|
42
45
|
[22m[39mℹ Install it first: `npm install @actuate-media/cms-core`.
|
|
43
46
|
|
|
44
|
-
- Reading canonical Actuate schema...
|
|
45
47
|
✖ Could not locate @actuate-media/cms-core.
|
|
46
48
|
- Reading canonical Actuate schema...
|
|
49
|
+
✔ Actuate CMS models added to schema.
|
|
50
|
+
- Running prisma generate...
|
|
47
51
|
[90mstdout[2m | src/__tests__/db-init.test.ts[2m > [22m[2mdb:init (WS-D D5 — canonical schema, no stale fragment)[2m > [22m[2mcommand[2m > [22m[2mis idempotent without --force
|
|
48
52
|
[22m[39m✔ Prisma client generated.
|
|
49
|
-
✔ Actuate CMS models added to schema.
|
|
50
53
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
51
54
|
|
|
52
|
-
- Running prisma generate...
|
|
53
55
|
- Reading canonical Actuate schema...
|
|
54
56
|
ℹ Actuate CMS models already present in schema. Use --force to overwrite.
|
|
55
|
-
[32m✓[39m src/__tests__/db-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[
|
|
56
|
-
[32m✓[39m dist/__tests__/seed.test.js [2m([22m[
|
|
57
|
-
[32m✓[39m src/__tests__/seed.test.ts [2m([22m[
|
|
58
|
-
[32m✓[39m dist/__tests__/vercel-env-matrix.test.js [2m([22m[2m5 tests[22m[2m)[22m[32m
|
|
59
|
-
[32m✓[39m src/__tests__/vercel-env-matrix.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m
|
|
57
|
+
[32m✓[39m src/__tests__/db-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 289[2mms[22m[39m
|
|
58
|
+
[32m✓[39m dist/__tests__/form-seed.test.js [2m([22m[2m10 tests[22m[2m)[22m[32m 57[2mms[22m[39m
|
|
59
|
+
[32m✓[39m src/__tests__/form-seed.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 59[2mms[22m[39m
|
|
60
|
+
[32m✓[39m dist/__tests__/vercel-env-matrix.test.js [2m([22m[2m5 tests[22m[2m)[22m[32m 34[2mms[22m[39m
|
|
61
|
+
[32m✓[39m src/__tests__/vercel-env-matrix.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 43[2mms[22m[39m
|
|
60
62
|
- Reading canonical Actuate schema...
|
|
61
63
|
✔ Actuate CMS models added to schema.
|
|
62
64
|
- Running prisma generate...
|
|
@@ -64,20 +66,20 @@
|
|
|
64
66
|
[22m[39m✔ Prisma client generated.
|
|
65
67
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
66
68
|
|
|
67
|
-
[32m✓[39m dist/__tests__/schema-fragment.test.js [2m([22m[2m1 test[22m[2m)[22m[32m
|
|
69
|
+
[32m✓[39m dist/__tests__/schema-fragment.test.js [2m([22m[2m1 test[22m[2m)[22m[32m 96[2mms[22m[39m
|
|
68
70
|
- Reading canonical Actuate schema...
|
|
69
|
-
✔ Actuate CMS models added to schema.
|
|
70
|
-
- Running prisma generate...
|
|
71
71
|
[90mstdout[2m | src/__tests__/schema-fragment.test.ts[2m > [22m[2mdb:init schema fragment[2m > [22m[2minjects all deploy-critical Actuate models
|
|
72
|
+
✔ Actuate CMS models added to schema.
|
|
72
73
|
[22m[39m✔ Prisma client generated.
|
|
73
74
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
[32m✓[39m
|
|
77
|
-
[32m✓[39m
|
|
76
|
+
- Running prisma generate...
|
|
77
|
+
[32m✓[39m src/__tests__/schema-fragment.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 116[2mms[22m[39m
|
|
78
|
+
[32m✓[39m dist/__tests__/init.test.js [2m([22m[2m2 tests[22m[2m)[22m[32m 54[2mms[22m[39m
|
|
79
|
+
[32m✓[39m src/__tests__/init.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 32[2mms[22m[39m
|
|
78
80
|
|
|
79
|
-
[2m Test Files [22m [1m[
|
|
80
|
-
[2m Tests [22m [1m[
|
|
81
|
-
[2m Start at [22m
|
|
82
|
-
[2m Duration [22m
|
|
81
|
+
[2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
|
|
82
|
+
[2m Tests [22m [1m[32m100 passed[39m[22m[90m (100)[39m
|
|
83
|
+
[2m Start at [22m 15:53:52
|
|
84
|
+
[2m Duration [22m 23.79s[2m (transform 2.27s, setup 0ms, import 6.86s, tests 2.20s, environment 2ms)[22m
|
|
83
85
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @actuate-media/cli
|
|
2
2
|
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 232e251: New `actuate seed --upsert` (also on `populate`): documents are matched by collection + slug and updated in place instead of inserting duplicates, making seed files safe to re-run as content evolves. Every update records a version snapshot; `publishedAt` is only stamped on the transition into PUBLISHED; documents without a slug always insert. The summary line reports created vs updated counts.
|
|
8
|
+
|
|
9
|
+
## 0.9.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- be9b5ff: `actuate seed` now validates `forms`-collection entries before writing anything, with actionable per-form errors. The most common mistake — putting the document envelope status (`PUBLISHED`) in `data.status` instead of the form's own lifecycle status (`active` / `draft` / `archived`, which gates the public endpoints) — gets a targeted explanation, as do fields using `name` instead of `key`/`label` and unknown field types. The `--demo` forms were rewritten to the canonical shape (they previously seeded fields without `key`/`label` and no `data.status`, so `/api/cms/public/forms/:slug` 404'd on them).
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 854152d: Developer experience improvements from external-consumer feedback:
|
|
18
|
+
- Every published package now ships its `CHANGELOG.md` in the npm tarball, and packages that were missing a `README.md` (cli, cms-admin, cms-core, import, platform-vercel, all plugins, sections-react) now have one — so release notes and usage docs are visible on npmjs.com and in `node_modules`.
|
|
19
|
+
- New client-safe form validation entry point: `@actuate-media/cms-core/forms/client` exports `validateFormFieldClient()`, `validateFormValuesClient()`, visibility/conditional helpers, and the exact `FORM_EMAIL_RE` / `FORM_PHONE_RE` regexes the server enforces — zero Node dependencies, so public-site forms can mirror server rules without reimplementing them. The server validator now imports the same primitives, so client and server can never drift.
|
|
20
|
+
|
|
3
21
|
## 0.8.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
package/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# @actuate-media/cli
|
|
2
|
+
|
|
3
|
+
CLI for [Actuate CMS](https://github.com/actuate-media/actuatecms) —
|
|
4
|
+
migrations, codegen, seeding, imports/exports, verification, and upgrades.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
npm install -D @actuate-media/cli
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Common commands
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
actuate migrate # apply Prisma migrations
|
|
14
|
+
actuate seed # seed content from seed scripts
|
|
15
|
+
actuate codegen # generate typed client from actuate.config.ts
|
|
16
|
+
actuate verify # check config, sections, and environment
|
|
17
|
+
actuate verify:cms-sections # editor ↔ frontend section contract check
|
|
18
|
+
actuate update # check for / apply CMS package updates
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Run `actuate --help` for the full command list.
|
|
22
|
+
|
|
23
|
+
## Release notes
|
|
24
|
+
|
|
25
|
+
See [CHANGELOG.md](./CHANGELOG.md) (shipped with the package) or the
|
|
26
|
+
[GitHub releases](https://github.com/actuate-media/actuatecms/releases).
|
|
27
|
+
|
|
28
|
+
## License
|
|
29
|
+
|
|
30
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-seed.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/form-seed.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
// seed.js transitively imports cms-core helpers at module scope via mocks
|
|
3
|
+
// elsewhere; keep the same stub so importing DEMO_FORMS stays side-effect-free.
|
|
4
|
+
vi.mock('@actuate-media/cms-core', () => ({
|
|
5
|
+
extractPlainText: vi.fn(),
|
|
6
|
+
hashContent: vi.fn(),
|
|
7
|
+
sanitizeHtml: vi.fn(),
|
|
8
|
+
createInitialAdmin: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
import { validateFormSeedData, validateFormSeeds } from '../utils/form-seed.js';
|
|
11
|
+
import { DEMO_FORMS } from '../commands/seed.js';
|
|
12
|
+
const validForm = () => ({
|
|
13
|
+
name: 'Contact',
|
|
14
|
+
slug: 'contact',
|
|
15
|
+
status: 'active',
|
|
16
|
+
fields: [{ id: 'f1', key: 'email', label: 'Email', type: 'email', required: true, sortOrder: 0 }],
|
|
17
|
+
});
|
|
18
|
+
describe('validateFormSeedData', () => {
|
|
19
|
+
it('accepts the canonical form shape', () => {
|
|
20
|
+
expect(validateFormSeedData(validForm())).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
it('every DEMO_FORMS entry passes its own validation', () => {
|
|
23
|
+
for (const form of DEMO_FORMS) {
|
|
24
|
+
expect(validateFormSeedData(form, form.slug)).toEqual([]);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
it('explains the data.status vs document status split when status is missing', () => {
|
|
28
|
+
const { status: _status, ...form } = validForm();
|
|
29
|
+
const errors = validateFormSeedData(form);
|
|
30
|
+
expect(errors).toHaveLength(1);
|
|
31
|
+
expect(errors[0]).toContain('data.status to "active"');
|
|
32
|
+
expect(errors[0]).toContain('document envelope status');
|
|
33
|
+
});
|
|
34
|
+
it('catches a document-envelope status (PUBLISHED) used as the form status', () => {
|
|
35
|
+
const errors = validateFormSeedData({ ...validForm(), status: 'PUBLISHED' });
|
|
36
|
+
expect(errors).toHaveLength(1);
|
|
37
|
+
expect(errors[0]).toContain('looks like a document envelope status');
|
|
38
|
+
expect(errors[0]).toContain('"active" | "draft" | "archived"');
|
|
39
|
+
});
|
|
40
|
+
it('rejects unknown statuses with the allowed list', () => {
|
|
41
|
+
const errors = validateFormSeedData({ ...validForm(), status: 'live' });
|
|
42
|
+
expect(errors[0]).toContain('invalid data.status "live"');
|
|
43
|
+
});
|
|
44
|
+
it('requires slug, name, and a non-empty fields array', () => {
|
|
45
|
+
const errors = validateFormSeedData({ status: 'active' });
|
|
46
|
+
expect(errors.some((e) => e.includes('"slug"'))).toBe(true);
|
|
47
|
+
expect(errors.some((e) => e.includes('"name"'))).toBe(true);
|
|
48
|
+
expect(errors.some((e) => e.includes('"fields"'))).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
it('points "name"-keyed fields (the old demo shape) at key/label', () => {
|
|
51
|
+
const errors = validateFormSeedData({
|
|
52
|
+
...validForm(),
|
|
53
|
+
fields: [{ name: 'email', type: 'email' }],
|
|
54
|
+
});
|
|
55
|
+
expect(errors.some((e) => e.includes('Rename name → key'))).toBe(true);
|
|
56
|
+
expect(errors.some((e) => e.includes('"label"'))).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it('rejects unknown field types', () => {
|
|
59
|
+
const errors = validateFormSeedData({
|
|
60
|
+
...validForm(),
|
|
61
|
+
fields: [{ key: 'x', label: 'X', type: 'dropdown' }],
|
|
62
|
+
});
|
|
63
|
+
expect(errors[0]).toContain('invalid type "dropdown"');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('validateFormSeeds', () => {
|
|
67
|
+
it('only validates forms-collection documents and labels errors by slug', () => {
|
|
68
|
+
const errors = validateFormSeeds([
|
|
69
|
+
{ collection: 'pages', data: { title: 'Home' } },
|
|
70
|
+
{ collection: 'forms', data: { ...validForm(), slug: 'contact', status: 'PUBLISHED' } },
|
|
71
|
+
]);
|
|
72
|
+
expect(errors).toHaveLength(1);
|
|
73
|
+
expect(errors[0]).toContain('forms "contact"');
|
|
74
|
+
});
|
|
75
|
+
it('returns no errors for a payload without forms', () => {
|
|
76
|
+
expect(validateFormSeeds([{ collection: 'pages', data: {} }])).toEqual([]);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=form-seed.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-seed.test.js","sourceRoot":"","sources":["../../src/__tests__/form-seed.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -112,6 +112,79 @@ describe('seed document creation', () => {
|
|
|
112
112
|
});
|
|
113
113
|
});
|
|
114
114
|
});
|
|
115
|
+
describe('seed document upsert', () => {
|
|
116
|
+
function makeDb(existing) {
|
|
117
|
+
const tx = {
|
|
118
|
+
document: {
|
|
119
|
+
create: vi.fn().mockResolvedValue({ id: 'doc-new' }),
|
|
120
|
+
update: vi.fn().mockResolvedValue({ id: existing?.id ?? 'doc-new' }),
|
|
121
|
+
},
|
|
122
|
+
version: { create: vi.fn() },
|
|
123
|
+
};
|
|
124
|
+
const db = {
|
|
125
|
+
document: { findFirst: vi.fn().mockResolvedValue(existing) },
|
|
126
|
+
$transaction: vi.fn(async (fn) => fn(tx)),
|
|
127
|
+
};
|
|
128
|
+
return { db, tx };
|
|
129
|
+
}
|
|
130
|
+
const doc = {
|
|
131
|
+
collection: 'pages',
|
|
132
|
+
status: 'PUBLISHED',
|
|
133
|
+
data: { title: 'Home v2', slug: 'home' },
|
|
134
|
+
};
|
|
135
|
+
it('updates an existing document matched by collection + slug', async () => {
|
|
136
|
+
const publishedAt = new Date('2026-01-01T00:00:00Z');
|
|
137
|
+
const { db, tx } = makeDb({ id: 'doc-1', status: 'PUBLISHED', publishedAt });
|
|
138
|
+
const result = await createSeedDocument(db, 'admin-1', doc, { upsert: true });
|
|
139
|
+
expect(result).toBe('updated');
|
|
140
|
+
expect(db.document.findFirst).toHaveBeenCalledWith({
|
|
141
|
+
where: { collection: 'pages', slug: 'home', deletedAt: null },
|
|
142
|
+
select: { id: true, status: true, publishedAt: true },
|
|
143
|
+
});
|
|
144
|
+
expect(tx.document.create).not.toHaveBeenCalled();
|
|
145
|
+
expect(tx.document.update).toHaveBeenCalledWith({
|
|
146
|
+
where: { id: 'doc-1' },
|
|
147
|
+
data: expect.objectContaining({
|
|
148
|
+
title: 'Home v2',
|
|
149
|
+
status: 'PUBLISHED',
|
|
150
|
+
// Re-publishing an already-published doc keeps the original timestamp.
|
|
151
|
+
publishedAt,
|
|
152
|
+
updatedById: 'admin-1',
|
|
153
|
+
}),
|
|
154
|
+
});
|
|
155
|
+
expect(tx.version.create).toHaveBeenCalledWith({
|
|
156
|
+
data: expect.objectContaining({ documentId: 'doc-1', changeType: 'UPDATE' }),
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
it('stamps publishedAt on the transition into PUBLISHED', async () => {
|
|
160
|
+
const { db, tx } = makeDb({ id: 'doc-1', status: 'DRAFT', publishedAt: null });
|
|
161
|
+
await createSeedDocument(db, 'admin-1', doc, { upsert: true });
|
|
162
|
+
expect(tx.document.update).toHaveBeenCalledWith(expect.objectContaining({
|
|
163
|
+
data: expect.objectContaining({ publishedAt: expect.any(Date) }),
|
|
164
|
+
}));
|
|
165
|
+
});
|
|
166
|
+
it('creates when no document matches', async () => {
|
|
167
|
+
const { db, tx } = makeDb(null);
|
|
168
|
+
const result = await createSeedDocument(db, 'admin-1', doc, { upsert: true });
|
|
169
|
+
expect(result).toBe('created');
|
|
170
|
+
expect(tx.document.create).toHaveBeenCalled();
|
|
171
|
+
expect(tx.document.update).not.toHaveBeenCalled();
|
|
172
|
+
});
|
|
173
|
+
it('always creates slugless documents (no upsert key)', async () => {
|
|
174
|
+
const { db, tx } = makeDb({ id: 'doc-1', status: 'DRAFT', publishedAt: null });
|
|
175
|
+
const result = await createSeedDocument(db, 'admin-1', { collection: 'pages', status: 'DRAFT', data: { title: 'No slug' } }, { upsert: true });
|
|
176
|
+
expect(result).toBe('created');
|
|
177
|
+
expect(db.document.findFirst).not.toHaveBeenCalled();
|
|
178
|
+
expect(tx.document.create).toHaveBeenCalled();
|
|
179
|
+
});
|
|
180
|
+
it('does not look up existing documents without the upsert flag', async () => {
|
|
181
|
+
const { db, tx } = makeDb({ id: 'doc-1', status: 'DRAFT', publishedAt: null });
|
|
182
|
+
const result = await createSeedDocument(db, 'admin-1', doc);
|
|
183
|
+
expect(result).toBe('created');
|
|
184
|
+
expect(db.document.findFirst).not.toHaveBeenCalled();
|
|
185
|
+
expect(tx.document.create).toHaveBeenCalled();
|
|
186
|
+
});
|
|
187
|
+
});
|
|
115
188
|
describe('demo navigations', () => {
|
|
116
189
|
// The scaffold site layout fetches menus by the `main` and `footer` slugs, so
|
|
117
190
|
// the demo seed must provide exactly those — guard against slug drift.
|
|
@@ -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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"}
|
package/dist/commands/seed.d.ts
CHANGED
|
@@ -1,4 +1,31 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
export declare const DEMO_FORMS: {
|
|
3
|
+
name: string;
|
|
4
|
+
title: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
status: string;
|
|
7
|
+
fields: ({
|
|
8
|
+
id: string;
|
|
9
|
+
key: string;
|
|
10
|
+
label: string;
|
|
11
|
+
type: string;
|
|
12
|
+
required: boolean;
|
|
13
|
+
sortOrder: number;
|
|
14
|
+
options?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
id: string;
|
|
17
|
+
key: string;
|
|
18
|
+
label: string;
|
|
19
|
+
type: string;
|
|
20
|
+
required: boolean;
|
|
21
|
+
sortOrder: number;
|
|
22
|
+
options: {
|
|
23
|
+
label: string;
|
|
24
|
+
value: string;
|
|
25
|
+
}[];
|
|
26
|
+
})[];
|
|
27
|
+
successMessage: string;
|
|
28
|
+
}[];
|
|
2
29
|
export declare const DEMO_NAVIGATIONS: {
|
|
3
30
|
name: string;
|
|
4
31
|
slug: string;
|
|
@@ -26,6 +53,8 @@ export declare function normalizeSeedPayload(seedData: unknown): NormalizedSeedP
|
|
|
26
53
|
export declare function ensureSeedAdmin(db: any): Promise<{
|
|
27
54
|
id: string;
|
|
28
55
|
}>;
|
|
29
|
-
export declare function createSeedDocument(db: any, userId: string, doc: NormalizedSeedDocument
|
|
56
|
+
export declare function createSeedDocument(db: any, userId: string, doc: NormalizedSeedDocument, options?: {
|
|
57
|
+
upsert?: boolean;
|
|
58
|
+
}): Promise<'created' | 'updated'>;
|
|
30
59
|
export declare function registerSeedCommand(program: Command): void;
|
|
31
60
|
//# 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,CAAA;
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8HnC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FtB,CAAA;AAKD,eAAO,MAAM,gBAAgB;;;;;;;;;GAoB5B,CAAA;AAcD,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,EAC3B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA4EhC;AAgJD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuB1D"}
|