@payloadcms/db-mongodb 3.24.0 → 3.25.0-canary.36940b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/create.js +15 -15
- package/dist/create.js.map +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +15 -14
- package/dist/createGlobal.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +26 -23
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +26 -31
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +8 -6
- package/dist/deleteOne.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +8 -9
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +10 -9
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +10 -10
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +8 -6
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.js +8 -9
- package/dist/findVersions.js.map +1 -1
- package/dist/models/buildSchema.js +2 -0
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +12 -7
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +16 -0
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queryDrafts.js +13 -13
- package/dist/queryDrafts.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +15 -15
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +13 -13
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +12 -9
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +13 -13
- package/dist/updateVersion.js.map +1 -1
- package/dist/utilities/transform.d.ts +27 -0
- package/dist/utilities/transform.d.ts.map +1 -0
- package/dist/utilities/transform.js +224 -0
- package/dist/utilities/transform.js.map +1 -0
- package/dist/utilities/{sanitizeRelationshipIDs.spec.js → transform.spec.js} +11 -5
- package/dist/utilities/transform.spec.js.map +1 -0
- package/package.json +3 -3
- package/dist/utilities/sanitizeInternalFields.d.ts +0 -2
- package/dist/utilities/sanitizeInternalFields.d.ts.map +0 -1
- package/dist/utilities/sanitizeInternalFields.js +0 -20
- package/dist/utilities/sanitizeInternalFields.js.map +0 -1
- package/dist/utilities/sanitizeRelationshipIDs.d.ts +0 -10
- package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +0 -1
- package/dist/utilities/sanitizeRelationshipIDs.js +0 -130
- package/dist/utilities/sanitizeRelationshipIDs.js.map +0 -1
- package/dist/utilities/sanitizeRelationshipIDs.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/findGlobalVersions.ts"],"sourcesContent":["import type { PaginateOptions, QueryOptions } from 'mongoose'\nimport type { FindGlobalVersions } from 'payload'\n\nimport { buildVersionGlobalFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getSession } from './utilities/getSession.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/findGlobalVersions.ts"],"sourcesContent":["import type { PaginateOptions, QueryOptions } from 'mongoose'\nimport type { FindGlobalVersions } from 'payload'\n\nimport { buildVersionGlobalFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findGlobalVersions: FindGlobalVersions = async function findGlobalVersions(\n this: MongooseAdapter,\n { global, limit, locale, page, pagination, req, select, skip, sort: sortArg, where },\n) {\n const globalConfig = this.payload.globals.config.find(({ slug }) => slug === global)\n const Model = this.versions[global]\n const versionFields = buildVersionGlobalFields(this.payload.config, globalConfig, true)\n\n const session = await getSession(this, req)\n const options: QueryOptions = {\n limit,\n session,\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 buildQuery({\n adapter: this,\n fields: versionFields,\n locale,\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 hint: { _id: 1 },\n session,\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\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionGlobalFields(this.payload.config, globalConfig),\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildVersionGlobalFields","flattenWhereToOperators","buildQuery","buildSortParam","buildProjectionFromSelect","getSession","transform","findGlobalVersions","global","limit","locale","page","pagination","req","select","skip","sort","sortArg","where","globalConfig","payload","globals","config","find","slug","Model","versions","versionFields","session","options","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","timestamps","query","adapter","useEstimatedCount","length","paginationOptions","lean","leanWithId","projection","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","paginate","data","docs","operation"],"mappings":"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"}
|
package/dist/findOne.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAUtC,eAAO,MAAM,OAAO,EAAE,OAoDrB,CAAA"}
|
package/dist/findOne.js
CHANGED
|
@@ -2,7 +2,7 @@ import { buildQuery } from './queries/buildQuery.js';
|
|
|
2
2
|
import { buildJoinAggregation } from './utilities/buildJoinAggregation.js';
|
|
3
3
|
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
|
4
4
|
import { getSession } from './utilities/getSession.js';
|
|
5
|
-
import {
|
|
5
|
+
import { transform } from './utilities/transform.js';
|
|
6
6
|
export const findOne = async function findOne({ collection, joins, locale, req, select, where }) {
|
|
7
7
|
const Model = this.collections[collection];
|
|
8
8
|
const collectionConfig = this.payload.collections[collection].config;
|
|
@@ -47,11 +47,13 @@ export const findOne = async function findOne({ collection, joins, locale, req,
|
|
|
47
47
|
if (!doc) {
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
transform({
|
|
51
|
+
adapter: this,
|
|
52
|
+
data: doc,
|
|
53
|
+
fields: collectionConfig.fields,
|
|
54
|
+
operation: 'read'
|
|
55
|
+
});
|
|
56
|
+
return doc;
|
|
55
57
|
};
|
|
56
58
|
|
|
57
59
|
//# sourceMappingURL=findOne.js.map
|
package/dist/findOne.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { AggregateOptions, QueryOptions } from 'mongoose'\nimport type {
|
|
1
|
+
{"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { AggregateOptions, QueryOptions } from 'mongoose'\nimport type { FindOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { collection, joins, locale, req, select, where },\n) {\n const Model = this.collections[collection]\n const collectionConfig = this.payload.collections[collection].config\n const session = await getSession(this, req)\n const options: AggregateOptions & QueryOptions = {\n lean: true,\n session,\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug: collection,\n fields: collectionConfig.flattenedFields,\n locale,\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, { session })\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 transform({ adapter: this, data: doc, fields: collectionConfig.fields, operation: 'read' })\n\n return doc\n}\n"],"names":["buildQuery","buildJoinAggregation","buildProjectionFromSelect","getSession","transform","findOne","collection","joins","locale","req","select","where","Model","collections","collectionConfig","payload","config","session","options","lean","query","adapter","collectionSlug","fields","flattenedFields","projection","aggregate","limit","doc","data","operation"],"mappings":"AAKA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,UAAU,EAAEC,KAAK,EAAEC,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAEjD,MAAMC,QAAQ,IAAI,CAACC,WAAW,CAACP,WAAW;IAC1C,MAAMQ,mBAAmB,IAAI,CAACC,OAAO,CAACF,WAAW,CAACP,WAAW,CAACU,MAAM;IACpE,MAAMC,UAAU,MAAMd,WAAW,IAAI,EAAEM;IACvC,MAAMS,UAA2C;QAC/CC,MAAM;QACNF;IACF;IAEA,MAAMG,QAAQ,MAAMpB,WAAW;QAC7BqB,SAAS,IAAI;QACbC,gBAAgBhB;QAChBiB,QAAQT,iBAAiBU,eAAe;QACxChB;QACAG;IACF;IAEA,MAAMc,aAAavB,0BAA0B;QAC3CmB,SAAS,IAAI;QACbE,QAAQT,iBAAiBU,eAAe;QACxCd;IACF;IAEA,MAAMgB,YAAY,MAAMzB,qBAAqB;QAC3CoB,SAAS,IAAI;QACbf;QACAQ;QACAP;QACAoB,OAAO;QACPnB;QACAiB;QACAL;IACF;IAEA,IAAIQ;IACJ,IAAIF,WAAW;;QACZ,CAACE,IAAI,GAAG,MAAMhB,MAAMc,SAAS,CAACA,WAAW;YAAET;QAAQ;IACtD,OAAO;;QACHC,QAAoCO,UAAU,GAAGA;QACnDG,MAAM,MAAMhB,MAAMP,OAAO,CAACe,OAAO,CAAC,GAAGF;IACvC;IAEA,IAAI,CAACU,KAAK;QACR,OAAO;IACT;IAEAxB,UAAU;QAAEiB,SAAS,IAAI;QAAEQ,MAAMD;QAAKL,QAAQT,iBAAiBS,MAAM;QAAEO,WAAW;IAAO;IAEzF,OAAOF;AACT,EAAC"}
|
package/dist/findVersions.js
CHANGED
|
@@ -3,7 +3,7 @@ import { buildQuery } from './queries/buildQuery.js';
|
|
|
3
3
|
import { buildSortParam } from './queries/buildSortParam.js';
|
|
4
4
|
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
|
5
5
|
import { getSession } from './utilities/getSession.js';
|
|
6
|
-
import {
|
|
6
|
+
import { transform } from './utilities/transform.js';
|
|
7
7
|
export const findVersions = async function findVersions({ collection, limit, locale, page, pagination, req = {}, select, skip, sort: sortArg, where }) {
|
|
8
8
|
const Model = this.versions[collection];
|
|
9
9
|
const collectionConfig = this.payload.collections[collection].config;
|
|
@@ -83,14 +83,13 @@ export const findVersions = async function findVersions({ collection, limit, loc
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
const result = await Model.paginate(query, paginationOptions);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
};
|
|
86
|
+
transform({
|
|
87
|
+
adapter: this,
|
|
88
|
+
data: result.docs,
|
|
89
|
+
fields: buildVersionCollectionFields(this.payload.config, collectionConfig),
|
|
90
|
+
operation: 'read'
|
|
91
|
+
});
|
|
92
|
+
return result;
|
|
94
93
|
};
|
|
95
94
|
|
|
96
95
|
//# sourceMappingURL=findVersions.js.map
|
package/dist/findVersions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/findVersions.ts"],"sourcesContent":["import type { PaginateOptions, QueryOptions } from 'mongoose'\nimport type { FindVersions } from 'payload'\n\nimport { buildVersionCollectionFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getSession } from './utilities/getSession.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/findVersions.ts"],"sourcesContent":["import type { PaginateOptions, QueryOptions } from 'mongoose'\nimport type { FindVersions } from 'payload'\n\nimport { buildVersionCollectionFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findVersions: FindVersions = async function findVersions(\n this: MongooseAdapter,\n { collection, limit, locale, page, pagination, req = {}, select, skip, sort: sortArg, where },\n) {\n const Model = this.versions[collection]\n const collectionConfig = this.payload.collections[collection].config\n const session = await getSession(this, req)\n const options: QueryOptions = {\n limit,\n session,\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 fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const query = await buildQuery({\n adapter: this,\n fields,\n locale,\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,\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 hint: { _id: 1 },\n session,\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\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionCollectionFields(this.payload.config, collectionConfig),\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildVersionCollectionFields","flattenWhereToOperators","buildQuery","buildSortParam","buildProjectionFromSelect","getSession","transform","findVersions","collection","limit","locale","page","pagination","req","select","skip","sort","sortArg","where","Model","versions","collectionConfig","payload","collections","config","session","options","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","flattenedFields","timestamps","query","adapter","useEstimatedCount","length","paginationOptions","lean","leanWithId","projection","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","paginate","data","docs","operation"],"mappings":"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"}
|
|
@@ -335,6 +335,7 @@ const fieldToSchemaMap = {
|
|
|
335
335
|
parentIsLocalized
|
|
336
336
|
}) && payload.config.localization) {
|
|
337
337
|
schemaToReturn = {
|
|
338
|
+
_id: false,
|
|
338
339
|
type: payload.config.localization.localeCodes.reduce((locales, locale)=>{
|
|
339
340
|
let localeSchema = {};
|
|
340
341
|
if (hasManyRelations) {
|
|
@@ -550,6 +551,7 @@ const fieldToSchemaMap = {
|
|
|
550
551
|
parentIsLocalized
|
|
551
552
|
}) && payload.config.localization) {
|
|
552
553
|
schemaToReturn = {
|
|
554
|
+
_id: false,
|
|
553
555
|
type: payload.config.localization.localeCodes.reduce((locales, locale)=>{
|
|
554
556
|
let localeSchema = {};
|
|
555
557
|
if (hasManyRelations) {
|
|
@@ -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 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 SanitizedLocalizationConfig,\n type SelectField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator = (\n field: Field,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n) => void\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,\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 configFields: Field[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const { buildSchemaOptions = {}, configFields, parentIsLocalized, payload } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id: idField.type === 'number' ? Number : 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)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[field.type]\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n }\n })\n\n return schema\n}\n\nconst fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {\n array: (field: ArrayField, schema, payload, buildSchemaOptions, parentIsLocalized) => {\n const baseSchema = {\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 parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n blocks: (field: BlocksField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const fieldSchema = {\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.blockReferences ?? field.blocks).forEach((blockItem) => {\n const blockSchema = new mongoose.Schema({}, { _id: false, id: false })\n\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n block.fields.forEach((blockField) => {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[blockField.type]\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n parentIsLocalized || field.localized,\n )\n }\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 checkbox: (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n code: (field: CodeField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n collapsible: (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n ): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n },\n date: (field: DateField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n email: (field: EmailField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n group: (field: GroupField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\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 = {\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 parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n json: (field: JSONField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n number: (field: NumberField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n point: (field: PointField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\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 radio: (field: RadioField, schema, payload, buildSchemaOptions, parentIsLocalized): 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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n relationship: (\n field: RelationshipField,\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 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 richText: (\n field: RichTextField,\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n row: (field: RowField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n },\n select: (field: SelectField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 if (buildSchemaOptions.draftsEnabled || !field.required) {\n baseSchema.enum.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 tabs: (field: TabsField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(\n tab,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized || tab.localized,\n )\n }\n })\n }\n })\n },\n text: (field: TextField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n textarea: (\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n upload: (field: UploadField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 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}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const { customIDType } = payload.collections[field.relationTo]\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n return mongoose.Schema.Types.Number\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","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","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","payload","allowIDField","options","fields","schemaFields","idField","find","name","Number","String","filter","Schema","forEach","addFieldSchema","fieldToSchemaMap","array","baseSchema","id","minimize","add","config","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","path","discriminator","slug","checkbox","Boolean","code","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Types","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","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 type CheckboxField,\n type CodeField,\n type CollapsibleField,\n type DateField,\n type EmailField,\n type Field,\n type FieldAffectingData,\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 SanitizedLocalizationConfig,\n type SelectField,\n type Tab,\n type TabsField,\n type TextareaField,\n type TextField,\n type UploadField,\n} from 'payload'\nimport {\n fieldAffectsData,\n fieldIsPresentationalOnly,\n fieldIsVirtual,\n fieldShouldBeLocalized,\n tabHasName,\n} from 'payload/shared'\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\ntype FieldSchemaGenerator = (\n field: Field,\n schema: Schema,\n config: Payload,\n buildSchemaOptions: BuildSchemaOptions,\n parentIsLocalized: boolean,\n) => void\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,\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 configFields: Field[]\n parentIsLocalized?: boolean\n payload: Payload\n}): Schema => {\n const { buildSchemaOptions = {}, configFields, parentIsLocalized, payload } = args\n const { allowIDField, options } = buildSchemaOptions\n let fields = {}\n\n let schemaFields = configFields\n\n if (!allowIDField) {\n const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (idField) {\n fields = {\n _id: idField.type === 'number' ? Number : 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)\n\n schemaFields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n if (!fieldIsPresentationalOnly(field)) {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[field.type]\n\n if (addFieldSchema) {\n addFieldSchema(field, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n }\n })\n\n return schema\n}\n\nconst fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {\n array: (field: ArrayField, schema, payload, buildSchemaOptions, parentIsLocalized) => {\n const baseSchema = {\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 parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n ],\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n blocks: (field: BlocksField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const fieldSchema = {\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.blockReferences ?? field.blocks).forEach((blockItem) => {\n const blockSchema = new mongoose.Schema({}, { _id: false, id: false })\n\n const block = typeof blockItem === 'string' ? payload.blocks[blockItem] : blockItem\n\n block.fields.forEach((blockField) => {\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[blockField.type]\n if (addFieldSchema) {\n addFieldSchema(\n blockField,\n blockSchema,\n payload,\n buildSchemaOptions,\n parentIsLocalized || field.localized,\n )\n }\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 checkbox: (\n field: CheckboxField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n ): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Boolean,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n code: (field: CodeField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n collapsible: (\n field: CollapsibleField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized,\n ): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n },\n date: (field: DateField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: Date,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n email: (field: EmailField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n group: (field: GroupField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\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 = {\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 parentIsLocalized: parentIsLocalized || field.localized,\n payload,\n }),\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n json: (field: JSONField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: mongoose.Schema.Types.Mixed,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n number: (field: NumberField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [Number] : Number,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n point: (field: PointField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\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 radio: (field: RadioField, schema, payload, buildSchemaOptions, parentIsLocalized): 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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n relationship: (\n field: RelationshipField,\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 richText: (\n field: RichTextField,\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n row: (field: RowField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n field.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(subField, schema, payload, buildSchemaOptions, parentIsLocalized)\n }\n })\n },\n select: (field: SelectField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 if (buildSchemaOptions.draftsEnabled || !field.required) {\n baseSchema.enum.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 tabs: (field: TabsField, schema, payload, buildSchemaOptions, parentIsLocalized): 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 parentIsLocalized: parentIsLocalized || tab.localized,\n payload,\n }),\n }\n\n schema.add({\n [tab.name]: localizeSchema(\n tab,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n } else {\n tab.fields.forEach((subField: Field) => {\n if (fieldIsVirtual(subField)) {\n return\n }\n const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]\n\n if (addFieldSchema) {\n addFieldSchema(\n subField,\n schema,\n payload,\n buildSchemaOptions,\n parentIsLocalized || tab.localized,\n )\n }\n })\n }\n })\n },\n text: (field: TextField, schema, payload, buildSchemaOptions, parentIsLocalized): void => {\n const baseSchema = {\n ...formatBaseSchema({ buildSchemaOptions, field, parentIsLocalized }),\n type: field.hasMany ? [String] : String,\n }\n\n schema.add({\n [field.name]: localizeSchema(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n textarea: (\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(\n field,\n baseSchema,\n payload.config.localization,\n parentIsLocalized,\n ),\n })\n },\n upload: (field: UploadField, schema, payload, buildSchemaOptions, parentIsLocalized): 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}\n\nconst getRelationshipValueType = (field: RelationshipField | UploadField, payload: Payload) => {\n if (typeof field.relationTo === 'string') {\n const { customIDType } = payload.collections[field.relationTo]\n\n if (!customIDType) {\n return mongoose.Schema.Types.ObjectId\n }\n\n if (customIDType === 'number') {\n return mongoose.Schema.Types.Number\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","fieldAffectsData","fieldIsPresentationalOnly","fieldIsVirtual","fieldShouldBeLocalized","tabHasName","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","payload","allowIDField","options","fields","schemaFields","idField","find","name","Number","String","filter","Schema","forEach","addFieldSchema","fieldToSchemaMap","array","baseSchema","id","minimize","add","config","blocks","fieldSchema","discriminatorKey","blockReferences","blockItem","blockSchema","block","blockField","localeCode","path","discriminator","slug","checkbox","Boolean","code","collapsible","subField","date","Date","email","group","formattedBaseSchema","json","Types","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","customIDType","collections","ObjectId","some"],"mappings":"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"}
|
|
@@ -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;
|
|
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;AA2GrE,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,CA8FhB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload';
|
|
2
2
|
import { getSession } from '../utilities/getSession.js';
|
|
3
|
-
import {
|
|
4
|
-
const migrateModelWithBatching = async ({ batchSize, config, fields, Model, parentIsLocalized, session })=>{
|
|
3
|
+
import { transform } from '../utilities/transform.js';
|
|
4
|
+
const migrateModelWithBatching = async ({ batchSize, config, db, fields, Model, parentIsLocalized, session })=>{
|
|
5
5
|
let hasNext = true;
|
|
6
6
|
let skip = 0;
|
|
7
7
|
while(hasNext){
|
|
@@ -19,10 +19,11 @@ const migrateModelWithBatching = async ({ batchSize, config, fields, Model, pare
|
|
|
19
19
|
docs.pop();
|
|
20
20
|
}
|
|
21
21
|
for (const doc of docs){
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
transform({
|
|
23
|
+
adapter: db,
|
|
24
24
|
data: doc,
|
|
25
25
|
fields,
|
|
26
|
+
operation: 'write',
|
|
26
27
|
parentIsLocalized
|
|
27
28
|
});
|
|
28
29
|
}
|
|
@@ -88,6 +89,7 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
88
89
|
await migrateModelWithBatching({
|
|
89
90
|
batchSize,
|
|
90
91
|
config,
|
|
92
|
+
db,
|
|
91
93
|
fields: collection.fields,
|
|
92
94
|
Model: db.collections[collection.slug],
|
|
93
95
|
parentIsLocalized: false,
|
|
@@ -100,6 +102,7 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
100
102
|
await migrateModelWithBatching({
|
|
101
103
|
batchSize,
|
|
102
104
|
config,
|
|
105
|
+
db,
|
|
103
106
|
fields: buildVersionCollectionFields(config, collection),
|
|
104
107
|
Model: db.versions[collection.slug],
|
|
105
108
|
parentIsLocalized: false,
|
|
@@ -122,10 +125,11 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
122
125
|
});
|
|
123
126
|
// in case if the global doesn't exist in the database yet (not saved)
|
|
124
127
|
if (doc) {
|
|
125
|
-
|
|
126
|
-
|
|
128
|
+
transform({
|
|
129
|
+
adapter: db,
|
|
127
130
|
data: doc,
|
|
128
|
-
fields: global.fields
|
|
131
|
+
fields: global.fields,
|
|
132
|
+
operation: 'write'
|
|
129
133
|
});
|
|
130
134
|
await GlobalsModel.collection.updateOne({
|
|
131
135
|
globalType: global.slug
|
|
@@ -142,6 +146,7 @@ export async function migrateRelationshipsV2_V3({ batchSize, req }) {
|
|
|
142
146
|
await migrateModelWithBatching({
|
|
143
147
|
batchSize,
|
|
144
148
|
config,
|
|
149
|
+
db,
|
|
145
150
|
fields: buildVersionGlobalFields(config, global),
|
|
146
151
|
Model: db.versions[global.slug],
|
|
147
152
|
parentIsLocalized: false,
|
|
@@ -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 { getSession } from '../utilities/getSession.js'\nimport {
|
|
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 { getSession } from '../utilities/getSession.js'\nimport { transform } from '../utilities/transform.js'\n\nconst migrateModelWithBatching = async ({\n batchSize,\n config,\n db,\n fields,\n Model,\n parentIsLocalized,\n session,\n}: {\n batchSize: number\n config: SanitizedConfig\n db: MongooseAdapter\n fields: Field[]\n Model: Model<any>\n parentIsLocalized: boolean\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: db, data: doc, fields, operation: 'write', parentIsLocalized })\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 (typeof block === 'string') {\n // Skip - string blocks have been added in v3 and thus don't need to be migrated\n continue\n }\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) {\n if (hasRelationshipOrUploadField(collection)) {\n payload.logger.info(`Migrating collection \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n db,\n fields: collection.fields,\n Model: db.collections[collection.slug],\n parentIsLocalized: false,\n session,\n })\n\n payload.logger.info(`Migrated collection \"${collection.slug}\"`)\n }\n\n if (collection.versions) {\n payload.logger.info(`Migrating collection versions \"${collection.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n db,\n fields: buildVersionCollectionFields(config, collection),\n Model: db.versions[collection.slug],\n parentIsLocalized: false,\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) {\n if (hasRelationshipOrUploadField(global)) {\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.fields,\n operation: 'write',\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\n if (global.versions) {\n payload.logger.info(`Migrating global versions \"${global.slug}\"`)\n\n await migrateModelWithBatching({\n batchSize,\n config,\n db,\n fields: buildVersionGlobalFields(config, global),\n Model: db.versions[global.slug],\n parentIsLocalized: false,\n session,\n })\n\n payload.logger.info(`Migrated global versions \"${global.slug}\"`)\n }\n }\n}\n"],"names":["buildVersionCollectionFields","buildVersionGlobalFields","getSession","transform","migrateModelWithBatching","batchSize","config","db","fields","Model","parentIsLocalized","session","hasNext","skip","docs","find","lean","limit","length","pop","doc","adapter","data","operation","collection","bulkWrite","map","updateOne","filter","_id","update","$set","hasRelationshipOrUploadField","field","type","block","blocks","tab","tabs","migrateRelationshipsV2_V3","req","payload","collections","logger","info","slug","versions","globals","GlobalsModel","global","findOne","globalType","$eq"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyB,OAAO,EAAE,MAAM,SAAS,CAAA;AAW7E,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAOD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,cAAc,EACd,MAAM,EACN,UAAU,EACV,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,GAAG,GACJ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;CACb,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"buildSearchParams.d.ts","sourceRoot":"","sources":["../../src/queries/buildSearchParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyB,OAAO,EAAE,MAAM,SAAS,CAAA;AAW7E,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAOD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,cAAc,EACd,MAAM,EACN,UAAU,EACV,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,GAAG,GACJ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;CACb,GAAG,OAAO,CAAC,WAAW,CAAC,CAuPvB"}
|
|
@@ -202,6 +202,22 @@ const subQueryOptions = {
|
|
|
202
202
|
};
|
|
203
203
|
return result;
|
|
204
204
|
}
|
|
205
|
+
if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {
|
|
206
|
+
const words = formattedValue.split(' ');
|
|
207
|
+
const result = {
|
|
208
|
+
value: {
|
|
209
|
+
$and: words.map((word)=>({
|
|
210
|
+
[path]: {
|
|
211
|
+
$not: {
|
|
212
|
+
$options: 'i',
|
|
213
|
+
$regex: word.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&')
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}))
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
205
221
|
// Some operators like 'near' need to define a full query
|
|
206
222
|
// so if there is no operator key, just return the value
|
|
207
223
|
if (!operatorKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { FlattenedField, Operator, PathToQuery, Payload } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { getLocalizedPaths } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst subQueryOptions = {\n lean: true,\n limit: 50,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n val,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: string\n parentIsLocalized: boolean\n payload: Payload\n val: unknown\n}): Promise<SearchParam> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') {\n sanitizedPath = '_id'\n }\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = payload.collections[collectionSlug]?.customIDType\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDFieldType) {\n idFieldType = customIDFieldType\n hasCustomID = true\n }\n\n paths.push({\n collectionSlug,\n complete: true,\n field: {\n name: 'id',\n type: idFieldType,\n } as FlattenedField,\n parentIsLocalized,\n path: '_id',\n })\n } else {\n paths = getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n parentIsLocalized,\n payload,\n })\n }\n\n const [{ field, path }] = paths\n if (path) {\n const sanitizedQueryValue = sanitizeQueryValue({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n })\n\n if (!sanitizedQueryValue) {\n return undefined\n }\n\n const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n if (rawQuery) {\n return { value: rawQuery }\n }\n\n // If there are multiple collections to search through,\n // Recursively build up a list of query constraints\n if (paths.length > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n\n const initialRelationshipQuery = {\n value: {},\n } as SearchParam\n\n const relationshipQuery = await pathsToQuery.reduce(\n async (priorQuery, { collectionSlug: slug, path: subPath }, i) => {\n const priorQueryResult = await priorQuery\n\n const SubModel = (payload.db as MongooseAdapter).collections[slug]\n\n // On the \"deepest\" collection,\n // Search on the value passed through the query\n if (i === 0) {\n const subQuery = await SubModel.buildQuery({\n locale,\n payload,\n where: {\n [subPath]: {\n [formattedOperator]: val,\n },\n },\n })\n\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in: unknown[] = []\n\n result.forEach((doc) => {\n const stringID = doc._id.toString()\n $in.push(stringID)\n\n if (Types.ObjectId.isValid(stringID)) {\n $in.push(doc._id)\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1].path\n\n return {\n value: { [nextSubPath]: { $in } },\n }\n }\n\n const subQuery = priorQueryResult.value\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in = result.map((doc) => doc._id)\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n return {\n path,\n value: { $in },\n }\n }\n\n return {\n value: {\n _id: { $in },\n },\n }\n },\n Promise.resolve(initialRelationshipQuery),\n )\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n let multiIDCondition = '$or'\n if (operatorKey === '$ne') {\n multiIDCondition = '$and'\n }\n\n const result = {\n value: {\n [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (Types.ObjectId.isValid(formattedValue)) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n })\n } else {\n ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n (relationTo) => {\n const isRelatedToCustomNumberID =\n payload.collections[relationTo]?.customIDType === 'number'\n\n if (isRelatedToCustomNumberID) {\n hasNumberIDRelation = true\n }\n },\n )\n\n if (hasNumberIDRelation) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: parseFloat(formattedValue) },\n })\n }\n }\n }\n\n if (result.value[multiIDCondition].length > 1) {\n return result\n }\n }\n\n if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $options: 'i',\n $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n },\n })),\n },\n }\n\n return result\n }\n\n // Some operators like 'near' need to define a full query\n // so if there is no operator key, just return the value\n if (!operatorKey) {\n return {\n path,\n value: formattedValue,\n }\n }\n\n return {\n path,\n value: { [operatorKey]: formattedValue },\n }\n }\n }\n return undefined\n}\n"],"names":["Types","getLocalizedPaths","validOperatorSet","operatorMap","sanitizeQueryValue","subQueryOptions","lean","limit","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","idFieldType","push","complete","field","name","type","path","sanitizedQueryValue","undefined","formattedOperator","rawQuery","formattedValue","value","length","pathsToQuery","slice","reverse","initialRelationshipQuery","relationshipQuery","reduce","priorQuery","slug","subPath","i","priorQueryResult","SubModel","db","subQuery","buildQuery","where","result","find","$in","forEach","doc","stringID","_id","toString","ObjectId","isValid","nextSubPath","map","Promise","resolve","has","operatorKey","hasNumberIDRelation","multiIDCondition","Array","isArray","relationTo","isRelatedToCustomNumberID","parseFloat","words","split","$and","word","$options","$regex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { FlattenedField, Operator, PathToQuery, Payload } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { getLocalizedPaths } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst subQueryOptions = {\n lean: true,\n limit: 50,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n val,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: string\n parentIsLocalized: boolean\n payload: Payload\n val: unknown\n}): Promise<SearchParam> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') {\n sanitizedPath = '_id'\n }\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = payload.collections[collectionSlug]?.customIDType\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDFieldType) {\n idFieldType = customIDFieldType\n hasCustomID = true\n }\n\n paths.push({\n collectionSlug,\n complete: true,\n field: {\n name: 'id',\n type: idFieldType,\n } as FlattenedField,\n parentIsLocalized,\n path: '_id',\n })\n } else {\n paths = getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n parentIsLocalized,\n payload,\n })\n }\n\n const [{ field, path }] = paths\n if (path) {\n const sanitizedQueryValue = sanitizeQueryValue({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n })\n\n if (!sanitizedQueryValue) {\n return undefined\n }\n\n const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n if (rawQuery) {\n return { value: rawQuery }\n }\n\n // If there are multiple collections to search through,\n // Recursively build up a list of query constraints\n if (paths.length > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n\n const initialRelationshipQuery = {\n value: {},\n } as SearchParam\n\n const relationshipQuery = await pathsToQuery.reduce(\n async (priorQuery, { collectionSlug: slug, path: subPath }, i) => {\n const priorQueryResult = await priorQuery\n\n const SubModel = (payload.db as MongooseAdapter).collections[slug]\n\n // On the \"deepest\" collection,\n // Search on the value passed through the query\n if (i === 0) {\n const subQuery = await SubModel.buildQuery({\n locale,\n payload,\n where: {\n [subPath]: {\n [formattedOperator]: val,\n },\n },\n })\n\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in: unknown[] = []\n\n result.forEach((doc) => {\n const stringID = doc._id.toString()\n $in.push(stringID)\n\n if (Types.ObjectId.isValid(stringID)) {\n $in.push(doc._id)\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1].path\n\n return {\n value: { [nextSubPath]: { $in } },\n }\n }\n\n const subQuery = priorQueryResult.value\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in = result.map((doc) => doc._id)\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n return {\n path,\n value: { $in },\n }\n }\n\n return {\n value: {\n _id: { $in },\n },\n }\n },\n Promise.resolve(initialRelationshipQuery),\n )\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n let multiIDCondition = '$or'\n if (operatorKey === '$ne') {\n multiIDCondition = '$and'\n }\n\n const result = {\n value: {\n [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (Types.ObjectId.isValid(formattedValue)) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n })\n } else {\n ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n (relationTo) => {\n const isRelatedToCustomNumberID =\n payload.collections[relationTo]?.customIDType === 'number'\n\n if (isRelatedToCustomNumberID) {\n hasNumberIDRelation = true\n }\n },\n )\n\n if (hasNumberIDRelation) {\n result.value[multiIDCondition].push({\n [path]: { [operatorKey]: parseFloat(formattedValue) },\n })\n }\n }\n }\n\n if (result.value[multiIDCondition].length > 1) {\n return result\n }\n }\n\n if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $options: 'i',\n $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n },\n })),\n },\n }\n\n return result\n }\n\n if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $not: {\n $options: 'i',\n $regex: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\n },\n },\n })),\n },\n }\n\n return result\n }\n\n // Some operators like 'near' need to define a full query\n // so if there is no operator key, just return the value\n if (!operatorKey) {\n return {\n path,\n value: formattedValue,\n }\n }\n\n return {\n path,\n value: { [operatorKey]: formattedValue },\n }\n }\n }\n return undefined\n}\n"],"names":["Types","getLocalizedPaths","validOperatorSet","operatorMap","sanitizeQueryValue","subQueryOptions","lean","limit","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","idFieldType","push","complete","field","name","type","path","sanitizedQueryValue","undefined","formattedOperator","rawQuery","formattedValue","value","length","pathsToQuery","slice","reverse","initialRelationshipQuery","relationshipQuery","reduce","priorQuery","slug","subPath","i","priorQueryResult","SubModel","db","subQuery","buildQuery","where","result","find","$in","forEach","doc","stringID","_id","toString","ObjectId","isValid","nextSubPath","map","Promise","resolve","has","operatorKey","hasNumberIDRelation","multiIDCondition","Array","isArray","relationTo","isRelatedToCustomNumberID","parseFloat","words","split","$and","word","$options","$regex","$not"],"mappings":"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"}
|