payload 4.0.0-internal.293e026 → 4.0.0-internal.2fddfc0
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/admin/fields/Row.d.ts +2 -2
- package/dist/admin/fields/Row.d.ts.map +1 -1
- package/dist/admin/fields/Row.js.map +1 -1
- package/dist/admin/forms/Description.d.ts +2 -2
- package/dist/admin/forms/Description.d.ts.map +1 -1
- package/dist/admin/forms/Description.js.map +1 -1
- package/dist/admin/forms/Field.d.ts +1 -3
- package/dist/admin/forms/Field.d.ts.map +1 -1
- package/dist/admin/forms/Field.js.map +1 -1
- package/dist/admin/types.d.ts +1 -1
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/document.d.ts +0 -4
- package/dist/admin/views/document.d.ts.map +1 -1
- package/dist/admin/views/document.js.map +1 -1
- package/dist/admin/views/list.d.ts +5 -0
- package/dist/admin/views/list.d.ts.map +1 -1
- package/dist/admin/views/list.js.map +1 -1
- package/dist/auth/baseFields/apiKey.d.ts +10 -2
- package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
- package/dist/auth/baseFields/apiKey.js +35 -24
- package/dist/auth/baseFields/apiKey.js.map +1 -1
- package/dist/auth/getAuthFields.js +2 -2
- package/dist/auth/getAuthFields.js.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateCollections.js +1 -0
- package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
- package/dist/bin/generateImportMap/iterateConfig.js +12 -0
- package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +1 -11
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/types.d.ts +1 -0
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/endpoints/create.d.ts.map +1 -1
- package/dist/collections/endpoints/create.js +0 -2
- package/dist/collections/endpoints/create.js.map +1 -1
- package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
- package/dist/collections/endpoints/updateByID.js +1 -2
- package/dist/collections/endpoints/updateByID.js.map +1 -1
- package/dist/collections/operations/count.d.ts.map +1 -1
- package/dist/collections/operations/count.js +1 -0
- package/dist/collections/operations/count.js.map +1 -1
- package/dist/collections/operations/create.d.ts +0 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +14 -6
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/local/update.d.ts +4 -8
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js +1 -2
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/update.d.ts +0 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +8 -4
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +0 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +1 -5
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts +9 -0
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -0
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js +170 -0
- package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.js.map +1 -0
- package/dist/collections/operations/utilities/update.d.ts +1 -2
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +48 -57
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +23 -0
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/types.d.ts +14 -17
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/errors/ValidationError.d.ts +1 -0
- package/dist/errors/ValidationError.d.ts.map +1 -1
- package/dist/errors/ValidationError.js.map +1 -1
- package/dist/exports/migrations.d.ts +5 -13
- package/dist/exports/migrations.d.ts.map +1 -1
- package/dist/exports/migrations.js +5 -13
- package/dist/exports/migrations.js.map +1 -1
- package/dist/exports/shared.d.ts +1 -1
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +1 -1
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +10 -3
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +1 -6
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/endpoints/update.d.ts.map +1 -1
- package/dist/globals/endpoints/update.js +0 -2
- package/dist/globals/endpoints/update.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts +4 -6
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js +1 -2
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/update.d.ts +0 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +52 -58
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/index.bundled.d.ts +123 -107
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/query-presets/config.d.ts.map +1 -1
- package/dist/query-presets/config.js +73 -34
- package/dist/query-presets/config.js.map +1 -1
- package/dist/query-presets/constraints.d.ts.map +1 -1
- package/dist/query-presets/constraints.js +2 -1
- package/dist/query-presets/constraints.js.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.js +8 -0
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/getFieldByPath.d.ts.map +1 -1
- package/dist/utilities/getFieldByPath.js.map +1 -1
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/dist/utilities/mergeLocalizedData.d.ts +14 -4
- package/dist/utilities/mergeLocalizedData.d.ts.map +1 -1
- package/dist/utilities/mergeLocalizedData.js +49 -34
- package/dist/utilities/mergeLocalizedData.js.map +1 -1
- package/dist/utilities/mergeLocalizedData.spec.js +23 -23
- package/dist/utilities/mergeLocalizedData.spec.js.map +1 -1
- package/dist/utilities/parseParams/index.d.ts +2 -5
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseParams/index.spec.js +0 -9
- package/dist/utilities/parseParams/index.spec.js.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseFields.js.map +1 -1
- package/dist/versions/baseFields.d.ts +1 -2
- package/dist/versions/baseFields.d.ts.map +1 -1
- package/dist/versions/baseFields.js +0 -13
- package/dist/versions/baseFields.js.map +1 -1
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +0 -2
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +0 -2
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/buildSingleLocalePublishData.d.ts +32 -0
- package/dist/versions/buildSingleLocalePublishData.d.ts.map +1 -0
- package/dist/versions/buildSingleLocalePublishData.js +37 -0
- package/dist/versions/buildSingleLocalePublishData.js.map +1 -0
- package/dist/versions/saveVersion.d.ts +0 -2
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +12 -17
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/schedule/job.d.ts.map +1 -1
- package/dist/versions/schedule/job.js +2 -9
- package/dist/versions/schedule/job.js.map +1 -1
- package/dist/versions/types.d.ts +2 -15
- package/dist/versions/types.d.ts.map +1 -1
- package/dist/versions/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/database/migrations/templates/localizeStatus.d.ts +0 -10
- package/dist/database/migrations/templates/localizeStatus.d.ts.map +0 -1
- package/dist/database/migrations/templates/localizeStatus.js +0 -54
- package/dist/database/migrations/templates/localizeStatus.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/index.d.ts +0 -12
- package/dist/versions/migrations/localizeStatus/index.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/index.js +0 -33
- package/dist/versions/migrations/localizeStatus/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +0 -9
- package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/down.js +0 -112
- package/dist/versions/migrations/localizeStatus/mongo/down.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +0 -8
- package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/index.js +0 -8
- package/dist/versions/migrations/localizeStatus/mongo/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +0 -9
- package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/mongo/up.js +0 -220
- package/dist/versions/migrations/localizeStatus/mongo/up.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/down.d.ts +0 -11
- package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/down.js +0 -213
- package/dist/versions/migrations/localizeStatus/sql/down.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/index.d.ts +0 -8
- package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/index.js +0 -8
- package/dist/versions/migrations/localizeStatus/sql/index.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +0 -13
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +0 -51
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +0 -13
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +0 -54
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/up.d.ts +0 -11
- package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +0 -1
- package/dist/versions/migrations/localizeStatus/sql/up.js +0 -277
- package/dist/versions/migrations/localizeStatus/sql/up.js.map +0 -1
- package/dist/versions/saveSnapshot.d.ts +0 -18
- package/dist/versions/saveSnapshot.d.ts.map +0 -1
- package/dist/versions/saveSnapshot.js +0 -38
- package/dist/versions/saveSnapshot.js.map +0 -1
|
@@ -23,25 +23,64 @@ export const getQueryPresetsConfig = (config)=>({
|
|
|
23
23
|
{
|
|
24
24
|
name: 'title',
|
|
25
25
|
type: 'text',
|
|
26
|
+
admin: {
|
|
27
|
+
className: 'query-preset-title'
|
|
28
|
+
},
|
|
26
29
|
required: true
|
|
27
30
|
},
|
|
28
31
|
{
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
type: 'row',
|
|
33
|
+
admin: {
|
|
34
|
+
className: 'query-preset-controls-row'
|
|
35
|
+
},
|
|
36
|
+
fields: [
|
|
37
|
+
{
|
|
38
|
+
name: 'presetsHeading',
|
|
39
|
+
type: 'ui',
|
|
40
|
+
admin: {
|
|
41
|
+
components: {
|
|
42
|
+
Field: {
|
|
43
|
+
clientProps: {
|
|
44
|
+
i18nKey: 'general:presets'
|
|
45
|
+
},
|
|
46
|
+
path: '@payloadcms/ui#QueryPresetsHeading'
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'groupBy',
|
|
53
|
+
type: 'text',
|
|
54
|
+
admin: {
|
|
55
|
+
components: {
|
|
56
|
+
Cell: '@payloadcms/ui#QueryPresetsGroupByCell',
|
|
57
|
+
Field: '@payloadcms/ui#QueryPresetsGroupByField'
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
label: 'Group By'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'columns',
|
|
64
|
+
type: 'json',
|
|
65
|
+
admin: {
|
|
66
|
+
components: {
|
|
67
|
+
Cell: '@payloadcms/ui#QueryPresetsColumnsCell',
|
|
68
|
+
Field: '@payloadcms/ui#QueryPresetsColumnField'
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
validate: (value)=>{
|
|
72
|
+
if (value) {
|
|
73
|
+
try {
|
|
74
|
+
JSON.parse(JSON.stringify(value));
|
|
75
|
+
} catch {
|
|
76
|
+
return 'Invalid JSON';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
39
80
|
}
|
|
40
81
|
}
|
|
41
|
-
|
|
42
|
-
}
|
|
82
|
+
]
|
|
43
83
|
},
|
|
44
|
-
getConstraints(config),
|
|
45
84
|
{
|
|
46
85
|
name: 'where',
|
|
47
86
|
type: 'json',
|
|
@@ -69,36 +108,36 @@ export const getQueryPresetsConfig = (config)=>({
|
|
|
69
108
|
label: 'Filters'
|
|
70
109
|
},
|
|
71
110
|
{
|
|
72
|
-
name: '
|
|
73
|
-
type: '
|
|
111
|
+
name: 'accessHeading',
|
|
112
|
+
type: 'ui',
|
|
74
113
|
admin: {
|
|
75
114
|
components: {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (value) {
|
|
82
|
-
try {
|
|
83
|
-
JSON.parse(JSON.stringify(value));
|
|
84
|
-
} catch {
|
|
85
|
-
return 'Invalid JSON';
|
|
115
|
+
Field: {
|
|
116
|
+
clientProps: {
|
|
117
|
+
i18nKey: 'general:access'
|
|
118
|
+
},
|
|
119
|
+
path: '@payloadcms/ui#QueryPresetsHeading'
|
|
86
120
|
}
|
|
87
121
|
}
|
|
88
|
-
return true;
|
|
89
122
|
}
|
|
90
123
|
},
|
|
91
124
|
{
|
|
92
|
-
name: '
|
|
93
|
-
type: '
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
125
|
+
name: 'isShared',
|
|
126
|
+
type: 'checkbox',
|
|
127
|
+
defaultValue: false,
|
|
128
|
+
validate: (isShared, { data })=>{
|
|
129
|
+
const typedData = data;
|
|
130
|
+
// ensure the `isShared` is only true if all constraints are 'onlyMe'
|
|
131
|
+
if (typedData?.access) {
|
|
132
|
+
const someOperationsAreShared = Object.values(typedData.access).some((operation)=>operation.constraint !== 'onlyMe');
|
|
133
|
+
if (!isShared && someOperationsAreShared) {
|
|
134
|
+
return 'If any constraint is not "onlyMe", the preset must be shared';
|
|
135
|
+
}
|
|
98
136
|
}
|
|
99
|
-
|
|
100
|
-
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
101
139
|
},
|
|
140
|
+
getConstraints(config),
|
|
102
141
|
{
|
|
103
142
|
name: 'relatedCollection',
|
|
104
143
|
type: 'select',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-presets/config.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Option } from '../fields/config/types.js'\n\nimport { transformWhereQuery } from '../utilities/transformWhereQuery.js'\nimport { validateWhereQuery } from '../utilities/validateWhereQuery.js'\nimport { getAccess } from './access.js'\nimport { getConstraints } from './constraints.js'\nimport { operations, type QueryPreset } from './types.js'\n\nexport const queryPresetsCollectionSlug = 'payload-query-presets'\n\nexport const getQueryPresetsConfig = (config: Config): CollectionConfig => ({\n slug: queryPresetsCollectionSlug,\n access: getAccess(config),\n admin: {\n defaultColumns: ['title', 'isShared', 'access', 'where', 'columns', 'groupBy'],\n hidden: true,\n useAsTitle: 'title',\n },\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n },\n {\n name: 'isShared',\n type: 'checkbox',\n defaultValue: false,\n validate: (isShared, { data }) => {\n const typedData = data as QueryPreset\n\n // ensure the `isShared` is only true if all constraints are 'onlyMe'\n if (typedData?.access) {\n const someOperationsAreShared = Object.values(typedData.access).some(\n (operation) => operation.constraint !== 'onlyMe',\n )\n\n if (!isShared && someOperationsAreShared) {\n return 'If any constraint is not \"onlyMe\", the preset must be shared'\n }\n }\n\n return true\n },\n },\n getConstraints(config),\n {\n name: 'where',\n type: 'json',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsWhereCell',\n Field: '@payloadcms/ui#QueryPresetsWhereField',\n },\n },\n hooks: {\n beforeValidate: [\n ({ data }) => {\n // transform the \"where\" query here so that the client-side doesn't have to\n if (data?.where) {\n if (validateWhereQuery(data.where)) {\n return data.where\n } else {\n return transformWhereQuery(data.where)\n }\n }\n\n return data?.where\n },\n ],\n },\n label: 'Filters',\n },\n {\n name: 'columns',\n type: 'json',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsColumnsCell',\n Field: '@payloadcms/ui#QueryPresetsColumnField',\n },\n },\n validate: (value) => {\n if (value) {\n try {\n JSON.parse(JSON.stringify(value))\n } catch {\n return 'Invalid JSON'\n }\n }\n\n return true\n },\n },\n {\n name: 'groupBy',\n type: 'text',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsGroupByCell',\n Field: '@payloadcms/ui#QueryPresetsGroupByField',\n },\n },\n label: 'Group By',\n },\n {\n name: 'relatedCollection',\n type: 'select',\n admin: {\n hidden: true,\n },\n options: config.collections\n ? config.collections.reduce((acc, collection) => {\n if (collection.enableQueryPresets) {\n acc.push({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })\n }\n return acc\n }, [] as Option[])\n : [],\n required: true,\n },\n {\n name: 'isTemp',\n type: 'checkbox',\n admin: {\n description:\n \"This is a temporary field used to determine if updating the preset would remove the user's access to it. When `true`, this record will be deleted after running the preset's `validate` function.\",\n disabled: true,\n hidden: true,\n },\n },\n ],\n hooks: {\n beforeValidate: [\n ({ data, operation }) => {\n // TODO: type this\n const typedData = data as any\n\n if (operation === 'create' || operation === 'update') {\n // Ensure all operations have a constraint\n operations.forEach((operation) => {\n if (!typedData.access) {\n typedData.access = {}\n }\n\n if (!typedData.access?.[operation]) {\n typedData[operation] = {}\n }\n\n // Ensure all operations have a constraint\n if (!typedData.access[operation]?.constraint) {\n typedData.access[operation] = {\n ...typedData.access[operation],\n constraint: 'onlyMe',\n }\n }\n })\n\n // If at least one constraint is not `onlyMe` then `isShared` must be true\n if (typedData?.access) {\n const someOperationsAreShared = Object.values(typedData.access).some(\n // TODO: remove the `any` here\n (operation: any) => operation.constraint !== 'onlyMe',\n )\n\n typedData.isShared = someOperationsAreShared\n }\n }\n\n return typedData\n },\n ],\n },\n labels: {\n plural: 'Presets',\n singular: 'Preset',\n ...(config.queryPresets?.labels || {}),\n },\n lockDocuments: false,\n select: ({ select }) => (select ? { ...select, relatedCollection: true } : undefined),\n versions: false,\n})\n"],"names":["transformWhereQuery","validateWhereQuery","getAccess","getConstraints","operations","queryPresetsCollectionSlug","getQueryPresetsConfig","config","slug","access","admin","defaultColumns","hidden","useAsTitle","fields","name","type","required","defaultValue","validate","isShared","data","typedData","someOperationsAreShared","Object","values","some","operation","constraint","components","Cell","Field","hooks","beforeValidate","where","label","value","JSON","parse","stringify","options","collections","reduce","acc","collection","enableQueryPresets","push","labels","plural","description","disabled","forEach","singular","queryPresets","lockDocuments","select","relatedCollection","undefined","versions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/query-presets/config.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Option } from '../fields/config/types.js'\n\nimport { transformWhereQuery } from '../utilities/transformWhereQuery.js'\nimport { validateWhereQuery } from '../utilities/validateWhereQuery.js'\nimport { getAccess } from './access.js'\nimport { getConstraints } from './constraints.js'\nimport { operations, type QueryPreset } from './types.js'\n\nexport const queryPresetsCollectionSlug = 'payload-query-presets'\n\nexport const getQueryPresetsConfig = (config: Config): CollectionConfig => ({\n slug: queryPresetsCollectionSlug,\n access: getAccess(config),\n admin: {\n defaultColumns: ['title', 'isShared', 'access', 'where', 'columns', 'groupBy'],\n hidden: true,\n useAsTitle: 'title',\n },\n fields: [\n {\n name: 'title',\n type: 'text',\n admin: {\n className: 'query-preset-title',\n },\n required: true,\n },\n {\n type: 'row',\n admin: {\n className: 'query-preset-controls-row',\n },\n fields: [\n {\n name: 'presetsHeading',\n type: 'ui',\n admin: {\n components: {\n Field: {\n clientProps: {\n i18nKey: 'general:presets',\n },\n path: '@payloadcms/ui#QueryPresetsHeading',\n },\n },\n },\n },\n {\n name: 'groupBy',\n type: 'text',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsGroupByCell',\n Field: '@payloadcms/ui#QueryPresetsGroupByField',\n },\n },\n label: 'Group By',\n },\n {\n name: 'columns',\n type: 'json',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsColumnsCell',\n Field: '@payloadcms/ui#QueryPresetsColumnField',\n },\n },\n validate: (value) => {\n if (value) {\n try {\n JSON.parse(JSON.stringify(value))\n } catch {\n return 'Invalid JSON'\n }\n }\n\n return true\n },\n },\n ],\n },\n {\n name: 'where',\n type: 'json',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsWhereCell',\n Field: '@payloadcms/ui#QueryPresetsWhereField',\n },\n },\n hooks: {\n beforeValidate: [\n ({ data }) => {\n // transform the \"where\" query here so that the client-side doesn't have to\n if (data?.where) {\n if (validateWhereQuery(data.where)) {\n return data.where\n } else {\n return transformWhereQuery(data.where)\n }\n }\n\n return data?.where\n },\n ],\n },\n label: 'Filters',\n },\n {\n name: 'accessHeading',\n type: 'ui',\n admin: {\n components: {\n Field: {\n clientProps: {\n i18nKey: 'general:access',\n },\n path: '@payloadcms/ui#QueryPresetsHeading',\n },\n },\n },\n },\n {\n name: 'isShared',\n type: 'checkbox',\n defaultValue: false,\n validate: (isShared, { data }) => {\n const typedData = data as QueryPreset\n\n // ensure the `isShared` is only true if all constraints are 'onlyMe'\n if (typedData?.access) {\n const someOperationsAreShared = Object.values(typedData.access).some(\n (operation) => operation.constraint !== 'onlyMe',\n )\n\n if (!isShared && someOperationsAreShared) {\n return 'If any constraint is not \"onlyMe\", the preset must be shared'\n }\n }\n\n return true\n },\n },\n getConstraints(config),\n {\n name: 'relatedCollection',\n type: 'select',\n admin: {\n hidden: true,\n },\n options: config.collections\n ? config.collections.reduce((acc, collection) => {\n if (collection.enableQueryPresets) {\n acc.push({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })\n }\n return acc\n }, [] as Option[])\n : [],\n required: true,\n },\n {\n name: 'isTemp',\n type: 'checkbox',\n admin: {\n description:\n \"This is a temporary field used to determine if updating the preset would remove the user's access to it. When `true`, this record will be deleted after running the preset's `validate` function.\",\n disabled: true,\n hidden: true,\n },\n },\n ],\n hooks: {\n beforeValidate: [\n ({ data, operation }) => {\n // TODO: type this\n const typedData = data as any\n\n if (operation === 'create' || operation === 'update') {\n // Ensure all operations have a constraint\n operations.forEach((operation) => {\n if (!typedData.access) {\n typedData.access = {}\n }\n\n if (!typedData.access?.[operation]) {\n typedData[operation] = {}\n }\n\n // Ensure all operations have a constraint\n if (!typedData.access[operation]?.constraint) {\n typedData.access[operation] = {\n ...typedData.access[operation],\n constraint: 'onlyMe',\n }\n }\n })\n\n // If at least one constraint is not `onlyMe` then `isShared` must be true\n if (typedData?.access) {\n const someOperationsAreShared = Object.values(typedData.access).some(\n // TODO: remove the `any` here\n (operation: any) => operation.constraint !== 'onlyMe',\n )\n\n typedData.isShared = someOperationsAreShared\n }\n }\n\n return typedData\n },\n ],\n },\n labels: {\n plural: 'Presets',\n singular: 'Preset',\n ...(config.queryPresets?.labels || {}),\n },\n lockDocuments: false,\n select: ({ select }) => (select ? { ...select, relatedCollection: true } : undefined),\n versions: false,\n})\n"],"names":["transformWhereQuery","validateWhereQuery","getAccess","getConstraints","operations","queryPresetsCollectionSlug","getQueryPresetsConfig","config","slug","access","admin","defaultColumns","hidden","useAsTitle","fields","name","type","className","required","components","Field","clientProps","i18nKey","path","Cell","label","validate","value","JSON","parse","stringify","hooks","beforeValidate","data","where","defaultValue","isShared","typedData","someOperationsAreShared","Object","values","some","operation","constraint","options","collections","reduce","acc","collection","enableQueryPresets","push","labels","plural","description","disabled","forEach","singular","queryPresets","lockDocuments","select","relatedCollection","undefined","versions"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/query-presets/constraints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAU,MAAM,2BAA2B,CAAA;AAuB9D,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/query-presets/constraints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAU,MAAM,2BAA2B,CAAA;AAuB9D,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,KA4F9C,CAAA"}
|
|
@@ -21,6 +21,7 @@ export const getConstraints = (config)=>({
|
|
|
21
21
|
name: 'access',
|
|
22
22
|
type: 'group',
|
|
23
23
|
admin: {
|
|
24
|
+
className: 'query-preset-access-group',
|
|
24
25
|
components: {
|
|
25
26
|
Cell: '@payloadcms/ui#QueryPresetsAccessCell'
|
|
26
27
|
},
|
|
@@ -96,7 +97,7 @@ export const getConstraints = (config)=>({
|
|
|
96
97
|
],
|
|
97
98
|
label: ()=>toWords(constraintOperation)
|
|
98
99
|
})),
|
|
99
|
-
label:
|
|
100
|
+
label: false,
|
|
100
101
|
validate: preventLockout
|
|
101
102
|
});
|
|
102
103
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-presets/constraints.ts"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\n\nimport type { Config } from '../config/types.js'\nimport type { Field, Option } from '../fields/config/types.js'\nimport type { QueryPresetConstraint } from './types.js'\n\nimport { fieldAffectsData } from '../fields/config/types.js'\nimport { toWords } from '../utilities/formatLabels.js'\nimport { preventLockout } from './preventLockout.js'\nimport { operations } from './types.js'\n\nconst defaultConstraintOptions: Option[] = [\n {\n label: 'Everyone',\n value: 'everyone',\n },\n {\n label: 'Only Me',\n value: 'onlyMe',\n },\n {\n label: 'Specific Users',\n value: 'specificUsers',\n },\n]\n\nexport const getConstraints = (config: Config): Field => ({\n name: 'access',\n type: 'group',\n admin: {\n components: {\n Cell: '@payloadcms/ui#QueryPresetsAccessCell',\n },\n condition: (data) => Boolean(data?.isShared),\n },\n fields: operations.map((constraintOperation) => ({\n type: 'collapsible',\n fields: [\n {\n name: constraintOperation,\n type: 'group',\n admin: {\n hideGutter: true,\n },\n fields: [\n {\n name: 'constraint',\n type: 'select',\n defaultValue: 'onlyMe',\n filterOptions: (args) =>\n typeof config?.queryPresets?.filterConstraints === 'function'\n ? config.queryPresets.filterConstraints(args)\n : args.options,\n label: ({ i18n }) =>\n `Specify who can ${constraintOperation} this ${getTranslation(config.queryPresets?.labels?.singular || 'Preset', i18n)}`,\n options: [\n ...defaultConstraintOptions,\n ...(config?.queryPresets?.constraints?.[constraintOperation]?.map(\n (option: QueryPresetConstraint) => ({\n label: option.label,\n value: option.value,\n }),\n ) || []),\n ],\n },\n {\n name: 'users',\n type: 'relationship',\n admin: {\n condition: (data) =>\n Boolean(data?.access?.[constraintOperation]?.constraint === 'specificUsers'),\n },\n hasMany: true,\n hooks: {\n beforeChange: [\n ({ data, req }) => {\n if (data?.access?.[constraintOperation]?.constraint === 'onlyMe' && req.user) {\n return [req.user.id]\n }\n\n if (\n data?.access?.[constraintOperation]?.constraint === 'specificUsers' &&\n req.user\n ) {\n return [...(data?.access?.[constraintOperation]?.users || []), req.user.id]\n }\n },\n ],\n },\n relationTo: config.admin?.user ?? 'users', // TODO: remove this fallback when the args are properly typed as `SanitizedConfig`\n },\n ...(config?.queryPresets?.constraints?.[constraintOperation]?.reduce(\n (acc: Field[], option: QueryPresetConstraint) => {\n option.fields?.forEach((field, index) => {\n acc.push({ ...field })\n\n if (fieldAffectsData(field)) {\n acc[index]!.admin = {\n ...(acc[index]?.admin || {}),\n condition: (data) =>\n Boolean(data?.access?.[constraintOperation]?.constraint === option.value),\n }\n }\n })\n\n return acc\n },\n [] as Field[],\n ) || []),\n ],\n label: false,\n },\n ],\n label: () => toWords(constraintOperation),\n })),\n label:
|
|
1
|
+
{"version":3,"sources":["../../src/query-presets/constraints.ts"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\n\nimport type { Config } from '../config/types.js'\nimport type { Field, Option } from '../fields/config/types.js'\nimport type { QueryPresetConstraint } from './types.js'\n\nimport { fieldAffectsData } from '../fields/config/types.js'\nimport { toWords } from '../utilities/formatLabels.js'\nimport { preventLockout } from './preventLockout.js'\nimport { operations } from './types.js'\n\nconst defaultConstraintOptions: Option[] = [\n {\n label: 'Everyone',\n value: 'everyone',\n },\n {\n label: 'Only Me',\n value: 'onlyMe',\n },\n {\n label: 'Specific Users',\n value: 'specificUsers',\n },\n]\n\nexport const getConstraints = (config: Config): Field => ({\n name: 'access',\n type: 'group',\n admin: {\n className: 'query-preset-access-group',\n components: {\n Cell: '@payloadcms/ui#QueryPresetsAccessCell',\n },\n condition: (data) => Boolean(data?.isShared),\n },\n fields: operations.map((constraintOperation) => ({\n type: 'collapsible',\n fields: [\n {\n name: constraintOperation,\n type: 'group',\n admin: {\n hideGutter: true,\n },\n fields: [\n {\n name: 'constraint',\n type: 'select',\n defaultValue: 'onlyMe',\n filterOptions: (args) =>\n typeof config?.queryPresets?.filterConstraints === 'function'\n ? config.queryPresets.filterConstraints(args)\n : args.options,\n label: ({ i18n }) =>\n `Specify who can ${constraintOperation} this ${getTranslation(config.queryPresets?.labels?.singular || 'Preset', i18n)}`,\n options: [\n ...defaultConstraintOptions,\n ...(config?.queryPresets?.constraints?.[constraintOperation]?.map(\n (option: QueryPresetConstraint) => ({\n label: option.label,\n value: option.value,\n }),\n ) || []),\n ],\n },\n {\n name: 'users',\n type: 'relationship',\n admin: {\n condition: (data) =>\n Boolean(data?.access?.[constraintOperation]?.constraint === 'specificUsers'),\n },\n hasMany: true,\n hooks: {\n beforeChange: [\n ({ data, req }) => {\n if (data?.access?.[constraintOperation]?.constraint === 'onlyMe' && req.user) {\n return [req.user.id]\n }\n\n if (\n data?.access?.[constraintOperation]?.constraint === 'specificUsers' &&\n req.user\n ) {\n return [...(data?.access?.[constraintOperation]?.users || []), req.user.id]\n }\n },\n ],\n },\n relationTo: config.admin?.user ?? 'users', // TODO: remove this fallback when the args are properly typed as `SanitizedConfig`\n },\n ...(config?.queryPresets?.constraints?.[constraintOperation]?.reduce(\n (acc: Field[], option: QueryPresetConstraint) => {\n option.fields?.forEach((field, index) => {\n acc.push({ ...field })\n\n if (fieldAffectsData(field)) {\n acc[index]!.admin = {\n ...(acc[index]?.admin || {}),\n condition: (data) =>\n Boolean(data?.access?.[constraintOperation]?.constraint === option.value),\n }\n }\n })\n\n return acc\n },\n [] as Field[],\n ) || []),\n ],\n label: false,\n },\n ],\n label: () => toWords(constraintOperation),\n })),\n label: false,\n validate: preventLockout,\n})\n"],"names":["getTranslation","fieldAffectsData","toWords","preventLockout","operations","defaultConstraintOptions","label","value","getConstraints","config","name","type","admin","className","components","Cell","condition","data","Boolean","isShared","fields","map","constraintOperation","hideGutter","defaultValue","filterOptions","args","queryPresets","filterConstraints","options","i18n","labels","singular","constraints","option","access","constraint","hasMany","hooks","beforeChange","req","user","id","users","relationTo","reduce","acc","forEach","field","index","push","validate"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AA2DlD,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,GAAG,CAAC,KAAG,CAiCxC,CAAA;AAQD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,UAAQ,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"deepCopyObject.d.ts","sourceRoot":"","sources":["../../src/utilities/deepCopyObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AA2DlD,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,GAAG,CAAC,KAAG,CAiCxC,CAAA;AAQD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,UAAQ,GAAG,CAAC,CA6B9F;AAED,wBAAgB,0CAA0C,CAAC,CAAC,SAAS,SAAS,EAC5E,KAAK,EAAE,CAAC,EACR,IAAI,GAAE;IACJ,YAAY,CAAC,EAAE,OAAO,CAAA;CAClB,GACL,CAAC,CAuCH;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAiB,GAAG,CAAC,CAqE/F"}
|
|
@@ -103,6 +103,11 @@ Benchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/b
|
|
|
103
103
|
if (value instanceof Date) {
|
|
104
104
|
return new Date(value);
|
|
105
105
|
}
|
|
106
|
+
// BSON ObjectId instances expose extra enumerable properties (e.g. `buffer`) via `for...in`
|
|
107
|
+
// that corrupt the copy. Detect BSON types early and convert them to their string representation.
|
|
108
|
+
if ('_bsontype' in value && typeof value.toHexString === 'function') {
|
|
109
|
+
return value.toHexString();
|
|
110
|
+
}
|
|
106
111
|
const ret = {};
|
|
107
112
|
for(const k in value){
|
|
108
113
|
const v = value[k];
|
|
@@ -132,6 +137,9 @@ export function deepCopyObjectSimpleWithoutReactComponents(value, opts = {}) {
|
|
|
132
137
|
if (value instanceof Date) {
|
|
133
138
|
return new Date(value);
|
|
134
139
|
}
|
|
140
|
+
if ('_bsontype' in value && typeof value.toHexString === 'function') {
|
|
141
|
+
return value.toHexString();
|
|
142
|
+
}
|
|
135
143
|
const ret = {};
|
|
136
144
|
for(const k in value){
|
|
137
145
|
const v = value[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/deepCopyObject.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { JsonValue } from '../types/index.js'\n\n/*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/\n\nfunction copyBuffer(cur: any) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nconst constructorHandlers = new Map()\nconstructorHandlers.set(Date, (o: any) => new Date(o))\nconstructorHandlers.set(Map, (o: any, fn: any) => new Map(cloneArray<any>(Array.from(o), fn)))\nconstructorHandlers.set(Set, (o: any, fn: any) => new Set(cloneArray(Array.from(o), fn)))\nconstructorHandlers.set(RegExp, (regex: RegExp) => new RegExp(regex.source, regex.flags))\n\nlet handler: ((o: any, fn: any) => any) | null = null\n\nfunction cloneArray<T extends object>(a: T, fn: (o: any) => any): T {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length) as T\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof a\n const cur = a[k] as any\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof RegExp) {\n a2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n}\n\nexport const deepCopyObject = <T>(o: T): T => {\n if (typeof o !== 'object' || o === null) {\n return o\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject)\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags) as T\n }\n\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject)\n }\n const o2 = {} as T\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue\n }\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof RegExp) {\n o2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, deepCopyObject)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = deepCopyObject(cur)\n }\n }\n return o2\n}\n\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/\n\n/**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */\nexport function deepCopyObjectSimple<T extends JsonValue>(value: T, filterUndefined = false): T {\n if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined),\n ) as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n if (filterUndefined && v === undefined) {\n continue\n }\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimple(v as T, filterUndefined) as any)\n }\n return ret as unknown as T\n }\n}\n\nexport function deepCopyObjectSimpleWithoutReactComponents<T extends JsonValue>(\n value: T,\n opts: {\n excludeFiles?: boolean\n } = {},\n): T {\n if (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n typeof value.$$typeof === 'symbol'\n ) {\n return undefined!\n } else if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e, opts),\n ) as T\n } else {\n // Handle File objects by returning them as-is (don't serialize to plain object) or exclude if excludeFiles is provided\n if (value instanceof File) {\n if (opts.excludeFiles) {\n return undefined!\n }\n\n return value as unknown as T\n }\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimpleWithoutReactComponents(v as T, opts) as any)\n }\n return ret as unknown as T\n }\n}\n\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */\nexport function deepCopyObjectComplex<T>(object: T, cache: WeakMap<any, any> = new WeakMap()): T {\n if (object === null) {\n return null!\n }\n\n if (cache.has(object)) {\n return cache.get(object)\n }\n\n // Handle File\n if (object instanceof File) {\n return object as unknown as T\n }\n\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime()) as unknown as T\n }\n\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags) as unknown as T\n }\n\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map()\n cache.set(object, clonedMap)\n for (const [key, value] of object.entries()) {\n clonedMap.set(key, deepCopyObjectComplex(value, cache))\n }\n return clonedMap as unknown as T\n }\n\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set()\n cache.set(object, clonedSet)\n for (const value of object.values()) {\n clonedSet.add(deepCopyObjectComplex(value, cache))\n }\n return clonedSet as unknown as T\n }\n\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object\n }\n\n const clonedObject: any = Array.isArray(object)\n ? []\n : Object.create(Object.getPrototypeOf(object))\n cache.set(object, clonedObject)\n\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) ||\n Object.getOwnPropertySymbols(object).includes(key as any)\n ) {\n clonedObject[key] = deepCopyObjectComplex(object[key], cache)\n }\n }\n\n return clonedObject as T\n }\n\n // Handle all other cases\n return object\n}\n"],"names":["copyBuffer","cur","Buffer","from","buffer","slice","byteOffset","length","constructorHandlers","Map","set","Date","o","fn","cloneArray","Array","Set","RegExp","regex","source","flags","handler","a","keys","Object","a2","i","k","get","ArrayBuffer","isView","deepCopyObject","isArray","o2","hasOwnProperty","call","deepCopyObjectSimple","value","filterUndefined","map","e","ret","v","undefined","deepCopyObjectSimpleWithoutReactComponents","opts","$$typeof","File","excludeFiles","deepCopyObjectComplex","object","cache","WeakMap","has","getTime","clonedMap","key","entries","clonedSet","values","add","clonedObject","create","getPrototypeOf","prototype","getOwnPropertySymbols","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/deepCopyObject.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { JsonValue } from '../types/index.js'\n\n/*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/\n\nfunction copyBuffer(cur: any) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nconst constructorHandlers = new Map()\nconstructorHandlers.set(Date, (o: any) => new Date(o))\nconstructorHandlers.set(Map, (o: any, fn: any) => new Map(cloneArray<any>(Array.from(o), fn)))\nconstructorHandlers.set(Set, (o: any, fn: any) => new Set(cloneArray(Array.from(o), fn)))\nconstructorHandlers.set(RegExp, (regex: RegExp) => new RegExp(regex.source, regex.flags))\n\nlet handler: ((o: any, fn: any) => any) | null = null\n\nfunction cloneArray<T extends object>(a: T, fn: (o: any) => any): T {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length) as T\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof a\n const cur = a[k] as any\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof RegExp) {\n a2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n}\n\nexport const deepCopyObject = <T>(o: T): T => {\n if (typeof o !== 'object' || o === null) {\n return o\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject)\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags) as T\n }\n\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject)\n }\n const o2 = {} as T\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue\n }\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof RegExp) {\n o2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, deepCopyObject)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = deepCopyObject(cur)\n }\n }\n return o2\n}\n\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/\n\n/**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */\nexport function deepCopyObjectSimple<T extends JsonValue>(value: T, filterUndefined = false): T {\n if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined),\n ) as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n // BSON ObjectId instances expose extra enumerable properties (e.g. `buffer`) via `for...in`\n // that corrupt the copy. Detect BSON types early and convert them to their string representation.\n if ('_bsontype' in value && typeof (value as any).toHexString === 'function') {\n return (value as any).toHexString() as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n if (filterUndefined && v === undefined) {\n continue\n }\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimple(v as T, filterUndefined) as any)\n }\n return ret as unknown as T\n }\n}\n\nexport function deepCopyObjectSimpleWithoutReactComponents<T extends JsonValue>(\n value: T,\n opts: {\n excludeFiles?: boolean\n } = {},\n): T {\n if (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n typeof value.$$typeof === 'symbol'\n ) {\n return undefined!\n } else if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e, opts),\n ) as T\n } else {\n // Handle File objects by returning them as-is (don't serialize to plain object) or exclude if excludeFiles is provided\n if (value instanceof File) {\n if (opts.excludeFiles) {\n return undefined!\n }\n\n return value as unknown as T\n }\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n if ('_bsontype' in value && typeof (value as any).toHexString === 'function') {\n return (value as any).toHexString() as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimpleWithoutReactComponents(v as T, opts) as any)\n }\n return ret as unknown as T\n }\n}\n\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */\nexport function deepCopyObjectComplex<T>(object: T, cache: WeakMap<any, any> = new WeakMap()): T {\n if (object === null) {\n return null!\n }\n\n if (cache.has(object)) {\n return cache.get(object)\n }\n\n // Handle File\n if (object instanceof File) {\n return object as unknown as T\n }\n\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime()) as unknown as T\n }\n\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags) as unknown as T\n }\n\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map()\n cache.set(object, clonedMap)\n for (const [key, value] of object.entries()) {\n clonedMap.set(key, deepCopyObjectComplex(value, cache))\n }\n return clonedMap as unknown as T\n }\n\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set()\n cache.set(object, clonedSet)\n for (const value of object.values()) {\n clonedSet.add(deepCopyObjectComplex(value, cache))\n }\n return clonedSet as unknown as T\n }\n\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object\n }\n\n const clonedObject: any = Array.isArray(object)\n ? []\n : Object.create(Object.getPrototypeOf(object))\n cache.set(object, clonedObject)\n\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) ||\n Object.getOwnPropertySymbols(object).includes(key as any)\n ) {\n clonedObject[key] = deepCopyObjectComplex(object[key], cache)\n }\n }\n\n return clonedObject as T\n }\n\n // Handle all other cases\n return object\n}\n"],"names":["copyBuffer","cur","Buffer","from","buffer","slice","byteOffset","length","constructorHandlers","Map","set","Date","o","fn","cloneArray","Array","Set","RegExp","regex","source","flags","handler","a","keys","Object","a2","i","k","get","ArrayBuffer","isView","deepCopyObject","isArray","o2","hasOwnProperty","call","deepCopyObjectSimple","value","filterUndefined","map","e","toHexString","ret","v","undefined","deepCopyObjectSimpleWithoutReactComponents","opts","$$typeof","File","excludeFiles","deepCopyObjectComplex","object","cache","WeakMap","has","getTime","clonedMap","key","entries","clonedSet","values","add","clonedObject","create","getPrototypeOf","prototype","getOwnPropertySymbols","includes"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFieldByPath.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldByPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/E;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,gEAM5B;IACD,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb,KAAG;IACF,KAAK,EAAE,cAAc,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,GAAG,
|
|
1
|
+
{"version":3,"file":"getFieldByPath.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldByPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/E;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,gEAM5B;IACD,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb,KAAG;IACF,KAAK,EAAE,cAAc,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,GAAG,IA8EH,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getFieldByPath.ts"],"sourcesContent":["import type { SanitizedConfig } from '../config/types.js'\nimport type { FlattenedBlock, FlattenedField } from '../fields/config/types.js'\n\n/**\n * Get the field by its schema path, e.g. group.title, array.group.title\n * If there were any localized on the path, `pathHasLocalized` will be true and `localizedPath` will look like:\n * `group.<locale>.title` // group is localized here\n */\nexport const getFieldByPath = ({\n config,\n fields,\n includeRelationships = false,\n localizedPath = '',\n path,\n}: {\n config?: SanitizedConfig\n fields: FlattenedField[]\n includeRelationships?: boolean\n localizedPath?: string\n /**\n * The schema path, e.g. `array.group.title`\n */\n path: string\n}): {\n field: FlattenedField\n localizedPath: string\n pathHasLocalized: boolean\n} | null => {\n let currentFields: FlattenedField[] = fields\n\n let currentField: FlattenedField | null = null\n\n const segments = path.split('.')\n\n let pathHasLocalized = false\n\n while (segments.length > 0) {\n const segment = segments.shift()\n\n localizedPath = `${localizedPath ? `${localizedPath}.` : ''}${segment}`\n const field = currentFields.find((each) => each.name === segment)\n\n if (!field) {\n return null\n }\n\n if (field.localized) {\n pathHasLocalized = true\n localizedPath = `${localizedPath}.<locale>`\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n }\n\n if (\n config &&\n includeRelationships &&\n (field.type === 'relationship' || field.type === 'upload') &&\n !Array.isArray(field.relationTo)\n ) {\n const flattenedFields = config.collections.find(\n (e) => e.slug === field.relationTo,\n )?.flattenedFields\n if (flattenedFields) {\n currentFields = flattenedFields\n }\n\n if (segments.length === 1 && segments[0] === 'id') {\n return { field, localizedPath, pathHasLocalized }\n }\n }\n\n if ('blocks' in field && segments.length > 0) {\n const blockSlug = segments[0]\n const block =\n config?.blocks?.find((b) => b.slug === blockSlug) ??\n field.blocks.find(
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getFieldByPath.ts"],"sourcesContent":["import type { SanitizedConfig } from '../config/types.js'\nimport type { FlattenedBlock, FlattenedField } from '../fields/config/types.js'\n\n/**\n * Get the field by its schema path, e.g. group.title, array.group.title\n * If there were any localized on the path, `pathHasLocalized` will be true and `localizedPath` will look like:\n * `group.<locale>.title` // group is localized here\n */\nexport const getFieldByPath = ({\n config,\n fields,\n includeRelationships = false,\n localizedPath = '',\n path,\n}: {\n config?: SanitizedConfig\n fields: FlattenedField[]\n includeRelationships?: boolean\n localizedPath?: string\n /**\n * The schema path, e.g. `array.group.title`\n */\n path: string\n}): {\n field: FlattenedField\n localizedPath: string\n pathHasLocalized: boolean\n} | null => {\n let currentFields: FlattenedField[] = fields\n\n let currentField: FlattenedField | null = null\n\n const segments = path.split('.')\n\n let pathHasLocalized = false\n\n while (segments.length > 0) {\n const segment = segments.shift()\n\n localizedPath = `${localizedPath ? `${localizedPath}.` : ''}${segment}`\n const field = currentFields.find((each) => each.name === segment)\n\n if (!field) {\n return null\n }\n\n if (field.localized) {\n pathHasLocalized = true\n localizedPath = `${localizedPath}.<locale>`\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n }\n\n if (\n config &&\n includeRelationships &&\n (field.type === 'relationship' || field.type === 'upload') &&\n !Array.isArray(field.relationTo)\n ) {\n const flattenedFields = config.collections.find(\n (e) => e.slug === field.relationTo,\n )?.flattenedFields\n if (flattenedFields) {\n currentFields = flattenedFields\n }\n\n if (segments.length === 1 && segments[0] === 'id') {\n return { field, localizedPath, pathHasLocalized }\n }\n }\n\n if ('blocks' in field && segments.length > 0) {\n const blockSlug = segments[0]\n const block =\n config?.blocks?.find((b) => b.slug === blockSlug) ??\n field.blocks.find((b): b is FlattenedBlock => typeof b !== 'string' && b.slug === blockSlug)\n\n if (block) {\n segments.shift()\n localizedPath = `${localizedPath}.${blockSlug}`\n\n if (segments.length === 0) {\n return null\n }\n\n return getFieldByPath({\n config,\n fields: block.flattenedFields,\n includeRelationships,\n localizedPath,\n path: segments.join('.'),\n })\n }\n }\n\n currentField = field\n }\n\n if (!currentField) {\n return null\n }\n\n return { field: currentField, localizedPath, pathHasLocalized }\n}\n"],"names":["getFieldByPath","config","fields","includeRelationships","localizedPath","path","currentFields","currentField","segments","split","pathHasLocalized","length","segment","shift","field","find","each","name","localized","flattenedFields","type","Array","isArray","relationTo","collections","e","slug","blockSlug","block","blocks","b","join"],"mappings":"AAGA;;;;CAIC,GACD,OAAO,MAAMA,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,MAAM,EACNC,uBAAuB,KAAK,EAC5BC,gBAAgB,EAAE,EAClBC,IAAI,EAUL;IAKC,IAAIC,gBAAkCJ;IAEtC,IAAIK,eAAsC;IAE1C,MAAMC,WAAWH,KAAKI,KAAK,CAAC;IAE5B,IAAIC,mBAAmB;IAEvB,MAAOF,SAASG,MAAM,GAAG,EAAG;QAC1B,MAAMC,UAAUJ,SAASK,KAAK;QAE9BT,gBAAgB,GAAGA,gBAAgB,GAAGA,cAAc,CAAC,CAAC,GAAG,KAAKQ,SAAS;QACvE,MAAME,QAAQR,cAAcS,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKL;QAEzD,IAAI,CAACE,OAAO;YACV,OAAO;QACT;QAEA,IAAIA,MAAMI,SAAS,EAAE;YACnBR,mBAAmB;YACnBN,gBAAgB,GAAGA,cAAc,SAAS,CAAC;QAC7C;QAEA,IAAI,qBAAqBU,OAAO;YAC9BR,gBAAgBQ,MAAMK,eAAe;QACvC;QAEA,IACElB,UACAE,wBACCW,CAAAA,MAAMM,IAAI,KAAK,kBAAkBN,MAAMM,IAAI,KAAK,QAAO,KACxD,CAACC,MAAMC,OAAO,CAACR,MAAMS,UAAU,GAC/B;YACA,MAAMJ,kBAAkBlB,OAAOuB,WAAW,CAACT,IAAI,CAC7C,CAACU,IAAMA,EAAEC,IAAI,KAAKZ,MAAMS,UAAU,GACjCJ;YACH,IAAIA,iBAAiB;gBACnBb,gBAAgBa;YAClB;YAEA,IAAIX,SAASG,MAAM,KAAK,KAAKH,QAAQ,CAAC,EAAE,KAAK,MAAM;gBACjD,OAAO;oBAAEM;oBAAOV;oBAAeM;gBAAiB;YAClD;QACF;QAEA,IAAI,YAAYI,SAASN,SAASG,MAAM,GAAG,GAAG;YAC5C,MAAMgB,YAAYnB,QAAQ,CAAC,EAAE;YAC7B,MAAMoB,QACJ3B,QAAQ4B,QAAQd,KAAK,CAACe,IAAMA,EAAEJ,IAAI,KAAKC,cACvCb,MAAMe,MAAM,CAACd,IAAI,CAAC,CAACe,IAA2B,OAAOA,MAAM,YAAYA,EAAEJ,IAAI,KAAKC;YAEpF,IAAIC,OAAO;gBACTpB,SAASK,KAAK;gBACdT,gBAAgB,GAAGA,cAAc,CAAC,EAAEuB,WAAW;gBAE/C,IAAInB,SAASG,MAAM,KAAK,GAAG;oBACzB,OAAO;gBACT;gBAEA,OAAOX,eAAe;oBACpBC;oBACAC,QAAQ0B,MAAMT,eAAe;oBAC7BhB;oBACAC;oBACAC,MAAMG,SAASuB,IAAI,CAAC;gBACtB;YACF;QACF;QAEAxB,eAAeO;IACjB;IAEA,IAAI,CAACP,cAAc;QACjB,OAAO;IACT;IAEA,OAAO;QAAEO,OAAOP;QAAcH;QAAeM;IAAiB;AAChE,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getVersionsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { GlobalConfig } from '../globals/config/types.js'\nimport type { Autosave, SanitizedDrafts } from '../versions/types.js'\n\nimport { versionDefaults } from '../versions/defaults.js'\n\ntype EntityConfig = Pick<CollectionConfig | GlobalConfig, 'versions'>\n\n/**\n * Check if an entity has drafts enabled\n */\nexport const hasDraftsEnabled = (config: EntityConfig): boolean => {\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts)\n}\n\n/**\n * Check if an entity has localized status enabled\n */\nexport const hasLocalizeStatusEnabled = (config: EntityConfig): boolean => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.localizeStatus,\n )\n}\n\n/**\n * Check if an entity has autosave enabled\n */\nexport const hasAutosaveEnabled = (\n config: EntityConfig,\n): config is {\n versions: {\n drafts: { autosave: Autosave | false }\n }\n} & EntityConfig => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.autosave,\n )\n}\n\n/**\n * Check if an entity has validate drafts enabled\n */\nexport const hasDraftValidationEnabled = (config: EntityConfig): boolean => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.validate,\n )\n}\n\nexport const hasScheduledPublishEnabled = (\n config: EntityConfig,\n): config is {\n versions: {\n drafts: { schedulePublish: SanitizedDrafts['schedulePublish'] }\n }\n} & EntityConfig => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.schedulePublish,\n )\n}\n\n/**\n * Get the maximum number of versions to keep for an entity\n * Returns maxPerDoc for collections or max for globals\n */\nexport const getVersionsMax = (config: EntityConfig): number => {\n if (!config?.versions || typeof config.versions !== 'object') {\n return 0\n }\n // Collections have maxPerDoc, globals have max\n if ('maxPerDoc' in config.versions) {\n return config.versions.maxPerDoc ?? 100\n }\n if ('max' in config.versions) {\n return config.versions.max ?? 100\n }\n return 0\n}\n\nexport const getAutosaveInterval = (config: EntityConfig): number => {\n let interval = versionDefaults.autosaveInterval\n if (\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.autosave &&\n typeof config.versions.drafts.autosave === 'object'\n ) {\n interval = config.versions.drafts.autosave.interval ?? versionDefaults.autosaveInterval\n }\n return interval\n}\n"],"names":["versionDefaults","hasDraftsEnabled","config","Boolean","versions","drafts","hasLocalizeStatusEnabled","localizeStatus","hasAutosaveEnabled","autosave","hasDraftValidationEnabled","validate","hasScheduledPublishEnabled","schedulePublish","getVersionsMax","maxPerDoc","max","getAutosaveInterval","interval","autosaveInterval"],"mappings":"AAIA,SAASA,eAAe,QAAQ,0BAAyB;AAIzD;;CAEC,GACD,OAAO,MAAMC,mBAAmB,CAACC;IAC/B,OAAOC,QAAQD,QAAQE,YAAY,OAAOF,OAAOE,QAAQ,KAAK,YAAYF,OAAOE,QAAQ,CAACC,MAAM;AAClG,EAAC;AAED;;CAEC,GACD,OAAO,MAAMC,2BAA2B,CAACJ;IACvC,OAAOC,QACLD,QAAQE,YACN,OAAOF,OAAOE,QAAQ,KAAK,YAC3BF,OAAOE,QAAQ,CAACC,MAAM,IACtB,OAAOH,OAAOE,QAAQ,CAACC,MAAM,KAAK,
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getVersionsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { GlobalConfig } from '../globals/config/types.js'\nimport type { Autosave, SanitizedDrafts } from '../versions/types.js'\n\nimport { versionDefaults } from '../versions/defaults.js'\n\ntype EntityConfig = Pick<CollectionConfig | GlobalConfig, 'versions'>\n\n/**\n * Check if an entity has drafts enabled\n */\nexport const hasDraftsEnabled = (config: EntityConfig): boolean => {\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts)\n}\n\n/**\n * Check if an entity has localized status enabled\n */\nexport const hasLocalizeStatusEnabled = (config: EntityConfig): boolean => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n (config.versions.drafts as SanitizedDrafts).localizeStatus,\n )\n}\n\n/**\n * Check if an entity has autosave enabled\n */\nexport const hasAutosaveEnabled = (\n config: EntityConfig,\n): config is {\n versions: {\n drafts: { autosave: Autosave | false }\n }\n} & EntityConfig => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.autosave,\n )\n}\n\n/**\n * Check if an entity has validate drafts enabled\n */\nexport const hasDraftValidationEnabled = (config: EntityConfig): boolean => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.validate,\n )\n}\n\nexport const hasScheduledPublishEnabled = (\n config: EntityConfig,\n): config is {\n versions: {\n drafts: { schedulePublish: SanitizedDrafts['schedulePublish'] }\n }\n} & EntityConfig => {\n return Boolean(\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.schedulePublish,\n )\n}\n\n/**\n * Get the maximum number of versions to keep for an entity\n * Returns maxPerDoc for collections or max for globals\n */\nexport const getVersionsMax = (config: EntityConfig): number => {\n if (!config?.versions || typeof config.versions !== 'object') {\n return 0\n }\n // Collections have maxPerDoc, globals have max\n if ('maxPerDoc' in config.versions) {\n return config.versions.maxPerDoc ?? 100\n }\n if ('max' in config.versions) {\n return config.versions.max ?? 100\n }\n return 0\n}\n\nexport const getAutosaveInterval = (config: EntityConfig): number => {\n let interval = versionDefaults.autosaveInterval\n if (\n config?.versions &&\n typeof config.versions === 'object' &&\n config.versions.drafts &&\n typeof config.versions.drafts === 'object' &&\n config.versions.drafts.autosave &&\n typeof config.versions.drafts.autosave === 'object'\n ) {\n interval = config.versions.drafts.autosave.interval ?? versionDefaults.autosaveInterval\n }\n return interval\n}\n"],"names":["versionDefaults","hasDraftsEnabled","config","Boolean","versions","drafts","hasLocalizeStatusEnabled","localizeStatus","hasAutosaveEnabled","autosave","hasDraftValidationEnabled","validate","hasScheduledPublishEnabled","schedulePublish","getVersionsMax","maxPerDoc","max","getAutosaveInterval","interval","autosaveInterval"],"mappings":"AAIA,SAASA,eAAe,QAAQ,0BAAyB;AAIzD;;CAEC,GACD,OAAO,MAAMC,mBAAmB,CAACC;IAC/B,OAAOC,QAAQD,QAAQE,YAAY,OAAOF,OAAOE,QAAQ,KAAK,YAAYF,OAAOE,QAAQ,CAACC,MAAM;AAClG,EAAC;AAED;;CAEC,GACD,OAAO,MAAMC,2BAA2B,CAACJ;IACvC,OAAOC,QACLD,QAAQE,YACN,OAAOF,OAAOE,QAAQ,KAAK,YAC3BF,OAAOE,QAAQ,CAACC,MAAM,IACtB,OAAOH,OAAOE,QAAQ,CAACC,MAAM,KAAK,YAClC,AAACH,OAAOE,QAAQ,CAACC,MAAM,CAAqBE,cAAc;AAEhE,EAAC;AAED;;CAEC,GACD,OAAO,MAAMC,qBAAqB,CAChCN;IAMA,OAAOC,QACLD,QAAQE,YACN,OAAOF,OAAOE,QAAQ,KAAK,YAC3BF,OAAOE,QAAQ,CAACC,MAAM,IACtB,OAAOH,OAAOE,QAAQ,CAACC,MAAM,KAAK,YAClCH,OAAOE,QAAQ,CAACC,MAAM,CAACI,QAAQ;AAErC,EAAC;AAED;;CAEC,GACD,OAAO,MAAMC,4BAA4B,CAACR;IACxC,OAAOC,QACLD,QAAQE,YACN,OAAOF,OAAOE,QAAQ,KAAK,YAC3BF,OAAOE,QAAQ,CAACC,MAAM,IACtB,OAAOH,OAAOE,QAAQ,CAACC,MAAM,KAAK,YAClCH,OAAOE,QAAQ,CAACC,MAAM,CAACM,QAAQ;AAErC,EAAC;AAED,OAAO,MAAMC,6BAA6B,CACxCV;IAMA,OAAOC,QACLD,QAAQE,YACN,OAAOF,OAAOE,QAAQ,KAAK,YAC3BF,OAAOE,QAAQ,CAACC,MAAM,IACtB,OAAOH,OAAOE,QAAQ,CAACC,MAAM,KAAK,YAClCH,OAAOE,QAAQ,CAACC,MAAM,CAACQ,eAAe;AAE5C,EAAC;AAED;;;CAGC,GACD,OAAO,MAAMC,iBAAiB,CAACZ;IAC7B,IAAI,CAACA,QAAQE,YAAY,OAAOF,OAAOE,QAAQ,KAAK,UAAU;QAC5D,OAAO;IACT;IACA,+CAA+C;IAC/C,IAAI,eAAeF,OAAOE,QAAQ,EAAE;QAClC,OAAOF,OAAOE,QAAQ,CAACW,SAAS,IAAI;IACtC;IACA,IAAI,SAASb,OAAOE,QAAQ,EAAE;QAC5B,OAAOF,OAAOE,QAAQ,CAACY,GAAG,IAAI;IAChC;IACA,OAAO;AACT,EAAC;AAED,OAAO,MAAMC,sBAAsB,CAACf;IAClC,IAAIgB,WAAWlB,gBAAgBmB,gBAAgB;IAC/C,IACEjB,QAAQE,YACR,OAAOF,OAAOE,QAAQ,KAAK,YAC3BF,OAAOE,QAAQ,CAACC,MAAM,IACtB,OAAOH,OAAOE,QAAQ,CAACC,MAAM,KAAK,YAClCH,OAAOE,QAAQ,CAACC,MAAM,CAACI,QAAQ,IAC/B,OAAOP,OAAOE,QAAQ,CAACC,MAAM,CAACI,QAAQ,KAAK,UAC3C;QACAS,WAAWhB,OAAOE,QAAQ,CAACC,MAAM,CAACI,QAAQ,CAACS,QAAQ,IAAIlB,gBAAgBmB,gBAAgB;IACzF;IACA,OAAOD;AACT,EAAC"}
|
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
import type { Field } from '../fields/config/types.js';
|
|
2
2
|
import type { SanitizedConfig } from '../index.js';
|
|
3
3
|
import type { JsonObject } from '../types/index.js';
|
|
4
|
-
type
|
|
4
|
+
type MergeLocalizedDataArgs = {
|
|
5
5
|
configBlockReferences: SanitizedConfig['blocks'];
|
|
6
6
|
dataWithLocales: JsonObject;
|
|
7
7
|
docWithLocales: JsonObject;
|
|
8
8
|
fields: Field[];
|
|
9
|
+
/**
|
|
10
|
+
* Which locales from `docWithLocales` to retain in the output.
|
|
11
|
+
* When omitted, all locales in `docWithLocales` are preserved (default behaviour).
|
|
12
|
+
* Pass an explicit list (e.g. the currently-published locales) to discard locales
|
|
13
|
+
* that should not be carried forward — for example, when publishing a single locale
|
|
14
|
+
* you want to avoid leaking draft data that was written to the main doc by an earlier
|
|
15
|
+
* create/update with `draft: true`.
|
|
16
|
+
*/
|
|
17
|
+
localesToPreserve?: string[];
|
|
18
|
+
localesToUpdate: string[];
|
|
9
19
|
parentIsLocalized?: boolean;
|
|
10
|
-
selectedLocales: string[];
|
|
11
20
|
};
|
|
12
21
|
/**
|
|
13
22
|
* Merges data from dataWithLocales onto docWithLocales for specified locales.
|
|
14
|
-
* For localized fields, merges only the specified locales while preserving others
|
|
23
|
+
* For localized fields, merges only the specified locales while preserving others
|
|
24
|
+
* (or only `localesToPreserve` if supplied).
|
|
15
25
|
* For non-localized fields, keeps existing values from docWithLocales unchanged.
|
|
16
26
|
* Returns a new object without mutating the original.
|
|
17
27
|
*/
|
|
18
|
-
export declare function mergeLocalizedData({ configBlockReferences, dataWithLocales, docWithLocales, fields,
|
|
28
|
+
export declare function mergeLocalizedData({ configBlockReferences, dataWithLocales, docWithLocales, fields, localesToPreserve, localesToUpdate, parentIsLocalized, }: MergeLocalizedDataArgs): JsonObject;
|
|
19
29
|
export {};
|
|
20
30
|
//# sourceMappingURL=mergeLocalizedData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeLocalizedData.d.ts","sourceRoot":"","sources":["../../src/utilities/mergeLocalizedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,KAAK,EAAkB,MAAM,2BAA2B,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mergeLocalizedData.d.ts","sourceRoot":"","sources":["../../src/utilities/mergeLocalizedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,KAAK,EAAkB,MAAM,2BAA2B,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAsDnD,KAAK,sBAAsB,GAAG;IAC5B,qBAAqB,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAChD,eAAe,EAAE,UAAU,CAAA;IAC3B,cAAc,EAAE,UAAU,CAAA;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,iBAAyB,GAC1B,EAAE,sBAAsB,GAAG,UAAU,CAmSrC"}
|