@focus-reactive/payload-plugin-seo 1.4.0 → 1.5.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.
Files changed (75) hide show
  1. package/README.md +139 -124
  2. package/dist/components/SeoButton/SeoButtonInner.d.ts +2 -4
  3. package/dist/components/SeoButton/SeoButtonInner.d.ts.map +1 -1
  4. package/dist/components/SeoButton/SeoButtonInner.js +10 -7
  5. package/dist/components/SeoButton/SeoButtonInner.js.map +1 -1
  6. package/dist/components/SeoDrawer/build-analysis-input.d.ts +1 -8
  7. package/dist/components/SeoDrawer/build-analysis-input.d.ts.map +1 -1
  8. package/dist/components/SeoDrawer/build-analysis-input.js +22 -34
  9. package/dist/components/SeoDrawer/build-analysis-input.js.map +1 -1
  10. package/dist/components/SeoDrawer/buildInput.js +1 -1
  11. package/dist/components/SeoDrawer/buildInput.js.map +1 -1
  12. package/dist/components/SeoDrawer/useLiveDocument.d.ts +2 -5
  13. package/dist/components/SeoDrawer/useLiveDocument.d.ts.map +1 -1
  14. package/dist/components/SeoDrawer/useLiveDocument.js +14 -62
  15. package/dist/components/SeoDrawer/useLiveDocument.js.map +1 -1
  16. package/dist/content/index.d.ts +2 -2
  17. package/dist/content/index.d.ts.map +1 -1
  18. package/dist/content/index.js +2 -1
  19. package/dist/content/index.js.map +1 -1
  20. package/dist/content/resolve/resolve-docs.d.ts +3 -0
  21. package/dist/content/resolve/resolve-docs.d.ts.map +1 -0
  22. package/dist/content/resolve/resolve-docs.js +48 -0
  23. package/dist/content/resolve/resolve-docs.js.map +1 -0
  24. package/dist/content/schema/helpers.d.ts +1 -0
  25. package/dist/content/schema/helpers.d.ts.map +1 -1
  26. package/dist/content/schema/helpers.js +4 -0
  27. package/dist/content/schema/helpers.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/plugin.d.ts.map +1 -1
  32. package/dist/plugin.js +18 -3
  33. package/dist/plugin.js.map +1 -1
  34. package/dist/types/config.d.ts +35 -25
  35. package/dist/types/config.d.ts.map +1 -1
  36. package/dist/utils/config/overrideAdmin.d.ts.map +1 -1
  37. package/dist/utils/config/overrideAdmin.js +2 -10
  38. package/dist/utils/config/overrideAdmin.js.map +1 -1
  39. package/package.json +1 -1
  40. package/dist/content/extract/context.d.ts +0 -11
  41. package/dist/content/extract/context.d.ts.map +0 -1
  42. package/dist/content/extract/context.js +0 -1
  43. package/dist/content/extract/context.js.map +0 -1
  44. package/dist/content/extract/extract.d.ts +0 -18
  45. package/dist/content/extract/extract.d.ts.map +0 -1
  46. package/dist/content/extract/extract.js +0 -211
  47. package/dist/content/extract/extract.js.map +0 -1
  48. package/dist/content/extract/selection.d.ts +0 -3
  49. package/dist/content/extract/selection.d.ts.map +0 -1
  50. package/dist/content/extract/selection.js +0 -32
  51. package/dist/content/extract/selection.js.map +0 -1
  52. package/dist/content/lexical/transform.d.ts +0 -5
  53. package/dist/content/lexical/transform.d.ts.map +0 -1
  54. package/dist/content/lexical/transform.js +0 -56
  55. package/dist/content/lexical/transform.js.map +0 -1
  56. package/dist/content/resolve/collect-refs.d.ts +0 -8
  57. package/dist/content/resolve/collect-refs.d.ts.map +0 -1
  58. package/dist/content/resolve/collect-refs.js +0 -79
  59. package/dist/content/resolve/collect-refs.js.map +0 -1
  60. package/dist/content/resolve/hydrate.d.ts +0 -7
  61. package/dist/content/resolve/hydrate.d.ts.map +0 -1
  62. package/dist/content/resolve/hydrate.js +0 -123
  63. package/dist/content/resolve/hydrate.js.map +0 -1
  64. package/dist/content/resolve/resolver.d.ts +0 -7
  65. package/dist/content/resolve/resolver.d.ts.map +0 -1
  66. package/dist/content/resolve/resolver.js +0 -65
  67. package/dist/content/resolve/resolver.js.map +0 -1
  68. package/dist/content/resolve/types.d.ts +0 -12
  69. package/dist/content/resolve/types.d.ts.map +0 -1
  70. package/dist/content/resolve/types.js +0 -7
  71. package/dist/content/resolve/types.js.map +0 -1
  72. package/dist/content/walk/walkFields.d.ts +0 -17
  73. package/dist/content/walk/walkFields.d.ts.map +0 -1
  74. package/dist/content/walk/walkFields.js +0 -88
  75. package/dist/content/walk/walkFields.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/config/overrideAdmin.ts"],"sourcesContent":["import type { Config } from \"payload\";\nimport { getComponentPath } from \"./getComponentPath\";\nimport type { SeoPluginConfig, SeoSiteConfig } from \"../../types/config\";\n\nfunction normalizeDepth(depth: number | undefined): number {\n if (depth === undefined) return 2;\n\n return Number.isFinite(depth) && depth >= 0 ? Math.floor(depth) : 0;\n}\n\nexport function overrideAdmin(incomingConfig: Config, config: SeoPluginConfig): Config {\n const bySlug = new Map(config.collections.map((c) => [c.slug, c]));\n const site: SeoSiteConfig = config.site ?? {};\n const slugPaths = Object.fromEntries(config.collections.map((c) => [c.slug, c.fields?.slug ?? \"slug\"]));\n\n const collections = (incomingConfig.collections ?? []).map((collection) => {\n const seoCfg = bySlug.get(collection.slug);\n if (!seoCfg) return collection;\n\n const buttonEntry = {\n path: getComponentPath(\"components/SeoButton\"),\n clientProps: {\n collectionSlug: collection.slug,\n fields: seoCfg.fields ?? {},\n extractContentPath: seoCfg.extractContentPath ?? null,\n site: {\n name: site.name ?? \"\",\n baseUrl: site.baseUrl ?? \"\",\n faviconUrl: site.faviconUrl ?? \"\",\n },\n supportedLocales: config.supportedLocales ?? [\"en\"],\n resolveDepth: normalizeDepth(seoCfg.resolveDepth),\n slugPaths,\n },\n };\n\n const existing = collection.admin?.components?.edit?.beforeDocumentControls ?? [];\n\n return {\n ...collection,\n admin: {\n ...collection.admin,\n components: {\n ...collection.admin?.components,\n edit: {\n ...collection.admin?.components?.edit,\n beforeDocumentControls: [...existing, buttonEntry],\n },\n },\n },\n };\n });\n\n return { ...incomingConfig, collections };\n}\n"],"mappings":"AACA,SAAS,wBAAwB;AAGjC,SAAS,eAAe,OAAmC;AACzD,MAAI,UAAU;AAAW,WAAO;AAEhC,SAAO,OAAO,SAAS,KAAK,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,IAAI;AACpE;AAEO,SAAS,cAAc,gBAAwB,QAAiC;AACrF,QAAM,SAAS,IAAI,IAAI,OAAO,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,QAAM,OAAsB,OAAO,QAAQ,CAAC;AAC5C,QAAM,YAAY,OAAO,YAAY,OAAO,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAEtG,QAAM,eAAe,eAAe,eAAe,CAAC,GAAG,IAAI,CAAC,eAAe;AACzE,UAAM,SAAS,OAAO,IAAI,WAAW,IAAI;AACzC,QAAI,CAAC;AAAQ,aAAO;AAEpB,UAAM,cAAc;AAAA,MAClB,MAAM,iBAAiB,sBAAsB;AAAA,MAC7C,aAAa;AAAA,QACX,gBAAgB,WAAW;AAAA,QAC3B,QAAQ,OAAO,UAAU,CAAC;AAAA,QAC1B,oBAAoB,OAAO,sBAAsB;AAAA,QACjD,MAAM;AAAA,UACJ,MAAM,KAAK,QAAQ;AAAA,UACnB,SAAS,KAAK,WAAW;AAAA,UACzB,YAAY,KAAK,cAAc;AAAA,QACjC;AAAA,QACA,kBAAkB,OAAO,oBAAoB,CAAC,IAAI;AAAA,QAClD,cAAc,eAAe,OAAO,YAAY;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,WAAW,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEhF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,WAAW;AAAA,QACd,YAAY;AAAA,UACV,GAAG,WAAW,OAAO;AAAA,UACrB,MAAM;AAAA,YACJ,GAAG,WAAW,OAAO,YAAY;AAAA,YACjC,wBAAwB,CAAC,GAAG,UAAU,WAAW;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,EAAE,GAAG,gBAAgB,YAAY;AAC1C;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/config/overrideAdmin.ts"],"sourcesContent":["import type { Config } from \"payload\";\nimport { getComponentPath } from \"./getComponentPath\";\nimport type { SeoPluginConfig, SeoSiteConfig } from \"../../types/config\";\n\nexport function overrideAdmin(incomingConfig: Config, config: SeoPluginConfig): Config {\n const bySlug = new Map(config.collections.map((c) => [c.slug, c]));\n const site: SeoSiteConfig = config.site ?? {};\n\n const collections = (incomingConfig.collections ?? []).map((collection) => {\n const seoCfg = bySlug.get(collection.slug);\n if (!seoCfg) return collection;\n\n const buttonEntry = {\n path: getComponentPath(\"components/SeoButton\"),\n clientProps: {\n collectionSlug: collection.slug,\n fields: seoCfg.fields ?? {},\n extractContentPath: seoCfg.extractContentPath,\n site: {\n name: site.name ?? \"\",\n baseUrl: site.baseUrl ?? \"\",\n faviconUrl: site.faviconUrl ?? \"\",\n },\n supportedLocales: config.supportedLocales ?? [\"en\"],\n },\n };\n\n const existing = collection.admin?.components?.edit?.beforeDocumentControls ?? [];\n\n return {\n ...collection,\n admin: {\n ...collection.admin,\n components: {\n ...collection.admin?.components,\n edit: {\n ...collection.admin?.components?.edit,\n beforeDocumentControls: [...existing, buttonEntry],\n },\n },\n },\n };\n });\n\n return { ...incomingConfig, collections };\n}\n"],"mappings":"AACA,SAAS,wBAAwB;AAG1B,SAAS,cAAc,gBAAwB,QAAiC;AACrF,QAAM,SAAS,IAAI,IAAI,OAAO,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,QAAM,OAAsB,OAAO,QAAQ,CAAC;AAE5C,QAAM,eAAe,eAAe,eAAe,CAAC,GAAG,IAAI,CAAC,eAAe;AACzE,UAAM,SAAS,OAAO,IAAI,WAAW,IAAI;AACzC,QAAI,CAAC;AAAQ,aAAO;AAEpB,UAAM,cAAc;AAAA,MAClB,MAAM,iBAAiB,sBAAsB;AAAA,MAC7C,aAAa;AAAA,QACX,gBAAgB,WAAW;AAAA,QAC3B,QAAQ,OAAO,UAAU,CAAC;AAAA,QAC1B,oBAAoB,OAAO;AAAA,QAC3B,MAAM;AAAA,UACJ,MAAM,KAAK,QAAQ;AAAA,UACnB,SAAS,KAAK,WAAW;AAAA,UACzB,YAAY,KAAK,cAAc;AAAA,QACjC;AAAA,QACA,kBAAkB,OAAO,oBAAoB,CAAC,IAAI;AAAA,MACpD;AAAA,IACF;AAEA,UAAM,WAAW,WAAW,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEhF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,WAAW;AAAA,QACd,YAAY;AAAA,UACV,GAAG,WAAW,OAAO;AAAA,UACrB,MAAM;AAAA,YACJ,GAAG,WAAW,OAAO,YAAY;AAAA,YACjC,wBAAwB,CAAC,GAAG,UAAU,WAAW;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,EAAE,GAAG,gBAAgB,YAAY;AAC1C;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@focus-reactive/payload-plugin-seo",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "license": "MIT",
