@payload-onpage/plugin 0.2.1 → 0.3.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.
Files changed (52) hide show
  1. package/README.md +6 -0
  2. package/dist/access.d.ts +7 -4
  3. package/dist/access.d.ts.map +1 -1
  4. package/dist/access.js +23 -20
  5. package/dist/access.js.map +1 -1
  6. package/dist/admin/OnPageAdminControls.d.ts +3 -2
  7. package/dist/admin/OnPageAdminControls.d.ts.map +1 -1
  8. package/dist/admin/OnPageAdminControls.js +12 -8
  9. package/dist/admin/OnPageAdminControls.js.map +1 -1
  10. package/dist/endpoints.d.ts +22 -6
  11. package/dist/endpoints.d.ts.map +1 -1
  12. package/dist/endpoints.js +87 -80
  13. package/dist/endpoints.js.map +1 -1
  14. package/dist/hooks.d.ts +11 -5
  15. package/dist/hooks.d.ts.map +1 -1
  16. package/dist/hooks.js +2 -2
  17. package/dist/hooks.js.map +1 -1
  18. package/dist/http.d.ts +18 -4
  19. package/dist/http.d.ts.map +1 -1
  20. package/dist/http.js +30 -16
  21. package/dist/http.js.map +1 -1
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +61 -50
  25. package/dist/index.js.map +1 -1
  26. package/dist/options.d.ts +22 -11
  27. package/dist/options.d.ts.map +1 -1
  28. package/dist/options.js +11 -3
  29. package/dist/options.js.map +1 -1
  30. package/dist/paths.d.ts +2 -2
  31. package/dist/paths.d.ts.map +1 -1
  32. package/dist/paths.js +11 -24
  33. package/dist/paths.js.map +1 -1
  34. package/dist/schema.d.ts +6 -4
  35. package/dist/schema.d.ts.map +1 -1
  36. package/dist/schema.js +115 -62
  37. package/dist/schema.js.map +1 -1
  38. package/dist/translations.d.ts +12 -1
  39. package/dist/translations.d.ts.map +1 -1
  40. package/dist/translations.js +10 -9
  41. package/dist/translations.js.map +1 -1
  42. package/package.json +15 -4
  43. package/src/access.ts +26 -19
  44. package/src/admin/OnPageAdminControls.tsx +16 -16
  45. package/src/endpoints.ts +105 -98
  46. package/src/hooks.ts +14 -5
  47. package/src/http.ts +51 -15
  48. package/src/index.ts +77 -64
  49. package/src/options.ts +29 -17
  50. package/src/paths.ts +14 -27
  51. package/src/schema.ts +137 -79
  52. package/src/translations.ts +17 -11
package/dist/hooks.d.ts CHANGED
@@ -4,15 +4,21 @@
4
4
  * - beforeValidate/beforeChange: strip markers from every write, so they can't be stored
5
5
  * - beforeChange: stale-write guard (409) when the editor sends the version it last saw
6
6
  */
7
- import { type EncodeFilter, type SchemaField } from '@payload-onpage/core';
8
- import { type PayloadRequest } from 'payload';
7
+ import { CONTEXT_KEY, type DocRef, type EncodeFilter, type SchemaField } from '@payload-onpage/core';
8
+ import { type PayloadRequest, type RequestContext } from 'payload';
9
+ declare module 'payload' {
10
+ interface RequestContext {
11
+ /** Set by `onpageContext()`: this read should carry auto-mapping markers. */
12
+ [CONTEXT_KEY]?: boolean;
13
+ }
14
+ }
9
15
  /** True when a read asked for auto-mapping markers (see `onpageContext()`). */
10
- export declare const wantsMarkers: (context: unknown) => boolean;
16
+ export declare const wantsMarkers: (context: RequestContext | undefined) => boolean;
11
17
  export declare const stripMarkers: ({ data }: {
12
18
  data?: unknown;
13
19
  }) => unknown;
