payload 3.71.1 → 3.72.0-internal.3e70d4c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/collections/config/sanitize.d.ts.map +1 -1
  2. package/dist/collections/config/sanitize.js +19 -4
  3. package/dist/collections/config/sanitize.js.map +1 -1
  4. package/dist/collections/endpoints/create.d.ts.map +1 -1
  5. package/dist/collections/endpoints/create.js +2 -1
  6. package/dist/collections/endpoints/create.js.map +1 -1
  7. package/dist/collections/endpoints/update.d.ts.map +1 -1
  8. package/dist/collections/endpoints/update.js +3 -1
  9. package/dist/collections/endpoints/update.js.map +1 -1
  10. package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
  11. package/dist/collections/endpoints/updateByID.js +4 -2
  12. package/dist/collections/endpoints/updateByID.js.map +1 -1
  13. package/dist/collections/operations/create.d.ts +1 -0
  14. package/dist/collections/operations/create.d.ts.map +1 -1
  15. package/dist/collections/operations/create.js +23 -3
  16. package/dist/collections/operations/create.js.map +1 -1
  17. package/dist/collections/operations/local/create.d.ts +4 -0
  18. package/dist/collections/operations/local/create.d.ts.map +1 -1
  19. package/dist/collections/operations/local/create.js +2 -1
  20. package/dist/collections/operations/local/create.js.map +1 -1
  21. package/dist/collections/operations/local/update.d.ts +12 -0
  22. package/dist/collections/operations/local/update.d.ts.map +1 -1
  23. package/dist/collections/operations/local/update.js +3 -1
  24. package/dist/collections/operations/local/update.js.map +1 -1
  25. package/dist/collections/operations/update.d.ts +2 -0
  26. package/dist/collections/operations/update.d.ts.map +1 -1
  27. package/dist/collections/operations/update.js +4 -3
  28. package/dist/collections/operations/update.js.map +1 -1
  29. package/dist/collections/operations/updateByID.d.ts +2 -0
  30. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  31. package/dist/collections/operations/updateByID.js +4 -3
  32. package/dist/collections/operations/updateByID.js.map +1 -1
  33. package/dist/collections/operations/utilities/update.d.ts +4 -3
  34. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  35. package/dist/collections/operations/utilities/update.js +81 -31
  36. package/dist/collections/operations/utilities/update.js.map +1 -1
  37. package/dist/config/types.d.ts +16 -0
  38. package/dist/config/types.d.ts.map +1 -1
  39. package/dist/config/types.js.map +1 -1
  40. package/dist/database/migrations/templates/localizeStatus.d.ts +10 -0
  41. package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -0
  42. package/dist/database/migrations/templates/localizeStatus.js +54 -0
  43. package/dist/database/migrations/templates/localizeStatus.js.map +1 -0
  44. package/dist/exports/migrations.d.ts +19 -0
  45. package/dist/exports/migrations.d.ts.map +1 -0
  46. package/dist/exports/migrations.js +19 -0
  47. package/dist/exports/migrations.js.map +1 -0
  48. package/dist/exports/shared.d.ts +1 -1
  49. package/dist/exports/shared.d.ts.map +1 -1
  50. package/dist/exports/shared.js +1 -1
  51. package/dist/exports/shared.js.map +1 -1
  52. package/dist/globals/config/sanitize.d.ts.map +1 -1
  53. package/dist/globals/config/sanitize.js +11 -1
  54. package/dist/globals/config/sanitize.js.map +1 -1
  55. package/dist/globals/endpoints/update.d.ts.map +1 -1
  56. package/dist/globals/endpoints/update.js +5 -1
  57. package/dist/globals/endpoints/update.js.map +1 -1
  58. package/dist/globals/operations/local/update.d.ts +10 -0
  59. package/dist/globals/operations/local/update.d.ts.map +1 -1
  60. package/dist/globals/operations/local/update.js +4 -2
  61. package/dist/globals/operations/local/update.js.map +1 -1
  62. package/dist/globals/operations/update.d.ts +2 -0
  63. package/dist/globals/operations/update.d.ts.map +1 -1
  64. package/dist/globals/operations/update.js +63 -15
  65. package/dist/globals/operations/update.js.map +1 -1
  66. package/dist/index.bundled.d.ts +102 -3
  67. package/dist/index.d.ts +2 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +1 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/utilities/getVersionsConfig.d.ts +4 -0
  72. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  73. package/dist/utilities/getVersionsConfig.js +7 -2
  74. package/dist/utilities/getVersionsConfig.js.map +1 -1
  75. package/dist/utilities/mergeLocalizedData.d.ts +20 -0
  76. package/dist/utilities/mergeLocalizedData.d.ts.map +1 -0
  77. package/dist/utilities/mergeLocalizedData.js +277 -0
  78. package/dist/utilities/mergeLocalizedData.js.map +1 -0
  79. package/dist/utilities/mergeLocalizedData.spec.js +784 -0
  80. package/dist/utilities/mergeLocalizedData.spec.js.map +1 -0
  81. package/dist/utilities/miniChalk.d.ts +15 -0
  82. package/dist/utilities/miniChalk.d.ts.map +1 -0
  83. package/dist/utilities/miniChalk.js +34 -0
  84. package/dist/utilities/miniChalk.js.map +1 -0
  85. package/dist/utilities/parseParams/index.d.ts +24 -20
  86. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  87. package/dist/utilities/parseParams/index.js.map +1 -1
  88. package/dist/utilities/traverseForLocalizedFields.d.ts +3 -0
  89. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -0
  90. package/dist/utilities/traverseForLocalizedFields.js +41 -0
  91. package/dist/utilities/traverseForLocalizedFields.js.map +1 -0
  92. package/dist/versions/baseFields.d.ts +3 -1
  93. package/dist/versions/baseFields.d.ts.map +1 -1
  94. package/dist/versions/baseFields.js +16 -15
  95. package/dist/versions/baseFields.js.map +1 -1
  96. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  97. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +28 -2
  98. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  99. package/dist/versions/migrations/localizeStatus/index.d.ts +12 -0
  100. package/dist/versions/migrations/localizeStatus/index.d.ts.map +1 -0
  101. package/dist/versions/migrations/localizeStatus/index.js +33 -0
  102. package/dist/versions/migrations/localizeStatus/index.js.map +1 -0
  103. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +9 -0
  104. package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +1 -0
  105. package/dist/versions/migrations/localizeStatus/mongo/down.js +112 -0
  106. package/dist/versions/migrations/localizeStatus/mongo/down.js.map +1 -0
  107. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +8 -0
  108. package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +1 -0
  109. package/dist/versions/migrations/localizeStatus/mongo/index.js +8 -0
  110. package/dist/versions/migrations/localizeStatus/mongo/index.js.map +1 -0
  111. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +9 -0
  112. package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +1 -0
  113. package/dist/versions/migrations/localizeStatus/mongo/up.js +220 -0
  114. package/dist/versions/migrations/localizeStatus/mongo/up.js.map +1 -0
  115. package/dist/versions/migrations/localizeStatus/shared.d.ts +59 -0
  116. package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -0
  117. package/dist/versions/migrations/localizeStatus/shared.js +122 -0
  118. package/dist/versions/migrations/localizeStatus/shared.js.map +1 -0
  119. package/dist/versions/migrations/localizeStatus/sql/down.d.ts +11 -0
  120. package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +1 -0
  121. package/dist/versions/migrations/localizeStatus/sql/down.js +213 -0
  122. package/dist/versions/migrations/localizeStatus/sql/down.js.map +1 -0
  123. package/dist/versions/migrations/localizeStatus/sql/index.d.ts +8 -0
  124. package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +1 -0
  125. package/dist/versions/migrations/localizeStatus/sql/index.js +8 -0
  126. package/dist/versions/migrations/localizeStatus/sql/index.js.map +1 -0
  127. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +13 -0
  128. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +1 -0
  129. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +51 -0
  130. package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +1 -0
  131. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +13 -0
  132. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +1 -0
  133. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +54 -0
  134. package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +1 -0
  135. package/dist/versions/migrations/localizeStatus/sql/up.d.ts +11 -0
  136. package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +1 -0
  137. package/dist/versions/migrations/localizeStatus/sql/up.js +277 -0
  138. package/dist/versions/migrations/localizeStatus/sql/up.js.map +1 -0
  139. package/dist/versions/saveSnapshot.d.ts.map +1 -1
  140. package/dist/versions/saveSnapshot.js +0 -1
  141. package/dist/versions/saveSnapshot.js.map +1 -1
  142. package/dist/versions/saveVersion.js +0 -3
  143. package/dist/versions/saveVersion.js.map +1 -1
  144. package/dist/versions/types.d.ts +18 -0
  145. package/dist/versions/types.d.ts.map +1 -1
  146. package/dist/versions/types.js.map +1 -1
  147. package/package.json +7 -2
  148. package/dist/uploads/imageResizer.d.ts +0 -40
  149. package/dist/uploads/imageResizer.d.ts.map +0 -1
  150. package/dist/uploads/imageResizer.js +0 -356
  151. package/dist/uploads/imageResizer.js.map +0 -1
