@payloadcms/db-mongodb 4.0.0-internal.934870d → 4.0.0-internal.952ed66

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 (141) hide show
  1. package/dist/connect.d.ts.map +1 -1
  2. package/dist/connect.js +1 -0
  3. package/dist/connect.js.map +1 -1
  4. package/dist/count.d.ts.map +1 -1
  5. package/dist/count.js +33 -4
  6. package/dist/count.js.map +1 -1
  7. package/dist/countGlobalVersions.d.ts.map +1 -1
  8. package/dist/countGlobalVersions.js +10 -2
  9. package/dist/countGlobalVersions.js.map +1 -1
  10. package/dist/countVersions.d.ts.map +1 -1
  11. package/dist/countVersions.js +36 -4
  12. package/dist/countVersions.js.map +1 -1
  13. package/dist/createGlobalVersion.d.ts +1 -1
  14. package/dist/createGlobalVersion.d.ts.map +1 -1
  15. package/dist/createGlobalVersion.js +24 -1
  16. package/dist/createGlobalVersion.js.map +1 -1
  17. package/dist/createVersion.d.ts.map +1 -1
  18. package/dist/createVersion.js +16 -3
  19. package/dist/createVersion.js.map +1 -1
  20. package/dist/deleteBranchGlobal.d.ts +10 -0
  21. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  22. package/dist/deleteBranchGlobal.js +26 -0
  23. package/dist/deleteBranchGlobal.js.map +1 -0
  24. package/dist/deleteMany.d.ts.map +1 -1
  25. package/dist/deleteMany.js +1 -0
  26. package/dist/deleteMany.js.map +1 -1
  27. package/dist/deleteOne.d.ts.map +1 -1
  28. package/dist/deleteOne.js +20 -1
  29. package/dist/deleteOne.js.map +1 -1
  30. package/dist/deleteVersions.d.ts.map +1 -1
  31. package/dist/deleteVersions.js +1 -0
  32. package/dist/deleteVersions.js.map +1 -1
  33. package/dist/exports/migration-utils.d.ts +1 -0
  34. package/dist/exports/migration-utils.d.ts.map +1 -1
  35. package/dist/exports/migration-utils.js +1 -0
  36. package/dist/exports/migration-utils.js.map +1 -1
  37. package/dist/find.d.ts.map +1 -1
  38. package/dist/find.js +44 -8
  39. package/dist/find.js.map +1 -1
  40. package/dist/findDistinct.d.ts.map +1 -1
  41. package/dist/findDistinct.js +70 -11
  42. package/dist/findDistinct.js.map +1 -1
  43. package/dist/findGlobal.d.ts.map +1 -1
  44. package/dist/findGlobal.js +48 -9
  45. package/dist/findGlobal.js.map +1 -1
  46. package/dist/findGlobalVersions.d.ts.map +1 -1
  47. package/dist/findGlobalVersions.js +10 -2
  48. package/dist/findGlobalVersions.js.map +1 -1
  49. package/dist/findOne.d.ts.map +1 -1
  50. package/dist/findOne.js +43 -5
  51. package/dist/findOne.js.map +1 -1
  52. package/dist/findVersions.d.ts.map +1 -1
  53. package/dist/findVersions.js +49 -5
  54. package/dist/findVersions.js.map +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +4 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/models/buildGlobalModel.d.ts.map +1 -1
  59. package/dist/models/buildGlobalModel.js +30 -1
  60. package/dist/models/buildGlobalModel.js.map +1 -1
  61. package/dist/models/buildSchema.d.ts.map +1 -1
  62. package/dist/models/buildSchema.js +36 -10
  63. package/dist/models/buildSchema.js.map +1 -1
  64. package/dist/predefinedMigrations/branching.d.ts +4 -0
  65. package/dist/predefinedMigrations/branching.d.ts.map +1 -0
  66. package/dist/predefinedMigrations/branching.js +9 -0
  67. package/dist/predefinedMigrations/branching.js.map +1 -0
  68. package/dist/predefinedMigrations/migrateBranching.d.ts +17 -0
  69. package/dist/predefinedMigrations/migrateBranching.d.ts.map +1 -0
  70. package/dist/predefinedMigrations/migrateBranching.js +90 -0
  71. package/dist/predefinedMigrations/migrateBranching.js.map +1 -0
  72. package/dist/predefinedMigrations/migrateSizesToVariants.js.map +1 -1
  73. package/dist/queries/buildAndOrConditions.d.ts +4 -2
  74. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  75. package/dist/queries/buildAndOrConditions.js +3 -1
  76. package/dist/queries/buildAndOrConditions.js.map +1 -1
  77. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  78. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  79. package/dist/queries/buildBranchVisibility.js +204 -0
  80. package/dist/queries/buildBranchVisibility.js.map +1 -0
  81. package/dist/queries/buildQuery.d.ts +4 -2
  82. package/dist/queries/buildQuery.d.ts.map +1 -1
  83. package/dist/queries/buildQuery.js +3 -1
  84. package/dist/queries/buildQuery.js.map +1 -1
  85. package/dist/queries/buildRelatedQueryPipeline.d.ts +7 -0
  86. package/dist/queries/buildRelatedQueryPipeline.d.ts.map +1 -0
  87. package/dist/queries/buildRelatedQueryPipeline.js +56 -0
  88. package/dist/queries/buildRelatedQueryPipeline.js.map +1 -0
  89. package/dist/queries/buildSearchParams.d.ts +4 -2
  90. package/dist/queries/buildSearchParams.d.ts.map +1 -1
  91. package/dist/queries/buildSearchParams.js +177 -45
  92. package/dist/queries/buildSearchParams.js.map +1 -1
  93. package/dist/queries/getBuildQueryPlugin.d.ts +3 -1
  94. package/dist/queries/getBuildQueryPlugin.d.ts.map +1 -1
  95. package/dist/queries/getBuildQueryPlugin.js +3 -1
  96. package/dist/queries/getBuildQueryPlugin.js.map +1 -1
  97. package/dist/queries/parseParams.d.ts +4 -2
  98. package/dist/queries/parseParams.d.ts.map +1 -1
  99. package/dist/queries/parseParams.js +5 -1
  100. package/dist/queries/parseParams.js.map +1 -1
  101. package/dist/queryDrafts.d.ts.map +1 -1
  102. package/dist/queryDrafts.js +39 -7
  103. package/dist/queryDrafts.js.map +1 -1
  104. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  105. package/dist/transactions/commitTransaction.js +69 -7
  106. package/dist/transactions/commitTransaction.js.map +1 -1
  107. package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
  108. package/dist/transactions/rollbackTransaction.js +10 -9
  109. package/dist/transactions/rollbackTransaction.js.map +1 -1
  110. package/dist/updateGlobal.d.ts.map +1 -1
  111. package/dist/updateGlobal.js +89 -7
  112. package/dist/updateGlobal.js.map +1 -1
  113. package/dist/updateGlobalVersion.d.ts.map +1 -1
  114. package/dist/updateGlobalVersion.js +1 -0
  115. package/dist/updateGlobalVersion.js.map +1 -1
  116. package/dist/updateMany.d.ts.map +1 -1
  117. package/dist/updateMany.js +3 -1
  118. package/dist/updateMany.js.map +1 -1
  119. package/dist/updateOne.d.ts.map +1 -1
  120. package/dist/updateOne.js +28 -2
  121. package/dist/updateOne.js.map +1 -1
  122. package/dist/updateVersion.d.ts.map +1 -1
  123. package/dist/updateVersion.js +1 -0
  124. package/dist/updateVersion.js.map +1 -1
  125. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  126. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  127. package/dist/upsertBranchGlobalChange.js +28 -0
  128. package/dist/upsertBranchGlobalChange.js.map +1 -0
  129. package/dist/utilities/aggregatePaginate.d.ts +2 -1
  130. package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
  131. package/dist/utilities/aggregatePaginate.js +18 -4
  132. package/dist/utilities/aggregatePaginate.js.map +1 -1
  133. package/dist/utilities/buildJoinAggregation.d.ts +4 -2
  134. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  135. package/dist/utilities/buildJoinAggregation.js +158 -24
  136. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  137. package/dist/utilities/resolveJoins.d.ts +6 -2
  138. package/dist/utilities/resolveJoins.d.ts.map +1 -1
  139. package/dist/utilities/resolveJoins.js +115 -26
  140. package/dist/utilities/resolveJoins.js.map +1 -1
  141. package/package.json +16 -19