14
20
  export declare function encodeOnRead(opts: {
15
- kind: 'collection' | 'global';
21
+ kind: DocRef['kind'];
16
22
  slug: string;
17
23
  fields: () => SchemaField[];
18
24
  only?: string[];
@@ -20,7 +26,7 @@ export declare function encodeOnRead(opts: {
20
26
  }): ({ doc, req, context, }: {
21
27
  doc: Record<string, unknown>;
22
28
  req: PayloadRequest;
23
- context: unknown;
29
+ context: RequestContext;
24
30
  }) => Record<string, unknown>;
25
31
  /**
26
32
  * Optimistic concurrency: the editor sends `x-onpage-if-unmodified-since` with
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAEvD,+EAA+E;AAC/E,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,OACoD,CAAA;AAEpG,eAAO,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,YAAyC,CAAA;AAElG,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,WAAW,EAAE,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,IACS,wBAIL;IACD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,GAAG,EAAE,cAAc,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,6BAYF;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,6BAIhC;IACD,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACtC,KAAG,CAaH,CAAA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,WAAW,EAKX,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAE5E,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,6EAA6E;QAC7E,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAA;KACxB;CACF;AAED,+EAA+E;AAC/E,eAAO,MAAM,YAAY,GAAI,SAAS,cAAc,GAAG,SAAS,KAAG,OAClC,CAAA;AAEjC,eAAO,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,YAAyC,CAAA;AAElG,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,WAAW,EAAE,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,IACS,wBAIL;IACD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,GAAG,EAAE,cAAc,CAAA;IACnB,OAAO,EAAE,cAAc,CAAA;CACxB,6BAYF;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,6BAIhC;IACD,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACtC,KAAG,CAaH,CAAA"}
package/dist/hooks.js CHANGED
@@ -4,10 +4,10 @@
4
4
  * - beforeValidate/beforeChange: strip markers from every write, so they can't be stored
5
5
  * - beforeChange: stale-write guard (409) when the editor sends the version it last saw
6
6
  */
7
- import { encodeDocument, HEADER, refKey, stegaCleanDeep, } from '@payload-onpage/core';
7
+ import { CONTEXT_KEY, encodeDocument, HEADER, refKey, stegaCleanDeep, } from '@payload-onpage/core';
8
8
  import { APIError } from 'payload';
9
9
  /** True when a read asked for auto-mapping markers (see `onpageContext()`). */
10
- export const wantsMarkers = (context) => !!(context && typeof context === 'object' && context.onpage === true);
10
+ export const wantsMarkers = (context) => context?.[CONTEXT_KEY] === true;
11
11
  export const stripMarkers = ({ data }) => (data ? stegaCleanDeep(data) : data);
12
12
  export function encodeOnRead(opts) {
13
13
  return ({ doc, req, context, }) => {
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,cAAc,EACd,MAAM,EACN,MAAM,EACN,cAAc,GAGf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAuB,MAAM,SAAS,CAAA;AAEvD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAW,EAAE,CACxD,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAK,OAAmC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAA;AAEpG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,EAAsB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAElG,MAAM,UAAU,YAAY,CAAC,IAM5B;IACC,OAAO,CAAC,EACN,GAAG,EACH,GAAG,EACH,OAAO,GAKR,EAAE,EAAE;QACH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,CAAA;QACtE,MAAM,GAAG,GACP,IAAI,CAAC,IAAI,KAAK,QAAQ;YACpB,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI;gBACd,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAqB,EAAE,CAAC;gBAChF,CAAC,CAAC,IAAI,CAAA;QACZ,OAAO,GAAG;YACR,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACnF,CAAC,CAAC,GAAG,CAAA;IACT,CAAC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,EACjC,IAAI,EACJ,GAAG,EACH,WAAW,GAKZ,EAAK,EAAE;IACN,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,WAAW,EAAE,SAAS,CAAA;IACtC,IAAI,CAAC,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,QAAQ,CAChB,gEAAgE,EAChE,GAAG,EACH,SAAS,EACT,IAAI,CACL,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,WAAW,EACX,cAAc,EACd,MAAM,EACN,MAAM,EACN,cAAc,GAIf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAA4C,MAAM,SAAS,CAAA;AAS5E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAmC,EAAW,EAAE,CAC3E,OAAO,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,EAAsB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAElG,MAAM,UAAU,YAAY,CAAC,IAM5B;IACC,OAAO,CAAC,EACN,GAAG,EACH,GAAG,EACH,OAAO,GAKR,EAAE,EAAE;QACH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,CAAA;QACtE,MAAM,GAAG,GACP,IAAI,CAAC,IAAI,KAAK,QAAQ;YACpB,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI;gBACd,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAqB,EAAE,CAAC;gBAChF,CAAC,CAAC,IAAI,CAAA;QACZ,OAAO,GAAG;YACR,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACnF,CAAC,CAAC,GAAG,CAAA;IACT,CAAC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,EACjC,IAAI,EACJ,GAAG,EACH,WAAW,GAKZ,EAAK,EAAE;IACN,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,WAAW,EAAE,SAAS,CAAA;IACtC,IAAI,CAAC,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,QAAQ,CAChB,gEAAgE,EAChE,GAAG,EACH,SAAS,EACT,IAAI,CACL,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
package/dist/http.d.ts CHANGED
@@ -1,10 +1,15 @@
1
1
  /** Request helpers shared by the endpoints. */
2
2
  import { type DocRef } from '@payload-onpage/core';
3
- import type { PayloadRequest } from 'payload';
3
+ import type { PayloadRequest, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload';
4
4
  /** The site origin: `serverURL` when configured, else the request's own origin. */
5
- export declare function originOf(req: PayloadRequest): string;
5
+ export declare const originOf: (req: PayloadRequest) => string;
6
6
  export declare const isSecure: (req: PayloadRequest) => boolean;
7
- export declare const queryOf: (req: PayloadRequest) => URLSearchParams;
7
+ /**
8
+ * Absolute URL of one of our API routes (e.g. `/onpage/preview`), built the way
9
+ * Payload builds its own: honours `routes.api`, Next's basePath and trailing slashes.
10
+ */
11
+ export declare const apiURL: (req: PayloadRequest, path: `/${string}`) => string;
12
+ /** Plain-text reply for the form-POST / new-tab endpoints, where JSON would just be shown raw. */
8
13
  export declare const text: (body: string, status: number) => Response;
9
14
  export declare const json: (body: unknown, status?: number) => Response;
10
15
  /** Redirect to a same-origin path (anything unsafe becomes "/"). 303 turns a POST into a GET. */
@@ -14,10 +19,19 @@ export declare const redirectTo: (req: PayloadRequest, path: unknown, status?: 3
14
19
  * Sec-Fetch-Site when Origin is absent). Returns an error response or null.
15
20
  */
16
21
  export declare function rejectCrossSite(req: PayloadRequest): Response | null;
22
+ /** A collection's or global's sanitized config. */
23
+ export declare function entityConfig(req: PayloadRequest, kind: 'collection', slug: string): SanitizedCollectionConfig | undefined;
24
+ export declare function entityConfig(req: PayloadRequest, kind: 'global', slug: string): SanitizedGlobalConfig | undefined;
25
+ export declare function entityConfig(req: PayloadRequest, kind: DocRef['kind'], slug: string): SanitizedCollectionConfig | SanitizedGlobalConfig | undefined;
17
26
  /** A document ref from `kind`, `slug`, `id` query/body values. */
18
- export declare function readRef(values: {
27
+ export declare function readRef(req: PayloadRequest, values: {
19
28
  kind?: unknown;
20
29
  slug?: unknown;
21
30
  id?: unknown;
22
31
  }): DocRef | null;
32
+ /**
33
+ * The ref with its id typed the way the collection stores it (number or text),
34
+ * so a text id that looks numeric ("007") is never coerced.
35
+ */
36
+ export declare function withIdType(req: PayloadRequest, ref: DocRef): DocRef;
23
37
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAUpD;AAED,eAAO,MAAM,QAAQ,GAAI,KAAK,cAAc,KAAG,OAA6C,CAAA;AAE5F,eAAO,MAAM,OAAO,GAAI,KAAK,cAAc,KAAG,eACY,CAAA;AAE1D,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,QAIhD,CAAA;AAEJ,eAAO,MAAM,IAAI,GAAI,MAAM,OAAO,EAAE,eAAY,KAAG,QACiC,CAAA;AAEpF,iGAAiG;AACjG,eAAO,MAAM,UAAU,GAAI,KAAK,cAAc,EAAE,MAAM,OAAO,EAAE,SAAQ,GAAG,GAAG,GAAS,KAAG,QACf,CAAA;AAE1E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAMpE;AAED,kEAAkE;AAClE,wBAAgB,OAAO,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAQ/F"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAG/F,mFAAmF;AACnF,eAAO,MAAM,QAAQ,GAAI,KAAK,cAAc,KAAG,MAG9C,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,KAAK,cAAc,KAAG,OAA6C,CAAA;AAE5F;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,cAAc,EAAE,MAAM,IAAI,MAAM,EAAE,KAAG,MAC4B,CAAA;AAE7F,kGAAkG;AAClG,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,QAIhD,CAAA;AAEJ,eAAO,MAAM,IAAI,GAAI,MAAM,OAAO,EAAE,eAAY,KAAG,QACiC,CAAA;AAEpF,iGAAiG;AACjG,eAAO,MAAM,UAAU,GAAI,KAAK,cAAc,EAAE,MAAM,OAAO,EAAE,SAAQ,GAAG,GAAG,GAAS,KAAG,QACf,CAAA;AAE1E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAMpE;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,GACX,yBAAyB,GAAG,SAAS,CAAA;AACxC,wBAAgB,YAAY,CAC1B,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,GACX,qBAAqB,GAAG,SAAS,CAAA;AACpC,wBAAgB,YAAY,CAC1B,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EACpB,IAAI,EAAE,MAAM,GACX,yBAAyB,GAAG,qBAAqB,GAAG,SAAS,CAAA;AAOhE,kEAAkE;AAClE,wBAAgB,OAAO,CACrB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,MAAM,GAAG,IAAI,CAQf;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnE"}
package/dist/http.js CHANGED
@@ -1,21 +1,18 @@
1
1
  /** Request helpers shared by the endpoints. */
2
- import { parseRefKey, safePath } from '@payload-onpage/core';
2
+ import { safePath } from '@payload-onpage/core';
3
+ import { formatAdminURL, stripTrailingSlash } from 'payload/shared';
3
4
  /** The site origin: `serverURL` when configured, else the request's own origin. */
4
- export function originOf(req) {
5
+ export const originOf = (req) => {
5
6
  const configured = req.payload.config.serverURL;
6
- if (configured)
7
- return configured.replace(/\/$/, '');
8
- try {
9
- return new URL(req.url ?? '').origin;
10
- }
11
- catch {
12
- const host = req.headers.get('x-forwarded-host') ?? req.headers.get('host') ?? 'localhost';
13
- const proto = req.headers.get('x-forwarded-proto') ?? 'http';
14
- return `${proto}://${host}`;
15
- }
16
- }
7
+ return configured ? stripTrailingSlash(configured) : req.origin;
8
+ };
17
9
  export const isSecure = (req) => originOf(req).startsWith('https:');
18
- export const queryOf = (req) => new URL(req.url ?? '/', 'http://localhost').searchParams;
10
+ /**
11
+ * Absolute URL of one of our API routes (e.g. `/onpage/preview`), built the way
12
+ * Payload builds its own: honours `routes.api`, Next's basePath and trailing slashes.
13
+ */
14
+ export const apiURL = (req, path) => formatAdminURL({ apiRoute: req.payload.config.routes.api, path, serverURL: originOf(req) });
15
+ /** Plain-text reply for the form-POST / new-tab endpoints, where JSON would just be shown raw. */
19
16
  export const text = (body, status) => new Response(body, {
20
17
  status,
21
18
  headers: { 'content-type': 'text/plain; charset=utf-8', 'cache-control': 'no-store' },
@@ -36,8 +33,13 @@ export function rejectCrossSite(req) {
36
33
  const site = req.headers.get('sec-fetch-site');
37
34
  return site === 'same-origin' || site === 'none' ? null : text('Cross-site request refused', 403);
38
35
  }
36
+ export function entityConfig(req, kind, slug) {
37
+ return kind === 'global'
38
+ ? req.payload.globals.config.find((g) => g.slug === slug)
39
+ : req.payload.collections[slug]?.config;
40
+ }
39
41
  /** A document ref from `kind`, `slug`, `id` query/body values. */
40
- export function readRef(values) {
42
+ export function readRef(req, values) {
41
43
  const slug = typeof values.slug === 'string' ? values.slug : '';
42
44
  if (!slug)
43
45
  return null;
@@ -48,6 +50,18 @@ export function readRef(values) {
48
50
  return { kind: 'collection', slug, id };
49
51
  if (typeof id !== 'string' || !id)
50
52
  return null;
51
- return parseRefKey(`c:${slug}:${id}`);
53
+ return withIdType(req, { kind: 'collection', slug, id });
54
+ }
55
+ /**
56
+ * The ref with its id typed the way the collection stores it (number or text),
57
+ * so a text id that looks numeric ("007") is never coerced.
58
+ */
59
+ export function withIdType(req, ref) {
60
+ if (ref.kind === 'global')
61
+ return ref;
62
+ const type = req.payload.collections[ref.slug]?.customIDType ?? req.payload.db.defaultIDType;
63
+ const raw = String(ref.id);
64
+ const n = Number(raw);
65
+ return { ...ref, id: type === 'number' && Number.isSafeInteger(n) && String(n) === raw ? n : raw };
52
66
  }
53
67
  //# sourceMappingURL=http.js.map
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { Plugin } from 'payload';
1
+ import { type Plugin } from 'payload';
2
2
  import { type OnPageOptions } from './options.ts';
3
3
  export declare function onpage(options: OnPageOptions): Plugin;
4
- export type { OnPageDocOptions, OnPageOptions } from './options.ts';
4
+ export type { OnPageDocOptions, OnPageOptions, OnPageTargets } from './options.ts';
5
5
  export { canEditDocument, canUseOnPage } from './access.ts';
6
6
  export { createPreviewToken, verifyPreviewToken, type PreviewTokenPayload } from './tokens.ts';
7
7
  export { serializeFields, type SerializeContext } from './schema.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAA0C,MAAM,EAAE,MAAM,SAAS,CAAA;AAG7E,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAwB/E,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAwHrD;AAED,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAM/E,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAgJrD;AAED,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -10,54 +10,71 @@
10
10
  * apply unchanged.
11
11
  */
12
12
  import { DEFAULTS } from '@payload-onpage/core';
13
+ import { InvalidConfiguration, } from 'payload';
14
+ import { deepMergeSimple } from 'payload/shared';
13
15
  import { createEndpoints } from "./endpoints.js";
14
16
  import { encodeOnRead, guardStaleWrite, stripMarkers } from "./hooks.js";
15
17
  import { normalizeEntries } from "./options.js";
16
18
  import { serializeFields } from "./schema.js";
17
19
  import { translations } from "./translations.js";
18
20
  const APPLIED = 'payload-onpage';
19
- /** Ours first; the site's own translations (any language, any key) win. */
20
- function mergeTranslations(ours, theirs) {
21
- const out = { ...ours };
22
- for (const [lang, table] of Object.entries((theirs ?? {}))) {
23
- const mine = out[lang] ?? {};
24
- out[lang] = {
25
- ...mine,
26
- ...table,
27
- onpage: { ...mine.onpage, ...(table.onpage ?? {}) },
28
- };
29
- }
30
- return out;
31
- }
32
21
  export function onpage(options) {
33
22
  return (incoming) => {
34
23
  if (options.enabled === false || incoming.custom?.[APPLIED])
35
24
  return incoming;
25
+ const { session } = options;
26
+ if (!session)
27
+ throw new InvalidConfiguration('payload-onpage: pass `session` (e.g. nextSession() from @payload-onpage/next/session). The enter, mode, exit and preview endpoints need it.');
36
28
  const prefix = options.routePrefix ?? DEFAULTS.routePrefix;
37
- const apiRoute = incoming.routes?.api ?? DEFAULTS.apiRoute;
38
- const entries = [
39
- ...normalizeEntries(options.collections, 'collection'),
40
- ...normalizeEntries(options.globals, 'global'),
41
- ];
42
- const byKey = new Map(entries.map((e) => [`${e.kind}:${e.slug}`, e]));
43
- const withHooks = (cfg, entry) => {
29
+ const entries = normalizeEntries(options);
30
+ const keyOf = (kind, slug) => `${kind}:${slug}`;
31
+ const byKey = new Map(entries.map((e) => [keyOf(e.kind, e.slug), e]));
32
+ const missing = entries.filter((e) => e.kind === 'global'
33
+ ? !incoming.globals?.some((g) => g.slug === e.slug)
34
+ : !incoming.collections?.some((c) => c.slug === e.slug));
35
+ if (missing.length) {
36
+ throw new InvalidConfiguration(`payload-onpage: unknown ${missing.map((e) => `${e.kind} "${e.slug}"`).join(', ')}`);
37
+ }
38
+ /** The hooks every enabled document gets (see ./hooks). Encoding serializes the fields once, lazily. */
39
+ const hooksFor = (cfg, entry) => {
44
40
  let fields;
45
- // Encoding only needs names, types and editors: serialize once, lazily, without request context.
46
- const lazyFields = () => (fields ??= serializeFields(cfg.fields, { blocks: incoming.blocks }));
47
- const hooks = { ...(cfg.hooks ?? {}) };
48
- hooks.beforeValidate = [...(hooks.beforeValidate ?? []), stripMarkers];
49
- hooks.beforeChange = [...(hooks.beforeChange ?? []), stripMarkers, guardStaleWrite];
50
- hooks.afterRead = [
51
- ...(hooks.afterRead ?? []),
52
- encodeOnRead({
53
- kind: entry.kind,
54
- slug: cfg.slug,
55
- fields: lazyFields,
56
- only: entry.options.fields,
57
- filter: options.encode,
58
- }),
59
- ];
60
- return { ...cfg, hooks };
41
+ return {
42
+ beforeValidate: [stripMarkers],
43
+ beforeChange: [stripMarkers, guardStaleWrite],
44
+ afterRead: [
45
+ encodeOnRead({
46
+ kind: entry.kind,
47
+ slug: cfg.slug,
48
+ fields: () => (fields ??= serializeFields(cfg.fields, { blocks: incoming.blocks })),
49
+ ...(entry.options.fields ? { only: entry.options.fields } : {}),
50
+ ...(options.encode ? { filter: options.encode } : {}),
51
+ }),
52
+ ],
53
+ };
54
+ };
55
+ const withCollectionHooks = (c, entry) => {
56
+ const add = hooksFor(c, entry);
57
+ return {
58
+ ...c,
59
+ hooks: {
60
+ ...c.hooks,
61
+ beforeValidate: [...(c.hooks?.beforeValidate ?? []), ...add.beforeValidate],
62
+ beforeChange: [...(c.hooks?.beforeChange ?? []), ...add.beforeChange],
63
+ afterRead: [...(c.hooks?.afterRead ?? []), ...add.afterRead],
64
+ },
65
+ };
66
+ };
67
+ const withGlobalHooks = (g, entry) => {
68
+ const add = hooksFor(g, entry);
69
+ return {
70
+ ...g,
71
+ hooks: {
72
+ ...g.hooks,
73
+ beforeValidate: [...(g.hooks?.beforeValidate ?? []), ...add.beforeValidate],
74
+ beforeChange: [...(g.hooks?.beforeChange ?? []), ...add.beforeChange],
75
+ afterRead: [...(g.hooks?.afterRead ?? []), ...add.afterRead],
76
+ },
77
+ };
61
78
  };
62
79
  const control = (kind, slug) => ({
63
80
  path: '@payload-onpage/plugin/admin#OnPageAdminControls',
@@ -101,34 +118,28 @@ export function onpage(options) {
101
118
  },
102
119
  };
103
120
  };
104
- const missing = entries.filter((e) => e.kind === 'global'
105
- ? !incoming.globals?.some((g) => g.slug === e.slug)
106
- : !incoming.collections?.some((c) => c.slug === e.slug));
107
- if (missing.length) {
108
- throw new Error(`payload-onpage: unknown ${missing.map((e) => `${e.kind} "${e.slug}"`).join(', ')}`);
109
- }
110
121
  return {
111
122
  ...incoming,
112
123
  custom: { ...incoming.custom, [APPLIED]: true },
113
124
  i18n: {
114
125
  ...incoming.i18n,
115
- translations: mergeTranslations(translations, incoming.i18n?.translations),
126
+ // Ours first; the site's own translations (any language, any key) win.
127
+ translations: deepMergeSimple(translations, incoming.i18n?.translations ?? {}),
116
128
  },
117
129
  collections: (incoming.collections ?? []).map((c) => {
118
- const entry = byKey.get(`collection:${c.slug}`);
119
- return entry ? withCollectionAdmin(withHooks(c, entry)) : c;
130
+ const entry = byKey.get(keyOf('collection', c.slug));
131
+ return entry ? withCollectionAdmin(withCollectionHooks(c, entry)) : c;
120
132
  }),
121
133
  globals: (incoming.globals ?? []).map((g) => {
122
- const entry = byKey.get(`global:${g.slug}`);
123
- return entry ? withGlobalAdmin(withHooks(g, entry)) : g;
134
+ const entry = byKey.get(keyOf('global', g.slug));
135
+ return entry ? withGlobalAdmin(withGlobalHooks(g, entry)) : g;
124
136
  }),
125
137
  endpoints: [
126
138
  ...(incoming.endpoints ?? []),
127
139
  ...createEndpoints({
128
- options,
140
+ options: { ...options, session },
129
141
  prefix,
130
- apiRoute,
131
- entry: (kind, slug) => byKey.get(`${kind}:${slug}`),
142
+ entry: (kind, slug) => byKey.get(keyOf(kind, slug)),
132
143
  }),
133
144
  ],
134
145
  onInit: async (payload) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { DocRef, EncodeFilter, SessionAdapter } from '@payload-onpage/core';
2
- import type { PayloadRequest } from 'payload';
2
+ import type { CollectionSlug, GlobalSlug, PayloadRequest } from 'payload';
3
3
  export interface OnPageDocOptions {
4
4
  /** Top-level fields editable on the page. Default: every top-level field the user may update. */
5
5
  fields?: string[];
@@ -9,13 +9,19 @@ export interface OnPageDocOptions {
9
9
  */
10
10
  url?: (args: {
11
11
  doc: Record<string, unknown>;
12
- locale?: string;
12
+ locale?: string | undefined;
13
13
  req: PayloadRequest;
14
14
  }) => string | null | Promise<string | null>;
15
15
  }
16
+ /**
17
+ * Collections or globals to enable: a list of slugs, or slugs mapped to options.
18
+ * Slugs are checked against your generated Payload types (`CollectionSlug` /
19
+ * `GlobalSlug`), so a typo is a compile error.
20
+ */
21
+ export type OnPageTargets<Slug extends string> = Slug[] | Partial<Record<Slug, OnPageDocOptions | true>>;
16
22
  export interface OnPageOptions {
17
- collections?: string[] | Record<string, OnPageDocOptions | true>;
18
- globals?: string[] | Record<string, OnPageDocOptions | true>;
23
+ collections?: OnPageTargets<CollectionSlug>;
24
+ globals?: OnPageTargets<GlobalSlug>;
19
25
  /**
20
26
  * Who may use on-page editing (`ref` undefined) and edit a given document.
21
27
  * Default: users of the admin user collection, with the document's own
@@ -25,7 +31,7 @@ export interface OnPageOptions {
25
31
  req: PayloadRequest;
26
32
  ref?: DocRef;
27
33
  }) => boolean | Promise<boolean>;
28
- /** Framework adapter that switches edit/preview mode (e.g. `nextSession()`). Required for the enter/exit/preview endpoints. */
34
+ /** Framework adapter that switches edit/preview mode (e.g. `nextSession()`). Required for the enter/mode/exit/preview endpoints. */
29
35
  session?: SessionAdapter;
30
36
  /** Narrow which strings get auto-mapping markers. */
31
37
  encode?: EncodeFilter;
@@ -47,13 +53,18 @@ export interface OnPageOptions {
47
53
  /** Auth cookie an editor's session is bound to. Default `${cookiePrefix}-token` ("payload-token"). */
48
54
  authCookie?: string;
49
55
  /** Endpoint prefix under the API route. Default "/onpage". */
50
- routePrefix?: string;
56
+ routePrefix?: `/${string}`;
51
57
  enabled?: boolean;
52
58
  }
53
- export interface Entry {
54
- kind: 'collection' | 'global';
55
- slug: string;
59
+ /** One enabled collection or global, with its slug typed by kind. */
60
+ export type Entry = {
61
+ kind: 'collection';
62
+ slug: CollectionSlug;
56
63
  options: OnPageDocOptions;
57
- }
58
- export declare const normalizeEntries: (input: OnPageOptions["collections"], kind: Entry["kind"]) => Entry[];
64
+ } | {
65
+ kind: 'global';
66
+ slug: GlobalSlug;
67
+ options: OnPageDocOptions;
68
+ };
69
+ export declare const normalizeEntries: (options: OnPageOptions) => Entry[];
59
70
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;QACX,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,GAAG,EAAE,cAAc,CAAA;KACpB,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAChE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC5D;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpF,+HAA+H;IAC/H,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,qDAAqD;IACrD,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qGAAqG;IACrG,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC3B,GAAG,EAAE,cAAc,CAAA;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,EAAE,EAAE,MAAM,CAAA;KACX,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,eAAO,MAAM,gBAAgB,GAC3B,OAAO,aAAa,CAAC,aAAa,CAAC,EACnC,MAAM,KAAK,CAAC,MAAM,CAAC,KAClB,KAAK,EAG4F,CAAA"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;QACX,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,GAAG,EAAE,cAAc,CAAA;KACpB,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC7C;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,IAAI,SAAS,MAAM,IAC3C,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAA;AAEzD,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC3C,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpF,oIAAoI;IACpI,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,qDAAqD;IACrD,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qGAAqG;IACrG,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC3B,GAAG,EAAE,cAAc,CAAA;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,EAAE,EAAE,MAAM,CAAA;KACX,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,IAAI,MAAM,EAAE,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,qEAAqE;AACrE,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAAA;AAUnE,eAAO,MAAM,gBAAgB,GAAI,SAAS,aAAa,KAAG,KAAK,EAG9D,CAAA"}
package/dist/options.js CHANGED
@@ -1,4 +1,12 @@
1
- export const normalizeEntries = (input, kind) => Array.isArray(input)
2
- ? input.map((slug) => ({ kind, slug, options: {} }))
3
- : Object.entries(input ?? {}).map(([slug, o]) => ({ kind, slug, options: o === true ? {} : o }));
1
+ function entriesOf(input) {
2
+ return Array.isArray(input)
3
+ ? input.map((slug) => ({ slug, options: {} }))
4
+ : Object.entries(input ?? {})
5
+ .filter(([, o]) => o !== undefined)
6
+ .map(([slug, o]) => ({ slug, options: o === true || !o ? {} : o }));
7
+ }
8
+ export const normalizeEntries = (options) => [
9
+ ...entriesOf(options.collections).map((e) => ({ kind: 'collection', ...e })),
10
+ ...entriesOf(options.globals).map((e) => ({ kind: 'global', ...e })),
11
+ ];
4
12
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AA0DA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAmC,EACnC,IAAmB,EACV,EAAE,CACX,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAiEA,SAAS,SAAS,CAAsB,KAAsC;IAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAwD;aAChF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAW,EAAE,CAAC;IACnE,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACrF,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;CAC9E,CAAA"}
package/dist/paths.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /** Where a document lives on the site. */
2
2
  import { type DocRef } from '@payload-onpage/core';
3
- import type { PayloadRequest } from 'payload';
3
+ import type { PayloadRequest, TypedLocale } from 'payload';
4
4
  import type { Entry } from './options.ts';
5
5
  /**
6
6
  * The site path that shows a document: the entry's `url` option, else the
7
7
  * collection's `admin.preview` URL, else `/<slug>`; globals default to "/".
8
8
  * Absolute URLs must be same-origin. Returns null when there's no page.
9
9
  */
10
- export declare function resolvePath(req: PayloadRequest, ref: DocRef, entry: Entry, locale?: string): Promise<string | null>;
10
+ export declare function resolvePath(req: PayloadRequest, ref: DocRef, entry: Entry, locale?: TypedLocale): Promise<string | null>;
11
11
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEzC;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0CxB"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEzC;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB"}
package/dist/paths.js CHANGED
@@ -7,34 +7,21 @@ import { originOf } from "./http.js";
7
7
  * Absolute URLs must be same-origin. Returns null when there's no page.
8
8
  */
9
9
  export async function resolvePath(req, ref, entry, locale) {
10
- const localeArg = locale ? { locale: locale } : {};
11
- const doc = ref.kind === 'global'
12
- ? await req.payload
13
- .findGlobal({
14
- slug: ref.slug,
15
- draft: true,
16
- depth: 0,
17
- overrideAccess: true,
18
- ...localeArg,
19
- })
20
- .catch(() => null)
21
- : await req.payload
22
- .findByID({
23
- collection: ref.slug,
24
- id: ref.id,
25
- draft: true,
26
- depth: 0,
27
- overrideAccess: true,
28
- ...localeArg,
29
- })
30
- .catch(() => null);
10
+ const read = { draft: true, depth: 0, overrideAccess: true, ...(locale ? { locale } : {}) };
11
+ const doc = entry.kind === 'global'
12
+ ? await req.payload.findGlobal({ slug: entry.slug, ...read }).catch(() => null)
13
+ : ref.kind === 'collection'
14
+ ? await req.payload
15
+ .findByID({ collection: entry.slug, id: ref.id, ...read })
16
+ .catch(() => null)
17
+ : null;
31
18
  if (!doc)
32
19
  return null;
33
20
  let url;
34
21
  if (entry.options.url)
35
- url = await entry.options.url({ doc, locale, req });
36
- else if (ref.kind === 'collection') {
37
- const preview = req.payload.collections[ref.slug]?.config.admin?.preview;
22
+ url = await entry.options.url({ doc, locale: locale ?? undefined, req });
23
+ else if (entry.kind === 'collection') {
24
+ const preview = req.payload.collections[entry.slug]?.config.admin?.preview;
38
25
  if (preview)
39
26
  url = await preview(doc, { locale: locale ?? '', req, token: null });
40
27
  if (!url && typeof doc.slug === 'string')
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,QAAQ,EAAe,MAAM,sBAAsB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAmB,EACnB,GAAW,EACX,KAAY,EACZ,MAAe;IAEf,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3D,MAAM,GAAG,GACP,GAAG,CAAC,IAAI,KAAK,QAAQ;QACnB,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO;aACd,UAAU,CAAC;YACV,IAAI,EAAE,GAAG,CAAC,IAAa;YACvB,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,CAAC;YACR,cAAc,EAAE,IAAI;YACpB,GAAG,SAAS;SACb,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACtB,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO;aACd,QAAQ,CAAC;YACR,UAAU,EAAE,GAAG,CAAC,IAAa;YAC7B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,CAAC;YACR,cAAc,EAAE,IAAI;YACpB,GAAG,SAAS;SACb,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,GAA8B,CAAA;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG;QAAE,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;SACrE,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAA;QACxE,IAAI,OAAO;YAAE,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;IACpF,CAAC;;QAAM,GAAG,GAAG,GAAG,CAAA;IAChB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QACpC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,QAAQ,EAAe,MAAM,sBAAsB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAmB,EACnB,GAAW,EACX,KAAY,EACZ,MAAoB;IAEpB,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC3F,MAAM,GAAG,GACP,KAAK,CAAC,IAAI,KAAK,QAAQ;QACrB,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;YACzB,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO;iBACd,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;iBACzD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,IAAI,CAAA;IACZ,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,GAA8B,CAAA;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG;QAAE,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;SAC1F,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAA;QAC1E,IAAI,OAAO;YAAE,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;IACpF,CAAC;;QAAM,GAAG,GAAG,GAAG,CAAA;IAChB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QACpC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}