@@ -0,0 +1,277 @@
1
+ import { calculateVersionLocaleStatuses, toSnakeCase } from '../shared.js';
2
+ import { migrateMainCollectionStatus } from './migrateMainCollection.js';
3
+ import { migrateMainGlobalStatus } from './migrateMainGlobal.js';
4
+ export async function up(args) {
5
+ const { collectionSlug, db, globalSlug, payload, req, sql } = args;
6
+ if (!collectionSlug && !globalSlug) {
7
+ throw new Error('Either collectionSlug or globalSlug must be provided');
8
+ }
9
+ if (collectionSlug && globalSlug) {
10
+ throw new Error('Cannot provide both collectionSlug and globalSlug');
11
+ }
12
+ const entitySlug = collectionSlug || globalSlug;
13
+ // Convert camelCase slugs to snake_case and add version prefix/suffix
14
+ const versionsTable = collectionSlug ? `_${toSnakeCase(collectionSlug)}_v` : `_${toSnakeCase(globalSlug)}_v`;
15
+ const localesTable = `${versionsTable}_locales`;
16
+ if (!payload.config.localization) {
17
+ throw new Error('Localization is not enabled in payload config');
18
+ }
19
+ // Check if versions are enabled on this collection/global
20
+ let entityConfig;
21
+ if (collectionSlug) {
22
+ const collection = payload.config.collections.find((c)=>c.slug === collectionSlug);
23
+ if (collection) {
24
+ entityConfig = collection;
25
+ }
26
+ } else if (globalSlug) {
27
+ const global = payload.config.globals.find((g)=>g.slug === globalSlug);
28
+ if (global) {
29
+ entityConfig = global;
30
+ }
31
+ }
32
+ if (!entityConfig) {
33
+ throw new Error(`${collectionSlug ? 'Collection' : 'Global'} not found: ${collectionSlug || globalSlug}`);
34
+ }
35
+ payload.logger.info({
36
+ msg: `Starting _status localization migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug}`
37
+ });
38
+ // Get filtered locales if filterAvailableLocales is defined
39
+ let locales = payload.config.localization.localeCodes;
40
+ if (typeof payload.config.localization.filterAvailableLocales === 'function') {
41
+ const filteredLocaleObjects = await payload.config.localization.filterAvailableLocales({
42
+ locales: payload.config.localization.locales,
43
+ req
44
+ });
45
+ locales = filteredLocaleObjects.map((locale)=>locale.code);
46
+ }
47
+ payload.logger.info({
48
+ msg: `Locales: ${locales.join(', ')}`
49
+ });
50
+ // Check if versions are enabled in config (skip if not)
51
+ if (!entityConfig.versions) {
52
+ payload.logger.info({
53
+ msg: `Skipping migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug} - versions not enabled`
54
+ });
55
+ return;
56
+ }
57
+ // Validate that version__status column exists before proceeding
58
+ const columnCheckResult = await db.execute({
59
+ drizzle: db.drizzle,
60
+ sql: sql`
61
+ SELECT EXISTS (
62
+ SELECT FROM information_schema.columns
63
+ WHERE table_schema = 'public'
64
+ AND table_name = ${versionsTable}
65
+ AND column_name = 'version__status'
66
+ ) as exists
67
+ `
68
+ });
69
+ if (!columnCheckResult.rows[0]?.exists) {
70
+ throw new Error(`Migration aborted: version__status column not found in ${versionsTable} table. ` + `This migration should only run on schemas that have NOT yet been migrated to per-locale status. ` + `If you've already run this migration, no action is needed.`);
71
+ }
72
+ // 1. Check if the locales table exists
73
+ const localesTableCheckResult = await db.execute({
74
+ drizzle: db.drizzle,
75
+ sql: sql`
76
+ SELECT EXISTS (
77
+ SELECT FROM information_schema.tables
78
+ WHERE table_schema = 'public'
79
+ AND table_name = ${localesTable}
80
+ ) as exists
81
+ `
82
+ });
83
+ const localesTableExists = localesTableCheckResult.rows[0]?.exists;
84
+ if (!localesTableExists) {
85
+ // SCENARIO 1: Create the locales table (first localized field in versions)
86
+ payload.logger.info({
87
+ msg: `Creating new locales table: ${localesTable}`
88
+ });
89
+ await db.execute({
90
+ drizzle: db.drizzle,
91
+ sql: sql`
92
+ CREATE TABLE ${sql.identifier(localesTable)} (
93
+ id SERIAL PRIMARY KEY,
94
+ _locale VARCHAR NOT NULL,
95
+ _parent_id INTEGER NOT NULL,
96
+ version__status VARCHAR,
97
+ UNIQUE(_locale, _parent_id),
98
+ FOREIGN KEY (_parent_id) REFERENCES ${sql.identifier(versionsTable)}(id) ON DELETE CASCADE
99
+ )
100
+ `
101
+ });
102
+ // Create one row per locale per version record
103
+ // Simple approach: copy the same status to all locales
104
+ for (const locale of locales){
105
+ const inserted = await db.execute({
106
+ drizzle: db.drizzle,
107
+ sql: sql`
108
+ INSERT INTO ${sql.identifier(localesTable)} (_locale, _parent_id, version__status)
109
+ SELECT ${locale}, id, version__status
110
+ FROM ${sql.identifier(versionsTable)}
111
+ RETURNING id
112
+ `
113
+ });
114
+ payload.logger.info({
115
+ msg: `Inserted ${inserted.length} rows for locale: ${locale}`
116
+ });
117
+ }
118
+ } else {
119
+ // SCENARIO 2: Add version__status column to existing locales table
120
+ payload.logger.info({
121
+ msg: `Adding version__status column to existing table: ${localesTable}`
122
+ });
123
+ await db.execute({
124
+ drizzle: db.drizzle,
125
+ sql: sql`
126
+ ALTER TABLE ${sql.identifier(localesTable)} ADD COLUMN version__status VARCHAR
127
+ `
128
+ });
129
+ // INTELLIGENT DATA MIGRATION using historical publishedLocale data
130
+ payload.logger.info({
131
+ msg: 'Processing version history to determine status per locale...'
132
+ });
133
+ // First, get the list of locales that actually exist in the locales table
134
+ // This is important because the config may have more locales defined than what's in the OLD schema
135
+ const existingLocalesResult = await db.execute({
136
+ drizzle: db.drizzle,
137
+ sql: sql`
138
+ SELECT DISTINCT _locale
139
+ FROM ${sql.identifier(localesTable)}
140
+ ORDER BY _locale
141
+ `
142
+ });
143
+ const existingLocales = existingLocalesResult.rows.map((row)=>row._locale);
144
+ payload.logger.info({
145
+ msg: `Found existing locales in table: ${existingLocales.join(', ')}`
146
+ });
147
+ // Get all version records grouped by parent document, ordered chronologically
148
+ const versionsResult = await db.execute({
149
+ drizzle: db.drizzle,
150
+ sql: sql`
151
+ SELECT id, parent_id as parent, version__status as _status, published_locale, snapshot, created_at
152
+ FROM ${sql.identifier(versionsTable)}
153
+ ORDER BY parent_id, created_at ASC
154
+ `
155
+ });
156
+ // Use shared function to calculate version locale statuses
157
+ // Only process locales that actually exist in the locales table
158
+ const versionLocaleStatus = calculateVersionLocaleStatuses(versionsResult.rows, existingLocales, payload);
159
+ // Now update the locales table with the calculated status for each version
160
+ payload.logger.info({
161
+ msg: 'Updating locales table with calculated statuses...'
162
+ });
163
+ let updateCount = 0;
164
+ for (const [versionId, localeMap] of versionLocaleStatus.entries()){
165
+ for (const [locale, status] of localeMap.entries()){
166
+ await db.execute({
167
+ drizzle: db.drizzle,
168
+ sql: sql`
169
+ UPDATE ${sql.identifier(localesTable)}
170
+ SET version__status = ${status}
171
+ WHERE _parent_id = ${versionId}
172
+ AND _locale = ${locale}
173
+ `
174
+ });
175
+ updateCount++;
176
+ }
177
+ }
178
+ payload.logger.info({
179
+ msg: `Updated ${updateCount} locale rows with status`
180
+ });
181
+ }
182
+ // 3. Drop the old version__status column from main versions table
183
+ await db.execute({
184
+ drizzle: db.drizzle,
185
+ sql: sql`
186
+ ALTER TABLE ${sql.identifier(versionsTable)} DROP COLUMN version__status
187
+ `
188
+ });
189
+ // 4. Create and populate _status column in main collection/global locales table
190
+ // With localizeStatus enabled, _status is a localized field stored in the collection's locales table
191
+ // We need to create this column and populate it based on the latest version status per locale
192
+ const mainTable = collectionSlug ? toSnakeCase(collectionSlug) : toSnakeCase(globalSlug);
193
+ const mainLocalesTable = `${mainTable}_locales`;
194
+ const localesTableCheck = await db.execute({
195
+ drizzle: db.drizzle,
196
+ sql: sql`
197
+ SELECT EXISTS (
198
+ SELECT FROM information_schema.tables
199
+ WHERE table_schema = 'public'
200
+ AND table_name = ${mainLocalesTable}
201
+ ) as exists
202
+ `
203
+ });
204
+ if (localesTableCheck.rows[0]?.exists) {
205
+ // Check if _status column already exists in the locales table
206
+ const statusColumnCheck = await db.execute({
207
+ drizzle: db.drizzle,
208
+ sql: sql`
209
+ SELECT EXISTS (
210
+ SELECT FROM information_schema.columns
211
+ WHERE table_schema = 'public'
212
+ AND table_name = ${mainLocalesTable}
213
+ AND column_name = '_status'
214
+ ) as exists
215
+ `
216
+ });
217
+ if (!statusColumnCheck.rows[0]?.exists) {
218
+ // Add _status column to locales table
219
+ await db.execute({
220
+ drizzle: db.drizzle,
221
+ sql: sql`
222
+ ALTER TABLE ${sql.identifier(mainLocalesTable)}
223
+ ADD COLUMN _status VARCHAR DEFAULT 'draft'
224
+ `
225
+ });
226
+ }
227
+ // Now populate the _status values from the latest version
228
+ if (collectionSlug) {
229
+ await migrateMainCollectionStatus({
230
+ collectionSlug,
231
+ db,
232
+ locales,
233
+ payload,
234
+ sql,
235
+ versionsTable
236
+ });
237
+ } else if (globalSlug) {
238
+ await migrateMainGlobalStatus({
239
+ db,
240
+ globalSlug,
241
+ locales,
242
+ payload,
243
+ sql,
244
+ versionsTable
245
+ });
246
+ }
247
+ } else {
248
+ payload.logger.info({
249
+ msg: `No locales table found: ${mainLocalesTable} (collection/global not localized)`
250
+ });
251
+ }
252
+ // 5. Drop _status from main table if it exists (it will be in locales table now)
253
+ const mainTableStatusCheck = await db.execute({
254
+ drizzle: db.drizzle,
255
+ sql: sql`
256
+ SELECT EXISTS (
257
+ SELECT FROM information_schema.columns
258
+ WHERE table_schema = 'public'
259
+ AND table_name = ${mainTable}
260
+ AND column_name = '_status'
261
+ ) as exists
262
+ `
263
+ });
264
+ if (mainTableStatusCheck.rows[0]?.exists) {
265
+ await db.execute({
266
+ drizzle: db.drizzle,
267
+ sql: sql`
268
+ ALTER TABLE ${sql.identifier(mainTable)} DROP COLUMN _status
269
+ `
270
+ });
271
+ }
272
+ payload.logger.info({
273
+ msg: 'Migration completed successfully'
274
+ });
275
+ }
276
+
277
+ //# sourceMappingURL=up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/versions/migrations/localizeStatus/sql/up.ts"],"sourcesContent":["import type { Payload } from '../../../../types/index.js'\n\nimport { calculateVersionLocaleStatuses, toSnakeCase } from '../shared.js'\nimport { migrateMainCollectionStatus } from './migrateMainCollection.js'\nimport { migrateMainGlobalStatus } from './migrateMainGlobal.js'\n\nexport type LocalizeStatusArgs = {\n collectionSlug?: string\n db: any\n globalSlug?: string\n payload: Payload\n req?: any\n sql: any\n}\n\nexport async function up(args: LocalizeStatusArgs): Promise<void> {\n const { collectionSlug, db, globalSlug, payload, req, sql } = args\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n if (collectionSlug && globalSlug) {\n throw new Error('Cannot provide both collectionSlug and globalSlug')\n }\n\n const entitySlug = collectionSlug || globalSlug\n // Convert camelCase slugs to snake_case and add version prefix/suffix\n const versionsTable = collectionSlug\n ? `_${toSnakeCase(collectionSlug)}_v`\n : `_${toSnakeCase(globalSlug!)}_v`\n const localesTable = `${versionsTable}_locales`\n\n if (!payload.config.localization) {\n throw new Error('Localization is not enabled in payload config')\n }\n\n // Check if versions are enabled on this collection/global\n let entityConfig\n if (collectionSlug) {\n const collection = payload.config.collections.find((c) => c.slug === collectionSlug)\n if (collection) {\n entityConfig = collection\n }\n } else if (globalSlug) {\n const global = payload.config.globals.find((g) => g.slug === globalSlug)\n if (global) {\n entityConfig = global\n }\n }\n\n if (!entityConfig) {\n throw new Error(\n `${collectionSlug ? 'Collection' : 'Global'} not found: ${collectionSlug || globalSlug}`,\n )\n }\n\n payload.logger.info({\n msg: `Starting _status localization migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug}`,\n })\n\n // Get filtered locales if filterAvailableLocales is defined\n let locales = payload.config.localization.localeCodes\n if (typeof payload.config.localization.filterAvailableLocales === 'function') {\n const filteredLocaleObjects = await payload.config.localization.filterAvailableLocales({\n locales: payload.config.localization.locales,\n req,\n })\n locales = filteredLocaleObjects.map((locale) => locale.code)\n }\n payload.logger.info({ msg: `Locales: ${locales.join(', ')}` })\n\n // Check if versions are enabled in config (skip if not)\n if (!entityConfig.versions) {\n payload.logger.info({\n msg: `Skipping migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug} - versions not enabled`,\n })\n return\n }\n\n // Validate that version__status column exists before proceeding\n const columnCheckResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${versionsTable}\n AND column_name = 'version__status'\n ) as exists\n `,\n })\n\n if (!columnCheckResult.rows[0]?.exists) {\n throw new Error(\n `Migration aborted: version__status column not found in ${versionsTable} table. ` +\n `This migration should only run on schemas that have NOT yet been migrated to per-locale status. ` +\n `If you've already run this migration, no action is needed.`,\n )\n }\n\n // 1. Check if the locales table exists\n const localesTableCheckResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = ${localesTable}\n ) as exists\n `,\n })\n\n const localesTableExists = localesTableCheckResult.rows[0]?.exists\n\n if (!localesTableExists) {\n // SCENARIO 1: Create the locales table (first localized field in versions)\n payload.logger.info({ msg: `Creating new locales table: ${localesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n CREATE TABLE ${sql.identifier(localesTable)} (\n id SERIAL PRIMARY KEY,\n _locale VARCHAR NOT NULL,\n _parent_id INTEGER NOT NULL,\n version__status VARCHAR,\n UNIQUE(_locale, _parent_id),\n FOREIGN KEY (_parent_id) REFERENCES ${sql.identifier(versionsTable)}(id) ON DELETE CASCADE\n )\n `,\n })\n\n // Create one row per locale per version record\n // Simple approach: copy the same status to all locales\n for (const locale of locales) {\n const inserted = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n INSERT INTO ${sql.identifier(localesTable)} (_locale, _parent_id, version__status)\n SELECT ${locale}, id, version__status\n FROM ${sql.identifier(versionsTable)}\n RETURNING id\n `,\n })\n payload.logger.info({\n msg: `Inserted ${inserted.length} rows for locale: ${locale}`,\n })\n }\n } else {\n // SCENARIO 2: Add version__status column to existing locales table\n payload.logger.info({ msg: `Adding version__status column to existing table: ${localesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(localesTable)} ADD COLUMN version__status VARCHAR\n `,\n })\n\n // INTELLIGENT DATA MIGRATION using historical publishedLocale data\n payload.logger.info({ msg: 'Processing version history to determine status per locale...' })\n\n // First, get the list of locales that actually exist in the locales table\n // This is important because the config may have more locales defined than what's in the OLD schema\n const existingLocalesResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT DISTINCT _locale\n FROM ${sql.identifier(localesTable)}\n ORDER BY _locale\n `,\n })\n const existingLocales = existingLocalesResult.rows.map((row: any) => row._locale as string)\n payload.logger.info({\n msg: `Found existing locales in table: ${existingLocales.join(', ')}`,\n })\n\n // Get all version records grouped by parent document, ordered chronologically\n const versionsResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT id, parent_id as parent, version__status as _status, published_locale, snapshot, created_at\n FROM ${sql.identifier(versionsTable)}\n ORDER BY parent_id, created_at ASC\n `,\n })\n\n // Use shared function to calculate version locale statuses\n // Only process locales that actually exist in the locales table\n const versionLocaleStatus = calculateVersionLocaleStatuses(\n versionsResult.rows,\n existingLocales,\n payload,\n )\n\n // Now update the locales table with the calculated status for each version\n payload.logger.info({ msg: 'Updating locales table with calculated statuses...' })\n\n let updateCount = 0\n for (const [versionId, localeMap] of versionLocaleStatus.entries()) {\n for (const [locale, status] of localeMap.entries()) {\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(localesTable)}\n SET version__status = ${status}\n WHERE _parent_id = ${versionId}\n AND _locale = ${locale}\n `,\n })\n updateCount++\n }\n }\n\n payload.logger.info({ msg: `Updated ${updateCount} locale rows with status` })\n }\n\n // 3. Drop the old version__status column from main versions table\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(versionsTable)} DROP COLUMN version__status\n `,\n })\n\n // 4. Create and populate _status column in main collection/global locales table\n // With localizeStatus enabled, _status is a localized field stored in the collection's locales table\n // We need to create this column and populate it based on the latest version status per locale\n const mainTable = collectionSlug ? toSnakeCase(collectionSlug) : toSnakeCase(globalSlug!)\n const mainLocalesTable = `${mainTable}_locales`\n\n const localesTableCheck = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = ${mainLocalesTable}\n ) as exists\n `,\n })\n\n if (localesTableCheck.rows[0]?.exists) {\n // Check if _status column already exists in the locales table\n const statusColumnCheck = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${mainLocalesTable}\n AND column_name = '_status'\n ) as exists\n `,\n })\n\n if (!statusColumnCheck.rows[0]?.exists) {\n // Add _status column to locales table\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainLocalesTable)}\n ADD COLUMN _status VARCHAR DEFAULT 'draft'\n `,\n })\n }\n\n // Now populate the _status values from the latest version\n if (collectionSlug) {\n await migrateMainCollectionStatus({\n collectionSlug,\n db,\n locales,\n payload,\n sql,\n versionsTable,\n })\n } else if (globalSlug) {\n await migrateMainGlobalStatus({ db, globalSlug, locales, payload, sql, versionsTable })\n }\n } else {\n payload.logger.info({\n msg: `No locales table found: ${mainLocalesTable} (collection/global not localized)`,\n })\n }\n\n // 5. Drop _status from main table if it exists (it will be in locales table now)\n const mainTableStatusCheck = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${mainTable}\n AND column_name = '_status'\n ) as exists\n `,\n })\n\n if (mainTableStatusCheck.rows[0]?.exists) {\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainTable)} DROP COLUMN _status\n `,\n })\n }\n\n payload.logger.info({ msg: 'Migration completed successfully' })\n}\n"],"names":["calculateVersionLocaleStatuses","toSnakeCase","migrateMainCollectionStatus","migrateMainGlobalStatus","up","args","collectionSlug","db","globalSlug","payload","req","sql","Error","entitySlug","versionsTable","localesTable","config","localization","entityConfig","collection","collections","find","c","slug","global","globals","g","logger","info","msg","locales","localeCodes","filterAvailableLocales","filteredLocaleObjects","map","locale","code","join","versions","columnCheckResult","execute","drizzle","rows","exists","localesTableCheckResult","localesTableExists","identifier","inserted","length","existingLocalesResult","existingLocales","row","_locale","versionsResult","versionLocaleStatus","updateCount","versionId","localeMap","entries","status","mainTable","mainLocalesTable","localesTableCheck","statusColumnCheck","mainTableStatusCheck"],"mappings":"AAEA,SAASA,8BAA8B,EAAEC,WAAW,QAAQ,eAAc;AAC1E,SAASC,2BAA2B,QAAQ,6BAA4B;AACxE,SAASC,uBAAuB,QAAQ,yBAAwB;AAWhE,OAAO,eAAeC,GAAGC,IAAwB;IAC/C,MAAM,EAAEC,cAAc,EAAEC,EAAE,EAAEC,UAAU,EAAEC,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE,GAAGN;IAE9D,IAAI,CAACC,kBAAkB,CAACE,YAAY;QAClC,MAAM,IAAII,MAAM;IAClB;IAEA,IAAIN,kBAAkBE,YAAY;QAChC,MAAM,IAAII,MAAM;IAClB;IAEA,MAAMC,aAAaP,kBAAkBE;IACrC,sEAAsE;IACtE,MAAMM,gBAAgBR,iBAClB,CAAC,CAAC,EAAEL,YAAYK,gBAAgB,EAAE,CAAC,GACnC,CAAC,CAAC,EAAEL,YAAYO,YAAa,EAAE,CAAC;IACpC,MAAMO,eAAe,GAAGD,cAAc,QAAQ,CAAC;IAE/C,IAAI,CAACL,QAAQO,MAAM,CAACC,YAAY,EAAE;QAChC,MAAM,IAAIL,MAAM;IAClB;IAEA,0DAA0D;IAC1D,IAAIM;IACJ,IAAIZ,gBAAgB;QAClB,MAAMa,aAAaV,QAAQO,MAAM,CAACI,WAAW,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKjB;QACrE,IAAIa,YAAY;YACdD,eAAeC;QACjB;IACF,OAAO,IAAIX,YAAY;QACrB,MAAMgB,SAASf,QAAQO,MAAM,CAACS,OAAO,CAACJ,IAAI,CAAC,CAACK,IAAMA,EAAEH,IAAI,KAAKf;QAC7D,IAAIgB,QAAQ;YACVN,eAAeM;QACjB;IACF;IAEA,IAAI,CAACN,cAAc;QACjB,MAAM,IAAIN,MACR,GAAGN,iBAAiB,eAAe,SAAS,YAAY,EAAEA,kBAAkBE,YAAY;IAE5F;IAEAC,QAAQkB,MAAM,CAACC,IAAI,CAAC;QAClBC,KAAK,CAAC,4CAA4C,EAAEvB,iBAAiB,eAAe,SAAS,EAAE,EAAEO,YAAY;IAC/G;IAEA,4DAA4D;IAC5D,IAAIiB,UAAUrB,QAAQO,MAAM,CAACC,YAAY,CAACc,WAAW;IACrD,IAAI,OAAOtB,QAAQO,MAAM,CAACC,YAAY,CAACe,sBAAsB,KAAK,YAAY;QAC5E,MAAMC,wBAAwB,MAAMxB,QAAQO,MAAM,CAACC,YAAY,CAACe,sBAAsB,CAAC;YACrFF,SAASrB,QAAQO,MAAM,CAACC,YAAY,CAACa,OAAO;YAC5CpB;QACF;QACAoB,UAAUG,sBAAsBC,GAAG,CAAC,CAACC,SAAWA,OAAOC,IAAI;IAC7D;IACA3B,QAAQkB,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK,CAAC,SAAS,EAAEC,QAAQO,IAAI,CAAC,OAAO;IAAC;IAE5D,wDAAwD;IACxD,IAAI,CAACnB,aAAaoB,QAAQ,EAAE;QAC1B7B,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAClBC,KAAK,CAAC,uBAAuB,EAAEvB,iBAAiB,eAAe,SAAS,EAAE,EAAEO,WAAW,uBAAuB,CAAC;QACjH;QACA;IACF;IAEA,gEAAgE;IAChE,MAAM0B,oBAAoB,MAAMhC,GAAGiC,OAAO,CAAC;QACzCC,SAASlC,GAAGkC,OAAO;QACnB9B,KAAKA,GAAG,CAAC;;;;yBAIY,EAAEG,cAAc;;;IAGrC,CAAC;IACH;IAEA,IAAI,CAACyB,kBAAkBG,IAAI,CAAC,EAAE,EAAEC,QAAQ;QACtC,MAAM,IAAI/B,MACR,CAAC,uDAAuD,EAAEE,cAAc,QAAQ,CAAC,GAC/E,CAAC,gGAAgG,CAAC,GAClG,CAAC,0DAA0D,CAAC;IAElE;IAEA,uCAAuC;IACvC,MAAM8B,0BAA0B,MAAMrC,GAAGiC,OAAO,CAAC;QAC/CC,SAASlC,GAAGkC,OAAO;QACnB9B,KAAKA,GAAG,CAAC;;;;yBAIY,EAAEI,aAAa;;IAEpC,CAAC;IACH;IAEA,MAAM8B,qBAAqBD,wBAAwBF,IAAI,CAAC,EAAE,EAAEC;IAE5D,IAAI,CAACE,oBAAoB;QACvB,2EAA2E;QAC3EpC,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK,CAAC,4BAA4B,EAAEd,cAAc;QAAC;QAEzE,MAAMR,GAAGiC,OAAO,CAAC;YACfC,SAASlC,GAAGkC,OAAO;YACnB9B,KAAKA,GAAG,CAAC;qBACM,EAAEA,IAAImC,UAAU,CAAC/B,cAAc;;;;;;8CAMN,EAAEJ,IAAImC,UAAU,CAAChC,eAAe;;MAExE,CAAC;QACH;QAEA,+CAA+C;QAC/C,uDAAuD;QACvD,KAAK,MAAMqB,UAAUL,QAAS;YAC5B,MAAMiB,WAAW,MAAMxC,GAAGiC,OAAO,CAAC;gBAChCC,SAASlC,GAAGkC,OAAO;gBACnB9B,KAAKA,GAAG,CAAC;sBACK,EAAEA,IAAImC,UAAU,CAAC/B,cAAc;iBACpC,EAAEoB,OAAO;eACX,EAAExB,IAAImC,UAAU,CAAChC,eAAe;;QAEvC,CAAC;YACH;YACAL,QAAQkB,MAAM,CAACC,IAAI,CAAC;gBAClBC,KAAK,CAAC,SAAS,EAAEkB,SAASC,MAAM,CAAC,kBAAkB,EAAEb,QAAQ;YAC/D;QACF;IACF,OAAO;QACL,mEAAmE;QACnE1B,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK,CAAC,iDAAiD,EAAEd,cAAc;QAAC;QAE9F,MAAMR,GAAGiC,OAAO,CAAC;YACfC,SAASlC,GAAGkC,OAAO;YACnB9B,KAAKA,GAAG,CAAC;oBACK,EAAEA,IAAImC,UAAU,CAAC/B,cAAc;MAC7C,CAAC;QACH;QAEA,mEAAmE;QACnEN,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAA+D;QAE1F,0EAA0E;QAC1E,mGAAmG;QACnG,MAAMoB,wBAAwB,MAAM1C,GAAGiC,OAAO,CAAC;YAC7CC,SAASlC,GAAGkC,OAAO;YACnB9B,KAAKA,GAAG,CAAC;;aAEF,EAAEA,IAAImC,UAAU,CAAC/B,cAAc;;MAEtC,CAAC;QACH;QACA,MAAMmC,kBAAkBD,sBAAsBP,IAAI,CAACR,GAAG,CAAC,CAACiB,MAAaA,IAAIC,OAAO;QAChF3C,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAClBC,KAAK,CAAC,iCAAiC,EAAEqB,gBAAgBb,IAAI,CAAC,OAAO;QACvE;QAEA,8EAA8E;QAC9E,MAAMgB,iBAAiB,MAAM9C,GAAGiC,OAAO,CAAC;YACtCC,SAASlC,GAAGkC,OAAO;YACnB9B,KAAKA,GAAG,CAAC;;aAEF,EAAEA,IAAImC,UAAU,CAAChC,eAAe;;MAEvC,CAAC;QACH;QAEA,2DAA2D;QAC3D,gEAAgE;QAChE,MAAMwC,sBAAsBtD,+BAC1BqD,eAAeX,IAAI,EACnBQ,iBACAzC;QAGF,2EAA2E;QAC3EA,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAAqD;QAEhF,IAAI0B,cAAc;QAClB,KAAK,MAAM,CAACC,WAAWC,UAAU,IAAIH,oBAAoBI,OAAO,GAAI;YAClE,KAAK,MAAM,CAACvB,QAAQwB,OAAO,IAAIF,UAAUC,OAAO,GAAI;gBAClD,MAAMnD,GAAGiC,OAAO,CAAC;oBACfC,SAASlC,GAAGkC,OAAO;oBACnB9B,KAAKA,GAAG,CAAC;mBACA,EAAEA,IAAImC,UAAU,CAAC/B,cAAc;kCAChB,EAAE4C,OAAO;+BACZ,EAAEH,UAAU;0BACjB,EAAErB,OAAO;UACzB,CAAC;gBACH;gBACAoB;YACF;QACF;QAEA9C,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK,CAAC,QAAQ,EAAE0B,YAAY,wBAAwB,CAAC;QAAC;IAC9E;IAEA,kEAAkE;IAClE,MAAMhD,GAAGiC,OAAO,CAAC;QACfC,SAASlC,GAAGkC,OAAO;QACnB9B,KAAKA,GAAG,CAAC;kBACK,EAAEA,IAAImC,UAAU,CAAChC,eAAe;IAC9C,CAAC;IACH;IAEA,gFAAgF;IAChF,qGAAqG;IACrG,8FAA8F;IAC9F,MAAM8C,YAAYtD,iBAAiBL,YAAYK,kBAAkBL,YAAYO;IAC7E,MAAMqD,mBAAmB,GAAGD,UAAU,QAAQ,CAAC;IAE/C,MAAME,oBAAoB,MAAMvD,GAAGiC,OAAO,CAAC;QACzCC,SAASlC,GAAGkC,OAAO;QACnB9B,KAAKA,GAAG,CAAC;;;;yBAIY,EAAEkD,iBAAiB;;IAExC,CAAC;IACH;IAEA,IAAIC,kBAAkBpB,IAAI,CAAC,EAAE,EAAEC,QAAQ;QACrC,8DAA8D;QAC9D,MAAMoB,oBAAoB,MAAMxD,GAAGiC,OAAO,CAAC;YACzCC,SAASlC,GAAGkC,OAAO;YACnB9B,KAAKA,GAAG,CAAC;;;;2BAIY,EAAEkD,iBAAiB;;;MAGxC,CAAC;QACH;QAEA,IAAI,CAACE,kBAAkBrB,IAAI,CAAC,EAAE,EAAEC,QAAQ;YACtC,sCAAsC;YACtC,MAAMpC,GAAGiC,OAAO,CAAC;gBACfC,SAASlC,GAAGkC,OAAO;gBACnB9B,KAAKA,GAAG,CAAC;sBACK,EAAEA,IAAImC,UAAU,CAACe,kBAAkB;;QAEjD,CAAC;YACH;QACF;QAEA,0DAA0D;QAC1D,IAAIvD,gBAAgB;YAClB,MAAMJ,4BAA4B;gBAChCI;gBACAC;gBACAuB;gBACArB;gBACAE;gBACAG;YACF;QACF,OAAO,IAAIN,YAAY;YACrB,MAAML,wBAAwB;gBAAEI;gBAAIC;gBAAYsB;gBAASrB;gBAASE;gBAAKG;YAAc;QACvF;IACF,OAAO;QACLL,QAAQkB,MAAM,CAACC,IAAI,CAAC;YAClBC,KAAK,CAAC,wBAAwB,EAAEgC,iBAAiB,kCAAkC,CAAC;QACtF;IACF;IAEA,iFAAiF;IACjF,MAAMG,uBAAuB,MAAMzD,GAAGiC,OAAO,CAAC;QAC5CC,SAASlC,GAAGkC,OAAO;QACnB9B,KAAKA,GAAG,CAAC;;;;yBAIY,EAAEiD,UAAU;;;IAGjC,CAAC;IACH;IAEA,IAAII,qBAAqBtB,IAAI,CAAC,EAAE,EAAEC,QAAQ;QACxC,MAAMpC,GAAGiC,OAAO,CAAC;YACfC,SAASlC,GAAGkC,OAAO;YACnB9B,KAAKA,GAAG,CAAC;oBACK,EAAEA,IAAImC,UAAU,CAACc,WAAW;MAC1C,CAAC;QACH;IACF;IAEAnD,QAAQkB,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK;IAAmC;AAChE"}
@@ -1 +1 @@
1
- {"version":3,"file":"saveSnapshot.d.ts","sourceRoot":"","sources":["../../src/versions/saveSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAK/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,CAAC,SAAS,UAAU,yGAUpD,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAsCvF,CAAA"}
1
+ {"version":3,"file":"saveSnapshot.d.ts","sourceRoot":"","sources":["../../src/versions/saveSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAK/E,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,yBAAyB,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,CAAC,SAAS,UAAU,yGAUpD,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAqCvF,CAAA"}
@@ -2,7 +2,6 @@ import { deepCopyObjectSimple } from '../index.js';
2
2
  import { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js';
3
3
  export const saveSnapshot = async ({ id, autosave, collection, data, global, payload, publishSpecificLocale, req, select })=>{
4
4
  const docData = deepCopyObjectSimple(data || {});
5
- docData._status = 'draft';
6
5
  if (docData._id) {
7
6
  delete docData._id;
8
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/saveSnapshot.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload, TypeWithVersion } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n data?: T\n global?: SanitizedGlobalConfig\n id?: number | string\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n select?: SelectType\n}\n\nexport const saveSnapshot = async <T extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n data,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n}: Args<T>): Promise<Omit<TypeWithVersion<T>, 'parent'> | TypeWithVersion<T> | undefined> => {\n const docData: {\n _status?: 'draft'\n } & T = deepCopyObjectSimple<T>(data || ({} as T))\n docData._status = 'draft'\n\n if (docData._id) {\n delete docData._id\n }\n\n const snapshotDate = new Date().toISOString()\n\n const sharedCreateVersionArgs = {\n autosave: Boolean(autosave),\n createdAt: snapshotDate,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning: false,\n select: getQueryDraftsSelect({ select }),\n updatedAt: snapshotDate,\n versionData: docData,\n }\n\n if (collection && id) {\n return payload.db.createVersion<T>({\n ...sharedCreateVersionArgs,\n collectionSlug: collection.slug,\n parent: id,\n snapshot: true,\n })\n }\n if (global) {\n return payload.db.createGlobalVersion<T>({\n ...sharedCreateVersionArgs,\n globalSlug: global.slug,\n snapshot: true,\n })\n }\n}\n"],"names":["deepCopyObjectSimple","getQueryDraftsSelect","saveSnapshot","id","autosave","collection","data","global","payload","publishSpecificLocale","req","select","docData","_status","_id","snapshotDate","Date","toISOString","sharedCreateVersionArgs","Boolean","createdAt","publishedLocale","undefined","returning","updatedAt","versionData","db","createVersion","collectionSlug","slug","parent","snapshot","createGlobalVersion","globalSlug"],"mappings":"AAKA,SAASA,oBAAoB,QAAQ,cAAa;AAClD,SAASC,oBAAoB,QAAQ,mCAAkC;AAcvE,OAAO,MAAMC,eAAe,OAA0C,EACpEC,EAAE,EACFC,QAAQ,EACRC,UAAU,EACVC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,qBAAqB,EACrBC,GAAG,EACHC,MAAM,EACE;IACR,MAAMC,UAEEZ,qBAAwBM,QAAS,CAAC;IAC1CM,QAAQC,OAAO,GAAG;IAElB,IAAID,QAAQE,GAAG,EAAE;QACf,OAAOF,QAAQE,GAAG;IACpB;IAEA,MAAMC,eAAe,IAAIC,OAAOC,WAAW;IAE3C,MAAMC,0BAA0B;QAC9Bd,UAAUe,QAAQf;QAClBgB,WAAWL;QACXM,iBAAiBZ,yBAAyBa;QAC1CZ;QACAa,WAAW;QACXZ,QAAQV,qBAAqB;YAAEU;QAAO;QACtCa,WAAWT;QACXU,aAAab;IACf;IAEA,IAAIP,cAAcF,IAAI;QACpB,OAAOK,QAAQkB,EAAE,CAACC,aAAa,CAAI;YACjC,GAAGT,uBAAuB;YAC1BU,gBAAgBvB,WAAWwB,IAAI;YAC/BC,QAAQ3B;YACR4B,UAAU;QACZ;IACF;IACA,IAAIxB,QAAQ;QACV,OAAOC,QAAQkB,EAAE,CAACM,mBAAmB,CAAI;YACvC,GAAGd,uBAAuB;YAC1Be,YAAY1B,OAAOsB,IAAI;YACvBE,UAAU;QACZ;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/versions/saveSnapshot.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload, TypeWithVersion } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n data?: T\n global?: SanitizedGlobalConfig\n id?: number | string\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n select?: SelectType\n}\n\nexport const saveSnapshot = async <T extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n data,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n}: Args<T>): Promise<Omit<TypeWithVersion<T>, 'parent'> | TypeWithVersion<T> | undefined> => {\n const docData: {\n _status?: 'draft'\n } & T = deepCopyObjectSimple<T>(data || ({} as T))\n\n if (docData._id) {\n delete docData._id\n }\n\n const snapshotDate = new Date().toISOString()\n\n const sharedCreateVersionArgs = {\n autosave: Boolean(autosave),\n createdAt: snapshotDate,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning: false,\n select: getQueryDraftsSelect({ select }),\n updatedAt: snapshotDate,\n versionData: docData,\n }\n\n if (collection && id) {\n return payload.db.createVersion<T>({\n ...sharedCreateVersionArgs,\n collectionSlug: collection.slug,\n parent: id,\n snapshot: true,\n })\n }\n if (global) {\n return payload.db.createGlobalVersion<T>({\n ...sharedCreateVersionArgs,\n globalSlug: global.slug,\n snapshot: true,\n })\n }\n}\n"],"names":["deepCopyObjectSimple","getQueryDraftsSelect","saveSnapshot","id","autosave","collection","data","global","payload","publishSpecificLocale","req","select","docData","_id","snapshotDate","Date","toISOString","sharedCreateVersionArgs","Boolean","createdAt","publishedLocale","undefined","returning","updatedAt","versionData","db","createVersion","collectionSlug","slug","parent","snapshot","createGlobalVersion","globalSlug"],"mappings":"AAKA,SAASA,oBAAoB,QAAQ,cAAa;AAClD,SAASC,oBAAoB,QAAQ,mCAAkC;AAcvE,OAAO,MAAMC,eAAe,OAA0C,EACpEC,EAAE,EACFC,QAAQ,EACRC,UAAU,EACVC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,qBAAqB,EACrBC,GAAG,EACHC,MAAM,EACE;IACR,MAAMC,UAEEZ,qBAAwBM,QAAS,CAAC;IAE1C,IAAIM,QAAQC,GAAG,EAAE;QACf,OAAOD,QAAQC,GAAG;IACpB;IAEA,MAAMC,eAAe,IAAIC,OAAOC,WAAW;IAE3C,MAAMC,0BAA0B;QAC9Bb,UAAUc,QAAQd;QAClBe,WAAWL;QACXM,iBAAiBX,yBAAyBY;QAC1CX;QACAY,WAAW;QACXX,QAAQV,qBAAqB;YAAEU;QAAO;QACtCY,WAAWT;QACXU,aAAaZ;IACf;IAEA,IAAIP,cAAcF,IAAI;QACpB,OAAOK,QAAQiB,EAAE,CAACC,aAAa,CAAI;YACjC,GAAGT,uBAAuB;YAC1BU,gBAAgBtB,WAAWuB,IAAI;YAC/BC,QAAQ1B;YACR2B,UAAU;QACZ;IACF;IACA,IAAIvB,QAAQ;QACV,OAAOC,QAAQiB,EAAE,CAACM,mBAAmB,CAAI;YACvC,GAAGd,uBAAuB;YAC1Be,YAAYzB,OAAOqB,IAAI;YACvBE,UAAU;QACZ;IACF;AACF,EAAC"}
@@ -9,9 +9,6 @@ export async function saveVersion({ id, autosave, collection, docWithLocales, dr
9
9
  let createNewVersion = true;
10
10
  const now = new Date().toISOString();
11
11
  const versionData = deepCopyObjectSimple(docWithLocales);
12
- if (draft) {
13
- versionData._status = 'draft';
14
- }
15
12
  if (collection?.timestamps && draft) {
16
13
  versionData.updatedAt = now;
17
14
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: T\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n operation?: 'create' | 'restoreVersion' | 'update'\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n returning?: boolean\n select?: SelectType\n snapshot?: any\n}\n\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: false } & Args<TData>,\n): Promise<null>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: true } & Args<TData>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: Omit<Args<TData>, 'returning'>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n docWithLocales,\n draft,\n global,\n operation,\n payload,\n publishSpecificLocale,\n req,\n returning,\n select,\n snapshot,\n}: Args<TData>): Promise<JsonObject | null> {\n let result: JsonObject | undefined\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData: {\n _status?: 'draft'\n updatedAt?: string\n } & TData = deepCopyObjectSimple(docWithLocales)\n\n if (draft) {\n versionData._status = 'draft'\n }\n\n if (collection?.timestamps && draft) {\n versionData.updatedAt = now\n }\n\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n\n if (collection) {\n ;({ docs } = await payload.db.findVersions<TData>({\n ...findVersionArgs,\n collection: collection.slug,\n limit: 1,\n pagination: false,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions<TData>({\n ...findVersionArgs,\n global: global!.slug,\n limit: 1,\n pagination: false,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion && 'autosave' in latestVersion && latestVersion.autosave === true) {\n createNewVersion = false\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n latest: true,\n parent: id,\n updatedAt: now,\n version: {\n ...versionData,\n },\n },\n }\n\n if (collection) {\n result = await payload.db.updateVersion<TData>({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion<TData>({\n ...updateVersionArgs,\n global: global!.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n const createVersionArgs = {\n autosave: Boolean(autosave),\n collectionSlug: undefined as string | undefined,\n createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n globalSlug: undefined as string | undefined,\n parent: collection ? id : undefined,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning,\n select: getQueryDraftsSelect({ select }),\n updatedAt: now,\n versionData,\n }\n\n if (collection) {\n createVersionArgs.collectionSlug = collection.slug\n result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n }\n\n if (global) {\n createVersionArgs.globalSlug = global.slug\n result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n }\n\n if (snapshot) {\n await saveSnapshot<TData>({\n id,\n autosave,\n collection,\n data: snapshot,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n })\n }\n }\n } catch (err) {\n let errorMessage: string | undefined\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n }\n payload.logger.error({ err, msg: errorMessage })\n return undefined!\n }\n\n const max = getVersionsMax(collection || global!)\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n if (returning === false) {\n return null\n }\n\n let createdVersion = (result as any).version\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = (result as any).parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","returning","select","snapshot","result","createNewVersion","now","Date","toISOString","versionData","_status","timestamps","updatedAt","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","updateVersionArgs","createdAt","latest","version","updateVersion","updateGlobalVersion","createVersionArgs","Boolean","collectionSlug","undefined","globalSlug","publishedLocale","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: T\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n operation?: 'create' | 'restoreVersion' | 'update'\n payload: Payload\n publishSpecificLocale?: string\n req?: PayloadRequest\n returning?: boolean\n select?: SelectType\n snapshot?: any\n}\n\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: false } & Args<TData>,\n): Promise<null>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: { returning: true } & Args<TData>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n args: Omit<Args<TData>, 'returning'>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>({\n id,\n autosave,\n collection,\n docWithLocales,\n draft,\n global,\n operation,\n payload,\n publishSpecificLocale,\n req,\n returning,\n select,\n snapshot,\n}: Args<TData>): Promise<JsonObject | null> {\n let result: JsonObject | undefined\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData: {\n _status?: 'draft'\n updatedAt?: string\n } & TData = deepCopyObjectSimple(docWithLocales)\n\n if (collection?.timestamps && draft) {\n versionData.updatedAt = now\n }\n\n if (versionData._id) {\n delete versionData._id\n }\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n\n if (collection) {\n ;({ docs } = await payload.db.findVersions<TData>({\n ...findVersionArgs,\n collection: collection.slug,\n limit: 1,\n pagination: false,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions<TData>({\n ...findVersionArgs,\n global: global!.slug,\n limit: 1,\n pagination: false,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion && 'autosave' in latestVersion && latestVersion.autosave === true) {\n createNewVersion = false\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n latest: true,\n parent: id,\n updatedAt: now,\n version: {\n ...versionData,\n },\n },\n }\n\n if (collection) {\n result = await payload.db.updateVersion<TData>({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion<TData>({\n ...updateVersionArgs,\n global: global!.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n const createVersionArgs = {\n autosave: Boolean(autosave),\n collectionSlug: undefined as string | undefined,\n createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n globalSlug: undefined as string | undefined,\n parent: collection ? id : undefined,\n publishedLocale: publishSpecificLocale || undefined,\n req,\n returning,\n select: getQueryDraftsSelect({ select }),\n updatedAt: now,\n versionData,\n }\n\n if (collection) {\n createVersionArgs.collectionSlug = collection.slug\n result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n }\n\n if (global) {\n createVersionArgs.globalSlug = global.slug\n result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n }\n\n if (snapshot) {\n await saveSnapshot<TData>({\n id,\n autosave,\n collection,\n data: snapshot,\n global,\n payload,\n publishSpecificLocale,\n req,\n select,\n })\n }\n }\n } catch (err) {\n let errorMessage: string | undefined\n\n if (collection) {\n errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n }\n if (global) {\n errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n }\n payload.logger.error({ err, msg: errorMessage })\n return undefined!\n }\n\n const max = getVersionsMax(collection || global!)\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n if (returning === false) {\n return null\n }\n\n let createdVersion = (result as any).version\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = (result as any).parent\n\n return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","returning","select","snapshot","result","createNewVersion","now","Date","toISOString","versionData","timestamps","updatedAt","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","updateVersionArgs","createdAt","latest","version","updateVersion","updateGlobalVersion","createVersionArgs","Boolean","collectionSlug","undefined","globalSlug","publishedLocale","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion"],"mappings":"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"}
@@ -36,6 +36,15 @@ export type IncomingDrafts = {
36
36
  * To enable, set to true or pass an object with options.
37
37
  */
38
38
  autosave?: Autosave | boolean;
39
+ /**
40
+ * Localizes the status field.
41
+ *
42
+ * Only effective if the experimental `experimental.localizeStatus` is enabled.
43
+ *
44
+ * @experimental
45
+ * @default false
46
+ */
47
+ localizeStatus?: boolean;
39
48
  /**
40
49
  * Allow for editors to schedule publish / unpublish events in the future.
41
50
  */
@@ -53,6 +62,15 @@ export type SanitizedDrafts = {
53
62
  * To enable, set to true or pass an object with options.
54
63
  */
55
64
  autosave: Autosave | false;
65
+ /**
66
+ * Localizes the status field.
67
+ *
68
+ * Only effective if the experimental `experimental.localizeStatus` is enabled.
69
+ *
70
+ * @experimental
71
+ * @default false
72
+ */
73
+ localizeStatus?: boolean;
56
74
  /**
57
75
  * Allow for editors to schedule publish / unpublish events in the future.
58
76
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/versions/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC7B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC1B;;OAEG;IACH,eAAe,EAAE,OAAO,GAAG,eAAe,CAAA;IAC1C;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAA;IACjC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC;IAC7F;;;OAGG;IACH,MAAM,EAAE,KAAK,GAAG,eAAe,CAAA;IAC/B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAA;IACjC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,MAAM,EAAE,KAAK,GAAG,eAAe,CAAA;IAC/B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,CAAC,CAAA;CACX,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/versions/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC7B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC1B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,eAAe,EAAE,OAAO,GAAG,eAAe,CAAA;IAC1C;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAA;IACjC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC;IAC7F;;;OAGG;IACH,MAAM,EAAE,KAAK,GAAG,eAAe,CAAA;IAC/B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAA;IACjC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,MAAM,EAAE,KAAK,GAAG,eAAe,CAAA;IAC/B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,CAAC,CAAA;CACX,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/types.ts"],"sourcesContent":["export type Autosave = {\n /**\n * Define an `interval` in milliseconds to automatically save progress while documents are edited.\n * Document updates are \"debounced\" at this interval.\n *\n * @default 800\n */\n interval?: number\n /**\n * When set to `true`, the \"Save as draft\" button will be displayed even while autosave is enabled.\n * By default, this button is hidden to avoid redundancy with autosave behavior.\n *\n * @default false\n */\n showSaveDraftButton?: boolean\n}\n\nexport type SchedulePublish = {\n /**\n * Define a date format to use for the time picker.\n *\n * @example 'hh:mm' will give a 24 hour clock\n *\n * @default 'h:mm aa' which is a 12 hour clock\n */\n timeFormat?: string\n /**\n * Intervals for the time picker.\n *\n * @default 5\n */\n timeIntervals?: number\n}\n\nexport type IncomingDrafts = {\n /**\n * Enable autosave to automatically save progress while documents are edited.\n * To enable, set to true or pass an object with options.\n */\n autosave?: Autosave | boolean\n /**\n * Allow for editors to schedule publish / unpublish events in the future.\n */\n schedulePublish?: boolean | SchedulePublish\n /**\n * Set validate to true to validate draft documents when saved.\n *\n * @default false\n */\n validate?: boolean\n}\n\nexport type SanitizedDrafts = {\n /**\n * Enable autosave to automatically save progress while documents are edited.\n * To enable, set to true or pass an object with options.\n */\n autosave: Autosave | false\n /**\n * Allow for editors to schedule publish / unpublish events in the future.\n */\n schedulePublish: boolean | SchedulePublish\n /**\n * Set validate to true to validate draft documents when saved.\n *\n * @default false\n */\n validate: boolean\n}\n\nexport type IncomingCollectionVersions = {\n /**\n * Enable Drafts mode for this collection.\n * To enable, set to true or pass an object with draft options.\n */\n drafts?: boolean | IncomingDrafts\n /**\n * Use this setting to control how many versions to keep on a document by document basis.\n * Must be an integer. Use 0 to save all versions.\n *\n * @default 100\n */\n maxPerDoc?: number\n}\n\nexport interface SanitizedCollectionVersions extends Omit<IncomingCollectionVersions, 'drafts'> {\n /**\n * Enable Drafts mode for this collection.\n * To enable, set to true or pass an object with draft options.\n */\n drafts: false | SanitizedDrafts\n /**\n * Use this setting to control how many versions to keep on a document by document basis.\n * Must be an integer. Use 0 to save all versions.\n *\n * @default 100\n */\n maxPerDoc: number\n}\n\nexport type IncomingGlobalVersions = {\n drafts?: boolean | IncomingDrafts\n /**\n * Use this setting to control how many versions to keep on a global by global basis.\n * Must be an integer.\n */\n max?: number\n}\n\nexport type SanitizedGlobalVersions = {\n /**\n * Enable Drafts mode for this global. To enable, set to true or pass an object with draft options\n */\n drafts: false | SanitizedDrafts\n /**\n * Use this setting to control how many versions to keep on a global by global basis.\n * Must be an integer.\n */\n max: number\n}\n\nexport type TypeWithVersion<T> = {\n createdAt: string\n id: string\n latest?: boolean\n parent: number | string\n publishedLocale?: string\n snapshot?: boolean\n updatedAt: string\n version: T\n}\n"],"names":[],"mappings":"AAyHA,WASC"}
1
+ {"version":3,"sources":["../../src/versions/types.ts"],"sourcesContent":["export type Autosave = {\n /**\n * Define an `interval` in milliseconds to automatically save progress while documents are edited.\n * Document updates are \"debounced\" at this interval.\n *\n * @default 800\n */\n interval?: number\n /**\n * When set to `true`, the \"Save as draft\" button will be displayed even while autosave is enabled.\n * By default, this button is hidden to avoid redundancy with autosave behavior.\n *\n * @default false\n */\n showSaveDraftButton?: boolean\n}\n\nexport type SchedulePublish = {\n /**\n * Define a date format to use for the time picker.\n *\n * @example 'hh:mm' will give a 24 hour clock\n *\n * @default 'h:mm aa' which is a 12 hour clock\n */\n timeFormat?: string\n /**\n * Intervals for the time picker.\n *\n * @default 5\n */\n timeIntervals?: number\n}\n\nexport type IncomingDrafts = {\n /**\n * Enable autosave to automatically save progress while documents are edited.\n * To enable, set to true or pass an object with options.\n */\n autosave?: Autosave | boolean\n /**\n * Localizes the status field.\n *\n * Only effective if the experimental `experimental.localizeStatus` is enabled.\n *\n * @experimental\n * @default false\n */\n localizeStatus?: boolean\n /**\n * Allow for editors to schedule publish / unpublish events in the future.\n */\n schedulePublish?: boolean | SchedulePublish\n /**\n * Set validate to true to validate draft documents when saved.\n *\n * @default false\n */\n validate?: boolean\n}\n\nexport type SanitizedDrafts = {\n /**\n * Enable autosave to automatically save progress while documents are edited.\n * To enable, set to true or pass an object with options.\n */\n autosave: Autosave | false\n /**\n * Localizes the status field.\n *\n * Only effective if the experimental `experimental.localizeStatus` is enabled.\n *\n * @experimental\n * @default false\n */\n localizeStatus?: boolean\n /**\n * Allow for editors to schedule publish / unpublish events in the future.\n */\n schedulePublish: boolean | SchedulePublish\n /**\n * Set validate to true to validate draft documents when saved.\n *\n * @default false\n */\n validate: boolean\n}\n\nexport type IncomingCollectionVersions = {\n /**\n * Enable Drafts mode for this collection.\n * To enable, set to true or pass an object with draft options.\n */\n drafts?: boolean | IncomingDrafts\n /**\n * Use this setting to control how many versions to keep on a document by document basis.\n * Must be an integer. Use 0 to save all versions.\n *\n * @default 100\n */\n maxPerDoc?: number\n}\n\nexport interface SanitizedCollectionVersions extends Omit<IncomingCollectionVersions, 'drafts'> {\n /**\n * Enable Drafts mode for this collection.\n * To enable, set to true or pass an object with draft options.\n */\n drafts: false | SanitizedDrafts\n /**\n * Use this setting to control how many versions to keep on a document by document basis.\n * Must be an integer. Use 0 to save all versions.\n *\n * @default 100\n */\n maxPerDoc: number\n}\n\nexport type IncomingGlobalVersions = {\n drafts?: boolean | IncomingDrafts\n /**\n * Use this setting to control how many versions to keep on a global by global basis.\n * Must be an integer.\n */\n max?: number\n}\n\nexport type SanitizedGlobalVersions = {\n /**\n * Enable Drafts mode for this global. To enable, set to true or pass an object with draft options\n */\n drafts: false | SanitizedDrafts\n /**\n * Use this setting to control how many versions to keep on a global by global basis.\n * Must be an integer.\n */\n max: number\n}\n\nexport type TypeWithVersion<T> = {\n createdAt: string\n id: string\n latest?: boolean\n parent: number | string\n publishedLocale?: string\n snapshot?: boolean\n updatedAt: string\n version: T\n}\n"],"names":[],"mappings":"AA2IA,WASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.71.1",
3
+ "version": "3.72.0-internal.3e70d4c",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -65,6 +65,11 @@
65
65
  "types": "./dist/exports/i18n/*.d.ts",
66
66
  "default": "./dist/exports/i18n/*.js"
67
67
  },
68
+ "./migrations": {
69
+ "import": "./dist/exports/migrations.js",
70
+ "types": "./dist/exports/migrations.d.ts",
71
+ "default": "./dist/exports/migrations.js"
72
+ },
68
73
  "./__testing__/predefinedMigration": {
69
74
  "import": "./dist/__testing__/predefinedMigration.js",
70
75
  "default": "./dist/__testing__/predefinedMigration.js"
@@ -111,7 +116,7 @@
111
116
  "undici": "7.10.0",
112
117
  "uuid": "10.0.0",
113
118
  "ws": "^8.16.0",
114
- "@payloadcms/translations": "3.71.1"
119
+ "@payloadcms/translations": "3.72.0-internal.3e70d4c"
115
120
  },
116
121
  "devDependencies": {
117
122
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",
@@ -1,40 +0,0 @@
1
- import type { SanitizedCollectionConfig } from '../collections/config/types.js';
2
- import type { SharpDependency } from '../config/types.js';
3
- import type { PayloadRequest } from '../types/index.js';
4
- import type { WithMetadata } from './optionallyAppendMetadata.js';
5
- import type { FileSizes, FileToSave, ProbedImageSize, UploadEdits } from './types.js';
6
- type ResizeArgs = {
7
- config: SanitizedCollectionConfig;
8
- dimensions: ProbedImageSize;
9
- file: PayloadRequest['file'];
10
- mimeType: string;
11
- req: PayloadRequest;
12
- savedFilename: string;
13
- sharp?: SharpDependency;
14
- staticPath: string;
15
- uploadEdits?: UploadEdits;
16
- withMetadata?: WithMetadata;
17
- };
18
- /** Result from resizing and transforming the requested image sizes */
19
- type ImageSizesResult = {
20
- focalPoint?: UploadEdits['focalPoint'];
21
- sizeData: FileSizes;
22
- sizesToSave: FileToSave[];
23
- };
24
- /**
25
- * For the provided image sizes, handle the resizing and the transforms
26
- * (format, trim, etc.) of each requested image size and return the result object.
27
- * This only handles the image sizes. The transforms of the original image
28
- * are handled in {@link ./generateFileData.ts}.
29
- *
30
- * The image will be resized according to the provided
31
- * resize config. If no image sizes are requested, the resolved data will be empty.
32
- * For every image that does not need to be resized, a result object with `null`
33
- * parameters will be returned.
34
- *
35
- * @param resizeConfig - the resize config
36
- * @returns the result of the resize operation(s)
37
- */
38
- export declare function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath, uploadEdits, withMetadata, }: ResizeArgs): Promise<ImageSizesResult>;
39
- export {};
40
- //# sourceMappingURL=imageResizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EAEV,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAA;AAMnB,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAwMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,EACX,YAAY,GACb,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgPxC"}