@payloadcms/db-mongodb 3.2.2-canary.b072173 → 3.2.2-canary.d2399ed

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 (127) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +19 -21
  3. package/dist/count.js.map +1 -1
  4. package/dist/countGlobalVersions.d.ts.map +1 -1
  5. package/dist/countGlobalVersions.js +19 -21
  6. package/dist/countGlobalVersions.js.map +1 -1
  7. package/dist/countVersions.d.ts.map +1 -1
  8. package/dist/countVersions.js +19 -21
  9. package/dist/countVersions.js.map +1 -1
  10. package/dist/create.d.ts.map +1 -1
  11. package/dist/create.js +22 -22
  12. package/dist/create.js.map +1 -1
  13. package/dist/createGlobal.d.ts.map +1 -1
  14. package/dist/createGlobal.js +21 -19
  15. package/dist/createGlobal.js.map +1 -1
  16. package/dist/createGlobalVersion.d.ts.map +1 -1
  17. package/dist/createGlobalVersion.js +35 -30
  18. package/dist/createGlobalVersion.js.map +1 -1
  19. package/dist/createVersion.d.ts.map +1 -1
  20. package/dist/createVersion.js +35 -30
  21. package/dist/createVersion.js.map +1 -1
  22. package/dist/deleteMany.d.ts.map +1 -1
  23. package/dist/deleteMany.js +6 -6
  24. package/dist/deleteMany.js.map +1 -1
  25. package/dist/deleteOne.d.ts.map +1 -1
  26. package/dist/deleteOne.js +17 -13
  27. package/dist/deleteOne.js.map +1 -1
  28. package/dist/deleteVersions.d.ts.map +1 -1
  29. package/dist/deleteVersions.js +6 -6
  30. package/dist/deleteVersions.js.map +1 -1
  31. package/dist/find.d.ts.map +1 -1
  32. package/dist/find.js +41 -74
  33. package/dist/find.js.map +1 -1
  34. package/dist/findGlobal.d.ts.map +1 -1
  35. package/dist/findGlobal.js +19 -18
  36. package/dist/findGlobal.js.map +1 -1
  37. package/dist/findGlobalVersions.d.ts.map +1 -1
  38. package/dist/findGlobalVersions.js +33 -62
  39. package/dist/findGlobalVersions.js.map +1 -1
  40. package/dist/findOne.d.ts.map +1 -1
  41. package/dist/findOne.js +32 -19
  42. package/dist/findOne.js.map +1 -1
  43. package/dist/findVersions.d.ts.map +1 -1
  44. package/dist/findVersions.js +34 -62
  45. package/dist/findVersions.js.map +1 -1
  46. package/dist/{withSession.d.ts → getSession.d.ts} +2 -4
  47. package/dist/getSession.d.ts.map +1 -0
  48. package/dist/{withSession.js → getSession.js} +3 -5
  49. package/dist/getSession.js.map +1 -0
  50. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
  51. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +20 -16
  52. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
  53. package/dist/predefinedMigrations/migrateVersionsV1_V2.js +2 -2
  54. package/dist/predefinedMigrations/migrateVersionsV1_V2.js.map +1 -1
  55. package/dist/queries/buildAndOrConditions.d.ts +3 -1
  56. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  57. package/dist/queries/buildAndOrConditions.js +2 -1
  58. package/dist/queries/buildAndOrConditions.js.map +1 -1
  59. package/dist/queries/buildQuery.d.ts +2 -0
  60. package/dist/queries/buildQuery.d.ts.map +1 -1
  61. package/dist/queries/buildQuery.js +2 -6
  62. package/dist/queries/buildQuery.js.map +1 -1
  63. package/dist/queries/buildSearchParams.d.ts +3 -1
  64. package/dist/queries/buildSearchParams.d.ts.map +1 -1
  65. package/dist/queries/buildSearchParams.js +14 -10
  66. package/dist/queries/buildSearchParams.js.map +1 -1
  67. package/dist/queries/buildSortParam.d.ts +1 -7
  68. package/dist/queries/buildSortParam.d.ts.map +1 -1
  69. package/dist/queries/buildSortParam.js +2 -2
  70. package/dist/queries/buildSortParam.js.map +1 -1
  71. package/dist/queries/getLocalizedSortProperty.js +2 -2
  72. package/dist/queries/getLocalizedSortProperty.js.map +1 -1
  73. package/dist/queries/parseParams.d.ts +3 -1
  74. package/dist/queries/parseParams.d.ts.map +1 -1
  75. package/dist/queries/parseParams.js +2 -1
  76. package/dist/queries/parseParams.js.map +1 -1
  77. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  78. package/dist/queries/sanitizeQueryValue.js +16 -0
  79. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  80. package/dist/queryDrafts.d.ts.map +1 -1
  81. package/dist/queryDrafts.js +41 -65
  82. package/dist/queryDrafts.js.map +1 -1
  83. package/dist/updateGlobal.d.ts.map +1 -1
  84. package/dist/updateGlobal.js +25 -23
  85. package/dist/updateGlobal.js.map +1 -1
  86. package/dist/updateGlobalVersion.d.ts.map +1 -1
  87. package/dist/updateGlobalVersion.js +28 -27
  88. package/dist/updateGlobalVersion.js.map +1 -1
  89. package/dist/updateOne.d.ts.map +1 -1
  90. package/dist/updateOne.js +28 -24
  91. package/dist/updateOne.js.map +1 -1
  92. package/dist/updateVersion.d.ts.map +1 -1
  93. package/dist/updateVersion.js +28 -26
  94. package/dist/updateVersion.js.map +1 -1
  95. package/dist/utilities/buildJoinAggregation.d.ts +4 -4
  96. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  97. package/dist/utilities/buildJoinAggregation.js +7 -28
  98. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  99. package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -1
  100. package/dist/utilities/buildProjectionFromSelect.js +18 -1
  101. package/dist/utilities/buildProjectionFromSelect.js.map +1 -1
  102. package/dist/utilities/findMany.d.ts +20 -0
  103. package/dist/utilities/findMany.d.ts.map +1 -0
  104. package/dist/utilities/findMany.js +84 -0
  105. package/dist/utilities/findMany.js.map +1 -0
  106. package/dist/utilities/getHasNearConstraint.d.ts +3 -0
  107. package/dist/utilities/getHasNearConstraint.d.ts.map +1 -0
  108. package/dist/utilities/getHasNearConstraint.js +26 -0
  109. package/dist/utilities/getHasNearConstraint.js.map +1 -0
  110. package/dist/utilities/transform.d.ts +17 -0
  111. package/dist/utilities/transform.d.ts.map +1 -0
  112. package/dist/utilities/transform.js +250 -0
  113. package/dist/utilities/transform.js.map +1 -0
  114. package/dist/utilities/{sanitizeRelationshipIDs.spec.js → transform.spec.js} +23 -7
  115. package/dist/utilities/transform.spec.js.map +1 -0
  116. package/package.json +3 -3
  117. package/dist/utilities/sanitizeInternalFields.d.ts +0 -2
  118. package/dist/utilities/sanitizeInternalFields.d.ts.map +0 -1
  119. package/dist/utilities/sanitizeInternalFields.js +0 -20
  120. package/dist/utilities/sanitizeInternalFields.js.map +0 -1
  121. package/dist/utilities/sanitizeRelationshipIDs.d.ts +0 -9
  122. package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +0 -1
  123. package/dist/utilities/sanitizeRelationshipIDs.js +0 -125
  124. package/dist/utilities/sanitizeRelationshipIDs.js.map +0 -1
  125. package/dist/utilities/sanitizeRelationshipIDs.spec.js.map +0 -1
  126. package/dist/withSession.d.ts.map +0 -1
  127. package/dist/withSession.js.map +0 -1
