@payloadcms/db-mongodb 3.0.0-canary.5390729 → 3.0.0-canary.5624723
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +18 -4
- package/dist/connect.js.map +1 -1
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +9 -2
- package/dist/count.js.map +1 -1
- package/dist/countGlobalVersions.d.ts +3 -0
- package/dist/countGlobalVersions.d.ts.map +1 -0
- package/dist/countGlobalVersions.js +40 -0
- package/dist/countGlobalVersions.js.map +1 -0
- package/dist/countVersions.d.ts +3 -0
- package/dist/countVersions.d.ts.map +1 -0
- package/dist/countVersions.js +40 -0
- package/dist/countVersions.js.map +1 -0
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +17 -4
- package/dist/create.js.map +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +11 -6
- package/dist/createGlobal.js.map +1 -1
- package/dist/createGlobalVersion.d.ts +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +14 -5
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createMigration.d.ts.map +1 -1
- package/dist/createMigration.js +9 -7
- package/dist/createMigration.js.map +1 -1
- package/dist/createVersion.d.ts +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +32 -10
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +1 -1
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +12 -4
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +1 -1
- package/dist/deleteVersions.js.map +1 -1
- package/dist/exports/migration-utils.d.ts +3 -0
- package/dist/exports/migration-utils.d.ts.map +1 -0
- package/dist/exports/migration-utils.js +4 -0
- package/dist/exports/migration-utils.js.map +1 -0
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +35 -6
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +10 -4
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +18 -7
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +28 -4
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +17 -6
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts +68 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -7
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +21 -19
- package/dist/init.js.map +1 -1
- package/dist/migrateFresh.js.map +1 -1
- package/dist/models/buildCollectionSchema.d.ts +2 -3
- package/dist/models/buildCollectionSchema.d.ts.map +1 -1
- package/dist/models/buildCollectionSchema.js +19 -7
- package/dist/models/buildCollectionSchema.js.map +1 -1
- package/dist/models/buildGlobalModel.d.ts +2 -2
- package/dist/models/buildGlobalModel.d.ts.map +1 -1
- package/dist/models/buildGlobalModel.js +6 -6
- package/dist/models/buildGlobalModel.js.map +1 -1
- package/dist/models/buildSchema.d.ts +2 -3
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +191 -77
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts +6 -0
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -0
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +141 -0
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -0
- package/dist/predefinedMigrations/migrateVersionsV1_V2.d.ts +5 -0
- package/dist/predefinedMigrations/migrateVersionsV1_V2.d.ts.map +1 -0
- package/dist/predefinedMigrations/migrateVersionsV1_V2.js +107 -0
- package/dist/predefinedMigrations/migrateVersionsV1_V2.js.map +1 -0
- package/dist/predefinedMigrations/relationships-v2-v3.d.ts +4 -0
- package/dist/predefinedMigrations/relationships-v2-v3.d.ts.map +1 -0
- package/dist/predefinedMigrations/relationships-v2-v3.js +9 -0
- package/dist/predefinedMigrations/relationships-v2-v3.js.map +1 -0
- package/dist/predefinedMigrations/versions-v1-v2.d.ts +4 -0
- package/dist/predefinedMigrations/versions-v1-v2.d.ts.map +1 -0
- package/dist/predefinedMigrations/versions-v1-v2.js +5 -95
- package/dist/predefinedMigrations/versions-v1-v2.js.map +1 -1
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +0 -2
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +2 -2
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +1 -2
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +29 -18
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queries/buildSortParam.d.ts +2 -2
- package/dist/queries/buildSortParam.d.ts.map +1 -1
- package/dist/queries/buildSortParam.js +26 -17
- package/dist/queries/buildSortParam.js.map +1 -1
- package/dist/queries/getLocalizedSortProperty.spec.js +43 -43
- package/dist/queries/getLocalizedSortProperty.spec.js.map +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +7 -5
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts +3 -2
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +263 -37
- package/dist/queries/sanitizeQueryValue.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +37 -10
- package/dist/queryDrafts.js.map +1 -1
- package/dist/transactions/beginTransaction.d.ts.map +1 -1
- package/dist/transactions/beginTransaction.js +2 -0
- package/dist/transactions/beginTransaction.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +3 -0
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
- package/dist/transactions/rollbackTransaction.js +13 -7
- package/dist/transactions/rollbackTransaction.js.map +1 -1
- package/dist/types.d.ts +7 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +19 -5
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts +2 -2
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +20 -5
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +25 -7
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +19 -4
- package/dist/updateVersion.js.map +1 -1
- package/dist/upsert.d.ts +3 -0
- package/dist/upsert.d.ts.map +1 -0
- package/dist/upsert.js +15 -0
- package/dist/upsert.js.map +1 -0
- package/dist/utilities/buildJoinAggregation.d.ts +18 -0
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -0
- package/dist/utilities/buildJoinAggregation.js +159 -0
- package/dist/utilities/buildJoinAggregation.js.map +1 -0
- package/dist/utilities/buildProjectionFromSelect.d.ts +8 -0
- package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -0
- package/dist/utilities/buildProjectionFromSelect.js +171 -0
- package/dist/utilities/buildProjectionFromSelect.js.map +1 -0
- package/dist/utilities/getDBName.d.ts.map +1 -1
- package/dist/utilities/getDBName.js +3 -1
- package/dist/utilities/getDBName.js.map +1 -1
- package/dist/utilities/handleError.d.ts +6 -2
- package/dist/utilities/handleError.d.ts.map +1 -1
- package/dist/utilities/handleError.js +11 -8
- package/dist/utilities/handleError.js.map +1 -1
- package/dist/utilities/sanitizeInternalFields.d.ts +1 -2
- package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
- package/dist/utilities/sanitizeInternalFields.js +1 -2
- package/dist/utilities/sanitizeInternalFields.js.map +1 -1
- package/dist/utilities/sanitizeRelationshipIDs.d.ts +9 -0
- package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +1 -0
- package/dist/utilities/sanitizeRelationshipIDs.js +125 -0
- package/dist/utilities/sanitizeRelationshipIDs.js.map +1 -0
- package/dist/utilities/sanitizeRelationshipIDs.spec.js +408 -0
- package/dist/utilities/sanitizeRelationshipIDs.spec.js.map +1 -0
- package/dist/withSession.d.ts +3 -2
- package/dist/withSession.d.ts.map +1 -1
- package/dist/withSession.js +10 -4
- package/dist/withSession.js.map +1 -1
- package/license.md +22 -0
- package/package.json +24 -12
- package/dist/queries/mock.js +0 -2
- package/dist/queries/mock.js.map +0 -1
@@ -1,8 +1,13 @@
|
|
1
|
-
|
2
|
-
import { fieldAffectsData, fieldIsLocalized, fieldIsPresentationalOnly, tabHasName } from 'payload/shared';
|
1
|
+
import mongoose from 'mongoose';
|
2
|
+
import { fieldAffectsData, fieldIsLocalized, fieldIsPresentationalOnly, fieldIsVirtual, tabHasName } from 'payload/shared';
|
3
|
+
/**
|
4
|
+
* get a field's defaultValue only if defined and not dynamic so that it can be set on the field schema
|
5
|
+
* @param field
|
6
|
+
*/ const formatDefaultValue = (field)=>typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function' ? field.defaultValue : undefined;
|
3
7
|
const formatBaseSchema = (field, buildSchemaOptions)=>{
|
4
8
|
const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions;
|
5
9
|
const schema = {
|
10
|
+
default: formatDefaultValue(field),
|
6
11
|
index: field.index || !disableUnique && field.unique || indexSortableFields || false,
|
7
12
|
required: false,
|
8
13
|
unique: !disableUnique && field.unique || false
|
@@ -29,7 +34,7 @@ const localizeSchema = (entity, schema, localization)=>{
|
|
29
34
|
}
|
30
35
|
return schema;
|
31
36
|
};
|
32
|
-
const buildSchema = (
|
37
|
+
export const buildSchema = (payload, configFields, buildSchemaOptions = {})=>{
|
33
38
|
const { allowIDField, options } = buildSchemaOptions;
|
34
39
|
let fields = {};
|
35
40
|
let schemaFields = configFields;
|
@@ -44,21 +49,24 @@ const buildSchema = (config, configFields, buildSchemaOptions = {})=>{
|
|
44
49
|
}
|
45
50
|
const schema = new mongoose.Schema(fields, options);
|
46
51
|
schemaFields.forEach((field)=>{
|
52
|
+
if (fieldIsVirtual(field)) {
|
53
|
+
return;
|
54
|
+
}
|
47
55
|
if (!fieldIsPresentationalOnly(field)) {
|
48
56
|
const addFieldSchema = fieldToSchemaMap[field.type];
|
49
57
|
if (addFieldSchema) {
|
50
|
-
addFieldSchema(field, schema,
|
58
|
+
addFieldSchema(field, schema, payload, buildSchemaOptions);
|
51
59
|
}
|
52
60
|
}
|
53
61
|
});
|
54
62
|
return schema;
|
55
63
|
};
|
56
64
|
const fieldToSchemaMap = {
|
57
|
-
array: (field, schema,
|
65
|
+
array: (field, schema, payload, buildSchemaOptions)=>{
|
58
66
|
const baseSchema = {
|
59
67
|
...formatBaseSchema(field, buildSchemaOptions),
|
60
68
|
type: [
|
61
|
-
buildSchema(
|
69
|
+
buildSchema(payload, field.fields, {
|
62
70
|
allowIDField: true,
|
63
71
|
disableUnique: buildSchemaOptions.disableUnique,
|
64
72
|
draftsEnabled: buildSchemaOptions.draftsEnabled,
|
@@ -68,25 +76,23 @@ const fieldToSchemaMap = {
|
|
68
76
|
minimize: false
|
69
77
|
}
|
70
78
|
})
|
71
|
-
]
|
72
|
-
default: undefined
|
79
|
+
]
|
73
80
|
};
|
74
81
|
schema.add({
|
75
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
82
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
76
83
|
});
|
77
84
|
},
|
78
|
-
blocks: (field, schema,
|
85
|
+
blocks: (field, schema, payload, buildSchemaOptions)=>{
|
79
86
|
const fieldSchema = {
|
80
87
|
type: [
|
81
88
|
new mongoose.Schema({}, {
|
82
89
|
_id: false,
|
83
90
|
discriminatorKey: 'blockType'
|
84
91
|
})
|
85
|
-
]
|
86
|
-
default: undefined
|
92
|
+
]
|
87
93
|
};
|
88
94
|
schema.add({
|
89
|
-
[field.name]: localizeSchema(field, fieldSchema, config.localization)
|
95
|
+
[field.name]: localizeSchema(field, fieldSchema, payload.config.localization)
|
90
96
|
});
|
91
97
|
field.blocks.forEach((blockItem)=>{
|
92
98
|
const blockSchema = new mongoose.Schema({}, {
|
@@ -96,73 +102,74 @@ const fieldToSchemaMap = {
|
|
96
102
|
blockItem.fields.forEach((blockField)=>{
|
97
103
|
const addFieldSchema = fieldToSchemaMap[blockField.type];
|
98
104
|
if (addFieldSchema) {
|
99
|
-
addFieldSchema(blockField, blockSchema,
|
105
|
+
addFieldSchema(blockField, blockSchema, payload, buildSchemaOptions);
|
100
106
|
}
|
101
107
|
});
|
102
|
-
if (field.localized && config.localization) {
|
103
|
-
config.localization.localeCodes.forEach((localeCode)=>{
|
104
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
108
|
+
if (field.localized && payload.config.localization) {
|
109
|
+
payload.config.localization.localeCodes.forEach((localeCode)=>{
|
105
110
|
// @ts-expect-error Possible incorrect typing in mongoose types, this works
|
106
111
|
schema.path(`${field.name}.${localeCode}`).discriminator(blockItem.slug, blockSchema);
|
107
112
|
});
|
108
113
|
} else {
|
109
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
110
114
|
// @ts-expect-error Possible incorrect typing in mongoose types, this works
|
111
115
|
schema.path(field.name).discriminator(blockItem.slug, blockSchema);
|
112
116
|
}
|
113
117
|
});
|
114
118
|
},
|
115
|
-
checkbox: (field, schema,
|
119
|
+
checkbox: (field, schema, payload, buildSchemaOptions)=>{
|
116
120
|
const baseSchema = {
|
117
121
|
...formatBaseSchema(field, buildSchemaOptions),
|
118
122
|
type: Boolean
|
119
123
|
};
|
120
124
|
schema.add({
|
121
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
125
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
122
126
|
});
|
123
127
|
},
|
124
|
-
code: (field, schema,
|
128
|
+
code: (field, schema, payload, buildSchemaOptions)=>{
|
125
129
|
const baseSchema = {
|
126
130
|
...formatBaseSchema(field, buildSchemaOptions),
|
127
131
|
type: String
|
128
132
|
};
|
129
133
|
schema.add({
|
130
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
134
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
131
135
|
});
|
132
136
|
},
|
133
|
-
collapsible: (field, schema,
|
137
|
+
collapsible: (field, schema, payload, buildSchemaOptions)=>{
|
134
138
|
field.fields.forEach((subField)=>{
|
139
|
+
if (fieldIsVirtual(subField)) {
|
140
|
+
return;
|
141
|
+
}
|
135
142
|
const addFieldSchema = fieldToSchemaMap[subField.type];
|
136
143
|
if (addFieldSchema) {
|
137
|
-
addFieldSchema(subField, schema,
|
144
|
+
addFieldSchema(subField, schema, payload, buildSchemaOptions);
|
138
145
|
}
|
139
146
|
});
|
140
147
|
},
|
141
|
-
date: (field, schema,
|
148
|
+
date: (field, schema, payload, buildSchemaOptions)=>{
|
142
149
|
const baseSchema = {
|
143
150
|
...formatBaseSchema(field, buildSchemaOptions),
|
144
151
|
type: Date
|
145
152
|
};
|
146
153
|
schema.add({
|
147
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
154
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
148
155
|
});
|
149
156
|
},
|
150
|
-
email: (field, schema,
|
157
|
+
email: (field, schema, payload, buildSchemaOptions)=>{
|
151
158
|
const baseSchema = {
|
152
159
|
...formatBaseSchema(field, buildSchemaOptions),
|
153
160
|
type: String
|
154
161
|
};
|
155
162
|
schema.add({
|
156
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
163
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
157
164
|
});
|
158
165
|
},
|
159
|
-
group: (field, schema,
|
166
|
+
group: (field, schema, payload, buildSchemaOptions)=>{
|
160
167
|
const formattedBaseSchema = formatBaseSchema(field, buildSchemaOptions);
|
161
168
|
// carry indexSortableFields through to versions if drafts enabled
|
162
169
|
const indexSortableFields = buildSchemaOptions.indexSortableFields && field.name === 'version' && buildSchemaOptions.draftsEnabled;
|
163
170
|
const baseSchema = {
|
164
171
|
...formattedBaseSchema,
|
165
|
-
type: buildSchema(
|
172
|
+
type: buildSchema(payload, field.fields, {
|
166
173
|
disableUnique: buildSchemaOptions.disableUnique,
|
167
174
|
draftsEnabled: buildSchemaOptions.draftsEnabled,
|
168
175
|
indexSortableFields,
|
@@ -174,19 +181,19 @@ const fieldToSchemaMap = {
|
|
174
181
|
})
|
175
182
|
};
|
176
183
|
schema.add({
|
177
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
184
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
178
185
|
});
|
179
186
|
},
|
180
|
-
json: (field, schema,
|
187
|
+
json: (field, schema, payload, buildSchemaOptions)=>{
|
181
188
|
const baseSchema = {
|
182
189
|
...formatBaseSchema(field, buildSchemaOptions),
|
183
190
|
type: mongoose.Schema.Types.Mixed
|
184
191
|
};
|
185
192
|
schema.add({
|
186
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
193
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
187
194
|
});
|
188
195
|
},
|
189
|
-
number: (field, schema,
|
196
|
+
number: (field, schema, payload, buildSchemaOptions)=>{
|
190
197
|
const baseSchema = {
|
191
198
|
...formatBaseSchema(field, buildSchemaOptions),
|
192
199
|
type: field.hasMany ? [
|
@@ -194,22 +201,25 @@ const fieldToSchemaMap = {
|
|
194
201
|
] : Number
|
195
202
|
};
|
196
203
|
schema.add({
|
197
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
204
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
198
205
|
});
|
199
206
|
},
|
200
|
-
point: (field, schema,
|
207
|
+
point: (field, schema, payload, buildSchemaOptions)=>{
|
201
208
|
const baseSchema = {
|
202
209
|
type: {
|
203
210
|
type: String,
|
204
211
|
enum: [
|
205
212
|
'Point'
|
206
|
-
]
|
213
|
+
],
|
214
|
+
...typeof field.defaultValue !== 'undefined' && {
|
215
|
+
default: 'Point'
|
216
|
+
}
|
207
217
|
},
|
208
218
|
coordinates: {
|
209
219
|
type: [
|
210
220
|
Number
|
211
221
|
],
|
212
|
-
default: field
|
222
|
+
default: formatDefaultValue(field),
|
213
223
|
required: false
|
214
224
|
}
|
215
225
|
};
|
@@ -217,7 +227,7 @@ const fieldToSchemaMap = {
|
|
217
227
|
baseSchema.coordinates.sparse = true;
|
218
228
|
}
|
219
229
|
schema.add({
|
220
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
230
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
221
231
|
});
|
222
232
|
if (field.index === true || field.index === undefined) {
|
223
233
|
const indexOptions = {};
|
@@ -225,8 +235,8 @@ const fieldToSchemaMap = {
|
|
225
235
|
indexOptions.sparse = true;
|
226
236
|
indexOptions.unique = true;
|
227
237
|
}
|
228
|
-
if (field.localized && config.localization) {
|
229
|
-
config.localization.locales.forEach((locale)=>{
|
238
|
+
if (field.localized && payload.config.localization) {
|
239
|
+
payload.config.localization.locales.forEach((locale)=>{
|
230
240
|
schema.index({
|
231
241
|
[`${field.name}.${locale.code}`]: '2dsphere'
|
232
242
|
}, indexOptions);
|
@@ -238,25 +248,28 @@ const fieldToSchemaMap = {
|
|
238
248
|
}
|
239
249
|
}
|
240
250
|
},
|
241
|
-
radio: (field, schema,
|
251
|
+
radio: (field, schema, payload, buildSchemaOptions)=>{
|
242
252
|
const baseSchema = {
|
243
253
|
...formatBaseSchema(field, buildSchemaOptions),
|
244
254
|
type: String,
|
245
255
|
enum: field.options.map((option)=>{
|
246
|
-
if (typeof option === 'object')
|
256
|
+
if (typeof option === 'object') {
|
257
|
+
return option.value;
|
258
|
+
}
|
247
259
|
return option;
|
248
260
|
})
|
249
261
|
};
|
250
262
|
schema.add({
|
251
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
263
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
252
264
|
});
|
253
265
|
},
|
254
|
-
relationship: (field, schema,
|
266
|
+
relationship: (field, schema, payload, buildSchemaOptions)=>{
|
255
267
|
const hasManyRelations = Array.isArray(field.relationTo);
|
256
268
|
let schemaToReturn = {};
|
257
|
-
|
269
|
+
const valueType = getRelationshipValueType(field, payload);
|
270
|
+
if (field.localized && payload.config.localization) {
|
258
271
|
schemaToReturn = {
|
259
|
-
type: config.localization.localeCodes.reduce((locales, locale)=>{
|
272
|
+
type: payload.config.localization.localeCodes.reduce((locales, locale)=>{
|
260
273
|
let localeSchema = {};
|
261
274
|
if (hasManyRelations) {
|
262
275
|
localeSchema = {
|
@@ -268,14 +281,14 @@ const fieldToSchemaMap = {
|
|
268
281
|
enum: field.relationTo
|
269
282
|
},
|
270
283
|
value: {
|
271
|
-
type:
|
284
|
+
type: valueType,
|
272
285
|
refPath: `${field.name}.${locale}.relationTo`
|
273
286
|
}
|
274
287
|
};
|
275
288
|
} else {
|
276
289
|
localeSchema = {
|
277
290
|
...formatBaseSchema(field, buildSchemaOptions),
|
278
|
-
type:
|
291
|
+
type: valueType,
|
279
292
|
ref: field.relationTo
|
280
293
|
};
|
281
294
|
}
|
@@ -285,7 +298,7 @@ const fieldToSchemaMap = {
|
|
285
298
|
type: [
|
286
299
|
localeSchema
|
287
300
|
],
|
288
|
-
default:
|
301
|
+
default: formatDefaultValue(field)
|
289
302
|
} : localeSchema
|
290
303
|
};
|
291
304
|
}, {}),
|
@@ -301,7 +314,7 @@ const fieldToSchemaMap = {
|
|
301
314
|
enum: field.relationTo
|
302
315
|
},
|
303
316
|
value: {
|
304
|
-
type:
|
317
|
+
type: valueType,
|
305
318
|
refPath: `${field.name}.relationTo`
|
306
319
|
}
|
307
320
|
};
|
@@ -310,13 +323,13 @@ const fieldToSchemaMap = {
|
|
310
323
|
type: [
|
311
324
|
schemaToReturn
|
312
325
|
],
|
313
|
-
default:
|
326
|
+
default: formatDefaultValue(field)
|
314
327
|
};
|
315
328
|
}
|
316
329
|
} else {
|
317
330
|
schemaToReturn = {
|
318
331
|
...formatBaseSchema(field, buildSchemaOptions),
|
319
|
-
type:
|
332
|
+
type: valueType,
|
320
333
|
ref: field.relationTo
|
321
334
|
};
|
322
335
|
if (field.hasMany) {
|
@@ -324,7 +337,7 @@ const fieldToSchemaMap = {
|
|
324
337
|
type: [
|
325
338
|
schemaToReturn
|
326
339
|
],
|
327
|
-
default:
|
340
|
+
default: formatDefaultValue(field)
|
328
341
|
};
|
329
342
|
}
|
330
343
|
}
|
@@ -332,29 +345,34 @@ const fieldToSchemaMap = {
|
|
332
345
|
[field.name]: schemaToReturn
|
333
346
|
});
|
334
347
|
},
|
335
|
-
richText: (field, schema,
|
348
|
+
richText: (field, schema, payload, buildSchemaOptions)=>{
|
336
349
|
const baseSchema = {
|
337
350
|
...formatBaseSchema(field, buildSchemaOptions),
|
338
351
|
type: mongoose.Schema.Types.Mixed
|
339
352
|
};
|
340
353
|
schema.add({
|
341
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
354
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
342
355
|
});
|
343
356
|
},
|
344
|
-
row: (field, schema,
|
357
|
+
row: (field, schema, payload, buildSchemaOptions)=>{
|
345
358
|
field.fields.forEach((subField)=>{
|
359
|
+
if (fieldIsVirtual(subField)) {
|
360
|
+
return;
|
361
|
+
}
|
346
362
|
const addFieldSchema = fieldToSchemaMap[subField.type];
|
347
363
|
if (addFieldSchema) {
|
348
|
-
addFieldSchema(subField, schema,
|
364
|
+
addFieldSchema(subField, schema, payload, buildSchemaOptions);
|
349
365
|
}
|
350
366
|
});
|
351
367
|
},
|
352
|
-
select: (field, schema,
|
368
|
+
select: (field, schema, payload, buildSchemaOptions)=>{
|
353
369
|
const baseSchema = {
|
354
370
|
...formatBaseSchema(field, buildSchemaOptions),
|
355
371
|
type: String,
|
356
372
|
enum: field.options.map((option)=>{
|
357
|
-
if (typeof option === 'object')
|
373
|
+
if (typeof option === 'object') {
|
374
|
+
return option.value;
|
375
|
+
}
|
358
376
|
return option;
|
359
377
|
})
|
360
378
|
};
|
@@ -364,14 +382,17 @@ const fieldToSchemaMap = {
|
|
364
382
|
schema.add({
|
365
383
|
[field.name]: localizeSchema(field, field.hasMany ? [
|
366
384
|
baseSchema
|
367
|
-
] : baseSchema, config.localization)
|
385
|
+
] : baseSchema, payload.config.localization)
|
368
386
|
});
|
369
387
|
},
|
370
|
-
tabs: (field, schema,
|
388
|
+
tabs: (field, schema, payload, buildSchemaOptions)=>{
|
371
389
|
field.tabs.forEach((tab)=>{
|
372
390
|
if (tabHasName(tab)) {
|
391
|
+
if (fieldIsVirtual(tab)) {
|
392
|
+
return;
|
393
|
+
}
|
373
394
|
const baseSchema = {
|
374
|
-
type: buildSchema(
|
395
|
+
type: buildSchema(payload, tab.fields, {
|
375
396
|
disableUnique: buildSchemaOptions.disableUnique,
|
376
397
|
draftsEnabled: buildSchemaOptions.draftsEnabled,
|
377
398
|
options: {
|
@@ -382,19 +403,22 @@ const fieldToSchemaMap = {
|
|
382
403
|
})
|
383
404
|
};
|
384
405
|
schema.add({
|
385
|
-
[tab.name]: localizeSchema(tab, baseSchema, config.localization)
|
406
|
+
[tab.name]: localizeSchema(tab, baseSchema, payload.config.localization)
|
386
407
|
});
|
387
408
|
} else {
|
388
409
|
tab.fields.forEach((subField)=>{
|
410
|
+
if (fieldIsVirtual(subField)) {
|
411
|
+
return;
|
412
|
+
}
|
389
413
|
const addFieldSchema = fieldToSchemaMap[subField.type];
|
390
414
|
if (addFieldSchema) {
|
391
|
-
addFieldSchema(subField, schema,
|
415
|
+
addFieldSchema(subField, schema, payload, buildSchemaOptions);
|
392
416
|
}
|
393
417
|
});
|
394
418
|
}
|
395
419
|
});
|
396
420
|
},
|
397
|
-
text: (field, schema,
|
421
|
+
text: (field, schema, payload, buildSchemaOptions)=>{
|
398
422
|
const baseSchema = {
|
399
423
|
...formatBaseSchema(field, buildSchemaOptions),
|
400
424
|
type: field.hasMany ? [
|
@@ -402,29 +426,119 @@ const fieldToSchemaMap = {
|
|
402
426
|
] : String
|
403
427
|
};
|
404
428
|
schema.add({
|
405
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
429
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
406
430
|
});
|
407
431
|
},
|
408
|
-
textarea: (field, schema,
|
432
|
+
textarea: (field, schema, payload, buildSchemaOptions)=>{
|
409
433
|
const baseSchema = {
|
410
434
|
...formatBaseSchema(field, buildSchemaOptions),
|
411
435
|
type: String
|
412
436
|
};
|
413
437
|
schema.add({
|
414
|
-
[field.name]: localizeSchema(field, baseSchema, config.localization)
|
438
|
+
[field.name]: localizeSchema(field, baseSchema, payload.config.localization)
|
415
439
|
});
|
416
440
|
},
|
417
|
-
upload: (field, schema,
|
418
|
-
const
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
441
|
+
upload: (field, schema, payload, buildSchemaOptions)=>{
|
442
|
+
const hasManyRelations = Array.isArray(field.relationTo);
|
443
|
+
let schemaToReturn = {};
|
444
|
+
const valueType = getRelationshipValueType(field, payload);
|
445
|
+
if (field.localized && payload.config.localization) {
|
446
|
+
schemaToReturn = {
|
447
|
+
type: payload.config.localization.localeCodes.reduce((locales, locale)=>{
|
448
|
+
let localeSchema = {};
|
449
|
+
if (hasManyRelations) {
|
450
|
+
localeSchema = {
|
451
|
+
...formatBaseSchema(field, buildSchemaOptions),
|
452
|
+
_id: false,
|
453
|
+
type: mongoose.Schema.Types.Mixed,
|
454
|
+
relationTo: {
|
455
|
+
type: String,
|
456
|
+
enum: field.relationTo
|
457
|
+
},
|
458
|
+
value: {
|
459
|
+
type: valueType,
|
460
|
+
refPath: `${field.name}.${locale}.relationTo`
|
461
|
+
}
|
462
|
+
};
|
463
|
+
} else {
|
464
|
+
localeSchema = {
|
465
|
+
...formatBaseSchema(field, buildSchemaOptions),
|
466
|
+
type: valueType,
|
467
|
+
ref: field.relationTo
|
468
|
+
};
|
469
|
+
}
|
470
|
+
return {
|
471
|
+
...locales,
|
472
|
+
[locale]: field.hasMany ? {
|
473
|
+
type: [
|
474
|
+
localeSchema
|
475
|
+
],
|
476
|
+
default: formatDefaultValue(field)
|
477
|
+
} : localeSchema
|
478
|
+
};
|
479
|
+
}, {}),
|
480
|
+
localized: true
|
481
|
+
};
|
482
|
+
} else if (hasManyRelations) {
|
483
|
+
schemaToReturn = {
|
484
|
+
...formatBaseSchema(field, buildSchemaOptions),
|
485
|
+
_id: false,
|
486
|
+
type: mongoose.Schema.Types.Mixed,
|
487
|
+
relationTo: {
|
488
|
+
type: String,
|
489
|
+
enum: field.relationTo
|
490
|
+
},
|
491
|
+
value: {
|
492
|
+
type: valueType,
|
493
|
+
refPath: `${field.name}.relationTo`
|
494
|
+
}
|
495
|
+
};
|
496
|
+
if (field.hasMany) {
|
497
|
+
schemaToReturn = {
|
498
|
+
type: [
|
499
|
+
schemaToReturn
|
500
|
+
],
|
501
|
+
default: formatDefaultValue(field)
|
502
|
+
};
|
503
|
+
}
|
504
|
+
} else {
|
505
|
+
schemaToReturn = {
|
506
|
+
...formatBaseSchema(field, buildSchemaOptions),
|
507
|
+
type: valueType,
|
508
|
+
ref: field.relationTo
|
509
|
+
};
|
510
|
+
if (field.hasMany) {
|
511
|
+
schemaToReturn = {
|
512
|
+
type: [
|
513
|
+
schemaToReturn
|
514
|
+
],
|
515
|
+
default: formatDefaultValue(field)
|
516
|
+
};
|
517
|
+
}
|
518
|
+
}
|
423
519
|
schema.add({
|
424
|
-
[field.name]:
|
520
|
+
[field.name]: schemaToReturn
|
425
521
|
});
|
426
522
|
}
|
427
523
|
};
|
428
|
-
|
524
|
+
const getRelationshipValueType = (field, payload)=>{
|
525
|
+
if (typeof field.relationTo === 'string') {
|
526
|
+
const { customIDType } = payload.collections[field.relationTo];
|
527
|
+
if (!customIDType) {
|
528
|
+
return mongoose.Schema.Types.ObjectId;
|
529
|
+
}
|
530
|
+
if (customIDType === 'number') {
|
531
|
+
return mongoose.Schema.Types.Number;
|
532
|
+
}
|
533
|
+
return mongoose.Schema.Types.String;
|
534
|
+
}
|
535
|
+
// has custom id relationTo
|
536
|
+
if (field.relationTo.some((relationTo)=>{
|
537
|
+
return !!payload.collections[relationTo].customIDType;
|
538
|
+
})) {
|
539
|
+
return mongoose.Schema.Types.Mixed;
|
540
|
+
}
|
541
|
+
return mongoose.Schema.Types.ObjectId;
|
542
|
+
};
|
429
543
|
|
430
544
|
//# sourceMappingURL=buildSchema.js.map
|