@payloadcms/live-preview 1.0.0-beta.2 → 3.0.0-beta.16

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 (50) hide show
  1. package/dist/handleMessage.d.js +3 -0
  2. package/dist/handleMessage.d.js.map +1 -0
  3. package/dist/handleMessage.d.ts +2 -1
  4. package/dist/handleMessage.d.ts.map +1 -1
  5. package/dist/handleMessage.js +33 -25
  6. package/dist/handleMessage.js.map +1 -0
  7. package/dist/index.d.js +7 -0
  8. package/dist/index.d.js.map +1 -0
  9. package/dist/index.d.ts +5 -4
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +6 -29
  12. package/dist/index.js.map +1 -0
  13. package/dist/mergeData.d.js +3 -0
  14. package/dist/mergeData.d.js.map +1 -0
  15. package/dist/mergeData.d.ts +16 -6
  16. package/dist/mergeData.d.ts.map +1 -1
  17. package/dist/mergeData.js +48 -22
  18. package/dist/mergeData.js.map +1 -0
  19. package/dist/ready.d.ts +4 -0
  20. package/dist/ready.d.ts.map +1 -0
  21. package/dist/ready.js +15 -0
  22. package/dist/ready.js.map +1 -0
  23. package/dist/subscribe.d.js +3 -0
  24. package/dist/subscribe.d.js.map +1 -0
  25. package/dist/subscribe.d.ts +3 -2
  26. package/dist/subscribe.d.ts.map +1 -1
  27. package/dist/subscribe.js +16 -26
  28. package/dist/subscribe.js.map +1 -0
  29. package/dist/traverseFields.d.js +3 -0
  30. package/dist/traverseFields.d.js.map +1 -0
  31. package/dist/traverseFields.d.ts +7 -9
  32. package/dist/traverseFields.d.ts.map +1 -1
  33. package/dist/traverseFields.js +137 -123
  34. package/dist/traverseFields.js.map +1 -0
  35. package/dist/traverseRichText.d.ts +8 -0
  36. package/dist/traverseRichText.d.ts.map +1 -0
  37. package/dist/traverseRichText.js +67 -0
  38. package/dist/traverseRichText.js.map +1 -0
  39. package/dist/types.d.ts +12 -0
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +3 -5
  42. package/dist/types.js.map +1 -0
  43. package/dist/unsubscribe.d.ts.map +1 -1
  44. package/dist/unsubscribe.js +2 -12
  45. package/dist/unsubscribe.js.map +1 -0
  46. package/package.json +16 -10
  47. package/dist/promise.d.ts +0 -12
  48. package/dist/promise.d.ts.map +0 -1
  49. package/dist/promise.js +0 -16
  50. package/src/index.ts +0 -4