@@ -1,21 +1,14 @@
1
- import { buildVersionGlobalFields, flattenWhereToOperators } from 'payload';
1
+ import { buildVersionGlobalFields } from 'payload';
2
+ import { getSession } from './getSession.js';
2
3
  import { buildSortParam } from './queries/buildSortParam.js';
3
4
  import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
4
- import { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js';
5
- import { withSession } from './withSession.js';
5
+ import { findMany } from './utilities/findMany.js';
6
+ import { getHasNearConstraint } from './utilities/getHasNearConstraint.js';
7
+ import { transform } from './utilities/transform.js';
6
8
  export const findGlobalVersions = async function findGlobalVersions({ global, limit, locale, page, pagination, req = {}, select, skip, sort: sortArg, where }) {
7
9
  const Model = this.versions[global];
8
10
  const versionFields = buildVersionGlobalFields(this.payload.config, this.payload.globals.config.find(({ slug })=>slug === global), true);
9
- const options = {
10
- ...await withSession(this, req),
11
- limit,
12
- skip
13
- };
14
- let hasNearConstraint = false;
15
- if (where) {
16
- const constraints = flattenWhereToOperators(where);
17
- hasNearConstraint = constraints.some((prop)=>Object.keys(prop).some((key)=>key === 'near'));
18
- }
11
+ const hasNearConstraint = getHasNearConstraint(where);
19
12
  let sort;
20
13
  if (!hasNearConstraint) {
21
14
  sort = buildSortParam({
@@ -26,68 +19,46 @@ export const findGlobalVersions = async function findGlobalVersions({ global, li
26
19
  timestamps: true
27
20
  });
28
21
  }
22
+ const session = await getSession(this, req);
29
23
  const query = await Model.buildQuery({
30
24
  globalSlug: global,
31
25
  locale,
32
26
  payload: this.payload,
27
+ session,
33
28
  where
34
29
  });
35
30
  // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.
36
31
  const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0;
37
- const paginationOptions = {
38
- lean: true,
39
- leanWithId: true,
32
+ const projection = buildProjectionFromSelect({
33
+ adapter: this,
34
+ fields: versionFields,
35
+ select
36
+ });
37
+ const collation = this.collation ? {
38
+ locale: locale && locale !== 'all' && locale !== '*' ? locale : 'en',
39
+ ...this.collation
40
+ } : undefined;
41
+ const result = await findMany({
42
+ adapter: this,
43
+ collation,
44
+ collection: Model.collection,
40
45
  limit,
41
- options,
42
46
  page,
43
47
  pagination,
44
- projection: buildProjectionFromSelect({
45
- adapter: this,
46
- fields: versionFields,
47
- select
48
- }),
48
+ projection,
49
+ query,
50
+ session,
51
+ skip,
49
52
  sort,
50
53
  useEstimatedCount
51
- };
52
- if (this.collation) {
53
- const defaultLocale = 'en';
54
- paginationOptions.collation = {
55
- locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,
56
- ...this.collation
57
- };
58
- }
59
- if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {
60
- // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding
61
- // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,
62
- // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses
63
- // the correct indexed field
64
- paginationOptions.useCustomCountFn = ()=>{
65
- return Promise.resolve(Model.countDocuments(query, {
66
- ...options,
67
- hint: {
68
- _id: 1
69
- }
70
- }));
71
- };
72
- }
73
- if (limit >= 0) {
74
- paginationOptions.limit = limit;
75
- // limit must also be set here, it's ignored when pagination is false
76
- paginationOptions.options.limit = limit;
77
- // Disable pagination if limit is 0
78
- if (limit === 0) {
79
- paginationOptions.pagination = false;
80
- }
81
- }
82
- const result = await Model.paginate(query, paginationOptions);
83
- const docs = JSON.parse(JSON.stringify(result.docs));
84
- return {
85
- ...result,
86
- docs: docs.map((doc)=>{
87
- doc.id = doc._id;
88
- return sanitizeInternalFields(doc);
89
- })
90
- };
54
+ });
55
+ transform({
56
+ adapter: this,
57
+ data: result.docs,
58
+ fields: versionFields,
59
+ operation: 'read'
60
+ });
61
+ return result;
91
62
  };
92
63
 
93
64
  //# sourceMappingURL=findGlobalVersions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findGlobalVersions.ts"],"sourcesContent":["import type { PaginateOptions } from 'mongoose'\nimport type { FindGlobalVersions, PayloadRequest } from 'payload'\n\nimport { buildVersionGlobalFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js'\nimport { withSession } from './withSession.js'\n\nexport const findGlobalVersions: FindGlobalVersions = async function findGlobalVersions(\n this: MongooseAdapter,\n {\n global,\n limit,\n locale,\n page,\n pagination,\n req = {} as PayloadRequest,\n select,\n skip,\n sort: sortArg,\n where,\n },\n) {\n const Model = this.versions[global]\n const versionFields = buildVersionGlobalFields(\n this.payload.config,\n this.payload.globals.config.find(({ slug }) => slug === global),\n true,\n )\n const options = {\n ...(await withSession(this, req)),\n limit,\n skip,\n }\n\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n config: this.payload.config,\n fields: versionFields,\n locale,\n sort: sortArg || '-updatedAt',\n timestamps: true,\n })\n }\n\n const query = await Model.buildQuery({\n globalSlug: global,\n locale,\n payload: this.payload,\n where,\n })\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n limit,\n options,\n page,\n pagination,\n projection: buildProjectionFromSelect({ adapter: this, fields: versionFields, select }),\n sort,\n useEstimatedCount,\n }\n\n if (this.collation) {\n const defaultLocale = 'en'\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n ...options,\n hint: { _id: 1 },\n }),\n )\n }\n }\n\n if (limit >= 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n paginationOptions.options.limit = limit\n\n // Disable pagination if limit is 0\n if (limit === 0) {\n paginationOptions.pagination = false\n }\n }\n\n const result = await Model.paginate(query, paginationOptions)\n const docs = JSON.parse(JSON.stringify(result.docs))\n\n return {\n ...result,\n docs: docs.map((doc) => {\n doc.id = doc._id\n return sanitizeInternalFields(doc)\n }),\n }\n}\n"],"names":["buildVersionGlobalFields","flattenWhereToOperators","buildSortParam","buildProjectionFromSelect","sanitizeInternalFields","withSession","findGlobalVersions","global","limit","locale","page","pagination","req","select","skip","sort","sortArg","where","Model","versions","versionFields","payload","config","globals","find","slug","options","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","timestamps","query","buildQuery","globalSlug","useEstimatedCount","length","paginationOptions","lean","leanWithId","projection","adapter","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","paginate","docs","JSON","parse","stringify","map","doc","id"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/findGlobalVersions.ts"],"sourcesContent":["import type { CollationOptions } from 'mongodb'\nimport type { FindGlobalVersions, PayloadRequest } from 'payload'\n\nimport { buildVersionGlobalFields } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { getSession } from './getSession.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { findMany } from './utilities/findMany.js'\nimport { getHasNearConstraint } from './utilities/getHasNearConstraint.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findGlobalVersions: FindGlobalVersions = async function findGlobalVersions(\n this: MongooseAdapter,\n {\n global,\n limit,\n locale,\n page,\n pagination,\n req = {} as PayloadRequest,\n select,\n skip,\n sort: sortArg,\n where,\n },\n) {\n const Model = this.versions[global]\n const versionFields = buildVersionGlobalFields(\n this.payload.config,\n this.payload.globals.config.find(({ slug }) => slug === global),\n true,\n )\n\n const hasNearConstraint = getHasNearConstraint(where)\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n config: this.payload.config,\n fields: versionFields,\n locale,\n sort: sortArg || '-updatedAt',\n timestamps: true,\n })\n }\n\n const session = await getSession(this, req)\n\n const query = await Model.buildQuery({\n globalSlug: global,\n locale,\n payload: this.payload,\n session,\n where,\n })\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n\n const projection = buildProjectionFromSelect({ adapter: this, fields: versionFields, select })\n\n const collation: CollationOptions | undefined = this.collation\n ? {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : 'en',\n ...this.collation,\n }\n : undefined\n\n const result = await findMany({\n adapter: this,\n collation,\n collection: Model.collection,\n limit,\n page,\n pagination,\n projection,\n query,\n session,\n skip,\n sort,\n useEstimatedCount,\n })\n\n transform({\n adapter: this,\n data: result.docs,\n fields: versionFields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildVersionGlobalFields","getSession","buildSortParam","buildProjectionFromSelect","findMany","getHasNearConstraint","transform","findGlobalVersions","global","limit","locale","page","pagination","req","select","skip","sort","sortArg","where","Model","versions","versionFields","payload","config","globals","find","slug","hasNearConstraint","fields","timestamps","session","query","buildQuery","globalSlug","useEstimatedCount","Object","keys","length","projection","adapter","collation","undefined","result","collection","data","docs","operation"],"mappings":"AAGA,SAASA,wBAAwB,QAAQ,UAAS;AAIlD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,QAAQ,QAAQ,0BAAyB;AAClD,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,qBAAyC,eAAeA,mBAEnE,EACEC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJC,UAAU,EACVC,MAAM,CAAC,CAAmB,EAC1BC,MAAM,EACNC,IAAI,EACJC,MAAMC,OAAO,EACbC,KAAK,EACN;IAED,MAAMC,QAAQ,IAAI,CAACC,QAAQ,CAACZ,OAAO;IACnC,MAAMa,gBAAgBrB,yBACpB,IAAI,CAACsB,OAAO,CAACC,MAAM,EACnB,IAAI,CAACD,OAAO,CAACE,OAAO,CAACD,MAAM,CAACE,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASlB,SACxD;IAGF,MAAMmB,oBAAoBtB,qBAAqBa;IAE/C,IAAIF;IACJ,IAAI,CAACW,mBAAmB;QACtBX,OAAOd,eAAe;YACpBqB,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM;YAC3BK,QAAQP;YACRX;YACAM,MAAMC,WAAW;YACjBY,YAAY;QACd;IACF;IAEA,MAAMC,UAAU,MAAM7B,WAAW,IAAI,EAAEY;IAEvC,MAAMkB,QAAQ,MAAMZ,MAAMa,UAAU,CAAC;QACnCC,YAAYzB;QACZE;QACAY,SAAS,IAAI,CAACA,OAAO;QACrBQ;QACAZ;IACF;IAEA,4HAA4H;IAC5H,MAAMgB,oBAAoBP,qBAAqB,CAACI,SAASI,OAAOC,IAAI,CAACL,OAAOM,MAAM,KAAK;IAEvF,MAAMC,aAAanC,0BAA0B;QAAEoC,SAAS,IAAI;QAAEX,QAAQP;QAAeP;IAAO;IAE5F,MAAM0B,YAA0C,IAAI,CAACA,SAAS,GAC1D;QACE9B,QAAQA,UAAUA,WAAW,SAASA,WAAW,MAAMA,SAAS;QAChE,GAAG,IAAI,CAAC8B,SAAS;IACnB,IACAC;IAEJ,MAAMC,SAAS,MAAMtC,SAAS;QAC5BmC,SAAS,IAAI;QACbC;QACAG,YAAYxB,MAAMwB,UAAU;QAC5BlC;QACAE;QACAC;QACA0B;QACAP;QACAD;QACAf;QACAC;QACAkB;IACF;IAEA5B,UAAU;QACRiC,SAAS,IAAI;QACbK,MAAMF,OAAOG,IAAI;QACjBjB,QAAQP;QACRyB,WAAW;IACb;IAEA,OAAOJ;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,OAAO,EAAkB,MAAM,SAAS,CAAA;AAShE,eAAO,MAAM,OAAO,EAAE,OAqDrB,CAAA"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,SAAS,CAAA;AAStD,eAAO,MAAM,OAAO,EAAE,OAkErB,CAAA"}
package/dist/findOne.js CHANGED
@@ -1,49 +1,62 @@
1
+ import { getSession } from './getSession.js';
1
2
  import { buildJoinAggregation } from './utilities/buildJoinAggregation.js';
2
3
  import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
3
- import { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js';
4
- import { withSession } from './withSession.js';
4
+ import { transform } from './utilities/transform.js';
5
5
  export const findOne = async function findOne({ collection, joins, locale, req = {}, select, where }) {
6
6
  const Model = this.collections[collection];
7
7
  const collectionConfig = this.payload.collections[collection].config;
8
- const options = {
9
- ...await withSession(this, req),
10
- lean: true
11
- };
8
+ const session = await getSession(this, req);
12
9
  const query = await Model.buildQuery({
13
10
  locale,
14
11
  payload: this.payload,
12
+ session,
15
13
  where
16
14
  });
15
+ const fields = collectionConfig.flattenedFields;
17
16
  const projection = buildProjectionFromSelect({
18
17
  adapter: this,
19
- fields: collectionConfig.flattenedFields,
18
+ fields,
20
19
  select
21
20
  });
22
- const aggregate = await buildJoinAggregation({
21
+ const joinAggregation = await buildJoinAggregation({
23
22
  adapter: this,
24
23
  collection,
25
24
  collectionConfig,
26
25
  joins,
27
- limit: 1,
28
26
  locale,
29
27
  projection,
30
- query
28
+ session
31
29
  });
32
30
  let doc;
33
- if (aggregate) {
34
- [doc] = await Model.aggregate(aggregate, options);
31
+ if (joinAggregation) {
32
+ const cursor = Model.collection.aggregate([
33
+ {
34
+ $match: query
35
+ }
36
+ ], {
37
+ session
38
+ });
39
+ cursor.limit(1);
40
+ for (const stage of joinAggregation){
41
+ cursor.addStage(stage);
42
+ }
43
+ [doc] = await cursor.toArray();
35
44
  } else {
36
- options.projection = projection;
37
- doc = await Model.findOne(query, {}, options);
45
+ doc = await Model.collection.findOne(query, {
46
+ projection,
47
+ session
48
+ });
38
49
  }
39
50
  if (!doc) {
40
51
  return null;
41
52
  }
42
- let result = JSON.parse(JSON.stringify(doc));
43
- // custom id type reset
44
- result.id = result._id;
45
- result = sanitizeInternalFields(result);
46
- return result;
53
+ transform({
54
+ adapter: this,
55
+ data: doc,
56
+ fields,
57
+ operation: 'read'
58
+ });
59
+ return doc;
47
60
  };
48
61
 
49
62
  //# sourceMappingURL=findOne.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { MongooseQueryOptions, QueryOptions } from 'mongoose'\nimport type { Document, FindOne, PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js'\nimport { withSession } from './withSession.js'\n\nexport const findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { collection, joins, locale, req = {} as PayloadRequest, select, where },\n) {\n const Model = this.collections[collection]\n const collectionConfig = this.payload.collections[collection].config\n const options: MongooseQueryOptions = {\n ...(await withSession(this, req)),\n lean: true,\n }\n\n const query = await Model.buildQuery({\n locale,\n payload: this.payload,\n where,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection,\n collectionConfig,\n joins,\n limit: 1,\n locale,\n projection,\n query,\n })\n\n let doc\n if (aggregate) {\n ;[doc] = await Model.aggregate(aggregate, options)\n } else {\n ;(options as Record<string, unknown>).projection = projection\n doc = await Model.findOne(query, {}, options)\n }\n\n if (!doc) {\n return null\n }\n\n let result: Document = JSON.parse(JSON.stringify(doc))\n\n // custom id type reset\n result.id = result._id\n result = sanitizeInternalFields(result)\n\n return result\n}\n"],"names":["buildJoinAggregation","buildProjectionFromSelect","sanitizeInternalFields","withSession","findOne","collection","joins","locale","req","select","where","Model","collections","collectionConfig","payload","config","options","lean","query","buildQuery","projection","adapter","fields","flattenedFields","aggregate","limit","doc","result","JSON","parse","stringify","id","_id"],"mappings":"AAKA,SAASA,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,sBAAsB,QAAQ,wCAAuC;AAC9E,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,UAAU,EAAEC,KAAK,EAAEC,MAAM,EAAEC,MAAM,CAAC,CAAmB,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAExE,MAAMC,QAAQ,IAAI,CAACC,WAAW,CAACP,WAAW;IAC1C,MAAMQ,mBAAmB,IAAI,CAACC,OAAO,CAACF,WAAW,CAACP,WAAW,CAACU,MAAM;IACpE,MAAMC,UAAgC;QACpC,GAAI,MAAMb,YAAY,IAAI,EAAEK,IAAI;QAChCS,MAAM;IACR;IAEA,MAAMC,QAAQ,MAAMP,MAAMQ,UAAU,CAAC;QACnCZ;QACAO,SAAS,IAAI,CAACA,OAAO;QACrBJ;IACF;IAEA,MAAMU,aAAanB,0BAA0B;QAC3CoB,SAAS,IAAI;QACbC,QAAQT,iBAAiBU,eAAe;QACxCd;IACF;IAEA,MAAMe,YAAY,MAAMxB,qBAAqB;QAC3CqB,SAAS,IAAI;QACbhB;QACAQ;QACAP;QACAmB,OAAO;QACPlB;QACAa;QACAF;IACF;IAEA,IAAIQ;IACJ,IAAIF,WAAW;QACZ,CAACE,IAAI,GAAG,MAAMf,MAAMa,SAAS,CAACA,WAAWR;IAC5C,OAAO;QACHA,QAAoCI,UAAU,GAAGA;QACnDM,MAAM,MAAMf,MAAMP,OAAO,CAACc,OAAO,CAAC,GAAGF;IACvC;IAEA,IAAI,CAACU,KAAK;QACR,OAAO;IACT;IAEA,IAAIC,SAAmBC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACJ;IAEjD,uBAAuB;IACvBC,OAAOI,EAAE,GAAGJ,OAAOK,GAAG;IACtBL,SAASzB,uBAAuByB;IAEhC,OAAOA;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { FindOne, PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { getSession } from './getSession.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { collection, joins, locale, req = {} as PayloadRequest, select, where },\n) {\n const Model = this.collections[collection]\n const collectionConfig = this.payload.collections[collection].config\n\n const session = await getSession(this, req)\n\n const query = await Model.buildQuery({\n locale,\n payload: this.payload,\n session,\n where,\n })\n\n const fields = collectionConfig.flattenedFields\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields,\n select,\n })\n\n const joinAggregation = await buildJoinAggregation({\n adapter: this,\n collection,\n collectionConfig,\n joins,\n locale,\n projection,\n session,\n })\n\n let doc\n if (joinAggregation) {\n const cursor = Model.collection.aggregate(\n [\n {\n $match: query,\n },\n ],\n { session },\n )\n cursor.limit(1)\n for (const stage of joinAggregation) {\n cursor.addStage(stage)\n }\n\n ;[doc] = await cursor.toArray()\n } else {\n doc = await Model.collection.findOne(query, { projection, session })\n }\n\n if (!doc) {\n return null\n }\n\n transform({\n adapter: this,\n data: doc,\n fields,\n operation: 'read',\n })\n\n return doc\n}\n"],"names":["getSession","buildJoinAggregation","buildProjectionFromSelect","transform","findOne","collection","joins","locale","req","select","where","Model","collections","collectionConfig","payload","config","session","query","buildQuery","fields","flattenedFields","projection","adapter","joinAggregation","doc","cursor","aggregate","$match","limit","stage","addStage","toArray","data","operation"],"mappings":"AAIA,SAASA,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,UAAU,EAAEC,KAAK,EAAEC,MAAM,EAAEC,MAAM,CAAC,CAAmB,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAExE,MAAMC,QAAQ,IAAI,CAACC,WAAW,CAACP,WAAW;IAC1C,MAAMQ,mBAAmB,IAAI,CAACC,OAAO,CAACF,WAAW,CAACP,WAAW,CAACU,MAAM;IAEpE,MAAMC,UAAU,MAAMhB,WAAW,IAAI,EAAEQ;IAEvC,MAAMS,QAAQ,MAAMN,MAAMO,UAAU,CAAC;QACnCX;QACAO,SAAS,IAAI,CAACA,OAAO;QACrBE;QACAN;IACF;IAEA,MAAMS,SAASN,iBAAiBO,eAAe;IAE/C,MAAMC,aAAanB,0BAA0B;QAC3CoB,SAAS,IAAI;QACbH;QACAV;IACF;IAEA,MAAMc,kBAAkB,MAAMtB,qBAAqB;QACjDqB,SAAS,IAAI;QACbjB;QACAQ;QACAP;QACAC;QACAc;QACAL;IACF;IAEA,IAAIQ;IACJ,IAAID,iBAAiB;QACnB,MAAME,SAASd,MAAMN,UAAU,CAACqB,SAAS,CACvC;YACE;gBACEC,QAAQV;YACV;SACD,EACD;YAAED;QAAQ;QAEZS,OAAOG,KAAK,CAAC;QACb,KAAK,MAAMC,SAASN,gBAAiB;YACnCE,OAAOK,QAAQ,CAACD;QAClB;QAEC,CAACL,IAAI,GAAG,MAAMC,OAAOM,OAAO;IAC/B,OAAO;QACLP,MAAM,MAAMb,MAAMN,UAAU,CAACD,OAAO,CAACa,OAAO;YAAEI;YAAYL;QAAQ;IACpE;IAEA,IAAI,CAACQ,KAAK;QACR,OAAO;IACT;IAEArB,UAAU;QACRmB,SAAS,IAAI;QACbU,MAAMR;QACNL;QACAc,WAAW;IACb;IAEA,OAAOT;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../src/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAA;AAW3D,eAAO,MAAM,YAAY,EAAE,YA6G1B,CAAA"}
1
+ {"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../src/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAA;AAa3D,eAAO,MAAM,YAAY,EAAE,YAgF1B,CAAA"}
@@ -1,21 +1,15 @@
1
- import { buildVersionCollectionFields, flattenWhereToOperators } from 'payload';
1
+ import { buildVersionCollectionFields } from 'payload';
2
+ import { getSession } from './getSession.js';
2
3
  import { buildSortParam } from './queries/buildSortParam.js';
3
4
  import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
4
- import { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js';
5
- import { withSession } from './withSession.js';
5
+ import { findMany } from './utilities/findMany.js';
6
+ import { getHasNearConstraint } from './utilities/getHasNearConstraint.js';
7
+ import { transform } from './utilities/transform.js';
6
8
  export const findVersions = async function findVersions({ collection, limit, locale, page, pagination, req = {}, select, skip, sort: sortArg, where }) {
7
9
  const Model = this.versions[collection];
8
10
  const collectionConfig = this.payload.collections[collection].config;
9
- const options = {
10
- ...await withSession(this, req),
11
- limit,
12
- skip
13
- };
14
- let hasNearConstraint = false;
15
- if (where) {
16
- const constraints = flattenWhereToOperators(where);
17
- hasNearConstraint = constraints.some((prop)=>Object.keys(prop).some((key)=>key === 'near'));
18
- }
11
+ const session = await getSession(this, req);
12
+ const hasNearConstraint = getHasNearConstraint(where);
19
13
  let sort;
20
14
  if (!hasNearConstraint) {
21
15
  sort = buildSortParam({
@@ -29,64 +23,42 @@ export const findVersions = async function findVersions({ collection, limit, loc
29
23
  const query = await Model.buildQuery({
30
24
  locale,
31
25
  payload: this.payload,
26
+ session,
32
27
  where
33
28
  });
29
+ const versionFields = buildVersionCollectionFields(this.payload.config, collectionConfig, true);
34
30
  // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.
35
31
  const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0;
36
- const paginationOptions = {
37
- lean: true,
38
- leanWithId: true,
32
+ const projection = buildProjectionFromSelect({
33
+ adapter: this,
34
+ fields: versionFields,
35
+ select
36
+ });
37
+ const collation = this.collation ? {
38
+ locale: locale && locale !== 'all' && locale !== '*' ? locale : 'en',
39
+ ...this.collation
40
+ } : undefined;
41
+ const result = await findMany({
42
+ adapter: this,
43
+ collation,
44
+ collection: Model.collection,
39
45
  limit,
40
- options,
41
46
  page,
42
47
  pagination,
43
- projection: buildProjectionFromSelect({
44
- adapter: this,
45
- fields: buildVersionCollectionFields(this.payload.config, collectionConfig, true),
46
- select
47
- }),
48
+ projection,
49
+ query,
50
+ session,
51
+ skip,
48
52
  sort,
49
53
  useEstimatedCount
50
- };
51
- if (this.collation) {
52
- const defaultLocale = 'en';
53
- paginationOptions.collation = {
54
- locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,
55
- ...this.collation
56
- };
57
- }
58
- if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {
59
- // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding
60
- // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,
61
- // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses
62
- // the correct indexed field
63
- paginationOptions.useCustomCountFn = ()=>{
64
- return Promise.resolve(Model.countDocuments(query, {
65
- ...options,
66
- hint: {
67
- _id: 1
68
- }
69
- }));
70
- };
71
- }
72
- if (limit >= 0) {
73
- paginationOptions.limit = limit;
74
- // limit must also be set here, it's ignored when pagination is false
75
- paginationOptions.options.limit = limit;
76
- // Disable pagination if limit is 0
77
- if (limit === 0) {
78
- paginationOptions.pagination = false;
79
- }
80
- }
81
- const result = await Model.paginate(query, paginationOptions);
82
- const docs = JSON.parse(JSON.stringify(result.docs));
83
- return {
84
- ...result,
85
- docs: docs.map((doc)=>{
86
- doc.id = doc._id;
87
- return sanitizeInternalFields(doc);
88
- })
89
- };
54
+ });
55
+ transform({
56
+ adapter: this,
57
+ data: result.docs,
58
+ fields: versionFields,
59
+ operation: 'read'
60
+ });
61
+ return result;
90
62
  };
91
63
 
92
64
  //# sourceMappingURL=findVersions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findVersions.ts"],"sourcesContent":["import type { PaginateOptions } from 'mongoose'\nimport type { FindVersions, PayloadRequest } from 'payload'\n\nimport { buildVersionCollectionFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js'\nimport { withSession } from './withSession.js'\n\nexport const findVersions: FindVersions = async function findVersions(\n this: MongooseAdapter,\n {\n collection,\n limit,\n locale,\n page,\n pagination,\n req = {} as PayloadRequest,\n select,\n skip,\n sort: sortArg,\n where,\n },\n) {\n const Model = this.versions[collection]\n const collectionConfig = this.payload.collections[collection].config\n const options = {\n ...(await withSession(this, req)),\n limit,\n skip,\n }\n\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || '-updatedAt',\n timestamps: true,\n })\n }\n\n const query = await Model.buildQuery({\n locale,\n payload: this.payload,\n where,\n })\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n limit,\n options,\n page,\n pagination,\n projection: buildProjectionFromSelect({\n adapter: this,\n fields: buildVersionCollectionFields(this.payload.config, collectionConfig, true),\n select,\n }),\n sort,\n useEstimatedCount,\n }\n\n if (this.collation) {\n const defaultLocale = 'en'\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n ...options,\n hint: { _id: 1 },\n }),\n )\n }\n }\n\n if (limit >= 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n paginationOptions.options.limit = limit\n\n // Disable pagination if limit is 0\n if (limit === 0) {\n paginationOptions.pagination = false\n }\n }\n\n const result = await Model.paginate(query, paginationOptions)\n const docs = JSON.parse(JSON.stringify(result.docs))\n\n return {\n ...result,\n docs: docs.map((doc) => {\n doc.id = doc._id\n return sanitizeInternalFields(doc)\n }),\n }\n}\n"],"names":["buildVersionCollectionFields","flattenWhereToOperators","buildSortParam","buildProjectionFromSelect","sanitizeInternalFields","withSession","findVersions","collection","limit","locale","page","pagination","req","select","skip","sort","sortArg","where","Model","versions","collectionConfig","payload","collections","config","options","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","flattenedFields","timestamps","query","buildQuery","useEstimatedCount","length","paginationOptions","lean","leanWithId","projection","adapter","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","paginate","docs","JSON","parse","stringify","map","doc","id"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/findVersions.ts"],"sourcesContent":["import type { CollationOptions } from 'mongodb'\nimport type { FindVersions, PayloadRequest } from 'payload'\n\nimport { buildVersionCollectionFields } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { getSession } from './getSession.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { findMany } from './utilities/findMany.js'\nimport { getHasNearConstraint } from './utilities/getHasNearConstraint.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findVersions: FindVersions = async function findVersions(\n this: MongooseAdapter,\n {\n collection,\n limit,\n locale,\n page,\n pagination,\n req = {} as PayloadRequest,\n select,\n skip,\n sort: sortArg,\n where,\n },\n) {\n const Model = this.versions[collection]\n const collectionConfig = this.payload.collections[collection].config\n\n const session = await getSession(this, req)\n\n const hasNearConstraint = getHasNearConstraint(where)\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || '-updatedAt',\n timestamps: true,\n })\n }\n\n const query = await Model.buildQuery({\n locale,\n payload: this.payload,\n session,\n where,\n })\n\n const versionFields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields: versionFields,\n select,\n })\n\n const collation: CollationOptions | undefined = this.collation\n ? {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : 'en',\n ...this.collation,\n }\n : undefined\n\n const result = await findMany({\n adapter: this,\n collation,\n collection: Model.collection,\n limit,\n page,\n pagination,\n projection,\n query,\n session,\n skip,\n sort,\n useEstimatedCount,\n })\n\n transform({\n adapter: this,\n data: result.docs,\n fields: versionFields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildVersionCollectionFields","getSession","buildSortParam","buildProjectionFromSelect","findMany","getHasNearConstraint","transform","findVersions","collection","limit","locale","page","pagination","req","select","skip","sort","sortArg","where","Model","versions","collectionConfig","payload","collections","config","session","hasNearConstraint","fields","flattenedFields","timestamps","query","buildQuery","versionFields","useEstimatedCount","Object","keys","length","projection","adapter","collation","undefined","result","data","docs","operation"],"mappings":"AAGA,SAASA,4BAA4B,QAAQ,UAAS;AAItD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,QAAQ,QAAQ,0BAAyB;AAClD,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,eAA6B,eAAeA,aAEvD,EACEC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJC,UAAU,EACVC,MAAM,CAAC,CAAmB,EAC1BC,MAAM,EACNC,IAAI,EACJC,MAAMC,OAAO,EACbC,KAAK,EACN;IAED,MAAMC,QAAQ,IAAI,CAACC,QAAQ,CAACZ,WAAW;IACvC,MAAMa,mBAAmB,IAAI,CAACC,OAAO,CAACC,WAAW,CAACf,WAAW,CAACgB,MAAM;IAEpE,MAAMC,UAAU,MAAMxB,WAAW,IAAI,EAAEY;IAEvC,MAAMa,oBAAoBrB,qBAAqBa;IAE/C,IAAIF;IACJ,IAAI,CAACU,mBAAmB;QACtBV,OAAOd,eAAe;YACpBsB,QAAQ,IAAI,CAACF,OAAO,CAACE,MAAM;YAC3BG,QAAQN,iBAAiBO,eAAe;YACxClB;YACAM,MAAMC,WAAW;YACjBY,YAAY;QACd;IACF;IAEA,MAAMC,QAAQ,MAAMX,MAAMY,UAAU,CAAC;QACnCrB;QACAY,SAAS,IAAI,CAACA,OAAO;QACrBG;QACAP;IACF;IAEA,MAAMc,gBAAgBhC,6BAA6B,IAAI,CAACsB,OAAO,CAACE,MAAM,EAAEH,kBAAkB;IAC1F,4HAA4H;IAC5H,MAAMY,oBAAoBP,qBAAqB,CAACI,SAASI,OAAOC,IAAI,CAACL,OAAOM,MAAM,KAAK;IAEvF,MAAMC,aAAalC,0BAA0B;QAC3CmC,SAAS,IAAI;QACbX,QAAQK;QACRlB;IACF;IAEA,MAAMyB,YAA0C,IAAI,CAACA,SAAS,GAC1D;QACE7B,QAAQA,UAAUA,WAAW,SAASA,WAAW,MAAMA,SAAS;QAChE,GAAG,IAAI,CAAC6B,SAAS;IACnB,IACAC;IAEJ,MAAMC,SAAS,MAAMrC,SAAS;QAC5BkC,SAAS,IAAI;QACbC;QACA/B,YAAYW,MAAMX,UAAU;QAC5BC;QACAE;QACAC;QACAyB;QACAP;QACAL;QACAV;QACAC;QACAiB;IACF;IAEA3B,UAAU;QACRgC,SAAS,IAAI;QACbI,MAAMD,OAAOE,IAAI;QACjBhB,QAAQK;QACRY,WAAW;IACb;IAEA,OAAOH;AACT,EAAC"}
@@ -5,7 +5,5 @@ import type { MongooseAdapter } from './index.js';
5
5
  * returns the session belonging to the transaction of the req.session if exists
6
6
  * @returns ClientSession
7
7
  */
8
- export declare function withSession(db: MongooseAdapter, req: PayloadRequest): Promise<{
9
- session: ClientSession;
10
- } | Record<string, never>>;
11
- //# sourceMappingURL=withSession.d.ts.map
8
+ export declare function getSession(db: MongooseAdapter, req: PayloadRequest): Promise<ClientSession | undefined>;
9
+ //# sourceMappingURL=getSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSession.d.ts","sourceRoot":"","sources":["../src/getSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,eAAe,EACnB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAUpC"}
@@ -1,16 +1,14 @@
1
1
  /**
2
2
  * returns the session belonging to the transaction of the req.session if exists
3
3
  * @returns ClientSession
4
- */ export async function withSession(db, req) {
4
+ */ export async function getSession(db, req) {
5
5
  let transactionID = req.transactionID;
6
6
  if (transactionID instanceof Promise) {
7
7
  transactionID = await req.transactionID;
8
8
  }
9
9
  if (req) {
10
- return db.sessions[transactionID] ? {
11
- session: db.sessions[transactionID]
12
- } : {};
10
+ return db.sessions[transactionID];
13
11
  }
14
12
  }
15
13
 
16
- //# sourceMappingURL=withSession.js.map
14
+ //# sourceMappingURL=getSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/getSession.ts"],"sourcesContent":["import type { ClientSession } from 'mongoose'\nimport type { PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\n/**\n * returns the session belonging to the transaction of the req.session if exists\n * @returns ClientSession\n */\nexport async function getSession(\n db: MongooseAdapter,\n req: PayloadRequest,\n): Promise<ClientSession | undefined> {\n let transactionID = req.transactionID\n\n if (transactionID instanceof Promise) {\n transactionID = await req.transactionID\n }\n\n if (req) {\n return db.sessions[transactionID]\n }\n}\n"],"names":["getSession","db","req","transactionID","Promise","sessions"],"mappings":"AAKA;;;CAGC,GACD,OAAO,eAAeA,WACpBC,EAAmB,EACnBC,GAAmB;IAEnB,IAAIC,gBAAgBD,IAAIC,aAAa;IAErC,IAAIA,yBAAyBC,SAAS;QACpCD,gBAAgB,MAAMD,IAAIC,aAAa;IACzC;IAEA,IAAID,KAAK;QACP,OAAOD,GAAGI,QAAQ,CAACF,cAAc;IACnC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrateRelationshipsV2_V3.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAS,cAAc,EAAmB,MAAM,SAAS,CAAA;AAmGrE,wBAAsB,yBAAyB,CAAC,EAC9C,SAAS,EACT,GAAG,GACJ,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EhB"}
1
+ {"version":3,"file":"migrateRelationshipsV2_V3.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,SAAS,CAAA;AAmGpE,wBAAsB,yBAAyB,CAAC,EAC9C,SAAS,EACT,GAAG,GACJ,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFhB"}
@@ -1,7 +1,7 @@
1
1
  import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload';
2
- import { sanitizeRelationshipIDs } from '../utilities/sanitizeRelationshipIDs.js';
3
- import { withSession } from '../withSession.js';
4
- const migrateModelWithBatching = async ({ batchSize, config, fields, Model, session })=>{
2
+ import { getSession } from '../getSession.js';
3
+ import { transform } from '../utilities/transform.js';
4
+ const migrateModelWithBatching = async ({ adapter, batchSize, fields, Model, session })=>{
5
5
  let hasNext = true;
6
6
  let skip = 0;
7
7
  while(hasNext){
@@ -19,10 +19,12 @@ const migrateModelWithBatching = async ({ batchSize, config, fields, Model, sess
19
19
  docs.pop();
20
20
  }
21
21
  for (const doc of docs){
22
- sanitizeRelationshipIDs({
23
- config,
22
+ transform({
23
+ adapter,
24
24
  data: doc,
25
- fields
25
+ fields,
26
+ operation: 'update',
27
+ validateRelationships: false
26
28
  });
27
29
  }
28
30
  await Model.collection.bulkWrite(docs.map((doc)=>({
@@ -77,13 +79,13 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
77
79
  const { payload } = req;
78
80
  const db = payload.db;
79
81
  const config = payload.config;
80
- const { session } = await withSession(db, req);
82
+ const session = await getSession(db, req);
81
83
  for (const collection of payload.config.collections.filter(hasRelationshipOrUploadField)){
82
84
  payload.logger.info(`Migrating collection "${collection.slug}"`);
83
85
  await migrateModelWithBatching({
86
+ adapter: db,
84
87
  batchSize,
85
- config,
86
- fields: collection.fields,
88
+ fields: collection.flattenedFields,
87
89
  Model: db.collections[collection.slug],
88
90
  session
89
91
  });
@@ -91,9 +93,9 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
91
93
  if (collection.versions) {
92
94
  payload.logger.info(`Migrating collection versions "${collection.slug}"`);
93
95
  await migrateModelWithBatching({
96
+ adapter: db,
94
97
  batchSize,
95
- config,
96
- fields: buildVersionCollectionFields(config, collection),
98
+ fields: buildVersionCollectionFields(config, collection, true),
97
99
  Model: db.versions[collection.slug],
98
100
  session
99
101
  });
@@ -113,10 +115,12 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
113
115
  });
114
116
  // in case if the global doesn't exist in the database yet (not saved)
115
117
  if (doc) {
116
- sanitizeRelationshipIDs({
117
- config,
118
+ transform({
119
+ adapter: db,
118
120
  data: doc,
119
- fields: global.fields
121
+ fields: global.flattenedFields,
122
+ operation: 'update',
123
+ validateRelationships: false
120
124
  });
121
125
  await GlobalsModel.collection.updateOne({
122
126
  globalType: global.slug
@@ -130,9 +134,9 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
130
134
  if (global.versions) {
131
135
  payload.logger.info(`Migrating global versions "${global.slug}"`);
132
136
  await migrateModelWithBatching({
137
+ adapter: db,
133
138
  batchSize,
134
- config,
135
- fields: buildVersionGlobalFields(config, global),
139
+ fields: buildVersionGlobalFields(config, global, true),
136
140
  Model: db.versions[global.slug],
137
141
  session
138
142
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"sourcesContent":["import type { ClientSession, Model } from 'mongoose'\nimport type { Field, PayloadRequest, SanitizedConfig } from 'payload'\n\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { sanitizeRelationshipIDs } from '../utilities/sanitizeRelationshipIDs.js'\nimport { withSession } from '../withSession.js'\n\nconst migrateModelWithBatching = async ({\n batchSize,\n config,\n fields,\n Model,\n session,\n}: {\n batchSize: number\n config: SanitizedConfig\n fields: Field[]\n Model: Model<any>\n session: ClientSession\n}): Promise<void> => {\n let hasNext = true\n let skip = 0\n\n while (hasNext) {\n const docs = await Model.find(\n {},\n {},\n {\n lean: true,\n limit: batchSize + 1,\n session,\n skip,\n },\n )\n\n if (docs.length === 0) {\n break\n }\n\n hasNext = docs.length > batchSize\n\n if (hasNext) {\n docs.pop()\n }\n\n for (const doc of docs) {\n sanitizeRelationshipIDs({ config, data: doc, fields })\n }\n\n await Model.collection.bulkWrite(\n docs.map((doc) => ({\n updateOne: {\n filter: { _id: doc._id },\n update: {\n $set: doc,\n },\n },\n })),\n { session },\n )\n\n skip += batchSize\n }\n}\n\nconst hasRelationshipOrUploadField = ({ fields }: { fields: Field[] }): boolean => {\n for (const field of fields) {\n if (field.type === 'relationship' || field.type === 'upload') {\n return true\n }\n\n if ('fields' in field) {\n if (hasRelationshipOrUploadField({ fields: field.fields })) {\n return true\n }\n }\n\n if ('blocks' in field) {\n for (const block of field.blocks) {\n if (hasRelationshipOrUploadField({ fields: block.fields })) {\n return true\n }\n }\n }\n\n if ('tabs' in field) {\n for (const tab of field.tabs) {\n if (hasRelationshipOrUploadField({ fields: tab.fields })) {\n return true\n }\n }\n }\n }\n\n return false\n}\n\nexport async function migrateRelationshipsV2_V3({\n batchSize,\n req,\n}: {\n batchSize: number\n req: PayloadRequest\n}): Promise<void> {\n const { payload } = req\n const db = payload.db as MongooseAdapter\n const config = payload.config\n\n const { session } = await withSession(db, req)\n\n for (const collection of payload.config.collections.filter(hasRelationshipOrUploadField)) {\n payload.logger.info(`Migrating collection \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: collection.fields,\n Model: db.collections[collection.slug],\n session,\n })\n\n payload.logger.info(`Migrated collection \"${collection.slug}\"`)\n\n if (collection.versions) {\n payload.logger.info(`Migrating collection versions \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: buildVersionCollectionFields(config, collection),\n Model: db.versions[collection.slug],\n session,\n })\n\n payload.logger.info(`Migrated collection versions \"${collection.slug}\"`)\n }\n }\n\n const { globals: GlobalsModel } = db\n\n for (const global of payload.config.globals.filter(hasRelationshipOrUploadField)) {\n payload.logger.info(`Migrating global \"${global.slug}\"`)\n\n const doc = await GlobalsModel.findOne<Record<string, unknown>>(\n {\n globalType: {\n $eq: global.slug,\n },\n },\n {},\n { lean: true, session },\n )\n\n // in case if the global doesn't exist in the database yet (not saved)\n if (doc) {\n sanitizeRelationshipIDs({ config, data: doc, fields: global.fields })\n\n await GlobalsModel.collection.updateOne(\n {\n globalType: global.slug,\n },\n { $set: doc },\n { session },\n )\n }\n\n payload.logger.info(`Migrated global \"${global.slug}\"`)\n\n if (global.versions) {\n payload.logger.info(`Migrating global versions \"${global.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n fields: buildVersionGlobalFields(config, global),\n Model: db.versions[global.slug],\n session,\n })\n\n payload.logger.info(`Migrated global versions \"${global.slug}\"`)\n }\n }\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","sanitizeRelationshipIDs","withSession","migrateModelWithBatching","batchSize","config","fields","Model","session","hasNext","skip","docs","find","lean","limit","length","pop","doc","data","collection","bulkWrite","map","updateOne","filter","_id","update","$set","hasRelationshipOrUploadField","field","type","block","blocks","tab","tabs","migrateRelationshipsV2_V3","req","payload","db","collections","logger","info","slug","versions","globals","GlobalsModel","global","findOne","globalType","$eq"],"mappings":"AAGA,SAASA,4BAA4B,EAAEC,wBAAwB,QAAQ,UAAS;AAIhF,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,WAAW,QAAQ,oBAAmB;AAE/C,MAAMC,2BAA2B,OAAO,EACtCC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,KAAK,EACLC,OAAO,EAOR;IACC,IAAIC,UAAU;IACd,IAAIC,OAAO;IAEX,MAAOD,QAAS;QACd,MAAME,OAAO,MAAMJ,MAAMK,IAAI,CAC3B,CAAC,GACD,CAAC,GACD;YACEC,MAAM;YACNC,OAAOV,YAAY;YACnBI;YACAE;QACF;QAGF,IAAIC,KAAKI,MAAM,KAAK,GAAG;YACrB;QACF;QAEAN,UAAUE,KAAKI,MAAM,GAAGX;QAExB,IAAIK,SAAS;YACXE,KAAKK,GAAG;QACV;QAEA,KAAK,MAAMC,OAAON,KAAM;YACtBV,wBAAwB;gBAAEI;gBAAQa,MAAMD;gBAAKX;YAAO;QACtD;QAEA,MAAMC,MAAMY,UAAU,CAACC,SAAS,CAC9BT,KAAKU,GAAG,CAAC,CAACJ,MAAS,CAAA;gBACjBK,WAAW;oBACTC,QAAQ;wBAAEC,KAAKP,IAAIO,GAAG;oBAAC;oBACvBC,QAAQ;wBACNC,MAAMT;oBACR;gBACF;YACF,CAAA,IACA;YAAET;QAAQ;QAGZE,QAAQN;IACV;AACF;AAEA,MAAMuB,+BAA+B,CAAC,EAAErB,MAAM,EAAuB;IACnE,KAAK,MAAMsB,SAAStB,OAAQ;QAC1B,IAAIsB,MAAMC,IAAI,KAAK,kBAAkBD,MAAMC,IAAI,KAAK,UAAU;YAC5D,OAAO;QACT;QAEA,IAAI,YAAYD,OAAO;YACrB,IAAID,6BAA6B;gBAAErB,QAAQsB,MAAMtB,MAAM;YAAC,IAAI;gBAC1D,OAAO;YACT;QACF;QAEA,IAAI,YAAYsB,OAAO;YACrB,KAAK,MAAME,SAASF,MAAMG,MAAM,CAAE;gBAChC,IAAIJ,6BAA6B;oBAAErB,QAAQwB,MAAMxB,MAAM;gBAAC,IAAI;oBAC1D,OAAO;gBACT;YACF;QACF;QAEA,IAAI,UAAUsB,OAAO;YACnB,KAAK,MAAMI,OAAOJ,MAAMK,IAAI,CAAE;gBAC5B,IAAIN,6BAA6B;oBAAErB,QAAQ0B,IAAI1B,MAAM;gBAAC,IAAI;oBACxD,OAAO;gBACT;YACF;QACF;IACF;IAEA,OAAO;AACT;AAEA,OAAO,eAAe4B,0BAA0B,EAC9C9B,SAAS,EACT+B,GAAG,EAIJ;IACC,MAAM,EAAEC,OAAO,EAAE,GAAGD;IACpB,MAAME,KAAKD,QAAQC,EAAE;IACrB,MAAMhC,SAAS+B,QAAQ/B,MAAM;IAE7B,MAAM,EAAEG,OAAO,EAAE,GAAG,MAAMN,YAAYmC,IAAIF;IAE1C,KAAK,MAAMhB,cAAciB,QAAQ/B,MAAM,CAACiC,WAAW,CAACf,MAAM,CAACI,8BAA+B;QACxFS,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,sBAAsB,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;QAE/D,MAAMtC,yBAAyB;YAC7BC;YACAC;YACAC,QAAQa,WAAWb,MAAM;YACzBC,OAAO8B,GAAGC,WAAW,CAACnB,WAAWsB,IAAI,CAAC;YACtCjC;QACF;QAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,qBAAqB,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;QAE9D,IAAItB,WAAWuB,QAAQ,EAAE;YACvBN,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,+BAA+B,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;YAExE,MAAMtC,yBAAyB;gBAC7BC;gBACAC;gBACAC,QAAQP,6BAA6BM,QAAQc;gBAC7CZ,OAAO8B,GAAGK,QAAQ,CAACvB,WAAWsB,IAAI,CAAC;gBACnCjC;YACF;YAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,8BAA8B,EAAErB,WAAWsB,IAAI,CAAC,CAAC,CAAC;QACzE;IACF;IAEA,MAAM,EAAEE,SAASC,YAAY,EAAE,GAAGP;IAElC,KAAK,MAAMQ,UAAUT,QAAQ/B,MAAM,CAACsC,OAAO,CAACpB,MAAM,CAACI,8BAA+B;QAChFS,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,kBAAkB,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;QAEvD,MAAMxB,MAAM,MAAM2B,aAAaE,OAAO,CACpC;YACEC,YAAY;gBACVC,KAAKH,OAAOJ,IAAI;YAClB;QACF,GACA,CAAC,GACD;YAAE5B,MAAM;YAAML;QAAQ;QAGxB,uEAAuE;QACvE,IAAIS,KAAK;YACPhB,wBAAwB;gBAAEI;gBAAQa,MAAMD;gBAAKX,QAAQuC,OAAOvC,MAAM;YAAC;YAEnE,MAAMsC,aAAazB,UAAU,CAACG,SAAS,CACrC;gBACEyB,YAAYF,OAAOJ,IAAI;YACzB,GACA;gBAAEf,MAAMT;YAAI,GACZ;gBAAET;YAAQ;QAEd;QAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,iBAAiB,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;QAEtD,IAAII,OAAOH,QAAQ,EAAE;YACnBN,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,2BAA2B,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;YAEhE,MAAMtC,yBAAyB;gBAC7BC;gBACAC;gBACAC,QAAQN,yBAAyBK,QAAQwC;gBACzCtC,OAAO8B,GAAGK,QAAQ,CAACG,OAAOJ,IAAI,CAAC;gBAC/BjC;YACF;YAEA4B,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,0BAA0B,EAAEK,OAAOJ,IAAI,CAAC,CAAC,CAAC;QACjE;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/predefinedMigrations/migrateRelationshipsV2_V3.ts"],"sourcesContent":["import type { ClientSession, Model } from 'mongoose'\nimport type { Field, FlattenedField, PayloadRequest } from 'payload'\n\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { getSession } from '../getSession.js'\nimport { transform } from '../utilities/transform.js'\n\nconst migrateModelWithBatching = async ({\n adapter,\n batchSize,\n fields,\n Model,\n session,\n}: {\n adapter: MongooseAdapter\n batchSize: number\n fields: FlattenedField[]\n Model: Model<any>\n session: ClientSession\n}): Promise<void> => {\n let hasNext = true\n let skip = 0\n\n while (hasNext) {\n const docs = await Model.find(\n {},\n {},\n {\n lean: true,\n limit: batchSize + 1,\n session,\n skip,\n },\n )\n\n if (docs.length === 0) {\n break\n }\n\n hasNext = docs.length > batchSize\n\n if (hasNext) {\n docs.pop()\n }\n\n for (const doc of docs) {\n transform({ adapter, data: doc, fields, operation: 'update', validateRelationships: false })\n }\n\n await Model.collection.bulkWrite(\n docs.map((doc) => ({\n updateOne: {\n filter: { _id: doc._id },\n update: {\n $set: doc,\n },\n },\n })),\n { session },\n )\n\n skip += batchSize\n }\n}\n\nconst hasRelationshipOrUploadField = ({ fields }: { fields: Field[] }): boolean => {\n for (const field of fields) {\n if (field.type === 'relationship' || field.type === 'upload') {\n return true\n }\n\n if ('fields' in field) {\n if (hasRelationshipOrUploadField({ fields: field.fields })) {\n return true\n }\n }\n\n if ('blocks' in field) {\n for (const block of field.blocks) {\n if (hasRelationshipOrUploadField({ fields: block.fields })) {\n return true\n }\n }\n }\n\n if ('tabs' in field) {\n for (const tab of field.tabs) {\n if (hasRelationshipOrUploadField({ fields: tab.fields })) {\n return true\n }\n }\n }\n }\n\n return false\n}\n\nexport async function migrateRelationshipsV2_V3({\n batchSize,\n req,\n}: {\n batchSize: number\n req: PayloadRequest\n}): Promise<void> {\n const { payload } = req\n const db = payload.db as MongooseAdapter\n const config = payload.config\n\n const session = await getSession(db, req)\n\n for (const collection of payload.config.collections.filter(hasRelationshipOrUploadField)) {\n payload.logger.info(`Migrating collection \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n adapter: db,\n batchSize,\n fields: collection.flattenedFields,\n Model: db.collections[collection.slug],\n session,\n })\n\n payload.logger.info(`Migrated collection \"${collection.slug}\"`)\n\n if (collection.versions) {\n payload.logger.info(`Migrating collection versions \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n adapter: db,\n batchSize,\n fields: buildVersionCollectionFields(config, collection, true),\n Model: db.versions[collection.slug],\n session,\n })\n\n payload.logger.info(`Migrated collection versions \"${collection.slug}\"`)\n }\n }\n\n const { globals: GlobalsModel } = db\n\n for (const global of payload.config.globals.filter(hasRelationshipOrUploadField)) {\n payload.logger.info(`Migrating global \"${global.slug}\"`)\n\n const doc = await GlobalsModel.findOne<Record<string, unknown>>(\n {\n globalType: {\n $eq: global.slug,\n },\n },\n {},\n { lean: true, session },\n )\n\n // in case if the global doesn't exist in the database yet (not saved)\n if (doc) {\n transform({\n adapter: db,\n data: doc,\n fields: global.flattenedFields,\n operation: 'update',\n validateRelationships: false,\n })\n\n await GlobalsModel.collection.updateOne(\n {\n globalType: global.slug,\n },\n { $set: doc },\n { session },\n )\n }\n\n payload.logger.info(`Migrated global \"${global.slug}\"`)\n\n if (global.versions) {\n payload.logger.info(`Migrating global versions \"${global.slug}\"`)\n\n await migrateModelWithBatching({\n adapter: db,\n batchSize,\n fields: buildVersionGlobalFields(config, global, true),\n Model: db.versions[global.slug],\n session,\n })\n\n payload.logger.info(`Migrated global versions \"${global.slug}\"`)\n }\n }\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","getSession","transform","migrateModelWithBatching","adapter","batchSize","fields","Model","session","hasNext","skip","docs","find","lean","limit","length","pop","doc","data","operation","validateRelationships","collection","bulkWrite","map","updateOne","filter","_id","update","$set","hasRelationshipOrUploadField","field","type","block","blocks","tab","tabs","migrateRelationshipsV2_V3","req","payload","db","config","collections","logger","info","slug","flattenedFields","versions","globals","GlobalsModel","global","findOne","globalType","$eq"],"mappings":"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"}