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,11 @@
1
+ import type { Payload } from '../../../../types/index.js';
2
+ export type LocalizeStatusArgs = {
3
+ collectionSlug?: string;
4
+ db: any;
5
+ globalSlug?: string;
6
+ payload: Payload;
7
+ req?: any;
8
+ sql: any;
9
+ };
10
+ export declare function down(args: LocalizeStatusArgs): Promise<void>;
11
+ //# sourceMappingURL=down.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../../../../src/versions/migrations/localizeStatus/sql/down.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAKzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,GAAG,CAAA;IACP,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6OlE"}
@@ -0,0 +1,213 @@
1
+ import { hasLocalizeStatusEnabled } from '../../../../utilities/getVersionsConfig.js';
2
+ import { toSnakeCase } from '../shared.js';
3
+ export async function down(args) {
4
+ const { collectionSlug, db, globalSlug, payload, sql } = args;
5
+ if (!collectionSlug && !globalSlug) {
6
+ throw new Error('Either collectionSlug or globalSlug must be provided');
7
+ }
8
+ if (collectionSlug && globalSlug) {
9
+ throw new Error('Cannot provide both collectionSlug and globalSlug');
10
+ }
11
+ const entitySlug = collectionSlug || globalSlug;
12
+ // Convert camelCase slugs to snake_case and add version prefix/suffix
13
+ const versionsTable = collectionSlug ? `_${toSnakeCase(collectionSlug)}_v` : `_${toSnakeCase(globalSlug)}_v`;
14
+ const localesTable = `${versionsTable}_locales`;
15
+ if (!payload.config.localization) {
16
+ throw new Error('Localization is not enabled in payload config');
17
+ }
18
+ const entityConfig = collectionSlug ? payload.config.collections.find((c)=>c.slug === collectionSlug) : payload.config.globals.find((g)=>g.slug === globalSlug);
19
+ if (!entityConfig) {
20
+ throw new Error(`${collectionSlug ? 'Collection' : 'Global'} not found: ${collectionSlug || globalSlug}`);
21
+ }
22
+ if (hasLocalizeStatusEnabled(entityConfig)) {
23
+ throw new Error(`${entitySlug} has localizeStatus enabled, cannot run down migration. ` + `Please disable localizeStatus in your config before rolling back this migration.`);
24
+ }
25
+ const defaultLocale = payload.config.localization.defaultLocale;
26
+ payload.logger.info({
27
+ msg: `Rolling back _status localization migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug}`
28
+ });
29
+ // 1. Restore version__status column to main table
30
+ payload.logger.info({
31
+ msg: `Restoring version__status column to ${versionsTable}`
32
+ });
33
+ await db.execute({
34
+ drizzle: db.drizzle,
35
+ sql: sql`
36
+ ALTER TABLE ${sql.identifier(versionsTable)} ADD COLUMN version__status VARCHAR
37
+ `
38
+ });
39
+ // 2. Copy status from default locale back to main table
40
+ payload.logger.info({
41
+ msg: `Copying status from default locale (${defaultLocale}) back to main table`
42
+ });
43
+ await db.execute({
44
+ drizzle: db.drizzle,
45
+ sql: sql`
46
+ UPDATE ${sql.identifier(versionsTable)} pv
47
+ SET version__status = pl.version__status
48
+ FROM ${sql.identifier(localesTable)} pl
49
+ WHERE pv.id = pl._parent_id
50
+ AND pl._locale = ${defaultLocale}
51
+ `
52
+ });
53
+ // 3. Check if there are other localized fields besides version__status
54
+ const columnCheckResult = await db.execute({
55
+ drizzle: db.drizzle,
56
+ sql: sql`
57
+ SELECT COUNT(*) as count
58
+ FROM information_schema.columns
59
+ WHERE table_schema = 'public'
60
+ AND table_name = ${localesTable}
61
+ AND column_name NOT IN ('id', '_locale', '_parent_id', 'version__status')
62
+ `
63
+ });
64
+ const hasOtherLocalizedFields = Number(columnCheckResult.rows[0]?.count) > 0;
65
+ if (!hasOtherLocalizedFields) {
66
+ // SCENARIO 1 ROLLBACK: No other localized fields, drop entire table
67
+ payload.logger.info({
68
+ msg: `Dropping entire locales table: ${localesTable}`
69
+ });
70
+ await db.execute({
71
+ drizzle: db.drizzle,
72
+ sql: sql`DROP TABLE ${sql.identifier(localesTable)} CASCADE`
73
+ });
74
+ } else {
75
+ // SCENARIO 2 ROLLBACK: Other localized fields exist, just drop version__status column
76
+ payload.logger.info({
77
+ msg: `Dropping version__status column from ${localesTable}`
78
+ });
79
+ await db.execute({
80
+ drizzle: db.drizzle,
81
+ sql: sql`
82
+ ALTER TABLE ${sql.identifier(localesTable)} DROP COLUMN version__status
83
+ `
84
+ });
85
+ }
86
+ // 4. Restore _status to main collection/global table if it was dropped
87
+ const mainTable = collectionSlug ? toSnakeCase(collectionSlug) : toSnakeCase(globalSlug);
88
+ const mainLocalesTable = `${mainTable}_locales`;
89
+ // Check if _status exists in the main table
90
+ const statusInMainTableCheck = await db.execute({
91
+ drizzle: db.drizzle,
92
+ sql: sql`
93
+ SELECT EXISTS (
94
+ SELECT FROM information_schema.columns
95
+ WHERE table_schema = 'public'
96
+ AND table_name = ${mainTable}
97
+ AND column_name = '_status'
98
+ ) as exists
99
+ `
100
+ });
101
+ if (!statusInMainTableCheck.rows[0]?.exists) {
102
+ // _status column doesn't exist in main table, need to restore it
103
+ // Check if main collection/global has a locales table
104
+ const mainLocalesTableCheck = await db.execute({
105
+ drizzle: db.drizzle,
106
+ sql: sql`
107
+ SELECT EXISTS (
108
+ SELECT FROM information_schema.tables
109
+ WHERE table_schema = 'public'
110
+ AND table_name = ${mainLocalesTable}
111
+ ) as exists
112
+ `
113
+ });
114
+ if (mainLocalesTableCheck.rows[0]?.exists) {
115
+ // Locales table exists - check if _status is there
116
+ const statusInLocalesCheck = await db.execute({
117
+ drizzle: db.drizzle,
118
+ sql: sql`
119
+ SELECT EXISTS (
120
+ SELECT FROM information_schema.columns
121
+ WHERE table_schema = 'public'
122
+ AND table_name = ${mainLocalesTable}
123
+ AND column_name = '_status'
124
+ ) as exists
125
+ `
126
+ });
127
+ if (statusInLocalesCheck.rows[0]?.exists) {
128
+ // Add _status back to main table
129
+ payload.logger.info({
130
+ msg: `Restoring _status column to ${mainTable}`
131
+ });
132
+ await db.execute({
133
+ drizzle: db.drizzle,
134
+ sql: sql`
135
+ ALTER TABLE ${sql.identifier(mainTable)} ADD COLUMN _status VARCHAR
136
+ `
137
+ });
138
+ // Copy status from default locale back to main table
139
+ await db.execute({
140
+ drizzle: db.drizzle,
141
+ sql: sql`
142
+ UPDATE ${sql.identifier(mainTable)} m
143
+ SET _status = l._status
144
+ FROM ${sql.identifier(mainLocalesTable)} l
145
+ WHERE m.id = l._parent_id
146
+ AND l._locale = ${defaultLocale}
147
+ `
148
+ });
149
+ // Drop _status from locales table
150
+ payload.logger.info({
151
+ msg: `Dropping _status column from ${mainLocalesTable}`
152
+ });
153
+ await db.execute({
154
+ drizzle: db.drizzle,
155
+ sql: sql`
156
+ ALTER TABLE ${sql.identifier(mainLocalesTable)} DROP COLUMN _status
157
+ `
158
+ });
159
+ }
160
+ } else {
161
+ // No locales table exists - this means collection/global has no localized fields
162
+ // Just add _status back to main table with default values
163
+ payload.logger.info({
164
+ msg: `Restoring _status column to ${mainTable} (no locales table exists)`
165
+ });
166
+ await db.execute({
167
+ drizzle: db.drizzle,
168
+ sql: sql`
169
+ ALTER TABLE ${sql.identifier(mainTable)} ADD COLUMN _status VARCHAR
170
+ `
171
+ });
172
+ // Set default status based on latest version status for each document
173
+ // Get all documents in the collection
174
+ const documents = await db.execute({
175
+ drizzle: db.drizzle,
176
+ sql: sql`
177
+ SELECT DISTINCT id
178
+ FROM ${sql.identifier(mainTable)}
179
+ `
180
+ });
181
+ for (const doc of documents.rows){
182
+ // Get latest version status for this document
183
+ const latestVersionStatus = await db.execute({
184
+ drizzle: db.drizzle,
185
+ sql: sql`
186
+ SELECT version__status
187
+ FROM ${sql.identifier(versionsTable)}
188
+ WHERE parent_id = ${doc.id}
189
+ ORDER BY created_at DESC
190
+ LIMIT 1
191
+ `
192
+ });
193
+ const status = latestVersionStatus.rows[0]?.version__status || 'draft';
194
+ await db.execute({
195
+ drizzle: db.drizzle,
196
+ sql: sql`
197
+ UPDATE ${sql.identifier(mainTable)}
198
+ SET _status = ${status}
199
+ WHERE id = ${doc.id}
200
+ `
201
+ });
202
+ }
203
+ payload.logger.info({
204
+ msg: `Restored _status for ${documents.rows.length} documents`
205
+ });
206
+ }
207
+ }
208
+ payload.logger.info({
209
+ msg: 'Rollback completed successfully'
210
+ });
211
+ }
212
+
213
+ //# sourceMappingURL=down.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/versions/migrations/localizeStatus/sql/down.ts"],"sourcesContent":["import type { Payload } from '../../../../types/index.js'\n\nimport { hasLocalizeStatusEnabled } from '../../../../utilities/getVersionsConfig.js'\nimport { toSnakeCase } from '../shared.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 down(args: LocalizeStatusArgs): Promise<void> {\n const { collectionSlug, db, globalSlug, payload, 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 const entityConfig = collectionSlug\n ? payload.config.collections.find((c) => c.slug === collectionSlug)\n : payload.config.globals.find((g) => g.slug === globalSlug!)\n\n if (!entityConfig) {\n throw new Error(\n `${collectionSlug ? 'Collection' : 'Global'} not found: ${collectionSlug || globalSlug}`,\n )\n }\n\n if (hasLocalizeStatusEnabled(entityConfig)) {\n throw new Error(\n `${entitySlug} has localizeStatus enabled, cannot run down migration. ` +\n `Please disable localizeStatus in your config before rolling back this migration.`,\n )\n }\n\n const defaultLocale = payload.config.localization.defaultLocale\n\n payload.logger.info({\n msg: `Rolling back _status localization migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug}`,\n })\n\n // 1. Restore version__status column to main table\n payload.logger.info({ msg: `Restoring version__status column to ${versionsTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(versionsTable)} ADD COLUMN version__status VARCHAR\n `,\n })\n\n // 2. Copy status from default locale back to main table\n payload.logger.info({\n msg: `Copying status from default locale (${defaultLocale}) back to main table`,\n })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(versionsTable)} pv\n SET version__status = pl.version__status\n FROM ${sql.identifier(localesTable)} pl\n WHERE pv.id = pl._parent_id\n AND pl._locale = ${defaultLocale}\n `,\n })\n\n // 3. Check if there are other localized fields besides version__status\n const columnCheckResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT COUNT(*) as count\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${localesTable}\n AND column_name NOT IN ('id', '_locale', '_parent_id', 'version__status')\n `,\n })\n\n const hasOtherLocalizedFields = Number(columnCheckResult.rows[0]?.count) > 0\n\n if (!hasOtherLocalizedFields) {\n // SCENARIO 1 ROLLBACK: No other localized fields, drop entire table\n payload.logger.info({ msg: `Dropping entire locales table: ${localesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`DROP TABLE ${sql.identifier(localesTable)} CASCADE`,\n })\n } else {\n // SCENARIO 2 ROLLBACK: Other localized fields exist, just drop version__status column\n payload.logger.info({ msg: `Dropping version__status column from ${localesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(localesTable)} DROP COLUMN version__status\n `,\n })\n }\n\n // 4. Restore _status to main collection/global table if it was dropped\n const mainTable = collectionSlug ? toSnakeCase(collectionSlug) : toSnakeCase(globalSlug!)\n const mainLocalesTable = `${mainTable}_locales`\n\n // Check if _status exists in the main table\n const statusInMainTableCheck = 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 (!statusInMainTableCheck.rows[0]?.exists) {\n // _status column doesn't exist in main table, need to restore it\n // Check if main collection/global has a locales table\n const mainLocalesTableCheck = 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 (mainLocalesTableCheck.rows[0]?.exists) {\n // Locales table exists - check if _status is there\n const statusInLocalesCheck = 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 (statusInLocalesCheck.rows[0]?.exists) {\n // Add _status back to main table\n payload.logger.info({ msg: `Restoring _status column to ${mainTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainTable)} ADD COLUMN _status VARCHAR\n `,\n })\n\n // Copy status from default locale back to main table\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(mainTable)} m\n SET _status = l._status\n FROM ${sql.identifier(mainLocalesTable)} l\n WHERE m.id = l._parent_id\n AND l._locale = ${defaultLocale}\n `,\n })\n\n // Drop _status from locales table\n payload.logger.info({ msg: `Dropping _status column from ${mainLocalesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainLocalesTable)} DROP COLUMN _status\n `,\n })\n }\n } else {\n // No locales table exists - this means collection/global has no localized fields\n // Just add _status back to main table with default values\n payload.logger.info({\n msg: `Restoring _status column to ${mainTable} (no locales table exists)`,\n })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainTable)} ADD COLUMN _status VARCHAR\n `,\n })\n\n // Set default status based on latest version status for each document\n // Get all documents in the collection\n const documents = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT DISTINCT id\n FROM ${sql.identifier(mainTable)}\n `,\n })\n\n for (const doc of documents.rows) {\n // Get latest version status for this document\n const latestVersionStatus = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT version__status\n FROM ${sql.identifier(versionsTable)}\n WHERE parent_id = ${doc.id}\n ORDER BY created_at DESC\n LIMIT 1\n `,\n })\n\n const status = latestVersionStatus.rows[0]?.version__status || 'draft'\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(mainTable)}\n SET _status = ${status}\n WHERE id = ${doc.id}\n `,\n })\n }\n\n payload.logger.info({ msg: `Restored _status for ${documents.rows.length} documents` })\n }\n }\n\n payload.logger.info({ msg: 'Rollback completed successfully' })\n}\n"],"names":["hasLocalizeStatusEnabled","toSnakeCase","down","args","collectionSlug","db","globalSlug","payload","sql","Error","entitySlug","versionsTable","localesTable","config","localization","entityConfig","collections","find","c","slug","globals","g","defaultLocale","logger","info","msg","execute","drizzle","identifier","columnCheckResult","hasOtherLocalizedFields","Number","rows","count","mainTable","mainLocalesTable","statusInMainTableCheck","exists","mainLocalesTableCheck","statusInLocalesCheck","documents","doc","latestVersionStatus","id","status","version__status","length"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { down } from './down.js';
2
+ import { up } from './up.js';
3
+ export declare const localizeStatus: {
4
+ down: typeof down;
5
+ up: typeof up;
6
+ };
7
+ export type { LocalizeStatusArgs } from './up.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/versions/migrations/localizeStatus/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAE5B,eAAO,MAAM,cAAc;;;CAG1B,CAAA;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { down } from './down.js';
2
+ import { up } from './up.js';
3
+ export const localizeStatus = {
4
+ down,
5
+ up
6
+ };
7
+
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/versions/migrations/localizeStatus/sql/index.ts"],"sourcesContent":["import { down } from './down.js'\nimport { up } from './up.js'\n\nexport const localizeStatus = {\n down,\n up,\n}\n\nexport type { LocalizeStatusArgs } from './up.js'\n"],"names":["down","up","localizeStatus"],"mappings":"AAAA,SAASA,IAAI,QAAQ,YAAW;AAChC,SAASC,EAAE,QAAQ,UAAS;AAE5B,OAAO,MAAMC,iBAAiB;IAC5BF;IACAC;AACF,EAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Payload } from '../../../../types/index.js';
2
+ /**
3
+ * Migrates main collection documents from _status to per-locale status object
4
+ */
5
+ export declare function migrateMainCollectionStatus({ collectionSlug, db, locales, payload, sql, versionsTable, }: {
6
+ collectionSlug: string;
7
+ db: any;
8
+ locales: string[];
9
+ payload: Payload;
10
+ sql: any;
11
+ versionsTable: string;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=migrateMainCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateMainCollection.d.ts","sourceRoot":"","sources":["../../../../../src/versions/migrations/localizeStatus/sql/migrateMainCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIzD;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,EAChD,cAAc,EACd,EAAE,EACF,OAAO,EACP,OAAO,EACP,GAAG,EACH,aAAa,GACd,EAAE;IACD,cAAc,EAAE,MAAM,CAAA;IACtB,EAAE,EAAE,GAAG,CAAA;IACP,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;IACR,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ChB"}
@@ -0,0 +1,51 @@
1
+ import { toSnakeCase } from '../shared.js';
2
+ /**
3
+ * Migrates main collection documents from _status to per-locale status object
4
+ */ export async function migrateMainCollectionStatus({ collectionSlug, db, locales, payload, sql, versionsTable }) {
5
+ const mainTable = toSnakeCase(collectionSlug);
6
+ const mainLocalesTable = `${mainTable}_locales`;
7
+ payload.logger.info({
8
+ msg: `Migrating main collection locales for: ${mainLocalesTable}`
9
+ });
10
+ // Get all documents
11
+ const documents = await db.execute({
12
+ drizzle: db.drizzle,
13
+ sql: sql`
14
+ SELECT DISTINCT id
15
+ FROM ${sql.identifier(mainTable)}
16
+ `
17
+ });
18
+ for (const doc of documents.rows){
19
+ // For each locale, get the latest version status
20
+ for (const locale of locales){
21
+ const latestVersionStatus = await db.execute({
22
+ drizzle: db.drizzle,
23
+ sql: sql`
24
+ SELECT l.version__status as _status
25
+ FROM ${sql.identifier(versionsTable)} v
26
+ JOIN ${sql.raw(`${versionsTable}_locales`)} l ON l._parent_id = v.id
27
+ WHERE v.parent_id = ${doc.id}
28
+ AND l._locale = ${locale}
29
+ ORDER BY v.created_at DESC
30
+ LIMIT 1
31
+ `
32
+ });
33
+ const status = latestVersionStatus.rows[0]?._status || 'draft';
34
+ // Update the main collection's locales table with this status
35
+ await db.execute({
36
+ drizzle: db.drizzle,
37
+ sql: sql`
38
+ UPDATE ${sql.identifier(mainLocalesTable)}
39
+ SET _status = ${status}
40
+ WHERE _parent_id = ${doc.id}
41
+ AND _locale = ${locale}
42
+ `
43
+ });
44
+ }
45
+ }
46
+ payload.logger.info({
47
+ msg: `Migrated ${documents.rows.length} collection documents`
48
+ });
49
+ }
50
+
51
+ //# sourceMappingURL=migrateMainCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/versions/migrations/localizeStatus/sql/migrateMainCollection.ts"],"sourcesContent":["import type { Payload } from '../../../../types/index.js'\n\nimport { toSnakeCase } from '../shared.js'\n\n/**\n * Migrates main collection documents from _status to per-locale status object\n */\nexport async function migrateMainCollectionStatus({\n collectionSlug,\n db,\n locales,\n payload,\n sql,\n versionsTable,\n}: {\n collectionSlug: string\n db: any\n locales: string[]\n payload: Payload\n sql: any\n versionsTable: string\n}): Promise<void> {\n const mainTable = toSnakeCase(collectionSlug)\n const mainLocalesTable = `${mainTable}_locales`\n\n payload.logger.info({ msg: `Migrating main collection locales for: ${mainLocalesTable}` })\n\n // Get all documents\n const documents = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT DISTINCT id\n FROM ${sql.identifier(mainTable)}\n `,\n })\n\n for (const doc of documents.rows) {\n // For each locale, get the latest version status\n for (const locale of locales) {\n const latestVersionStatus = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT l.version__status as _status\n FROM ${sql.identifier(versionsTable)} v\n JOIN ${sql.raw(`${versionsTable}_locales`)} l ON l._parent_id = v.id\n WHERE v.parent_id = ${doc.id}\n AND l._locale = ${locale}\n ORDER BY v.created_at DESC\n LIMIT 1\n `,\n })\n\n const status = latestVersionStatus.rows[0]?._status || 'draft'\n\n // Update the main collection's locales table with this status\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(mainLocalesTable)}\n SET _status = ${status}\n WHERE _parent_id = ${doc.id}\n AND _locale = ${locale}\n `,\n })\n }\n }\n\n payload.logger.info({ msg: `Migrated ${documents.rows.length} collection documents` })\n}\n"],"names":["toSnakeCase","migrateMainCollectionStatus","collectionSlug","db","locales","payload","sql","versionsTable","mainTable","mainLocalesTable","logger","info","msg","documents","execute","drizzle","identifier","doc","rows","locale","latestVersionStatus","raw","id","status","_status","length"],"mappings":"AAEA,SAASA,WAAW,QAAQ,eAAc;AAE1C;;CAEC,GACD,OAAO,eAAeC,4BAA4B,EAChDC,cAAc,EACdC,EAAE,EACFC,OAAO,EACPC,OAAO,EACPC,GAAG,EACHC,aAAa,EAQd;IACC,MAAMC,YAAYR,YAAYE;IAC9B,MAAMO,mBAAmB,GAAGD,UAAU,QAAQ,CAAC;IAE/CH,QAAQK,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK,CAAC,uCAAuC,EAAEH,kBAAkB;IAAC;IAExF,oBAAoB;IACpB,MAAMI,YAAY,MAAMV,GAAGW,OAAO,CAAC;QACjCC,SAASZ,GAAGY,OAAO;QACnBT,KAAKA,GAAG,CAAC;;WAEF,EAAEA,IAAIU,UAAU,CAACR,WAAW;IACnC,CAAC;IACH;IAEA,KAAK,MAAMS,OAAOJ,UAAUK,IAAI,CAAE;QAChC,iDAAiD;QACjD,KAAK,MAAMC,UAAUf,QAAS;YAC5B,MAAMgB,sBAAsB,MAAMjB,GAAGW,OAAO,CAAC;gBAC3CC,SAASZ,GAAGY,OAAO;gBACnBT,KAAKA,GAAG,CAAC;;eAEF,EAAEA,IAAIU,UAAU,CAACT,eAAe;eAChC,EAAED,IAAIe,GAAG,CAAC,GAAGd,cAAc,QAAQ,CAAC,EAAE;8BACvB,EAAEU,IAAIK,EAAE,CAAC;0BACb,EAAEH,OAAO;;;QAG3B,CAAC;YACH;YAEA,MAAMI,SAASH,oBAAoBF,IAAI,CAAC,EAAE,EAAEM,WAAW;YAEvD,8DAA8D;YAC9D,MAAMrB,GAAGW,OAAO,CAAC;gBACfC,SAASZ,GAAGY,OAAO;gBACnBT,KAAKA,GAAG,CAAC;iBACA,EAAEA,IAAIU,UAAU,CAACP,kBAAkB;wBAC5B,EAAEc,OAAO;6BACJ,EAAEN,IAAIK,EAAE,CAAC;wBACd,EAAEH,OAAO;QACzB,CAAC;YACH;QACF;IACF;IAEAd,QAAQK,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK,CAAC,SAAS,EAAEC,UAAUK,IAAI,CAACO,MAAM,CAAC,qBAAqB,CAAC;IAAC;AACtF"}
@@ -0,0 +1,13 @@
1
+ import type { Payload } from '../../../../types/index.js';
2
+ /**
3
+ * Migrates main global document from _status to per-locale status object
4
+ */
5
+ export declare function migrateMainGlobalStatus({ db, globalSlug, locales, payload, sql, versionsTable, }: {
6
+ db: any;
7
+ globalSlug: string;
8
+ locales: string[];
9
+ payload: Payload;
10
+ sql: any;
11
+ versionsTable: string;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=migrateMainGlobal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateMainGlobal.d.ts","sourceRoot":"","sources":["../../../../../src/versions/migrations/localizeStatus/sql/migrateMainGlobal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIzD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,EAC5C,EAAE,EACF,UAAU,EACV,OAAO,EACP,OAAO,EACP,GAAG,EACH,aAAa,GACd,EAAE;IACD,EAAE,EAAE,GAAG,CAAA;IACP,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;IACR,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDhB"}
@@ -0,0 +1,54 @@
1
+ import { toSnakeCase } from '../shared.js';
2
+ /**
3
+ * Migrates main global document from _status to per-locale status object
4
+ */ export async function migrateMainGlobalStatus({ db, globalSlug, locales, payload, sql, versionsTable }) {
5
+ const globalTable = toSnakeCase(globalSlug);
6
+ const globalLocalesTable = `${globalTable}_locales`;
7
+ payload.logger.info({
8
+ msg: `Migrating main global locales for: ${globalLocalesTable}`
9
+ });
10
+ // For each locale, get the latest version status
11
+ for (const locale of locales){
12
+ const latestVersionStatus = await db.execute({
13
+ drizzle: db.drizzle,
14
+ sql: sql`
15
+ SELECT l.version__status as _status
16
+ FROM ${sql.identifier(versionsTable)} v
17
+ JOIN ${sql.raw(`${versionsTable}_locales`)} l ON l._parent_id = v.id
18
+ WHERE l._locale = ${locale}
19
+ ORDER BY v.created_at DESC
20
+ LIMIT 1
21
+ `
22
+ });
23
+ const status = latestVersionStatus.rows[0]?._status || 'draft';
24
+ // Get the global document ID from the globals table
25
+ const globalDoc = await db.execute({
26
+ drizzle: db.drizzle,
27
+ sql: sql`
28
+ SELECT id FROM ${sql.identifier(globalTable)} LIMIT 1
29
+ `
30
+ });
31
+ if (globalDoc.rows.length === 0) {
32
+ payload.logger.warn({
33
+ msg: `No global document found for ${globalSlug}, skipping`
34
+ });
35
+ continue;
36
+ }
37
+ const globalId = globalDoc.rows[0].id;
38
+ // Update the global's locales table with this status
39
+ await db.execute({
40
+ drizzle: db.drizzle,
41
+ sql: sql`
42
+ UPDATE ${sql.identifier(globalLocalesTable)}
43
+ SET _status = ${status}
44
+ WHERE _parent_id = ${globalId}
45
+ AND _locale = ${locale}
46
+ `
47
+ });
48
+ }
49
+ payload.logger.info({
50
+ msg: 'Migrated global document'
51
+ });
52
+ }
53
+
54
+ //# sourceMappingURL=migrateMainGlobal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/versions/migrations/localizeStatus/sql/migrateMainGlobal.ts"],"sourcesContent":["import type { Payload } from '../../../../types/index.js'\n\nimport { toSnakeCase } from '../shared.js'\n\n/**\n * Migrates main global document from _status to per-locale status object\n */\nexport async function migrateMainGlobalStatus({\n db,\n globalSlug,\n locales,\n payload,\n sql,\n versionsTable,\n}: {\n db: any\n globalSlug: string\n locales: string[]\n payload: Payload\n sql: any\n versionsTable: string\n}): Promise<void> {\n const globalTable = toSnakeCase(globalSlug)\n const globalLocalesTable = `${globalTable}_locales`\n\n payload.logger.info({ msg: `Migrating main global locales for: ${globalLocalesTable}` })\n\n // For each locale, get the latest version status\n for (const locale of locales) {\n const latestVersionStatus = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT l.version__status as _status\n FROM ${sql.identifier(versionsTable)} v\n JOIN ${sql.raw(`${versionsTable}_locales`)} l ON l._parent_id = v.id\n WHERE l._locale = ${locale}\n ORDER BY v.created_at DESC\n LIMIT 1\n `,\n })\n\n const status = latestVersionStatus.rows[0]?._status || 'draft'\n\n // Get the global document ID from the globals table\n const globalDoc = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT id FROM ${sql.identifier(globalTable)} LIMIT 1\n `,\n })\n\n if (globalDoc.rows.length === 0) {\n payload.logger.warn({ msg: `No global document found for ${globalSlug}, skipping` })\n continue\n }\n\n const globalId = globalDoc.rows[0].id\n\n // Update the global's locales table with this status\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(globalLocalesTable)}\n SET _status = ${status}\n WHERE _parent_id = ${globalId}\n AND _locale = ${locale}\n `,\n })\n }\n\n payload.logger.info({ msg: 'Migrated global document' })\n}\n"],"names":["toSnakeCase","migrateMainGlobalStatus","db","globalSlug","locales","payload","sql","versionsTable","globalTable","globalLocalesTable","logger","info","msg","locale","latestVersionStatus","execute","drizzle","identifier","raw","status","rows","_status","globalDoc","length","warn","globalId","id"],"mappings":"AAEA,SAASA,WAAW,QAAQ,eAAc;AAE1C;;CAEC,GACD,OAAO,eAAeC,wBAAwB,EAC5CC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,OAAO,EACPC,GAAG,EACHC,aAAa,EAQd;IACC,MAAMC,cAAcR,YAAYG;IAChC,MAAMM,qBAAqB,GAAGD,YAAY,QAAQ,CAAC;IAEnDH,QAAQK,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK,CAAC,mCAAmC,EAAEH,oBAAoB;IAAC;IAEtF,iDAAiD;IACjD,KAAK,MAAMI,UAAUT,QAAS;QAC5B,MAAMU,sBAAsB,MAAMZ,GAAGa,OAAO,CAAC;YAC3CC,SAASd,GAAGc,OAAO;YACnBV,KAAKA,GAAG,CAAC;;aAEF,EAAEA,IAAIW,UAAU,CAACV,eAAe;aAChC,EAAED,IAAIY,GAAG,CAAC,GAAGX,cAAc,QAAQ,CAAC,EAAE;0BACzB,EAAEM,OAAO;;;MAG7B,CAAC;QACH;QAEA,MAAMM,SAASL,oBAAoBM,IAAI,CAAC,EAAE,EAAEC,WAAW;QAEvD,oDAAoD;QACpD,MAAMC,YAAY,MAAMpB,GAAGa,OAAO,CAAC;YACjCC,SAASd,GAAGc,OAAO;YACnBV,KAAKA,GAAG,CAAC;uBACQ,EAAEA,IAAIW,UAAU,CAACT,aAAa;MAC/C,CAAC;QACH;QAEA,IAAIc,UAAUF,IAAI,CAACG,MAAM,KAAK,GAAG;YAC/BlB,QAAQK,MAAM,CAACc,IAAI,CAAC;gBAAEZ,KAAK,CAAC,6BAA6B,EAAET,WAAW,UAAU,CAAC;YAAC;YAClF;QACF;QAEA,MAAMsB,WAAWH,UAAUF,IAAI,CAAC,EAAE,CAACM,EAAE;QAErC,qDAAqD;QACrD,MAAMxB,GAAGa,OAAO,CAAC;YACfC,SAASd,GAAGc,OAAO;YACnBV,KAAKA,GAAG,CAAC;eACA,EAAEA,IAAIW,UAAU,CAACR,oBAAoB;sBAC9B,EAAEU,OAAO;2BACJ,EAAEM,SAAS;sBAChB,EAAEZ,OAAO;MACzB,CAAC;QACH;IACF;IAEAR,QAAQK,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK;IAA2B;AACxD"}
@@ -0,0 +1,11 @@
1
+ import type { Payload } from '../../../../types/index.js';
2
+ export type LocalizeStatusArgs = {
3
+ collectionSlug?: string;
4
+ db: any;
5
+ globalSlug?: string;
6
+ payload: Payload;
7
+ req?: any;
8
+ sql: any;
9
+ };
10
+ export declare function up(args: LocalizeStatusArgs): Promise<void>;
11
+ //# sourceMappingURL=up.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../../../../src/versions/migrations/localizeStatus/sql/up.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAMzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,GAAG,CAAA;IACP,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAED,wBAAsB,EAAE,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuShE"}