@@ -1,4 +1,5 @@
1
1
  import mongoose from 'mongoose';
2
+ import { branchField } from 'payload';
2
3
  import { getBuildQueryPlugin } from '../queries/getBuildQueryPlugin.js';
3
4
  import { buildSchema } from './buildSchema.js';
4
5
  export const buildGlobalModel = ({ adapter, schemaBuildContext })=>{
@@ -9,15 +10,32 @@ export const buildGlobalModel = ({ adapter, schemaBuildContext })=>{
9
10
  timestamps: true
10
11
  });
11
12
  globalsSchema.plugin(getBuildQueryPlugin());
13
+ if (adapter.payload.config.branching?.branchableGlobals.size) {
14
+ globalsSchema.index(// eslint-disable-next-line perfectionist/sort-objects -- Keep the discriminator first for global-scoped queries.
15
+ {
16
+ globalType: 1,
17
+ [branchField]: 1
18
+ }, {
19
+ partialFilterExpression: {
20
+ [branchField]: {
21
+ $exists: true
22
+ }
23
+ },
24
+ unique: true
25
+ });
26
+ }
12
27
  const Globals = adapter.connection.model('globals', globalsSchema, 'globals');
13
28
  Object.values(adapter.payload.config.globals).forEach((globalConfig)=>{
29
+ const isBranchableGlobal = adapter.payload.config.branching?.branchableGlobals.has(globalConfig.slug) ?? false;
14
30
  const globalSchema = buildSchema({
15
31
  buildSchemaOptions: {
16
32
  options: {
17
33
  minimize: false
18
34
  }
19
35
  },
20
- configFields: globalConfig.fields,
36
+ configFields: isBranchableGlobal ? removeBranchFieldIndex({
37
+ fields: globalConfig.fields
38
+ }) : globalConfig.fields,
21
39
  payload: adapter.payload,
22
40
  schemaBuildContext,
23
41
  schemaPath: `global:${globalConfig.slug}`
@@ -28,5 +46,16 @@ export const buildGlobalModel = ({ adapter, schemaBuildContext })=>{
28
46
  }
29
47
  return null;
30
48
  };
49
+ const removeBranchFieldIndex = ({ fields })=>fields.map((field)=>{
50
+ if (isBranchField(field)) {
51
+ return {
52
+ ...field,
53
+ index: false,
54
+ unique: false
55
+ };
56
+ }
57
+ return field;
58
+ });
59
+ const isBranchField = (field)=>field.type === 'text' && field.name === branchField;
31
60
 
32
61
  //# sourceMappingURL=buildGlobalModel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/buildGlobalModel.ts"],"sourcesContent":["import mongoose from 'mongoose'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { GlobalModel } from '../types.js'\nimport type { MongoSchemaBuildContext } from './schemaBuildContext.js'\n\nimport { getBuildQueryPlugin } from '../queries/getBuildQueryPlugin.js'\nimport { buildSchema } from './buildSchema.js'\n\nexport const buildGlobalModel = ({\n adapter,\n schemaBuildContext,\n}: {\n adapter: MongooseAdapter\n schemaBuildContext: MongoSchemaBuildContext\n}): GlobalModel | null => {\n if (adapter.payload.config.globals && adapter.payload.config.globals.length > 0) {\n const globalsSchema = new mongoose.Schema(\n {},\n { discriminatorKey: 'globalType', minimize: false, timestamps: true },\n )\n\n globalsSchema.plugin(getBuildQueryPlugin())\n\n const Globals = adapter.connection.model(\n 'globals',\n globalsSchema,\n 'globals',\n ) as unknown as GlobalModel\n\n Object.values(adapter.payload.config.globals).forEach((globalConfig) => {\n const globalSchema = buildSchema({\n buildSchemaOptions: {\n options: {\n minimize: false,\n },\n },\n configFields: globalConfig.fields,\n payload: adapter.payload,\n schemaBuildContext,\n schemaPath: `global:${globalConfig.slug}`,\n })\n Globals.discriminator(globalConfig.slug, globalSchema)\n })\n\n return Globals\n }\n\n return null\n}\n"],"names":["mongoose","getBuildQueryPlugin","buildSchema","buildGlobalModel","adapter","schemaBuildContext","payload","config","globals","length","globalsSchema","Schema","discriminatorKey","minimize","timestamps","plugin","Globals","connection","model","Object","values","forEach","globalConfig","globalSchema","buildSchemaOptions","options","configFields","fields","schemaPath","slug","discriminator"],"mappings":"AAAA,OAAOA,cAAc,WAAU;AAM/B,SAASC,mBAAmB,QAAQ,oCAAmC;AACvE,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,MAAMC,mBAAmB,CAAC,EAC/BC,OAAO,EACPC,kBAAkB,EAInB;IACC,IAAID,QAAQE,OAAO,CAACC,MAAM,CAACC,OAAO,IAAIJ,QAAQE,OAAO,CAACC,MAAM,CAACC,OAAO,CAACC,MAAM,GAAG,GAAG;QAC/E,MAAMC,gBAAgB,IAAIV,SAASW,MAAM,CACvC,CAAC,GACD;YAAEC,kBAAkB;YAAcC,UAAU;YAAOC,YAAY;QAAK;QAGtEJ,cAAcK,MAAM,CAACd;QAErB,MAAMe,UAAUZ,QAAQa,UAAU,CAACC,KAAK,CACtC,WACAR,eACA;QAGFS,OAAOC,MAAM,CAAChB,QAAQE,OAAO,CAACC,MAAM,CAACC,OAAO,EAAEa,OAAO,CAAC,CAACC;YACrD,MAAMC,eAAerB,YAAY;gBAC/BsB,oBAAoB;oBAClBC,SAAS;wBACPZ,UAAU;oBACZ;gBACF;gBACAa,cAAcJ,aAAaK,MAAM;gBACjCrB,SAASF,QAAQE,OAAO;gBACxBD;gBACAuB,YAAY,CAAC,OAAO,EAAEN,aAAaO,IAAI,EAAE;YAC3C;YACAb,QAAQc,aAAa,CAACR,aAAaO,IAAI,EAAEN;QAC3C;QAEA,OAAOP;IACT;IAEA,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/models/buildGlobalModel.ts"],"sourcesContent":["import type { Field, TextField } from 'payload'\n\nimport mongoose from 'mongoose'\nimport { branchField } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { GlobalModel } from '../types.js'\nimport type { MongoSchemaBuildContext } from './schemaBuildContext.js'\n\nimport { getBuildQueryPlugin } from '../queries/getBuildQueryPlugin.js'\nimport { buildSchema } from './buildSchema.js'\n\nexport const buildGlobalModel = ({\n adapter,\n schemaBuildContext,\n}: {\n adapter: MongooseAdapter\n schemaBuildContext: MongoSchemaBuildContext\n}): GlobalModel | null => {\n if (adapter.payload.config.globals && adapter.payload.config.globals.length > 0) {\n const globalsSchema = new mongoose.Schema(\n {},\n { discriminatorKey: 'globalType', minimize: false, timestamps: true },\n )\n\n globalsSchema.plugin(getBuildQueryPlugin())\n\n if (adapter.payload.config.branching?.branchableGlobals.size) {\n globalsSchema.index(\n // eslint-disable-next-line perfectionist/sort-objects -- Keep the discriminator first for global-scoped queries.\n { globalType: 1, [branchField]: 1 },\n {\n partialFilterExpression: { [branchField]: { $exists: true } },\n unique: true,\n },\n )\n }\n\n const Globals = adapter.connection.model(\n 'globals',\n globalsSchema,\n 'globals',\n ) as unknown as GlobalModel\n\n Object.values(adapter.payload.config.globals).forEach((globalConfig) => {\n const isBranchableGlobal =\n adapter.payload.config.branching?.branchableGlobals.has(globalConfig.slug) ?? false\n const globalSchema = buildSchema({\n buildSchemaOptions: {\n options: {\n minimize: false,\n },\n },\n configFields: isBranchableGlobal\n ? removeBranchFieldIndex({ fields: globalConfig.fields })\n : globalConfig.fields,\n payload: adapter.payload,\n schemaBuildContext,\n schemaPath: `global:${globalConfig.slug}`,\n })\n Globals.discriminator(globalConfig.slug, globalSchema)\n })\n\n return Globals\n }\n\n return null\n}\n\nconst removeBranchFieldIndex = ({ fields }: { fields: Field[] }): Field[] =>\n fields.map((field) => {\n if (isBranchField(field)) {\n return { ...field, index: false, unique: false }\n }\n\n return field\n })\n\nconst isBranchField = (field: Field): field is TextField =>\n field.type === 'text' && field.name === branchField\n"],"names":["mongoose","branchField","getBuildQueryPlugin","buildSchema","buildGlobalModel","adapter","schemaBuildContext","payload","config","globals","length","globalsSchema","Schema","discriminatorKey","minimize","timestamps","plugin","branching","branchableGlobals","size","index","globalType","partialFilterExpression","$exists","unique","Globals","connection","model","Object","values","forEach","globalConfig","isBranchableGlobal","has","slug","globalSchema","buildSchemaOptions","options","configFields","removeBranchFieldIndex","fields","schemaPath","discriminator","map","field","isBranchField","type","name"],"mappings":"AAEA,OAAOA,cAAc,WAAU;AAC/B,SAASC,WAAW,QAAQ,UAAS;AAMrC,SAASC,mBAAmB,QAAQ,oCAAmC;AACvE,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,MAAMC,mBAAmB,CAAC,EAC/BC,OAAO,EACPC,kBAAkB,EAInB;IACC,IAAID,QAAQE,OAAO,CAACC,MAAM,CAACC,OAAO,IAAIJ,QAAQE,OAAO,CAACC,MAAM,CAACC,OAAO,CAACC,MAAM,GAAG,GAAG;QAC/E,MAAMC,gBAAgB,IAAIX,SAASY,MAAM,CACvC,CAAC,GACD;YAAEC,kBAAkB;YAAcC,UAAU;YAAOC,YAAY;QAAK;QAGtEJ,cAAcK,MAAM,CAACd;QAErB,IAAIG,QAAQE,OAAO,CAACC,MAAM,CAACS,SAAS,EAAEC,kBAAkBC,MAAM;YAC5DR,cAAcS,KAAK,CACjB,iHAAiH;YACjH;gBAAEC,YAAY;gBAAG,CAACpB,YAAY,EAAE;YAAE,GAClC;gBACEqB,yBAAyB;oBAAE,CAACrB,YAAY,EAAE;wBAAEsB,SAAS;oBAAK;gBAAE;gBAC5DC,QAAQ;YACV;QAEJ;QAEA,MAAMC,UAAUpB,QAAQqB,UAAU,CAACC,KAAK,CACtC,WACAhB,eACA;QAGFiB,OAAOC,MAAM,CAACxB,QAAQE,OAAO,CAACC,MAAM,CAACC,OAAO,EAAEqB,OAAO,CAAC,CAACC;YACrD,MAAMC,qBACJ3B,QAAQE,OAAO,CAACC,MAAM,CAACS,SAAS,EAAEC,kBAAkBe,IAAIF,aAAaG,IAAI,KAAK;YAChF,MAAMC,eAAehC,YAAY;gBAC/BiC,oBAAoB;oBAClBC,SAAS;wBACPvB,UAAU;oBACZ;gBACF;gBACAwB,cAAcN,qBACVO,uBAAuB;oBAAEC,QAAQT,aAAaS,MAAM;gBAAC,KACrDT,aAAaS,MAAM;gBACvBjC,SAASF,QAAQE,OAAO;gBACxBD;gBACAmC,YAAY,CAAC,OAAO,EAAEV,aAAaG,IAAI,EAAE;YAC3C;YACAT,QAAQiB,aAAa,CAACX,aAAaG,IAAI,EAAEC;QAC3C;QAEA,OAAOV;IACT;IAEA,OAAO;AACT,EAAC;AAED,MAAMc,yBAAyB,CAAC,EAAEC,MAAM,EAAuB,GAC7DA,OAAOG,GAAG,CAAC,CAACC;QACV,IAAIC,cAAcD,QAAQ;YACxB,OAAO;gBAAE,GAAGA,KAAK;gBAAExB,OAAO;gBAAOI,QAAQ;YAAM;QACjD;QAEA,OAAOoB;IACT;AAEF,MAAMC,gBAAgB,CAACD,QACrBA,MAAME,IAAI,KAAK,UAAUF,MAAMG,IAAI,KAAK9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildSchema.d.ts","sourceRoot":"","sources":["../../src/models/buildSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,MAAM,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAA;AAGtF,OAAO,EAQL,KAAK,KAAK,EAEV,KAAK,cAAc,EAKnB,KAAK,OAAO,EAMZ,KAAK,sBAAsB,EAS5B,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAItE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAyFD,eAAO,MAAM,WAAW,SAAU;IAChC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAC1C,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,CAAC,EAAE,uBAAuB,CAAA;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,KAAG,MAkFH,CAAA"}
1
+ {"version":3,"file":"buildSchema.d.ts","sourceRoot":"","sources":["../../src/models/buildSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,MAAM,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAA;AAGtF,OAAO,EASL,KAAK,KAAK,EAEV,KAAK,cAAc,EAKnB,KAAK,OAAO,EAMZ,KAAK,sBAAsB,EAS5B,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAItE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAyFD,eAAO,MAAM,WAAW,SAAU;IAChC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAC1C,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,CAAC,EAAE,uBAAuB,CAAA;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,KAAG,MA0HH,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import mongoose from 'mongoose';
2
+ import { branchField } from 'payload';
2
3
  import { createSchemaBuildContext } from 'payload/internal';
3
4
  import { fieldAffectsData, fieldIsPresentationalOnly, fieldIsVirtual, fieldShouldBeLocalized, tabHasName } from 'payload/shared';
4
5
  import { getBlockSchemaCacheKey } from './schemaBuildContext.js';
@@ -78,19 +79,44 @@ export const buildSchema = (args)=>{
78
79
  });
79
80
  if (args.compoundIndexes) {
80
81
  for (const index of args.compoundIndexes){
81
- const indexDefinition = {};
82
- for (const field of index.fields){
83
- if (field.pathHasLocalized && payload.config.localization) {
84
- for (const locale of payload.config.localization.locales){
85
- indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1;
82
+ const requiredFields = index.requireExists ?? [];
83
+ const hasBranchScope = index.fields.some(({ path })=>path === branchField);
84
+ const hasLocalizedIndexField = index.fields.some(({ pathHasLocalized })=>pathHasLocalized);
85
+ const hasLocalizedRequiredField = requiredFields.some(({ pathHasLocalized })=>pathHasLocalized);
86
+ const localization = payload.config.localization;
87
+ // Branch-scoped unique values must remain independent for each locale.
88
+ const locales = (requiredFields.length > 0 || hasBranchScope) && localization && (hasLocalizedIndexField || hasLocalizedRequiredField) ? localization.locales : [
89
+ undefined
90
+ ];
91
+ for (const locale of locales){
92
+ const indexDefinition = {};
93
+ const resolveIndexPath = ({ localizedPath, path, pathHasLocalized })=>pathHasLocalized && locale ? localizedPath.replaceAll('<locale>', locale.code) : path;
94
+ for (const field of index.fields){
95
+ if (!requiredFields.length && !hasBranchScope && field.pathHasLocalized && localization) {
96
+ for (const indexLocale of localization.locales){
97
+ indexDefinition[field.localizedPath.replaceAll('<locale>', indexLocale.code)] = 1;
98
+ }
99
+ } else {
100
+ indexDefinition[resolveIndexPath(field)] = 1;
101
+ }
102
+ }
103
+ const indexOptions = {
104
+ unique: args.buildSchemaOptions.disableUnique ? false : index.unique
105
+ };
106
+ if (requiredFields.length) {
107
+ indexOptions.partialFilterExpression = Object.fromEntries(requiredFields.map((field)=>[
108
+ resolveIndexPath(field),
109
+ {
110
+ $exists: true
111
+ }
112
+ ]));
113
+ // Filter-only localized fields otherwise produce identical automatic index names.
114
+ if (locale && !hasLocalizedIndexField) {
115
+ indexOptions.name = `${Object.keys(indexDefinition).join('_')}_${locale.code}_require_exists`;
86
116
  }
87
- } else {
88
- indexDefinition[field.path] = 1;
89
117
  }
118
+ schema.index(indexDefinition, indexOptions);
90
119
  }
91
- schema.index(indexDefinition, {
92
- unique: args.buildSchemaOptions.disableUnique ? false : index.unique
93
- });
94
120
  }
95
121
  }
96
122
  return schema;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n type ArrayField,\n type BlocksField,\n type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\n type FlattenedField,\n type GroupField,\n type JSONField,\n type NonPresentationalField,\n type NumberField,\n type Payload,\n type PointField,\n type RadioField,\n type RelationshipField,\n type RichTextField,\n type RowField,\n type SanitizedCompoundIndex,\n type SanitizedLocalizationConfig,\n type SelectField,\n type SlugField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport { createSchemaBuildContext } from 'payload/internal'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nimport type { MongoSchemaBuildContext } from './schemaBuildContext.js'\n\nimport { getBlockSchemaCacheKey } from './schemaBuildContext.js'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator<T extends Field = Field> = (\n field: T,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n schemaBuildState: SchemaBuildState,\n) => void\n\ntype SchemaBuildState = {\n context: MongoSchemaBuildContext\n isVersion: boolean\n path: string\n}\n\n/**\n * get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema\n * @param field\n */\nconst formatDefaultValue = (field: FieldAffectingData) =>\n typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function'\n ? field.defaultValue\n : undefined\n\nconst formatBaseSchema = ({\n buildSchemaOptions,\n field,\n parentIsLocalized,\n}: {\n buildSchemaOptions: BuildSchemaOptions\n field: FieldAffectingData\n parentIsLocalized: boolean\n}) => {\n const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions\n const schema: SchemaTypeOptions<unknown> = {\n default: formatDefaultValue(field),\n index: field.index || (!disableUnique && field.unique) || indexSortableFields || false,\n required: false,\n unique: (!disableUnique && field.unique) || false,\n }\n\n if (\n schema.unique &&\n (fieldShouldBeLocalized({ field, parentIsLocalized }) ||\n draftsEnabled ||\n (fieldAffectsData(field) &&\n field.type !== 'group' &&\n field.type !== 'tab' &&\n field.required !== true))\n ) {\n schema.sparse = true\n }\n\n if (field.hidden) {\n schema.hidden = true\n }\n\n return schema\n}\n\nconst localizeSchema = (\n entity: NonPresentationalField | Tab,\n schema: SchemaTypeOptions<any>,\n localization: false | SanitizedLocalizationConfig,\n parentIsLocalized: boolean,\n) => {\n if (\n fieldShouldBeLocalized({ field: entity, parentIsLocalized }) &&\n localization &&\n Array.isArray(localization.locales)\n ) {\n return {\n type: localization.localeCodes.reduce(\n (localeSchema, locale) => ({\n ...localeSchema,\n [locale]: schema,\n }),\n {\n _id: false,\n },\n ),\n localized: true,\n }\n }\n return schema\n}\n\nexport const buildSchema = (args: {\n buildSchemaOptions: BuildSchemaOptions\n compoundIndexes?: SanitizedCompoundIndex[]\n configFields: Field[]\n flattenedFields?: FlattenedField[]\n isVersion?: boolean\n parentIsLocalized?: boolean\n payload: Payload\n schemaBuildContext?: MongoSchemaBuildContext\n schemaPath?: string\n}): Schema => {\n const {\n buildSchemaOptions = {},\n configFields,\n flattenedFields,\n parentIsLocalized,\n payload,\n } = args\n const schemaBuildContext = args.schemaBuildContext ?? createSchemaBuildContext<Schema>()\n const schemaBuildState: SchemaBuildState = {\n context: schemaBuildContext,\n isVersion: args.isVersion ?? false,\n path: args.schemaPath ?? 'schema',\n }\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n // Use flattenedFields if available to find custom id field regardless of nesting\n const fieldsToSearch = flattenedFields || schemaFields\n const idField = fieldsToSearch.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id:\n idField.type === 'number'\n ? payload.db.useBigIntForNumberIDs\n ? mongoose.Schema.Types.BigInt\n : Number\n : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized ?? false,\n schemaBuildState,\n )\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const indexDefinition: Record<string, 1> = {}\n\n for (const field of index.fields) {\n if (field.pathHasLocalized && payload.config.localization) {\n for (const locale of payload.config.localization.locales) {\n indexDefinition[field.localizedPath.replace('<locale>', locale.code)] = 1\n }\n } else {\n indexDefinition[field.path] = 1\n }\n }\n\n schema.index(indexDefinition, {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n })\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/field:${field.name}`,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n fieldSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n field.blocks.forEach((blockItem) => {\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n const isLocalized = Boolean(parentIsLocalized || field.localized)\n const isReference = typeof blockItem === 'string'\n const fieldPath = `${schemaBuildState.path}/field:${field.name}`\n const blockSchema = schemaBuildState.context.getOrCreate({\n build: () => {\n const template = new mongoose.Schema({}, { _id: false, id: false })\n\n block.fields.forEach((blockField) => {\n if (fieldIsVirtual(blockField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(blockField, template, payload, buildSchemaOptions, isLocalized, {\n context: schemaBuildState.context,\n isVersion: schemaBuildState.isVersion,\n path: isReference ? `block:${block.slug}` : `${fieldPath}/block:${block.slug}`,\n })\n }\n })\n\n return template\n },\n cacheKey: getBlockSchemaCacheKey({\n blockSlug: block.slug,\n buildSchemaOptions,\n fieldPath,\n isLocalized,\n isReference,\n isVersion: schemaBuildState.isVersion,\n }),\n definition: block,\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n )\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n if (fieldAffectsData(field)) {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/field:${field.name}`,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n field.fields.forEach((subField) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n schemaBuildState,\n )\n }\n })\n }\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n )\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/tab:${tab.name}`,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n schemaBuildState,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst slug: FieldSchemaGenerator<SlugField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n slug,\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n if (payload.db.useBigIntForNumberIDs) {\n return mongoose.Schema.Types.BigInt\n } else {\n return mongoose.Schema.Types.Number\n }\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","createSchemaBuildContext","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","getBlockSchemaCacheKey","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","flattenedFields","payload","schemaBuildContext","schemaBuildState","context","isVersion","path","schemaPath","allowIDField","options","fields","schemaFields","fieldsToSearch","idField","find","name","db","useBigIntForNumberIDs","Schema","Types","BigInt","Number","String","filter","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","indexDefinition","pathHasLocalized","config","localizedPath","replace","code","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockItem","block","isLocalized","Boolean","isReference","fieldPath","blockSchema","getOrCreate","build","template","blockField","slug","cacheKey","blockSlug","definition","localeCode","discriminator","checkbox","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Mixed","number","hasMany","point","enum","coordinates","indexOptions","radio","map","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId","some"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/models/buildSchema.ts"],"sourcesContent":["import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'\n\nimport mongoose from 'mongoose'\nimport {\n type ArrayField,\n type BlocksField,\n branchField,\n type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\n type FlattenedField,\n type GroupField,\n type JSONField,\n type NonPresentationalField,\n type NumberField,\n type Payload,\n type PointField,\n type RadioField,\n type RelationshipField,\n type RichTextField,\n type RowField,\n type SanitizedCompoundIndex,\n type SanitizedLocalizationConfig,\n type SelectField,\n type SlugField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport { createSchemaBuildContext } from 'payload/internal'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nimport type { MongoSchemaBuildContext } from './schemaBuildContext.js'\n\nimport { getBlockSchemaCacheKey } from './schemaBuildContext.js'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator<T extends Field = Field> = (\n field: T,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n schemaBuildState: SchemaBuildState,\n) => void\n\ntype SchemaBuildState = {\n context: MongoSchemaBuildContext\n isVersion: boolean\n path: string\n}\n\n/**\n * get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema\n * @param field\n */\nconst formatDefaultValue = (field: FieldAffectingData) =>\n typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function'\n ? field.defaultValue\n : undefined\n\nconst formatBaseSchema = ({\n buildSchemaOptions,\n field,\n parentIsLocalized,\n}: {\n buildSchemaOptions: BuildSchemaOptions\n field: FieldAffectingData\n parentIsLocalized: boolean\n}) => {\n const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions\n const schema: SchemaTypeOptions<unknown> = {\n default: formatDefaultValue(field),\n index: field.index || (!disableUnique && field.unique) || indexSortableFields || false,\n required: false,\n unique: (!disableUnique && field.unique) || false,\n }\n\n if (\n schema.unique &&\n (fieldShouldBeLocalized({ field, parentIsLocalized }) ||\n draftsEnabled ||\n (fieldAffectsData(field) &&\n field.type !== 'group' &&\n field.type !== 'tab' &&\n field.required !== true))\n ) {\n schema.sparse = true\n }\n\n if (field.hidden) {\n schema.hidden = true\n }\n\n return schema\n}\n\nconst localizeSchema = (\n entity: NonPresentationalField | Tab,\n schema: SchemaTypeOptions<any>,\n localization: false | SanitizedLocalizationConfig,\n parentIsLocalized: boolean,\n) => {\n if (\n fieldShouldBeLocalized({ field: entity, parentIsLocalized }) &&\n localization &&\n Array.isArray(localization.locales)\n ) {\n return {\n type: localization.localeCodes.reduce(\n (localeSchema, locale) => ({\n ...localeSchema,\n [locale]: schema,\n }),\n {\n _id: false,\n },\n ),\n localized: true,\n }\n }\n return schema\n}\n\nexport const buildSchema = (args: {\n buildSchemaOptions: BuildSchemaOptions\n compoundIndexes?: SanitizedCompoundIndex[]\n configFields: Field[]\n flattenedFields?: FlattenedField[]\n isVersion?: boolean\n parentIsLocalized?: boolean\n payload: Payload\n schemaBuildContext?: MongoSchemaBuildContext\n schemaPath?: string\n}): Schema => {\n const {\n buildSchemaOptions = {},\n configFields,\n flattenedFields,\n parentIsLocalized,\n payload,\n } = args\n const schemaBuildContext = args.schemaBuildContext ?? createSchemaBuildContext<Schema>()\n const schemaBuildState: SchemaBuildState = {\n context: schemaBuildContext,\n isVersion: args.isVersion ?? false,\n path: args.schemaPath ?? 'schema',\n }\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n // Use flattenedFields if available to find custom id field regardless of nesting\n const fieldsToSearch = flattenedFields || schemaFields\n const idField = fieldsToSearch.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id:\n idField.type === 'number'\n ? payload.db.useBigIntForNumberIDs\n ? mongoose.Schema.Types.BigInt\n : Number\n : String,\n }\n schemaFields = schemaFields.filter(\n (field) => !(fieldAffectsData(field) && field.name === 'id'),\n )\n }\n }\n\n const schema = new mongoose.Schema(fields, options as any)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema = getSchemaGenerator(field.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized ?? false,\n schemaBuildState,\n )\n }\n }\n })\n\n if (args.compoundIndexes) {\n for (const index of args.compoundIndexes) {\n const requiredFields = index.requireExists ?? []\n const hasBranchScope = index.fields.some(({ path }) => path === branchField)\n const hasLocalizedIndexField = index.fields.some(({ pathHasLocalized }) => pathHasLocalized)\n const hasLocalizedRequiredField = requiredFields.some(\n ({ pathHasLocalized }) => pathHasLocalized,\n )\n const localization = payload.config.localization\n // Branch-scoped unique values must remain independent for each locale.\n const locales =\n (requiredFields.length > 0 || hasBranchScope) &&\n localization &&\n (hasLocalizedIndexField || hasLocalizedRequiredField)\n ? localization.locales\n : [undefined]\n\n for (const locale of locales) {\n const indexDefinition: Record<string, 1> = {}\n const resolveIndexPath = ({\n localizedPath,\n path,\n pathHasLocalized,\n }: {\n localizedPath: string\n path: string\n pathHasLocalized: boolean\n }): string =>\n pathHasLocalized && locale ? localizedPath.replaceAll('<locale>', locale.code) : path\n\n for (const field of index.fields) {\n if (!requiredFields.length && !hasBranchScope && field.pathHasLocalized && localization) {\n for (const indexLocale of localization.locales) {\n indexDefinition[field.localizedPath.replaceAll('<locale>', indexLocale.code)] = 1\n }\n } else {\n indexDefinition[resolveIndexPath(field)] = 1\n }\n }\n\n const indexOptions: IndexOptions = {\n unique: args.buildSchemaOptions.disableUnique ? false : index.unique,\n }\n\n if (requiredFields.length) {\n indexOptions.partialFilterExpression = Object.fromEntries(\n requiredFields.map((field) => [resolveIndexPath(field), { $exists: true }]),\n )\n\n // Filter-only localized fields otherwise produce identical automatic index names.\n if (locale && !hasLocalizedIndexField) {\n indexOptions.name = `${Object.keys(indexDefinition).join('_')}_${locale.code}_require_exists`\n }\n }\n\n schema.index(indexDefinition, indexOptions)\n }\n }\n }\n\n return schema\n}\n\nconst array: FieldSchemaGenerator<ArrayField> = (\n field: ArrayField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n) => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [\n buildSchema({\n buildSchemaOptions: {\n allowIDField: true,\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/field:${field.name}`,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst blocks: FieldSchemaGenerator<BlocksField> = (\n field: BlocksField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n const fieldSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: [new mongoose.Schema({}, { _id: false, discriminatorKey: 'blockType' })],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n fieldSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n field.blocks.forEach((blockItem) => {\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n if (!block) {\n return\n }\n\n const isLocalized = Boolean(parentIsLocalized || field.localized)\n const isReference = typeof blockItem === 'string'\n const fieldPath = `${schemaBuildState.path}/field:${field.name}`\n const blockSchema = schemaBuildState.context.getOrCreate({\n build: () => {\n const template = new mongoose.Schema({}, { _id: false, id: false })\n\n block.fields.forEach((blockField) => {\n if (fieldIsVirtual(blockField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(blockField.type)\n\n if (addFieldSchema) {\n addFieldSchema(blockField, template, payload, buildSchemaOptions, isLocalized, {\n context: schemaBuildState.context,\n isVersion: schemaBuildState.isVersion,\n path: isReference ? `block:${block.slug}` : `${fieldPath}/block:${block.slug}`,\n })\n }\n })\n\n return template\n },\n cacheKey: getBlockSchemaCacheKey({\n blockSlug: block.slug,\n buildSchemaOptions,\n fieldPath,\n isLocalized,\n isReference,\n isVersion: schemaBuildState.isVersion,\n }),\n definition: block,\n })\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.localeCodes.forEach((localeCode) => {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(`${field.name}.${localeCode}`).discriminator(block.slug, blockSchema)\n })\n } else {\n // @ts-expect-error Possible incorrect typing in mongoose types, this works\n schema.path(field.name).discriminator(block.slug, blockSchema)\n }\n })\n}\n\nconst checkbox: FieldSchemaGenerator<CheckboxField> = (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst code: FieldSchemaGenerator<CodeField> = (\n field: CodeField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst collapsible: FieldSchemaGenerator<CollapsibleField> = (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n )\n }\n })\n}\n\nconst date: FieldSchemaGenerator<DateField> = (\n field: DateField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst email: FieldSchemaGenerator<EmailField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst group: FieldSchemaGenerator<GroupField> = (\n field: GroupField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n if (fieldAffectsData(field)) {\n const formattedBaseSchema = formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized })\n\n // carry indexSortableFields through to versions if drafts enabled\n const indexSortableFields =\n buildSchemaOptions.indexSortableFields &&\n field.name === 'version' &&\n buildSchemaOptions.draftsEnabled\n\n const baseSchema: SchemaTypeOptions<any> = {\n ...formattedBaseSchema,\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n indexSortableFields,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: field.fields,\n isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/field:${field.name}`,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n field.fields.forEach((subField) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || field.localized) ?? false,\n schemaBuildState,\n )\n }\n })\n }\n}\n\nconst json: FieldSchemaGenerator<JSONField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst number: FieldSchemaGenerator<NumberField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst point: FieldSchemaGenerator<PointField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<unknown> = {\n type: {\n type: String,\n enum: ['Point'],\n ...(typeof field.defaultValue !== 'undefined' && {\n default: 'Point',\n }),\n },\n coordinates: {\n type: [Number],\n default: formatDefaultValue(field),\n required: false,\n },\n }\n\n if (\n buildSchemaOptions.disableUnique &&\n field.unique &&\n fieldShouldBeLocalized({ field, parentIsLocalized })\n ) {\n baseSchema.coordinates.sparse = true\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n\n if (field.index === true || field.index === undefined) {\n const indexOptions: IndexOptions = {}\n if (!buildSchemaOptions.disableUnique && field.unique) {\n indexOptions.sparse = true\n indexOptions.unique = true\n }\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n payload.config.localization.locales.forEach((locale) => {\n schema.index({ [`${field.name}.${locale.code}`]: '2dsphere' }, indexOptions)\n })\n } else {\n schema.index({ [field.name]: '2dsphere' }, indexOptions)\n }\n }\n}\n\nconst radio: FieldSchemaGenerator<RadioField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst relationship: FieldSchemaGenerator<RelationshipField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n) => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst richText: FieldSchemaGenerator<RichTextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst row: FieldSchemaGenerator<RowField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n )\n }\n })\n}\n\nconst select: FieldSchemaGenerator<SelectField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n enum: field.options.map((option) => {\n if (typeof option === 'object') {\n return option.value\n }\n return option\n }),\n }\n\n if (buildSchemaOptions.draftsEnabled || !field.required) {\n ;(baseSchema.enum as unknown[]).push(null)\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n field.hasMany ? [baseSchema] : baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n}\n\nconst tabs: FieldSchemaGenerator<TabsField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n schemaBuildState,\n): void => {\n field.tabs.forEach((tab) => {\n if (tabHasName(tab)) {\n if (fieldIsVirtual(tab)) {\n return\n }\n const baseSchema = {\n type: buildSchema({\n buildSchemaOptions: {\n disableUnique: buildSchemaOptions.disableUnique,\n draftsEnabled: buildSchemaOptions.draftsEnabled,\n options: {\n _id: false,\n id: false,\n minimize: false,\n },\n },\n configFields: tab.fields,\n isVersion: schemaBuildState.isVersion,\n parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n schemaBuildContext: schemaBuildState.context,\n schemaPath: `${schemaBuildState.path}/tab:${tab.name}`,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(tab, baseSchema, payload.config.localization, parentIsLocalized),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema = getSchemaGenerator(subField.type)\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n (parentIsLocalized || tab.localized) ?? false,\n schemaBuildState,\n )\n }\n })\n }\n })\n}\n\nconst text: FieldSchemaGenerator<TextField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst slug: FieldSchemaGenerator<SlugField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema: SchemaTypeOptions<any> = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst textarea: FieldSchemaGenerator<TextareaField> = (\n field: TextareaField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(field, baseSchema, payload.config.localization, parentIsLocalized),\n })\n}\n\nconst upload: FieldSchemaGenerator<UploadField> = (\n field,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n): void => {\n const hasManyRelations = Array.isArray(field.relationTo)\n let schemaToReturn: { [key: string]: any } = {}\n\n const valueType = getRelationshipValueType(field, payload)\n\n if (fieldShouldBeLocalized({ field, parentIsLocalized }) && payload.config.localization) {\n schemaToReturn = {\n _id: false,\n type: payload.config.localization.localeCodes.reduce((locales, locale) => {\n let localeSchema: { [key: string]: any } = {}\n\n if (hasManyRelations) {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.${locale}.relationTo`,\n },\n }\n } else {\n localeSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n }\n\n return {\n ...locales,\n [locale]: field.hasMany\n ? { type: [localeSchema], default: formatDefaultValue(field) }\n : localeSchema,\n }\n }, {}),\n localized: true,\n }\n } else if (hasManyRelations) {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n _id: false,\n type: mongoose.Schema.Types.Mixed,\n relationTo: { type: String, enum: field.relationTo },\n value: {\n type: valueType,\n refPath: `${field.name}.relationTo`,\n },\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n } else {\n schemaToReturn = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: valueType,\n ref: field.relationTo,\n }\n\n if (field.hasMany) {\n schemaToReturn = {\n type: [schemaToReturn],\n default: formatDefaultValue(field),\n }\n }\n }\n\n schema.add({\n [field.name]: schemaToReturn,\n })\n}\n\nconst getSchemaGenerator = (fieldType: string): FieldSchemaGenerator | null => {\n if (fieldType in fieldToSchemaMap) {\n return fieldToSchemaMap[fieldType as keyof typeof fieldToSchemaMap] as FieldSchemaGenerator\n }\n\n return null\n}\n\nconst fieldToSchemaMap = {\n slug,\n array,\n blocks,\n checkbox,\n code,\n collapsible,\n date,\n email,\n group,\n json,\n number,\n point,\n radio,\n relationship,\n richText,\n row,\n select,\n tabs,\n text,\n textarea,\n upload,\n}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const customIDType = payload.collections[field.relationTo]?.customIDType\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n if (payload.db.useBigIntForNumberIDs) {\n return mongoose.Schema.Types.BigInt\n } else {\n return mongoose.Schema.Types.Number\n }\n }\n\n return mongoose.Schema.Types.String\n }\n\n // has custom id relationTo\n if (\n field.relationTo.some((relationTo) => {\n return !!payload.collections[relationTo]?.customIDType\n })\n ) {\n return mongoose.Schema.Types.Mixed\n }\n\n return mongoose.Schema.Types.ObjectId\n}\n"],"names":["mongoose","branchField","createSchemaBuildContext","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","getBlockSchemaCacheKey","formatDefaultValue","field","defaultValue","undefined","formatBaseSchema","buildSchemaOptions","parentIsLocalized","disableUnique","draftsEnabled","indexSortableFields","schema","default","index","unique","required","type","sparse","hidden","localizeSchema","entity","localization","Array","isArray","locales","localeCodes","reduce","localeSchema","locale","_id","localized","buildSchema","args","configFields","flattenedFields","payload","schemaBuildContext","schemaBuildState","context","isVersion","path","schemaPath","allowIDField","options","fields","schemaFields","fieldsToSearch","idField","find","name","db","useBigIntForNumberIDs","Schema","Types","BigInt","Number","String","filter","forEach","addFieldSchema","getSchemaGenerator","compoundIndexes","requiredFields","requireExists","hasBranchScope","some","hasLocalizedIndexField","pathHasLocalized","hasLocalizedRequiredField","config","length","indexDefinition","resolveIndexPath","localizedPath","replaceAll","code","indexLocale","indexOptions","partialFilterExpression","Object","fromEntries","map","$exists","keys","join","array","baseSchema","id","minimize","add","blocks","fieldSchema","discriminatorKey","blockItem","block","isLocalized","Boolean","isReference","fieldPath","blockSchema","getOrCreate","build","template","blockField","slug","cacheKey","blockSlug","definition","localeCode","discriminator","checkbox","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Mixed","number","hasMany","point","enum","coordinates","radio","option","value","relationship","hasManyRelations","relationTo","schemaToReturn","valueType","getRelationshipValueType","refPath","ref","richText","row","select","push","tabs","tab","text","textarea","upload","fieldType","fieldToSchemaMap","customIDType","collections","ObjectId"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ declare const imports = "import { migrateBranching } from '@payloadcms/db-mongodb/migration-utils'";
2
+ declare const upSQL = " // Index synchronization must run outside the migration transaction.\n await migrateBranching({\n payload,\n })\n";
3
+ export { imports, upSQL };
4
+ //# sourceMappingURL=branching.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branching.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/branching.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,OAAO,8EAA8E,CAAA;AAC3F,QAAA,MAAM,KAAK,6HAIV,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ const imports = `import { migrateBranching } from '@payloadcms/db-mongodb/migration-utils'`;
2
+ const upSQL = ` // Index synchronization must run outside the migration transaction.
3
+ await migrateBranching({
4
+ payload,
5
+ })
6
+ `;
7
+ export { imports, upSQL };
8
+
9
+ //# sourceMappingURL=branching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/predefinedMigrations/branching.ts"],"sourcesContent":["const imports = `import { migrateBranching } from '@payloadcms/db-mongodb/migration-utils'`\nconst upSQL = ` // Index synchronization must run outside the migration transaction.\n await migrateBranching({\n payload,\n })\n`\n\nexport { imports, upSQL }\n"],"names":["imports","upSQL"],"mappings":"AAAA,MAAMA,UAAU,CAAC,yEAAyE,CAAC;AAC3F,MAAMC,QAAQ,CAAC;;;;AAIf,CAAC;AAED,SAASD,OAAO,EAAEC,KAAK,GAAE"}
@@ -0,0 +1,17 @@
1
+ import type { ClientSession } from 'mongoose';
2
+ import type { Payload } from 'payload';
3
+ type BranchingMigrationArgs = {
4
+ payload: Payload;
5
+ session?: ClientSession;
6
+ };
7
+ /**
8
+ * Backfills branch identity before replacing legacy indexes with the current schema indexes.
9
+ *
10
+ * Run this generated migration after enabling branching. Backfill errors stop the migration
11
+ * before any indexes are removed, so uniqueness conflicts remain visible and recoverable.
12
+ * Index synchronization removes indexes not declared in the configured Mongoose schema;
13
+ * declare user-managed indexes in that schema before running this migration.
14
+ */
15
+ export declare const migrateBranching: ({ payload, session, }: BranchingMigrationArgs) => Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=migrateBranching.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateBranching.d.ts","sourceRoot":"","sources":["../../src/predefinedMigrations/migrateBranching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtC,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,0BAG1B,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAqEvC,CAAA"}
@@ -0,0 +1,90 @@
1
+ import { branchField, MAIN_BRANCH } from 'payload';
2
+ const legacyMainFilter = {
3
+ $or: [
4
+ {
5
+ [branchField]: {
6
+ $exists: false
7
+ }
8
+ },
9
+ {
10
+ [branchField]: null
11
+ }
12
+ ]
13
+ };
14
+ /**
15
+ * Backfills branch identity before replacing legacy indexes with the current schema indexes.
16
+ *
17
+ * Run this generated migration after enabling branching. Backfill errors stop the migration
18
+ * before any indexes are removed, so uniqueness conflicts remain visible and recoverable.
19
+ * Index synchronization removes indexes not declared in the configured Mongoose schema;
20
+ * declare user-managed indexes in that schema before running this migration.
21
+ */ export const migrateBranching = async ({ payload, session })=>{
22
+ const branching = payload.config.branching;
23
+ if (!branching?.enabled) {
24
+ payload.logger.info({
25
+ msg: 'Branching is not enabled, skipping branching migration'
26
+ });
27
+ return;
28
+ }
29
+ const adapter = payload.db;
30
+ const modelsToSync = new Set();
31
+ const updateOptions = session ? {
32
+ session
33
+ } : {};
34
+ payload.logger.info({
35
+ msg: 'Starting branching data and index migration'
36
+ });
37
+ for (const collectionSlug of branching.branchableCollections){
38
+ const collectionModel = adapter.collections[collectionSlug];
39
+ const versionModel = adapter.versions[collectionSlug];
40
+ if (!collectionModel) {
41
+ throw new Error(`Could not find MongoDB model for branchable collection "${collectionSlug}".`);
42
+ }
43
+ await collectionModel.collection.updateMany(legacyMainFilter, {
44
+ $set: {
45
+ [branchField]: MAIN_BRANCH
46
+ }
47
+ }, updateOptions);
48
+ modelsToSync.add(collectionModel);
49
+ if (versionModel) {
50
+ await versionModel.collection.updateMany(legacyMainFilter, {
51
+ $set: {
52
+ [branchField]: MAIN_BRANCH
53
+ }
54
+ }, updateOptions);
55
+ modelsToSync.add(versionModel);
56
+ }
57
+ }
58
+ if (branching.branchableGlobals.size) {
59
+ await adapter.globals.collection.updateMany({
60
+ ...legacyMainFilter,
61
+ globalType: {
62
+ $in: Array.from(branching.branchableGlobals)
63
+ }
64
+ }, {
65
+ $set: {
66
+ [branchField]: MAIN_BRANCH
67
+ }
68
+ }, updateOptions);
69
+ modelsToSync.add(adapter.globals);
70
+ for (const globalSlug of branching.branchableGlobals){
71
+ const versionModel = adapter.versions[globalSlug];
72
+ if (versionModel) {
73
+ await versionModel.collection.updateMany(legacyMainFilter, {
74
+ $set: {
75
+ [branchField]: MAIN_BRANCH
76
+ }
77
+ }, updateOptions);
78
+ modelsToSync.add(versionModel);
79
+ }
80
+ }
81
+ }
82
+ for (const model of modelsToSync){
83
+ await model.syncIndexes();
84
+ }
85
+ payload.logger.info({
86
+ msg: 'Branching data and index migration completed successfully'
87
+ });
88
+ };
89
+
90
+ //# sourceMappingURL=migrateBranching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/predefinedMigrations/migrateBranching.ts"],"sourcesContent":["import type { ClientSession } from 'mongoose'\nimport type { Payload } from 'payload'\n\nimport { branchField, MAIN_BRANCH } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { CollectionModel, GlobalModel } from '../types.js'\n\ntype BranchingMigrationArgs = {\n payload: Payload\n session?: ClientSession\n}\n\ntype SyncableModel = CollectionModel | GlobalModel\n\nconst legacyMainFilter = {\n $or: [{ [branchField]: { $exists: false } }, { [branchField]: null }],\n}\n\n/**\n * Backfills branch identity before replacing legacy indexes with the current schema indexes.\n *\n * Run this generated migration after enabling branching. Backfill errors stop the migration\n * before any indexes are removed, so uniqueness conflicts remain visible and recoverable.\n * Index synchronization removes indexes not declared in the configured Mongoose schema;\n * declare user-managed indexes in that schema before running this migration.\n */\nexport const migrateBranching = async ({\n payload,\n session,\n}: BranchingMigrationArgs): Promise<void> => {\n const branching = payload.config.branching\n\n if (!branching?.enabled) {\n payload.logger.info({ msg: 'Branching is not enabled, skipping branching migration' })\n return\n }\n\n const adapter = payload.db as MongooseAdapter\n const modelsToSync = new Set<SyncableModel>()\n const updateOptions = session ? { session } : {}\n\n payload.logger.info({ msg: 'Starting branching data and index migration' })\n\n for (const collectionSlug of branching.branchableCollections) {\n const collectionModel = adapter.collections[collectionSlug]\n const versionModel = adapter.versions[collectionSlug]\n\n if (!collectionModel) {\n throw new Error(`Could not find MongoDB model for branchable collection \"${collectionSlug}\".`)\n }\n\n await collectionModel.collection.updateMany(\n legacyMainFilter,\n { $set: { [branchField]: MAIN_BRANCH } },\n updateOptions,\n )\n modelsToSync.add(collectionModel)\n\n if (versionModel) {\n await versionModel.collection.updateMany(\n legacyMainFilter,\n { $set: { [branchField]: MAIN_BRANCH } },\n updateOptions,\n )\n modelsToSync.add(versionModel)\n }\n }\n\n if (branching.branchableGlobals.size) {\n await adapter.globals.collection.updateMany(\n {\n ...legacyMainFilter,\n globalType: { $in: Array.from(branching.branchableGlobals) },\n },\n { $set: { [branchField]: MAIN_BRANCH } },\n updateOptions,\n )\n modelsToSync.add(adapter.globals)\n\n for (const globalSlug of branching.branchableGlobals) {\n const versionModel = adapter.versions[globalSlug]\n\n if (versionModel) {\n await versionModel.collection.updateMany(\n legacyMainFilter,\n { $set: { [branchField]: MAIN_BRANCH } },\n updateOptions,\n )\n modelsToSync.add(versionModel)\n }\n }\n }\n\n for (const model of modelsToSync) {\n await model.syncIndexes()\n }\n\n payload.logger.info({ msg: 'Branching data and index migration completed successfully' })\n}\n"],"names":["branchField","MAIN_BRANCH","legacyMainFilter","$or","$exists","migrateBranching","payload","session","branching","config","enabled","logger","info","msg","adapter","db","modelsToSync","Set","updateOptions","collectionSlug","branchableCollections","collectionModel","collections","versionModel","versions","Error","collection","updateMany","$set","add","branchableGlobals","size","globals","globalType","$in","Array","from","globalSlug","model","syncIndexes"],"mappings":"AAGA,SAASA,WAAW,EAAEC,WAAW,QAAQ,UAAS;AAYlD,MAAMC,mBAAmB;IACvBC,KAAK;QAAC;YAAE,CAACH,YAAY,EAAE;gBAAEI,SAAS;YAAM;QAAE;QAAG;YAAE,CAACJ,YAAY,EAAE;QAAK;KAAE;AACvE;AAEA;;;;;;;CAOC,GACD,OAAO,MAAMK,mBAAmB,OAAO,EACrCC,OAAO,EACPC,OAAO,EACgB;IACvB,MAAMC,YAAYF,QAAQG,MAAM,CAACD,SAAS;IAE1C,IAAI,CAACA,WAAWE,SAAS;QACvBJ,QAAQK,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAAyD;QACpF;IACF;IAEA,MAAMC,UAAUR,QAAQS,EAAE;IAC1B,MAAMC,eAAe,IAAIC;IACzB,MAAMC,gBAAgBX,UAAU;QAAEA;IAAQ,IAAI,CAAC;IAE/CD,QAAQK,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK;IAA8C;IAEzE,KAAK,MAAMM,kBAAkBX,UAAUY,qBAAqB,CAAE;QAC5D,MAAMC,kBAAkBP,QAAQQ,WAAW,CAACH,eAAe;QAC3D,MAAMI,eAAeT,QAAQU,QAAQ,CAACL,eAAe;QAErD,IAAI,CAACE,iBAAiB;YACpB,MAAM,IAAII,MAAM,CAAC,wDAAwD,EAAEN,eAAe,EAAE,CAAC;QAC/F;QAEA,MAAME,gBAAgBK,UAAU,CAACC,UAAU,CACzCzB,kBACA;YAAE0B,MAAM;gBAAE,CAAC5B,YAAY,EAAEC;YAAY;QAAE,GACvCiB;QAEFF,aAAaa,GAAG,CAACR;QAEjB,IAAIE,cAAc;YAChB,MAAMA,aAAaG,UAAU,CAACC,UAAU,CACtCzB,kBACA;gBAAE0B,MAAM;oBAAE,CAAC5B,YAAY,EAAEC;gBAAY;YAAE,GACvCiB;YAEFF,aAAaa,GAAG,CAACN;QACnB;IACF;IAEA,IAAIf,UAAUsB,iBAAiB,CAACC,IAAI,EAAE;QACpC,MAAMjB,QAAQkB,OAAO,CAACN,UAAU,CAACC,UAAU,CACzC;YACE,GAAGzB,gBAAgB;YACnB+B,YAAY;gBAAEC,KAAKC,MAAMC,IAAI,CAAC5B,UAAUsB,iBAAiB;YAAE;QAC7D,GACA;YAAEF,MAAM;gBAAE,CAAC5B,YAAY,EAAEC;YAAY;QAAE,GACvCiB;QAEFF,aAAaa,GAAG,CAACf,QAAQkB,OAAO;QAEhC,KAAK,MAAMK,cAAc7B,UAAUsB,iBAAiB,CAAE;YACpD,MAAMP,eAAeT,QAAQU,QAAQ,CAACa,WAAW;YAEjD,IAAId,cAAc;gBAChB,MAAMA,aAAaG,UAAU,CAACC,UAAU,CACtCzB,kBACA;oBAAE0B,MAAM;wBAAE,CAAC5B,YAAY,EAAEC;oBAAY;gBAAE,GACvCiB;gBAEFF,aAAaa,GAAG,CAACN;YACnB;QACF;IACF;IAEA,KAAK,MAAMe,SAAStB,aAAc;QAChC,MAAMsB,MAAMC,WAAW;IACzB;IAEAjC,QAAQK,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK;IAA4D;AACzF,EAAC"}