@payloadcms/db-mongodb 3.0.0-canary.5390729 → 3.0.0-canary.5624723
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/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
|