@payloadcms/db-mongodb 3.0.0-canary.0374de4 → 3.0.0-canary.0992b47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/create.d.ts.map +1 -1
  2. package/dist/create.js +1 -7
  3. package/dist/create.js.map +1 -1
  4. package/dist/createGlobal.d.ts.map +1 -1
  5. package/dist/createGlobal.js +4 -9
  6. package/dist/createGlobal.js.map +1 -1
  7. package/dist/createGlobalVersion.d.ts +1 -1
  8. package/dist/createGlobalVersion.d.ts.map +1 -1
  9. package/dist/createGlobalVersion.js +4 -13
  10. package/dist/createGlobalVersion.js.map +1 -1
  11. package/dist/createVersion.d.ts +1 -1
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +5 -14
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/find.d.ts.map +1 -1
  16. package/dist/find.js +2 -19
  17. package/dist/find.js.map +1 -1
  18. package/dist/findGlobalVersions.d.ts.map +1 -1
  19. package/dist/findGlobalVersions.js +1 -1
  20. package/dist/findGlobalVersions.js.map +1 -1
  21. package/dist/findOne.d.ts.map +1 -1
  22. package/dist/findOne.js +2 -18
  23. package/dist/findOne.js.map +1 -1
  24. package/dist/init.d.ts.map +1 -1
  25. package/dist/init.js +3 -6
  26. package/dist/init.js.map +1 -1
  27. package/dist/models/buildCollectionSchema.d.ts.map +1 -1
  28. package/dist/models/buildCollectionSchema.js +0 -4
  29. package/dist/models/buildCollectionSchema.js.map +1 -1
  30. package/dist/queries/buildSearchParams.js +1 -1
  31. package/dist/queries/buildSearchParams.js.map +1 -1
  32. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  33. package/dist/queries/sanitizeQueryValue.js +19 -66
  34. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  35. package/dist/types.d.ts +3 -4
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/types.js.map +1 -1
  38. package/dist/updateGlobal.d.ts.map +1 -1
  39. package/dist/updateGlobal.js +1 -7
  40. package/dist/updateGlobal.js.map +1 -1
  41. package/dist/updateGlobalVersion.d.ts +2 -2
  42. package/dist/updateGlobalVersion.d.ts.map +1 -1
  43. package/dist/updateGlobalVersion.js +3 -10
  44. package/dist/updateGlobalVersion.js.map +1 -1
  45. package/dist/updateOne.d.ts.map +1 -1
  46. package/dist/updateOne.js +1 -7
  47. package/dist/updateOne.js.map +1 -1
  48. package/dist/updateVersion.d.ts +1 -1
  49. package/dist/updateVersion.d.ts.map +1 -1
  50. package/dist/updateVersion.js +1 -8
  51. package/dist/updateVersion.js.map +1 -1
  52. package/dist/withSession.d.ts +1 -1
  53. package/dist/withSession.d.ts.map +1 -1
  54. package/dist/withSession.js.map +1 -1
  55. package/package.json +4 -5
  56. package/dist/utilities/buildJoinAggregation.d.ts +0 -15
  57. package/dist/utilities/buildJoinAggregation.d.ts.map +0 -1
  58. package/dist/utilities/buildJoinAggregation.js +0 -148
  59. package/dist/utilities/buildJoinAggregation.js.map +0 -1
  60. package/dist/utilities/sanitizeRelationshipIDs.d.ts +0 -9
  61. package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +0 -1
  62. package/dist/utilities/sanitizeRelationshipIDs.js +0 -111
  63. package/dist/utilities/sanitizeRelationshipIDs.js.map +0 -1