5
5
  "author": "FocusReactive <ship@focusreactive.com>",
6
6
  "keywords": [
@@ -1,11 +0,0 @@
1
- import type { ClientBlock, ClientField } from "payload";
2
- import type { ResolvedDoc } from "../resolve/types";
3
- export interface ExtractContext {
4
- getFields: (collectionSlug: string) => ClientField[];
5
- isUploadCollection: (slug: string) => boolean;
6
- slugPath: (collectionSlug: string) => string;
7
- blocksBySlug: Record<string, ClientBlock>;
8
- resolved: Map<string, ResolvedDoc>;
9
- baseUrl: string;
10
- }
11
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/content/extract/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;IACrD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,18 +0,0 @@
1
- import type { ClientField } from "payload";
2
- import type { ContentNode } from "../schema/nodes";
3
- import type { ExtractContext } from "./context";
4
- type Values = Record<string, unknown>;
5
- export interface ExtractArgs {
6
- values: Values;
7
- fields: ClientField[];
8
- ctx: ExtractContext;
9
- selection: {
10
- include: string[];
11
- exclude: string[];
12
- };
13
- metadataPaths: string[];
14
- depth: number;
15
- }
16
- export declare function extractContent(args: ExtractArgs): ContentNode[];
17
- export {};
18
- //# sourceMappingURL=extract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../src/content/extract/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACpD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAyED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,EAAE,CAgJ/D"}
@@ -1,211 +0,0 @@
1
- import { lexicalToHtml } from "../lexicalToHtml";
2
- import { transformLexical } from "../lexical/transform";
3
- import { html, image, link, paragraph, video } from "../schema/helpers";
4
- import { refKey } from "../resolve/types";
5
- import { makeExcluded, makeIncluded } from "./selection";
6
- function isRecord(v) {
7
- return typeof v === "object" && v !== null && !Array.isArray(v);
8
- }
9
- function isId(v) {
10
- return typeof v === "string" || typeof v === "number";
11
- }
12
- function str(v) {
13
- return typeof v === "string" && v.trim() ? v : void 0;
14
- }
15
- function mediaNode(doc) {
16
- const url = str(doc.url);
17
- const mime = str(doc.mimeType);
18
- if (!url)
19
- return null;
20
- if (mime?.startsWith("image/"))
21
- return image(url, str(doc.alt) ?? "");
22
- if (mime?.startsWith("video/"))
23
- return video(url);
24
- return link(url, str(doc.filename) ?? str(doc.title) ?? url);
25
- }
26
- function uploadDoc(value, relationTo, ctx) {
27
- if (isRecord(value) && str(value.url))
28
- return value;
29
- if (isRecord(value) && isRecord(value.value) && str(value.value.url)) {
30
- return value.value;
31
- }
32
- if (typeof relationTo === "string" && isId(value)) {
33
- return ctx.resolved.get(refKey({ collection: relationTo, id: value })) ?? null;
34
- }
35
- if (isRecord(value) && typeof value.relationTo === "string" && isId(value.value)) {
36
- return ctx.resolved.get(refKey({ collection: value.relationTo, id: value.value })) ?? null;
37
- }
38
- return null;
39
- }
40
- function uploadNodes(value, relationTo, ctx) {
41
- const list = Array.isArray(value) ? value : [value];
42
- return list.flatMap((v) => {
43
- const doc = uploadDoc(v, relationTo, ctx);
44
- const node = doc ? mediaNode(doc) : null;
45
- return node ? [node] : [];
46
- });
47
- }
48
- function linkNode(obj) {
49
- const url = str(obj.url);
50
- if (!url)
51
- return null;
52
- const label = str(obj.label) ?? str(obj.text) ?? str(obj.title);
53
- return label ? link(url, label) : null;
54
- }
55
- function join(path, key) {
56
- return path ? `${path}.${key}` : String(key);
57
- }
58
- function blockDef(field, slug, ctx) {
59
- const inline = field.blocks?.find((b) => b.slug === slug);
60
- if (inline)
61
- return inline;
62
- const ref = field.blockReferences?.find((r) => typeof r === "string" ? r === slug : r.slug === slug);
63
- if (ref)
64
- return typeof ref === "string" ? ctx.blocksBySlug[ref] : ref;
65
- return ctx.blocksBySlug[slug];
66
- }
67
- function extractContent(args) {
68
- const { values, fields, ctx, depth } = args;
69
- const excluded = makeExcluded(args.metadataPaths, args.selection.exclude);
70
- const included = makeIncluded(args.selection.include);
71
- const out = [];
72
- const keepHost = (path) => included(path) && !excluded(path);
73
- walk(values, fields, "", depth, keepHost);
74
- return out;
75
- function relatedDoc(value, relationTo) {
76
- if (isRecord(value) && typeof relationTo === "string" && !("relationTo" in value && "value" in value)) {
77
- return { doc: value, collection: relationTo };
78
- }
79
- if (isRecord(value) && typeof value.relationTo === "string" && isRecord(value.value))
80
- return { doc: value.value, collection: value.relationTo };
81
- if (typeof relationTo === "string" && isId(value)) {
82
- const doc = ctx.resolved.get(refKey({ collection: relationTo, id: value }));
83
- return doc ? { doc, collection: relationTo } : null;
84
- }
85
- if (isRecord(value) && typeof value.relationTo === "string" && isId(value.value)) {
86
- const doc = ctx.resolved.get(refKey({ collection: value.relationTo, id: value.value }));
87
- return doc ? { doc, collection: value.relationTo } : null;
88
- }
89
- return null;
90
- }
91
- function followRelationship(value, relationTo, depthLeft) {
92
- const list = Array.isArray(value) ? value : [value];
93
- for (const v of list) {
94
- const r = relatedDoc(v, relationTo);
95
- if (r)
96
- walk(r.doc, ctx.getFields(r.collection), "", depthLeft - 1, () => true);
97
- }
98
- }
99
- function walk(vals, flds, base, depthLeft, keep) {
100
- for (const f of flds) {
101
- switch (f.type) {
102
- case "text":
103
- case "textarea": {
104
- if ("name" in f && typeof f.name === "string" && keep(join(base, f.name))) {
105
- const n = paragraph(str(vals[f.name]));
106
- if (n)
107
- out.push(n);
108
- }
109
- break;
110
- }
111
- case "upload": {
112
- if ("name" in f && typeof f.name === "string" && keep(join(base, f.name)))
113
- out.push(...uploadNodes(vals[f.name], f.relationTo, ctx));
114
- break;
115
- }
116
- case "relationship": {
117
- if (depthLeft >= 1 && "name" in f && typeof f.name === "string" && keep(join(base, f.name))) {
118
- const v = vals[f.name];
119
- if (v != null)
120
- followRelationship(v, f.relationTo, depthLeft);
121
- }
122
- break;
123
- }
124
- case "richText": {
125
- if ("name" in f && typeof f.name === "string" && keep(join(base, f.name))) {
126
- const v = vals[f.name];
127
- if (isRecord(v) && "root" in v) {
128
- const n = html(
129
- lexicalToHtml(
130
- transformLexical(v, ctx)
131
- )
132
- );
133
- if (n)
134
- out.push(n);
135
- }
136
- }
137
- break;
138
- }
139
- case "array": {
140
- const v = vals[f.name];
141
- if (Array.isArray(v)) {
142
- v.forEach((item, i) => {
143
- if (!isRecord(item))
144
- return;
145
- const path = join(base, `${f.name}.${i}`);
146
- const ln = keep(path) ? linkNode(item) : null;
147
- if (ln) {
148
- out.push(ln);
149
- return;
150
- }
151
- walk(item, f.fields, path, depthLeft, keep);
152
- });
153
- }
154
- break;
155
- }
156
- case "blocks": {
157
- const v = vals[f.name];
158
- if (Array.isArray(v))
159
- v.forEach((item, i) => walkBlock(item, f, join(base, `${f.name}.${i}`), depthLeft, keep));
160
- break;
161
- }
162
- case "group": {
163
- if ("name" in f && typeof f.name === "string") {
164
- const v = vals[f.name];
165
- if (isRecord(v)) {
166
- const path = join(base, f.name);
167
- const ln = keep(path) ? linkNode(v) : null;
168
- if (ln) {
169
- out.push(ln);
170
- } else {
171
- walk(v, f.fields, path, depthLeft, keep);
172
- }
173
- }
174
- } else {
175
- walk(vals, f.fields, base, depthLeft, keep);
176
- }
177
- break;
178
- }
179
- case "row":
180
- case "collapsible":
181
- walk(vals, f.fields, base, depthLeft, keep);
182
- break;
183
- case "tabs": {
184
- for (const tab of f.tabs) {
185
- if ("name" in tab && typeof tab.name === "string") {
186
- const v = vals[tab.name];
187
- if (isRecord(v))
188
- walk(v, tab.fields, join(base, tab.name), depthLeft, keep);
189
- } else {
190
- walk(vals, tab.fields, base, depthLeft, keep);
191
- }
192
- }
193
- break;
194
- }
195
- default:
196
- break;
197
- }
198
- }
199
- }
200
- function walkBlock(item, f, path, depthLeft, keep) {
201
- if (!(isRecord(item) && typeof item.blockType === "string"))
202
- return;
203
- const def = blockDef(f, item.blockType, ctx);
204
- if (def)
205
- walk(item, def.fields, path, depthLeft, keep);
206
- }
207
- }
208
- export {
209
- extractContent
210
- };
211
- //# sourceMappingURL=extract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/content/extract/extract.ts"],"sourcesContent":["import type { ClientBlock, ClientField } from \"payload\";\nimport { lexicalToHtml } from \"../lexicalToHtml\";\nimport { transformLexical } from \"../lexical/transform\";\nimport type { ContentNode } from \"../schema/nodes\";\nimport { html, image, link, paragraph, video } from \"../schema/helpers\";\nimport type { ResolvedDoc } from \"../resolve/types\";\nimport { refKey } from \"../resolve/types\";\nimport type { ExtractContext } from \"./context\";\nimport { makeExcluded, makeIncluded } from \"./selection\";\n\ntype Values = Record<string, unknown>;\n\nexport interface ExtractArgs {\n values: Values;\n fields: ClientField[];\n ctx: ExtractContext;\n selection: { include: string[]; exclude: string[] };\n metadataPaths: string[];\n depth: number;\n}\n\nfunction isRecord(v: unknown): v is Values {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\nfunction isId(v: unknown): v is string | number {\n return typeof v === \"string\" || typeof v === \"number\";\n}\nfunction str(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v : undefined;\n}\n\nfunction mediaNode(doc: ResolvedDoc): ContentNode | null {\n const url = str(doc.url);\n const mime = str(doc.mimeType);\n\n if (!url) return null;\n if (mime?.startsWith(\"image/\")) return image(url, str(doc.alt) ?? \"\");\n if (mime?.startsWith(\"video/\")) return video(url);\n\n return link(url, str(doc.filename) ?? str(doc.title) ?? url);\n}\n\nfunction uploadDoc(value: unknown, relationTo: string | string[], ctx: ExtractContext): ResolvedDoc | null {\n if (isRecord(value) && str(value.url)) return value;\n\n if (isRecord(value) && isRecord(value.value) && str((value.value as ResolvedDoc).url)) {\n return value.value as ResolvedDoc;\n }\n\n if (typeof relationTo === \"string\" && isId(value)) {\n return ctx.resolved.get(refKey({ collection: relationTo, id: value })) ?? null;\n }\n\n if (isRecord(value) && typeof value.relationTo === \"string\" && isId(value.value)) {\n return ctx.resolved.get(refKey({ collection: value.relationTo, id: value.value })) ?? null;\n }\n\n return null;\n}\n\nfunction uploadNodes(value: unknown, relationTo: string | string[], ctx: ExtractContext): ContentNode[] {\n const list = Array.isArray(value) ? value : [value];\n\n return list.flatMap((v) => {\n const doc = uploadDoc(v, relationTo, ctx);\n const node = doc ? mediaNode(doc) : null;\n\n return node ? [node] : [];\n });\n}\n\nfunction linkNode(obj: Values): ContentNode | null {\n const url = str(obj.url);\n if (!url) return null;\n\n const label = str(obj.label) ?? str(obj.text) ?? str(obj.title);\n\n return label ? link(url, label) : null;\n}\n\nfunction join(path: string, key: string | number): string {\n return path ? `${path}.${key}` : String(key);\n}\n\nfunction blockDef(field: { blocks?: ClientBlock[]; blockReferences?: (ClientBlock | string)[] }, slug: string, ctx: ExtractContext): ClientBlock | undefined {\n const inline = field.blocks?.find((b) => b.slug === slug);\n if (inline) return inline;\n const ref = field.blockReferences?.find((r) => (typeof r === \"string\" ? r === slug : r.slug === slug));\n if (ref) return typeof ref === \"string\" ? ctx.blocksBySlug[ref] : ref;\n return ctx.blocksBySlug[slug];\n}\n\nexport function extractContent(args: ExtractArgs): ContentNode[] {\n const { values, fields, ctx, depth } = args;\n\n const excluded = makeExcluded(args.metadataPaths, args.selection.exclude);\n const included = makeIncluded(args.selection.include);\n\n const out: ContentNode[] = [];\n\n const keepHost = (path: string) => included(path) && !excluded(path);\n\n walk(values, fields, \"\", depth, keepHost);\n\n return out;\n\n function relatedDoc(value: unknown, relationTo: string | string[]): { doc: Values; collection: string } | null {\n if (isRecord(value) && typeof relationTo === \"string\" && !(\"relationTo\" in value && \"value\" in value)) {\n return { doc: value, collection: relationTo };\n }\n if (isRecord(value) && typeof value.relationTo === \"string\" && isRecord(value.value)) return { doc: value.value, collection: value.relationTo };\n if (typeof relationTo === \"string\" && isId(value)) {\n const doc = ctx.resolved.get(refKey({ collection: relationTo, id: value }));\n return doc ? { doc, collection: relationTo } : null;\n }\n if (isRecord(value) && typeof value.relationTo === \"string\" && isId(value.value)) {\n const doc = ctx.resolved.get(refKey({ collection: value.relationTo, id: value.value }));\n return doc ? { doc, collection: value.relationTo } : null;\n }\n return null;\n }\n\n function followRelationship(value: unknown, relationTo: string | string[], depthLeft: number): void {\n const list = Array.isArray(value) ? value : [value];\n for (const v of list) {\n const r = relatedDoc(v, relationTo);\n if (r) walk(r.doc, ctx.getFields(r.collection), \"\", depthLeft - 1, () => true);\n }\n }\n\n function walk(vals: Values, flds: ClientField[], base: string, depthLeft: number, keep: (path: string) => boolean): void {\n for (const f of flds) {\n switch (f.type) {\n case \"text\":\n case \"textarea\": {\n if (\"name\" in f && typeof f.name === \"string\" && keep(join(base, f.name))) {\n const n = paragraph(str(vals[f.name]));\n if (n) out.push(n);\n }\n break;\n }\n case \"upload\": {\n if (\"name\" in f && typeof f.name === \"string\" && keep(join(base, f.name))) out.push(...uploadNodes(vals[f.name], (f as { relationTo: string | string[] }).relationTo, ctx));\n break;\n }\n case \"relationship\": {\n if (depthLeft >= 1 && \"name\" in f && typeof f.name === \"string\" && keep(join(base, f.name))) {\n const v = vals[f.name];\n if (v != null) followRelationship(v, (f as { relationTo: string | string[] }).relationTo, depthLeft);\n }\n break;\n }\n case \"richText\": {\n if (\"name\" in f && typeof f.name === \"string\" && keep(join(base, f.name))) {\n const v = vals[f.name];\n if (isRecord(v) && \"root\" in v) {\n const n = html(\n lexicalToHtml(\n transformLexical(v as { root: never }, ctx) as {\n root: never;\n }\n )\n );\n if (n) out.push(n);\n }\n }\n break;\n }\n case \"array\": {\n const v = vals[f.name];\n if (Array.isArray(v)) {\n v.forEach((item, i) => {\n if (!isRecord(item)) return;\n\n const path = join(base, `${f.name}.${i}`);\n const ln = keep(path) ? linkNode(item) : null;\n\n if (ln) {\n out.push(ln);\n return;\n }\n\n walk(item, f.fields, path, depthLeft, keep);\n });\n }\n break;\n }\n case \"blocks\": {\n const v = vals[f.name];\n if (Array.isArray(v)) v.forEach((item, i) => walkBlock(item, f, join(base, `${f.name}.${i}`), depthLeft, keep));\n break;\n }\n case \"group\": {\n if (\"name\" in f && typeof f.name === \"string\") {\n const v = vals[f.name];\n if (isRecord(v)) {\n const path = join(base, f.name);\n const ln = keep(path) ? linkNode(v) : null;\n\n if (ln) {\n out.push(ln);\n } else {\n walk(v, f.fields, path, depthLeft, keep);\n }\n }\n } else {\n walk(vals, f.fields, base, depthLeft, keep);\n }\n break;\n }\n case \"row\":\n case \"collapsible\":\n walk(vals, f.fields, base, depthLeft, keep);\n break;\n case \"tabs\": {\n for (const tab of f.tabs) {\n if (\"name\" in tab && typeof tab.name === \"string\") {\n const v = vals[tab.name];\n if (isRecord(v)) walk(v, tab.fields, join(base, tab.name), depthLeft, keep);\n } else {\n walk(vals, tab.fields, base, depthLeft, keep);\n }\n }\n break;\n }\n default:\n break;\n }\n }\n }\n\n function walkBlock(item: unknown, f: { blocks?: ClientBlock[]; blockReferences?: (ClientBlock | string)[] }, path: string, depthLeft: number, keep: (path: string) => boolean): void {\n if (!(isRecord(item) && typeof item.blockType === \"string\")) return;\n const def = blockDef(f, item.blockType, ctx);\n if (def) walk(item, def.fields, path, depthLeft, keep);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +0,0 @@
1
- export declare function makeExcluded(metadataPaths: string[], exclude: string[]): (path: string) => boolean;
2
- export declare function makeIncluded(include: string[]): (path: string) => boolean;
3
- //# sourceMappingURL=selection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/content/extract/selection.ts"],"names":[],"mappings":"AAOA,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAYlG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAazE"}
@@ -1,32 +0,0 @@
1
- function normalize(path) {
2
- return path.split(".").filter((seg) => !/^\d+$/u.test(seg)).join(".");
3
- }
4
- function makeExcluded(metadataPaths, exclude) {
5
- const set = new Set([...metadataPaths, ...exclude].filter(Boolean));
6
- return (path) => {
7
- const n = normalize(path);
8
- for (const p of set) {
9
- if (n === p || n.startsWith(`${p}.`))
10
- return true;
11
- }
12
- return false;
13
- };
14
- }
15
- function makeIncluded(include) {
16
- const list = include.filter(Boolean);
17
- if (list.length === 0)
18
- return () => true;
19
- return (path) => {
20
- const n = normalize(path);
21
- for (const p of list) {
22
- if (n === p || n.startsWith(`${p}.`) || p.startsWith(`${n}.`))
23
- return true;
24
- }
25
- return false;
26
- };
27
- }
28
- export {
29
- makeExcluded,
30
- makeIncluded
31
- };
32
- //# sourceMappingURL=selection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/content/extract/selection.ts"],"sourcesContent":["function normalize(path: string): string {\n return path\n .split(\".\")\n .filter((seg) => !/^\\d+$/u.test(seg))\n .join(\".\");\n}\n\nexport function makeExcluded(metadataPaths: string[], exclude: string[]): (path: string) => boolean {\n const set = new Set([...metadataPaths, ...exclude].filter(Boolean));\n\n return (path) => {\n const n = normalize(path);\n\n for (const p of set) {\n if (n === p || n.startsWith(`${p}.`)) return true;\n }\n\n return false;\n };\n}\n\nexport function makeIncluded(include: string[]): (path: string) => boolean {\n const list = include.filter(Boolean);\n if (list.length === 0) return () => true;\n\n return (path) => {\n const n = normalize(path);\n\n for (const p of list) {\n if (n === p || n.startsWith(`${p}.`) || p.startsWith(`${n}.`)) return true;\n }\n\n return false;\n };\n}\n"],"mappings":"AAAA,SAAS,UAAU,MAAsB;AACvC,SAAO,KACJ,MAAM,GAAG,EACT,OAAO,CAAC,QAAQ,CAAC,SAAS,KAAK,GAAG,CAAC,EACnC,KAAK,GAAG;AACb;AAEO,SAAS,aAAa,eAAyB,SAA8C;AAClG,QAAM,MAAM,IAAI,IAAI,CAAC,GAAG,eAAe,GAAG,OAAO,EAAE,OAAO,OAAO,CAAC;AAElE,SAAO,CAAC,SAAS;AACf,UAAM,IAAI,UAAU,IAAI;AAExB,eAAW,KAAK,KAAK;AACnB,UAAI,MAAM,KAAK,EAAE,WAAW,GAAG,CAAC,GAAG;AAAG,eAAO;AAAA,IAC/C;AAEA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,aAAa,SAA8C;AACzE,QAAM,OAAO,QAAQ,OAAO,OAAO;AACnC,MAAI,KAAK,WAAW;AAAG,WAAO,MAAM;AAEpC,SAAO,CAAC,SAAS;AACf,UAAM,IAAI,UAAU,IAAI;AAExB,eAAW,KAAK,MAAM;AACpB,UAAI,MAAM,KAAK,EAAE,WAAW,GAAG,CAAC,GAAG,KAAK,EAAE,WAAW,GAAG,CAAC,GAAG;AAAG,eAAO;AAAA,IACxE;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,5 +0,0 @@
1
- import type { ExtractContext } from "../extract/context";
2
- export declare function transformLexical<T extends {
3
- root?: unknown;
4
- }>(value: T, ctx: ExtractContext): T;
5
- //# sourceMappingURL=transform.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/content/lexical/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAoEzD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,cAAc,GAAG,CAAC,CAI/F"}
@@ -1,56 +0,0 @@
1
- import { refKey } from "../resolve/types";
2
- function isNode(v) {
3
- return typeof v === "object" && v !== null;
4
- }
5
- function isId(v) {
6
- return typeof v === "string" || typeof v === "number";
7
- }
8
- function str(v) {
9
- return typeof v === "string" && v.trim() ? v : void 0;
10
- }
11
- function uploadValue(node, ctx) {
12
- if (node.type !== "upload" || typeof node.relationTo !== "string" || !isId(node.value))
13
- return void 0;
14
- return ctx.resolved.get(refKey({ collection: node.relationTo, id: node.value }));
15
- }
16
- function internalLinkUrl(node, ctx) {
17
- const fields = node.fields;
18
- if (!(isNode(fields) && fields.linkType === "internal" && isNode(fields.doc)))
19
- return void 0;
20
- const doc = fields.doc;
21
- if (typeof doc.relationTo !== "string" || !isId(doc.value))
22
- return void 0;
23
- const resolved = ctx.resolved.get(refKey({ collection: doc.relationTo, id: doc.value }));
24
- const slug = resolved ? str(resolved[ctx.slugPath(doc.relationTo)]) : void 0;
25
- return slug ? `${ctx.baseUrl}/${slug}` : void 0;
26
- }
27
- function transformNode(node, ctx) {
28
- let next = node;
29
- const upload = uploadValue(node, ctx);
30
- if (upload) {
31
- next = { ...next, value: upload };
32
- } else {
33
- const url = internalLinkUrl(node, ctx);
34
- if (url)
35
- next = {
36
- ...next,
37
- fields: { ...next.fields, linkType: "custom", url }
38
- };
39
- }
40
- if (Array.isArray(next.children)) {
41
- next = {
42
- ...next,
43
- children: next.children.map((c) => isNode(c) ? transformNode(c, ctx) : c)
44
- };
45
- }
46
- return next;
47
- }
48
- function transformLexical(value, ctx) {
49
- if (!isNode(value.root))
50
- return value;
51
- return { ...value, root: transformNode(value.root, ctx) };
52
- }
53
- export {
54
- transformLexical
55
- };
56
- //# sourceMappingURL=transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/content/lexical/transform.ts"],"sourcesContent":["import type { ExtractContext } from \"../extract/context\";\nimport { refKey } from \"../resolve/types\";\nimport type { ResolvedDoc } from \"../resolve/types\";\n\ninterface LexicalNode {\n type?: unknown;\n children?: unknown;\n relationTo?: unknown;\n value?: unknown;\n fields?: unknown;\n [key: string]: unknown;\n}\n\nfunction isNode(v: unknown): v is LexicalNode {\n return typeof v === \"object\" && v !== null;\n}\nfunction isId(v: unknown): v is string | number {\n return typeof v === \"string\" || typeof v === \"number\";\n}\nfunction str(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v : undefined;\n}\n\nfunction uploadValue(node: LexicalNode, ctx: ExtractContext): ResolvedDoc | undefined {\n if (node.type !== \"upload\" || typeof node.relationTo !== \"string\" || !isId(node.value)) return undefined;\n return ctx.resolved.get(refKey({ collection: node.relationTo, id: node.value }));\n}\n\nfunction internalLinkUrl(node: LexicalNode, ctx: ExtractContext): string | undefined {\n const fields = node.fields;\n if (!(isNode(fields) && fields.linkType === \"internal\" && isNode(fields.doc))) return undefined;\n\n const doc = fields.doc as LexicalNode;\n if (typeof doc.relationTo !== \"string\" || !isId(doc.value)) return undefined;\n\n const resolved = ctx.resolved.get(refKey({ collection: doc.relationTo, id: doc.value }));\n\n const slug = resolved ? str(resolved[ctx.slugPath(doc.relationTo)]) : undefined;\n\n return slug ? `${ctx.baseUrl}/${slug}` : undefined;\n}\n\nfunction transformNode(node: LexicalNode, ctx: ExtractContext): LexicalNode {\n let next = node;\n\n const upload = uploadValue(node, ctx);\n if (upload) {\n next = { ...next, value: upload };\n } else {\n const url = internalLinkUrl(node, ctx);\n\n if (url)\n next = {\n ...next,\n fields: { ...(next.fields as object), linkType: \"custom\", url },\n };\n }\n\n if (Array.isArray(next.children)) {\n next = {\n ...next,\n children: next.children.map((c) => (isNode(c) ? transformNode(c, ctx) : c)),\n };\n }\n\n return next;\n}\n\nexport function transformLexical<T extends { root?: unknown }>(value: T, ctx: ExtractContext): T {\n if (!isNode(value.root)) return value;\n\n return { ...value, root: transformNode(value.root, ctx) };\n}\n"],"mappings":"AACA,SAAS,cAAc;AAYvB,SAAS,OAAO,GAA8B;AAC5C,SAAO,OAAO,MAAM,YAAY,MAAM;AACxC;AACA,SAAS,KAAK,GAAkC;AAC9C,SAAO,OAAO,MAAM,YAAY,OAAO,MAAM;AAC/C;AACA,SAAS,IAAI,GAAgC;AAC3C,SAAO,OAAO,MAAM,YAAY,EAAE,KAAK,IAAI,IAAI;AACjD;AAEA,SAAS,YAAY,MAAmB,KAA8C;AACpF,MAAI,KAAK,SAAS,YAAY,OAAO,KAAK,eAAe,YAAY,CAAC,KAAK,KAAK,KAAK;AAAG,WAAO;AAC/F,SAAO,IAAI,SAAS,IAAI,OAAO,EAAE,YAAY,KAAK,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC;AACjF;AAEA,SAAS,gBAAgB,MAAmB,KAAyC;AACnF,QAAM,SAAS,KAAK;AACpB,MAAI,EAAE,OAAO,MAAM,KAAK,OAAO,aAAa,cAAc,OAAO,OAAO,GAAG;AAAI,WAAO;AAEtF,QAAM,MAAM,OAAO;AACnB,MAAI,OAAO,IAAI,eAAe,YAAY,CAAC,KAAK,IAAI,KAAK;AAAG,WAAO;AAEnE,QAAM,WAAW,IAAI,SAAS,IAAI,OAAO,EAAE,YAAY,IAAI,YAAY,IAAI,IAAI,MAAM,CAAC,CAAC;AAEvF,QAAM,OAAO,WAAW,IAAI,SAAS,IAAI,SAAS,IAAI,UAAU,CAAC,CAAC,IAAI;AAEtE,SAAO,OAAO,GAAG,IAAI,OAAO,IAAI,IAAI,KAAK;AAC3C;AAEA,SAAS,cAAc,MAAmB,KAAkC;AAC1E,MAAI,OAAO;AAEX,QAAM,SAAS,YAAY,MAAM,GAAG;AACpC,MAAI,QAAQ;AACV,WAAO,EAAE,GAAG,MAAM,OAAO,OAAO;AAAA,EAClC,OAAO;AACL,UAAM,MAAM,gBAAgB,MAAM,GAAG;AAErC,QAAI;AACF,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,EAAE,GAAI,KAAK,QAAmB,UAAU,UAAU,IAAI;AAAA,MAChE;AAAA,EACJ;AAEA,MAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAChC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,KAAK,SAAS,IAAI,CAAC,MAAO,OAAO,CAAC,IAAI,cAAc,GAAG,GAAG,IAAI,CAAE;AAAA,IAC5E;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,iBAA+C,OAAU,KAAwB;AAC/F,MAAI,CAAC,OAAO,MAAM,IAAI;AAAG,WAAO;AAEhC,SAAO,EAAE,GAAG,OAAO,MAAM,cAAc,MAAM,MAAM,GAAG,EAAE;AAC1D;","names":[]}
@@ -1,8 +0,0 @@
1
- import type { ClientField } from "payload";
2
- import type { FieldVisitContext } from "../walk/walkFields";
3
- import type { DocRef } from "./types";
4
- type Values = Record<string, unknown>;
5
- export declare function lexicalDocRefs(root: unknown, isUpload: (s: string) => boolean): DocRef[];
6
- export declare function collectRefs(values: Values, fields: ClientField[], ctx: FieldVisitContext, excluded: (path: string) => boolean): DocRef[];
7
- export {};
8
- //# sourceMappingURL=collect-refs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collect-refs.d.ts","sourceRoot":"","sources":["../../../src/content/resolve/collect-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA+BtC,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,EAAE,CAqBxF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,EAAE,CAwBxI"}
@@ -1,79 +0,0 @@
1
- import { walkFields } from "../walk/walkFields";
2
- import { refKey } from "./types";
3
- function isId(v) {
4
- return typeof v === "string" || typeof v === "number";
5
- }
6
- function isRecord(v) {
7
- return typeof v === "object" && v !== null && !Array.isArray(v);
8
- }
9
- function kindOf(collection, isUpload) {
10
- return {
11
- collection,
12
- id: 0,
13
- kind: isUpload(collection) ? "upload" : "relationship"
14
- };
15
- }
16
- function relationRefs(value, relationTo, isUpload) {
17
- if (Array.isArray(value))
18
- return value.flatMap((v) => relationRefs(v, relationTo, isUpload));
19
- if (typeof relationTo === "string") {
20
- if (!isId(value))
21
- return [];
22
- return [{ ...kindOf(relationTo, isUpload), id: value }];
23
- }
24
- if (isRecord(value) && typeof value.relationTo === "string" && isId(value.value)) {
25
- return [{ ...kindOf(value.relationTo, isUpload), id: value.value }];
26
- }
27
- return [];
28
- }
29
- function lexicalDocRefs(root, isUpload) {
30
- const out = [];
31
- const visit = (node) => {
32
- if (!isRecord(node))
33
- return;
34
- if (node.type === "upload" && typeof node.relationTo === "string" && isId(node.value)) {
35
- out.push({ ...kindOf(node.relationTo, isUpload), id: node.value });
36
- }
37
- const fields = node.fields;
38
- if (isRecord(fields) && fields.linkType === "internal" && isRecord(fields.doc) && typeof fields.doc.relationTo === "string" && isId(fields.doc.value)) {
39
- out.push({
40
- ...kindOf(fields.doc.relationTo, isUpload),
41
- id: fields.doc.value
42
- });
43
- }
44
- if (Array.isArray(node.children))
45
- node.children.forEach(visit);
46
- };
47
- visit(root);
48
- return out;
49
- }
50
- function collectRefs(values, fields, ctx, excluded) {
51
- const seen = /* @__PURE__ */ new Set();
52
- const refs = [];
53
- const push = (r) => {
54
- const k = refKey(r);
55
- if (!seen.has(k)) {
56
- seen.add(k);
57
- refs.push(r);
58
- }
59
- };
60
- walkFields(values, fields, ctx, ({ field, value, path }) => {
61
- if (excluded(path))
62
- return;
63
- if (field.type === "richText") {
64
- if (isRecord(value) && isRecord(value.root))
65
- lexicalDocRefs(value.root, ctx.isUploadCollection).forEach(push);
66
- return;
67
- }
68
- if (value == null)
69
- return;
70
- const f = field;
71
- relationRefs(value, f.relationTo, ctx.isUploadCollection).forEach(push);
72
- });
73
- return refs;
74
- }
75
- export {
76
- collectRefs,
77
- lexicalDocRefs
78
- };
79
- //# sourceMappingURL=collect-refs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/content/resolve/collect-refs.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport { walkFields } from \"../walk/walkFields\";\nimport type { FieldVisitContext } from \"../walk/walkFields\";\nimport { refKey } from \"./types\";\nimport type { DocRef } from \"./types\";\n\ntype Values = Record<string, unknown>;\n\nfunction isId(v: unknown): v is string | number {\n return typeof v === \"string\" || typeof v === \"number\";\n}\nfunction isRecord(v: unknown): v is Values {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction kindOf(collection: string, isUpload: (s: string) => boolean): DocRef {\n return {\n collection,\n id: 0,\n kind: isUpload(collection) ? \"upload\" : \"relationship\",\n };\n}\n\nfunction relationRefs(value: unknown, relationTo: string | string[], isUpload: (s: string) => boolean): DocRef[] {\n if (Array.isArray(value)) return value.flatMap((v) => relationRefs(v, relationTo, isUpload));\n\n if (typeof relationTo === \"string\") {\n if (!isId(value)) return [];\n\n return [{ ...kindOf(relationTo, isUpload), id: value }];\n }\n if (isRecord(value) && typeof value.relationTo === \"string\" && isId(value.value)) {\n return [{ ...kindOf(value.relationTo, isUpload), id: value.value }];\n }\n return [];\n}\n\nexport function lexicalDocRefs(root: unknown, isUpload: (s: string) => boolean): DocRef[] {\n const out: DocRef[] = [];\n\n const visit = (node: unknown): void => {\n if (!isRecord(node)) return;\n if (node.type === \"upload\" && typeof node.relationTo === \"string\" && isId(node.value)) {\n out.push({ ...kindOf(node.relationTo, isUpload), id: node.value });\n }\n const fields = node.fields;\n if (isRecord(fields) && fields.linkType === \"internal\" && isRecord(fields.doc) && typeof fields.doc.relationTo === \"string\" && isId(fields.doc.value)) {\n out.push({\n ...kindOf(fields.doc.relationTo, isUpload),\n id: fields.doc.value,\n });\n }\n if (Array.isArray(node.children)) node.children.forEach(visit);\n };\n\n visit(root);\n\n return out;\n}\n\nexport function collectRefs(values: Values, fields: ClientField[], ctx: FieldVisitContext, excluded: (path: string) => boolean): DocRef[] {\n const seen = new Set<string>();\n const refs: DocRef[] = [];\n\n const push = (r: DocRef) => {\n const k = refKey(r);\n if (!seen.has(k)) {\n seen.add(k);\n refs.push(r);\n }\n };\n\n walkFields(values, fields, ctx, ({ field, value, path }) => {\n if (excluded(path)) return;\n if (field.type === \"richText\") {\n if (isRecord(value) && isRecord(value.root)) lexicalDocRefs(value.root, ctx.isUploadCollection).forEach(push);\n return;\n }\n if (value == null) return;\n const f = field as unknown as { relationTo: string | string[] };\n relationRefs(value, f.relationTo, ctx.isUploadCollection).forEach(push);\n });\n\n return refs;\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAE3B,SAAS,cAAc;AAKvB,SAAS,KAAK,GAAkC;AAC9C,SAAO,OAAO,MAAM,YAAY,OAAO,MAAM;AAC/C;AACA,SAAS,SAAS,GAAyB;AACzC,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC;AAChE;AAEA,SAAS,OAAO,YAAoB,UAA0C;AAC5E,SAAO;AAAA,IACL;AAAA,IACA,IAAI;AAAA,IACJ,MAAM,SAAS,UAAU,IAAI,WAAW;AAAA,EAC1C;AACF;AAEA,SAAS,aAAa,OAAgB,YAA+B,UAA4C;AAC/G,MAAI,MAAM,QAAQ,KAAK;AAAG,WAAO,MAAM,QAAQ,CAAC,MAAM,aAAa,GAAG,YAAY,QAAQ,CAAC;AAE3F,MAAI,OAAO,eAAe,UAAU;AAClC,QAAI,CAAC,KAAK,KAAK;AAAG,aAAO,CAAC;AAE1B,WAAO,CAAC,EAAE,GAAG,OAAO,YAAY,QAAQ,GAAG,IAAI,MAAM,CAAC;AAAA,EACxD;AACA,MAAI,SAAS,KAAK,KAAK,OAAO,MAAM,eAAe,YAAY,KAAK,MAAM,KAAK,GAAG;AAChF,WAAO,CAAC,EAAE,GAAG,OAAO,MAAM,YAAY,QAAQ,GAAG,IAAI,MAAM,MAAM,CAAC;AAAA,EACpE;AACA,SAAO,CAAC;AACV;AAEO,SAAS,eAAe,MAAe,UAA4C;AACxF,QAAM,MAAgB,CAAC;AAEvB,QAAM,QAAQ,CAAC,SAAwB;AACrC,QAAI,CAAC,SAAS,IAAI;AAAG;AACrB,QAAI,KAAK,SAAS,YAAY,OAAO,KAAK,eAAe,YAAY,KAAK,KAAK,KAAK,GAAG;AACrF,UAAI,KAAK,EAAE,GAAG,OAAO,KAAK,YAAY,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAC;AAAA,IACnE;AACA,UAAM,SAAS,KAAK;AACpB,QAAI,SAAS,MAAM,KAAK,OAAO,aAAa,cAAc,SAAS,OAAO,GAAG,KAAK,OAAO,OAAO,IAAI,eAAe,YAAY,KAAK,OAAO,IAAI,KAAK,GAAG;AACrJ,UAAI,KAAK;AAAA,QACP,GAAG,OAAO,OAAO,IAAI,YAAY,QAAQ;AAAA,QACzC,IAAI,OAAO,IAAI;AAAA,MACjB,CAAC;AAAA,IACH;AACA,QAAI,MAAM,QAAQ,KAAK,QAAQ;AAAG,WAAK,SAAS,QAAQ,KAAK;AAAA,EAC/D;AAEA,QAAM,IAAI;AAEV,SAAO;AACT;AAEO,SAAS,YAAY,QAAgB,QAAuB,KAAwB,UAA+C;AACxI,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,OAAiB,CAAC;AAExB,QAAM,OAAO,CAAC,MAAc;AAC1B,UAAM,IAAI,OAAO,CAAC;AAClB,QAAI,CAAC,KAAK,IAAI,CAAC,GAAG;AAChB,WAAK,IAAI,CAAC;AACV,WAAK,KAAK,CAAC;AAAA,IACb;AAAA,EACF;AAEA,aAAW,QAAQ,QAAQ,KAAK,CAAC,EAAE,OAAO,OAAO,KAAK,MAAM;AAC1D,QAAI,SAAS,IAAI;AAAG;AACpB,QAAI,MAAM,SAAS,YAAY;AAC7B,UAAI,SAAS,KAAK,KAAK,SAAS,MAAM,IAAI;AAAG,uBAAe,MAAM,MAAM,IAAI,kBAAkB,EAAE,QAAQ,IAAI;AAC5G;AAAA,IACF;AACA,QAAI,SAAS;AAAM;AACnB,UAAM,IAAI;AACV,iBAAa,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,QAAQ,IAAI;AAAA,EACxE,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -1,7 +0,0 @@
1
- import type { ClientField } from "payload";
2
- import type { FieldVisitContext } from "../walk/walkFields";
3
- import type { ResolvedDoc } from "./types";
4
- type Values = Record<string, unknown>;
5
- export declare function hydrate(values: Values, fields: ClientField[], ctx: FieldVisitContext, resolved: Map<string, ResolvedDoc>): Values;
6
- export {};
7
- //# sourceMappingURL=hydrate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../../src/content/resolve/hydrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmDtC,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CA4DjI"}