@payloadcms/plugin-import-export 3.36.0 → 3.37.0-internal.f2e6c68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/export/createExport.js +8 -2
- package/dist/export/createExport.js.map +1 -1
- package/dist/export/flattenObject.d.ts +8 -1
- package/dist/export/flattenObject.d.ts.map +1 -1
- package/dist/export/flattenObject.js +42 -17
- package/dist/export/flattenObject.js.map +1 -1
- package/package.json +7 -7
|
@@ -36,7 +36,10 @@ export const createExport = async (args)=>{
|
|
|
36
36
|
let result = await payload.find(findArgs);
|
|
37
37
|
let isFirstBatch = true;
|
|
38
38
|
while(result.docs.length > 0){
|
|
39
|
-
const csvInput = result.docs.map((doc)=>flattenObject(
|
|
39
|
+
const csvInput = result.docs.map((doc)=>flattenObject({
|
|
40
|
+
doc,
|
|
41
|
+
fields
|
|
42
|
+
}));
|
|
40
43
|
const csvString = stringify(csvInput, {
|
|
41
44
|
header: isFirstBatch
|
|
42
45
|
});
|
|
@@ -65,7 +68,10 @@ export const createExport = async (args)=>{
|
|
|
65
68
|
findArgs.page += 1;
|
|
66
69
|
result = await payload.find(findArgs);
|
|
67
70
|
if (isCSV) {
|
|
68
|
-
const csvInput = result.docs.map((doc)=>flattenObject(
|
|
71
|
+
const csvInput = result.docs.map((doc)=>flattenObject({
|
|
72
|
+
doc,
|
|
73
|
+
fields
|
|
74
|
+
}));
|
|
69
75
|
outputData.push(stringify(csvInput, {
|
|
70
76
|
header: isFirstBatch
|
|
71
77
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/export/createExport.ts"],"sourcesContent":["import type { PaginatedDocs, PayloadRequest, Sort, User, Where } from 'payload'\n\nimport { stringify } from 'csv-stringify/sync'\nimport { APIError } from 'payload'\nimport { Readable } from 'stream'\n\nimport { flattenObject } from './flattenObject.js'\nimport { getFilename } from './getFilename.js'\nimport { getSelect } from './getSelect.js'\n\ntype Export = {\n collectionSlug: string\n drafts?: 'no' | 'yes'\n exportsCollection: string\n fields?: string[]\n format: 'csv' | 'json'\n globals?: string[]\n id: number | string\n locale?: string\n name: string\n slug: string\n sort: Sort\n user: string\n userCollection: string\n where?: Where\n}\n\nexport type CreateExportArgs = {\n /**\n * If true, stream the file instead of saving it\n */\n download?: boolean\n input: Export\n req: PayloadRequest\n user?: User\n}\n\nexport const createExport = async (args: CreateExportArgs) => {\n const {\n download,\n input: {\n id,\n name: nameArg,\n collectionSlug,\n drafts,\n exportsCollection,\n fields,\n format,\n locale: localeInput,\n sort,\n user,\n where,\n },\n req: { locale: localeArg, payload },\n req,\n } = args\n const locale = localeInput ?? localeArg\n const collectionConfig = payload.config.collections.find(({ slug }) => slug === collectionSlug)\n if (!collectionConfig) {\n throw new APIError(`Collection with slug ${collectionSlug} not found`)\n }\n\n const name = `${nameArg ?? `${getFilename()}-${collectionSlug}`}.${format}`\n const isCSV = format === 'csv'\n\n const findArgs = {\n collection: collectionSlug,\n depth: 0,\n draft: drafts === 'yes',\n limit: 100,\n locale,\n overrideAccess: false,\n page: 0,\n select: Array.isArray(fields) && fields.length > 0 ? getSelect(fields) : undefined,\n sort,\n user,\n where,\n }\n\n let result: PaginatedDocs = { hasNextPage: true } as PaginatedDocs\n\n if (download) {\n const encoder = new TextEncoder()\n const stream = new Readable({\n async read() {\n let result = await payload.find(findArgs)\n let isFirstBatch = true\n\n while (result.docs.length > 0) {\n const csvInput = result.docs.map((doc) => flattenObject(doc))\n const csvString = stringify(csvInput, { header: isFirstBatch })\n this.push(encoder.encode(csvString))\n isFirstBatch = false\n\n if (!result.hasNextPage) {\n this.push(null) // End the stream\n break\n }\n\n findArgs.page += 1\n result = await payload.find(findArgs)\n }\n },\n })\n\n return new Response(stream as any, {\n headers: {\n 'Content-Disposition': `attachment; filename=\"${name}\"`,\n 'Content-Type': isCSV ? 'text/csv' : 'application/json',\n },\n })\n }\n\n const outputData: string[] = []\n let isFirstBatch = true\n\n while (result.hasNextPage) {\n findArgs.page += 1\n result = await payload.find(findArgs)\n\n if (isCSV) {\n const csvInput = result.docs.map((doc) => flattenObject(doc))\n outputData.push(stringify(csvInput, { header: isFirstBatch }))\n isFirstBatch = false\n } else {\n const jsonInput = result.docs.map((doc) => JSON.stringify(doc))\n outputData.push(jsonInput.join(',\\n'))\n }\n }\n\n const buffer = Buffer.from(format === 'json' ? `[${outputData.join(',')}]` : outputData.join(''))\n\n if (!id) {\n req.file = {\n name,\n data: buffer,\n mimetype: isCSV ? 'text/csv' : 'application/json',\n size: buffer.length,\n }\n } else {\n await req.payload.update({\n id,\n collection: exportsCollection,\n data: {},\n file: {\n name,\n data: buffer,\n mimetype: isCSV ? 'text/csv' : 'application/json',\n size: buffer.length,\n },\n user,\n })\n }\n}\n"],"names":["stringify","APIError","Readable","flattenObject","getFilename","getSelect","createExport","args","download","input","id","name","nameArg","collectionSlug","drafts","exportsCollection","fields","format","locale","localeInput","sort","user","where","req","localeArg","payload","collectionConfig","config","collections","find","slug","isCSV","findArgs","collection","depth","draft","limit","overrideAccess","page","select","Array","isArray","length","undefined","result","hasNextPage","encoder","TextEncoder","stream","read","isFirstBatch","docs","csvInput","map","doc","csvString","header","push","encode","Response","headers","outputData","jsonInput","JSON","join","buffer","Buffer","from","file","data","mimetype","size","update"],"mappings":"AAEA,SAASA,SAAS,QAAQ,qBAAoB;AAC9C,SAASC,QAAQ,QAAQ,UAAS;AAClC,SAASC,QAAQ,QAAQ,SAAQ;AAEjC,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,SAAS,QAAQ,iBAAgB;AA6B1C,OAAO,MAAMC,eAAe,OAAOC;IACjC,MAAM,EACJC,QAAQ,EACRC,OAAO,EACLC,EAAE,EACFC,MAAMC,OAAO,EACbC,cAAc,EACdC,MAAM,EACNC,iBAAiB,EACjBC,MAAM,EACNC,MAAM,EACNC,QAAQC,WAAW,EACnBC,IAAI,EACJC,IAAI,EACJC,KAAK,EACN,EACDC,KAAK,EAAEL,QAAQM,SAAS,EAAEC,OAAO,EAAE,EACnCF,GAAG,EACJ,GAAGhB;IACJ,MAAMW,SAASC,eAAeK;IAC9B,MAAME,mBAAmBD,QAAQE,MAAM,CAACC,WAAW,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASjB;IAChF,IAAI,CAACa,kBAAkB;QACrB,MAAM,IAAIzB,SAAS,CAAC,qBAAqB,EAAEY,eAAe,UAAU,CAAC;IACvE;IAEA,MAAMF,OAAO,GAAGC,WAAW,GAAGR,cAAc,CAAC,EAAES,gBAAgB,CAAC,CAAC,EAAEI,QAAQ;IAC3E,MAAMc,QAAQd,WAAW;IAEzB,MAAMe,WAAW;QACfC,YAAYpB;QACZqB,OAAO;QACPC,OAAOrB,WAAW;QAClBsB,OAAO;QACPlB;QACAmB,gBAAgB;QAChBC,MAAM;QACNC,QAAQC,MAAMC,OAAO,CAACzB,WAAWA,OAAO0B,MAAM,GAAG,IAAIrC,UAAUW,UAAU2B;QACzEvB;QACAC;QACAC;IACF;IAEA,IAAIsB,SAAwB;QAAEC,aAAa;IAAK;IAEhD,IAAIrC,UAAU;QACZ,MAAMsC,UAAU,IAAIC;QACpB,MAAMC,SAAS,IAAI9C,SAAS;YAC1B,MAAM+C;gBACJ,IAAIL,SAAS,MAAMnB,QAAQI,IAAI,CAACG;gBAChC,IAAIkB,eAAe;gBAEnB,MAAON,OAAOO,IAAI,CAACT,MAAM,GAAG,EAAG;oBAC7B,MAAMU,WAAWR,OAAOO,IAAI,CAACE,GAAG,CAAC,CAACC,MAAQnD,
|
|
1
|
+
{"version":3,"sources":["../../src/export/createExport.ts"],"sourcesContent":["import type { PaginatedDocs, PayloadRequest, Sort, User, Where } from 'payload'\n\nimport { stringify } from 'csv-stringify/sync'\nimport { APIError } from 'payload'\nimport { Readable } from 'stream'\n\nimport { flattenObject } from './flattenObject.js'\nimport { getFilename } from './getFilename.js'\nimport { getSelect } from './getSelect.js'\n\ntype Export = {\n collectionSlug: string\n drafts?: 'no' | 'yes'\n exportsCollection: string\n fields?: string[]\n format: 'csv' | 'json'\n globals?: string[]\n id: number | string\n locale?: string\n name: string\n slug: string\n sort: Sort\n user: string\n userCollection: string\n where?: Where\n}\n\nexport type CreateExportArgs = {\n /**\n * If true, stream the file instead of saving it\n */\n download?: boolean\n input: Export\n req: PayloadRequest\n user?: User\n}\n\nexport const createExport = async (args: CreateExportArgs) => {\n const {\n download,\n input: {\n id,\n name: nameArg,\n collectionSlug,\n drafts,\n exportsCollection,\n fields,\n format,\n locale: localeInput,\n sort,\n user,\n where,\n },\n req: { locale: localeArg, payload },\n req,\n } = args\n const locale = localeInput ?? localeArg\n const collectionConfig = payload.config.collections.find(({ slug }) => slug === collectionSlug)\n if (!collectionConfig) {\n throw new APIError(`Collection with slug ${collectionSlug} not found`)\n }\n\n const name = `${nameArg ?? `${getFilename()}-${collectionSlug}`}.${format}`\n const isCSV = format === 'csv'\n\n const findArgs = {\n collection: collectionSlug,\n depth: 0,\n draft: drafts === 'yes',\n limit: 100,\n locale,\n overrideAccess: false,\n page: 0,\n select: Array.isArray(fields) && fields.length > 0 ? getSelect(fields) : undefined,\n sort,\n user,\n where,\n }\n\n let result: PaginatedDocs = { hasNextPage: true } as PaginatedDocs\n\n if (download) {\n const encoder = new TextEncoder()\n const stream = new Readable({\n async read() {\n let result = await payload.find(findArgs)\n let isFirstBatch = true\n\n while (result.docs.length > 0) {\n const csvInput = result.docs.map((doc) => flattenObject({ doc, fields }))\n const csvString = stringify(csvInput, { header: isFirstBatch })\n this.push(encoder.encode(csvString))\n isFirstBatch = false\n\n if (!result.hasNextPage) {\n this.push(null) // End the stream\n break\n }\n\n findArgs.page += 1\n result = await payload.find(findArgs)\n }\n },\n })\n\n return new Response(stream as any, {\n headers: {\n 'Content-Disposition': `attachment; filename=\"${name}\"`,\n 'Content-Type': isCSV ? 'text/csv' : 'application/json',\n },\n })\n }\n\n const outputData: string[] = []\n let isFirstBatch = true\n\n while (result.hasNextPage) {\n findArgs.page += 1\n result = await payload.find(findArgs)\n\n if (isCSV) {\n const csvInput = result.docs.map((doc) => flattenObject({ doc, fields }))\n outputData.push(stringify(csvInput, { header: isFirstBatch }))\n isFirstBatch = false\n } else {\n const jsonInput = result.docs.map((doc) => JSON.stringify(doc))\n outputData.push(jsonInput.join(',\\n'))\n }\n }\n\n const buffer = Buffer.from(format === 'json' ? `[${outputData.join(',')}]` : outputData.join(''))\n\n if (!id) {\n req.file = {\n name,\n data: buffer,\n mimetype: isCSV ? 'text/csv' : 'application/json',\n size: buffer.length,\n }\n } else {\n await req.payload.update({\n id,\n collection: exportsCollection,\n data: {},\n file: {\n name,\n data: buffer,\n mimetype: isCSV ? 'text/csv' : 'application/json',\n size: buffer.length,\n },\n user,\n })\n }\n}\n"],"names":["stringify","APIError","Readable","flattenObject","getFilename","getSelect","createExport","args","download","input","id","name","nameArg","collectionSlug","drafts","exportsCollection","fields","format","locale","localeInput","sort","user","where","req","localeArg","payload","collectionConfig","config","collections","find","slug","isCSV","findArgs","collection","depth","draft","limit","overrideAccess","page","select","Array","isArray","length","undefined","result","hasNextPage","encoder","TextEncoder","stream","read","isFirstBatch","docs","csvInput","map","doc","csvString","header","push","encode","Response","headers","outputData","jsonInput","JSON","join","buffer","Buffer","from","file","data","mimetype","size","update"],"mappings":"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"}
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Document } from 'payload';
|
|
2
|
+
type Args = {
|
|
3
|
+
doc: Document;
|
|
4
|
+
fields?: string[];
|
|
5
|
+
prefix?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const flattenObject: ({ doc, fields, prefix }: Args) => Record<string, unknown>;
|
|
8
|
+
export {};
|
|
2
9
|
//# sourceMappingURL=flattenObject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenObject.d.ts","sourceRoot":"","sources":["../../src/export/flattenObject.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"flattenObject.d.ts","sourceRoot":"","sources":["../../src/export/flattenObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,IAAI,GAAG;IACV,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,aAAa,4BAA6B,IAAI,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAoDnF,CAAA"}
|
|
@@ -1,21 +1,46 @@
|
|
|
1
|
-
export const flattenObject = (
|
|
1
|
+
export const flattenObject = ({ doc, fields, prefix })=>{
|
|
2
2
|
const result = {};
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
3
|
+
const flatten = (doc, prefix)=>{
|
|
4
|
+
Object.entries(doc).forEach(([key, value])=>{
|
|
5
|
+
const newKey = prefix ? `${prefix}_${key}` : key;
|
|
6
|
+
if (Array.isArray(value)) {
|
|
7
|
+
value.forEach((item, index)=>{
|
|
8
|
+
if (typeof item === 'object' && item !== null) {
|
|
9
|
+
flatten(item, `${newKey}_${index}`);
|
|
10
|
+
} else {
|
|
11
|
+
result[`${newKey}_${index}`] = item;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
15
|
+
flatten(value, newKey);
|
|
16
|
+
} else {
|
|
17
|
+
result[newKey] = value;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
flatten(doc, prefix);
|
|
22
|
+
if (fields) {
|
|
23
|
+
const orderedResult = {};
|
|
24
|
+
const fieldToRegex = (field)=>{
|
|
25
|
+
const parts = field.split('.').map((part)=>`${part}(?:_\\d+)?`);
|
|
26
|
+
const pattern = `^${parts.join('_')}`;
|
|
27
|
+
return new RegExp(pattern);
|
|
28
|
+
};
|
|
29
|
+
fields.forEach((field)=>{
|
|
30
|
+
if (result[field.replace(/\./g, '_')]) {
|
|
31
|
+
const sanitizedField = field.replace(/\./g, '_');
|
|
32
|
+
orderedResult[sanitizedField] = result[sanitizedField];
|
|
33
|
+
} else {
|
|
34
|
+
const regex = fieldToRegex(field);
|
|
35
|
+
Object.keys(result).forEach((key)=>{
|
|
36
|
+
if (regex.test(key)) {
|
|
37
|
+
orderedResult[key] = result[key];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return orderedResult;
|
|
43
|
+
}
|
|
19
44
|
return result;
|
|
20
45
|
};
|
|
21
46
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/export/flattenObject.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/export/flattenObject.ts"],"sourcesContent":["import type { Document } from 'payload'\n\ntype Args = {\n doc: Document\n fields?: string[]\n prefix?: string\n}\n\nexport const flattenObject = ({ doc, fields, prefix }: Args): Record<string, unknown> => {\n const result: Record<string, unknown> = {}\n\n const flatten = (doc: Document, prefix?: string) => {\n Object.entries(doc).forEach(([key, value]) => {\n const newKey = prefix ? `${prefix}_${key}` : key\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n if (typeof item === 'object' && item !== null) {\n flatten(item, `${newKey}_${index}`)\n } else {\n result[`${newKey}_${index}`] = item\n }\n })\n } else if (typeof value === 'object' && value !== null) {\n flatten(value, newKey)\n } else {\n result[newKey] = value\n }\n })\n }\n\n flatten(doc, prefix)\n\n if (fields) {\n const orderedResult: Record<string, unknown> = {}\n\n const fieldToRegex = (field: string): RegExp => {\n const parts = field.split('.').map((part) => `${part}(?:_\\\\d+)?`)\n const pattern = `^${parts.join('_')}`\n return new RegExp(pattern)\n }\n\n fields.forEach((field) => {\n if (result[field.replace(/\\./g, '_')]) {\n const sanitizedField = field.replace(/\\./g, '_')\n orderedResult[sanitizedField] = result[sanitizedField]\n } else {\n const regex = fieldToRegex(field)\n Object.keys(result).forEach((key) => {\n if (regex.test(key)) {\n orderedResult[key] = result[key]\n }\n })\n }\n })\n\n return orderedResult\n }\n\n return result\n}\n"],"names":["flattenObject","doc","fields","prefix","result","flatten","Object","entries","forEach","key","value","newKey","Array","isArray","item","index","orderedResult","fieldToRegex","field","parts","split","map","part","pattern","join","RegExp","replace","sanitizedField","regex","keys","test"],"mappings":"AAQA,OAAO,MAAMA,gBAAgB,CAAC,EAAEC,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAQ;IACzD,MAAMC,SAAkC,CAAC;IAEzC,MAAMC,UAAU,CAACJ,KAAeE;QAC9BG,OAAOC,OAAO,CAACN,KAAKO,OAAO,CAAC,CAAC,CAACC,KAAKC,MAAM;YACvC,MAAMC,SAASR,SAAS,GAAGA,OAAO,CAAC,EAAEM,KAAK,GAAGA;YAE7C,IAAIG,MAAMC,OAAO,CAACH,QAAQ;gBACxBA,MAAMF,OAAO,CAAC,CAACM,MAAMC;oBACnB,IAAI,OAAOD,SAAS,YAAYA,SAAS,MAAM;wBAC7CT,QAAQS,MAAM,GAAGH,OAAO,CAAC,EAAEI,OAAO;oBACpC,OAAO;wBACLX,MAAM,CAAC,GAAGO,OAAO,CAAC,EAAEI,OAAO,CAAC,GAAGD;oBACjC;gBACF;YACF,OAAO,IAAI,OAAOJ,UAAU,YAAYA,UAAU,MAAM;gBACtDL,QAAQK,OAAOC;YACjB,OAAO;gBACLP,MAAM,CAACO,OAAO,GAAGD;YACnB;QACF;IACF;IAEAL,QAAQJ,KAAKE;IAEb,IAAID,QAAQ;QACV,MAAMc,gBAAyC,CAAC;QAEhD,MAAMC,eAAe,CAACC;YACpB,MAAMC,QAAQD,MAAME,KAAK,CAAC,KAAKC,GAAG,CAAC,CAACC,OAAS,GAAGA,KAAK,UAAU,CAAC;YAChE,MAAMC,UAAU,CAAC,CAAC,EAAEJ,MAAMK,IAAI,CAAC,MAAM;YACrC,OAAO,IAAIC,OAAOF;QACpB;QAEArB,OAAOM,OAAO,CAAC,CAACU;YACd,IAAId,MAAM,CAACc,MAAMQ,OAAO,CAAC,OAAO,KAAK,EAAE;gBACrC,MAAMC,iBAAiBT,MAAMQ,OAAO,CAAC,OAAO;gBAC5CV,aAAa,CAACW,eAAe,GAAGvB,MAAM,CAACuB,eAAe;YACxD,OAAO;gBACL,MAAMC,QAAQX,aAAaC;gBAC3BZ,OAAOuB,IAAI,CAACzB,QAAQI,OAAO,CAAC,CAACC;oBAC3B,IAAImB,MAAME,IAAI,CAACrB,MAAM;wBACnBO,aAAa,CAACP,IAAI,GAAGL,MAAM,CAACK,IAAI;oBAClC;gBACF;YACF;QACF;QAEA,OAAOO;IACT;IAEA,OAAOZ;AACT,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-import-export",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.37.0-internal.f2e6c68",
|
|
4
4
|
"description": "Import-Export plugin for Payload",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -54,17 +54,17 @@
|
|
|
54
54
|
"csv-parse": "^5.6.0",
|
|
55
55
|
"csv-stringify": "^6.5.2",
|
|
56
56
|
"qs-esm": "7.0.2",
|
|
57
|
-
"@payloadcms/
|
|
58
|
-
"@payloadcms/
|
|
57
|
+
"@payloadcms/ui": "3.37.0-internal.f2e6c68",
|
|
58
|
+
"@payloadcms/translations": "3.37.0-internal.f2e6c68"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"payload": "3.36.0",
|
|
62
61
|
"@payloadcms/eslint-config": "3.28.0",
|
|
63
|
-
"@payloadcms/ui": "3.
|
|
62
|
+
"@payloadcms/ui": "3.37.0-internal.f2e6c68",
|
|
63
|
+
"payload": "3.37.0-internal.f2e6c68"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"
|
|
67
|
-
"
|
|
66
|
+
"payload": "3.37.0-internal.f2e6c68",
|
|
67
|
+
"@payloadcms/ui": "3.37.0-internal.f2e6c68"
|
|
68
68
|
},
|
|
69
69
|
"homepage:": "https://payloadcms.com",
|
|
70
70
|
"scripts": {
|