@@ -1,148 +0,0 @@
1
- import { buildSortParam } from '../queries/buildSortParam.js';
2
- export const buildJoinAggregation = async ({ adapter, collection, collectionConfig, joins, limit, locale, query })=>{
3
- if (Object.keys(collectionConfig.joins).length === 0 || joins === false) {
4
- return;
5
- }
6
- const joinConfig = adapter.payload.collections[collection].config.joins;
7
- const aggregate = [
8
- {
9
- $sort: {
10
- createdAt: -1
11
- }
12
- }
13
- ];
14
- if (query) {
15
- aggregate.push({
16
- $match: query
17
- });
18
- }
19
- if (limit) {
20
- aggregate.push({
21
- $limit: limit
22
- });
23
- }
24
- for (const slug of Object.keys(joinConfig)){
25
- for (const join of joinConfig[slug]){
26
- const joinModel = adapter.collections[join.field.collection];
27
- const { limit: limitJoin = 10, sort: sortJoin, where: whereJoin } = joins?.[join.schemaPath] || {};
28
- const sort = buildSortParam({
29
- config: adapter.payload.config,
30
- fields: adapter.payload.collections[slug].config.fields,
31
- locale,
32
- sort: sortJoin || collectionConfig.defaultSort,
33
- timestamps: true
34
- });
35
- const sortProperty = Object.keys(sort)[0];
36
- const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1;
37
- const $match = await joinModel.buildQuery({
38
- locale,
39
- payload: adapter.payload,
40
- where: whereJoin
41
- });
42
- const pipeline = [
43
- {
44
- $match
45
- },
46
- {
47
- $sort: {
48
- [sortProperty]: sortDirection
49
- }
50
- }
51
- ];
52
- if (limitJoin > 0) {
53
- pipeline.push({
54
- $limit: limitJoin + 1
55
- });
56
- }
57
- if (adapter.payload.config.localization && locale === 'all') {
58
- adapter.payload.config.localization.localeCodes.forEach((code)=>{
59
- const as = `${join.schemaPath}${code}`;
60
- aggregate.push({
61
- $lookup: {
62
- as: `${as}.docs`,
63
- foreignField: `${join.field.on}${code}`,
64
- from: slug,
65
- localField: '_id',
66
- pipeline
67
- }
68
- }, {
69
- $addFields: {
70
- [`${as}.docs`]: {
71
- $map: {
72
- as: 'doc',
73
- in: '$$doc._id',
74
- input: `$${as}.docs`
75
- }
76
- },
77
- [`${as}.hasNextPage`]: {
78
- $gt: [
79
- {
80
- $size: `$${as}.docs`
81
- },
82
- limitJoin || Number.MAX_VALUE
83
- ]
84
- }
85
- }
86
- });
87
- if (limitJoin > 0) {
88
- aggregate.push({
89
- $addFields: {
90
- [`${as}.docs`]: {
91
- $slice: [
92
- `$${as}.docs`,
93
- limitJoin
94
- ]
95
- }
96
- }
97
- });
98
- }
99
- });
100
- } else {
101
- const localeSuffix = join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : '';
102
- const as = `${join.schemaPath}${localeSuffix}`;
103
- aggregate.push({
104
- $lookup: {
105
- as: `${as}.docs`,
106
- foreignField: `${join.field.on}${localeSuffix}`,
107
- from: slug,
108
- localField: '_id',
109
- pipeline
110
- }
111
- }, {
112
- $addFields: {
113
- [`${as}.docs`]: {
114
- $map: {
115
- as: 'doc',
116
- in: '$$doc._id',
117
- input: `$${as}.docs`
118
- }
119
- },
120
- [`${as}.hasNextPage`]: {
121
- $gt: [
122
- {
123
- $size: `$${as}.docs`
124
- },
125
- limitJoin || Number.MAX_VALUE
126
- ]
127
- }
128
- }
129
- });
130
- if (limitJoin > 0) {
131
- aggregate.push({
132
- $addFields: {
133
- [`${as}.docs`]: {
134
- $slice: [
135
- `$${as}.docs`,
136
- limitJoin
137
- ]
138
- }
139
- }
140
- });
141
- }
142
- }
143
- }
144
- }
145
- return aggregate;
146
- };
147
-
148
- //# sourceMappingURL=buildJoinAggregation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/buildJoinAggregation.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { CollectionSlug, JoinQuery, SanitizedCollectionConfig, Where } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { buildSortParam } from '../queries/buildSortParam.js'\n\ntype BuildJoinAggregationArgs = {\n adapter: MongooseAdapter\n collection: CollectionSlug\n collectionConfig: SanitizedCollectionConfig\n joins: JoinQuery\n // the number of docs to get at the top collection level\n limit?: number\n locale: string\n // the where clause for the top collection\n query?: Where\n}\n\nexport const buildJoinAggregation = async ({\n adapter,\n collection,\n collectionConfig,\n joins,\n limit,\n locale,\n query,\n}: BuildJoinAggregationArgs): Promise<PipelineStage[] | undefined> => {\n if (Object.keys(collectionConfig.joins).length === 0 || joins === false) {\n return\n }\n\n const joinConfig = adapter.payload.collections[collection].config.joins\n const aggregate: PipelineStage[] = [\n {\n $sort: { createdAt: -1 },\n },\n ]\n\n if (query) {\n aggregate.push({\n $match: query,\n })\n }\n\n if (limit) {\n aggregate.push({\n $limit: limit,\n })\n }\n\n for (const slug of Object.keys(joinConfig)) {\n for (const join of joinConfig[slug]) {\n const joinModel = adapter.collections[join.field.collection]\n\n const {\n limit: limitJoin = 10,\n sort: sortJoin,\n where: whereJoin,\n } = joins?.[join.schemaPath] || {}\n\n const sort = buildSortParam({\n config: adapter.payload.config,\n fields: adapter.payload.collections[slug].config.fields,\n locale,\n sort: sortJoin || collectionConfig.defaultSort,\n timestamps: true,\n })\n const sortProperty = Object.keys(sort)[0]\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const $match = await joinModel.buildQuery({\n locale,\n payload: adapter.payload,\n where: whereJoin,\n })\n\n const pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out>[] = [\n { $match },\n {\n $sort: { [sortProperty]: sortDirection },\n },\n ]\n\n if (limitJoin > 0) {\n pipeline.push({\n $limit: limitJoin + 1,\n })\n }\n\n if (adapter.payload.config.localization && locale === 'all') {\n adapter.payload.config.localization.localeCodes.forEach((code) => {\n const as = `${join.schemaPath}${code}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${code}`,\n from: slug,\n localField: '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n })\n } else {\n const localeSuffix =\n join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : ''\n const as = `${join.schemaPath}${localeSuffix}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${localeSuffix}`,\n from: slug,\n localField: '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n }\n }\n }\n\n return aggregate\n}\n"],"names":["buildSortParam","buildJoinAggregation","adapter","collection","collectionConfig","joins","limit","locale","query","Object","keys","length","joinConfig","payload","collections","config","aggregate","$sort","createdAt","push","$match","$limit","slug","join","joinModel","field","limitJoin","sort","sortJoin","where","whereJoin","schemaPath","fields","defaultSort","timestamps","sortProperty","sortDirection","buildQuery","pipeline","localization","localeCodes","forEach","code","as","$lookup","foreignField","on","from","localField","$addFields","$map","in","input","$gt","$size","Number","MAX_VALUE","$slice","localeSuffix","localized"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { Field, SanitizedConfig } from 'payload';
2
- type Args = {
3
- config: SanitizedConfig;
4
- data: Record<string, unknown>;
5
- fields: Field[];
6
- };
7
- export declare const sanitizeRelationshipIDs: ({ config, data, fields, }: Args) => Record<string, unknown>;
8
- export {};
9
- //# sourceMappingURL=sanitizeRelationshipIDs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sanitizeRelationshipIDs.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeRelationshipIDs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,KAAK,EAAE,eAAe,EAA0B,MAAM,SAAS,CAAA;AAM/F,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAgGD,eAAO,MAAM,uBAAuB,8BAIjC,IAAI,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA6B/B,CAAA"}
@@ -1,111 +0,0 @@
1
- import mongoose from 'mongoose';
2
- import { traverseFields } from 'payload';
3
- import { fieldAffectsData } from 'payload/shared';
4
- function isValidRelationObject(value) {
5
- return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value;
6
- }
7
- const convertValue = ({ relatedCollection, value })=>{
8
- const customIDField = relatedCollection.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
9
- if (!customIDField) {
10
- return new mongoose.Types.ObjectId(value);
11
- }
12
- return value;
13
- };
14
- const sanitizeRelationship = ({ config, field, locale, ref, value })=>{
15
- let relatedCollection;
16
- let result = value;
17
- const hasManyRelations = typeof field.relationTo !== 'string';
18
- if (!hasManyRelations) {
19
- relatedCollection = config.collections?.find(({ slug })=>slug === field.relationTo);
20
- }
21
- if (Array.isArray(value)) {
22
- result = value.map((val)=>{
23
- // Handle has many
24
- if (relatedCollection && val && (typeof val === 'string' || typeof val === 'number')) {
25
- return convertValue({
26
- relatedCollection,
27
- value: val
28
- });
29
- }
30
- // Handle has many - polymorphic
31
- if (isValidRelationObject(val)) {
32
- const relatedCollectionForSingleValue = config.collections?.find(({ slug })=>slug === val.relationTo);
33
- if (relatedCollectionForSingleValue) {
34
- return {
35
- relationTo: val.relationTo,
36
- value: convertValue({
37
- relatedCollection: relatedCollectionForSingleValue,
38
- value: val.value
39
- })
40
- };
41
- }
42
- }
43
- return val;
44
- });
45
- }
46
- // Handle has one - polymorphic
47
- if (isValidRelationObject(value)) {
48
- relatedCollection = config.collections?.find(({ slug })=>slug === value.relationTo);
49
- if (relatedCollection) {
50
- result = {
51
- relationTo: value.relationTo,
52
- value: convertValue({
53
- relatedCollection,
54
- value: value.value
55
- })
56
- };
57
- }
58
- }
59
- // Handle has one
60
- if (relatedCollection && value && (typeof value === 'string' || typeof value === 'number')) {
61
- result = convertValue({
62
- relatedCollection,
63
- value
64
- });
65
- }
66
- if (locale) {
67
- ref[locale] = result;
68
- } else {
69
- ref[field.name] = result;
70
- }
71
- };
72
- export const sanitizeRelationshipIDs = ({ config, data, fields })=>{
73
- const sanitize = ({ field, ref })=>{
74
- if (field.type === 'relationship' || field.type === 'upload') {
75
- // handle localized relationships
76
- if (config.localization && field.localized) {
77
- const locales = config.localization.locales;
78
- const fieldRef = ref[field.name];
79
- for (const { code } of locales){
80
- if (ref[field.name]?.[code]) {
81
- const value = ref[field.name][code];
82
- sanitizeRelationship({
83
- config,
84
- field,
85
- locale: code,
86
- ref: fieldRef,
87
- value
88
- });
89
- }
90
- }
91
- } else {
92
- // handle non-localized relationships
93
- sanitizeRelationship({
94
- config,
95
- field,
96
- locale: undefined,
97
- ref,
98
- value: ref[field.name]
99
- });
100
- }
101
- }
102
- };
103
- traverseFields({
104
- callback: sanitize,
105
- fields,
106
- ref: data
107
- });
108
- return data;
109
- };
110
-
111
- //# sourceMappingURL=sanitizeRelationshipIDs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/sanitizeRelationshipIDs.ts"],"sourcesContent":["import type { CollectionConfig, Field, SanitizedConfig, TraverseFieldsCallback } from 'payload'\n\nimport mongoose from 'mongoose'\nimport { traverseFields } from 'payload'\nimport { fieldAffectsData } from 'payload/shared'\n\ntype Args = {\n config: SanitizedConfig\n data: Record<string, unknown>\n fields: Field[]\n}\n\ninterface RelationObject {\n relationTo: string\n value: number | string\n}\n\nfunction isValidRelationObject(value: unknown): value is RelationObject {\n return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value\n}\n\nconst convertValue = ({\n relatedCollection,\n value,\n}: {\n relatedCollection: CollectionConfig\n value: number | string\n}): mongoose.Types.ObjectId | number | string => {\n const customIDField = relatedCollection.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (!customIDField) {\n return new mongoose.Types.ObjectId(value)\n }\n\n return value\n}\n\nconst sanitizeRelationship = ({ config, field, locale, ref, value }) => {\n let relatedCollection: CollectionConfig | undefined\n let result = value\n\n const hasManyRelations = typeof field.relationTo !== 'string'\n\n if (!hasManyRelations) {\n relatedCollection = config.collections?.find(({ slug }) => slug === field.relationTo)\n }\n\n if (Array.isArray(value)) {\n result = value.map((val) => {\n // Handle has many\n if (relatedCollection && val && (typeof val === 'string' || typeof val === 'number')) {\n return convertValue({\n relatedCollection,\n value: val,\n })\n }\n\n // Handle has many - polymorphic\n if (isValidRelationObject(val)) {\n const relatedCollectionForSingleValue = config.collections?.find(\n ({ slug }) => slug === val.relationTo,\n )\n\n if (relatedCollectionForSingleValue) {\n return {\n relationTo: val.relationTo,\n value: convertValue({\n relatedCollection: relatedCollectionForSingleValue,\n value: val.value,\n }),\n }\n }\n }\n\n return val\n })\n }\n\n // Handle has one - polymorphic\n if (isValidRelationObject(value)) {\n relatedCollection = config.collections?.find(({ slug }) => slug === value.relationTo)\n\n if (relatedCollection) {\n result = {\n relationTo: value.relationTo,\n value: convertValue({ relatedCollection, value: value.value }),\n }\n }\n }\n\n // Handle has one\n if (relatedCollection && value && (typeof value === 'string' || typeof value === 'number')) {\n result = convertValue({\n relatedCollection,\n value,\n })\n }\n if (locale) {\n ref[locale] = result\n } else {\n ref[field.name] = result\n }\n}\n\nexport const sanitizeRelationshipIDs = ({\n config,\n data,\n fields,\n}: Args): Record<string, unknown> => {\n const sanitize: TraverseFieldsCallback = ({ field, ref }) => {\n if (field.type === 'relationship' || field.type === 'upload') {\n // handle localized relationships\n if (config.localization && field.localized) {\n const locales = config.localization.locales\n const fieldRef = ref[field.name]\n for (const { code } of locales) {\n if (ref[field.name]?.[code]) {\n const value = ref[field.name][code]\n sanitizeRelationship({ config, field, locale: code, ref: fieldRef, value })\n }\n }\n } else {\n // handle non-localized relationships\n sanitizeRelationship({\n config,\n field,\n locale: undefined,\n ref,\n value: ref[field.name],\n })\n }\n }\n }\n\n traverseFields({ callback: sanitize, fields, ref: data })\n\n return data\n}\n"],"names":["mongoose","traverseFields","fieldAffectsData","isValidRelationObject","value","convertValue","relatedCollection","customIDField","fields","find","field","name","Types","ObjectId","sanitizeRelationship","config","locale","ref","result","hasManyRelations","relationTo","collections","slug","Array","isArray","map","val","relatedCollectionForSingleValue","sanitizeRelationshipIDs","data","sanitize","type","localization","localized","locales","fieldRef","code","undefined","callback"],"mappings":"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"}