@depup/payload 3.80.0-depup.3 → 3.81.0-depup.1
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/README.md +8 -10
- package/changes.json +7 -15
- package/dist/auth/baseFields/accountLock.d.ts.map +1 -1
- package/dist/auth/baseFields/accountLock.js +8 -0
- package/dist/auth/baseFields/accountLock.js.map +1 -1
- package/dist/auth/baseFields/auth.d.ts.map +1 -1
- package/dist/auth/baseFields/auth.js +16 -0
- package/dist/auth/baseFields/auth.js.map +1 -1
- package/dist/auth/baseFields/verification.d.ts.map +1 -1
- package/dist/auth/baseFields/verification.js +8 -3
- package/dist/auth/baseFields/verification.js.map +1 -1
- package/dist/collections/dataloader.d.ts.map +1 -1
- package/dist/collections/dataloader.js +9 -1
- package/dist/collections/dataloader.js.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +20 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
- package/package.json +15 -23
package/README.md
CHANGED
|
@@ -13,32 +13,30 @@ npm install @depup/payload
|
|
|
13
13
|
|
|
14
14
|
| Field | Value |
|
|
15
15
|
|-------|-------|
|
|
16
|
-
| Original | [payload](https://www.npmjs.com/package/payload) @ 3.
|
|
17
|
-
| Processed | 2026-
|
|
16
|
+
| Original | [payload](https://www.npmjs.com/package/payload) @ 3.81.0 |
|
|
17
|
+
| Processed | 2026-04-02 |
|
|
18
18
|
| Smoke test | passed |
|
|
19
|
-
| Deps updated |
|
|
19
|
+
| Deps updated | 17 |
|
|
20
20
|
|
|
21
21
|
## Dependency Changes
|
|
22
22
|
|
|
23
23
|
| Dependency | From | To |
|
|
24
24
|
|------------|------|-----|
|
|
25
|
-
| @next/env | ^15.1.5 | ^16.2.
|
|
26
|
-
| ajv | 8.17.1 | ^8.18.0 |
|
|
25
|
+
| @next/env | ^15.1.5 | ^16.2.2 |
|
|
27
26
|
| ci-info | ^4.1.0 | ^4.4.0 |
|
|
28
27
|
| console-table-printer | 2.12.1 | ^2.15.0 |
|
|
29
28
|
| croner | 9.1.0 | ^10.0.1 |
|
|
30
|
-
| file-type |
|
|
29
|
+
| file-type | 21.3.4 | ^22.0.0 |
|
|
31
30
|
| get-tsconfig | 4.8.1 | ^4.13.7 |
|
|
32
31
|
| ipaddr.js | 2.2.0 | ^2.3.0 |
|
|
33
|
-
| jose | 5.
|
|
32
|
+
| jose | 5.10.0 | ^6.2.2 |
|
|
34
33
|
| json-schema-to-typescript | 15.0.3 | ^15.0.4 |
|
|
35
|
-
| path-to-regexp | 6.3.0 | ^8.4.
|
|
34
|
+
| path-to-regexp | 6.3.0 | ^8.4.2 |
|
|
36
35
|
| pino | 9.14.0 | ^10.3.1 |
|
|
37
36
|
| pino-pretty | 13.1.2 | ^13.1.3 |
|
|
38
|
-
| qs-esm | 7.0.2 | ^8.0.1 |
|
|
39
37
|
| sanitize-filename | 1.6.3 | ^1.6.4 |
|
|
40
38
|
| ts-essentials | 10.0.3 | ^10.1.1 |
|
|
41
|
-
| undici | 7.24.4 | ^
|
|
39
|
+
| undici | 7.24.4 | ^8.0.0 |
|
|
42
40
|
| uuid | 10.0.0 | ^13.0.0 |
|
|
43
41
|
| ws | ^8.16.0 | ^8.20.0 |
|
|
44
42
|
|
package/changes.json
CHANGED
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
"bumped": {
|
|
3
3
|
"@next/env": {
|
|
4
4
|
"from": "^15.1.5",
|
|
5
|
-
"to": "^16.2.
|
|
6
|
-
},
|
|
7
|
-
"ajv": {
|
|
8
|
-
"from": "8.17.1",
|
|
9
|
-
"to": "^8.18.0"
|
|
5
|
+
"to": "^16.2.2"
|
|
10
6
|
},
|
|
11
7
|
"ci-info": {
|
|
12
8
|
"from": "^4.1.0",
|
|
@@ -21,7 +17,7 @@
|
|
|
21
17
|
"to": "^10.0.1"
|
|
22
18
|
},
|
|
23
19
|
"file-type": {
|
|
24
|
-
"from": "
|
|
20
|
+
"from": "21.3.4",
|
|
25
21
|
"to": "^22.0.0"
|
|
26
22
|
},
|
|
27
23
|
"get-tsconfig": {
|
|
@@ -33,7 +29,7 @@
|
|
|
33
29
|
"to": "^2.3.0"
|
|
34
30
|
},
|
|
35
31
|
"jose": {
|
|
36
|
-
"from": "5.
|
|
32
|
+
"from": "5.10.0",
|
|
37
33
|
"to": "^6.2.2"
|
|
38
34
|
},
|
|
39
35
|
"json-schema-to-typescript": {
|
|
@@ -42,7 +38,7 @@
|
|
|
42
38
|
},
|
|
43
39
|
"path-to-regexp": {
|
|
44
40
|
"from": "6.3.0",
|
|
45
|
-
"to": "^8.4.
|
|
41
|
+
"to": "^8.4.2"
|
|
46
42
|
},
|
|
47
43
|
"pino": {
|
|
48
44
|
"from": "9.14.0",
|
|
@@ -52,10 +48,6 @@
|
|
|
52
48
|
"from": "13.1.2",
|
|
53
49
|
"to": "^13.1.3"
|
|
54
50
|
},
|
|
55
|
-
"qs-esm": {
|
|
56
|
-
"from": "7.0.2",
|
|
57
|
-
"to": "^8.0.1"
|
|
58
|
-
},
|
|
59
51
|
"sanitize-filename": {
|
|
60
52
|
"from": "1.6.3",
|
|
61
53
|
"to": "^1.6.4"
|
|
@@ -66,7 +58,7 @@
|
|
|
66
58
|
},
|
|
67
59
|
"undici": {
|
|
68
60
|
"from": "7.24.4",
|
|
69
|
-
"to": "^
|
|
61
|
+
"to": "^8.0.0"
|
|
70
62
|
},
|
|
71
63
|
"uuid": {
|
|
72
64
|
"from": "10.0.0",
|
|
@@ -77,6 +69,6 @@
|
|
|
77
69
|
"to": "^8.20.0"
|
|
78
70
|
}
|
|
79
71
|
},
|
|
80
|
-
"timestamp": "2026-
|
|
81
|
-
"totalUpdated":
|
|
72
|
+
"timestamp": "2026-04-02T12:28:47.456Z",
|
|
73
|
+
"totalUpdated": 17
|
|
82
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountLock.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/accountLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"accountLock.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/accountLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAAE,KAAK,EAoBzB,CAAA"}
|
|
@@ -2,12 +2,20 @@ export const accountLockFields = [
|
|
|
2
2
|
{
|
|
3
3
|
name: 'loginAttempts',
|
|
4
4
|
type: 'number',
|
|
5
|
+
access: {
|
|
6
|
+
create: ()=>false,
|
|
7
|
+
update: ()=>false
|
|
8
|
+
},
|
|
5
9
|
defaultValue: 0,
|
|
6
10
|
hidden: true
|
|
7
11
|
},
|
|
8
12
|
{
|
|
9
13
|
name: 'lockUntil',
|
|
10
14
|
type: 'date',
|
|
15
|
+
access: {
|
|
16
|
+
create: ()=>false,
|
|
17
|
+
update: ()=>false
|
|
18
|
+
},
|
|
11
19
|
hidden: true
|
|
12
20
|
}
|
|
13
21
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/baseFields/accountLock.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const accountLockFields: Field[] = [\n {\n name: 'loginAttempts',\n type: 'number',\n defaultValue: 0,\n hidden: true,\n },\n {\n name: 'lockUntil',\n type: 'date',\n hidden: true,\n },\n] as Field[]\n"],"names":["accountLockFields","name","type","defaultValue","hidden"],"mappings":"AAEA,OAAO,MAAMA,oBAA6B;IACxC;QACEC,MAAM;QACNC,MAAM;QACNC,cAAc;QACdC,QAAQ;IACV;IACA;
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/baseFields/accountLock.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const accountLockFields: Field[] = [\n {\n name: 'loginAttempts',\n type: 'number',\n access: {\n create: () => false,\n update: () => false,\n },\n defaultValue: 0,\n hidden: true,\n },\n {\n name: 'lockUntil',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n] as Field[]\n"],"names":["accountLockFields","name","type","access","create","update","defaultValue","hidden"],"mappings":"AAEA,OAAO,MAAMA,oBAA6B;IACxC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,cAAc;QACdC,QAAQ;IACV;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAE,QAAQ;IACV;CACD,CAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,EAqCjC,CAAA"}
|
|
@@ -2,21 +2,37 @@ export const baseAuthFields = [
|
|
|
2
2
|
{
|
|
3
3
|
name: 'resetPasswordToken',
|
|
4
4
|
type: 'text',
|
|
5
|
+
access: {
|
|
6
|
+
create: ()=>false,
|
|
7
|
+
update: ()=>false
|
|
8
|
+
},
|
|
5
9
|
hidden: true
|
|
6
10
|
},
|
|
7
11
|
{
|
|
8
12
|
name: 'resetPasswordExpiration',
|
|
9
13
|
type: 'date',
|
|
14
|
+
access: {
|
|
15
|
+
create: ()=>false,
|
|
16
|
+
update: ()=>false
|
|
17
|
+
},
|
|
10
18
|
hidden: true
|
|
11
19
|
},
|
|
12
20
|
{
|
|
13
21
|
name: 'salt',
|
|
14
22
|
type: 'text',
|
|
23
|
+
access: {
|
|
24
|
+
create: ()=>false,
|
|
25
|
+
update: ()=>false
|
|
26
|
+
},
|
|
15
27
|
hidden: true
|
|
16
28
|
},
|
|
17
29
|
{
|
|
18
30
|
name: 'hash',
|
|
19
31
|
type: 'text',
|
|
32
|
+
access: {
|
|
33
|
+
create: ()=>false,
|
|
34
|
+
update: ()=>false
|
|
35
|
+
},
|
|
20
36
|
hidden: true
|
|
21
37
|
}
|
|
22
38
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n hidden: true,\n },\n]\n"],"names":["baseAuthFields","name","type","hidden"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n]\n"],"names":["baseAuthFields","name","type","access","create","update","hidden"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;CACD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;AAmBpE,eAAO,MAAM,kBAAkB,EAAE,KAAK,EA4B1B,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { defaultAccess } from '../defaultAccess.js';
|
|
1
2
|
const autoRemoveVerificationToken = ({ data, operation, originalDoc, value })=>{
|
|
2
3
|
// If a user manually sets `_verified` to true,
|
|
3
4
|
// and it was `false`, set _verificationToken to `null`.
|
|
@@ -15,9 +16,9 @@ export const verificationFields = [
|
|
|
15
16
|
name: '_verified',
|
|
16
17
|
type: 'checkbox',
|
|
17
18
|
access: {
|
|
18
|
-
create:
|
|
19
|
-
read:
|
|
20
|
-
update:
|
|
19
|
+
create: defaultAccess,
|
|
20
|
+
read: defaultAccess,
|
|
21
|
+
update: defaultAccess
|
|
21
22
|
},
|
|
22
23
|
admin: {
|
|
23
24
|
components: {
|
|
@@ -29,6 +30,10 @@ export const verificationFields = [
|
|
|
29
30
|
{
|
|
30
31
|
name: '_verificationToken',
|
|
31
32
|
type: 'text',
|
|
33
|
+
access: {
|
|
34
|
+
create: ()=>false,
|
|
35
|
+
update: ()=>false
|
|
36
|
+
},
|
|
32
37
|
hidden: true,
|
|
33
38
|
hooks: {
|
|
34
39
|
beforeChange: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/baseFields/verification.ts"],"sourcesContent":["import type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst autoRemoveVerificationToken: FieldHook = ({ data, operation, originalDoc, value }) => {\n // If a user manually sets `_verified` to true,\n // and it was `false`, set _verificationToken to `null`.\n // This is useful because the admin panel\n // allows users to set `_verified` to true manually\n\n if (operation === 'update') {\n if (data?._verified === true && originalDoc?._verified === false) {\n return null\n }\n }\n\n return value\n}\n\nexport const verificationFields: Field[] = [\n {\n name: '_verified',\n type: 'checkbox',\n access: {\n create:
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/baseFields/verification.ts"],"sourcesContent":["import type { Field, FieldHook } from '../../fields/config/types.js'\n\nimport { defaultAccess } from '../defaultAccess.js'\n\nconst autoRemoveVerificationToken: FieldHook = ({ data, operation, originalDoc, value }) => {\n // If a user manually sets `_verified` to true,\n // and it was `false`, set _verificationToken to `null`.\n // This is useful because the admin panel\n // allows users to set `_verified` to true manually\n\n if (operation === 'update') {\n if (data?._verified === true && originalDoc?._verified === false) {\n return null\n }\n }\n\n return value\n}\n\nexport const verificationFields: Field[] = [\n {\n name: '_verified',\n type: 'checkbox',\n access: {\n create: defaultAccess,\n read: defaultAccess,\n update: defaultAccess,\n },\n admin: {\n components: {\n Field: false,\n },\n },\n label: ({ t }) => t('authentication:verified'),\n },\n {\n name: '_verificationToken',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n hooks: {\n beforeChange: [autoRemoveVerificationToken],\n },\n },\n] as Field[]\n"],"names":["defaultAccess","autoRemoveVerificationToken","data","operation","originalDoc","value","_verified","verificationFields","name","type","access","create","read","update","admin","components","Field","label","t","hidden","hooks","beforeChange"],"mappings":"AAEA,SAASA,aAAa,QAAQ,sBAAqB;AAEnD,MAAMC,8BAAyC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,WAAW,EAAEC,KAAK,EAAE;IACrF,+CAA+C;IAC/C,wDAAwD;IACxD,yCAAyC;IACzC,mDAAmD;IAEnD,IAAIF,cAAc,UAAU;QAC1B,IAAID,MAAMI,cAAc,QAAQF,aAAaE,cAAc,OAAO;YAChE,OAAO;QACT;IACF;IAEA,OAAOD;AACT;AAEA,OAAO,MAAME,qBAA8B;IACzC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQX;YACRY,MAAMZ;YACNa,QAAQb;QACV;QACAc,OAAO;YACLC,YAAY;gBACVC,OAAO;YACT;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEV,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdE,QAAQ,IAAM;QAChB;QACAM,QAAQ;QACRC,OAAO;YACLC,cAAc;gBAACpB;aAA4B;QAC7C;IACF;CACD,CAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataloader.d.ts","sourceRoot":"","sources":["../../src/collections/dataloader.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,YAAY,CAAA;AAGnC,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"dataloader.d.ts","sourceRoot":"","sources":["../../src/collections/dataloader.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,YAAY,CAAA;AAGnC,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AA8JnD,eAAO,MAAM,aAAa,QAAS,cAAc;;0CAgBhD,CAAA;AA4CD,KAAK,kBAAkB,GAAG;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,OAAO,CAAA;IACd,cAAc,EAAE,mBAAmB,CAAA;IACnC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,cAAc,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,EAAE,OAAO,CAAA;IACzB,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAA;CAC1D,CAAA;AACD,eAAO,MAAM,wBAAwB,sJAalC,kBAAkB,KAAG,MAcpB,CAAA"}
|
|
@@ -57,6 +57,11 @@ const batchAndLoadDocs = (req)=>async (keys)=>{
|
|
|
57
57
|
for (const [batchKey, ids] of Object.entries(batchByFindArgs)){
|
|
58
58
|
const [transactionID, collection, depth, currentDepth, locale, fallbackLocale, overrideAccess, showHiddenFields, draft, select, populate] = JSON.parse(batchKey);
|
|
59
59
|
req.transactionID = transactionID;
|
|
60
|
+
const enableTrash = Boolean(payload.collections?.[collection]?.config?.trash);
|
|
61
|
+
const selectWithDeletedAt = enableTrash && select ? {
|
|
62
|
+
...select,
|
|
63
|
+
deletedAt: true
|
|
64
|
+
} : select;
|
|
60
65
|
const result = await payload.find({
|
|
61
66
|
collection,
|
|
62
67
|
currentDepth,
|
|
@@ -69,8 +74,11 @@ const batchAndLoadDocs = (req)=>async (keys)=>{
|
|
|
69
74
|
pagination: false,
|
|
70
75
|
populate,
|
|
71
76
|
req,
|
|
72
|
-
select,
|
|
77
|
+
select: selectWithDeletedAt,
|
|
73
78
|
showHiddenFields: Boolean(showHiddenFields),
|
|
79
|
+
...enableTrash ? {
|
|
80
|
+
trash: true
|
|
81
|
+
} : {},
|
|
74
82
|
where: {
|
|
75
83
|
id: {
|
|
76
84
|
in: ids
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/dataloader.ts"],"sourcesContent":["import type { BatchLoadFn } from 'dataloader'\n\nimport DataLoader from 'dataloader'\n\nimport type { FindArgs } from '../database/types.js'\nimport type { Payload, TypedFallbackLocale } from '../index.js'\nimport type { PayloadRequest, PopulateType, SelectType } from '../types/index.js'\nimport type { TypeWithID } from './config/types.js'\nimport type { FindOptions } from './operations/local/find.js'\n\nimport { isValidID } from '../utilities/isValidID.js'\n\n// Payload uses `dataloader` to solve the classic GraphQL N+1 problem.\n\n// We keep a list of all documents requested to be populated for any given request\n// and then batch together documents within the same collection,\n// making only 1 find per each collection, rather than `findByID` per each requested doc.\n\n// This dramatically improves performance for REST and Local API `depth` populations,\n// and also ensures complex GraphQL queries perform lightning-fast.\n\nconst batchAndLoadDocs =\n (req: PayloadRequest): BatchLoadFn<string, TypeWithID> =>\n async (keys: readonly string[]): Promise<TypeWithID[]> => {\n const { payload } = req\n\n // Create docs array of same length as keys, using null as value\n // We will replace nulls with injected docs as they are retrieved\n const docs: (null | TypeWithID)[] = keys.map(() => null)\n\n /**\n * Batch IDs by their `find` args\n * so we can make one find query per combination of collection, depth, locale, and fallbackLocale.\n *\n * Resulting shape will be as follows:\n {\n // key is stringified set of find args\n '[null,\"pages\",2,0,\"es\",\"en\",false,false]': [\n // value is array of IDs to find with these args\n 'q34tl23462346234524',\n '435523540194324280',\n '2346245j35l3j5234532li',\n ],\n // etc\n };\n *\n **/\n\n const batchByFindArgs: Record<string, string[]> = {}\n\n for (const key of keys) {\n const [\n transactionID,\n collection,\n id,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ] = JSON.parse(key)\n\n const batchKeyArray = [\n transactionID,\n collection,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ]\n\n const batchKey = JSON.stringify(batchKeyArray)\n\n const idType = payload.collections?.[collection]?.customIDType || payload.db.defaultIDType\n const sanitizedID = idType === 'number' ? parseFloat(id) : id\n\n if (isValidID(sanitizedID, idType)) {\n batchByFindArgs[batchKey] = [...(batchByFindArgs[batchKey] || []), sanitizedID]\n }\n }\n\n // Run find requests one after another, so as to not hang transactions\n\n for (const [batchKey, ids] of Object.entries(batchByFindArgs)) {\n const [\n transactionID,\n collection,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ] = JSON.parse(batchKey)\n\n req.transactionID = transactionID\n\n const result = await payload.find({\n collection,\n currentDepth,\n depth,\n disableErrors: true,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: Boolean(overrideAccess),\n pagination: false,\n populate,\n req,\n select,\n showHiddenFields: Boolean(showHiddenFields),\n where: {\n id: {\n in: ids,\n },\n },\n })\n\n // For each returned doc, find index in original keys\n // Inject doc within docs array if index exists\n for (const doc of result.docs) {\n const docKey = createDataloaderCacheKey({\n collectionSlug: collection,\n currentDepth,\n depth,\n docID: doc.id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess,\n populate,\n select,\n showHiddenFields,\n transactionID: req.transactionID!,\n })\n const docsIndex = keys.findIndex((key) => key === docKey)\n\n if (docsIndex > -1) {\n docs[docsIndex] = doc\n }\n }\n }\n\n // Return docs array,\n // which has now been injected with all fetched docs\n // and should match the length of the incoming keys arg\n return docs as TypeWithID[]\n }\n\nexport const getDataLoader = (req: PayloadRequest) => {\n const findQueries = new Map()\n const dataLoader = new DataLoader(batchAndLoadDocs(req)) as PayloadRequest['payloadDataLoader']\n\n dataLoader.find = ((args: FindArgs) => {\n const key = createFindDataloaderCacheKey(args)\n const cached = findQueries.get(key)\n if (cached) {\n return cached\n }\n const request = req.payload.find(args)\n findQueries.set(key, request)\n return request\n }) as Payload['find']\n\n return dataLoader\n}\n\nconst createFindDataloaderCacheKey = ({\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination,\n populate,\n req,\n select,\n showHiddenFields,\n sort,\n where,\n}: FindOptions<string, SelectType>): string =>\n JSON.stringify([\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination,\n populate,\n req?.locale,\n req?.fallbackLocale,\n req?.user?.id,\n req?.transactionID,\n select,\n showHiddenFields,\n sort,\n where,\n ])\n\ntype CreateCacheKeyArgs = {\n collectionSlug: string\n currentDepth: number\n depth: number\n docID: number | string\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n locale: string | string[]\n overrideAccess: boolean\n populate?: PopulateType\n select?: SelectType\n showHiddenFields: boolean\n transactionID: number | Promise<number | string> | string\n}\nexport const createDataloaderCacheKey = ({\n collectionSlug,\n currentDepth,\n depth,\n docID,\n draft,\n fallbackLocale,\n locale,\n overrideAccess,\n populate,\n select,\n showHiddenFields,\n transactionID,\n}: CreateCacheKeyArgs): string =>\n JSON.stringify([\n transactionID,\n collectionSlug,\n docID,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ])\n"],"names":["DataLoader","isValidID","batchAndLoadDocs","req","keys","payload","docs","map","batchByFindArgs","key","transactionID","collection","id","depth","currentDepth","locale","fallbackLocale","overrideAccess","showHiddenFields","draft","select","populate","JSON","parse","batchKeyArray","batchKey","stringify","idType","collections","customIDType","db","defaultIDType","sanitizedID","parseFloat","ids","Object","entries","result","find","disableErrors","Boolean","pagination","where","in","doc","docKey","createDataloaderCacheKey","collectionSlug","docID","docsIndex","findIndex","getDataLoader","findQueries","Map","dataLoader","args","createFindDataloaderCacheKey","cached","get","request","set","includeLockStatus","joins","limit","page","sort","user"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/collections/dataloader.ts"],"sourcesContent":["import type { BatchLoadFn } from 'dataloader'\n\nimport DataLoader from 'dataloader'\n\nimport type { FindArgs } from '../database/types.js'\nimport type { Payload, TypedFallbackLocale } from '../index.js'\nimport type { PayloadRequest, PopulateType, SelectType } from '../types/index.js'\nimport type { TypeWithID } from './config/types.js'\nimport type { FindOptions } from './operations/local/find.js'\n\nimport { isValidID } from '../utilities/isValidID.js'\n\n// Payload uses `dataloader` to solve the classic GraphQL N+1 problem.\n\n// We keep a list of all documents requested to be populated for any given request\n// and then batch together documents within the same collection,\n// making only 1 find per each collection, rather than `findByID` per each requested doc.\n\n// This dramatically improves performance for REST and Local API `depth` populations,\n// and also ensures complex GraphQL queries perform lightning-fast.\n\nconst batchAndLoadDocs =\n (req: PayloadRequest): BatchLoadFn<string, TypeWithID> =>\n async (keys: readonly string[]): Promise<TypeWithID[]> => {\n const { payload } = req\n\n // Create docs array of same length as keys, using null as value\n // We will replace nulls with injected docs as they are retrieved\n const docs: (null | TypeWithID)[] = keys.map(() => null)\n\n /**\n * Batch IDs by their `find` args\n * so we can make one find query per combination of collection, depth, locale, and fallbackLocale.\n *\n * Resulting shape will be as follows:\n {\n // key is stringified set of find args\n '[null,\"pages\",2,0,\"es\",\"en\",false,false]': [\n // value is array of IDs to find with these args\n 'q34tl23462346234524',\n '435523540194324280',\n '2346245j35l3j5234532li',\n ],\n // etc\n };\n *\n **/\n\n const batchByFindArgs: Record<string, string[]> = {}\n\n for (const key of keys) {\n const [\n transactionID,\n collection,\n id,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ] = JSON.parse(key)\n\n const batchKeyArray = [\n transactionID,\n collection,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ]\n\n const batchKey = JSON.stringify(batchKeyArray)\n\n const idType = payload.collections?.[collection]?.customIDType || payload.db.defaultIDType\n const sanitizedID = idType === 'number' ? parseFloat(id) : id\n\n if (isValidID(sanitizedID, idType)) {\n batchByFindArgs[batchKey] = [...(batchByFindArgs[batchKey] || []), sanitizedID]\n }\n }\n\n // Run find requests one after another, so as to not hang transactions\n\n for (const [batchKey, ids] of Object.entries(batchByFindArgs)) {\n const [\n transactionID,\n collection,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ] = JSON.parse(batchKey)\n\n req.transactionID = transactionID\n\n const enableTrash = Boolean(payload.collections?.[collection]?.config?.trash)\n const selectWithDeletedAt = enableTrash && select ? { ...select, deletedAt: true } : select\n\n const result = await payload.find({\n collection,\n currentDepth,\n depth,\n disableErrors: true,\n draft,\n fallbackLocale,\n locale,\n overrideAccess: Boolean(overrideAccess),\n pagination: false,\n populate,\n req,\n select: selectWithDeletedAt,\n showHiddenFields: Boolean(showHiddenFields),\n ...(enableTrash ? { trash: true } : {}),\n where: {\n id: {\n in: ids,\n },\n },\n })\n\n // For each returned doc, find index in original keys\n // Inject doc within docs array if index exists\n for (const doc of result.docs) {\n const docKey = createDataloaderCacheKey({\n collectionSlug: collection,\n currentDepth,\n depth,\n docID: doc.id,\n draft,\n fallbackLocale,\n locale,\n overrideAccess,\n populate,\n select,\n showHiddenFields,\n transactionID: req.transactionID!,\n })\n const docsIndex = keys.findIndex((key) => key === docKey)\n\n if (docsIndex > -1) {\n docs[docsIndex] = doc\n }\n }\n }\n\n // Return docs array,\n // which has now been injected with all fetched docs\n // and should match the length of the incoming keys arg\n return docs as TypeWithID[]\n }\n\nexport const getDataLoader = (req: PayloadRequest) => {\n const findQueries = new Map()\n const dataLoader = new DataLoader(batchAndLoadDocs(req)) as PayloadRequest['payloadDataLoader']\n\n dataLoader.find = ((args: FindArgs) => {\n const key = createFindDataloaderCacheKey(args)\n const cached = findQueries.get(key)\n if (cached) {\n return cached\n }\n const request = req.payload.find(args)\n findQueries.set(key, request)\n return request\n }) as Payload['find']\n\n return dataLoader\n}\n\nconst createFindDataloaderCacheKey = ({\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination,\n populate,\n req,\n select,\n showHiddenFields,\n sort,\n where,\n}: FindOptions<string, SelectType>): string =>\n JSON.stringify([\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination,\n populate,\n req?.locale,\n req?.fallbackLocale,\n req?.user?.id,\n req?.transactionID,\n select,\n showHiddenFields,\n sort,\n where,\n ])\n\ntype CreateCacheKeyArgs = {\n collectionSlug: string\n currentDepth: number\n depth: number\n docID: number | string\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n locale: string | string[]\n overrideAccess: boolean\n populate?: PopulateType\n select?: SelectType\n showHiddenFields: boolean\n transactionID: number | Promise<number | string> | string\n}\nexport const createDataloaderCacheKey = ({\n collectionSlug,\n currentDepth,\n depth,\n docID,\n draft,\n fallbackLocale,\n locale,\n overrideAccess,\n populate,\n select,\n showHiddenFields,\n transactionID,\n}: CreateCacheKeyArgs): string =>\n JSON.stringify([\n transactionID,\n collectionSlug,\n docID,\n depth,\n currentDepth,\n locale,\n fallbackLocale,\n overrideAccess,\n showHiddenFields,\n draft,\n select,\n populate,\n ])\n"],"names":["DataLoader","isValidID","batchAndLoadDocs","req","keys","payload","docs","map","batchByFindArgs","key","transactionID","collection","id","depth","currentDepth","locale","fallbackLocale","overrideAccess","showHiddenFields","draft","select","populate","JSON","parse","batchKeyArray","batchKey","stringify","idType","collections","customIDType","db","defaultIDType","sanitizedID","parseFloat","ids","Object","entries","enableTrash","Boolean","config","trash","selectWithDeletedAt","deletedAt","result","find","disableErrors","pagination","where","in","doc","docKey","createDataloaderCacheKey","collectionSlug","docID","docsIndex","findIndex","getDataLoader","findQueries","Map","dataLoader","args","createFindDataloaderCacheKey","cached","get","request","set","includeLockStatus","joins","limit","page","sort","user"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationshipPopulationPromise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/afterRead/relationshipPopulationPromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"relationshipPopulationPromise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/afterRead/relationshipPopulationPromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAwItF,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,cAAc,EAAE,mBAAmB,CAAA;IACnC,KAAK,EAAE,SAAS,GAAG,iBAAiB,GAAG,WAAW,CAAA;IAClD,MAAM,EAAE,IAAI,GAAG,MAAM,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,EAAE,OAAO,CAAA;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,6BAA6B,gKAavC,WAAW,KAAG,OAAO,CAAC,IAAI,CAyI5B,CAAA"}
|
|
@@ -40,7 +40,11 @@ const populate = async ({ currentDepth, data, dataReference, depth, draft, fallb
|
|
|
40
40
|
transactionID: req.transactionID
|
|
41
41
|
}));
|
|
42
42
|
}
|
|
43
|
-
if (
|
|
43
|
+
if (relatedCollection.config.trash && relationshipValue) {
|
|
44
|
+
if (relationshipValue.deletedAt) {
|
|
45
|
+
relationshipValue = null;
|
|
46
|
+
}
|
|
47
|
+
} else if (!relationshipValue) {
|
|
44
48
|
// ids are visible regardless of access controls
|
|
45
49
|
relationshipValue = id;
|
|
46
50
|
}
|
|
@@ -175,6 +179,21 @@ export const relationshipPopulationPromise = async ({ currentDepth, depth, draft
|
|
|
175
179
|
});
|
|
176
180
|
}
|
|
177
181
|
await Promise.all(rowPromises);
|
|
182
|
+
if (field.type !== 'join' && fieldSupportsMany(field) && field.hasMany) {
|
|
183
|
+
const notNull = Array.isArray(field.relationTo) ? (v)=>v !== null && v?.value !== null : (v)=>v !== null;
|
|
184
|
+
if (fieldShouldBeLocalized({
|
|
185
|
+
field,
|
|
186
|
+
parentIsLocalized
|
|
187
|
+
}) && locale === 'all' && typeof resultingDoc[field.name] === 'object' && resultingDoc[field.name] !== null) {
|
|
188
|
+
for (const localeKey of Object.keys(resultingDoc[field.name])){
|
|
189
|
+
if (Array.isArray(resultingDoc[field.name][localeKey])) {
|
|
190
|
+
resultingDoc[field.name][localeKey] = resultingDoc[field.name][localeKey].filter(notNull);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} else if (Array.isArray(resultingDoc[field.name])) {
|
|
194
|
+
resultingDoc[field.name] = resultingDoc[field.name].filter(notNull);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
178
197
|
};
|
|
179
198
|
|
|
180
199
|
//# sourceMappingURL=relationshipPopulationPromise.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/hooks/afterRead/relationshipPopulationPromise.ts"],"sourcesContent":["import type { TypedFallbackLocale } from '../../../index.js'\nimport type { PayloadRequest, PopulateType } from '../../../types/index.js'\nimport type { JoinField, RelationshipField, UploadField } from '../../config/types.js'\n\nimport { createDataloaderCacheKey } from '../../../collections/dataloader.js'\nimport { fieldHasMaxDepth, fieldShouldBeLocalized, fieldSupportsMany } from '../../config/types.js'\n\ntype PopulateArgs = {\n currentDepth: number\n data: Record<string, unknown>\n dataReference: Record<string, any>\n depth: number\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n field: JoinField | RelationshipField | UploadField\n index?: number\n key?: string\n locale: null | string\n overrideAccess: boolean\n populateArg?: PopulateType\n req: PayloadRequest\n showHiddenFields: boolean\n}\n\n// TODO: this function is mess, refactor logic\nconst populate = async ({\n currentDepth,\n data,\n dataReference,\n depth,\n draft,\n fallbackLocale,\n field,\n index,\n key,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n}: PopulateArgs) => {\n const dataToUpdate = dataReference\n let relation\n if (field.type === 'join') {\n relation = Array.isArray(field.collection) ? data.relationTo : field.collection\n } else {\n relation = Array.isArray(field.relationTo) ? (data.relationTo as string) : field.relationTo\n }\n\n const relatedCollection =\n req.payload.collections[relation as keyof typeof req.payload.collections]\n\n if (relatedCollection) {\n let id: unknown\n\n if (field.type === 'join' && Array.isArray(field.collection)) {\n id = data.value\n } else if (field.type !== 'join' && Array.isArray(field.relationTo)) {\n id = data.value\n } else {\n id = data\n }\n\n let relationshipValue\n const shouldPopulate = depth && currentDepth <= depth\n\n if (\n typeof id !== 'string' &&\n typeof id !== 'number' &&\n typeof id?.toString === 'function' &&\n typeof id !== 'object'\n ) {\n id = id.toString()\n }\n\n if (shouldPopulate) {\n relationshipValue = await req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: relatedCollection.config.slug,\n currentDepth: currentDepth + 1,\n depth,\n docID: id as string,\n draft,\n fallbackLocale: fallbackLocale!,\n locale: locale!,\n overrideAccess,\n populate: populateArg,\n select:\n populateArg?.[relatedCollection.config.slug] ??\n relatedCollection.config.defaultPopulate,\n showHiddenFields,\n transactionID: req.transactionID!,\n }),\n )\n }\n\n if (!relationshipValue) {\n // ids are visible regardless of access controls\n relationshipValue = id\n }\n if (typeof index === 'number' && typeof key === 'string') {\n if (field.type !== 'join' && Array.isArray(field.relationTo)) {\n dataToUpdate[field.name][key][index].value = relationshipValue\n } else {\n if (field.type === 'join' && Array.isArray(field.collection)) {\n dataToUpdate[field.name][key][index].value = relationshipValue\n } else {\n dataToUpdate[field.name][key][index] = relationshipValue\n }\n }\n } else if (typeof index === 'number' || typeof key === 'string') {\n if (field.type === 'join') {\n if (!Array.isArray(field.collection)) {\n dataToUpdate[field.name].docs[index ?? key!] = relationshipValue\n } else {\n dataToUpdate[field.name].docs[index ?? key!].value = relationshipValue\n }\n } else if (Array.isArray(field.relationTo)) {\n dataToUpdate[field.name][index ?? key!].value = relationshipValue\n } else {\n dataToUpdate[field.name][index ?? key!] = relationshipValue\n }\n } else if (field.type !== 'join' && Array.isArray(field.relationTo)) {\n dataToUpdate[field.name].value = relationshipValue\n } else {\n if (field.type === 'join' && Array.isArray(field.collection)) {\n dataToUpdate[field.name].value = relationshipValue\n } else {\n dataToUpdate[field.name] = relationshipValue\n }\n }\n }\n}\n\ntype PromiseArgs = {\n currentDepth: number\n depth: number\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n field: JoinField | RelationshipField | UploadField\n locale: null | string\n overrideAccess: boolean\n parentIsLocalized: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields: boolean\n siblingDoc: Record<string, any>\n}\n\nexport const relationshipPopulationPromise = async ({\n currentDepth,\n depth,\n draft,\n fallbackLocale,\n field,\n locale,\n overrideAccess,\n parentIsLocalized,\n populate: populateArg,\n req,\n showHiddenFields,\n siblingDoc,\n}: PromiseArgs): Promise<void> => {\n const resultingDoc = siblingDoc\n const populateDepth = fieldHasMaxDepth(field) && field.maxDepth! < depth ? field.maxDepth : depth\n const rowPromises: Promise<void>[] = []\n\n if (field.type === 'join' || (fieldSupportsMany(field) && field.hasMany)) {\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n locale === 'all' &&\n typeof siblingDoc[field.name] === 'object' &&\n siblingDoc[field.name] !== null\n ) {\n Object.keys(siblingDoc[field.name]).forEach((localeKey) => {\n if (Array.isArray(siblingDoc[field.name][localeKey])) {\n siblingDoc[field.name][localeKey].forEach((_relatedDoc: any, index: number) => {\n const rowPromise = async () => {\n await populate({\n currentDepth,\n data: siblingDoc[field.name][localeKey][index],\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n index,\n key: localeKey,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n rowPromises.push(rowPromise())\n })\n }\n })\n } else if (\n Array.isArray(siblingDoc[field.name]) ||\n Array.isArray(siblingDoc[field.name]?.docs)\n ) {\n ;(Array.isArray(siblingDoc[field.name])\n ? siblingDoc[field.name]\n : siblingDoc[field.name].docs\n ).forEach((relatedDoc: any, index: number) => {\n const rowPromise = async () => {\n if (relatedDoc) {\n await populate({\n currentDepth,\n data:\n !(field.type === 'join' && Array.isArray(field.collection)) && relatedDoc?.id\n ? relatedDoc.id\n : relatedDoc,\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n index,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n }\n\n rowPromises.push(rowPromise())\n })\n }\n } else if (\n field.localized &&\n locale === 'all' &&\n typeof siblingDoc[field.name] === 'object' &&\n siblingDoc[field.name] !== null\n ) {\n Object.keys(siblingDoc[field.name]).forEach((localeKey) => {\n const rowPromise = async () => {\n await populate({\n currentDepth,\n data: siblingDoc[field.name][localeKey],\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n key: localeKey,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n rowPromises.push(rowPromise())\n })\n\n await Promise.all(rowPromises)\n } else if (siblingDoc[field.name]) {\n await populate({\n currentDepth,\n data: siblingDoc[field.name],\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n await Promise.all(rowPromises)\n}\n"],"names":["createDataloaderCacheKey","fieldHasMaxDepth","fieldShouldBeLocalized","fieldSupportsMany","populate","currentDepth","data","dataReference","depth","draft","fallbackLocale","field","index","key","locale","overrideAccess","populateArg","req","showHiddenFields","dataToUpdate","relation","type","Array","isArray","collection","relationTo","relatedCollection","payload","collections","id","value","relationshipValue","shouldPopulate","toString","payloadDataLoader","load","collectionSlug","config","slug","docID","select","defaultPopulate","transactionID","name","docs","relationshipPopulationPromise","parentIsLocalized","siblingDoc","resultingDoc","populateDepth","maxDepth","rowPromises","hasMany","Object","keys","forEach","localeKey","_relatedDoc","rowPromise","push","relatedDoc","localized","Promise","all"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/fields/hooks/afterRead/relationshipPopulationPromise.ts"],"sourcesContent":["import type { TypedFallbackLocale } from '../../../index.js'\nimport type { PayloadRequest, PopulateType } from '../../../types/index.js'\nimport type { JoinField, RelationshipField, UploadField } from '../../config/types.js'\n\nimport { createDataloaderCacheKey } from '../../../collections/dataloader.js'\nimport { fieldHasMaxDepth, fieldShouldBeLocalized, fieldSupportsMany } from '../../config/types.js'\n\ntype PopulateArgs = {\n currentDepth: number\n data: Record<string, unknown>\n dataReference: Record<string, any>\n depth: number\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n field: JoinField | RelationshipField | UploadField\n index?: number\n key?: string\n locale: null | string\n overrideAccess: boolean\n populateArg?: PopulateType\n req: PayloadRequest\n showHiddenFields: boolean\n}\n\n// TODO: this function is mess, refactor logic\nconst populate = async ({\n currentDepth,\n data,\n dataReference,\n depth,\n draft,\n fallbackLocale,\n field,\n index,\n key,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n}: PopulateArgs) => {\n const dataToUpdate = dataReference\n let relation\n if (field.type === 'join') {\n relation = Array.isArray(field.collection) ? data.relationTo : field.collection\n } else {\n relation = Array.isArray(field.relationTo) ? (data.relationTo as string) : field.relationTo\n }\n\n const relatedCollection =\n req.payload.collections[relation as keyof typeof req.payload.collections]\n\n if (relatedCollection) {\n let id: unknown\n\n if (field.type === 'join' && Array.isArray(field.collection)) {\n id = data.value\n } else if (field.type !== 'join' && Array.isArray(field.relationTo)) {\n id = data.value\n } else {\n id = data\n }\n\n let relationshipValue\n const shouldPopulate = depth && currentDepth <= depth\n\n if (\n typeof id !== 'string' &&\n typeof id !== 'number' &&\n typeof id?.toString === 'function' &&\n typeof id !== 'object'\n ) {\n id = id.toString()\n }\n\n if (shouldPopulate) {\n relationshipValue = await req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: relatedCollection.config.slug,\n currentDepth: currentDepth + 1,\n depth,\n docID: id as string,\n draft,\n fallbackLocale: fallbackLocale!,\n locale: locale!,\n overrideAccess,\n populate: populateArg,\n select:\n populateArg?.[relatedCollection.config.slug] ??\n relatedCollection.config.defaultPopulate,\n showHiddenFields,\n transactionID: req.transactionID!,\n }),\n )\n }\n\n if (relatedCollection.config.trash && relationshipValue) {\n if ((relationshipValue as Record<string, unknown>).deletedAt) {\n relationshipValue = null\n }\n } else if (!relationshipValue) {\n // ids are visible regardless of access controls\n relationshipValue = id\n }\n if (typeof index === 'number' && typeof key === 'string') {\n if (field.type !== 'join' && Array.isArray(field.relationTo)) {\n dataToUpdate[field.name][key][index].value = relationshipValue\n } else {\n if (field.type === 'join' && Array.isArray(field.collection)) {\n dataToUpdate[field.name][key][index].value = relationshipValue\n } else {\n dataToUpdate[field.name][key][index] = relationshipValue\n }\n }\n } else if (typeof index === 'number' || typeof key === 'string') {\n if (field.type === 'join') {\n if (!Array.isArray(field.collection)) {\n dataToUpdate[field.name].docs[index ?? key!] = relationshipValue\n } else {\n dataToUpdate[field.name].docs[index ?? key!].value = relationshipValue\n }\n } else if (Array.isArray(field.relationTo)) {\n dataToUpdate[field.name][index ?? key!].value = relationshipValue\n } else {\n dataToUpdate[field.name][index ?? key!] = relationshipValue\n }\n } else if (field.type !== 'join' && Array.isArray(field.relationTo)) {\n dataToUpdate[field.name].value = relationshipValue\n } else {\n if (field.type === 'join' && Array.isArray(field.collection)) {\n dataToUpdate[field.name].value = relationshipValue\n } else {\n dataToUpdate[field.name] = relationshipValue\n }\n }\n }\n}\n\ntype PromiseArgs = {\n currentDepth: number\n depth: number\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n field: JoinField | RelationshipField | UploadField\n locale: null | string\n overrideAccess: boolean\n parentIsLocalized: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields: boolean\n siblingDoc: Record<string, any>\n}\n\nexport const relationshipPopulationPromise = async ({\n currentDepth,\n depth,\n draft,\n fallbackLocale,\n field,\n locale,\n overrideAccess,\n parentIsLocalized,\n populate: populateArg,\n req,\n showHiddenFields,\n siblingDoc,\n}: PromiseArgs): Promise<void> => {\n const resultingDoc = siblingDoc\n const populateDepth = fieldHasMaxDepth(field) && field.maxDepth! < depth ? field.maxDepth : depth\n const rowPromises: Promise<void>[] = []\n\n if (field.type === 'join' || (fieldSupportsMany(field) && field.hasMany)) {\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n locale === 'all' &&\n typeof siblingDoc[field.name] === 'object' &&\n siblingDoc[field.name] !== null\n ) {\n Object.keys(siblingDoc[field.name]).forEach((localeKey) => {\n if (Array.isArray(siblingDoc[field.name][localeKey])) {\n siblingDoc[field.name][localeKey].forEach((_relatedDoc: any, index: number) => {\n const rowPromise = async () => {\n await populate({\n currentDepth,\n data: siblingDoc[field.name][localeKey][index],\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n index,\n key: localeKey,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n rowPromises.push(rowPromise())\n })\n }\n })\n } else if (\n Array.isArray(siblingDoc[field.name]) ||\n Array.isArray(siblingDoc[field.name]?.docs)\n ) {\n ;(Array.isArray(siblingDoc[field.name])\n ? siblingDoc[field.name]\n : siblingDoc[field.name].docs\n ).forEach((relatedDoc: any, index: number) => {\n const rowPromise = async () => {\n if (relatedDoc) {\n await populate({\n currentDepth,\n data:\n !(field.type === 'join' && Array.isArray(field.collection)) && relatedDoc?.id\n ? relatedDoc.id\n : relatedDoc,\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n index,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n }\n\n rowPromises.push(rowPromise())\n })\n }\n } else if (\n field.localized &&\n locale === 'all' &&\n typeof siblingDoc[field.name] === 'object' &&\n siblingDoc[field.name] !== null\n ) {\n Object.keys(siblingDoc[field.name]).forEach((localeKey) => {\n const rowPromise = async () => {\n await populate({\n currentDepth,\n data: siblingDoc[field.name][localeKey],\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n key: localeKey,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n rowPromises.push(rowPromise())\n })\n\n await Promise.all(rowPromises)\n } else if (siblingDoc[field.name]) {\n await populate({\n currentDepth,\n data: siblingDoc[field.name],\n dataReference: resultingDoc,\n depth: populateDepth!,\n draft,\n fallbackLocale,\n field,\n locale,\n overrideAccess,\n populateArg,\n req,\n showHiddenFields,\n })\n }\n await Promise.all(rowPromises)\n\n if (field.type !== 'join' && fieldSupportsMany(field) && field.hasMany) {\n const notNull = Array.isArray(field.relationTo)\n ? (v: unknown) => v !== null && (v as Record<string, unknown>)?.value !== null\n : (v: unknown) => v !== null\n\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n locale === 'all' &&\n typeof resultingDoc[field.name] === 'object' &&\n resultingDoc[field.name] !== null\n ) {\n for (const localeKey of Object.keys(resultingDoc[field.name])) {\n if (Array.isArray(resultingDoc[field.name][localeKey])) {\n resultingDoc[field.name][localeKey] = resultingDoc[field.name][localeKey].filter(notNull)\n }\n }\n } else if (Array.isArray(resultingDoc[field.name])) {\n resultingDoc[field.name] = (resultingDoc[field.name] as unknown[]).filter(notNull)\n }\n }\n}\n"],"names":["createDataloaderCacheKey","fieldHasMaxDepth","fieldShouldBeLocalized","fieldSupportsMany","populate","currentDepth","data","dataReference","depth","draft","fallbackLocale","field","index","key","locale","overrideAccess","populateArg","req","showHiddenFields","dataToUpdate","relation","type","Array","isArray","collection","relationTo","relatedCollection","payload","collections","id","value","relationshipValue","shouldPopulate","toString","payloadDataLoader","load","collectionSlug","config","slug","docID","select","defaultPopulate","transactionID","trash","deletedAt","name","docs","relationshipPopulationPromise","parentIsLocalized","siblingDoc","resultingDoc","populateDepth","maxDepth","rowPromises","hasMany","Object","keys","forEach","localeKey","_relatedDoc","rowPromise","push","relatedDoc","localized","Promise","all","notNull","v","filter"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@depup/payload",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.81.0-depup.1",
|
|
4
4
|
"description": "Node, React, Headless CMS and Application Framework built on Next.js (with updated dependencies)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -92,9 +92,9 @@
|
|
|
92
92
|
"README.md"
|
|
93
93
|
],
|
|
94
94
|
"dependencies": {
|
|
95
|
-
"@next/env": "^16.2.
|
|
95
|
+
"@next/env": "^16.2.2",
|
|
96
96
|
"@types/busboy": "1.5.4",
|
|
97
|
-
"ajv": "
|
|
97
|
+
"ajv": "8.18.0",
|
|
98
98
|
"bson-objectid": "2.0.4",
|
|
99
99
|
"busboy": "^1.6.0",
|
|
100
100
|
"ci-info": "^4.4.0",
|
|
@@ -110,19 +110,19 @@
|
|
|
110
110
|
"jose": "^6.2.2",
|
|
111
111
|
"json-schema-to-typescript": "^15.0.4",
|
|
112
112
|
"minimist": "1.2.8",
|
|
113
|
-
"path-to-regexp": "^8.4.
|
|
113
|
+
"path-to-regexp": "^8.4.2",
|
|
114
114
|
"pino": "^10.3.1",
|
|
115
115
|
"pino-pretty": "^13.1.3",
|
|
116
116
|
"pluralize": "8.0.0",
|
|
117
|
-
"qs-esm": "
|
|
117
|
+
"qs-esm": "8.0.1",
|
|
118
118
|
"range-parser": "1.2.1",
|
|
119
119
|
"sanitize-filename": "^1.6.4",
|
|
120
120
|
"ts-essentials": "^10.1.1",
|
|
121
121
|
"tsx": "4.21.0",
|
|
122
|
-
"undici": "^
|
|
122
|
+
"undici": "^8.0.0",
|
|
123
123
|
"uuid": "^13.0.0",
|
|
124
124
|
"ws": "^8.20.0",
|
|
125
|
-
"@payloadcms/translations": "3.
|
|
125
|
+
"@payloadcms/translations": "3.81.0"
|
|
126
126
|
},
|
|
127
127
|
"devDependencies": {
|
|
128
128
|
"@hyrious/esbuild-plugin-commonjs": "0.2.6",
|
|
@@ -169,11 +169,7 @@
|
|
|
169
169
|
"changes": {
|
|
170
170
|
"@next/env": {
|
|
171
171
|
"from": "^15.1.5",
|
|
172
|
-
"to": "^16.2.
|
|
173
|
-
},
|
|
174
|
-
"ajv": {
|
|
175
|
-
"from": "8.17.1",
|
|
176
|
-
"to": "^8.18.0"
|
|
172
|
+
"to": "^16.2.2"
|
|
177
173
|
},
|
|
178
174
|
"ci-info": {
|
|
179
175
|
"from": "^4.1.0",
|
|
@@ -188,7 +184,7 @@
|
|
|
188
184
|
"to": "^10.0.1"
|
|
189
185
|
},
|
|
190
186
|
"file-type": {
|
|
191
|
-
"from": "
|
|
187
|
+
"from": "21.3.4",
|
|
192
188
|
"to": "^22.0.0"
|
|
193
189
|
},
|
|
194
190
|
"get-tsconfig": {
|
|
@@ -200,7 +196,7 @@
|
|
|
200
196
|
"to": "^2.3.0"
|
|
201
197
|
},
|
|
202
198
|
"jose": {
|
|
203
|
-
"from": "5.
|
|
199
|
+
"from": "5.10.0",
|
|
204
200
|
"to": "^6.2.2"
|
|
205
201
|
},
|
|
206
202
|
"json-schema-to-typescript": {
|
|
@@ -209,7 +205,7 @@
|
|
|
209
205
|
},
|
|
210
206
|
"path-to-regexp": {
|
|
211
207
|
"from": "6.3.0",
|
|
212
|
-
"to": "^8.4.
|
|
208
|
+
"to": "^8.4.2"
|
|
213
209
|
},
|
|
214
210
|
"pino": {
|
|
215
211
|
"from": "9.14.0",
|
|
@@ -219,10 +215,6 @@
|
|
|
219
215
|
"from": "13.1.2",
|
|
220
216
|
"to": "^13.1.3"
|
|
221
217
|
},
|
|
222
|
-
"qs-esm": {
|
|
223
|
-
"from": "7.0.2",
|
|
224
|
-
"to": "^8.0.1"
|
|
225
|
-
},
|
|
226
218
|
"sanitize-filename": {
|
|
227
219
|
"from": "1.6.3",
|
|
228
220
|
"to": "^1.6.4"
|
|
@@ -233,7 +225,7 @@
|
|
|
233
225
|
},
|
|
234
226
|
"undici": {
|
|
235
227
|
"from": "7.24.4",
|
|
236
|
-
"to": "^
|
|
228
|
+
"to": "^8.0.0"
|
|
237
229
|
},
|
|
238
230
|
"uuid": {
|
|
239
231
|
"from": "10.0.0",
|
|
@@ -244,10 +236,10 @@
|
|
|
244
236
|
"to": "^8.20.0"
|
|
245
237
|
}
|
|
246
238
|
},
|
|
247
|
-
"depsUpdated":
|
|
239
|
+
"depsUpdated": 17,
|
|
248
240
|
"originalPackage": "payload",
|
|
249
|
-
"originalVersion": "3.
|
|
250
|
-
"processedAt": "2026-
|
|
241
|
+
"originalVersion": "3.81.0",
|
|
242
|
+
"processedAt": "2026-04-02T12:29:07.460Z",
|
|
251
243
|
"smokeTest": "passed"
|
|
252
244
|
}
|
|
253
245
|
}
|