@actuate-media/plugin-seo 0.0.12 → 0.0.13

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @actuate-media/plugin-seo
2
2
 
3
+ ## 0.0.13
4
+
5
+ ### Patch Changes
6
+
7
+ - 869620b: Align SEO audit, render, and Content SEO editing: auto-canonical and effective schema type resolution match `composePageMeta()`, schema fields sync on save, Content SEO drawer adds schema type, plugin removes dead `beforeCreate` hook and re-exports cms-core schema detection.
8
+
3
9
  ## 0.0.12
4
10
 
5
11
  ### Patch Changes
@@ -35,6 +35,11 @@ describe('plugin-seo', () => {
35
35
  const plugin = seoPlugin(cfg);
36
36
  expect(plugin.hooks?.[0]?._pluginConfig).toEqual(cfg);
37
37
  });
38
+ it('does not register beforeCreate (schema defaults live in cms-core)', () => {
39
+ const events = seoHooks.map((h) => h.event);
40
+ expect(events).not.toContain('beforeCreate');
41
+ expect(events).toContain('afterUpdate');
42
+ });
38
43
  });
39
44
  });
40
45
  //# sourceMappingURL=index.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,CAAC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAChD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;gBACnC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;gBACvD,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE;gBACvD,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;aACjE,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,CAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAiC,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"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"}
package/dist/hooks.d.ts CHANGED
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Plugin lifecycle hooks.
3
+ *
4
+ * Schema defaults and structured-data stamping are handled in cms-core
5
+ * (`prepareContentStructuredData` on document create/update). Hooks here are
6
+ * limited to cache invalidation side effects.
7
+ */
1
8
  export declare const seoHooks: Array<{
2
9
  event: string;
3
10
  handler: (...args: unknown[]) => Promise<void> | void;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACtD,CA4BA,CAAA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACtD,CAgBA,CAAA"}
package/dist/hooks.js CHANGED
@@ -1,17 +1,11 @@
1
- import { detectSchemaType } from './schema/auto-detect.js';
1
+ /**
2
+ * Plugin lifecycle hooks.
3
+ *
4
+ * Schema defaults and structured-data stamping are handled in cms-core
5
+ * (`prepareContentStructuredData` on document create/update). Hooks here are
6
+ * limited to cache invalidation side effects.
7
+ */
2
8
  export const seoHooks = [
3
- {
4
- event: 'beforeCreate',
5
- handler: (...args) => {
6
- const [data] = args;
7
- if (!data)
8
- return;
9
- const collectionSlug = data._collection ?? '';
10
- if (!data.structuredDataType && collectionSlug) {
11
- data.structuredDataType = detectSchemaType(collectionSlug);
12
- }
13
- },
14
- },
15
9
  {
16
10
  event: 'afterUpdate',
17
11
  handler: async (...args) => {
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,MAAM,CAAC,MAAM,QAAQ,GAGhB;IACH;QACE,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAiC,CAAA;YAChD,IAAI,CAAC,IAAI;gBAAE,OAAM;YAEjB,MAAM,cAAc,GAAI,IAAI,CAAC,WAAsB,IAAI,EAAE,CAAA;YACzD,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,cAAc,EAAE,CAAC;gBAC/C,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;KACF;IACD;QACE,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAiC,CAAA;YAChD,IAAI,CAAC,IAAI;gBAAE,OAAM;YAEjB,MAAM,QAAQ,GAAG,WAAY,IAAI,CAAC,WAAsB,IAAI,QAAQ,EAAE,CAAA;YACtE,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAI,UAAsC,CAAC,cAEzC,CAAA;gBACb,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;KACF;CACF,CAAA"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGhB;IACH;QACE,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAiC,CAAA;YAChD,IAAI,CAAC,IAAI;gBAAE,OAAM;YAEjB,MAAM,QAAQ,GAAG,WAAY,IAAI,CAAC,WAAsB,IAAI,QAAQ,EAAE,CAAA;YACtE,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAI,UAAsC,CAAC,cAEzC,CAAA;gBACb,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;KACF;CACF,CAAA"}
@@ -1,3 +1,3 @@
1
- /** Maps a collection slug to the most appropriate Schema.org type. */
2
- export declare function detectSchemaType(collectionSlug: string): string;
1
+ /** Re-export cms-core schema detection so plugin and runtime paths stay aligned. */
2
+ export { detectSchemaType } from '@actuate-media/cms-core';
3
3
  //# sourceMappingURL=auto-detect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-detect.d.ts","sourceRoot":"","sources":["../../src/schema/auto-detect.ts"],"names":[],"mappings":"AAeA,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAc/D"}
1
+ {"version":3,"file":"auto-detect.d.ts","sourceRoot":"","sources":["../../src/schema/auto-detect.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,28 +1,3 @@
1
- const SLUG_TO_SCHEMA = {
2
- posts: 'Article',
3
- blog: 'Article',
4
- articles: 'Article',
5
- pages: 'WebPage',
6
- team: 'Person',
7
- staff: 'Person',
8
- events: 'Event',
9
- faq: 'FAQPage',
10
- services: 'Service',
11
- jobs: 'JobPosting',
12
- locations: 'LocalBusiness',
13
- testimonials: 'Review',
14
- };
15
- /** Maps a collection slug to the most appropriate Schema.org type. */
16
- export function detectSchemaType(collectionSlug) {
17
- const normalized = collectionSlug.toLowerCase().replace(/[^a-z]/g, '');
18
- if (SLUG_TO_SCHEMA[normalized]) {
19
- return SLUG_TO_SCHEMA[normalized];
20
- }
21
- for (const [key, schemaType] of Object.entries(SLUG_TO_SCHEMA)) {
22
- if (normalized.includes(key) || key.includes(normalized)) {
23
- return schemaType;
24
- }
25
- }
26
- return 'WebPage';
27
- }
1
+ /** Re-export cms-core schema detection so plugin and runtime paths stay aligned. */
2
+ export { detectSchemaType } from '@actuate-media/cms-core';
28
3
  //# sourceMappingURL=auto-detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-detect.js","sourceRoot":"","sources":["../../src/schema/auto-detect.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAA2B;IAC7C,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,OAAO;IACf,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,eAAe;IAC1B,YAAY,EAAE,QAAQ;CACvB,CAAA;AAED,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,cAAsB;IACrD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAEtE,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/D,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACzD,OAAO,UAAU,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"auto-detect.js","sourceRoot":"","sources":["../../src/schema/auto-detect.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/plugin-seo",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuatecms/actuatecms.git",
@@ -27,7 +27,7 @@
27
27
  "@types/react": "^19.0.0",
28
28
  "typescript": "^5.7.0",
29
29
  "vitest": "^4.1.0",
30
- "@actuate-media/cms-core": "0.61.0"
30
+ "@actuate-media/cms-core": "0.77.3"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@actuate-media/cms-core": ">=0.1.0",