@prenta/core 4.1.0 → 4.1.1

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/cms-core
2
2
 
3
+ ## 4.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - b86fa37: Accept slash-separated nested slugs (help/faq) and label the published-page save as Update live.
8
+
3
9
  ## 4.1.0
4
10
 
5
11
  ### Minor Changes
@@ -8,9 +8,9 @@
8
8
  * URLs or shadow admin routes. This module is the single source of truth.
9
9
  */
10
10
  /**
11
- * A valid slug is one or more lowercase alphanumeric segments joined by single
12
- * hyphens: no uppercase, no spaces, no leading/trailing/double hyphens, no other
13
- * punctuation. Matches the strict form the public URL builder expects.
11
+ * A valid slug segment is one or more lowercase alphanumeric runs joined by
12
+ * single hyphens: no uppercase, no spaces, no leading/trailing/double hyphens,
13
+ * no other punctuation. Nested pages may join segments with `/` (`help/faq`).
14
14
  */
15
15
  export declare const SLUG_PATTERN: RegExp;
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/content/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAA+B,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAY3C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQtE;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAW3E"}
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/content/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAA+B,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAY3C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQtE;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAgB3E"}
@@ -8,9 +8,9 @@
8
8
  * URLs or shadow admin routes. This module is the single source of truth.
9
9
  */
10
10
  /**
11
- * A valid slug is one or more lowercase alphanumeric segments joined by single
12
- * hyphens: no uppercase, no spaces, no leading/trailing/double hyphens, no other
13
- * punctuation. Matches the strict form the public URL builder expects.
11
+ * A valid slug segment is one or more lowercase alphanumeric runs joined by
12
+ * single hyphens: no uppercase, no spaces, no leading/trailing/double hyphens,
13
+ * no other punctuation. Nested pages may join segments with `/` (`help/faq`).
14
14
  */
15
15
  export const SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
16
16
  /**
@@ -67,11 +67,16 @@ export function validateSlug(slug) {
67
67
  const trimmed = slug.trim();
68
68
  if (trimmed.length === 0)
69
69
  return null;
70
- if (!isValidSlug(trimmed)) {
71
- return `Invalid slug "${trimmed}" use lowercase letters, numbers, and single hyphens (e.g. "my-page").`;
72
- }
73
- if (isReservedSlug(trimmed)) {
74
- return `The slug "${trimmed}" is reserved and cannot be used.`;
70
+ // Nested pages historically stored the full path in slug (`help/faq`).
71
+ // Each segment must still be a canonical slug; `/` is only a separator.
72
+ const segments = trimmed.split('/');
73
+ for (const segment of segments) {
74
+ if (!isValidSlug(segment)) {
75
+ return `Invalid slug "${trimmed}" — use lowercase letters, numbers, and single hyphens (e.g. "my-page").`;
76
+ }
77
+ if (isReservedSlug(segment)) {
78
+ return `The slug "${trimmed}" is reserved and cannot be used.`;
79
+ }
75
80
  }
76
81
  return null;
77
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/content/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA;AAExD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,OAAO;IACP,KAAK;IACL,OAAO;IACP,SAAS;IACT,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,OAAO,KAAK;SACT,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAA+B;IAC1D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,iBAAiB,OAAO,0EAA0E,CAAA;IAC3G,CAAC;IACD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,aAAa,OAAO,mCAAmC,CAAA;IAChE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/content/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA;AAExD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,OAAO;IACP,KAAK;IACL,OAAO;IACP,SAAS;IACT,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,OAAO,KAAK;SACT,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAA+B;IAC1D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,uEAAuE;IACvE,wEAAwE;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,iBAAiB,OAAO,0EAA0E,CAAA;QAC3G,CAAC;QACD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,aAAa,OAAO,mCAAmC,CAAA;QAChE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prenta/core",
3
- "version": "4.1.0",
3
+ "version": "4.1.1",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",