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.
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +19 -4
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/endpoints/create.d.ts.map +1 -1
- package/dist/collections/endpoints/create.js +2 -1
- package/dist/collections/endpoints/create.js.map +1 -1
- package/dist/collections/endpoints/update.d.ts.map +1 -1
- package/dist/collections/endpoints/update.js +3 -1
- package/dist/collections/endpoints/update.js.map +1 -1
- package/dist/collections/endpoints/updateByID.d.ts.map +1 -1
- package/dist/collections/endpoints/updateByID.js +4 -2
- package/dist/collections/endpoints/updateByID.js.map +1 -1
- package/dist/collections/operations/create.d.ts +1 -0
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +23 -3
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/local/create.d.ts +4 -0
- package/dist/collections/operations/local/create.d.ts.map +1 -1
- package/dist/collections/operations/local/create.js +2 -1
- package/dist/collections/operations/local/create.js.map +1 -1
- package/dist/collections/operations/local/update.d.ts +12 -0
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js +3 -1
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/update.d.ts +2 -0
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +4 -3
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +2 -0
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +4 -3
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts +4 -3
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +81 -31
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/types.d.ts +16 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/migrations/templates/localizeStatus.d.ts +10 -0
- package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -0
- package/dist/database/migrations/templates/localizeStatus.js +54 -0
- package/dist/database/migrations/templates/localizeStatus.js.map +1 -0
- package/dist/exports/migrations.d.ts +19 -0
- package/dist/exports/migrations.d.ts.map +1 -0
- package/dist/exports/migrations.js +19 -0
- package/dist/exports/migrations.js.map +1 -0
- package/dist/exports/shared.d.ts +1 -1
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +1 -1
- package/dist/exports/shared.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +11 -1
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/endpoints/update.d.ts.map +1 -1
- package/dist/globals/endpoints/update.js +5 -1
- package/dist/globals/endpoints/update.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts +10 -0
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js +4 -2
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/update.d.ts +2 -0
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +63 -15
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/index.bundled.d.ts +102 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts +4 -0
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.js +7 -2
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/dist/utilities/mergeLocalizedData.d.ts +20 -0
- package/dist/utilities/mergeLocalizedData.d.ts.map +1 -0
- package/dist/utilities/mergeLocalizedData.js +277 -0
- package/dist/utilities/mergeLocalizedData.js.map +1 -0
- package/dist/utilities/mergeLocalizedData.spec.js +784 -0
- package/dist/utilities/mergeLocalizedData.spec.js.map +1 -0
- package/dist/utilities/miniChalk.d.ts +15 -0
- package/dist/utilities/miniChalk.d.ts.map +1 -0
- package/dist/utilities/miniChalk.js +34 -0
- package/dist/utilities/miniChalk.js.map +1 -0
- package/dist/utilities/parseParams/index.d.ts +24 -20
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/traverseForLocalizedFields.d.ts +3 -0
- package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -0
- package/dist/utilities/traverseForLocalizedFields.js +41 -0
- package/dist/utilities/traverseForLocalizedFields.js.map +1 -0
- package/dist/versions/baseFields.d.ts +3 -1
- package/dist/versions/baseFields.d.ts.map +1 -1
- package/dist/versions/baseFields.js +16 -15
- package/dist/versions/baseFields.js.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +28 -2
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
- package/dist/versions/migrations/localizeStatus/index.d.ts +12 -0
- package/dist/versions/migrations/localizeStatus/index.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/index.js +33 -0
- package/dist/versions/migrations/localizeStatus/index.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/mongo/down.d.ts +9 -0
- package/dist/versions/migrations/localizeStatus/mongo/down.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/mongo/down.js +112 -0
- package/dist/versions/migrations/localizeStatus/mongo/down.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/mongo/index.d.ts +8 -0
- package/dist/versions/migrations/localizeStatus/mongo/index.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/mongo/index.js +8 -0
- package/dist/versions/migrations/localizeStatus/mongo/index.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/mongo/up.d.ts +9 -0
- package/dist/versions/migrations/localizeStatus/mongo/up.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/mongo/up.js +220 -0
- package/dist/versions/migrations/localizeStatus/mongo/up.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/shared.d.ts +59 -0
- package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/shared.js +122 -0
- package/dist/versions/migrations/localizeStatus/shared.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/down.d.ts +11 -0
- package/dist/versions/migrations/localizeStatus/sql/down.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/down.js +213 -0
- package/dist/versions/migrations/localizeStatus/sql/down.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/index.d.ts +8 -0
- package/dist/versions/migrations/localizeStatus/sql/index.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/index.js +8 -0
- package/dist/versions/migrations/localizeStatus/sql/index.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts +13 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js +51 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainCollection.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts +13 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js +54 -0
- package/dist/versions/migrations/localizeStatus/sql/migrateMainGlobal.js.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/up.d.ts +11 -0
- package/dist/versions/migrations/localizeStatus/sql/up.d.ts.map +1 -0
- package/dist/versions/migrations/localizeStatus/sql/up.js +277 -0
- package/dist/versions/migrations/localizeStatus/sql/up.js.map +1 -0
- package/dist/versions/saveSnapshot.d.ts.map +1 -1
- package/dist/versions/saveSnapshot.js +0 -1
- package/dist/versions/saveSnapshot.js.map +1 -1
- package/dist/versions/saveVersion.js +0 -3
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/types.d.ts +18 -0
- package/dist/versions/types.d.ts.map +1 -1
- package/dist/versions/types.js.map +1 -1
- package/package.json +7 -2
- package/dist/uploads/imageResizer.d.ts +0 -40
- package/dist/uploads/imageResizer.d.ts.map +0 -1
- package/dist/uploads/imageResizer.js +0 -356
- 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":"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"}
|
|
@@ -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,
|
|
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
|
|
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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"}
|
package/dist/versions/types.d.ts
CHANGED
|
@@ -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":"
|
|
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.
|
|
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.
|
|
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"}
|