@payloadcms/drizzle 3.38.0-canary.7 → 3.38.0-internal.6b8eed8

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.
@@ -6,6 +6,14 @@ import { getTransaction } from '../../../utilities/getTransaction.js';
6
6
  import { groupUpSQLStatements } from './groupUpSQLStatements.js';
7
7
  import { migrateRelationships } from './migrateRelationships.js';
8
8
  import { traverseFields } from './traverseFields.js';
9
+ const runStatementGroup = async ({ adapter, db, debug, statements })=>{
10
+ const addColumnsStatement = statements.join('\n');
11
+ if (debug) {
12
+ adapter.payload.logger.info(debug);
13
+ adapter.payload.logger.info(addColumnsStatement);
14
+ }
15
+ await db.execute(sql.raw(addColumnsStatement));
16
+ };
9
17
  /**
10
18
  * Moves upload and relationship columns from the join table and into the tables while moving data
11
19
  * This is done in the following order:
@@ -44,13 +52,50 @@ import { traverseFields } from './traverseFields.js';
44
52
  process.exit(0);
45
53
  }
46
54
  const sqlUpStatements = groupUpSQLStatements(generatedSQL);
47
- const addColumnsStatement = sqlUpStatements.addColumn.join('\n');
48
- if (debug) {
49
- payload.logger.info('CREATING NEW RELATIONSHIP COLUMNS');
50
- payload.logger.info(addColumnsStatement);
51
- }
52
55
  const db = await getTransaction(adapter, req);
53
- await db.execute(sql.raw(addColumnsStatement));
56
+ await runStatementGroup({
57
+ adapter,
58
+ db,
59
+ debug: debug ? 'CREATING TYPES' : null,
60
+ statements: sqlUpStatements.createType
61
+ });
62
+ await runStatementGroup({
63
+ adapter,
64
+ db,
65
+ debug: debug ? 'ALTERING TYPES' : null,
66
+ statements: sqlUpStatements.alterType
67
+ });
68
+ await runStatementGroup({
69
+ adapter,
70
+ db,
71
+ debug: debug ? 'CREATING TABLES' : null,
72
+ statements: sqlUpStatements.createTable
73
+ });
74
+ await runStatementGroup({
75
+ adapter,
76
+ db,
77
+ debug: debug ? 'DISABLING ROW LEVEL SECURITY' : null,
78
+ statements: sqlUpStatements.disableRowSecurity
79
+ });
80
+ await runStatementGroup({
81
+ adapter,
82
+ db,
83
+ debug: debug ? 'CREATING NEW RELATIONSHIP COLUMNS' : null,
84
+ statements: sqlUpStatements.addColumn
85
+ });
86
+ // SET DEFAULTS
87
+ await runStatementGroup({
88
+ adapter,
89
+ db,
90
+ debug: debug ? 'SETTING DEFAULTS' : null,
91
+ statements: sqlUpStatements.setDefault
92
+ });
93
+ await runStatementGroup({
94
+ adapter,
95
+ db,
96
+ debug: debug ? 'CREATING INDEXES' : null,
97
+ statements: sqlUpStatements.createIndex
98
+ });
54
99
  for (const collection of payload.config.collections){
55
100
  const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug));
56
101
  const pathsToQuery = new Set();
@@ -178,40 +223,54 @@ import { traverseFields } from './traverseFields.js';
178
223
  }
179
224
  }
180
225
  // ADD CONSTRAINT
181
- const addConstraintsStatement = sqlUpStatements.addConstraint.join('\n');
182
- if (debug) {
183
- payload.logger.info('ADDING CONSTRAINTS');
184
- payload.logger.info(addConstraintsStatement);
185
- }
186
- await db.execute(sql.raw(addConstraintsStatement));
226
+ await runStatementGroup({
227
+ adapter,
228
+ db,
229
+ debug: debug ? 'ADDING CONSTRAINTS' : null,
230
+ statements: sqlUpStatements.addConstraint
231
+ });
187
232
  // NOT NULL
188
- const notNullStatements = sqlUpStatements.notNull.join('\n');
189
- if (debug) {
190
- payload.logger.info('NOT NULL CONSTRAINTS');
191
- payload.logger.info(notNullStatements);
192
- }
193
- await db.execute(sql.raw(notNullStatements));
233
+ await runStatementGroup({
234
+ adapter,
235
+ db,
236
+ debug: debug ? 'NOT NULL CONSTRAINTS' : null,
237
+ statements: sqlUpStatements.notNull
238
+ });
194
239
  // DROP TABLE
195
- const dropTablesStatement = sqlUpStatements.dropTable.join('\n');
196
- if (debug) {
197
- payload.logger.info('DROPPING TABLES');
198
- payload.logger.info(dropTablesStatement);
199
- }
200
- await db.execute(sql.raw(dropTablesStatement));
240
+ await runStatementGroup({
241
+ adapter,
242
+ db,
243
+ debug: debug ? 'DROPPING TABLES' : null,
244
+ statements: sqlUpStatements.dropTable
245
+ });
246
+ // DROP INDEX
247
+ await runStatementGroup({
248
+ adapter,
249
+ db,
250
+ debug: debug ? 'DROPPING INDEXES' : null,
251
+ statements: sqlUpStatements.dropIndex
252
+ });
201
253
  // DROP CONSTRAINT
202
- const dropConstraintsStatement = sqlUpStatements.dropConstraint.join('\n');
203
- if (debug) {
204
- payload.logger.info('DROPPING CONSTRAINTS');
205
- payload.logger.info(dropConstraintsStatement);
206
- }
207
- await db.execute(sql.raw(dropConstraintsStatement));
254
+ await runStatementGroup({
255
+ adapter,
256
+ db,
257
+ debug: debug ? 'DROPPING CONSTRAINTS' : null,
258
+ statements: sqlUpStatements.dropConstraint
259
+ });
208
260
  // DROP COLUMN
209
- const dropColumnsStatement = sqlUpStatements.dropColumn.join('\n');
210
- if (debug) {
211
- payload.logger.info('DROPPING COLUMNS');
212
- payload.logger.info(dropColumnsStatement);
213
- }
214
- await db.execute(sql.raw(dropColumnsStatement));
261
+ await runStatementGroup({
262
+ adapter,
263
+ db,
264
+ debug: debug ? 'DROPPING COLUMNS' : null,
265
+ statements: sqlUpStatements.dropColumn
266
+ });
267
+ // DROP TYPES
268
+ await runStatementGroup({
269
+ adapter,
270
+ db,
271
+ debug: debug ? 'DROPPING TYPES' : null,
272
+ statements: sqlUpStatements.dropType
273
+ });
215
274
  };
216
275
 
217
276
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport fs from 'fs'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BasePostgresAdapter } from '../../types.js'\nimport type { PathsToQuery } from './types.js'\n\nimport { getTransaction } from '../../../utilities/getTransaction.js'\nimport { groupUpSQLStatements } from './groupUpSQLStatements.js'\nimport { migrateRelationships } from './migrateRelationships.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n debug?: boolean\n payload: Payload\n req?: Partial<PayloadRequest>\n}\n\n/**\n * Moves upload and relationship columns from the join table and into the tables while moving data\n * This is done in the following order:\n * ADD COLUMNs\n * -- manipulate data to move relationships to new columns\n * ADD CONSTRAINTs\n * NOT NULLs\n * DROP TABLEs\n * DROP CONSTRAINTs\n * DROP COLUMNs\n * @param debug\n * @param payload\n * @param req\n */\nexport const migratePostgresV2toV3 = async ({ debug, payload, req }: Args) => {\n const adapter = payload.db as unknown as BasePostgresAdapter\n const dir = payload.db.migrationDir\n\n // get the drizzle migrateUpSQL from drizzle using the last schema\n const { generateDrizzleJson, generateMigration, upSnapshot } = adapter.requireDrizzleKit()\n\n const toSnapshot: Record<string, unknown> = {}\n\n for (const key of Object.keys(adapter.schema).filter(\n (key) => !key.startsWith('payload_locked_documents'),\n )) {\n toSnapshot[key] = adapter.schema[key]\n }\n\n const drizzleJsonAfter = generateDrizzleJson(toSnapshot) as DrizzleSnapshotJSON\n\n // Get the previous migration snapshot\n const previousSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json') && !file.endsWith('relationships_v2_v3.json'))\n .sort()\n .reverse()?.[0]\n\n if (!previousSnapshot) {\n throw new Error(\n `No previous migration schema file found! A prior migration from v2 is required to migrate to v3.`,\n )\n }\n\n let drizzleJsonBefore = JSON.parse(\n fs.readFileSync(`${dir}/${previousSnapshot}`, 'utf8'),\n ) as DrizzleSnapshotJSON\n\n if (upSnapshot && drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upSnapshot(drizzleJsonBefore)\n }\n\n const generatedSQL = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n\n if (!generatedSQL.length) {\n payload.logger.info(`No schema changes needed.`)\n process.exit(0)\n }\n\n const sqlUpStatements = groupUpSQLStatements(generatedSQL)\n\n const addColumnsStatement = sqlUpStatements.addColumn.join('\\n')\n\n if (debug) {\n payload.logger.info('CREATING NEW RELATIONSHIP COLUMNS')\n payload.logger.info(addColumnsStatement)\n }\n\n const db = await getTransaction(adapter, req)\n\n await db.execute(sql.raw(addColumnsStatement))\n\n for (const collection of payload.config.collections) {\n const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug))\n const pathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n collectionSlug: collection.slug,\n columnPrefix: '',\n db,\n disableNotNull: false,\n fields: collection.flattenedFields,\n isVersions: false,\n newTableName: tableName,\n parentTableName: tableName,\n path: '',\n pathsToQuery,\n payload,\n rootTableName: tableName,\n })\n\n await migrateRelationships({\n adapter,\n collectionSlug: collection.slug,\n db,\n debug,\n fields: collection.flattenedFields,\n isVersions: false,\n pathsToQuery,\n payload,\n req,\n tableName,\n })\n\n if (collection.versions) {\n const versionsTableName = adapter.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${adapter.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(payload.config, collection, true)\n const versionPathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n collectionSlug: collection.slug,\n columnPrefix: '',\n db,\n disableNotNull: true,\n fields: versionFields,\n isVersions: true,\n newTableName: versionsTableName,\n parentTableName: versionsTableName,\n path: '',\n pathsToQuery: versionPathsToQuery,\n payload,\n rootTableName: versionsTableName,\n })\n\n await migrateRelationships({\n adapter,\n collectionSlug: collection.slug,\n db,\n debug,\n fields: versionFields,\n isVersions: true,\n pathsToQuery: versionPathsToQuery,\n payload,\n req,\n tableName: versionsTableName,\n })\n }\n }\n\n for (const global of payload.config.globals) {\n const tableName = adapter.tableNameMap.get(toSnakeCase(global.slug))\n\n const pathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n columnPrefix: '',\n db,\n disableNotNull: false,\n fields: global.flattenedFields,\n globalSlug: global.slug,\n isVersions: false,\n newTableName: tableName,\n parentTableName: tableName,\n path: '',\n pathsToQuery,\n payload,\n rootTableName: tableName,\n })\n\n await migrateRelationships({\n adapter,\n db,\n debug,\n fields: global.flattenedFields,\n globalSlug: global.slug,\n isVersions: false,\n pathsToQuery,\n payload,\n req,\n tableName,\n })\n\n if (global.versions) {\n const versionsTableName = adapter.tableNameMap.get(\n `_${toSnakeCase(global.slug)}${adapter.versionsSuffix}`,\n )\n\n const versionFields = buildVersionGlobalFields(payload.config, global, true)\n\n const versionPathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n columnPrefix: '',\n db,\n disableNotNull: true,\n fields: versionFields,\n globalSlug: global.slug,\n isVersions: true,\n newTableName: versionsTableName,\n parentTableName: versionsTableName,\n path: '',\n pathsToQuery: versionPathsToQuery,\n payload,\n rootTableName: versionsTableName,\n })\n\n await migrateRelationships({\n adapter,\n db,\n debug,\n fields: versionFields,\n globalSlug: global.slug,\n isVersions: true,\n pathsToQuery: versionPathsToQuery,\n payload,\n req,\n tableName: versionsTableName,\n })\n }\n }\n\n // ADD CONSTRAINT\n const addConstraintsStatement = sqlUpStatements.addConstraint.join('\\n')\n\n if (debug) {\n payload.logger.info('ADDING CONSTRAINTS')\n payload.logger.info(addConstraintsStatement)\n }\n\n await db.execute(sql.raw(addConstraintsStatement))\n\n // NOT NULL\n const notNullStatements = sqlUpStatements.notNull.join('\\n')\n\n if (debug) {\n payload.logger.info('NOT NULL CONSTRAINTS')\n payload.logger.info(notNullStatements)\n }\n\n await db.execute(sql.raw(notNullStatements))\n\n // DROP TABLE\n const dropTablesStatement = sqlUpStatements.dropTable.join('\\n')\n\n if (debug) {\n payload.logger.info('DROPPING TABLES')\n payload.logger.info(dropTablesStatement)\n }\n\n await db.execute(sql.raw(dropTablesStatement))\n\n // DROP CONSTRAINT\n const dropConstraintsStatement = sqlUpStatements.dropConstraint.join('\\n')\n\n if (debug) {\n payload.logger.info('DROPPING CONSTRAINTS')\n payload.logger.info(dropConstraintsStatement)\n }\n\n await db.execute(sql.raw(dropConstraintsStatement))\n\n // DROP COLUMN\n const dropColumnsStatement = sqlUpStatements.dropColumn.join('\\n')\n\n if (debug) {\n payload.logger.info('DROPPING COLUMNS')\n payload.logger.info(dropColumnsStatement)\n }\n\n await db.execute(sql.raw(dropColumnsStatement))\n}\n"],"names":["sql","fs","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","getTransaction","groupUpSQLStatements","migrateRelationships","traverseFields","migratePostgresV2toV3","debug","payload","req","adapter","db","dir","migrationDir","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","toSnapshot","key","Object","keys","schema","filter","startsWith","drizzleJsonAfter","previousSnapshot","readdirSync","file","endsWith","sort","reverse","Error","drizzleJsonBefore","JSON","parse","readFileSync","version","generatedSQL","length","logger","info","process","exit","sqlUpStatements","addColumnsStatement","addColumn","join","execute","raw","collection","config","collections","tableName","tableNameMap","get","slug","pathsToQuery","Set","collectionSlug","columnPrefix","disableNotNull","fields","flattenedFields","isVersions","newTableName","parentTableName","path","rootTableName","versions","versionsTableName","versionsSuffix","versionFields","versionPathsToQuery","global","globals","globalSlug","addConstraintsStatement","addConstraint","notNullStatements","notNull","dropTablesStatement","dropTable","dropConstraintsStatement","dropConstraint","dropColumnsStatement","dropColumn"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport fs from 'fs'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BasePostgresAdapter } from '../../types.js'\nimport type { PathsToQuery } from './types.js'\n\nimport { getTransaction } from '../../../utilities/getTransaction.js'\nimport { groupUpSQLStatements } from './groupUpSQLStatements.js'\nimport { migrateRelationships } from './migrateRelationships.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n debug?: boolean\n payload: Payload\n req?: Partial<PayloadRequest>\n}\n\nconst runStatementGroup = async ({ adapter, db, debug, statements }) => {\n const addColumnsStatement = statements.join('\\n')\n\n if (debug) {\n adapter.payload.logger.info(debug)\n adapter.payload.logger.info(addColumnsStatement)\n }\n\n await db.execute(sql.raw(addColumnsStatement))\n}\n\n/**\n * Moves upload and relationship columns from the join table and into the tables while moving data\n * This is done in the following order:\n * ADD COLUMNs\n * -- manipulate data to move relationships to new columns\n * ADD CONSTRAINTs\n * NOT NULLs\n * DROP TABLEs\n * DROP CONSTRAINTs\n * DROP COLUMNs\n * @param debug\n * @param payload\n * @param req\n */\nexport const migratePostgresV2toV3 = async ({ debug, payload, req }: Args) => {\n const adapter = payload.db as unknown as BasePostgresAdapter\n const dir = payload.db.migrationDir\n\n // get the drizzle migrateUpSQL from drizzle using the last schema\n const { generateDrizzleJson, generateMigration, upSnapshot } = adapter.requireDrizzleKit()\n\n const toSnapshot: Record<string, unknown> = {}\n\n for (const key of Object.keys(adapter.schema).filter(\n (key) => !key.startsWith('payload_locked_documents'),\n )) {\n toSnapshot[key] = adapter.schema[key]\n }\n\n const drizzleJsonAfter = generateDrizzleJson(toSnapshot) as DrizzleSnapshotJSON\n\n // Get the previous migration snapshot\n const previousSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json') && !file.endsWith('relationships_v2_v3.json'))\n .sort()\n .reverse()?.[0]\n\n if (!previousSnapshot) {\n throw new Error(\n `No previous migration schema file found! A prior migration from v2 is required to migrate to v3.`,\n )\n }\n\n let drizzleJsonBefore = JSON.parse(\n fs.readFileSync(`${dir}/${previousSnapshot}`, 'utf8'),\n ) as DrizzleSnapshotJSON\n\n if (upSnapshot && drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upSnapshot(drizzleJsonBefore)\n }\n\n const generatedSQL = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n\n if (!generatedSQL.length) {\n payload.logger.info(`No schema changes needed.`)\n process.exit(0)\n }\n\n const sqlUpStatements = groupUpSQLStatements(generatedSQL)\n\n const db = await getTransaction(adapter, req)\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING TYPES' : null,\n statements: sqlUpStatements.createType,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'ALTERING TYPES' : null,\n statements: sqlUpStatements.alterType,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING TABLES' : null,\n statements: sqlUpStatements.createTable,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DISABLING ROW LEVEL SECURITY' : null,\n statements: sqlUpStatements.disableRowSecurity,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING NEW RELATIONSHIP COLUMNS' : null,\n statements: sqlUpStatements.addColumn,\n })\n\n // SET DEFAULTS\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'SETTING DEFAULTS' : null,\n statements: sqlUpStatements.setDefault,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING INDEXES' : null,\n statements: sqlUpStatements.createIndex,\n })\n\n for (const collection of payload.config.collections) {\n const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug))\n const pathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n collectionSlug: collection.slug,\n columnPrefix: '',\n db,\n disableNotNull: false,\n fields: collection.flattenedFields,\n isVersions: false,\n newTableName: tableName,\n parentTableName: tableName,\n path: '',\n pathsToQuery,\n payload,\n rootTableName: tableName,\n })\n\n await migrateRelationships({\n adapter,\n collectionSlug: collection.slug,\n db,\n debug,\n fields: collection.flattenedFields,\n isVersions: false,\n pathsToQuery,\n payload,\n req,\n tableName,\n })\n\n if (collection.versions) {\n const versionsTableName = adapter.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${adapter.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(payload.config, collection, true)\n const versionPathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n collectionSlug: collection.slug,\n columnPrefix: '',\n db,\n disableNotNull: true,\n fields: versionFields,\n isVersions: true,\n newTableName: versionsTableName,\n parentTableName: versionsTableName,\n path: '',\n pathsToQuery: versionPathsToQuery,\n payload,\n rootTableName: versionsTableName,\n })\n\n await migrateRelationships({\n adapter,\n collectionSlug: collection.slug,\n db,\n debug,\n fields: versionFields,\n isVersions: true,\n pathsToQuery: versionPathsToQuery,\n payload,\n req,\n tableName: versionsTableName,\n })\n }\n }\n\n for (const global of payload.config.globals) {\n const tableName = adapter.tableNameMap.get(toSnakeCase(global.slug))\n\n const pathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n columnPrefix: '',\n db,\n disableNotNull: false,\n fields: global.flattenedFields,\n globalSlug: global.slug,\n isVersions: false,\n newTableName: tableName,\n parentTableName: tableName,\n path: '',\n pathsToQuery,\n payload,\n rootTableName: tableName,\n })\n\n await migrateRelationships({\n adapter,\n db,\n debug,\n fields: global.flattenedFields,\n globalSlug: global.slug,\n isVersions: false,\n pathsToQuery,\n payload,\n req,\n tableName,\n })\n\n if (global.versions) {\n const versionsTableName = adapter.tableNameMap.get(\n `_${toSnakeCase(global.slug)}${adapter.versionsSuffix}`,\n )\n\n const versionFields = buildVersionGlobalFields(payload.config, global, true)\n\n const versionPathsToQuery: PathsToQuery = new Set()\n\n traverseFields({\n adapter,\n columnPrefix: '',\n db,\n disableNotNull: true,\n fields: versionFields,\n globalSlug: global.slug,\n isVersions: true,\n newTableName: versionsTableName,\n parentTableName: versionsTableName,\n path: '',\n pathsToQuery: versionPathsToQuery,\n payload,\n rootTableName: versionsTableName,\n })\n\n await migrateRelationships({\n adapter,\n db,\n debug,\n fields: versionFields,\n globalSlug: global.slug,\n isVersions: true,\n pathsToQuery: versionPathsToQuery,\n payload,\n req,\n tableName: versionsTableName,\n })\n }\n }\n\n // ADD CONSTRAINT\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'ADDING CONSTRAINTS' : null,\n statements: sqlUpStatements.addConstraint,\n })\n\n // NOT NULL\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'NOT NULL CONSTRAINTS' : null,\n statements: sqlUpStatements.notNull,\n })\n\n // DROP TABLE\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING TABLES' : null,\n statements: sqlUpStatements.dropTable,\n })\n\n // DROP INDEX\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING INDEXES' : null,\n statements: sqlUpStatements.dropIndex,\n })\n\n // DROP CONSTRAINT\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING CONSTRAINTS' : null,\n statements: sqlUpStatements.dropConstraint,\n })\n\n // DROP COLUMN\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING COLUMNS' : null,\n statements: sqlUpStatements.dropColumn,\n })\n\n // DROP TYPES\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING TYPES' : null,\n statements: sqlUpStatements.dropType,\n })\n}\n"],"names":["sql","fs","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","getTransaction","groupUpSQLStatements","migrateRelationships","traverseFields","runStatementGroup","adapter","db","debug","statements","addColumnsStatement","join","payload","logger","info","execute","raw","migratePostgresV2toV3","req","dir","migrationDir","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","toSnapshot","key","Object","keys","schema","filter","startsWith","drizzleJsonAfter","previousSnapshot","readdirSync","file","endsWith","sort","reverse","Error","drizzleJsonBefore","JSON","parse","readFileSync","version","generatedSQL","length","process","exit","sqlUpStatements","createType","alterType","createTable","disableRowSecurity","addColumn","setDefault","createIndex","collection","config","collections","tableName","tableNameMap","get","slug","pathsToQuery","Set","collectionSlug","columnPrefix","disableNotNull","fields","flattenedFields","isVersions","newTableName","parentTableName","path","rootTableName","versions","versionsTableName","versionsSuffix","versionFields","versionPathsToQuery","global","globals","globalSlug","addConstraint","notNull","dropTable","dropIndex","dropConstraint","dropColumn","dropType"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { dequal } from 'dequal';
1
+ import { deepStrictEqual } from 'assert';
2
2
  import prompts from 'prompts';
3
3
  const previousSchema = {
4
4
  localeCodes: null,
@@ -12,16 +12,16 @@ const previousSchema = {
12
12
  */ export const pushDevSchema = async (adapter)=>{
13
13
  if (process.env.PAYLOAD_FORCE_DRIZZLE_PUSH !== 'true') {
14
14
  const localeCodes = adapter.payload.config.localization && adapter.payload.config.localization.localeCodes;
15
- const equal = dequal(previousSchema, {
16
- localeCodes,
17
- rawTables: adapter.rawTables
18
- });
19
- if (equal) {
15
+ try {
16
+ deepStrictEqual(previousSchema, {
17
+ localeCodes,
18
+ rawTables: adapter.rawTables
19
+ });
20
20
  if (adapter.logger) {
21
21
  adapter.payload.logger.info('No changes detected in schema, skipping schema push.');
22
22
  }
23
23
  return;
24
- } else {
24
+ } catch {
25
25
  previousSchema.localeCodes = localeCodes;
26
26
  previousSchema.rawTables = adapter.rawTables;
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/pushDevSchema.ts"],"sourcesContent":["import { dequal } from 'dequal'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from '../postgres/types.js'\nimport type { DrizzleAdapter, PostgresDB, RawTable } from '../types.js'\n\nconst previousSchema: {\n localeCodes: null | string[]\n rawTables: null | Record<string, RawTable>\n} = {\n localeCodes: null,\n rawTables: null,\n}\n\n/**\n * Pushes the development schema to the database using Drizzle.\n *\n * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.\n * @returns {Promise<void>} - A promise that resolves once the schema push is complete.\n */\nexport const pushDevSchema = async (adapter: DrizzleAdapter) => {\n if (process.env.PAYLOAD_FORCE_DRIZZLE_PUSH !== 'true') {\n const localeCodes =\n adapter.payload.config.localization && adapter.payload.config.localization.localeCodes\n\n const equal = dequal(previousSchema, {\n localeCodes,\n rawTables: adapter.rawTables,\n })\n\n if (equal) {\n if (adapter.logger) {\n adapter.payload.logger.info('No changes detected in schema, skipping schema push.')\n }\n\n return\n } else {\n previousSchema.localeCodes = localeCodes\n previousSchema.rawTables = adapter.rawTables\n }\n }\n\n const { pushSchema } = adapter.requireDrizzleKit()\n\n const { extensions = {}, tablesFilter } = adapter as BasePostgresAdapter\n\n // This will prompt if clarifications are needed for Drizzle to push new schema\n const { apply, hasDataLoss, warnings } = await pushSchema(\n adapter.schema,\n adapter.drizzle,\n adapter.schemaName ? [adapter.schemaName] : undefined,\n tablesFilter,\n // Drizzle extensionsFilter supports only postgis for now\n // https://github.com/drizzle-team/drizzle-orm/blob/83daf2d5cf023112de878bc2249ee2c41a2a5b1b/drizzle-kit/src/cli/validations/cli.ts#L26\n extensions.postgis ? ['postgis'] : undefined,\n )\n\n if (warnings.length) {\n let message = `Warnings detected during schema push: \\n\\n${warnings.join('\\n')}\\n\\n`\n\n if (hasDataLoss) {\n message += `DATA LOSS WARNING: Possible data loss detected if schema is pushed.\\n\\n`\n }\n\n message += `Accept warnings and push schema to database?`\n\n const { confirm: acceptWarnings } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message,\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n // Exit if user does not accept warnings.\n // Q: Is this the right type of exit for this interaction?\n if (!acceptWarnings) {\n process.exit(0)\n }\n }\n\n await apply()\n const migrationsTable = adapter.schemaName\n ? `\"${adapter.schemaName}\".\"payload_migrations\"`\n : '\"payload_migrations\"'\n\n const drizzle = adapter.drizzle as PostgresDB\n\n const result = await adapter.execute({\n drizzle,\n raw: `SELECT * FROM ${migrationsTable} WHERE batch = '-1'`,\n })\n\n const devPush = result.rows\n\n if (!devPush.length) {\n // Use drizzle for insert so $defaultFn's are called\n await drizzle.insert(adapter.tables.payload_migrations).values({\n name: 'dev',\n batch: -1,\n })\n } else {\n await adapter.execute({\n drizzle,\n raw: `UPDATE ${migrationsTable} SET updated_at = CURRENT_TIMESTAMP WHERE batch = '-1'`,\n })\n }\n}\n"],"names":["dequal","prompts","previousSchema","localeCodes","rawTables","pushDevSchema","adapter","process","env","PAYLOAD_FORCE_DRIZZLE_PUSH","payload","config","localization","equal","logger","info","pushSchema","requireDrizzleKit","extensions","tablesFilter","apply","hasDataLoss","warnings","schema","drizzle","schemaName","undefined","postgis","length","message","join","confirm","acceptWarnings","name","type","initial","onCancel","exit","migrationsTable","result","execute","raw","devPush","rows","insert","tables","payload_migrations","values","batch"],"mappings":"AAAA,SAASA,MAAM,QAAQ,SAAQ;AAC/B,OAAOC,aAAa,UAAS;AAK7B,MAAMC,iBAGF;IACFC,aAAa;IACbC,WAAW;AACb;AAEA;;;;;CAKC,GACD,OAAO,MAAMC,gBAAgB,OAAOC;IAClC,IAAIC,QAAQC,GAAG,CAACC,0BAA0B,KAAK,QAAQ;QACrD,MAAMN,cACJG,QAAQI,OAAO,CAACC,MAAM,CAACC,YAAY,IAAIN,QAAQI,OAAO,CAACC,MAAM,CAACC,YAAY,CAACT,WAAW;QAExF,MAAMU,QAAQb,OAAOE,gBAAgB;YACnCC;YACAC,WAAWE,QAAQF,SAAS;QAC9B;QAEA,IAAIS,OAAO;YACT,IAAIP,QAAQQ,MAAM,EAAE;gBAClBR,QAAQI,OAAO,CAACI,MAAM,CAACC,IAAI,CAAC;YAC9B;YAEA;QACF,OAAO;YACLb,eAAeC,WAAW,GAAGA;YAC7BD,eAAeE,SAAS,GAAGE,QAAQF,SAAS;QAC9C;IACF;IAEA,MAAM,EAAEY,UAAU,EAAE,GAAGV,QAAQW,iBAAiB;IAEhD,MAAM,EAAEC,aAAa,CAAC,CAAC,EAAEC,YAAY,EAAE,GAAGb;IAE1C,+EAA+E;IAC/E,MAAM,EAAEc,KAAK,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAG,MAAMN,WAC7CV,QAAQiB,MAAM,EACdjB,QAAQkB,OAAO,EACflB,QAAQmB,UAAU,GAAG;QAACnB,QAAQmB,UAAU;KAAC,GAAGC,WAC5CP,cACA,yDAAyD;IACzD,uIAAuI;IACvID,WAAWS,OAAO,GAAG;QAAC;KAAU,GAAGD;IAGrC,IAAIJ,SAASM,MAAM,EAAE;QACnB,IAAIC,UAAU,CAAC,0CAA0C,EAAEP,SAASQ,IAAI,CAAC,MAAM,IAAI,CAAC;QAEpF,IAAIT,aAAa;YACfQ,WAAW,CAAC,uEAAuE,CAAC;QACtF;QAEAA,WAAW,CAAC,4CAA4C,CAAC;QAEzD,MAAM,EAAEE,SAASC,cAAc,EAAE,GAAG,MAAM/B,QACxC;YACEgC,MAAM;YACNC,MAAM;YACNC,SAAS;YACTN;QACF,GACA;YACEO,UAAU;gBACR7B,QAAQ8B,IAAI,CAAC;YACf;QACF;QAGF,yCAAyC;QACzC,0DAA0D;QAC1D,IAAI,CAACL,gBAAgB;YACnBzB,QAAQ8B,IAAI,CAAC;QACf;IACF;IAEA,MAAMjB;IACN,MAAMkB,kBAAkBhC,QAAQmB,UAAU,GACtC,CAAC,CAAC,EAAEnB,QAAQmB,UAAU,CAAC,sBAAsB,CAAC,GAC9C;IAEJ,MAAMD,UAAUlB,QAAQkB,OAAO;IAE/B,MAAMe,SAAS,MAAMjC,QAAQkC,OAAO,CAAC;QACnChB;QACAiB,KAAK,CAAC,cAAc,EAAEH,gBAAgB,mBAAmB,CAAC;IAC5D;IAEA,MAAMI,UAAUH,OAAOI,IAAI;IAE3B,IAAI,CAACD,QAAQd,MAAM,EAAE;QACnB,oDAAoD;QACpD,MAAMJ,QAAQoB,MAAM,CAACtC,QAAQuC,MAAM,CAACC,kBAAkB,EAAEC,MAAM,CAAC;YAC7Dd,MAAM;YACNe,OAAO,CAAC;QACV;IACF,OAAO;QACL,MAAM1C,QAAQkC,OAAO,CAAC;YACpBhB;YACAiB,KAAK,CAAC,OAAO,EAAEH,gBAAgB,sDAAsD,CAAC;QACxF;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/pushDevSchema.ts"],"sourcesContent":["import { deepStrictEqual } from 'assert'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from '../postgres/types.js'\nimport type { DrizzleAdapter, PostgresDB, RawTable } from '../types.js'\n\nconst previousSchema: {\n localeCodes: null | string[]\n rawTables: null | Record<string, RawTable>\n} = {\n localeCodes: null,\n rawTables: null,\n}\n\n/**\n * Pushes the development schema to the database using Drizzle.\n *\n * @param {DrizzleAdapter} adapter - The PostgresAdapter instance connected to the database.\n * @returns {Promise<void>} - A promise that resolves once the schema push is complete.\n */\nexport const pushDevSchema = async (adapter: DrizzleAdapter) => {\n if (process.env.PAYLOAD_FORCE_DRIZZLE_PUSH !== 'true') {\n const localeCodes =\n adapter.payload.config.localization && adapter.payload.config.localization.localeCodes\n\n try {\n deepStrictEqual(previousSchema, {\n localeCodes,\n rawTables: adapter.rawTables,\n })\n\n if (adapter.logger) {\n adapter.payload.logger.info('No changes detected in schema, skipping schema push.')\n }\n\n return\n } catch {\n previousSchema.localeCodes = localeCodes\n previousSchema.rawTables = adapter.rawTables\n }\n }\n\n const { pushSchema } = adapter.requireDrizzleKit()\n\n const { extensions = {}, tablesFilter } = adapter as BasePostgresAdapter\n\n // This will prompt if clarifications are needed for Drizzle to push new schema\n const { apply, hasDataLoss, warnings } = await pushSchema(\n adapter.schema,\n adapter.drizzle,\n adapter.schemaName ? [adapter.schemaName] : undefined,\n tablesFilter,\n // Drizzle extensionsFilter supports only postgis for now\n // https://github.com/drizzle-team/drizzle-orm/blob/83daf2d5cf023112de878bc2249ee2c41a2a5b1b/drizzle-kit/src/cli/validations/cli.ts#L26\n extensions.postgis ? ['postgis'] : undefined,\n )\n\n if (warnings.length) {\n let message = `Warnings detected during schema push: \\n\\n${warnings.join('\\n')}\\n\\n`\n\n if (hasDataLoss) {\n message += `DATA LOSS WARNING: Possible data loss detected if schema is pushed.\\n\\n`\n }\n\n message += `Accept warnings and push schema to database?`\n\n const { confirm: acceptWarnings } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message,\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n // Exit if user does not accept warnings.\n // Q: Is this the right type of exit for this interaction?\n if (!acceptWarnings) {\n process.exit(0)\n }\n }\n\n await apply()\n const migrationsTable = adapter.schemaName\n ? `\"${adapter.schemaName}\".\"payload_migrations\"`\n : '\"payload_migrations\"'\n\n const drizzle = adapter.drizzle as PostgresDB\n\n const result = await adapter.execute({\n drizzle,\n raw: `SELECT * FROM ${migrationsTable} WHERE batch = '-1'`,\n })\n\n const devPush = result.rows\n\n if (!devPush.length) {\n // Use drizzle for insert so $defaultFn's are called\n await drizzle.insert(adapter.tables.payload_migrations).values({\n name: 'dev',\n batch: -1,\n })\n } else {\n await adapter.execute({\n drizzle,\n raw: `UPDATE ${migrationsTable} SET updated_at = CURRENT_TIMESTAMP WHERE batch = '-1'`,\n })\n }\n}\n"],"names":["deepStrictEqual","prompts","previousSchema","localeCodes","rawTables","pushDevSchema","adapter","process","env","PAYLOAD_FORCE_DRIZZLE_PUSH","payload","config","localization","logger","info","pushSchema","requireDrizzleKit","extensions","tablesFilter","apply","hasDataLoss","warnings","schema","drizzle","schemaName","undefined","postgis","length","message","join","confirm","acceptWarnings","name","type","initial","onCancel","exit","migrationsTable","result","execute","raw","devPush","rows","insert","tables","payload_migrations","values","batch"],"mappings":"AAAA,SAASA,eAAe,QAAQ,SAAQ;AACxC,OAAOC,aAAa,UAAS;AAK7B,MAAMC,iBAGF;IACFC,aAAa;IACbC,WAAW;AACb;AAEA;;;;;CAKC,GACD,OAAO,MAAMC,gBAAgB,OAAOC;IAClC,IAAIC,QAAQC,GAAG,CAACC,0BAA0B,KAAK,QAAQ;QACrD,MAAMN,cACJG,QAAQI,OAAO,CAACC,MAAM,CAACC,YAAY,IAAIN,QAAQI,OAAO,CAACC,MAAM,CAACC,YAAY,CAACT,WAAW;QAExF,IAAI;YACFH,gBAAgBE,gBAAgB;gBAC9BC;gBACAC,WAAWE,QAAQF,SAAS;YAC9B;YAEA,IAAIE,QAAQO,MAAM,EAAE;gBAClBP,QAAQI,OAAO,CAACG,MAAM,CAACC,IAAI,CAAC;YAC9B;YAEA;QACF,EAAE,OAAM;YACNZ,eAAeC,WAAW,GAAGA;YAC7BD,eAAeE,SAAS,GAAGE,QAAQF,SAAS;QAC9C;IACF;IAEA,MAAM,EAAEW,UAAU,EAAE,GAAGT,QAAQU,iBAAiB;IAEhD,MAAM,EAAEC,aAAa,CAAC,CAAC,EAAEC,YAAY,EAAE,GAAGZ;IAE1C,+EAA+E;IAC/E,MAAM,EAAEa,KAAK,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAG,MAAMN,WAC7CT,QAAQgB,MAAM,EACdhB,QAAQiB,OAAO,EACfjB,QAAQkB,UAAU,GAAG;QAAClB,QAAQkB,UAAU;KAAC,GAAGC,WAC5CP,cACA,yDAAyD;IACzD,uIAAuI;IACvID,WAAWS,OAAO,GAAG;QAAC;KAAU,GAAGD;IAGrC,IAAIJ,SAASM,MAAM,EAAE;QACnB,IAAIC,UAAU,CAAC,0CAA0C,EAAEP,SAASQ,IAAI,CAAC,MAAM,IAAI,CAAC;QAEpF,IAAIT,aAAa;YACfQ,WAAW,CAAC,uEAAuE,CAAC;QACtF;QAEAA,WAAW,CAAC,4CAA4C,CAAC;QAEzD,MAAM,EAAEE,SAASC,cAAc,EAAE,GAAG,MAAM9B,QACxC;YACE+B,MAAM;YACNC,MAAM;YACNC,SAAS;YACTN;QACF,GACA;YACEO,UAAU;gBACR5B,QAAQ6B,IAAI,CAAC;YACf;QACF;QAGF,yCAAyC;QACzC,0DAA0D;QAC1D,IAAI,CAACL,gBAAgB;YACnBxB,QAAQ6B,IAAI,CAAC;QACf;IACF;IAEA,MAAMjB;IACN,MAAMkB,kBAAkB/B,QAAQkB,UAAU,GACtC,CAAC,CAAC,EAAElB,QAAQkB,UAAU,CAAC,sBAAsB,CAAC,GAC9C;IAEJ,MAAMD,UAAUjB,QAAQiB,OAAO;IAE/B,MAAMe,SAAS,MAAMhC,QAAQiC,OAAO,CAAC;QACnChB;QACAiB,KAAK,CAAC,cAAc,EAAEH,gBAAgB,mBAAmB,CAAC;IAC5D;IAEA,MAAMI,UAAUH,OAAOI,IAAI;IAE3B,IAAI,CAACD,QAAQd,MAAM,EAAE;QACnB,oDAAoD;QACpD,MAAMJ,QAAQoB,MAAM,CAACrC,QAAQsC,MAAM,CAACC,kBAAkB,EAAEC,MAAM,CAAC;YAC7Dd,MAAM;YACNe,OAAO,CAAC;QACV;IACF,OAAO;QACL,MAAMzC,QAAQiC,OAAO,CAAC;YACpBhB;YACAiB,KAAK,CAAC,OAAO,EAAEH,gBAAgB,sDAAsD,CAAC;QACxF;IACF;AACF,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/drizzle",
3
- "version": "3.38.0-canary.7",
3
+ "version": "3.38.0-internal.6b8eed8",
4
4
  "description": "A library of shared functions used by different payload database adapters",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -43,7 +43,6 @@
43
43
  ],
44
44
  "dependencies": {
45
45
  "console-table-printer": "2.12.1",
46
- "dequal": "2.0.3",
47
46
  "drizzle-orm": "0.36.1",
48
47
  "prompts": "2.4.2",
49
48
  "to-snake-case": "1.0.0",
@@ -54,10 +53,10 @@
54
53
  "@types/pg": "8.10.2",
55
54
  "@types/to-snake-case": "1.0.0",
56
55
  "@payloadcms/eslint-config": "3.28.0",
57
- "payload": "3.38.0-canary.7"
56
+ "payload": "3.38.0-internal.6b8eed8"
58
57
  },
59
58
  "peerDependencies": {
60
- "payload": "3.38.0-canary.7"
59
+ "payload": "3.38.0-internal.6b8eed8"
61
60
  },
62
61
  "scripts": {
63
62
  "build": "pnpm build:swc && pnpm build:types",