@payloadcms/drizzle 3.84.1 → 4.0.0-internal.38b7f1d

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/index.d.ts CHANGED
@@ -23,6 +23,7 @@ export { migrateFresh } from './migrateFresh.js';
23
23
  export { migrateRefresh } from './migrateRefresh.js';
24
24
  export { migrateReset } from './migrateReset.js';
25
25
  export { migrateStatus } from './migrateStatus.js';
26
+ export { migrateVersionsEnabled } from './migrateVersionsEnabled.js';
26
27
  export { buildQuery } from './queries/buildQuery.js';
27
28
  export { operatorMap } from './queries/operatorMap.js';
28
29
  export type { Operators } from './queries/operatorMap.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ export { migrateFresh } from './migrateFresh.js';
23
23
  export { migrateRefresh } from './migrateRefresh.js';
24
24
  export { migrateReset } from './migrateReset.js';
25
25
  export { migrateStatus } from './migrateStatus.js';
26
+ export { migrateVersionsEnabled } from './migrateVersionsEnabled.js';
26
27
  export { buildQuery } from './queries/buildQuery.js';
27
28
  export { operatorMap } from './queries/operatorMap.js';
28
29
  export { parseParams } from './queries/parseParams.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { count } from './count.js'\nexport { countGlobalVersions } from './countGlobalVersions.js'\nexport { countVersions } from './countVersions.js'\nexport { create } from './create.js'\nexport { createGlobal } from './createGlobal.js'\nexport { createGlobalVersion } from './createGlobalVersion.js'\nexport { createTableName } from './createTableName.js'\nexport { createVersion } from './createVersion.js'\nexport { deleteMany } from './deleteMany.js'\nexport { deleteOne } from './deleteOne.js'\nexport { deleteVersions } from './deleteVersions.js'\nexport { destroy } from './destroy.js'\nexport { find } from './find.js'\nexport { chainMethods } from './find/chainMethods.js'\nexport { findDistinct } from './findDistinct.js'\nexport { findGlobal } from './findGlobal.js'\nexport { findGlobalVersions } from './findGlobalVersions.js'\nexport { findOne } from './findOne.js'\nexport { findVersions } from './findVersions.js'\nexport { migrate } from './migrate.js'\nexport { migrateDown } from './migrateDown.js'\nexport { migrateFresh } from './migrateFresh.js'\nexport { migrateRefresh } from './migrateRefresh.js'\nexport { migrateReset } from './migrateReset.js'\nexport { migrateStatus } from './migrateStatus.js'\nexport { buildQuery } from './queries/buildQuery.js'\nexport { operatorMap } from './queries/operatorMap.js'\nexport type { Operators } from './queries/operatorMap.js'\nexport { parseParams } from './queries/parseParams.js'\nexport { queryDrafts } from './queryDrafts.js'\nexport { buildDrizzleRelations } from './schema/buildDrizzleRelations.js'\nexport { buildRawSchema } from './schema/buildRawSchema.js'\nexport { beginTransaction } from './transactions/beginTransaction.js'\nexport { commitTransaction } from './transactions/commitTransaction.js'\nexport { rollbackTransaction } from './transactions/rollbackTransaction.js'\nexport type {\n BaseRawColumn,\n BlocksToJsonMigrator,\n BuildDrizzleTable,\n BuildQueryJoinAliases,\n ChainedMethods,\n ColumnToCodeConverter,\n CountDistinct,\n CreateJSONQueryArgs,\n DeleteWhere,\n DrizzleAdapter,\n DrizzleTransaction,\n DropDatabase,\n EnumRawColumn,\n Execute,\n GenericColumn,\n GenericColumns,\n GenericPgColumn,\n GenericRelation,\n GenericTable,\n IDType,\n Insert,\n IntegerRawColumn,\n Migration,\n PostgresDB,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n RequireDrizzleKit,\n SetColumnID,\n SQLiteDB,\n TimestampRawColumn,\n TransactionPg,\n TransactionSQLite,\n UUIDRawColumn,\n VectorRawColumn,\n} from './types.js'\nexport { updateGlobal } from './updateGlobal.js'\nexport { updateGlobalVersion } from './updateGlobalVersion.js'\nexport { updateJobs } from './updateJobs.js'\nexport { updateMany } from './updateMany.js'\nexport { updateOne } from './updateOne.js'\nexport { updateVersion } from './updateVersion.js'\nexport { upsert } from './upsert.js'\nexport { upsertRow } from './upsertRow/index.js'\nexport {\n buildDynamicPredefinedBlocksToJsonMigration,\n createBlocksToJsonMigrator,\n getBlocksToJsonMigrator,\n} from './utilities/blocksToJsonMigrator.js'\nexport { buildCreateMigration } from './utilities/buildCreateMigration.js'\nexport { buildIndexName } from './utilities/buildIndexName.js'\nexport { createSchemaGenerator } from './utilities/createSchemaGenerator.js'\nexport { executeSchemaHooks } from './utilities/executeSchemaHooks.js'\nexport { extendDrizzleTable } from './utilities/extendDrizzleTable.js'\nexport { hasLocalesTable } from './utilities/hasLocalesTable.js'\nexport { pushDevSchema } from './utilities/pushDevSchema.js'\nexport { validateExistingBlockIsIdentical } from './utilities/validateExistingBlockIsIdentical.js'\nimport { findMigrationDir as payloadFindMigrationDir } from 'payload'\n\n/**\n * @deprecated remove in 4.0\n * use\n * ```ts\n * import { findMigrationDir } from 'payload'\n * ```\n */\nexport const findMigrationDir = payloadFindMigrationDir\n"],"names":["count","countGlobalVersions","countVersions","create","createGlobal","createGlobalVersion","createTableName","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","chainMethods","findDistinct","findGlobal","findGlobalVersions","findOne","findVersions","migrate","migrateDown","migrateFresh","migrateRefresh","migrateReset","migrateStatus","buildQuery","operatorMap","parseParams","queryDrafts","buildDrizzleRelations","buildRawSchema","beginTransaction","commitTransaction","rollbackTransaction","updateGlobal","updateGlobalVersion","updateJobs","updateMany","updateOne","updateVersion","upsert","upsertRow","buildDynamicPredefinedBlocksToJsonMigration","createBlocksToJsonMigrator","getBlocksToJsonMigrator","buildCreateMigration","buildIndexName","createSchemaGenerator","executeSchemaHooks","extendDrizzleTable","hasLocalesTable","pushDevSchema","validateExistingBlockIsIdentical","findMigrationDir","payloadFindMigrationDir"],"mappings":"AAAA,SAASA,KAAK,QAAQ,aAAY;AAClC,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,MAAM,QAAQ,cAAa;AACpC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,IAAI,QAAQ,YAAW;AAChC,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,WAAW,QAAQ,2BAA0B;AAEtD,SAASC,WAAW,QAAQ,2BAA0B;AACtD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,qBAAqB,QAAQ,oCAAmC;AACzE,SAASC,cAAc,QAAQ,6BAA4B;AAC3D,SAASC,gBAAgB,QAAQ,qCAAoC;AACrE,SAASC,iBAAiB,QAAQ,sCAAqC;AACvE,SAASC,mBAAmB,QAAQ,wCAAuC;AAyC3E,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,MAAM,QAAQ,cAAa;AACpC,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SACEC,2CAA2C,EAC3CC,0BAA0B,EAC1BC,uBAAuB,QAClB,sCAAqC;AAC5C,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,qBAAqB,QAAQ,uCAAsC;AAC5E,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,eAAe,QAAQ,iCAAgC;AAChE,SAASC,aAAa,QAAQ,+BAA8B;AAC5D,SAASC,gCAAgC,QAAQ,kDAAiD;AAClG,SAASC,oBAAoBC,uBAAuB,QAAQ,UAAS;AAErE;;;;;;CAMC,GACD,OAAO,MAAMD,mBAAmBC,wBAAuB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { count } from './count.js'\nexport { countGlobalVersions } from './countGlobalVersions.js'\nexport { countVersions } from './countVersions.js'\nexport { create } from './create.js'\nexport { createGlobal } from './createGlobal.js'\nexport { createGlobalVersion } from './createGlobalVersion.js'\nexport { createTableName } from './createTableName.js'\nexport { createVersion } from './createVersion.js'\nexport { deleteMany } from './deleteMany.js'\nexport { deleteOne } from './deleteOne.js'\nexport { deleteVersions } from './deleteVersions.js'\nexport { destroy } from './destroy.js'\nexport { find } from './find.js'\nexport { chainMethods } from './find/chainMethods.js'\nexport { findDistinct } from './findDistinct.js'\nexport { findGlobal } from './findGlobal.js'\nexport { findGlobalVersions } from './findGlobalVersions.js'\nexport { findOne } from './findOne.js'\nexport { findVersions } from './findVersions.js'\nexport { migrate } from './migrate.js'\nexport { migrateDown } from './migrateDown.js'\nexport { migrateFresh } from './migrateFresh.js'\nexport { migrateRefresh } from './migrateRefresh.js'\nexport { migrateReset } from './migrateReset.js'\nexport { migrateStatus } from './migrateStatus.js'\nexport { migrateVersionsEnabled } from './migrateVersionsEnabled.js'\nexport { buildQuery } from './queries/buildQuery.js'\nexport { operatorMap } from './queries/operatorMap.js'\nexport type { Operators } from './queries/operatorMap.js'\nexport { parseParams } from './queries/parseParams.js'\nexport { queryDrafts } from './queryDrafts.js'\nexport { buildDrizzleRelations } from './schema/buildDrizzleRelations.js'\nexport { buildRawSchema } from './schema/buildRawSchema.js'\nexport { beginTransaction } from './transactions/beginTransaction.js'\nexport { commitTransaction } from './transactions/commitTransaction.js'\nexport { rollbackTransaction } from './transactions/rollbackTransaction.js'\nexport type {\n BaseRawColumn,\n BlocksToJsonMigrator,\n BuildDrizzleTable,\n BuildQueryJoinAliases,\n ChainedMethods,\n ColumnToCodeConverter,\n CountDistinct,\n CreateJSONQueryArgs,\n DeleteWhere,\n DrizzleAdapter,\n DrizzleTransaction,\n DropDatabase,\n EnumRawColumn,\n Execute,\n GenericColumn,\n GenericColumns,\n GenericPgColumn,\n GenericRelation,\n GenericTable,\n IDType,\n Insert,\n IntegerRawColumn,\n Migration,\n PostgresDB,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n RequireDrizzleKit,\n SetColumnID,\n SQLiteDB,\n TimestampRawColumn,\n TransactionPg,\n TransactionSQLite,\n UUIDRawColumn,\n VectorRawColumn,\n} from './types.js'\nexport { updateGlobal } from './updateGlobal.js'\nexport { updateGlobalVersion } from './updateGlobalVersion.js'\nexport { updateJobs } from './updateJobs.js'\nexport { updateMany } from './updateMany.js'\nexport { updateOne } from './updateOne.js'\nexport { updateVersion } from './updateVersion.js'\nexport { upsert } from './upsert.js'\nexport { upsertRow } from './upsertRow/index.js'\nexport {\n buildDynamicPredefinedBlocksToJsonMigration,\n createBlocksToJsonMigrator,\n getBlocksToJsonMigrator,\n} from './utilities/blocksToJsonMigrator.js'\nexport { buildCreateMigration } from './utilities/buildCreateMigration.js'\nexport { buildIndexName } from './utilities/buildIndexName.js'\nexport { createSchemaGenerator } from './utilities/createSchemaGenerator.js'\nexport { executeSchemaHooks } from './utilities/executeSchemaHooks.js'\nexport { extendDrizzleTable } from './utilities/extendDrizzleTable.js'\nexport { hasLocalesTable } from './utilities/hasLocalesTable.js'\nexport { pushDevSchema } from './utilities/pushDevSchema.js'\nexport { validateExistingBlockIsIdentical } from './utilities/validateExistingBlockIsIdentical.js'\nimport { findMigrationDir as payloadFindMigrationDir } from 'payload'\n\n/**\n * @deprecated remove in 4.0\n * use\n * ```ts\n * import { findMigrationDir } from 'payload'\n * ```\n */\nexport const findMigrationDir = payloadFindMigrationDir\n"],"names":["count","countGlobalVersions","countVersions","create","createGlobal","createGlobalVersion","createTableName","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","chainMethods","findDistinct","findGlobal","findGlobalVersions","findOne","findVersions","migrate","migrateDown","migrateFresh","migrateRefresh","migrateReset","migrateStatus","migrateVersionsEnabled","buildQuery","operatorMap","parseParams","queryDrafts","buildDrizzleRelations","buildRawSchema","beginTransaction","commitTransaction","rollbackTransaction","updateGlobal","updateGlobalVersion","updateJobs","updateMany","updateOne","updateVersion","upsert","upsertRow","buildDynamicPredefinedBlocksToJsonMigration","createBlocksToJsonMigrator","getBlocksToJsonMigrator","buildCreateMigration","buildIndexName","createSchemaGenerator","executeSchemaHooks","extendDrizzleTable","hasLocalesTable","pushDevSchema","validateExistingBlockIsIdentical","findMigrationDir","payloadFindMigrationDir"],"mappings":"AAAA,SAASA,KAAK,QAAQ,aAAY;AAClC,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,MAAM,QAAQ,cAAa;AACpC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,IAAI,QAAQ,YAAW;AAChC,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,WAAW,QAAQ,2BAA0B;AAEtD,SAASC,WAAW,QAAQ,2BAA0B;AACtD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,qBAAqB,QAAQ,oCAAmC;AACzE,SAASC,cAAc,QAAQ,6BAA4B;AAC3D,SAASC,gBAAgB,QAAQ,qCAAoC;AACrE,SAASC,iBAAiB,QAAQ,sCAAqC;AACvE,SAASC,mBAAmB,QAAQ,wCAAuC;AAyC3E,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,MAAM,QAAQ,cAAa;AACpC,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SACEC,2CAA2C,EAC3CC,0BAA0B,EAC1BC,uBAAuB,QAClB,sCAAqC;AAC5C,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,qBAAqB,QAAQ,uCAAsC;AAC5E,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,eAAe,QAAQ,iCAAgC;AAChE,SAASC,aAAa,QAAQ,+BAA8B;AAC5D,SAASC,gCAAgC,QAAQ,kDAAiD;AAClG,SAASC,oBAAoBC,uBAAuB,QAAQ,UAAS;AAErE;;;;;;CAMC,GACD,OAAO,MAAMD,mBAAmBC,wBAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAA;AAM3D,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,SAAS,CAsE7C,CAAA"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAA;AAM3D,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,SAAS,CAyE7C,CAAA"}
