@actuate-media/cms-core 0.66.0 → 0.68.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/CHANGELOG.md +151 -0
- package/dist/__tests__/api/ai-quality.test.js +73 -0
- package/dist/__tests__/api/ai-quality.test.js.map +1 -1
- package/dist/__tests__/api/llms-txt.test.js +284 -0
- package/dist/__tests__/api/llms-txt.test.js.map +1 -1
- package/dist/__tests__/api/public-seo.test.js +402 -4
- package/dist/__tests__/api/public-seo.test.js.map +1 -1
- package/dist/__tests__/api/route-contracts.test.js +7 -0
- package/dist/__tests__/api/route-contracts.test.js.map +1 -1
- package/dist/__tests__/content/slug.test.d.ts +2 -0
- package/dist/__tests__/content/slug.test.d.ts.map +1 -0
- package/dist/__tests__/content/slug.test.js +68 -0
- package/dist/__tests__/content/slug.test.js.map +1 -0
- package/dist/__tests__/redirects/auto-301.test.d.ts +2 -0
- package/dist/__tests__/redirects/auto-301.test.d.ts.map +1 -0
- package/dist/__tests__/redirects/auto-301.test.js +172 -0
- package/dist/__tests__/redirects/auto-301.test.js.map +1 -0
- package/dist/__tests__/seo/ai-bots.test.d.ts +2 -0
- package/dist/__tests__/seo/ai-bots.test.d.ts.map +1 -0
- package/dist/__tests__/seo/ai-bots.test.js +53 -0
- package/dist/__tests__/seo/ai-bots.test.js.map +1 -0
- package/dist/__tests__/seo/alt-text.test.d.ts +2 -0
- package/dist/__tests__/seo/alt-text.test.d.ts.map +1 -0
- package/dist/__tests__/seo/alt-text.test.js +47 -0
- package/dist/__tests__/seo/alt-text.test.js.map +1 -0
- package/dist/__tests__/seo/feeds.test.d.ts +2 -0
- package/dist/__tests__/seo/feeds.test.d.ts.map +1 -0
- package/dist/__tests__/seo/feeds.test.js +61 -0
- package/dist/__tests__/seo/feeds.test.js.map +1 -0
- package/dist/__tests__/seo/freshness.test.d.ts +2 -0
- package/dist/__tests__/seo/freshness.test.d.ts.map +1 -0
- package/dist/__tests__/seo/freshness.test.js +89 -0
- package/dist/__tests__/seo/freshness.test.js.map +1 -0
- package/dist/__tests__/seo/llms-sanitize.test.d.ts +2 -0
- package/dist/__tests__/seo/llms-sanitize.test.d.ts.map +1 -0
- package/dist/__tests__/seo/llms-sanitize.test.js +74 -0
- package/dist/__tests__/seo/llms-sanitize.test.js.map +1 -0
- package/dist/__tests__/seo/meta-tags-alternates.test.d.ts +2 -0
- package/dist/__tests__/seo/meta-tags-alternates.test.d.ts.map +1 -0
- package/dist/__tests__/seo/meta-tags-alternates.test.js +52 -0
- package/dist/__tests__/seo/meta-tags-alternates.test.js.map +1 -0
- package/dist/__tests__/seo/page-meta.test.js +230 -14
- package/dist/__tests__/seo/page-meta.test.js.map +1 -1
- package/dist/__tests__/seo/sitemap-notify.test.js +77 -1
- package/dist/__tests__/seo/sitemap-notify.test.js.map +1 -1
- package/dist/__tests__/validation/publish.test.d.ts +2 -0
- package/dist/__tests__/validation/publish.test.d.ts.map +1 -0
- package/dist/__tests__/validation/publish.test.js +164 -0
- package/dist/__tests__/validation/publish.test.js.map +1 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +172 -8
- package/dist/actions.js.map +1 -1
- package/dist/api/route-helpers.d.ts +8 -0
- package/dist/api/route-helpers.d.ts.map +1 -1
- package/dist/api/route-helpers.js +20 -0
- package/dist/api/route-helpers.js.map +1 -1
- package/dist/api/routes/ai-seo.d.ts.map +1 -1
- package/dist/api/routes/ai-seo.js +32 -1
- package/dist/api/routes/ai-seo.js.map +1 -1
- package/dist/api/routes/documents.d.ts.map +1 -1
- package/dist/api/routes/documents.js +3 -3
- package/dist/api/routes/documents.js.map +1 -1
- package/dist/api/routes/seo-public.d.ts.map +1 -1
- package/dist/api/routes/seo-public.js +371 -62
- package/dist/api/routes/seo-public.js.map +1 -1
- package/dist/api/routes/seo.d.ts.map +1 -1
- package/dist/api/routes/seo.js +124 -16
- package/dist/api/routes/seo.js.map +1 -1
- package/dist/api/routes/url-resolution.d.ts.map +1 -1
- package/dist/api/routes/url-resolution.js +40 -1
- package/dist/api/routes/url-resolution.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -1
- package/dist/config/types.d.ts +51 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/content/index.d.ts +1 -0
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +1 -0
- package/dist/content/index.js.map +1 -1
- package/dist/content/slug.d.ts +40 -0
- package/dist/content/slug.d.ts.map +1 -0
- package/dist/content/slug.js +78 -0
- package/dist/content/slug.js.map +1 -0
- package/dist/content/structured-data.d.ts +6 -0
- package/dist/content/structured-data.d.ts.map +1 -1
- package/dist/content/structured-data.js +6 -0
- package/dist/content/structured-data.js.map +1 -1
- package/dist/content-health/scanner.d.ts +4 -3
- package/dist/content-health/scanner.d.ts.map +1 -1
- package/dist/content-health/scanner.js +6 -12
- package/dist/content-health/scanner.js.map +1 -1
- package/dist/redirects/auto.d.ts +45 -0
- package/dist/redirects/auto.d.ts.map +1 -0
- package/dist/redirects/auto.js +55 -0
- package/dist/redirects/auto.js.map +1 -0
- package/dist/redirects/index.d.ts +2 -0
- package/dist/redirects/index.d.ts.map +1 -1
- package/dist/redirects/index.js +1 -0
- package/dist/redirects/index.js.map +1 -1
- package/dist/seo/ai-bots.d.ts +42 -0
- package/dist/seo/ai-bots.d.ts.map +1 -0
- package/dist/seo/ai-bots.js +104 -0
- package/dist/seo/ai-bots.js.map +1 -0
- package/dist/seo/alt-text.d.ts +39 -0
- package/dist/seo/alt-text.d.ts.map +1 -0
- package/dist/seo/alt-text.js +67 -0
- package/dist/seo/alt-text.js.map +1 -0
- package/dist/seo/analysis.d.ts.map +1 -1
- package/dist/seo/analysis.js +7 -11
- package/dist/seo/analysis.js.map +1 -1
- package/dist/seo/audit-engine.d.ts +1 -0
- package/dist/seo/audit-engine.d.ts.map +1 -1
- package/dist/seo/audit-engine.js +4 -4
- package/dist/seo/audit-engine.js.map +1 -1
- package/dist/seo/audit-runner.d.ts.map +1 -1
- package/dist/seo/audit-runner.js +1 -0
- package/dist/seo/audit-runner.js.map +1 -1
- package/dist/seo/feeds.d.ts +36 -0
- package/dist/seo/feeds.d.ts.map +1 -0
- package/dist/seo/feeds.js +71 -0
- package/dist/seo/feeds.js.map +1 -0
- package/dist/seo/index.d.ts +10 -4
- package/dist/seo/index.d.ts.map +1 -1
- package/dist/seo/index.js +6 -3
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/llms-txt.d.ts +24 -0
- package/dist/seo/llms-txt.d.ts.map +1 -1
- package/dist/seo/llms-txt.js +109 -47
- package/dist/seo/llms-txt.js.map +1 -1
- package/dist/seo/meta-tags.d.ts +14 -0
- package/dist/seo/meta-tags.d.ts.map +1 -1
- package/dist/seo/meta-tags.js +21 -2
- package/dist/seo/meta-tags.js.map +1 -1
- package/dist/seo/page-meta.d.ts +47 -0
- package/dist/seo/page-meta.d.ts.map +1 -1
- package/dist/seo/page-meta.js +280 -70
- package/dist/seo/page-meta.js.map +1 -1
- package/dist/seo/sitemap-notify.d.ts +30 -0
- package/dist/seo/sitemap-notify.d.ts.map +1 -1
- package/dist/seo/sitemap-notify.js +87 -0
- package/dist/seo/sitemap-notify.js.map +1 -1
- package/dist/validation/publish.d.ts +53 -0
- package/dist/validation/publish.d.ts.map +1 -0
- package/dist/validation/publish.js +75 -0
- package/dist/validation/publish.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-notify.js","sourceRoot":"","sources":["../../src/seo/sitemap-notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAQ3D,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAAC,OAAkC;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QAC1B,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAClE,OAAO,GAAG,CAAC,CAAC,MAAM,cAAc,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;IAC1C,OAAO;QACL,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,uCAAuC,GAAG,EAAE,EAAE;QACrE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,qCAAqC,GAAG,EAAE,EAAE;KAClE,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"sitemap-notify.js","sourceRoot":"","sources":["../../src/seo/sitemap-notify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side publish validation gate.
|
|
3
|
+
*
|
|
4
|
+
* The admin UI runs pre-publish checks, but the data layer is reachable by the
|
|
5
|
+
* SDK, MCP tools, agents, and the public API — all of which could otherwise
|
|
6
|
+
* publish broken content straight past those checks. This module is the single
|
|
7
|
+
* shared validator the action layer runs on every publish so the rules hold no
|
|
8
|
+
* matter who writes.
|
|
9
|
+
*
|
|
10
|
+
* Scope is deliberately narrow and universal: only publicly-routed content
|
|
11
|
+
* (collections typed `page` or `post`) is gated, and only on hard, content-
|
|
12
|
+
* agnostic invariants that make a *published* page genuinely broken (no title,
|
|
13
|
+
* no URL). Field-shape rules belong in the collection's own field definitions.
|
|
14
|
+
* Softer quality issues (missing description, etc.) are returned as warnings
|
|
15
|
+
* and never block.
|
|
16
|
+
*/
|
|
17
|
+
import type { ActuateCMSConfig, CollectionDefinition } from '../config/types.js';
|
|
18
|
+
export type PublishValidationMode = 'block' | 'warn' | 'off';
|
|
19
|
+
export interface PublishValidationResult {
|
|
20
|
+
errors: string[];
|
|
21
|
+
warnings: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the configured gate mode. Defaults to `block` — a published page that
|
|
25
|
+
* fails a hard invariant is a defect, and the whole point of the gate is to
|
|
26
|
+
* stop it server-side. Operators can relax to `warn` (log only) or `off`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolvePublishValidationMode(config: Pick<ActuateCMSConfig, 'seo'> | null | undefined): PublishValidationMode;
|
|
29
|
+
/**
|
|
30
|
+
* Only publicly-routed content is gated. A collection qualifies when it is
|
|
31
|
+
* explicitly typed `page` or `post`; everything else (internal singletons,
|
|
32
|
+
* untyped/utility collections, forms with their own lifecycle) is skipped.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isGatedContentCollection(collectionDef: CollectionDefinition | null | undefined): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Validate a document that is about to be (or remain) published. `data` is the
|
|
37
|
+
* full, merged document data as it will be stored.
|
|
38
|
+
*/
|
|
39
|
+
export declare function validatePublishableDocument(params: {
|
|
40
|
+
data: Record<string, unknown>;
|
|
41
|
+
}): PublishValidationResult;
|
|
42
|
+
/**
|
|
43
|
+
* Run the gate for a publish and apply the configured mode. Throws a single
|
|
44
|
+
* combined error in `block` mode when there are hard errors; logs (non-test)
|
|
45
|
+
* in `warn` mode; no-ops in `off` mode. Returns the raw result so callers can
|
|
46
|
+
* surface warnings.
|
|
47
|
+
*/
|
|
48
|
+
export declare function enforcePublishValidation(params: {
|
|
49
|
+
collectionDef: CollectionDefinition | null | undefined;
|
|
50
|
+
data: Record<string, unknown>;
|
|
51
|
+
config: Pick<ActuateCMSConfig, 'seo'> | null | undefined;
|
|
52
|
+
}): PublishValidationResult;
|
|
53
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/validation/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAGhF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;AAE5D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GACvD,qBAAqB,CAGvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GACrD,OAAO,CAGT;AASD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,GAAG,uBAAuB,CAiC1B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,aAAa,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAA;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,CAAA;CACzD,GAAG,uBAAuB,CAc1B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { validateSlug } from '../content/slug.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the configured gate mode. Defaults to `block` — a published page that
|
|
4
|
+
* fails a hard invariant is a defect, and the whole point of the gate is to
|
|
5
|
+
* stop it server-side. Operators can relax to `warn` (log only) or `off`.
|
|
6
|
+
*/
|
|
7
|
+
export function resolvePublishValidationMode(config) {
|
|
8
|
+
const mode = config?.seo?.publishValidation;
|
|
9
|
+
return mode === 'warn' || mode === 'off' ? mode : 'block';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Only publicly-routed content is gated. A collection qualifies when it is
|
|
13
|
+
* explicitly typed `page` or `post`; everything else (internal singletons,
|
|
14
|
+
* untyped/utility collections, forms with their own lifecycle) is skipped.
|
|
15
|
+
*/
|
|
16
|
+
export function isGatedContentCollection(collectionDef) {
|
|
17
|
+
const type = collectionDef?.type;
|
|
18
|
+
return type === 'page' || type === 'post';
|
|
19
|
+
}
|
|
20
|
+
function firstNonEmptyString(...candidates) {
|
|
21
|
+
for (const c of candidates) {
|
|
22
|
+
if (typeof c === 'string' && c.trim().length > 0)
|
|
23
|
+
return c.trim();
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate a document that is about to be (or remain) published. `data` is the
|
|
29
|
+
* full, merged document data as it will be stored.
|
|
30
|
+
*/
|
|
31
|
+
export function validatePublishableDocument(params) {
|
|
32
|
+
const errors = [];
|
|
33
|
+
const warnings = [];
|
|
34
|
+
const data = params.data ?? {};
|
|
35
|
+
const page = data.pageSettings ?? {};
|
|
36
|
+
const title = firstNonEmptyString(data.metaTitle, page.metaTitle, data.title, page.title);
|
|
37
|
+
if (!title) {
|
|
38
|
+
errors.push('A published page needs a title.');
|
|
39
|
+
}
|
|
40
|
+
const slug = firstNonEmptyString(data.slug);
|
|
41
|
+
const path = firstNonEmptyString(data.path);
|
|
42
|
+
if (!slug && !path) {
|
|
43
|
+
errors.push('A published page needs a slug or path so it has a public URL.');
|
|
44
|
+
}
|
|
45
|
+
const slugError = validateSlug(slug);
|
|
46
|
+
if (slugError) {
|
|
47
|
+
errors.push(slugError);
|
|
48
|
+
}
|
|
49
|
+
const description = firstNonEmptyString(data.metaDescription, page.metaDescription, data.excerpt, data.description);
|
|
50
|
+
if (!description) {
|
|
51
|
+
warnings.push('No meta description — search engines will generate a snippet for you.');
|
|
52
|
+
}
|
|
53
|
+
return { errors, warnings };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Run the gate for a publish and apply the configured mode. Throws a single
|
|
57
|
+
* combined error in `block` mode when there are hard errors; logs (non-test)
|
|
58
|
+
* in `warn` mode; no-ops in `off` mode. Returns the raw result so callers can
|
|
59
|
+
* surface warnings.
|
|
60
|
+
*/
|
|
61
|
+
export function enforcePublishValidation(params) {
|
|
62
|
+
const empty = { errors: [], warnings: [] };
|
|
63
|
+
const mode = resolvePublishValidationMode(params.config);
|
|
64
|
+
if (mode === 'off' || !isGatedContentCollection(params.collectionDef))
|
|
65
|
+
return empty;
|
|
66
|
+
const result = validatePublishableDocument({ data: params.data });
|
|
67
|
+
if (result.errors.length > 0 && mode === 'block') {
|
|
68
|
+
throw new Error(`Cannot publish — ${result.errors.join(' ')}`);
|
|
69
|
+
}
|
|
70
|
+
if (result.errors.length > 0 && mode === 'warn' && process.env.NODE_ENV !== 'test') {
|
|
71
|
+
console.warn('[actuate] publish validation (warn mode):', result.errors.join(' '));
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/validation/publish.ts"],"names":[],"mappings":"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"}
|