@@ -0,0 +1,3 @@
1
+ export { }; //# sourceMappingURL=handleMessage.d.ts.map
2
+
3
+ //# sourceMappingURL=handleMessage.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/handleMessage.d.ts"],"names":[],"rangeMappings":"","mappings":"AAYA,WA8CC"}
@@ -1,5 +1,6 @@
1
1
  export declare const handleMessage: <T>(args: {
2
- depth: number;
2
+ apiRoute?: string;
3
+ depth?: number;
3
4
  event: MessageEvent;
4
5
  initialData: T;
5
6
  serverURL: string;
@@ -1 +1 @@
1
- {"version":3,"file":"handleMessage.d.ts","sourceRoot":"","sources":["../src/handleMessage.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;WACjB,MAAM;WACN,YAAY;;eAER,MAAM;gBAqBlB,CAAA"}
1
+ {"version":3,"file":"handleMessage.d.ts","sourceRoot":"","sources":["../src/handleMessage.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,YAAmB;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,CAAC,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,KAAG,QAAQ,CAAC,CAwCZ,CAAA"}
@@ -1,30 +1,38 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "handleMessage", {
6
- enumerable: true,
7
- get: function() {
8
- return handleMessage;
9
- }
10
- });
11
- const _ = require(".");
12
- const handleMessage = async (args)=>{
13
- const { depth, event, initialData, serverURL } = args;
14
- if (event.origin === serverURL && event.data) {
15
- const eventData = JSON.parse(event?.data);
16
- if (eventData.type === 'livePreview') {
17
- const mergedData = await (0, _.mergeData)({
18
- depth,
19
- fieldSchema: eventData.fieldSchemaJSON,
20
- incomingData: eventData.data,
21
- initialData,
22
- serverURL
23
- });
24
- return mergedData;
1
+ import { mergeData } from './mergeData.js';
2
+ // For performance reasons, `fieldSchemaJSON` will only be sent once on the initial message
3
+ // We need to cache this value so that it can be used across subsequent messages
4
+ // To do this, save `fieldSchemaJSON` when it arrives as a global variable
5
+ // Send this cached value to `mergeData`, instead of `eventData.fieldSchemaJSON` directly
6
+ let payloadLivePreviewFieldSchema = undefined // TODO: type this from `fieldSchemaToJSON` return type
7
+ ;
8
+ // Each time the data is merged, cache the result as a `previousData` variable
9
+ // This will ensure changes compound overtop of each other
10
+ let payloadLivePreviewPreviousData = undefined;
11
+ export const handleMessage = async (args)=>{
12
+ const { apiRoute, depth, event, initialData, serverURL } = args;
13
+ if (event.origin === serverURL && event.data && typeof event.data === 'object' && event.data.type === 'payload-live-preview') {
14
+ const { data, externallyUpdatedRelationship, fieldSchemaJSON } = event.data;
15
+ if (!payloadLivePreviewFieldSchema && fieldSchemaJSON) {
16
+ payloadLivePreviewFieldSchema = fieldSchemaJSON;
17
+ }
18
+ if (!payloadLivePreviewFieldSchema) {
19
+ // eslint-disable-next-line no-console
20
+ console.warn('Payload Live Preview: No `fieldSchemaJSON` was received from the parent window. Unable to merge data.');
21
+ return initialData;
25
22
  }
23
+ const mergedData = await mergeData({
24
+ apiRoute,
25
+ depth,
26
+ externallyUpdatedRelationship,
27
+ fieldSchema: payloadLivePreviewFieldSchema,
28
+ incomingData: data,
29
+ initialData: payloadLivePreviewPreviousData || initialData,
30
+ serverURL
31
+ });
32
+ payloadLivePreviewPreviousData = mergedData;
33
+ return mergedData;
26
34
  }
27
35
  return initialData;
28
36
  };
29
37
 
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVNZXNzYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlRGF0YSB9IGZyb20gJy4nXG5cbmV4cG9ydCBjb25zdCBoYW5kbGVNZXNzYWdlID0gYXN5bmMgPFQ+KGFyZ3M6IHtcbiAgZGVwdGg6IG51bWJlclxuICBldmVudDogTWVzc2FnZUV2ZW50XG4gIGluaXRpYWxEYXRhOiBUXG4gIHNlcnZlclVSTDogc3RyaW5nXG59KTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHsgZGVwdGgsIGV2ZW50LCBpbml0aWFsRGF0YSwgc2VydmVyVVJMIH0gPSBhcmdzXG5cbiAgaWYgKGV2ZW50Lm9yaWdpbiA9PT0gc2VydmVyVVJMICYmIGV2ZW50LmRhdGEpIHtcbiAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnBhcnNlKGV2ZW50Py5kYXRhKVxuXG4gICAgaWYgKGV2ZW50RGF0YS50eXBlID09PSAnbGl2ZVByZXZpZXcnKSB7XG4gICAgICBjb25zdCBtZXJnZWREYXRhID0gYXdhaXQgbWVyZ2VEYXRhPFQ+KHtcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGZpZWxkU2NoZW1hOiBldmVudERhdGEuZmllbGRTY2hlbWFKU09OLFxuICAgICAgICBpbmNvbWluZ0RhdGE6IGV2ZW50RGF0YS5kYXRhLFxuICAgICAgICBpbml0aWFsRGF0YSxcbiAgICAgICAgc2VydmVyVVJMLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIG1lcmdlZERhdGFcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5pdGlhbERhdGFcbn1cbiJdLCJuYW1lcyI6WyJoYW5kbGVNZXNzYWdlIiwiYXJncyIsImRlcHRoIiwiZXZlbnQiLCJpbml0aWFsRGF0YSIsInNlcnZlclVSTCIsIm9yaWdpbiIsImRhdGEiLCJldmVudERhdGEiLCJKU09OIiwicGFyc2UiLCJ0eXBlIiwibWVyZ2VkRGF0YSIsIm1lcmdlRGF0YSIsImZpZWxkU2NoZW1hIiwiZmllbGRTY2hlbWFKU09OIiwiaW5jb21pbmdEYXRhIl0sIm1hcHBpbmdzIjoiOzs7OytCQUVhQTs7O2VBQUFBOzs7a0JBRmE7QUFFbkIsTUFBTUEsZ0JBQWdCLE9BQVVDO0lBTXJDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxFQUFFLEdBQUdKO0lBRWpELElBQUlFLE1BQU1HLE1BQU0sS0FBS0QsYUFBYUYsTUFBTUksSUFBSSxFQUFFO1FBQzVDLE1BQU1DLFlBQVlDLEtBQUtDLEtBQUssQ0FBQ1AsT0FBT0k7UUFFcEMsSUFBSUMsVUFBVUcsSUFBSSxLQUFLLGVBQWU7WUFDcEMsTUFBTUMsYUFBYSxNQUFNQyxJQUFBQSxXQUFTLEVBQUk7Z0JBQ3BDWDtnQkFDQVksYUFBYU4sVUFBVU8sZUFBZTtnQkFDdENDLGNBQWNSLFVBQVVELElBQUk7Z0JBQzVCSDtnQkFDQUM7WUFDRjtZQUVBLE9BQU9PO1FBQ1Q7SUFDRjtJQUVBLE9BQU9SO0FBQ1QifQ==
38
+ //# sourceMappingURL=handleMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/handleMessage.ts"],"sourcesContent":["import { mergeData } from './mergeData.js'\n\n// For performance reasons, `fieldSchemaJSON` will only be sent once on the initial message\n// We need to cache this value so that it can be used across subsequent messages\n// To do this, save `fieldSchemaJSON` when it arrives as a global variable\n// Send this cached value to `mergeData`, instead of `eventData.fieldSchemaJSON` directly\nlet payloadLivePreviewFieldSchema = undefined // TODO: type this from `fieldSchemaToJSON` return type\n\n// Each time the data is merged, cache the result as a `previousData` variable\n// This will ensure changes compound overtop of each other\nlet payloadLivePreviewPreviousData = undefined\n\nexport const handleMessage = async <T>(args: {\n apiRoute?: string\n depth?: number\n event: MessageEvent\n initialData: T\n serverURL: string\n}): Promise<T> => {\n const { apiRoute, depth, event, initialData, serverURL } = args\n\n if (\n event.origin === serverURL &&\n event.data &&\n typeof event.data === 'object' &&\n event.data.type === 'payload-live-preview'\n ) {\n const { data, externallyUpdatedRelationship, fieldSchemaJSON } = event.data\n\n if (!payloadLivePreviewFieldSchema && fieldSchemaJSON) {\n payloadLivePreviewFieldSchema = fieldSchemaJSON\n }\n\n if (!payloadLivePreviewFieldSchema) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Payload Live Preview: No `fieldSchemaJSON` was received from the parent window. Unable to merge data.',\n )\n\n return initialData\n }\n\n const mergedData = await mergeData<T>({\n apiRoute,\n depth,\n externallyUpdatedRelationship,\n fieldSchema: payloadLivePreviewFieldSchema,\n incomingData: data,\n initialData: payloadLivePreviewPreviousData || initialData,\n serverURL,\n })\n\n payloadLivePreviewPreviousData = mergedData\n\n return mergedData\n }\n\n return initialData\n}\n"],"names":["mergeData","payloadLivePreviewFieldSchema","undefined","payloadLivePreviewPreviousData","handleMessage","args","apiRoute","depth","event","initialData","serverURL","origin","data","type","externallyUpdatedRelationship","fieldSchemaJSON","console","warn","mergedData","fieldSchema","incomingData"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,SAAS,QAAQ,iBAAgB;AAE1C,2FAA2F;AAC3F,gFAAgF;AAChF,0EAA0E;AAC1E,yFAAyF;AACzF,IAAIC,gCAAgCC,UAAU,uDAAuD;;AAErG,8EAA8E;AAC9E,0DAA0D;AAC1D,IAAIC,iCAAiCD;AAErC,OAAO,MAAME,gBAAgB,OAAUC;IAOrC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGL;IAE3D,IACEG,MAAMG,MAAM,KAAKD,aACjBF,MAAMI,IAAI,IACV,OAAOJ,MAAMI,IAAI,KAAK,YACtBJ,MAAMI,IAAI,CAACC,IAAI,KAAK,wBACpB;QACA,MAAM,EAAED,IAAI,EAAEE,6BAA6B,EAAEC,eAAe,EAAE,GAAGP,MAAMI,IAAI;QAE3E,IAAI,CAACX,iCAAiCc,iBAAiB;YACrDd,gCAAgCc;QAClC;QAEA,IAAI,CAACd,+BAA+B;YAClC,sCAAsC;YACtCe,QAAQC,IAAI,CACV;YAGF,OAAOR;QACT;QAEA,MAAMS,aAAa,MAAMlB,UAAa;YACpCM;YACAC;YACAO;YACAK,aAAalB;YACbmB,cAAcR;YACdH,aAAaN,kCAAkCM;YAC/CC;QACF;QAEAP,iCAAiCe;QAEjC,OAAOA;IACT;IAEA,OAAOT;AACT,EAAC"}
@@ -0,0 +1,7 @@
1
+ export { handleMessage } from './handleMessage.js';
2
+ export { mergeData } from './mergeData.js';
3
+ export { ready } from './ready.js';
4
+ export { subscribe } from './subscribe.js';
5
+ export { unsubscribe } from './unsubscribe.js'; //# sourceMappingURL=index.d.ts.map
6
+
7
+ //# sourceMappingURL=index.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.d.ts"],"names":["handleMessage","mergeData","ready","subscribe","unsubscribe"],"rangeMappings":";;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAoB;AAClD,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,KAAK,QAAQ,aAAY;AAClC,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,WAAW,QAAQ,mBAAkB"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export { handleMessage } from './handleMessage';
2
- export { mergeData } from './mergeData';
3
- export { subscribe } from './subscribe';
4
- export { unsubscribe } from './unsubscribe';
1
+ export { handleMessage } from './handleMessage.js';
2
+ export { mergeData } from './mergeData.js';
3
+ export { ready } from './ready.js';
4
+ export { subscribe } from './subscribe.js';
5
+ export { unsubscribe } from './unsubscribe.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -1,30 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- handleMessage: function() {
13
- return _handleMessage.handleMessage;
14
- },
15
- mergeData: function() {
16
- return _mergeData.mergeData;
17
- },
18
- subscribe: function() {
19
- return _subscribe.subscribe;
20
- },
21
- unsubscribe: function() {
22
- return _unsubscribe.unsubscribe;
23
- }
24
- });
25
- const _handleMessage = require("./handleMessage");
26
- const _mergeData = require("./mergeData");
27
- const _subscribe = require("./subscribe");
28
- const _unsubscribe = require("./unsubscribe");
1
+ export { handleMessage } from './handleMessage.js';
2
+ export { mergeData } from './mergeData.js';
3
+ export { ready } from './ready.js';
4
+ export { subscribe } from './subscribe.js';
5
+ export { unsubscribe } from './unsubscribe.js';
29
6
 
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBoYW5kbGVNZXNzYWdlIH0gZnJvbSAnLi9oYW5kbGVNZXNzYWdlJ1xuZXhwb3J0IHsgbWVyZ2VEYXRhIH0gZnJvbSAnLi9tZXJnZURhdGEnXG5leHBvcnQgeyBzdWJzY3JpYmUgfSBmcm9tICcuL3N1YnNjcmliZSdcbmV4cG9ydCB7IHVuc3Vic2NyaWJlIH0gZnJvbSAnLi91bnN1YnNjcmliZSdcbiJdLCJuYW1lcyI6WyJoYW5kbGVNZXNzYWdlIiwibWVyZ2VEYXRhIiwic3Vic2NyaWJlIiwidW5zdWJzY3JpYmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQVNBLGFBQWE7ZUFBYkEsNEJBQWE7O0lBQ2JDLFNBQVM7ZUFBVEEsb0JBQVM7O0lBQ1RDLFNBQVM7ZUFBVEEsb0JBQVM7O0lBQ1RDLFdBQVc7ZUFBWEEsd0JBQVc7OzsrQkFIVTsyQkFDSjsyQkFDQTs2QkFDRSJ9
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { handleMessage } from './handleMessage.js'\nexport { mergeData } from './mergeData.js'\nexport { ready } from './ready.js'\nexport { subscribe } from './subscribe.js'\nexport { unsubscribe } from './unsubscribe.js'\n"],"names":["handleMessage","mergeData","ready","subscribe","unsubscribe"],"rangeMappings":";;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAoB;AAClD,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,KAAK,QAAQ,aAAY;AAClC,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,WAAW,QAAQ,mBAAkB"}
@@ -0,0 +1,3 @@
1
+ export { }; //# sourceMappingURL=mergeData.d.ts.map
2
+
3
+ //# sourceMappingURL=mergeData.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mergeData.d.ts"],"names":[],"rangeMappings":"","mappings":"AAiBA"}
@@ -1,10 +1,20 @@
1
- export type MergeLiveDataArgs<T> = {
1
+ import type { fieldSchemaToJSON } from 'payload/utilities';
2
+ import type { UpdatedDocument } from './types.js';
3
+ export declare const mergeData: <T>(args: {
2
4
  apiRoute?: string;
3
- depth: number;
4
- fieldSchema: Record<string, unknown>[];
5
- incomingData: T;
5
+ collectionPopulationRequestHandler?: ({ apiPath, endpoint, serverURL, }: {
6
+ apiPath: string;
7
+ endpoint: string;
8
+ serverURL: string;
9
+ }) => Promise<Response>;
10
+ depth?: number;
11
+ externallyUpdatedRelationship?: UpdatedDocument;
12
+ fieldSchema: ReturnType<typeof fieldSchemaToJSON>;
13
+ incomingData: Partial<T>;
6
14
  initialData: T;
15
+ returnNumberOfRequests?: boolean;
7
16
  serverURL: string;
8
- };
9
- export declare const mergeData: <T>({ apiRoute, depth, fieldSchema, incomingData, initialData, serverURL, }: MergeLiveDataArgs<T>) => Promise<T>;
17
+ }) => Promise<T & {
18
+ _numberOfRequests?: number;
19
+ }>;
10
20
  //# sourceMappingURL=mergeData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mergeData.d.ts","sourceRoot":"","sources":["../src/mergeData.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACtC,YAAY,EAAE,CAAC,CAAA;IACf,WAAW,EAAE,CAAC,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,SAAS,kHAyBrB,CAAA"}
1
+ {"version":3,"file":"mergeData.d.ts","sourceRoot":"","sources":["../src/mergeData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAA2B,eAAe,EAAE,MAAM,YAAY,CAAA;AAc1E,eAAO,MAAM,SAAS,YAAmB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kCAAkC,CAAC,EAAE,CAAC,EACpC,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE;QACD,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB,KAAK,QAAQ,QAAQ,CAAC,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6BAA6B,CAAC,EAAE,eAAe,CAAA;IAC/C,WAAW,EAAE,WAAW,wBAAwB,CAAC,CAAA;IACjD,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IACxB,WAAW,EAAE,CAAC,CAAA;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB,KAAG,QACF,CAAC,GAAG;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CA4DF,CAAA"}
package/dist/mergeData.js CHANGED
@@ -1,30 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "mergeData", {
6
- enumerable: true,
7
- get: function() {
8
- return mergeData;
9
- }
10
- });
11
- const _traverseFields = require("./traverseFields");
12
- const mergeData = async ({ apiRoute, depth, fieldSchema, incomingData, initialData, serverURL })=>{
1
+ import { traverseFields } from './traverseFields.js';
2
+ const defaultRequestHandler = ({ apiPath, endpoint, serverURL })=>{
3
+ const url = `${serverURL}${apiPath}/${endpoint}`;
4
+ return fetch(url, {
5
+ credentials: 'include',
6
+ headers: {
7
+ 'Content-Type': 'application/json'
8
+ }
9
+ });
10
+ };
11
+ export const mergeData = async (args)=>{
12
+ const { apiRoute, depth, externallyUpdatedRelationship, fieldSchema, incomingData, initialData, returnNumberOfRequests, serverURL } = args;
13
13
  const result = {
14
14
  ...initialData
15
15
  };
16
- const populationPromises = [];
17
- (0, _traverseFields.traverseFields)({
18
- apiRoute,
19
- depth,
16
+ const populationsByCollection = {};
17
+ traverseFields({
18
+ externallyUpdatedRelationship,
20
19
  fieldSchema,
21
20
  incomingData,
22
- populationPromises,
23
- result,
24
- serverURL
21
+ populationsByCollection,
22
+ result
25
23
  });
26
- await Promise.all(populationPromises);
27
- return result;
24
+ await Promise.all(Object.entries(populationsByCollection).map(async ([collection, populations])=>{
25
+ let res;
26
+ const ids = new Set(populations.map(({ id })=>id));
27
+ const requestHandler = args.collectionPopulationRequestHandler || defaultRequestHandler;
28
+ try {
29
+ res = await requestHandler({
30
+ apiPath: apiRoute || '/api',
31
+ endpoint: `${collection}?depth=${depth}&where[id][in]=${Array.from(ids).join(',')}`,
32
+ serverURL
33
+ }).then((res)=>res.json());
34
+ if (res?.docs?.length > 0) {
35
+ res.docs.forEach((doc)=>{
36
+ populationsByCollection[collection].forEach((population)=>{
37
+ if (population.id === doc.id) {
38
+ population.ref[population.accessor] = doc;
39
+ }
40
+ });
41
+ });
42
+ }
43
+ } catch (err) {
44
+ console.error(err) // eslint-disable-line no-console
45
+ ;
46
+ }
47
+ }));
48
+ return {
49
+ ...result,
50
+ ...returnNumberOfRequests ? {
51
+ _numberOfRequests: Object.keys(populationsByCollection).length
52
+ } : {}
53
+ };
28
54
  };
29
55
 
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXJnZURhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJhdmVyc2VGaWVsZHMgfSBmcm9tICcuL3RyYXZlcnNlRmllbGRzJ1xuXG5leHBvcnQgdHlwZSBNZXJnZUxpdmVEYXRhQXJnczxUPiA9IHtcbiAgYXBpUm91dGU/OiBzdHJpbmdcbiAgZGVwdGg6IG51bWJlclxuICBmaWVsZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICBpbmNvbWluZ0RhdGE6IFRcbiAgaW5pdGlhbERhdGE6IFRcbiAgc2VydmVyVVJMOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IG1lcmdlRGF0YSA9IGFzeW5jIDxUPih7XG4gIGFwaVJvdXRlLFxuICBkZXB0aCxcbiAgZmllbGRTY2hlbWEsXG4gIGluY29taW5nRGF0YSxcbiAgaW5pdGlhbERhdGEsXG4gIHNlcnZlclVSTCxcbn06IE1lcmdlTGl2ZURhdGFBcmdzPFQ+KTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uaW5pdGlhbERhdGEgfVxuXG4gIGNvbnN0IHBvcHVsYXRpb25Qcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW11cblxuICB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgYXBpUm91dGUsXG4gICAgZGVwdGgsXG4gICAgZmllbGRTY2hlbWEsXG4gICAgaW5jb21pbmdEYXRhLFxuICAgIHBvcHVsYXRpb25Qcm9taXNlcyxcbiAgICByZXN1bHQsXG4gICAgc2VydmVyVVJMLFxuICB9KVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHBvcHVsYXRpb25Qcm9taXNlcylcblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibmFtZXMiOlsibWVyZ2VEYXRhIiwiYXBpUm91dGUiLCJkZXB0aCIsImZpZWxkU2NoZW1hIiwiaW5jb21pbmdEYXRhIiwiaW5pdGlhbERhdGEiLCJzZXJ2ZXJVUkwiLCJyZXN1bHQiLCJwb3B1bGF0aW9uUHJvbWlzZXMiLCJ0cmF2ZXJzZUZpZWxkcyIsIlByb21pc2UiLCJhbGwiXSwibWFwcGluZ3MiOiI7Ozs7K0JBV2FBOzs7ZUFBQUE7OztnQ0FYa0I7QUFXeEIsTUFBTUEsWUFBWSxPQUFVLEVBQ2pDQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFdBQVcsRUFDWEMsU0FBUyxFQUNZO0lBQ3JCLE1BQU1DLFNBQVM7UUFBRSxHQUFHRixXQUFXO0lBQUM7SUFFaEMsTUFBTUcscUJBQXNDLEVBQUU7SUFFOUNDLElBQUFBLDhCQUFjLEVBQUM7UUFDYlI7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUk7UUFDQUQ7UUFDQUQ7SUFDRjtJQUVBLE1BQU1JLFFBQVFDLEdBQUcsQ0FBQ0g7SUFFbEIsT0FBT0Q7QUFDVCJ9
56
+ //# sourceMappingURL=mergeData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mergeData.ts"],"sourcesContent":["import type { PaginatedDocs } from 'payload/database'\nimport type { fieldSchemaToJSON } from 'payload/utilities'\n\nimport type { PopulationsByCollection, UpdatedDocument } from './types.js'\n\nimport { traverseFields } from './traverseFields.js'\n\nconst defaultRequestHandler = ({ apiPath, endpoint, serverURL }) => {\n const url = `${serverURL}${apiPath}/${endpoint}`\n return fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n}\n\nexport const mergeData = async <T>(args: {\n apiRoute?: string\n collectionPopulationRequestHandler?: ({\n apiPath,\n endpoint,\n serverURL,\n }: {\n apiPath: string\n endpoint: string\n serverURL: string\n }) => Promise<Response>\n depth?: number\n externallyUpdatedRelationship?: UpdatedDocument\n fieldSchema: ReturnType<typeof fieldSchemaToJSON>\n incomingData: Partial<T>\n initialData: T\n returnNumberOfRequests?: boolean\n serverURL: string\n}): Promise<\n T & {\n _numberOfRequests?: number\n }\n> => {\n const {\n apiRoute,\n depth,\n externallyUpdatedRelationship,\n fieldSchema,\n incomingData,\n initialData,\n returnNumberOfRequests,\n serverURL,\n } = args\n\n const result = { ...initialData }\n\n const populationsByCollection: PopulationsByCollection = {}\n\n traverseFields({\n externallyUpdatedRelationship,\n fieldSchema,\n incomingData,\n populationsByCollection,\n result,\n })\n\n await Promise.all(\n Object.entries(populationsByCollection).map(async ([collection, populations]) => {\n let res: PaginatedDocs\n\n const ids = new Set(populations.map(({ id }) => id))\n const requestHandler = args.collectionPopulationRequestHandler || defaultRequestHandler\n\n try {\n res = await requestHandler({\n apiPath: apiRoute || '/api',\n endpoint: `${collection}?depth=${depth}&where[id][in]=${Array.from(ids).join(',')}`,\n serverURL,\n }).then((res) => res.json())\n\n if (res?.docs?.length > 0) {\n res.docs.forEach((doc) => {\n populationsByCollection[collection].forEach((population) => {\n if (population.id === doc.id) {\n population.ref[population.accessor] = doc\n }\n })\n })\n }\n } catch (err) {\n console.error(err) // eslint-disable-line no-console\n }\n }),\n )\n\n return {\n ...result,\n ...(returnNumberOfRequests\n ? { _numberOfRequests: Object.keys(populationsByCollection).length }\n : {}),\n }\n}\n"],"names":["traverseFields","defaultRequestHandler","apiPath","endpoint","serverURL","url","fetch","credentials","headers","mergeData","args","apiRoute","depth","externallyUpdatedRelationship","fieldSchema","incomingData","initialData","returnNumberOfRequests","result","populationsByCollection","Promise","all","Object","entries","map","collection","populations","res","ids","Set","id","requestHandler","collectionPopulationRequestHandler","Array","from","join","then","json","docs","length","forEach","doc","population","ref","accessor","err","console","error","_numberOfRequests","keys"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAKA,SAASA,cAAc,QAAQ,sBAAqB;AAEpD,MAAMC,wBAAwB,CAAC,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAE;IAC7D,MAAMC,MAAM,CAAC,EAAED,UAAU,EAAEF,QAAQ,CAAC,EAAEC,SAAS,CAAC;IAChD,OAAOG,MAAMD,KAAK;QAChBE,aAAa;QACbC,SAAS;YACP,gBAAgB;QAClB;IACF;AACF;AAEA,OAAO,MAAMC,YAAY,OAAUC;IAuBjC,MAAM,EACJC,QAAQ,EACRC,KAAK,EACLC,6BAA6B,EAC7BC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,sBAAsB,EACtBb,SAAS,EACV,GAAGM;IAEJ,MAAMQ,SAAS;QAAE,GAAGF,WAAW;IAAC;IAEhC,MAAMG,0BAAmD,CAAC;IAE1DnB,eAAe;QACba;QACAC;QACAC;QACAI;QACAD;IACF;IAEA,MAAME,QAAQC,GAAG,CACfC,OAAOC,OAAO,CAACJ,yBAAyBK,GAAG,CAAC,OAAO,CAACC,YAAYC,YAAY;QAC1E,IAAIC;QAEJ,MAAMC,MAAM,IAAIC,IAAIH,YAAYF,GAAG,CAAC,CAAC,EAAEM,EAAE,EAAE,GAAKA;QAChD,MAAMC,iBAAiBrB,KAAKsB,kCAAkC,IAAI/B;QAElE,IAAI;YACF0B,MAAM,MAAMI,eAAe;gBACzB7B,SAASS,YAAY;gBACrBR,UAAU,CAAC,EAAEsB,WAAW,OAAO,EAAEb,MAAM,eAAe,EAAEqB,MAAMC,IAAI,CAACN,KAAKO,IAAI,CAAC,KAAK,CAAC;gBACnF/B;YACF,GAAGgC,IAAI,CAAC,CAACT,MAAQA,IAAIU,IAAI;YAEzB,IAAIV,KAAKW,MAAMC,SAAS,GAAG;gBACzBZ,IAAIW,IAAI,CAACE,OAAO,CAAC,CAACC;oBAChBtB,uBAAuB,CAACM,WAAW,CAACe,OAAO,CAAC,CAACE;wBAC3C,IAAIA,WAAWZ,EAAE,KAAKW,IAAIX,EAAE,EAAE;4BAC5BY,WAAWC,GAAG,CAACD,WAAWE,QAAQ,CAAC,GAAGH;wBACxC;oBACF;gBACF;YACF;QACF,EAAE,OAAOI,KAAK;YACZC,QAAQC,KAAK,CAACF,KAAK,iCAAiC;;QACtD;IACF;IAGF,OAAO;QACL,GAAG3B,MAAM;QACT,GAAID,yBACA;YAAE+B,mBAAmB1B,OAAO2B,IAAI,CAAC9B,yBAAyBoB,MAAM;QAAC,IACjE,CAAC,CAAC;IACR;AACF,EAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const ready: (args: {
2
+ serverURL: string;
3
+ }) => void;
4
+ //# sourceMappingURL=ready.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../src/ready.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,SAAU;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,KAAG,IAiBnD,CAAA"}
package/dist/ready.js ADDED
@@ -0,0 +1,15 @@
1
+ export const ready = (args)=>{
2
+ const { serverURL } = args;
3
+ if (typeof window !== 'undefined') {
4
+ // This subscription may have been from either an iframe or a popup
5
+ // We need to report 'ready' to the parent window, whichever it may be
6
+ // i.e. `window?.opener` for popups, `window?.parent` for iframes
7
+ const windowToPostTo = window?.opener || window?.parent;
8
+ windowToPostTo?.postMessage({
9
+ type: 'payload-live-preview',
10
+ ready: true
11
+ }, serverURL);
12
+ }
13
+ };
14
+
15
+ //# sourceMappingURL=ready.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ready.ts"],"sourcesContent":["export const ready = (args: { serverURL: string }): void => {\n const { serverURL } = args\n\n if (typeof window !== 'undefined') {\n // This subscription may have been from either an iframe or a popup\n // We need to report 'ready' to the parent window, whichever it may be\n // i.e. `window?.opener` for popups, `window?.parent` for iframes\n const windowToPostTo: Window = window?.opener || window?.parent\n\n windowToPostTo?.postMessage(\n {\n type: 'payload-live-preview',\n ready: true,\n },\n serverURL,\n )\n }\n}\n"],"names":["ready","args","serverURL","window","windowToPostTo","opener","parent","postMessage","type"],"rangeMappings":";;;;;;;;;;;;","mappings":"AAAA,OAAO,MAAMA,QAAQ,CAACC;IACpB,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,IAAI,OAAOE,WAAW,aAAa;QACjC,mEAAmE;QACnE,sEAAsE;QACtE,iEAAiE;QACjE,MAAMC,iBAAyBD,QAAQE,UAAUF,QAAQG;QAEzDF,gBAAgBG,YACd;YACEC,MAAM;YACNR,OAAO;QACT,GACAE;IAEJ;AACF,EAAC"}
@@ -0,0 +1,3 @@
1
+ export { }; //# sourceMappingURL=subscribe.d.ts.map
2
+
3
+ //# sourceMappingURL=subscribe.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/subscribe.d.ts"],"names":[],"rangeMappings":"","mappings":"AAEA,WAmBC"}
@@ -1,7 +1,8 @@
1
1
  export declare const subscribe: <T>(args: {
2
+ apiRoute?: string;
2
3
  callback: (data: T) => void;
3
- depth: number;
4
+ depth?: number;
4
5
  initialData: T;
5
6
  serverURL: string;
6
- }) => (event: MessageEvent) => void;
7
+ }) => ((event: MessageEvent) => void);
7
8
  //# sourceMappingURL=subscribe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../src/subscribe.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;2BACG,IAAI;WACpB,MAAM;;eAEF,MAAM;cACN,YAAY,KAAK,IAc7B,CAAA"}
1
+ {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../src/subscribe.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,YAAa;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,CAAC,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,KAAG,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAajC,CAAA"}
package/dist/subscribe.js CHANGED
@@ -1,30 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "subscribe", {
6
- enumerable: true,
7
- get: function() {
8
- return subscribe;
9
- }
10
- });
11
- const _ = require(".");
12
- const subscribe = (args)=>{
13
- const { callback, depth, initialData, serverURL } = args;
1
+ import { handleMessage } from './handleMessage.js';
2
+ export const subscribe = (args)=>{
3
+ const { apiRoute, callback, depth, initialData, serverURL } = args;
4
+ const onMessage = async (event)=>{
5
+ const mergedData = await handleMessage({
6
+ apiRoute,
7
+ depth,
8
+ event,
9
+ initialData,
10
+ serverURL
11
+ });
12
+ callback(mergedData);
13
+ };
14
14
  if (typeof window !== 'undefined') {
15
- const handleMessageCallback = async (event)=>{
16
- const mergedData = await (0, _.handleMessage)({
17
- depth,
18
- event,
19
- initialData,
20
- serverURL
21
- });
22
- callback(mergedData);
23
- };
24
- window.addEventListener('message', handleMessageCallback);
25
- window.parent.postMessage('ready', serverURL);
26
- return handleMessageCallback;
15
+ window.addEventListener('message', onMessage);
27
16
  }
17
+ return onMessage;
28
18
  };
29
19
 
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdWJzY3JpYmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaGFuZGxlTWVzc2FnZSB9IGZyb20gJy4nXG5cbmV4cG9ydCBjb25zdCBzdWJzY3JpYmUgPSA8VD4oYXJnczoge1xuICBjYWxsYmFjazogKGRhdGE6IFQpID0+IHZvaWRcbiAgZGVwdGg6IG51bWJlclxuICBpbml0aWFsRGF0YTogVFxuICBzZXJ2ZXJVUkw6IHN0cmluZ1xufSk6ICgoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCB7IGNhbGxiYWNrLCBkZXB0aCwgaW5pdGlhbERhdGEsIHNlcnZlclVSTCB9ID0gYXJnc1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IGhhbmRsZU1lc3NhZ2VDYWxsYmFjayA9IGFzeW5jIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBtZXJnZWREYXRhID0gYXdhaXQgaGFuZGxlTWVzc2FnZSh7IGRlcHRoLCBldmVudCwgaW5pdGlhbERhdGEsIHNlcnZlclVSTCB9KVxuICAgICAgY2FsbGJhY2sobWVyZ2VkRGF0YSlcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZU1lc3NhZ2VDYWxsYmFjaylcbiAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKCdyZWFkeScsIHNlcnZlclVSTClcblxuICAgIHJldHVybiBoYW5kbGVNZXNzYWdlQ2FsbGJhY2tcbiAgfVxufVxuIl0sIm5hbWVzIjpbInN1YnNjcmliZSIsImFyZ3MiLCJjYWxsYmFjayIsImRlcHRoIiwiaW5pdGlhbERhdGEiLCJzZXJ2ZXJVUkwiLCJ3aW5kb3ciLCJoYW5kbGVNZXNzYWdlQ2FsbGJhY2siLCJldmVudCIsIm1lcmdlZERhdGEiLCJoYW5kbGVNZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhcmVudCIsInBvc3RNZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7OytCQUVhQTs7O2VBQUFBOzs7a0JBRmlCO0FBRXZCLE1BQU1BLFlBQVksQ0FBSUM7SUFNM0IsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxFQUFFQyxTQUFTLEVBQUUsR0FBR0o7SUFFcEQsSUFBSSxPQUFPSyxXQUFXLGFBQWE7UUFDakMsTUFBTUMsd0JBQXdCLE9BQU9DO1lBQ25DLE1BQU1DLGFBQWEsTUFBTUMsSUFBQUEsZUFBYSxFQUFDO2dCQUFFUDtnQkFBT0s7Z0JBQU9KO2dCQUFhQztZQUFVO1lBQzlFSCxTQUFTTztRQUNYO1FBRUFILE9BQU9LLGdCQUFnQixDQUFDLFdBQVdKO1FBQ25DRCxPQUFPTSxNQUFNLENBQUNDLFdBQVcsQ0FBQyxTQUFTUjtRQUVuQyxPQUFPRTtJQUNUO0FBQ0YifQ==
20
+ //# sourceMappingURL=subscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/subscribe.ts"],"sourcesContent":["import { handleMessage } from './handleMessage.js'\n\nexport const subscribe = <T>(args: {\n apiRoute?: string\n callback: (data: T) => void\n depth?: number\n initialData: T\n serverURL: string\n}): ((event: MessageEvent) => void) => {\n const { apiRoute, callback, depth, initialData, serverURL } = args\n\n const onMessage = async (event: MessageEvent) => {\n const mergedData = await handleMessage<T>({ apiRoute, depth, event, initialData, serverURL })\n callback(mergedData)\n }\n\n if (typeof window !== 'undefined') {\n window.addEventListener('message', onMessage)\n }\n\n return onMessage\n}\n"],"names":["handleMessage","subscribe","args","apiRoute","callback","depth","initialData","serverURL","onMessage","event","mergedData","window","addEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAoB;AAElD,OAAO,MAAMC,YAAY,CAAIC;IAO3B,MAAM,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGL;IAE9D,MAAMM,YAAY,OAAOC;QACvB,MAAMC,aAAa,MAAMV,cAAiB;YAAEG;YAAUE;YAAOI;YAAOH;YAAaC;QAAU;QAC3FH,SAASM;IACX;IAEA,IAAI,OAAOC,WAAW,aAAa;QACjCA,OAAOC,gBAAgB,CAAC,WAAWJ;IACrC;IAEA,OAAOA;AACT,EAAC"}
@@ -0,0 +1,3 @@
1
+ export { }; //# sourceMappingURL=traverseFields.d.ts.map
2
+
3
+ //# sourceMappingURL=traverseFields.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/traverseFields.d.ts"],"names":[],"rangeMappings":"","mappings":"AAMA,WAkRC"}
@@ -1,12 +1,10 @@
1
- type Args<T> = {
2
- apiRoute?: string;
3
- depth: number;
4
- fieldSchema: Record<string, unknown>[];
1
+ import type { fieldSchemaToJSON } from 'payload/utilities';
2
+ import type { PopulationsByCollection, UpdatedDocument } from './types.js';
3
+ export declare const traverseFields: <T>(args: {
4
+ externallyUpdatedRelationship?: UpdatedDocument;
5
+ fieldSchema: ReturnType<typeof fieldSchemaToJSON>;
5
6
  incomingData: T;
6
- populationPromises: Promise<void>[];
7
+ populationsByCollection: PopulationsByCollection;
7
8
  result: T;
8
- serverURL: string;
9
- };
10
- export declare const traverseFields: <T>({ apiRoute, depth, fieldSchema, incomingData, populationPromises, result, serverURL, }: Args<T>) => void;
11
- export {};
9
+ }) => void;
12
10
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../src/traverseFields.ts"],"names":[],"mappings":"AAEA,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACtC,YAAY,EAAE,CAAC,CAAA;IACf,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;IACnC,MAAM,EAAE,CAAC,CAAA;IACT,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,cAAc,0GAQd,IAkNZ,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../src/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI1E,eAAO,MAAM,cAAc,YAAa;IACtC,6BAA6B,CAAC,EAAE,eAAe,CAAA;IAC/C,WAAW,EAAE,WAAW,wBAAwB,CAAC,CAAA;IACjD,YAAY,EAAE,CAAC,CAAA;IACf,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,MAAM,EAAE,CAAC,CAAA;CACV,KAAG,IA4QH,CAAA"}
@@ -1,169 +1,184 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "traverseFields", {
6
- enumerable: true,
7
- get: function() {
8
- return traverseFields;
9
- }
10
- });
11
- const _promise = require("./promise");
12
- const traverseFields = ({ apiRoute, depth, fieldSchema, incomingData, populationPromises, result, serverURL })=>{
13
- fieldSchema.forEach((field)=>{
14
- if ('name' in field && typeof field.name === 'string') {
15
- // TODO: type this
16
- const fieldName = field.name;
17
- switch(field.type){
1
+ import { traverseRichText } from './traverseRichText.js';
2
+ export const traverseFields = (args)=>{
3
+ const { externallyUpdatedRelationship, fieldSchema: fieldSchemas, incomingData, populationsByCollection, result } = args;
4
+ fieldSchemas.forEach((fieldSchema)=>{
5
+ if ('name' in fieldSchema && typeof fieldSchema.name === 'string') {
6
+ const fieldName = fieldSchema.name;
7
+ switch(fieldSchema.type){
8
+ case 'richText':
9
+ result[fieldName] = traverseRichText({
10
+ externallyUpdatedRelationship,
11
+ incomingData: incomingData[fieldName],
12
+ populationsByCollection,
13
+ result: result[fieldName]
14
+ });
15
+ break;
18
16
  case 'array':
19
17
  if (Array.isArray(incomingData[fieldName])) {
20
- result[fieldName] = incomingData[fieldName].map((row, i)=>{
21
- const hasExistingRow = Array.isArray(result[fieldName]) && typeof result[fieldName][i] === 'object' && result[fieldName][i] !== null;
22
- const newRow = hasExistingRow ? {
23
- ...result[fieldName][i]
24
- } : {};
18
+ result[fieldName] = incomingData[fieldName].map((incomingRow, i)=>{
19
+ if (!result[fieldName]) {
20
+ result[fieldName] = [];
21
+ }
22
+ if (!result[fieldName][i]) {
23
+ result[fieldName][i] = {};
24
+ }
25
25
  traverseFields({
26
- apiRoute,
27
- depth,
28
- fieldSchema: field.fields,
29
- incomingData: row,
30
- populationPromises,
31
- result: newRow,
32
- serverURL
26
+ externallyUpdatedRelationship,
27
+ fieldSchema: fieldSchema.fields,
28
+ incomingData: incomingRow,
29
+ populationsByCollection,
30
+ result: result[fieldName][i]
33
31
  });
34
- return newRow;
32
+ return result[fieldName][i];
35
33
  });
36
34
  }
37
35
  break;
38
36
  case 'blocks':
39
37
  if (Array.isArray(incomingData[fieldName])) {
40
- result[fieldName] = incomingData[fieldName].map((row, i)=>{
41
- const matchedBlock = field.blocks[row.blockType];
42
- const hasExistingRow = Array.isArray(result[fieldName]) && typeof result[fieldName][i] === 'object' && result[fieldName][i] !== null && result[fieldName][i].blockType === row.blockType;
43
- const newRow = hasExistingRow ? {
44
- ...result[fieldName][i]
45
- } : {
46
- blockType: matchedBlock.slug
47
- };
38
+ result[fieldName] = incomingData[fieldName].map((incomingBlock, i)=>{
39
+ const incomingBlockJSON = fieldSchema.blocks[incomingBlock.blockType];
40
+ if (!result[fieldName]) {
41
+ result[fieldName] = [];
42
+ }
43
+ if (!result[fieldName][i] || result[fieldName][i].id !== incomingBlock.id || result[fieldName][i].blockType !== incomingBlock.blockType) {
44
+ result[fieldName][i] = {
45
+ blockType: incomingBlock.blockType
46
+ };
47
+ }
48
48
  traverseFields({
49
- apiRoute,
50
- depth,
51
- fieldSchema: matchedBlock.fields,
52
- incomingData: row,
53
- populationPromises,
54
- result: newRow,
55
- serverURL
49
+ externallyUpdatedRelationship,
50
+ fieldSchema: incomingBlockJSON.fields,
51
+ incomingData: incomingBlock,
52
+ populationsByCollection,
53
+ result: result[fieldName][i]
56
54
  });
57
- return newRow;
55
+ return result[fieldName][i];
58
56
  });
57
+ } else {
58
+ result[fieldName] = [];
59
59
  }
60
60
  break;
61
- case 'tab':
61
+ case 'tabs':
62
62
  case 'group':
63
63
  if (!result[fieldName]) {
64
64
  result[fieldName] = {};
65
65
  }
66
66
  traverseFields({
67
- apiRoute,
68
- depth,
69
- fieldSchema: field.fields,
67
+ externallyUpdatedRelationship,
68
+ fieldSchema: fieldSchema.fields,
70
69
  incomingData: incomingData[fieldName] || {},
71
- populationPromises,
72
- result: result[fieldName],
73
- serverURL
70
+ populationsByCollection,
71
+ result: result[fieldName]
74
72
  });
75
73
  break;
76
74
  case 'upload':
77
75
  case 'relationship':
78
- if (field.hasMany && Array.isArray(incomingData[fieldName])) {
79
- const existingValue = Array.isArray(result[fieldName]) ? [
80
- ...result[fieldName]
81
- ] : [];
82
- result[fieldName] = Array.isArray(result[fieldName]) ? [
83
- ...result[fieldName]
84
- ].slice(0, incomingData[fieldName].length) : [];
85
- incomingData[fieldName].forEach((relation, i)=>{
76
+ // Handle `hasMany` relationships
77
+ if (fieldSchema.hasMany && Array.isArray(incomingData[fieldName])) {
78
+ if (!result[fieldName] || !incomingData[fieldName].length) {
79
+ result[fieldName] = [];
80
+ }
81
+ incomingData[fieldName].forEach((incomingRelation, i)=>{
86
82
  // Handle `hasMany` polymorphic
87
- if (Array.isArray(field.relationTo)) {
88
- const existingID = existingValue[i]?.value?.id;
89
- if (existingID !== relation.value || existingValue[i]?.relationTo !== relation.relationTo) {
83
+ if (Array.isArray(fieldSchema.relationTo)) {
84
+ // if the field doesn't exist on the result, create it
85
+ // the value will be populated later
86
+ if (!result[fieldName][i]) {
90
87
  result[fieldName][i] = {
91
- relationTo: relation.relationTo
88
+ relationTo: incomingRelation.relationTo
92
89
  };
93
- populationPromises.push((0, _promise.promise)({
94
- id: relation.value,
90
+ }
91
+ const oldID = result[fieldName][i]?.value?.id;
92
+ const oldRelation = result[fieldName][i]?.relationTo;
93
+ const newID = incomingRelation.value;
94
+ const newRelation = incomingRelation.relationTo;
95
+ const hasChanged = newID !== oldID || newRelation !== oldRelation;
96
+ const hasUpdated = newRelation === externallyUpdatedRelationship?.entitySlug && newID === externallyUpdatedRelationship?.id;
97
+ if (hasChanged || hasUpdated) {
98
+ if (!populationsByCollection[newRelation]) {
99
+ populationsByCollection[newRelation] = [];
100
+ }
101
+ populationsByCollection[newRelation].push({
102
+ id: incomingRelation.value,
95
103
  accessor: 'value',
96
- apiRoute,
97
- collection: relation.relationTo,
98
- depth,
99
- ref: result[fieldName][i],
100
- serverURL
101
- }));
104
+ ref: result[fieldName][i]
105
+ });
102
106
  }
103
107
  } else {
104
- // Handle `hasMany` singular
105
- const existingID = existingValue[i]?.id;
106
- if (existingID !== relation) {
107
- populationPromises.push((0, _promise.promise)({
108
- id: relation,
108
+ // Handle `hasMany` monomorphic
109
+ const hasChanged = incomingRelation !== result[fieldName][i]?.id;
110
+ const hasUpdated = fieldSchema.relationTo === externallyUpdatedRelationship?.entitySlug && incomingRelation === externallyUpdatedRelationship?.id;
111
+ if (hasChanged || hasUpdated) {
112
+ if (!populationsByCollection[fieldSchema.relationTo]) {
113
+ populationsByCollection[fieldSchema.relationTo] = [];
114
+ }
115
+ populationsByCollection[fieldSchema.relationTo].push({
116
+ id: incomingRelation,
109
117
  accessor: i,
110
- apiRoute,
111
- collection: String(field.relationTo),
112
- depth,
113
- ref: result[fieldName],
114
- serverURL
115
- }));
118
+ ref: result[fieldName]
119
+ });
116
120
  }
117
121
  }
118
122
  });
119
123
  } else {
120
124
  // Handle `hasOne` polymorphic
121
- if (Array.isArray(field.relationTo)) {
122
- const hasNewValue = typeof incomingData[fieldName] === 'object' && incomingData[fieldName] !== null;
123
- const hasOldValue = typeof result[fieldName] === 'object' && result[fieldName] !== null;
124
- const newValue = hasNewValue ? incomingData[fieldName].value : '';
125
+ if (Array.isArray(fieldSchema.relationTo)) {
126
+ // if the field doesn't exist on the result, create it
127
+ // the value will be populated later
128
+ if (!result[fieldName]) {
129
+ result[fieldName] = {
130
+ relationTo: incomingData[fieldName]?.relationTo
131
+ };
132
+ }
133
+ const hasNewValue = incomingData[fieldName] && typeof incomingData[fieldName] === 'object' && incomingData[fieldName] !== null;
134
+ const hasOldValue = result[fieldName] && typeof result[fieldName] === 'object' && result[fieldName] !== null;
135
+ const newID = hasNewValue ? typeof incomingData[fieldName].value === 'object' ? incomingData[fieldName].value.id : incomingData[fieldName].value : '';
136
+ const oldID = hasOldValue ? typeof result[fieldName].value === 'object' ? result[fieldName].value.id : result[fieldName].value : '';
125
137
  const newRelation = hasNewValue ? incomingData[fieldName].relationTo : '';
126
- const oldValue = hasOldValue ? result[fieldName].value : '';
127
138
  const oldRelation = hasOldValue ? result[fieldName].relationTo : '';
128
- if (newValue !== oldValue || newRelation !== oldRelation) {
129
- if (newValue) {
130
- if (!result[fieldName]) {
131
- result[fieldName] = {
132
- relationTo: newRelation
133
- };
139
+ const hasChanged = newID !== oldID || newRelation !== oldRelation;
140
+ const hasUpdated = newRelation === externallyUpdatedRelationship?.entitySlug && newID === externallyUpdatedRelationship?.id;
141
+ // if the new value/relation is different from the old value/relation
142
+ // populate the new value, otherwise leave it alone
143
+ if (hasChanged || hasUpdated) {
144
+ // if the new value is not empty, populate it
145
+ // otherwise set the value to null
146
+ if (newID) {
147
+ if (!populationsByCollection[newRelation]) {
148
+ populationsByCollection[newRelation] = [];
134
149
  }
135
- populationPromises.push((0, _promise.promise)({
136
- id: newValue,
150
+ populationsByCollection[newRelation].push({
151
+ id: newID,
137
152
  accessor: 'value',
138
- apiRoute,
139
- collection: newRelation,
140
- depth,
141
- ref: result[fieldName],
142
- serverURL
143
- }));
153
+ ref: result[fieldName]
154
+ });
155
+ } else {
156
+ result[fieldName] = null;
144
157
  }
145
- } else {
146
- result[fieldName] = null;
147
158
  }
148
159
  } else {
149
- const hasNewValue = typeof incomingData[fieldName] === 'object' && incomingData[fieldName] !== null;
150
- const hasOldValue = typeof result[fieldName] === 'object' && result[fieldName] !== null;
151
- const newValue = hasNewValue ? incomingData[fieldName].value : '';
152
- const oldValue = hasOldValue ? result[fieldName].value : '';
153
- if (newValue !== oldValue) {
154
- if (newValue) {
155
- populationPromises.push((0, _promise.promise)({
156
- id: newValue,
160
+ // Handle `hasOne` monomorphic
161
+ const newID = incomingData[fieldName] && typeof incomingData[fieldName] === 'object' && incomingData[fieldName].id || incomingData[fieldName];
162
+ const oldID = result[fieldName] && typeof result[fieldName] === 'object' && result[fieldName].id || result[fieldName];
163
+ const hasChanged = newID !== oldID;
164
+ const hasUpdated = fieldSchema.relationTo === externallyUpdatedRelationship?.entitySlug && newID === externallyUpdatedRelationship?.id;
165
+ // if the new value is different from the old value
166
+ // populate the new value, otherwise leave it alone
167
+ if (hasChanged || hasUpdated) {
168
+ // if the new value is not empty, populate it
169
+ // otherwise set the value to null
170
+ if (newID) {
171
+ if (!populationsByCollection[fieldSchema.relationTo]) {
172
+ populationsByCollection[fieldSchema.relationTo] = [];
173
+ }
174
+ populationsByCollection[fieldSchema.relationTo].push({
175
+ id: newID,
157
176
  accessor: fieldName,
158
- apiRoute,
159
- collection: String(field.relationTo),
160
- depth,
161
- ref: result,
162
- serverURL
163
- }));
177
+ ref: result
178
+ });
179
+ } else {
180
+ result[fieldName] = null;
164
181
  }
165
- } else {
166
- result[fieldName] = null;
167
182
  }
168
183
  }
169
184
  }
@@ -173,7 +188,6 @@ const traverseFields = ({ apiRoute, depth, fieldSchema, incomingData, population
173
188
  }
174
189
  }
175
190
  });
176
- return null;
177
191
  };
178
192
 
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90cmF2ZXJzZUZpZWxkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlIH0gZnJvbSAnLi9wcm9taXNlJ1xuXG50eXBlIEFyZ3M8VD4gPSB7XG4gIGFwaVJvdXRlPzogc3RyaW5nXG4gIGRlcHRoOiBudW1iZXJcbiAgZmllbGRTY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbiAgaW5jb21pbmdEYXRhOiBUXG4gIHBvcHVsYXRpb25Qcm9taXNlczogUHJvbWlzZTx2b2lkPltdXG4gIHJlc3VsdDogVFxuICBzZXJ2ZXJVUkw6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgdHJhdmVyc2VGaWVsZHMgPSA8VD4oe1xuICBhcGlSb3V0ZSxcbiAgZGVwdGgsXG4gIGZpZWxkU2NoZW1hLFxuICBpbmNvbWluZ0RhdGEsXG4gIHBvcHVsYXRpb25Qcm9taXNlcyxcbiAgcmVzdWx0LFxuICBzZXJ2ZXJVUkwsXG59OiBBcmdzPFQ+KTogdm9pZCA9PiB7XG4gIGZpZWxkU2NoZW1hLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgaWYgKCduYW1lJyBpbiBmaWVsZCAmJiB0eXBlb2YgZmllbGQubmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRPRE86IHR5cGUgdGhpc1xuICAgICAgY29uc3QgZmllbGROYW1lID0gZmllbGQubmFtZVxuXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGluY29taW5nRGF0YVtmaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV0gPSBpbmNvbWluZ0RhdGFbZmllbGROYW1lXS5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBoYXNFeGlzdGluZ1JvdyA9XG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHRbZmllbGROYW1lXSkgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0W2ZpZWxkTmFtZV1baV0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV1baV0gIT09IG51bGxcblxuICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBoYXNFeGlzdGluZ1JvdyA/IHsgLi4ucmVzdWx0W2ZpZWxkTmFtZV1baV0gfSA6IHt9XG5cbiAgICAgICAgICAgICAgdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hOiBmaWVsZC5maWVsZHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgLy8gVE9ETzogdHlwZSB0aGlzXG4gICAgICAgICAgICAgICAgaW5jb21pbmdEYXRhOiByb3csXG4gICAgICAgICAgICAgICAgcG9wdWxhdGlvblByb21pc2VzLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbmV3Um93LFxuICAgICAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gbmV3Um93XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ2Jsb2Nrcyc6XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IGluY29taW5nRGF0YVtmaWVsZE5hbWVdLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRCbG9jayA9IGZpZWxkLmJsb2Nrc1tyb3cuYmxvY2tUeXBlXVxuXG4gICAgICAgICAgICAgIGNvbnN0IGhhc0V4aXN0aW5nUm93ID1cbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHJlc3VsdFtmaWVsZE5hbWVdKSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGROYW1lXVtpXSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXVtpXSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdW2ldLmJsb2NrVHlwZSA9PT0gcm93LmJsb2NrVHlwZVxuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IGhhc0V4aXN0aW5nUm93XG4gICAgICAgICAgICAgICAgPyB7IC4uLnJlc3VsdFtmaWVsZE5hbWVdW2ldIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tUeXBlOiBtYXRjaGVkQmxvY2suc2x1ZyxcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWE6IG1hdGNoZWRCbG9jay5maWVsZHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgLy8gVE9ETzogdHlwZSB0aGlzXG4gICAgICAgICAgICAgICAgaW5jb21pbmdEYXRhOiByb3csXG4gICAgICAgICAgICAgICAgcG9wdWxhdGlvblByb21pc2VzLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbmV3Um93LFxuICAgICAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gbmV3Um93XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICBpZiAoIXJlc3VsdFtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hOiBmaWVsZC5maWVsZHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgLy8gVE9ETzogdHlwZSB0aGlzXG4gICAgICAgICAgICBpbmNvbWluZ0RhdGE6IGluY29taW5nRGF0YVtmaWVsZE5hbWVdIHx8IHt9LFxuICAgICAgICAgICAgcG9wdWxhdGlvblByb21pc2VzLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRbZmllbGROYW1lXSxcbiAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICd1cGxvYWQnOlxuICAgICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOlxuICAgICAgICAgIGlmIChmaWVsZC5oYXNNYW55ICYmIEFycmF5LmlzQXJyYXkoaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gQXJyYXkuaXNBcnJheShyZXN1bHRbZmllbGROYW1lXSkgPyBbLi4ucmVzdWx0W2ZpZWxkTmFtZV1dIDogW11cbiAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0gQXJyYXkuaXNBcnJheShyZXN1bHRbZmllbGROYW1lXSlcbiAgICAgICAgICAgICAgPyBbLi4ucmVzdWx0W2ZpZWxkTmFtZV1dLnNsaWNlKDAsIGluY29taW5nRGF0YVtmaWVsZE5hbWVdLmxlbmd0aClcbiAgICAgICAgICAgICAgOiBbXVxuXG4gICAgICAgICAgICBpbmNvbWluZ0RhdGFbZmllbGROYW1lXS5mb3JFYWNoKChyZWxhdGlvbiwgaSkgPT4ge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYGhhc01hbnlgIHBvbHltb3JwaGljXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJRCA9IGV4aXN0aW5nVmFsdWVbaV0/LnZhbHVlPy5pZFxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJRCAhPT0gcmVsYXRpb24udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWVbaV0/LnJlbGF0aW9uVG8gIT09IHJlbGF0aW9uLnJlbGF0aW9uVG9cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiByZWxhdGlvbi5yZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IHJlbGF0aW9uLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiByZXN1bHRbZmllbGROYW1lXVtpXSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJVUkwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYGhhc01hbnlgIHNpbmd1bGFyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJRCA9IGV4aXN0aW5nVmFsdWVbaV0/LmlkXG5cbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJRCAhPT0gcmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIHBvcHVsYXRpb25Qcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlKHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogcmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3I6IGksXG4gICAgICAgICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogU3RyaW5nKGZpZWxkLnJlbGF0aW9uVG8pLFxuICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVzdWx0W2ZpZWxkTmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBgaGFzT25lYCBwb2x5bW9ycGhpY1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGFzTmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmNvbWluZ0RhdGFbZmllbGROYW1lXSA9PT0gJ29iamVjdCcgJiYgaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0gIT09IG51bGxcbiAgICAgICAgICAgICAgY29uc3QgaGFzT2xkVmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGROYW1lXSA9PT0gJ29iamVjdCcgJiYgcmVzdWx0W2ZpZWxkTmFtZV0gIT09IG51bGxcblxuICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGhhc05ld1ZhbHVlID8gaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0udmFsdWUgOiAnJ1xuICAgICAgICAgICAgICBjb25zdCBuZXdSZWxhdGlvbiA9IGhhc05ld1ZhbHVlID8gaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0ucmVsYXRpb25UbyA6ICcnXG5cbiAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBoYXNPbGRWYWx1ZSA/IHJlc3VsdFtmaWVsZE5hbWVdLnZhbHVlIDogJydcbiAgICAgICAgICAgICAgY29uc3Qgb2xkUmVsYXRpb24gPSBoYXNPbGRWYWx1ZSA/IHJlc3VsdFtmaWVsZE5hbWVdLnJlbGF0aW9uVG8gOiAnJ1xuXG4gICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgfHwgbmV3UmVsYXRpb24gIT09IG9sZFJlbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IG5ld1JlbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHBvcHVsYXRpb25Qcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlKHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3I6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogbmV3UmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiByZXN1bHRbZmllbGROYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJVUkwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgaGFzTmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmNvbWluZ0RhdGFbZmllbGROYW1lXSA9PT0gJ29iamVjdCcgJiYgaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0gIT09IG51bGxcbiAgICAgICAgICAgICAgY29uc3QgaGFzT2xkVmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGROYW1lXSA9PT0gJ29iamVjdCcgJiYgcmVzdWx0W2ZpZWxkTmFtZV0gIT09IG51bGxcblxuICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGhhc05ld1ZhbHVlID8gaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0udmFsdWUgOiAnJ1xuXG4gICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gaGFzT2xkVmFsdWUgPyByZXN1bHRbZmllbGROYW1lXS52YWx1ZSA6ICcnXG5cbiAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcG9wdWxhdGlvblByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NvcjogZmllbGROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IFN0cmluZyhmaWVsZC5yZWxhdGlvblRvKSxcbiAgICAgICAgICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IHJlc3VsdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJVUkwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IGluY29taW5nRGF0YVtmaWVsZE5hbWVdXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBudWxsXG59XG4iXSwibmFtZXMiOlsidHJhdmVyc2VGaWVsZHMiLCJhcGlSb3V0ZSIsImRlcHRoIiwiZmllbGRTY2hlbWEiLCJpbmNvbWluZ0RhdGEiLCJwb3B1bGF0aW9uUHJvbWlzZXMiLCJyZXN1bHQiLCJzZXJ2ZXJVUkwiLCJmb3JFYWNoIiwiZmllbGQiLCJuYW1lIiwiZmllbGROYW1lIiwidHlwZSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInJvdyIsImkiLCJoYXNFeGlzdGluZ1JvdyIsIm5ld1JvdyIsImZpZWxkcyIsIm1hdGNoZWRCbG9jayIsImJsb2NrcyIsImJsb2NrVHlwZSIsInNsdWciLCJoYXNNYW55IiwiZXhpc3RpbmdWYWx1ZSIsInNsaWNlIiwibGVuZ3RoIiwicmVsYXRpb24iLCJyZWxhdGlvblRvIiwiZXhpc3RpbmdJRCIsInZhbHVlIiwiaWQiLCJwdXNoIiwicHJvbWlzZSIsImFjY2Vzc29yIiwiY29sbGVjdGlvbiIsInJlZiIsIlN0cmluZyIsImhhc05ld1ZhbHVlIiwiaGFzT2xkVmFsdWUiLCJuZXdWYWx1ZSIsIm5ld1JlbGF0aW9uIiwib2xkVmFsdWUiLCJvbGRSZWxhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFZYUE7OztlQUFBQTs7O3lCQVpXO0FBWWpCLE1BQU1BLGlCQUFpQixDQUFJLEVBQ2hDQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLGtCQUFrQixFQUNsQkMsTUFBTSxFQUNOQyxTQUFTLEVBQ0Q7SUFDUkosWUFBWUssT0FBTyxDQUFDLENBQUNDO1FBQ25CLElBQUksVUFBVUEsU0FBUyxPQUFPQSxNQUFNQyxJQUFJLEtBQUssVUFBVTtZQUNyRCxrQkFBa0I7WUFDbEIsTUFBTUMsWUFBWUYsTUFBTUMsSUFBSTtZQUU1QixPQUFRRCxNQUFNRyxJQUFJO2dCQUNoQixLQUFLO29CQUNILElBQUlDLE1BQU1DLE9BQU8sQ0FBQ1YsWUFBWSxDQUFDTyxVQUFVLEdBQUc7d0JBQzFDTCxNQUFNLENBQUNLLFVBQVUsR0FBR1AsWUFBWSxDQUFDTyxVQUFVLENBQUNJLEdBQUcsQ0FBQyxDQUFDQyxLQUFLQzs0QkFDcEQsTUFBTUMsaUJBQ0pMLE1BQU1DLE9BQU8sQ0FBQ1IsTUFBTSxDQUFDSyxVQUFVLEtBQy9CLE9BQU9MLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDTSxFQUFFLEtBQUssWUFDaENYLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDTSxFQUFFLEtBQUs7NEJBRTNCLE1BQU1FLFNBQVNELGlCQUFpQjtnQ0FBRSxHQUFHWixNQUFNLENBQUNLLFVBQVUsQ0FBQ00sRUFBRTs0QkFBQyxJQUFJLENBQUM7NEJBRS9EakIsZUFBZTtnQ0FDYkM7Z0NBQ0FDO2dDQUNBQyxhQUFhTSxNQUFNVyxNQUFNO2dDQUN6QmhCLGNBQWNZO2dDQUNkWDtnQ0FDQUMsUUFBUWE7Z0NBQ1JaOzRCQUNGOzRCQUVBLE9BQU9ZO3dCQUNU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
193
+ //# sourceMappingURL=traverseFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/traverseFields.ts"],"sourcesContent":["import type { fieldSchemaToJSON } from 'payload/utilities'\n\nimport type { PopulationsByCollection, UpdatedDocument } from './types.js'\n\nimport { traverseRichText } from './traverseRichText.js'\n\nexport const traverseFields = <T>(args: {\n externallyUpdatedRelationship?: UpdatedDocument\n fieldSchema: ReturnType<typeof fieldSchemaToJSON>\n incomingData: T\n populationsByCollection: PopulationsByCollection\n result: T\n}): void => {\n const {\n externallyUpdatedRelationship,\n fieldSchema: fieldSchemas,\n incomingData,\n populationsByCollection,\n result,\n } = args\n\n fieldSchemas.forEach((fieldSchema) => {\n if ('name' in fieldSchema && typeof fieldSchema.name === 'string') {\n const fieldName = fieldSchema.name\n\n switch (fieldSchema.type) {\n case 'richText':\n result[fieldName] = traverseRichText({\n externallyUpdatedRelationship,\n incomingData: incomingData[fieldName],\n populationsByCollection,\n result: result[fieldName],\n })\n\n break\n\n case 'array':\n if (Array.isArray(incomingData[fieldName])) {\n result[fieldName] = incomingData[fieldName].map((incomingRow, i) => {\n if (!result[fieldName]) {\n result[fieldName] = []\n }\n\n if (!result[fieldName][i]) {\n result[fieldName][i] = {}\n }\n\n traverseFields({\n externallyUpdatedRelationship,\n fieldSchema: fieldSchema.fields,\n incomingData: incomingRow,\n populationsByCollection,\n result: result[fieldName][i],\n })\n\n return result[fieldName][i]\n })\n }\n\n break\n\n case 'blocks':\n if (Array.isArray(incomingData[fieldName])) {\n result[fieldName] = incomingData[fieldName].map((incomingBlock, i) => {\n const incomingBlockJSON = fieldSchema.blocks[incomingBlock.blockType]\n\n if (!result[fieldName]) {\n result[fieldName] = []\n }\n\n if (\n !result[fieldName][i] ||\n result[fieldName][i].id !== incomingBlock.id ||\n result[fieldName][i].blockType !== incomingBlock.blockType\n ) {\n result[fieldName][i] = {\n blockType: incomingBlock.blockType,\n }\n }\n\n traverseFields({\n externallyUpdatedRelationship,\n fieldSchema: incomingBlockJSON.fields,\n incomingData: incomingBlock,\n populationsByCollection,\n result: result[fieldName][i],\n })\n\n return result[fieldName][i]\n })\n } else {\n result[fieldName] = []\n }\n\n break\n\n case 'tabs':\n case 'group':\n if (!result[fieldName]) {\n result[fieldName] = {}\n }\n\n traverseFields({\n externallyUpdatedRelationship,\n fieldSchema: fieldSchema.fields,\n incomingData: incomingData[fieldName] || {},\n populationsByCollection,\n result: result[fieldName],\n })\n\n break\n\n case 'upload':\n case 'relationship':\n // Handle `hasMany` relationships\n if (fieldSchema.hasMany && Array.isArray(incomingData[fieldName])) {\n if (!result[fieldName] || !incomingData[fieldName].length) {\n result[fieldName] = []\n }\n\n incomingData[fieldName].forEach((incomingRelation, i) => {\n // Handle `hasMany` polymorphic\n if (Array.isArray(fieldSchema.relationTo)) {\n // if the field doesn't exist on the result, create it\n // the value will be populated later\n if (!result[fieldName][i]) {\n result[fieldName][i] = {\n relationTo: incomingRelation.relationTo,\n }\n }\n\n const oldID = result[fieldName][i]?.value?.id\n const oldRelation = result[fieldName][i]?.relationTo\n const newID = incomingRelation.value\n const newRelation = incomingRelation.relationTo\n\n const hasChanged = newID !== oldID || newRelation !== oldRelation\n const hasUpdated =\n newRelation === externallyUpdatedRelationship?.entitySlug &&\n newID === externallyUpdatedRelationship?.id\n\n if (hasChanged || hasUpdated) {\n if (!populationsByCollection[newRelation]) {\n populationsByCollection[newRelation] = []\n }\n\n populationsByCollection[newRelation].push({\n id: incomingRelation.value,\n accessor: 'value',\n ref: result[fieldName][i],\n })\n }\n } else {\n // Handle `hasMany` monomorphic\n const hasChanged = incomingRelation !== result[fieldName][i]?.id\n const hasUpdated =\n fieldSchema.relationTo === externallyUpdatedRelationship?.entitySlug &&\n incomingRelation === externallyUpdatedRelationship?.id\n\n if (hasChanged || hasUpdated) {\n if (!populationsByCollection[fieldSchema.relationTo]) {\n populationsByCollection[fieldSchema.relationTo] = []\n }\n\n populationsByCollection[fieldSchema.relationTo].push({\n id: incomingRelation,\n accessor: i,\n ref: result[fieldName],\n })\n }\n }\n })\n } else {\n // Handle `hasOne` polymorphic\n if (Array.isArray(fieldSchema.relationTo)) {\n // if the field doesn't exist on the result, create it\n // the value will be populated later\n if (!result[fieldName]) {\n result[fieldName] = {\n relationTo: incomingData[fieldName]?.relationTo,\n }\n }\n\n const hasNewValue =\n incomingData[fieldName] &&\n typeof incomingData[fieldName] === 'object' &&\n incomingData[fieldName] !== null\n\n const hasOldValue =\n result[fieldName] &&\n typeof result[fieldName] === 'object' &&\n result[fieldName] !== null\n\n const newID = hasNewValue\n ? typeof incomingData[fieldName].value === 'object'\n ? incomingData[fieldName].value.id\n : incomingData[fieldName].value\n : ''\n\n const oldID = hasOldValue\n ? typeof result[fieldName].value === 'object'\n ? result[fieldName].value.id\n : result[fieldName].value\n : ''\n\n const newRelation = hasNewValue ? incomingData[fieldName].relationTo : ''\n const oldRelation = hasOldValue ? result[fieldName].relationTo : ''\n\n const hasChanged = newID !== oldID || newRelation !== oldRelation\n const hasUpdated =\n newRelation === externallyUpdatedRelationship?.entitySlug &&\n newID === externallyUpdatedRelationship?.id\n\n // if the new value/relation is different from the old value/relation\n // populate the new value, otherwise leave it alone\n if (hasChanged || hasUpdated) {\n // if the new value is not empty, populate it\n // otherwise set the value to null\n if (newID) {\n if (!populationsByCollection[newRelation]) {\n populationsByCollection[newRelation] = []\n }\n\n populationsByCollection[newRelation].push({\n id: newID,\n accessor: 'value',\n ref: result[fieldName],\n })\n } else {\n result[fieldName] = null\n }\n }\n } else {\n // Handle `hasOne` monomorphic\n const newID: number | string | undefined =\n (incomingData[fieldName] &&\n typeof incomingData[fieldName] === 'object' &&\n incomingData[fieldName].id) ||\n incomingData[fieldName]\n\n const oldID: number | string | undefined =\n (result[fieldName] &&\n typeof result[fieldName] === 'object' &&\n result[fieldName].id) ||\n result[fieldName]\n\n const hasChanged = newID !== oldID\n const hasUpdated =\n fieldSchema.relationTo === externallyUpdatedRelationship?.entitySlug &&\n newID === externallyUpdatedRelationship?.id\n\n // if the new value is different from the old value\n // populate the new value, otherwise leave it alone\n if (hasChanged || hasUpdated) {\n // if the new value is not empty, populate it\n // otherwise set the value to null\n if (newID) {\n if (!populationsByCollection[fieldSchema.relationTo]) {\n populationsByCollection[fieldSchema.relationTo] = []\n }\n\n populationsByCollection[fieldSchema.relationTo].push({\n id: newID,\n accessor: fieldName,\n ref: result as Record<string, unknown>,\n })\n } else {\n result[fieldName] = null\n }\n }\n }\n }\n\n break\n\n default:\n result[fieldName] = incomingData[fieldName]\n }\n }\n })\n}\n"],"names":["traverseRichText","traverseFields","args","externallyUpdatedRelationship","fieldSchema","fieldSchemas","incomingData","populationsByCollection","result","forEach","name","fieldName","type","Array","isArray","map","incomingRow","i","fields","incomingBlock","incomingBlockJSON","blocks","blockType","id","hasMany","length","incomingRelation","relationTo","oldID","value","oldRelation","newID","newRelation","hasChanged","hasUpdated","entitySlug","push","accessor","ref","hasNewValue","hasOldValue"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PopulationsByCollection, UpdatedDocument } from './types.js';
2
+ export declare const traverseRichText: ({ externallyUpdatedRelationship, incomingData, populationsByCollection, result, }: {
3
+ externallyUpdatedRelationship?: UpdatedDocument;
4
+ incomingData: any;
5
+ populationsByCollection: PopulationsByCollection;
6
+ result: any;
7
+ }) => any;
8
+ //# sourceMappingURL=traverseRichText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traverseRichText.d.ts","sourceRoot":"","sources":["../src/traverseRichText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE1E,eAAO,MAAM,gBAAgB,sFAK1B;IACD,6BAA6B,CAAC,EAAE,eAAe,CAAA;IAC/C,YAAY,EAAE,GAAG,CAAA;IACjB,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,MAAM,EAAE,GAAG,CAAA;CACZ,KAAG,GA0FH,CAAA"}
@@ -0,0 +1,67 @@
1
+ export const traverseRichText = ({ externallyUpdatedRelationship, incomingData, populationsByCollection, result })=>{
2
+ if (Array.isArray(incomingData)) {
3
+ if (!result) {
4
+ result = [];
5
+ }
6
+ result = incomingData.map((item, index)=>{
7
+ if (!result[index]) {
8
+ result[index] = item;
9
+ }
10
+ return traverseRichText({
11
+ externallyUpdatedRelationship,
12
+ incomingData: item,
13
+ populationsByCollection,
14
+ result: result[index]
15
+ });
16
+ });
17
+ } else if (incomingData && typeof incomingData === 'object') {
18
+ if (!result) {
19
+ result = {};
20
+ }
21
+ // Remove keys from `result` that do not appear in `incomingData`
22
+ // There's likely another way to do this,
23
+ // But recursion and references make this very difficult
24
+ Object.keys(result).forEach((key)=>{
25
+ if (!(key in incomingData)) {
26
+ delete result[key];
27
+ }
28
+ });
29
+ // Iterate over the keys of `incomingData` and populate `result`
30
+ Object.keys(incomingData).forEach((key)=>{
31
+ if (!result[key]) {
32
+ // Instantiate the key in `result` if it doesn't exist
33
+ // Ensure its type matches the type of the `incomingData`
34
+ // We don't have a schema to check against here
35
+ result[key] = incomingData[key] && typeof incomingData[key] === 'object' ? Array.isArray(incomingData[key]) ? [] : {} : undefined;
36
+ }
37
+ const isRelationship = key === 'value' && 'relationTo' in incomingData;
38
+ if (isRelationship) {
39
+ // or if there are no keys besides id
40
+ const needsPopulation = !result.value || typeof result.value !== 'object' || typeof result.value === 'object' && Object.keys(result.value).length === 1 && 'id' in result.value;
41
+ const hasChanged = result && typeof result === 'object' && result.value.id === externallyUpdatedRelationship?.id;
42
+ if (needsPopulation || hasChanged) {
43
+ if (!populationsByCollection[incomingData.relationTo]) {
44
+ populationsByCollection[incomingData.relationTo] = [];
45
+ }
46
+ populationsByCollection[incomingData.relationTo].push({
47
+ id: incomingData[key] && typeof incomingData[key] === 'object' ? incomingData[key].id : incomingData[key],
48
+ accessor: 'value',
49
+ ref: result
50
+ });
51
+ }
52
+ } else {
53
+ result[key] = traverseRichText({
54
+ externallyUpdatedRelationship,
55
+ incomingData: incomingData[key],
56
+ populationsByCollection,
57
+ result: result[key]
58
+ });
59
+ }
60
+ });
61
+ } else {
62
+ result = incomingData;
63
+ }
64
+ return result;
65
+ };
66
+
67
+ //# sourceMappingURL=traverseRichText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/traverseRichText.ts"],"sourcesContent":["import type { PopulationsByCollection, UpdatedDocument } from './types.js'\n\nexport const traverseRichText = ({\n externallyUpdatedRelationship,\n incomingData,\n populationsByCollection,\n result,\n}: {\n externallyUpdatedRelationship?: UpdatedDocument\n incomingData: any\n populationsByCollection: PopulationsByCollection\n result: any\n}): any => {\n if (Array.isArray(incomingData)) {\n if (!result) {\n result = []\n }\n\n result = incomingData.map((item, index) => {\n if (!result[index]) {\n result[index] = item\n }\n\n return traverseRichText({\n externallyUpdatedRelationship,\n incomingData: item,\n populationsByCollection,\n result: result[index],\n })\n })\n } else if (incomingData && typeof incomingData === 'object') {\n if (!result) {\n result = {}\n }\n\n // Remove keys from `result` that do not appear in `incomingData`\n // There's likely another way to do this,\n // But recursion and references make this very difficult\n Object.keys(result).forEach((key) => {\n if (!(key in incomingData)) {\n delete result[key]\n }\n })\n\n // Iterate over the keys of `incomingData` and populate `result`\n Object.keys(incomingData).forEach((key) => {\n if (!result[key]) {\n // Instantiate the key in `result` if it doesn't exist\n // Ensure its type matches the type of the `incomingData`\n // We don't have a schema to check against here\n result[key] =\n incomingData[key] && typeof incomingData[key] === 'object'\n ? Array.isArray(incomingData[key])\n ? []\n : {}\n : undefined\n }\n\n const isRelationship = key === 'value' && 'relationTo' in incomingData\n\n if (isRelationship) {\n // or if there are no keys besides id\n const needsPopulation =\n !result.value ||\n typeof result.value !== 'object' ||\n (typeof result.value === 'object' &&\n Object.keys(result.value).length === 1 &&\n 'id' in result.value)\n\n const hasChanged =\n result &&\n typeof result === 'object' &&\n result.value.id === externallyUpdatedRelationship?.id\n\n if (needsPopulation || hasChanged) {\n if (!populationsByCollection[incomingData.relationTo]) {\n populationsByCollection[incomingData.relationTo] = []\n }\n\n populationsByCollection[incomingData.relationTo].push({\n id:\n incomingData[key] && typeof incomingData[key] === 'object'\n ? incomingData[key].id\n : incomingData[key],\n accessor: 'value',\n ref: result,\n })\n }\n } else {\n result[key] = traverseRichText({\n externallyUpdatedRelationship,\n incomingData: incomingData[key],\n populationsByCollection,\n result: result[key],\n })\n }\n })\n } else {\n result = incomingData\n }\n\n return result\n}\n"],"names":["traverseRichText","externallyUpdatedRelationship","incomingData","populationsByCollection","result","Array","isArray","map","item","index","Object","keys","forEach","key","undefined","isRelationship","needsPopulation","value","length","hasChanged","id","relationTo","push","accessor","ref"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,mBAAmB,CAAC,EAC/BC,6BAA6B,EAC7BC,YAAY,EACZC,uBAAuB,EACvBC,MAAM,EAMP;IACC,IAAIC,MAAMC,OAAO,CAACJ,eAAe;QAC/B,IAAI,CAACE,QAAQ;YACXA,SAAS,EAAE;QACb;QAEAA,SAASF,aAAaK,GAAG,CAAC,CAACC,MAAMC;YAC/B,IAAI,CAACL,MAAM,CAACK,MAAM,EAAE;gBAClBL,MAAM,CAACK,MAAM,GAAGD;YAClB;YAEA,OAAOR,iBAAiB;gBACtBC;gBACAC,cAAcM;gBACdL;gBACAC,QAAQA,MAAM,CAACK,MAAM;YACvB;QACF;IACF,OAAO,IAAIP,gBAAgB,OAAOA,iBAAiB,UAAU;QAC3D,IAAI,CAACE,QAAQ;YACXA,SAAS,CAAC;QACZ;QAEA,iEAAiE;QACjE,yCAAyC;QACzC,wDAAwD;QACxDM,OAAOC,IAAI,CAACP,QAAQQ,OAAO,CAAC,CAACC;YAC3B,IAAI,CAAEA,CAAAA,OAAOX,YAAW,GAAI;gBAC1B,OAAOE,MAAM,CAACS,IAAI;YACpB;QACF;QAEA,gEAAgE;QAChEH,OAAOC,IAAI,CAACT,cAAcU,OAAO,CAAC,CAACC;YACjC,IAAI,CAACT,MAAM,CAACS,IAAI,EAAE;gBAChB,sDAAsD;gBACtD,yDAAyD;gBACzD,+CAA+C;gBAC/CT,MAAM,CAACS,IAAI,GACTX,YAAY,CAACW,IAAI,IAAI,OAAOX,YAAY,CAACW,IAAI,KAAK,WAC9CR,MAAMC,OAAO,CAACJ,YAAY,CAACW,IAAI,IAC7B,EAAE,GACF,CAAC,IACHC;YACR;YAEA,MAAMC,iBAAiBF,QAAQ,WAAW,gBAAgBX;YAE1D,IAAIa,gBAAgB;gBAClB,qCAAqC;gBACrC,MAAMC,kBACJ,CAACZ,OAAOa,KAAK,IACb,OAAOb,OAAOa,KAAK,KAAK,YACvB,OAAOb,OAAOa,KAAK,KAAK,YACvBP,OAAOC,IAAI,CAACP,OAAOa,KAAK,EAAEC,MAAM,KAAK,KACrC,QAAQd,OAAOa,KAAK;gBAExB,MAAME,aACJf,UACA,OAAOA,WAAW,YAClBA,OAAOa,KAAK,CAACG,EAAE,KAAKnB,+BAA+BmB;gBAErD,IAAIJ,mBAAmBG,YAAY;oBACjC,IAAI,CAAChB,uBAAuB,CAACD,aAAamB,UAAU,CAAC,EAAE;wBACrDlB,uBAAuB,CAACD,aAAamB,UAAU,CAAC,GAAG,EAAE;oBACvD;oBAEAlB,uBAAuB,CAACD,aAAamB,UAAU,CAAC,CAACC,IAAI,CAAC;wBACpDF,IACElB,YAAY,CAACW,IAAI,IAAI,OAAOX,YAAY,CAACW,IAAI,KAAK,WAC9CX,YAAY,CAACW,IAAI,CAACO,EAAE,GACpBlB,YAAY,CAACW,IAAI;wBACvBU,UAAU;wBACVC,KAAKpB;oBACP;gBACF;YACF,OAAO;gBACLA,MAAM,CAACS,IAAI,GAAGb,iBAAiB;oBAC7BC;oBACAC,cAAcA,YAAY,CAACW,IAAI;oBAC/BV;oBACAC,QAAQA,MAAM,CAACS,IAAI;gBACrB;YACF;QACF;IACF,OAAO;QACLT,SAASF;IACX;IAEA,OAAOE;AACT,EAAC"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,15 @@
1
1
  export type LivePreviewArgs = {};
2
2
  export type LivePreview = void;
3
+ export type PopulationsByCollection = {
4
+ [slug: string]: Array<{
5
+ accessor: number | string;
6
+ id: number | string;
7
+ ref: Record<string, unknown>;
8
+ }>;
9
+ };
10
+ export type UpdatedDocument = {
11
+ entitySlug: string;
12
+ id?: number | string;
13
+ updatedAt: string;
14
+ };
3
15
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,EAAE,CAAA;AAEhC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,EAAE,CAAA;AAEhC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAA;AAE9B,MAAM,MAAM,uBAAuB,GAAG;IACpC,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;QACzB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC7B,CAAC,CAAA;CACH,CAAA;AAGD,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA"}
package/dist/types.js CHANGED
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
1
+ // TODO: import this from `payload/admin/components/utilities/DocumentEvents/types.ts`
2
+ export { };
5
3
 
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["export type LivePreviewArgs = {}\n\nexport type LivePreview = void\n\nexport type PopulationsByCollection = {\n [slug: string]: Array<{\n accessor: number | string\n id: number | string\n ref: Record<string, unknown>\n }>\n}\n\n// TODO: import this from `payload/admin/components/utilities/DocumentEvents/types.ts`\nexport type UpdatedDocument = {\n entitySlug: string\n id?: number | string\n updatedAt: string\n}\n"],"names":[],"rangeMappings":";","mappings":"AAYA,sFAAsF;AACtF,WAIC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscribe.d.ts","sourceRoot":"","sources":["../src/unsubscribe.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,qBAAsB,YAAY,KAAK,IAAI,SAIlE,CAAA"}
1
+ {"version":3,"file":"unsubscribe.d.ts","sourceRoot":"","sources":["../src/unsubscribe.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,aAAc,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,SAIlE,CAAA"}
@@ -1,17 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "unsubscribe", {
6
- enumerable: true,
7
- get: function() {
8
- return unsubscribe;
9
- }
10
- });
11
- const unsubscribe = (callback)=>{
1
+ export const unsubscribe = (callback)=>{
12
2
  if (typeof window !== 'undefined') {
13
3
  window.removeEventListener('message', callback);
14
4
  }
15
5
  };
16
6
 
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91bnN1YnNjcmliZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdW5zdWJzY3JpYmUgPSAoY2FsbGJhY2s6IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgY2FsbGJhY2spXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ1bnN1YnNjcmliZSIsImNhbGxiYWNrIiwid2luZG93IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsY0FBYyxDQUFDQztJQUMxQixJQUFJLE9BQU9DLFdBQVcsYUFBYTtRQUNqQ0EsT0FBT0MsbUJBQW1CLENBQUMsV0FBV0Y7SUFDeEM7QUFDRiJ9
7
+ //# sourceMappingURL=unsubscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/unsubscribe.ts"],"sourcesContent":["export const unsubscribe = (callback: (event: MessageEvent) => void) => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('message', callback)\n }\n}\n"],"names":["unsubscribe","callback","window","removeEventListener"],"rangeMappings":";;;;","mappings":"AAAA,OAAO,MAAMA,cAAc,CAACC;IAC1B,IAAI,OAAOC,WAAW,aAAa;QACjCA,OAAOC,mBAAmB,CAAC,WAAWF;IACxC;AACF,EAAC"}
package/package.json CHANGED
@@ -1,23 +1,29 @@
1
1
  {
2
2
  "name": "@payloadcms/live-preview",
3
- "version": "1.0.0-beta.2",
3
+ "version": "3.0.0-beta.16",
4
4
  "description": "The official live preview JavaScript SDK for Payload",
5
- "repository": "https://github.com/payloadcms/payload",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/payloadcms/payload.git",
8
+ "directory": "packages/live-preview"
9
+ },
6
10
  "license": "MIT",
7
11
  "homepage": "https://payloadcms.com",
8
12
  "author": "Payload CMS, Inc.",
9
13
  "main": "./dist/index.js",
10
14
  "types": "./dist/index.d.ts",
11
- "dependencies": {
12
- "react": "18.2.0"
13
- },
15
+ "type": "module",
14
16
  "devDependencies": {
15
- "@types/node": "20.5.7",
16
- "@types/react": "18.2.15",
17
- "payload": "2.0.0-beta.15",
18
- "@payloadcms/eslint-config": "0.0.1"
17
+ "@payloadcms/eslint-config": "3.0.0-beta.16",
18
+ "payload": "3.0.0-beta.16"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "import": "./dist/index.js",
23
+ "require": "./dist/index.js",
24
+ "types": "./dist/index.d.ts"
25
+ }
19
26
  },
20
- "exports": null,
21
27
  "publishConfig": {
22
28
  "registry": "https://registry.npmjs.org/"
23
29
  },
package/dist/promise.d.ts DELETED
@@ -1,12 +0,0 @@
1
- type Args = {
2
- accessor: number | string;
3
- apiRoute?: string;
4
- collection: string;
5
- depth: number;
6
- id: number | string;
7
- ref: Record<string, unknown>;
8
- serverURL: string;
9
- };
10
- export declare const promise: ({ id, accessor, apiRoute, collection, depth, ref, serverURL, }: Args) => Promise<void>;
11
- export {};
12
- //# sourceMappingURL=promise.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,OAAO,mEAQjB,IAAI,KAAG,QAAQ,IAAI,CAMrB,CAAA"}
package/dist/promise.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "promise", {
6
- enumerable: true,
7
- get: function() {
8
- return promise;
9
- }
10
- });
11
- const promise = async ({ id, accessor, apiRoute, collection, depth, ref, serverURL })=>{
12
- const res = await fetch(`${serverURL}${apiRoute || '/api'}/${collection}/${id}?depth=${depth}`).then((res)=>res.json());
13
- ref[accessor] = res;
14
- };
15
-
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9taXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgQXJncyA9IHtcbiAgYWNjZXNzb3I6IG51bWJlciB8IHN0cmluZ1xuICBhcGlSb3V0ZT86IHN0cmluZ1xuICBjb2xsZWN0aW9uOiBzdHJpbmdcbiAgZGVwdGg6IG51bWJlclxuICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIHJlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2VydmVyVVJMOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IHByb21pc2UgPSBhc3luYyAoe1xuICBpZCxcbiAgYWNjZXNzb3IsXG4gIGFwaVJvdXRlLFxuICBjb2xsZWN0aW9uLFxuICBkZXB0aCxcbiAgcmVmLFxuICBzZXJ2ZXJVUkwsXG59OiBBcmdzKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmV0Y2goXG4gICAgYCR7c2VydmVyVVJMfSR7YXBpUm91dGUgfHwgJy9hcGknfS8ke2NvbGxlY3Rpb259LyR7aWR9P2RlcHRoPSR7ZGVwdGh9YCxcbiAgKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG5cbiAgcmVmW2FjY2Vzc29yXSA9IHJlc1xufVxuIl0sIm5hbWVzIjpbInByb21pc2UiLCJpZCIsImFjY2Vzc29yIiwiYXBpUm91dGUiLCJjb2xsZWN0aW9uIiwiZGVwdGgiLCJyZWYiLCJzZXJ2ZXJVUkwiLCJyZXMiLCJmZXRjaCIsInRoZW4iLCJqc29uIl0sIm1hcHBpbmdzIjoiOzs7OytCQVVhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxVQUFVLE9BQU8sRUFDNUJDLEVBQUUsRUFDRkMsUUFBUSxFQUNSQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsS0FBSyxFQUNMQyxHQUFHLEVBQ0hDLFNBQVMsRUFDSjtJQUNMLE1BQU1DLE1BQVcsTUFBTUMsTUFDckIsQ0FBQyxFQUFFRixVQUFVLEVBQUVKLFlBQVksT0FBTyxDQUFDLEVBQUVDLFdBQVcsQ0FBQyxFQUFFSCxHQUFHLE9BQU8sRUFBRUksTUFBTSxDQUFDLEVBQ3RFSyxJQUFJLENBQUMsQ0FBQ0YsTUFBUUEsSUFBSUcsSUFBSTtJQUV4QkwsR0FBRyxDQUFDSixTQUFTLEdBQUdNO0FBQ2xCIn0=
package/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export { handleMessage } from './handleMessage'
2
- export { mergeData } from './mergeData'
3
- export { subscribe } from './subscribe'
4
- export { unsubscribe } from './unsubscribe'