package/dist/migrate.js CHANGED
@@ -1,4 +1,4 @@
1
- import { commitTransaction, createLocalReq, initTransaction, killTransaction, readMigrationFiles } from 'payload';
1
+ import { commitTransaction, createLocalReq, initTransaction, killTransaction, readMigrationFiles, serializeConfig, writeConfigState } from 'payload';
2
2
  import prompts from 'prompts';
3
3
  import { getTransaction } from './utilities/getTransaction.js';
4
4
  import { migrationTableExists } from './utilities/migrationTableExists.js';
@@ -58,6 +58,8 @@ export const migrate = async function migrate(args) {
58
58
  }
59
59
  await runMigrationFile(payload, migration, newBatch);
60
60
  }
61
+ // Update config snapshot after all migrations succeed
62
+ await writeConfigState(payload.db.migrationDir, serializeConfig(payload.config));
61
63
  };
62
64
  async function runMigrationFile(payload, migration, batch) {
63
65
  const start = Date.now();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/migrate.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport {\n commitTransaction,\n createLocalReq,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\nimport prompts from 'prompts'\n\nimport type { DrizzleAdapter, Migration } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\nimport { parseError } from './utilities/parseError.js'\n\nexport const migrate: DrizzleAdapter['migrate'] = async function migrate(\n this: DrizzleAdapter,\n args,\n): Promise<void> {\n const { payload } = this\n const migrationFiles = args?.migrations || (await readMigrationFiles({ payload }))\n\n if (!migrationFiles.length) {\n payload.logger.info({ msg: 'No migrations to run.' })\n return\n }\n\n if ('createExtensions' in this && typeof this.createExtensions === 'function') {\n await this.createExtensions()\n }\n\n let latestBatch = 0\n let migrationsInDB = []\n\n const hasMigrationTable = await migrationTableExists(this)\n\n if (hasMigrationTable) {\n ;({ docs: migrationsInDB } = await payload.find({\n collection: 'payload-migrations',\n limit: 0,\n sort: '-name',\n }))\n\n if (migrationsInDB.find((m) => m.batch === -1)) {\n const { confirm: runMigrations } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message:\n \"It looks like you've run Payload in dev mode, meaning you've dynamically pushed changes to your database.\\n\\n\" +\n \"If you'd like to run migrations, data loss will occur. Would you like to proceed?\",\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!runMigrations) {\n process.exit(0)\n }\n // ignore the dev migration so that the latest batch number increments correctly\n migrationsInDB = migrationsInDB.filter((m) => m.batch !== -1)\n }\n\n if (Number(migrationsInDB?.[0]?.batch) > 0) {\n latestBatch = Number(migrationsInDB[0]?.batch)\n }\n }\n\n const newBatch = latestBatch + 1\n\n // Execute 'up' function for each migration sequentially\n for (const migration of migrationFiles) {\n const alreadyRan = migrationsInDB.find((existing) => existing.name === migration.name)\n\n // If already ran, skip\n if (alreadyRan) {\n continue\n }\n\n await runMigrationFile(payload, migration, newBatch)\n }\n}\n\nasync function runMigrationFile(payload: Payload, migration: Migration, batch: number) {\n const start = Date.now()\n const req = await createLocalReq({}, payload)\n\n payload.logger.info({ msg: `Migrating: ${migration.name}` })\n\n try {\n await initTransaction(req)\n const db = await getTransaction(payload.db as DrizzleAdapter, req)\n await migration.up({ db, payload, req })\n payload.logger.info({ msg: `Migrated: ${migration.name} (${Date.now() - start}ms)` })\n await payload.create({\n collection: 'payload-migrations',\n data: {\n name: migration.name,\n batch,\n },\n req,\n })\n await commitTransaction(req)\n } catch (err: unknown) {\n await killTransaction(req)\n payload.logger.error({\n err,\n msg: parseError(err, `Error running migration ${migration.name}`),\n })\n process.exit(1)\n }\n}\n"],"names":["commitTransaction","createLocalReq","initTransaction","killTransaction","readMigrationFiles","prompts","getTransaction","migrationTableExists","parseError","migrate","args","payload","migrationFiles","migrations","length","logger","info","msg","createExtensions","latestBatch","migrationsInDB","hasMigrationTable","docs","find","collection","limit","sort","m","batch","confirm","runMigrations","name","type","initial","message","onCancel","process","exit","filter","Number","newBatch","migration","alreadyRan","existing","runMigrationFile","start","Date","now","req","db","up","create","data","err","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/migrate.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport {\n commitTransaction,\n createLocalReq,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n serializeConfig,\n writeConfigState,\n} from 'payload'\nimport prompts from 'prompts'\n\nimport type { DrizzleAdapter, Migration } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\nimport { parseError } from './utilities/parseError.js'\n\nexport const migrate: DrizzleAdapter['migrate'] = async function migrate(\n this: DrizzleAdapter,\n args,\n): Promise<void> {\n const { payload } = this\n const migrationFiles = args?.migrations || (await readMigrationFiles({ payload }))\n\n if (!migrationFiles.length) {\n payload.logger.info({ msg: 'No migrations to run.' })\n return\n }\n\n if ('createExtensions' in this && typeof this.createExtensions === 'function') {\n await this.createExtensions()\n }\n\n let latestBatch = 0\n let migrationsInDB = []\n\n const hasMigrationTable = await migrationTableExists(this)\n\n if (hasMigrationTable) {\n ;({ docs: migrationsInDB } = await payload.find({\n collection: 'payload-migrations',\n limit: 0,\n sort: '-name',\n }))\n\n if (migrationsInDB.find((m) => m.batch === -1)) {\n const { confirm: runMigrations } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message:\n \"It looks like you've run Payload in dev mode, meaning you've dynamically pushed changes to your database.\\n\\n\" +\n \"If you'd like to run migrations, data loss will occur. Would you like to proceed?\",\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!runMigrations) {\n process.exit(0)\n }\n // ignore the dev migration so that the latest batch number increments correctly\n migrationsInDB = migrationsInDB.filter((m) => m.batch !== -1)\n }\n\n if (Number(migrationsInDB?.[0]?.batch) > 0) {\n latestBatch = Number(migrationsInDB[0]?.batch)\n }\n }\n\n const newBatch = latestBatch + 1\n\n // Execute 'up' function for each migration sequentially\n for (const migration of migrationFiles) {\n const alreadyRan = migrationsInDB.find((existing) => existing.name === migration.name)\n\n // If already ran, skip\n if (alreadyRan) {\n continue\n }\n\n await runMigrationFile(payload, migration, newBatch)\n }\n\n // Update config snapshot after all migrations succeed\n await writeConfigState(payload.db.migrationDir, serializeConfig(payload.config))\n}\n\nasync function runMigrationFile(payload: Payload, migration: Migration, batch: number) {\n const start = Date.now()\n const req = await createLocalReq({}, payload)\n\n payload.logger.info({ msg: `Migrating: ${migration.name}` })\n\n try {\n await initTransaction(req)\n const db = await getTransaction(payload.db as DrizzleAdapter, req)\n await migration.up({ db, payload, req })\n payload.logger.info({ msg: `Migrated: ${migration.name} (${Date.now() - start}ms)` })\n await payload.create({\n collection: 'payload-migrations',\n data: {\n name: migration.name,\n batch,\n },\n req,\n })\n await commitTransaction(req)\n } catch (err: unknown) {\n await killTransaction(req)\n payload.logger.error({\n err,\n msg: parseError(err, `Error running migration ${migration.name}`),\n })\n process.exit(1)\n }\n}\n"],"names":["commitTransaction","createLocalReq","initTransaction","killTransaction","readMigrationFiles","serializeConfig","writeConfigState","prompts","getTransaction","migrationTableExists","parseError","migrate","args","payload","migrationFiles","migrations","length","logger","info","msg","createExtensions","latestBatch","migrationsInDB","hasMigrationTable","docs","find","collection","limit","sort","m","batch","confirm","runMigrations","name","type","initial","message","onCancel","process","exit","filter","Number","newBatch","migration","alreadyRan","existing","runMigrationFile","db","migrationDir","config","start","Date","now","req","up","create","data","err","error"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PayloadRequest } from 'payload';
2
+ import type { DrizzleAdapter } from './types.js';
3
+ export declare function migrateVersionsEnabled(this: DrizzleAdapter, args: {
4
+ entity: 'collection' | 'global';
5
+ initialStatus: 'draft' | 'published';
6
+ req: PayloadRequest;
7
+ slug: string;
8
+ }): Promise<void>;
9
+ //# sourceMappingURL=migrateVersionsEnabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateVersionsEnabled.d.ts","sourceRoot":"","sources":["../src/migrateVersionsEnabled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAIhD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE;IACJ,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC/B,aAAa,EAAE,OAAO,GAAG,WAAW,CAAA;IACpC,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,GACA,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -0,0 +1,52 @@
1
+ import { batchTransform } from 'payload/migrations';
2
+ const BATCH_SIZE = 1000;
3
+ export async function migrateVersionsEnabled(args) {
4
+ const { slug, entity, initialStatus, req } = args;
5
+ const { payload } = this;
6
+ payload.logger.info(`[config-migration] Creating version entries for existing ${entity} "${slug}" with _status: ${initialStatus}`);
7
+ if (entity === 'collection') {
8
+ await batchTransform({
9
+ batchSize: BATCH_SIZE,
10
+ fetcher: ({ limit, page })=>payload.db.find({
11
+ collection: slug,
12
+ limit,
13
+ page,
14
+ pagination: true,
15
+ req
16
+ }),
17
+ transform: async (doc)=>{
18
+ await payload.db.createVersion({
19
+ autosave: false,
20
+ collectionSlug: slug,
21
+ createdAt: doc.createdAt ?? new Date().toISOString(),
22
+ parent: doc.id,
23
+ req,
24
+ updatedAt: doc.updatedAt ?? new Date().toISOString(),
25
+ versionData: {
26
+ ...doc,
27
+ _status: initialStatus
28
+ }
29
+ });
30
+ }
31
+ });
32
+ } else {
33
+ const globalDoc = await payload.db.findGlobal({
34
+ slug,
35
+ req
36
+ });
37
+ await payload.db.createGlobalVersion({
38
+ autosave: false,
39
+ createdAt: globalDoc.createdAt ?? new Date().toISOString(),
40
+ globalSlug: slug,
41
+ req,
42
+ updatedAt: globalDoc.updatedAt ?? new Date().toISOString(),
43
+ versionData: {
44
+ ...globalDoc,
45
+ _status: initialStatus
46
+ }
47
+ });
48
+ }
49
+ payload.logger.info(`[config-migration] Done creating version entries for "${slug}"`);
50
+ }
51
+
52
+ //# sourceMappingURL=migrateVersionsEnabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/migrateVersionsEnabled.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { batchTransform } from 'payload/migrations'\n\nimport type { DrizzleAdapter } from './types.js'\n\nconst BATCH_SIZE = 1000\n\nexport async function migrateVersionsEnabled(\n this: DrizzleAdapter,\n args: {\n entity: 'collection' | 'global'\n initialStatus: 'draft' | 'published'\n req: PayloadRequest\n slug: string\n },\n): Promise<void> {\n const { slug, entity, initialStatus, req } = args\n const { payload } = this\n\n payload.logger.info(\n `[config-migration] Creating version entries for existing ${entity} \"${slug}\" with _status: ${initialStatus}`,\n )\n\n if (entity === 'collection') {\n await batchTransform({\n batchSize: BATCH_SIZE,\n fetcher: ({ limit, page }: { limit: number; page: number }) =>\n payload.db.find({ collection: slug, limit, page, pagination: true, req }),\n transform: async (doc: any) => {\n await payload.db.createVersion({\n autosave: false,\n collectionSlug: slug as any,\n createdAt: doc.createdAt ?? new Date().toISOString(),\n parent: doc.id,\n req,\n updatedAt: doc.updatedAt ?? new Date().toISOString(),\n versionData: { ...doc, _status: initialStatus },\n })\n },\n })\n } else {\n const globalDoc = await payload.db.findGlobal({ slug, req })\n await payload.db.createGlobalVersion({\n autosave: false,\n createdAt: globalDoc.createdAt ?? new Date().toISOString(),\n globalSlug: slug as any,\n req,\n updatedAt: globalDoc.updatedAt ?? new Date().toISOString(),\n versionData: { ...globalDoc, _status: initialStatus },\n })\n }\n\n payload.logger.info(`[config-migration] Done creating version entries for \"${slug}\"`)\n}\n"],"names":["batchTransform","BATCH_SIZE","migrateVersionsEnabled","args","slug","entity","initialStatus","req","payload","logger","info","batchSize","fetcher","limit","page","db","find","collection","pagination","transform","doc","createVersion","autosave","collectionSlug","createdAt","Date","toISOString","parent","id","updatedAt","versionData","_status","globalDoc","findGlobal","createGlobalVersion","globalSlug"],"mappings":"AAEA,SAASA,cAAc,QAAQ,qBAAoB;AAInD,MAAMC,aAAa;AAEnB,OAAO,eAAeC,uBAEpBC,IAKC;IAED,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,aAAa,EAAEC,GAAG,EAAE,GAAGJ;IAC7C,MAAM,EAAEK,OAAO,EAAE,GAAG,IAAI;IAExBA,QAAQC,MAAM,CAACC,IAAI,CACjB,CAAC,yDAAyD,EAAEL,OAAO,EAAE,EAAED,KAAK,gBAAgB,EAAEE,eAAe;IAG/G,IAAID,WAAW,cAAc;QAC3B,MAAML,eAAe;YACnBW,WAAWV;YACXW,SAAS,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAmC,GACxDN,QAAQO,EAAE,CAACC,IAAI,CAAC;oBAAEC,YAAYb;oBAAMS;oBAAOC;oBAAMI,YAAY;oBAAMX;gBAAI;YACzEY,WAAW,OAAOC;gBAChB,MAAMZ,QAAQO,EAAE,CAACM,aAAa,CAAC;oBAC7BC,UAAU;oBACVC,gBAAgBnB;oBAChBoB,WAAWJ,IAAII,SAAS,IAAI,IAAIC,OAAOC,WAAW;oBAClDC,QAAQP,IAAIQ,EAAE;oBACdrB;oBACAsB,WAAWT,IAAIS,SAAS,IAAI,IAAIJ,OAAOC,WAAW;oBAClDI,aAAa;wBAAE,GAAGV,GAAG;wBAAEW,SAASzB;oBAAc;gBAChD;YACF;QACF;IACF,OAAO;QACL,MAAM0B,YAAY,MAAMxB,QAAQO,EAAE,CAACkB,UAAU,CAAC;YAAE7B;YAAMG;QAAI;QAC1D,MAAMC,QAAQO,EAAE,CAACmB,mBAAmB,CAAC;YACnCZ,UAAU;YACVE,WAAWQ,UAAUR,SAAS,IAAI,IAAIC,OAAOC,WAAW;YACxDS,YAAY/B;YACZG;YACAsB,WAAWG,UAAUH,SAAS,IAAI,IAAIJ,OAAOC,WAAW;YACxDI,aAAa;gBAAE,GAAGE,SAAS;gBAAED,SAASzB;YAAc;QACtD;IACF;IAEAE,QAAQC,MAAM,CAACC,IAAI,CAAC,CAAC,sDAAsD,EAAEN,KAAK,CAAC,CAAC;AACtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/queries/buildOrderBy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK9E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,+GAWtB,IAAI,KAAG,gBAAgB,CAAC,SAAS,CA2EnC,CAAA"}
1
+ {"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/queries/buildOrderBy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK9E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,+GAWtB,IAAI,KAAG,gBAAgB,CAAC,SAAS,CAgFnC,CAAA"}
@@ -59,7 +59,12 @@ import { getTableColumnFromPath } from './getTableColumnFromPath.js';
59
59
  column: aliasTable && tableName === getNameFromDrizzleTable(sortTable) ? aliasTable[sortTableColumnName] : sortTable[sortTableColumnName],
60
60
  order
61
61
  });
62
- selectFields[sortTableColumnName] = sortTable[sortTableColumnName];
62
+ // Only add to selectFields if not already present (avoid duplicates from getTableColumnFromPath)
63
+ const columnToAdd = sortTable[sortTableColumnName];
64
+ const alreadyExists = Object.values(selectFields).some((col)=>col === columnToAdd);
65
+ if (!alreadyExists) {
66
+ selectFields[sortTableColumnName] = columnToAdd;
67
+ }
63
68
  }
64
69
  } catch (_) {
65
70
  // continue
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Sort } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n rawSort?: SQL\n selectFields: Record<string, GenericColumn>\n sort?: Sort\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (!sort) {\n if (createdAt) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (createdAt) {\n fallbackSort = '-createdAt'\n }\n\n if (!(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))) {\n sort.push(fallbackSort)\n }\n\n for (const sortItem of sort) {\n let sortProperty: string\n let sortDirection: 'asc' | 'desc'\n if (sortItem[0] === '-') {\n sortProperty = sortItem.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = sortItem\n sortDirection = 'asc'\n }\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortProperty,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n let order = sortDirection === 'asc' ? asc : desc\n\n if (rawSort) {\n order = () => rawSort\n }\n\n orderBy.push({\n column:\n aliasTable && tableName === getNameFromDrizzleTable(sortTable)\n ? aliasTable[sortTableColumnName]\n : sortTable[sortTableColumnName],\n order,\n })\n\n selectFields[sortTableColumnName] = sortTable[sortTableColumnName]\n }\n } catch (_) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getNameFromDrizzleTable","getTableColumnFromPath","buildOrderBy","adapter","aliasTable","fields","joins","locale","parentIsLocalized","rawSort","selectFields","sort","tableName","orderBy","createdAt","tables","fallbackSort","includes","replace","push","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","split","value","order","column","_"],"mappings":"AAGA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,sBAAsB,QAAQ,8BAA6B;AAepE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,MAAMC,YAAYX,QAAQY,MAAM,CAACH,UAAU,EAAEE;IAE7C,IAAI,CAACH,MAAM;QACT,IAAIG,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,sIAAsI;IACtI,qFAAqF;IACrF,IAAIK,eAAe;IAEnB,IAAIF,WAAW;QACbE,eAAe;IACjB;IAEA,IAAI,CAAEL,CAAAA,KAAKM,QAAQ,CAACD,iBAAiBL,KAAKM,QAAQ,CAACD,aAAaE,OAAO,CAAC,KAAK,IAAG,GAAI;QAClFP,KAAKQ,IAAI,CAACH;IACZ;IAEA,KAAK,MAAMI,YAAYT,KAAM;QAC3B,IAAIU;QACJ,IAAIC;QACJ,IAAIF,QAAQ,CAAC,EAAE,KAAK,KAAK;YACvBC,eAAeD,SAASG,SAAS,CAAC;YAClCD,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAI;YACF,MAAM,EAAEE,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAG1B,uBAAuB;gBACnFE;gBACAyB,gBAAgBP;gBAChBhB;gBACAC;gBACAC;gBACAC;gBACAqB,cAAcR,aAAaH,OAAO,CAAC,OAAO,KAAKY,KAAK,CAAC;gBACrDpB;gBACAE;gBACAmB,OAAOV;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpC,IAAIO,QAAQV,kBAAkB,QAAQxB,MAAMC;gBAE5C,IAAIU,SAAS;oBACXuB,QAAQ,IAAMvB;gBAChB;gBAEAI,QAAQM,IAAI,CAAC;oBACXc,QACE7B,cAAcQ,cAAcZ,wBAAwB2B,aAChDvB,UAAU,CAACqB,oBAAoB,GAC/BE,SAAS,CAACF,oBAAoB;oBACpCO;gBACF;gBAEAtB,YAAY,CAACe,oBAAoB,GAAGE,SAAS,CAACF,oBAAoB;YACpE;QACF,EAAE,OAAOS,GAAG;QACV,WAAW;QACb;IACF;IAEA,OAAOrB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { SQL, Table } from 'drizzle-orm'\nimport type { FlattenedField, Sort } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n aliasTable?: Table\n fields: FlattenedField[]\n joins: BuildQueryJoinAliases\n locale?: string\n parentIsLocalized: boolean\n rawSort?: SQL\n selectFields: Record<string, GenericColumn>\n sort?: Sort\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n aliasTable,\n fields,\n joins,\n locale,\n parentIsLocalized,\n rawSort,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = []\n\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (!sort) {\n if (createdAt) {\n sort = '-createdAt'\n } else {\n sort = '-id'\n }\n }\n\n if (typeof sort === 'string') {\n sort = [sort]\n }\n\n // In the case of Mongo, when sorting by a field that is not unique, the results are not guaranteed to be in the same order each time.\n // So we add a fallback sort to ensure that the results are always in the same order.\n let fallbackSort = '-id'\n\n if (createdAt) {\n fallbackSort = '-createdAt'\n }\n\n if (!(sort.includes(fallbackSort) || sort.includes(fallbackSort.replace('-', '')))) {\n sort.push(fallbackSort)\n }\n\n for (const sortItem of sort) {\n let sortProperty: string\n let sortDirection: 'asc' | 'desc'\n if (sortItem[0] === '-') {\n sortProperty = sortItem.substring(1)\n sortDirection = 'desc'\n } else {\n sortProperty = sortItem\n sortDirection = 'asc'\n }\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortProperty,\n fields,\n joins,\n locale,\n parentIsLocalized,\n pathSegments: sortProperty.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortProperty,\n })\n if (sortTable?.[sortTableColumnName]) {\n let order = sortDirection === 'asc' ? asc : desc\n\n if (rawSort) {\n order = () => rawSort\n }\n\n orderBy.push({\n column:\n aliasTable && tableName === getNameFromDrizzleTable(sortTable)\n ? aliasTable[sortTableColumnName]\n : sortTable[sortTableColumnName],\n order,\n })\n\n // Only add to selectFields if not already present (avoid duplicates from getTableColumnFromPath)\n const columnToAdd = sortTable[sortTableColumnName]\n const alreadyExists = Object.values(selectFields).some((col) => col === columnToAdd)\n if (!alreadyExists) {\n selectFields[sortTableColumnName] = columnToAdd\n }\n }\n } catch (_) {\n // continue\n }\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getNameFromDrizzleTable","getTableColumnFromPath","buildOrderBy","adapter","aliasTable","fields","joins","locale","parentIsLocalized","rawSort","selectFields","sort","tableName","orderBy","createdAt","tables","fallbackSort","includes","replace","push","sortItem","sortProperty","sortDirection","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","split","value","order","column","columnToAdd","alreadyExists","Object","values","some","col","_"],"mappings":"AAGA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,sBAAsB,QAAQ,8BAA6B;AAepE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC,EAAE;IAE/C,MAAMC,YAAYX,QAAQY,MAAM,CAACH,UAAU,EAAEE;IAE7C,IAAI,CAACH,MAAM;QACT,IAAIG,WAAW;YACbH,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5BA,OAAO;YAACA;SAAK;IACf;IAEA,sIAAsI;IACtI,qFAAqF;IACrF,IAAIK,eAAe;IAEnB,IAAIF,WAAW;QACbE,eAAe;IACjB;IAEA,IAAI,CAAEL,CAAAA,KAAKM,QAAQ,CAACD,iBAAiBL,KAAKM,QAAQ,CAACD,aAAaE,OAAO,CAAC,KAAK,IAAG,GAAI;QAClFP,KAAKQ,IAAI,CAACH;IACZ;IAEA,KAAK,MAAMI,YAAYT,KAAM;QAC3B,IAAIU;QACJ,IAAIC;QACJ,IAAIF,QAAQ,CAAC,EAAE,KAAK,KAAK;YACvBC,eAAeD,SAASG,SAAS,CAAC;YAClCD,gBAAgB;QAClB,OAAO;YACLD,eAAeD;YACfE,gBAAgB;QAClB;QACA,IAAI;YACF,MAAM,EAAEE,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAG1B,uBAAuB;gBACnFE;gBACAyB,gBAAgBP;gBAChBhB;gBACAC;gBACAC;gBACAC;gBACAqB,cAAcR,aAAaH,OAAO,CAAC,OAAO,KAAKY,KAAK,CAAC;gBACrDpB;gBACAE;gBACAmB,OAAOV;YACT;YACA,IAAIM,WAAW,CAACF,oBAAoB,EAAE;gBACpC,IAAIO,QAAQV,kBAAkB,QAAQxB,MAAMC;gBAE5C,IAAIU,SAAS;oBACXuB,QAAQ,IAAMvB;gBAChB;gBAEAI,QAAQM,IAAI,CAAC;oBACXc,QACE7B,cAAcQ,cAAcZ,wBAAwB2B,aAChDvB,UAAU,CAACqB,oBAAoB,GAC/BE,SAAS,CAACF,oBAAoB;oBACpCO;gBACF;gBAEA,iGAAiG;gBACjG,MAAME,cAAcP,SAAS,CAACF,oBAAoB;gBAClD,MAAMU,gBAAgBC,OAAOC,MAAM,CAAC3B,cAAc4B,IAAI,CAAC,CAACC,MAAQA,QAAQL;gBACxE,IAAI,CAACC,eAAe;oBAClBzB,YAAY,CAACe,oBAAoB,GAAGS;gBACtC;YACF;QACF,EAAE,OAAOM,GAAG;QACV,WAAW;QACb;IACF;IAEA,OAAO3B;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildCreateMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildCreateMigration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,oBAAoB,qDAI9B;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,eA6IH,CAAA"}
1
+ {"version":3,"file":"buildCreateMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildCreateMigration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AAoBvD,eAAO,MAAM,oBAAoB,qDAI9B;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,eA4KH,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { getPredefinedMigration, writeMigrationIndex } from 'payload';
3
+ import { bootstrapConfigState, diffConfig, generateDataMigrationCode, getPredefinedMigration, readConfigState, resolvePrompts, serializeConfig, writeMigrationIndex } from 'payload';
4
4
  import prompts from 'prompts';
5
5
  import { getMigrationTemplate } from './getMigrationTemplate.js';
6
6
  export const buildCreateMigration = ({ executeMethod, filename, sanitizeStatements })=>{
@@ -46,6 +46,28 @@ export const buildCreateMigration = ({ executeMethod, filename, sanitizeStatemen
46
46
  imports = dynamicResult.imports;
47
47
  }
48
48
  }
49
+ // Config-diff: compute data migrations before DDL to inform empty-migration check
50
+ const prevSnapshot = await readConfigState(dir);
51
+ const nextSnapshot = serializeConfig(payload.config);
52
+ let dataUpCode = '';
53
+ let dataDownCode = '';
54
+ if (prevSnapshot !== null) {
55
+ const changes = diffConfig(prevSnapshot, nextSnapshot);
56
+ if (changes.length > 0) {
57
+ const { shouldAbort } = await resolvePrompts(changes);
58
+ if (shouldAbort) {
59
+ process.exit(1);
60
+ }
61
+ const localization = payload.config.localization || null;
62
+ const { downCode, upCode } = generateDataMigrationCode(changes, {
63
+ defaultLocale: localization?.defaultLocale
64
+ });
65
+ dataUpCode = upCode;
66
+ dataDownCode = downCode;
67
+ }
68
+ } else {
69
+ await bootstrapConfigState(payload, dir);
70
+ }
49
71
  let drizzleJsonBefore = this.defaultDrizzleSnapshot;
50
72
  if (this.schemaName) {
51
73
  drizzleJsonBefore.schemas = {
@@ -79,7 +101,7 @@ export const buildCreateMigration = ({ executeMethod, filename, sanitizeStatemen
79
101
  statements: sqlStatementsDown
80
102
  });
81
103
  }
82
- if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {
104
+ if (!upSQL?.length && !downSQL?.length && !dataUpCode && !forceAcceptWarning) {
83
105
  if (skipEmpty) {
84
106
  process.exit(0);
85
107
  }
@@ -100,6 +122,12 @@ export const buildCreateMigration = ({ executeMethod, filename, sanitizeStatemen
100
122
  // write schema
101
123
  fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2));
102
124
  }
125
+ if (dataUpCode) {
126
+ upSQL = upSQL ? `${upSQL}\n${dataUpCode}` : dataUpCode;
127
+ }
128
+ if (dataDownCode) {
129
+ downSQL = downSQL ? `${downSQL}\n${dataDownCode}` : dataDownCode;
130
+ }
103
131
  const data = getMigrationTemplate({
104
132
  downSQL: downSQL || ` // Migration code`,
105
133
  imports,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildCreateMigration.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { CreateMigration, Payload } from 'payload'\n\nimport fs from 'fs'\nimport path from 'path'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nexport const buildCreateMigration = ({\n executeMethod,\n filename,\n sanitizeStatements,\n}: {\n executeMethod: string\n filename: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): CreateMigration => {\n const dirname = path.dirname(filename)\n return async function createMigration(\n this: DrizzleAdapter,\n { file, forceAcceptWarning, migrationName, payload, skipEmpty },\n ) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n\n const { generateDrizzleJson, generateMigration, upSnapshot } = this.requireDrizzleKit()\n\n const drizzleJsonAfter = await generateDrizzleJson(this.schema)\n\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n\n const predefinedMigration = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n })\n\n imports = predefinedMigration.imports\n downSQL = predefinedMigration.downSQL\n upSQL = predefinedMigration.upSQL\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n if (typeof predefinedMigration.dynamic === 'function') {\n const dynamicResult = await predefinedMigration.dynamic({ filePath, payload })\n\n if (dynamicResult.upSQL) {\n upSQL = dynamicResult.upSQL\n }\n\n if (dynamicResult.downSQL) {\n downSQL = dynamicResult.downSQL\n }\n\n if (dynamicResult.imports) {\n imports = dynamicResult.imports\n }\n }\n\n let drizzleJsonBefore = this.defaultDrizzleSnapshot as DrizzleSnapshotJSON\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (upSnapshot && drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upSnapshot(drizzleJsonBefore)\n }\n }\n\n payload.logger.info('Starting migration: generating UP statements...')\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n\n payload.logger.info('Migration UP complete. Generating DOWN statements...')\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n\n payload.logger.info('Migration DOWN statements generation complete.')\n\n const sqlExecute = `await db.${executeMethod}(` + 'sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsUp })\n }\n if (sqlStatementsDown?.length) {\n downSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsDown })\n }\n\n if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {\n if (skipEmpty) {\n process.exit(0)\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!shouldCreateBlankMigration) {\n process.exit(0)\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n const data = getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n })\n\n const fullPath = `${filePath}.ts`\n\n // write migration\n fs.writeFileSync(fullPath, data)\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${fullPath}` })\n }\n}\n"],"names":["fs","path","getPredefinedMigration","writeMigrationIndex","prompts","getMigrationTemplate","buildCreateMigration","executeMethod","filename","sanitizeStatements","dirname","createMigration","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","predefinedMigration","timestamp","name","slice","join","fileName","filePath","dynamic","dynamicResult","drizzleJsonBefore","defaultDrizzleSnapshot","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","logger","info","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","statements","process","exit","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","data","packageName","fullPath","migrationsDir","msg"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/buildCreateMigration.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { CreateMigration, Payload } from 'payload'\n\nimport fs from 'fs'\nimport path from 'path'\nimport {\n bootstrapConfigState,\n diffConfig,\n generateDataMigrationCode,\n getPredefinedMigration,\n readConfigState,\n resolvePrompts,\n serializeConfig,\n writeMigrationIndex,\n} from 'payload'\nimport prompts from 'prompts'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nexport const buildCreateMigration = ({\n executeMethod,\n filename,\n sanitizeStatements,\n}: {\n executeMethod: string\n filename: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): CreateMigration => {\n const dirname = path.dirname(filename)\n return async function createMigration(\n this: DrizzleAdapter,\n { file, forceAcceptWarning, migrationName, payload, skipEmpty },\n ) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n\n const { generateDrizzleJson, generateMigration, upSnapshot } = this.requireDrizzleKit()\n\n const drizzleJsonAfter = await generateDrizzleJson(this.schema)\n\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n\n const predefinedMigration = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n })\n\n imports = predefinedMigration.imports\n downSQL = predefinedMigration.downSQL\n upSQL = predefinedMigration.upSQL\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n if (typeof predefinedMigration.dynamic === 'function') {\n const dynamicResult = await predefinedMigration.dynamic({ filePath, payload })\n\n if (dynamicResult.upSQL) {\n upSQL = dynamicResult.upSQL\n }\n\n if (dynamicResult.downSQL) {\n downSQL = dynamicResult.downSQL\n }\n\n if (dynamicResult.imports) {\n imports = dynamicResult.imports\n }\n }\n\n // Config-diff: compute data migrations before DDL to inform empty-migration check\n const prevSnapshot = await readConfigState(dir)\n const nextSnapshot = serializeConfig(payload.config)\n let dataUpCode = ''\n let dataDownCode = ''\n\n if (prevSnapshot !== null) {\n const changes = diffConfig(prevSnapshot, nextSnapshot)\n if (changes.length > 0) {\n const { shouldAbort } = await resolvePrompts(changes)\n if (shouldAbort) {\n process.exit(1)\n }\n const localization = payload.config.localization || null\n const { downCode, upCode } = generateDataMigrationCode(changes, {\n defaultLocale: localization?.defaultLocale,\n })\n dataUpCode = upCode\n dataDownCode = downCode\n }\n } else {\n await bootstrapConfigState(payload, dir)\n }\n\n let drizzleJsonBefore = this.defaultDrizzleSnapshot as DrizzleSnapshotJSON\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (upSnapshot && drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upSnapshot(drizzleJsonBefore)\n }\n }\n\n payload.logger.info('Starting migration: generating UP statements...')\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n\n payload.logger.info('Migration UP complete. Generating DOWN statements...')\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n\n payload.logger.info('Migration DOWN statements generation complete.')\n\n const sqlExecute = `await db.${executeMethod}(` + 'sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsUp })\n }\n if (sqlStatementsDown?.length) {\n downSQL = sanitizeStatements({ sqlExecute, statements: sqlStatementsDown })\n }\n\n if (!upSQL?.length && !downSQL?.length && !dataUpCode && !forceAcceptWarning) {\n if (skipEmpty) {\n process.exit(0)\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!shouldCreateBlankMigration) {\n process.exit(0)\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n if (dataUpCode) {\n upSQL = upSQL ? `${upSQL}\\n${dataUpCode}` : dataUpCode\n }\n if (dataDownCode) {\n downSQL = downSQL ? `${downSQL}\\n${dataDownCode}` : dataDownCode\n }\n\n const data = getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n })\n\n const fullPath = `${filePath}.ts`\n\n // write migration\n fs.writeFileSync(fullPath, data)\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${fullPath}` })\n }\n}\n"],"names":["fs","path","bootstrapConfigState","diffConfig","generateDataMigrationCode","getPredefinedMigration","readConfigState","resolvePrompts","serializeConfig","writeMigrationIndex","prompts","getMigrationTemplate","buildCreateMigration","executeMethod","filename","sanitizeStatements","dirname","createMigration","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","predefinedMigration","timestamp","name","slice","join","fileName","filePath","dynamic","dynamicResult","prevSnapshot","nextSnapshot","config","dataUpCode","dataDownCode","changes","length","shouldAbort","process","exit","localization","downCode","upCode","defaultLocale","drizzleJsonBefore","defaultDrizzleSnapshot","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","logger","info","sqlStatementsUp","sqlStatementsDown","sqlExecute","statements","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","data","packageName","fullPath","migrationsDir","msg"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pushDevSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/pushDevSchema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAA;AAUvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,YAAmB,cAAc,kBA6F1D,CAAA"}
1
+ {"version":3,"file":"pushDevSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/pushDevSchema.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAA;AAUvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,YAAmB,cAAc,kBAgH1D,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { dequal } from 'dequal';
2
+ import { diffConfig, readConfigState, serializeConfig } from 'payload';
2
3
  import prompts from 'prompts';
3
4
  const previousSchema = {
4
5
  localeCodes: null,
@@ -59,6 +60,19 @@ const previousSchema = {
59
60
  }
60
61
  }
61
62
  await apply();
63
+ // Warn if config changes require a data migration that dev push cannot handle
64
+ const prevSnapshot = await readConfigState(adapter.migrationDir);
65
+ if (prevSnapshot !== null) {
66
+ const changes = diffConfig(prevSnapshot, serializeConfig(adapter.payload.config));
67
+ const dataChanges = changes.filter((c)=>![
68
+ 'autosave_enabled',
69
+ 'locale_added',
70
+ 'versions_enabled'
71
+ ].includes(c.type));
72
+ if (dataChanges.length > 0) {
73
+ adapter.payload.logger.warn(`[payload] Config changes detected that require a data migration:\n` + dataChanges.map((c)=>` • ${c.type} on "${c.slug ?? c.locale}"`).join('\n') + `\nRun "payload migrate:create" and "payload migrate" to apply.`);
74
+ }
75
+ }
62
76
  const migrationsTable = adapter.schemaName ? `"${adapter.schemaName}"."payload_migrations"` : '"payload_migrations"';
63
77
  const drizzle = adapter.drizzle;
64
78
  const result = await adapter.execute({
@@ -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 { dequal } from 'dequal'\nimport { diffConfig, readConfigState, serializeConfig } from 'payload'\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\n // Warn if config changes require a data migration that dev push cannot handle\n const prevSnapshot = await readConfigState(adapter.migrationDir)\n if (prevSnapshot !== null) {\n const changes = diffConfig(prevSnapshot, serializeConfig(adapter.payload.config))\n const dataChanges = changes.filter(\n (c) => !['autosave_enabled', 'locale_added', 'versions_enabled'].includes(c.type),\n )\n if (dataChanges.length > 0) {\n adapter.payload.logger.warn(\n `[payload] Config changes detected that require a data migration:\\n` +\n dataChanges\n .map((c) => ` • ${c.type} on \"${(c as any).slug ?? (c as any).locale}\"`)\n .join('\\n') +\n `\\nRun \"payload migrate:create\" and \"payload migrate\" to apply.`,\n )\n }\n }\n\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","diffConfig","readConfigState","serializeConfig","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","prevSnapshot","migrationDir","changes","dataChanges","filter","c","includes","warn","map","slug","locale","migrationsTable","result","execute","raw","devPush","rows","insert","tables","payload_migrations","values","batch"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/drizzle",
3
- "version": "3.84.1",
3
+ "version": "4.0.0-internal.38b7f1d",
4
4
  "description": "A library of shared functions used by different payload database adapters",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -53,17 +53,17 @@
53
53
  "drizzle-orm": "0.45.2",
54
54
  "prompts": "2.4.2",
55
55
  "to-snake-case": "1.0.0",
56
- "uuid": "11.1.0"
56
+ "uuid": "14.0.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@libsql/client": "0.14.0",
60
60
  "@types/pg": "8.20.0",
61
61
  "@types/to-snake-case": "1.0.0",
62
62
  "@payloadcms/eslint-config": "3.28.0",
63
- "payload": "3.84.1"
63
+ "payload": "4.0.0-internal.38b7f1d"
64
64
  },
65
65
  "peerDependencies": {
66
- "payload": "3.84.1"
66
+ "payload": "4.0.0-internal.38b7f1d"
67
67
  },
68
68
  "scripts": {
69
69
  "build": "pnpm build:swc && pnpm build:types",