@payloadcms/drizzle 3.37.0-canary.4 → 3.37.0-internal.294c1ac

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.
@@ -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,CAmE7C,CAAA"}
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"}
package/dist/migrate.js CHANGED
@@ -27,23 +27,25 @@ export const migrate = async function migrate(args) {
27
27
  limit: 0,
28
28
  sort: '-name'
29
29
  }));
30
- if (Number(migrationsInDB?.[0]?.batch) > 0) {
31
- latestBatch = Number(migrationsInDB[0]?.batch);
32
- }
33
- }
34
- if (migrationsInDB.find((m)=>m.batch === -1)) {
35
- const { confirm: runMigrations } = await prompts({
36
- name: 'confirm',
37
- type: 'confirm',
38
- initial: false,
39
- message: "It looks like you've run Payload in dev mode, meaning you've dynamically pushed changes to your database.\n\n" + "If you'd like to run migrations, data loss will occur. Would you like to proceed?"
40
- }, {
41
- onCancel: ()=>{
30
+ if (migrationsInDB.find((m)=>m.batch === -1)) {
31
+ const { confirm: runMigrations } = await prompts({
32
+ name: 'confirm',
33
+ type: 'confirm',
34
+ initial: false,
35
+ message: "It looks like you've run Payload in dev mode, meaning you've dynamically pushed changes to your database.\n\n" + "If you'd like to run migrations, data loss will occur. Would you like to proceed?"
36
+ }, {
37
+ onCancel: ()=>{
38
+ process.exit(0);
39
+ }
40
+ });
41
+ if (!runMigrations) {
42
42
  process.exit(0);
43
43
  }
44
- });
45
- if (!runMigrations) {
46
- process.exit(0);
44
+ // ignore the dev migration so that the latest batch number increments correctly
45
+ migrationsInDB = migrationsInDB.filter((m)=>m.batch !== -1);
46
+ }
47
+ if (Number(migrationsInDB?.[0]?.batch) > 0) {
48
+ latestBatch = Number(migrationsInDB[0]?.batch);
47
49
  }
48
50
  }
49
51
  const newBatch = latestBatch + 1;
@@ -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 if (Number(migrationsInDB?.[0]?.batch) > 0) {\n latestBatch = Number(migrationsInDB[0]?.batch)\n }\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 }\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","Number","batch","m","confirm","runMigrations","name","type","initial","message","onCancel","process","exit","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} 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":"AAEA,SACEA,iBAAiB,EACjBC,cAAc,EACdC,eAAe,EACfC,eAAe,EACfC,kBAAkB,QACb,UAAS;AAChB,OAAOC,aAAa,UAAS;AAI7B,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,UAAU,QAAQ,4BAA2B;AAEtD,OAAO,MAAMC,UAAqC,eAAeA,QAE/DC,IAAI;IAEJ,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiBF,MAAMG,cAAe,MAAMT,mBAAmB;QAAEO;IAAQ;IAE/E,IAAI,CAACC,eAAeE,MAAM,EAAE;QAC1BH,QAAQI,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAAwB;QACnD;IACF;IAEA,IAAI,sBAAsB,IAAI,IAAI,OAAO,IAAI,CAACC,gBAAgB,KAAK,YAAY;QAC7E,MAAM,IAAI,CAACA,gBAAgB;IAC7B;IAEA,IAAIC,cAAc;IAClB,IAAIC,iBAAiB,EAAE;IAEvB,MAAMC,oBAAoB,MAAMd,qBAAqB,IAAI;IAEzD,IAAIc,mBAAmB;;QACnB,CAAA,EAAEC,MAAMF,cAAc,EAAE,GAAG,MAAMT,QAAQY,IAAI,CAAC;YAC9CC,YAAY;YACZC,OAAO;YACPC,MAAM;QACR,EAAC;QAED,IAAIN,eAAeG,IAAI,CAAC,CAACI,IAAMA,EAAEC,KAAK,KAAK,CAAC,IAAI;YAC9C,MAAM,EAAEC,SAASC,aAAa,EAAE,GAAG,MAAMzB,QACvC;gBACE0B,MAAM;gBACNC,MAAM;gBACNC,SAAS;gBACTC,SACE,kHACA;YACJ,GACA;gBACEC,UAAU;oBACRC,QAAQC,IAAI,CAAC;gBACf;YACF;YAGF,IAAI,CAACP,eAAe;gBAClBM,QAAQC,IAAI,CAAC;YACf;YACA,gFAAgF;YAChFjB,iBAAiBA,eAAekB,MAAM,CAAC,CAACX,IAAMA,EAAEC,KAAK,KAAK,CAAC;QAC7D;QAEA,IAAIW,OAAOnB,gBAAgB,CAAC,EAAE,EAAEQ,SAAS,GAAG;YAC1CT,cAAcoB,OAAOnB,cAAc,CAAC,EAAE,EAAEQ;QAC1C;IACF;IAEA,MAAMY,WAAWrB,cAAc;IAE/B,wDAAwD;IACxD,KAAK,MAAMsB,aAAa7B,eAAgB;QACtC,MAAM8B,aAAatB,eAAeG,IAAI,CAAC,CAACoB,WAAaA,SAASZ,IAAI,KAAKU,UAAUV,IAAI;QAErF,uBAAuB;QACvB,IAAIW,YAAY;YACd;QACF;QAEA,MAAME,iBAAiBjC,SAAS8B,WAAWD;IAC7C;AACF,EAAC;AAED,eAAeI,iBAAiBjC,OAAgB,EAAE8B,SAAoB,EAAEb,KAAa;IACnF,MAAMiB,QAAQC,KAAKC,GAAG;IACtB,MAAMC,MAAM,MAAM/C,eAAe,CAAC,GAAGU;IAErCA,QAAQI,MAAM,CAACC,IAAI,CAAC;QAAEC,KAAK,CAAC,WAAW,EAAEwB,UAAUV,IAAI,EAAE;IAAC;IAE1D,IAAI;QACF,MAAM7B,gBAAgB8C;QACtB,MAAMC,KAAK,MAAM3C,eAAeK,QAAQsC,EAAE,EAAoBD;QAC9D,MAAMP,UAAUS,EAAE,CAAC;YAAED;YAAItC;YAASqC;QAAI;QACtCrC,QAAQI,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK,CAAC,WAAW,EAAEwB,UAAUV,IAAI,CAAC,EAAE,EAAEe,KAAKC,GAAG,KAAKF,MAAM,GAAG,CAAC;QAAC;QACpF,MAAMlC,QAAQwC,MAAM,CAAC;YACnB3B,YAAY;YACZ4B,MAAM;gBACJrB,MAAMU,UAAUV,IAAI;gBACpBH;YACF;YACAoB;QACF;QACA,MAAMhD,kBAAkBgD;IAC1B,EAAE,OAAOK,KAAc;QACrB,MAAMlD,gBAAgB6C;QACtBrC,QAAQI,MAAM,CAACuC,KAAK,CAAC;YACnBD;YACApC,KAAKT,WAAW6C,KAAK,CAAC,wBAAwB,EAAEZ,UAAUV,IAAI,EAAE;QAClE;QACAK,QAAQC,IAAI,CAAC;IACf;AACF"}
@@ -1,3 +1,3 @@
1
- export type Groups = 'addColumn' | 'addConstraint' | 'dropColumn' | 'dropConstraint' | 'dropTable' | 'notNull';
1
+ export type Groups = 'addColumn' | 'addConstraint' | 'createTable' | 'dropColumn' | 'dropConstraint' | 'dropTable' | 'notNull' | 'renameColumn';
2
2
  export declare const groupUpSQLStatements: (list: string[]) => Record<Groups, string[]>;
3
3
  //# sourceMappingURL=groupUpSQLStatements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"groupUpSQLStatements.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,WAAW,GACX,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,SAAS,CAAA;AAgBb,eAAO,MAAM,oBAAoB,SAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAmD5E,CAAA"}
1
+ {"version":3,"file":"groupUpSQLStatements.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,WAAW,GACX,eAAe,GACf,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,cAAc,CAAA;AAqBlB,eAAO,MAAM,oBAAoB,SAAU,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAmF5E,CAAA"}
@@ -1,32 +1,56 @@
1
1
  /**
2
- * Convert an "ADD COLUMN" statement to an "ALTER COLUMN" statement
3
- * example: ALTER TABLE "pages_blocks_my_block" ADD COLUMN "person_id" integer NOT NULL;
4
- * to: ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;
5
- * @param sql
2
+ * Convert an "ADD COLUMN" statement to an "ALTER COLUMN" statement.
3
+ * Works with or without a schema name.
4
+ *
5
+ * Examples:
6
+ * 'ALTER TABLE "pages_blocks_my_block" ADD COLUMN "person_id" integer NOT NULL;'
7
+ * => 'ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;'
8
+ *
9
+ * 'ALTER TABLE "public"."pages_blocks_my_block" ADD COLUMN "person_id" integer NOT NULL;'
10
+ * => 'ALTER TABLE "public"."pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;'
6
11
  */ function convertAddColumnToAlterColumn(sql) {
7
12
  // Regular expression to match the ADD COLUMN statement with its constraints
8
- const regex = /ALTER TABLE ("[^"]+")\.(".*?") ADD COLUMN ("[^"]+") [\w\s]+ NOT NULL;/;
13
+ const regex = /ALTER TABLE ((?:"[^"]+"\.)?"[^"]+") ADD COLUMN ("[^"]+") [^;]*?NOT NULL;/i;
9
14
  // Replace the matched part with "ALTER COLUMN ... SET NOT NULL;"
10
- return sql.replace(regex, 'ALTER TABLE $1.$2 ALTER COLUMN $3 SET NOT NULL;');
15
+ return sql.replace(regex, 'ALTER TABLE $1 ALTER COLUMN $2 SET NOT NULL;');
11
16
  }
12
17
  export const groupUpSQLStatements = (list)=>{
13
18
  const groups = {
14
- addColumn: 'ADD COLUMN',
15
- // example: ALTER TABLE "posts" ADD COLUMN "category_id" integer
16
- addConstraint: 'ADD CONSTRAINT',
17
- //example:
18
- // DO $$ BEGIN
19
- // ALTER TABLE "pages_blocks_my_block" ADD CONSTRAINT "pages_blocks_my_block_person_id_users_id_fk" FOREIGN KEY ("person_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE no action;
20
- // EXCEPTION
21
- // WHEN duplicate_object THEN null;
22
- // END $$;
23
- dropColumn: 'DROP COLUMN',
24
- // example: ALTER TABLE "_posts_v_rels" DROP COLUMN IF EXISTS "posts_id";
25
- dropConstraint: 'DROP CONSTRAINT',
26
- // example: ALTER TABLE "_posts_v_rels" DROP CONSTRAINT "_posts_v_rels_posts_fk";
27
- dropTable: 'DROP TABLE',
28
- // example: DROP TABLE "pages_rels";
29
- notNull: 'NOT NULL'
19
+ /**
20
+ * example: ALTER TABLE "posts" ADD COLUMN "category_id" integer
21
+ */ addColumn: 'ADD COLUMN',
22
+ /**
23
+ * example:
24
+ * DO $$ BEGIN
25
+ * ALTER TABLE "pages_blocks_my_block" ADD CONSTRAINT "pages_blocks_my_block_person_id_users_id_fk" FOREIGN KEY ("person_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE no action;
26
+ * EXCEPTION
27
+ * WHEN duplicate_object THEN null;
28
+ * END $$;
29
+ */ addConstraint: 'ADD CONSTRAINT',
30
+ /**
31
+ * example: CREATE TABLE IF NOT EXISTS "payload_locked_documents" (
32
+ * "id" serial PRIMARY KEY NOT NULL,
33
+ * "global_slug" varchar,
34
+ * "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
35
+ * "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
36
+ * );
37
+ */ createTable: 'CREATE TABLE',
38
+ /**
39
+ * example: ALTER TABLE "_posts_v_rels" DROP COLUMN IF EXISTS "posts_id";
40
+ */ dropColumn: 'DROP COLUMN',
41
+ /**
42
+ * example: ALTER TABLE "_posts_v_rels" DROP CONSTRAINT "_posts_v_rels_posts_fk";
43
+ */ dropConstraint: 'DROP CONSTRAINT',
44
+ /**
45
+ * example: DROP TABLE "pages_rels";
46
+ */ dropTable: 'DROP TABLE',
47
+ /**
48
+ * example: ALTER TABLE "pages_blocks_my_block" ALTER COLUMN "person_id" SET NOT NULL;
49
+ */ notNull: 'NOT NULL',
50
+ /**
51
+ * columns were renamed from camelCase to snake_case
52
+ * example: ALTER TABLE "forms" RENAME COLUMN "confirmationType" TO "confirmation_type";
53
+ */ renameColumn: 'RENAME COLUMN'
30
54
  };
31
55
  const result = Object.keys(groups).reduce((result, group)=>{
32
56
  result[group] = [];
@@ -45,7 +69,11 @@ export const groupUpSQLStatements = (list)=>{
45
69
  return true;
46
70
  }
47
71
  if (line.includes(value)) {
48
- result[key].push(line);
72
+ let statement = line;
73
+ if (key === 'dropConstraint') {
74
+ statement = line.replace('" DROP CONSTRAINT "', '" DROP CONSTRAINT IF EXISTS "');
75
+ }
76
+ result[key].push(statement);
49
77
  return true;
50
78
  }
51
79
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"sourcesContent":["export type Groups =\n | 'addColumn'\n | 'addConstraint'\n | 'dropColumn'\n | 'dropConstraint'\n | 'dropTable'\n | 'notNull'\n\n/**\n * Convert an \"ADD COLUMN\" statement to an \"ALTER COLUMN\" statement\n * example: ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;\n * to: ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n * @param sql\n */\nfunction convertAddColumnToAlterColumn(sql) {\n // Regular expression to match the ADD COLUMN statement with its constraints\n const regex = /ALTER TABLE (\"[^\"]+\")\\.(\".*?\") ADD COLUMN (\"[^\"]+\") [\\w\\s]+ NOT NULL;/\n\n // Replace the matched part with \"ALTER COLUMN ... SET NOT NULL;\"\n return sql.replace(regex, 'ALTER TABLE $1.$2 ALTER COLUMN $3 SET NOT NULL;')\n}\n\nexport const groupUpSQLStatements = (list: string[]): Record<Groups, string[]> => {\n const groups = {\n addColumn: 'ADD COLUMN',\n // example: ALTER TABLE \"posts\" ADD COLUMN \"category_id\" integer\n\n addConstraint: 'ADD CONSTRAINT',\n //example:\n // DO $$ BEGIN\n // ALTER TABLE \"pages_blocks_my_block\" ADD CONSTRAINT \"pages_blocks_my_block_person_id_users_id_fk\" FOREIGN KEY (\"person_id\") REFERENCES \"users\"(\"id\") ON DELETE cascade ON UPDATE no action;\n // EXCEPTION\n // WHEN duplicate_object THEN null;\n // END $$;\n\n dropColumn: 'DROP COLUMN',\n // example: ALTER TABLE \"_posts_v_rels\" DROP COLUMN IF EXISTS \"posts_id\";\n\n dropConstraint: 'DROP CONSTRAINT',\n // example: ALTER TABLE \"_posts_v_rels\" DROP CONSTRAINT \"_posts_v_rels_posts_fk\";\n\n dropTable: 'DROP TABLE',\n // example: DROP TABLE \"pages_rels\";\n\n notNull: 'NOT NULL',\n // example: ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n }\n\n const result = Object.keys(groups).reduce((result, group: Groups) => {\n result[group] = []\n return result\n }, {}) as Record<Groups, string[]>\n\n for (const line of list) {\n Object.entries(groups).some(([key, value]) => {\n if (line.endsWith('NOT NULL;')) {\n // split up the ADD COLUMN and ALTER COLUMN NOT NULL statements\n // example: ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;\n // becomes two separate statements:\n // 1. ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer;\n // 2. ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n result.addColumn.push(line.replace(' NOT NULL;', ';'))\n result.notNull.push(convertAddColumnToAlterColumn(line))\n return true\n }\n if (line.includes(value)) {\n result[key].push(line)\n return true\n }\n })\n }\n\n return result\n}\n"],"names":["convertAddColumnToAlterColumn","sql","regex","replace","groupUpSQLStatements","list","groups","addColumn","addConstraint","dropColumn","dropConstraint","dropTable","notNull","result","Object","keys","reduce","group","line","entries","some","key","value","endsWith","push","includes"],"mappings":"AAQA;;;;;CAKC,GACD,SAASA,8BAA8BC,GAAG;IACxC,4EAA4E;IAC5E,MAAMC,QAAQ;IAEd,iEAAiE;IACjE,OAAOD,IAAIE,OAAO,CAACD,OAAO;AAC5B;AAEA,OAAO,MAAME,uBAAuB,CAACC;IACnC,MAAMC,SAAS;QACbC,WAAW;QACX,gEAAgE;QAEhEC,eAAe;QACf,UAAU;QACV,cAAc;QACd,8LAA8L;QAC9L,YAAY;QACZ,oCAAoC;QACpC,UAAU;QAEVC,YAAY;QACZ,yEAAyE;QAEzEC,gBAAgB;QAChB,iFAAiF;QAEjFC,WAAW;QACX,oCAAoC;QAEpCC,SAAS;IAEX;IAEA,MAAMC,SAASC,OAAOC,IAAI,CAACT,QAAQU,MAAM,CAAC,CAACH,QAAQI;QACjDJ,MAAM,CAACI,MAAM,GAAG,EAAE;QAClB,OAAOJ;IACT,GAAG,CAAC;IAEJ,KAAK,MAAMK,QAAQb,KAAM;QACvBS,OAAOK,OAAO,CAACb,QAAQc,IAAI,CAAC,CAAC,CAACC,KAAKC,MAAM;YACvC,IAAIJ,KAAKK,QAAQ,CAAC,cAAc;gBAC9B,+DAA+D;gBAC/D,wFAAwF;gBACxF,mCAAmC;gBACnC,0EAA0E;gBAC1E,kFAAkF;gBAClFV,OAAON,SAAS,CAACiB,IAAI,CAACN,KAAKf,OAAO,CAAC,cAAc;gBACjDU,OAAOD,OAAO,CAACY,IAAI,CAACxB,8BAA8BkB;gBAClD,OAAO;YACT;YACA,IAAIA,KAAKO,QAAQ,CAACH,QAAQ;gBACxBT,MAAM,CAACQ,IAAI,CAACG,IAAI,CAACN;gBACjB,OAAO;YACT;QACF;IACF;IAEA,OAAOL;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.ts"],"sourcesContent":["export type Groups =\n | 'addColumn'\n | 'addConstraint'\n | 'createTable'\n | 'dropColumn'\n | 'dropConstraint'\n | 'dropTable'\n | 'notNull'\n | 'renameColumn'\n\n/**\n * Convert an \"ADD COLUMN\" statement to an \"ALTER COLUMN\" statement.\n * Works with or without a schema name.\n *\n * Examples:\n * 'ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;'\n * => 'ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;'\n *\n * 'ALTER TABLE \"public\".\"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;'\n * => 'ALTER TABLE \"public\".\"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;'\n */\nfunction convertAddColumnToAlterColumn(sql) {\n // Regular expression to match the ADD COLUMN statement with its constraints\n const regex = /ALTER TABLE ((?:\"[^\"]+\"\\.)?\"[^\"]+\") ADD COLUMN (\"[^\"]+\") [^;]*?NOT NULL;/i\n\n // Replace the matched part with \"ALTER COLUMN ... SET NOT NULL;\"\n return sql.replace(regex, 'ALTER TABLE $1 ALTER COLUMN $2 SET NOT NULL;')\n}\n\nexport const groupUpSQLStatements = (list: string[]): Record<Groups, string[]> => {\n const groups = {\n /**\n * example: ALTER TABLE \"posts\" ADD COLUMN \"category_id\" integer\n */\n addColumn: 'ADD COLUMN',\n\n /**\n * example:\n * DO $$ BEGIN\n * ALTER TABLE \"pages_blocks_my_block\" ADD CONSTRAINT \"pages_blocks_my_block_person_id_users_id_fk\" FOREIGN KEY (\"person_id\") REFERENCES \"users\"(\"id\") ON DELETE cascade ON UPDATE no action;\n * EXCEPTION\n * WHEN duplicate_object THEN null;\n * END $$;\n */\n addConstraint: 'ADD CONSTRAINT',\n\n /**\n * example: CREATE TABLE IF NOT EXISTS \"payload_locked_documents\" (\n * \"id\" serial PRIMARY KEY NOT NULL,\n * \"global_slug\" varchar,\n * \"updated_at\" timestamp(3) with time zone DEFAULT now() NOT NULL,\n * \"created_at\" timestamp(3) with time zone DEFAULT now() NOT NULL\n * );\n */\n createTable: 'CREATE TABLE',\n\n /**\n * example: ALTER TABLE \"_posts_v_rels\" DROP COLUMN IF EXISTS \"posts_id\";\n */\n dropColumn: 'DROP COLUMN',\n\n /**\n * example: ALTER TABLE \"_posts_v_rels\" DROP CONSTRAINT \"_posts_v_rels_posts_fk\";\n */\n dropConstraint: 'DROP CONSTRAINT',\n\n /**\n * example: DROP TABLE \"pages_rels\";\n */\n dropTable: 'DROP TABLE',\n\n /**\n * example: ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n */\n notNull: 'NOT NULL',\n\n /**\n * columns were renamed from camelCase to snake_case\n * example: ALTER TABLE \"forms\" RENAME COLUMN \"confirmationType\" TO \"confirmation_type\";\n */\n renameColumn: 'RENAME COLUMN',\n }\n\n const result = Object.keys(groups).reduce((result, group: Groups) => {\n result[group] = []\n return result\n }, {}) as Record<Groups, string[]>\n\n for (const line of list) {\n Object.entries(groups).some(([key, value]) => {\n if (line.endsWith('NOT NULL;')) {\n // split up the ADD COLUMN and ALTER COLUMN NOT NULL statements\n // example: ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer NOT NULL;\n // becomes two separate statements:\n // 1. ALTER TABLE \"pages_blocks_my_block\" ADD COLUMN \"person_id\" integer;\n // 2. ALTER TABLE \"pages_blocks_my_block\" ALTER COLUMN \"person_id\" SET NOT NULL;\n result.addColumn.push(line.replace(' NOT NULL;', ';'))\n result.notNull.push(convertAddColumnToAlterColumn(line))\n return true\n }\n if (line.includes(value)) {\n let statement = line\n if (key === 'dropConstraint') {\n statement = line.replace('\" DROP CONSTRAINT \"', '\" DROP CONSTRAINT IF EXISTS \"')\n }\n result[key].push(statement)\n return true\n }\n })\n }\n\n return result\n}\n"],"names":["convertAddColumnToAlterColumn","sql","regex","replace","groupUpSQLStatements","list","groups","addColumn","addConstraint","createTable","dropColumn","dropConstraint","dropTable","notNull","renameColumn","result","Object","keys","reduce","group","line","entries","some","key","value","endsWith","push","includes","statement"],"mappings":"AAUA;;;;;;;;;;CAUC,GACD,SAASA,8BAA8BC,GAAG;IACxC,4EAA4E;IAC5E,MAAMC,QAAQ;IAEd,iEAAiE;IACjE,OAAOD,IAAIE,OAAO,CAACD,OAAO;AAC5B;AAEA,OAAO,MAAME,uBAAuB,CAACC;IACnC,MAAMC,SAAS;QACb;;KAEC,GACDC,WAAW;QAEX;;;;;;;KAOC,GACDC,eAAe;QAEf;;;;;;;KAOC,GACDC,aAAa;QAEb;;KAEC,GACDC,YAAY;QAEZ;;KAEC,GACDC,gBAAgB;QAEhB;;KAEC,GACDC,WAAW;QAEX;;KAEC,GACDC,SAAS;QAET;;;KAGC,GACDC,cAAc;IAChB;IAEA,MAAMC,SAASC,OAAOC,IAAI,CAACX,QAAQY,MAAM,CAAC,CAACH,QAAQI;QACjDJ,MAAM,CAACI,MAAM,GAAG,EAAE;QAClB,OAAOJ;IACT,GAAG,CAAC;IAEJ,KAAK,MAAMK,QAAQf,KAAM;QACvBW,OAAOK,OAAO,CAACf,QAAQgB,IAAI,CAAC,CAAC,CAACC,KAAKC,MAAM;YACvC,IAAIJ,KAAKK,QAAQ,CAAC,cAAc;gBAC9B,+DAA+D;gBAC/D,wFAAwF;gBACxF,mCAAmC;gBACnC,0EAA0E;gBAC1E,kFAAkF;gBAClFV,OAAOR,SAAS,CAACmB,IAAI,CAACN,KAAKjB,OAAO,CAAC,cAAc;gBACjDY,OAAOF,OAAO,CAACa,IAAI,CAAC1B,8BAA8BoB;gBAClD,OAAO;YACT;YACA,IAAIA,KAAKO,QAAQ,CAACH,QAAQ;gBACxB,IAAII,YAAYR;gBAChB,IAAIG,QAAQ,kBAAkB;oBAC5BK,YAAYR,KAAKjB,OAAO,CAAC,uBAAuB;gBAClD;gBACAY,MAAM,CAACQ,IAAI,CAACG,IAAI,CAACE;gBACjB,OAAO;YACT;QACF;IACF;IAEA,OAAOb;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAetD,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC9B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,4BAAmC,IAAI,kBA2PxE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAetD,KAAK,IAAI,GAAG;IACV,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC9B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,4BAAmC,IAAI,kBA4QxE,CAAA"}
@@ -21,15 +21,10 @@ import { traverseFields } from './traverseFields.js';
21
21
  * @param req
22
22
  */ export const migratePostgresV2toV3 = async ({ debug, payload, req })=>{
23
23
  const adapter = payload.db;
24
- const db = await getTransaction(adapter, req);
25
24
  const dir = payload.db.migrationDir;
26
25
  // get the drizzle migrateUpSQL from drizzle using the last schema
27
26
  const { generateDrizzleJson, generateMigration, upSnapshot } = adapter.requireDrizzleKit();
28
- const toSnapshot = {};
29
- for (const key of Object.keys(adapter.schema).filter((key)=>!key.startsWith('payload_locked_documents'))){
30
- toSnapshot[key] = adapter.schema[key];
31
- }
32
- const drizzleJsonAfter = generateDrizzleJson(toSnapshot);
27
+ const drizzleJsonAfter = generateDrizzleJson(adapter.schema);
33
28
  // Get the previous migration snapshot
34
29
  const previousSnapshot = fs.readdirSync(dir).filter((file)=>file.endsWith('.json') && !file.endsWith('relationships_v2_v3.json')).sort().reverse()?.[0];
35
30
  if (!previousSnapshot) {
@@ -45,13 +40,32 @@ import { traverseFields } from './traverseFields.js';
45
40
  process.exit(0);
46
41
  }
47
42
  const sqlUpStatements = groupUpSQLStatements(generatedSQL);
43
+ const db = await getTransaction(adapter, req);
44
+ const createTableStatement = sqlUpStatements.createTable.join('\n');
45
+ // CREATE TABLES
46
+ if (debug) {
47
+ payload.logger.info('CREATING TABLES');
48
+ payload.logger.info(createTableStatement);
49
+ }
50
+ await db.execute(sql.raw(createTableStatement));
51
+ const renameColumnsStatement = sqlUpStatements.renameColumn.join('\n');
52
+ // RENAME COLUMNS
53
+ if (debug) {
54
+ payload.logger.info('RENAMING COLUMNS');
55
+ payload.logger.info(renameColumnsStatement);
56
+ }
57
+ await db.execute(sql.raw(renameColumnsStatement));
48
58
  const addColumnsStatement = sqlUpStatements.addColumn.join('\n');
59
+ await db.execute(sql.raw(addColumnsStatement));
49
60
  if (debug) {
50
61
  payload.logger.info('CREATING NEW RELATIONSHIP COLUMNS');
51
62
  payload.logger.info(addColumnsStatement);
52
63
  }
53
64
  await db.execute(sql.raw(addColumnsStatement));
54
65
  for (const collection of payload.config.collections){
66
+ if (collection.slug === 'payload-locked-documents') {
67
+ continue;
68
+ }
55
69
  const tableName = adapter.tableNameMap.get(toSnakeCase(collection.slug));
56
70
  const pathsToQuery = new Set();
57
71
  traverseFields({
@@ -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 db = await getTransaction(adapter, req)\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 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\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 const drizzleJsonAfter = generateDrizzleJson(adapter.schema) 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 const createTableStatement = sqlUpStatements.createTable.join('\\n')\n\n // CREATE TABLES\n if (debug) {\n payload.logger.info('CREATING TABLES')\n payload.logger.info(createTableStatement)\n }\n\n await db.execute(sql.raw(createTableStatement))\n\n const renameColumnsStatement = sqlUpStatements.renameColumn.join('\\n')\n\n // RENAME COLUMNS\n if (debug) {\n payload.logger.info('RENAMING COLUMNS')\n payload.logger.info(renameColumnsStatement)\n }\n\n await db.execute(sql.raw(renameColumnsStatement))\n\n const addColumnsStatement = sqlUpStatements.addColumn.join('\\n')\n\n await db.execute(sql.raw(addColumnsStatement))\n\n if (debug) {\n payload.logger.info('CREATING NEW RELATIONSHIP COLUMNS')\n payload.logger.info(addColumnsStatement)\n }\n\n await db.execute(sql.raw(addColumnsStatement))\n\n for (const collection of payload.config.collections) {\n if (collection.slug === 'payload-locked-documents') {\n continue\n }\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","drizzleJsonAfter","schema","previousSnapshot","readdirSync","filter","file","endsWith","sort","reverse","Error","drizzleJsonBefore","JSON","parse","readFileSync","version","generatedSQL","length","logger","info","process","exit","sqlUpStatements","createTableStatement","createTable","join","execute","raw","renameColumnsStatement","renameColumn","addColumnsStatement","addColumn","collection","config","collections","slug","tableName","tableNameMap","get","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":"AAGA,SAASA,GAAG,QAAQ,cAAa;AACjC,OAAOC,QAAQ,KAAI;AACnB,SAASC,4BAA4B,EAAEC,wBAAwB,QAAQ,UAAS;AAChF,OAAOC,iBAAiB,gBAAe;AAKvC,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,cAAc,QAAQ,sBAAqB;AAQpD;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMC,wBAAwB,OAAO,EAAEC,KAAK,EAAEC,OAAO,EAAEC,GAAG,EAAQ;IACvE,MAAMC,UAAUF,QAAQG,EAAE;IAC1B,MAAMC,MAAMJ,QAAQG,EAAE,CAACE,YAAY;IAEnC,kEAAkE;IAClE,MAAM,EAAEC,mBAAmB,EAAEC,iBAAiB,EAAEC,UAAU,EAAE,GAAGN,QAAQO,iBAAiB;IACxF,MAAMC,mBAAmBJ,oBAAoBJ,QAAQS,MAAM;IAE3D,sCAAsC;IACtC,MAAMC,mBAAmBtB,GACtBuB,WAAW,CAACT,KACZU,MAAM,CAAC,CAACC,OAASA,KAAKC,QAAQ,CAAC,YAAY,CAACD,KAAKC,QAAQ,CAAC,6BAC1DC,IAAI,GACJC,OAAO,IAAI,CAAC,EAAE;IAEjB,IAAI,CAACN,kBAAkB;QACrB,MAAM,IAAIO,MACR,CAAC,gGAAgG,CAAC;IAEtG;IAEA,IAAIC,oBAAoBC,KAAKC,KAAK,CAChChC,GAAGiC,YAAY,CAAC,GAAGnB,IAAI,CAAC,EAAEQ,kBAAkB,EAAE;IAGhD,IAAIJ,cAAcY,kBAAkBI,OAAO,GAAGd,iBAAiBc,OAAO,EAAE;QACtEJ,oBAAoBZ,WAAWY;IACjC;IAEA,MAAMK,eAAe,MAAMlB,kBAAkBa,mBAAmBV;IAEhE,IAAI,CAACe,aAAaC,MAAM,EAAE;QACxB1B,QAAQ2B,MAAM,CAACC,IAAI,CAAC,CAAC,yBAAyB,CAAC;QAC/CC,QAAQC,IAAI,CAAC;IACf;IAEA,MAAMC,kBAAkBpC,qBAAqB8B;IAE7C,MAAMtB,KAAK,MAAMT,eAAeQ,SAASD;IAEzC,MAAM+B,uBAAuBD,gBAAgBE,WAAW,CAACC,IAAI,CAAC;IAE9D,gBAAgB;IAChB,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAACI;IACtB;IAEA,MAAM7B,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACJ;IAEzB,MAAMK,yBAAyBN,gBAAgBO,YAAY,CAACJ,IAAI,CAAC;IAEjE,iBAAiB;IACjB,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAACS;IACtB;IAEA,MAAMlC,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACC;IAEzB,MAAME,sBAAsBR,gBAAgBS,SAAS,CAACN,IAAI,CAAC;IAE3D,MAAM/B,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACG;IAEzB,IAAIxC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAACW;IACtB;IAEA,MAAMpC,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACG;IAEzB,KAAK,MAAME,cAAczC,QAAQ0C,MAAM,CAACC,WAAW,CAAE;QACnD,IAAIF,WAAWG,IAAI,KAAK,4BAA4B;YAClD;QACF;QACA,MAAMC,YAAY3C,QAAQ4C,YAAY,CAACC,GAAG,CAACtD,YAAYgD,WAAWG,IAAI;QACtE,MAAMI,eAA6B,IAAIC;QAEvCpD,eAAe;YACbK;YACAgD,gBAAgBT,WAAWG,IAAI;YAC/BO,cAAc;YACdhD;YACAiD,gBAAgB;YAChBC,QAAQZ,WAAWa,eAAe;YAClCC,YAAY;YACZC,cAAcX;YACdY,iBAAiBZ;YACjBa,MAAM;YACNV;YACAhD;YACA2D,eAAed;QACjB;QAEA,MAAMjD,qBAAqB;YACzBM;YACAgD,gBAAgBT,WAAWG,IAAI;YAC/BzC;YACAJ;YACAsD,QAAQZ,WAAWa,eAAe;YAClCC,YAAY;YACZP;YACAhD;YACAC;YACA4C;QACF;QAEA,IAAIJ,WAAWmB,QAAQ,EAAE;YACvB,MAAMC,oBAAoB3D,QAAQ4C,YAAY,CAACC,GAAG,CAChD,CAAC,CAAC,EAAEtD,YAAYgD,WAAWG,IAAI,IAAI1C,QAAQ4D,cAAc,EAAE;YAE7D,MAAMC,gBAAgBxE,6BAA6BS,QAAQ0C,MAAM,EAAED,YAAY;YAC/E,MAAMuB,sBAAoC,IAAIf;YAE9CpD,eAAe;gBACbK;gBACAgD,gBAAgBT,WAAWG,IAAI;gBAC/BO,cAAc;gBACdhD;gBACAiD,gBAAgB;gBAChBC,QAAQU;gBACRR,YAAY;gBACZC,cAAcK;gBACdJ,iBAAiBI;gBACjBH,MAAM;gBACNV,cAAcgB;gBACdhE;gBACA2D,eAAeE;YACjB;YAEA,MAAMjE,qBAAqB;gBACzBM;gBACAgD,gBAAgBT,WAAWG,IAAI;gBAC/BzC;gBACAJ;gBACAsD,QAAQU;gBACRR,YAAY;gBACZP,cAAcgB;gBACdhE;gBACAC;gBACA4C,WAAWgB;YACb;QACF;IACF;IAEA,KAAK,MAAMI,UAAUjE,QAAQ0C,MAAM,CAACwB,OAAO,CAAE;QAC3C,MAAMrB,YAAY3C,QAAQ4C,YAAY,CAACC,GAAG,CAACtD,YAAYwE,OAAOrB,IAAI;QAElE,MAAMI,eAA6B,IAAIC;QAEvCpD,eAAe;YACbK;YACAiD,cAAc;YACdhD;YACAiD,gBAAgB;YAChBC,QAAQY,OAAOX,eAAe;YAC9Ba,YAAYF,OAAOrB,IAAI;YACvBW,YAAY;YACZC,cAAcX;YACdY,iBAAiBZ;YACjBa,MAAM;YACNV;YACAhD;YACA2D,eAAed;QACjB;QAEA,MAAMjD,qBAAqB;YACzBM;YACAC;YACAJ;YACAsD,QAAQY,OAAOX,eAAe;YAC9Ba,YAAYF,OAAOrB,IAAI;YACvBW,YAAY;YACZP;YACAhD;YACAC;YACA4C;QACF;QAEA,IAAIoB,OAAOL,QAAQ,EAAE;YACnB,MAAMC,oBAAoB3D,QAAQ4C,YAAY,CAACC,GAAG,CAChD,CAAC,CAAC,EAAEtD,YAAYwE,OAAOrB,IAAI,IAAI1C,QAAQ4D,cAAc,EAAE;YAGzD,MAAMC,gBAAgBvE,yBAAyBQ,QAAQ0C,MAAM,EAAEuB,QAAQ;YAEvE,MAAMD,sBAAoC,IAAIf;YAE9CpD,eAAe;gBACbK;gBACAiD,cAAc;gBACdhD;gBACAiD,gBAAgB;gBAChBC,QAAQU;gBACRI,YAAYF,OAAOrB,IAAI;gBACvBW,YAAY;gBACZC,cAAcK;gBACdJ,iBAAiBI;gBACjBH,MAAM;gBACNV,cAAcgB;gBACdhE;gBACA2D,eAAeE;YACjB;YAEA,MAAMjE,qBAAqB;gBACzBM;gBACAC;gBACAJ;gBACAsD,QAAQU;gBACRI,YAAYF,OAAOrB,IAAI;gBACvBW,YAAY;gBACZP,cAAcgB;gBACdhE;gBACAC;gBACA4C,WAAWgB;YACb;QACF;IACF;IAEA,iBAAiB;IACjB,MAAMO,0BAA0BrC,gBAAgBsC,aAAa,CAACnC,IAAI,CAAC;IAEnE,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAACwC;IACtB;IAEA,MAAMjE,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACgC;IAEzB,WAAW;IACX,MAAME,oBAAoBvC,gBAAgBwC,OAAO,CAACrC,IAAI,CAAC;IAEvD,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAAC0C;IACtB;IAEA,MAAMnE,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACkC;IAEzB,aAAa;IACb,MAAME,sBAAsBzC,gBAAgB0C,SAAS,CAACvC,IAAI,CAAC;IAE3D,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAAC4C;IACtB;IAEA,MAAMrE,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACoC;IAEzB,kBAAkB;IAClB,MAAME,2BAA2B3C,gBAAgB4C,cAAc,CAACzC,IAAI,CAAC;IAErE,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAAC8C;IACtB;IAEA,MAAMvE,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACsC;IAEzB,cAAc;IACd,MAAME,uBAAuB7C,gBAAgB8C,UAAU,CAAC3C,IAAI,CAAC;IAE7D,IAAInC,OAAO;QACTC,QAAQ2B,MAAM,CAACC,IAAI,CAAC;QACpB5B,QAAQ2B,MAAM,CAACC,IAAI,CAACgD;IACtB;IAEA,MAAMzE,GAAGgC,OAAO,CAAC9C,IAAI+C,GAAG,CAACwC;AAC3B,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/drizzle",
3
- "version": "3.37.0-canary.4",
3
+ "version": "3.37.0-internal.294c1ac",
4
4
  "description": "A library of shared functions used by different payload database adapters",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -53,10 +53,10 @@
53
53
  "@types/pg": "8.10.2",
54
54
  "@types/to-snake-case": "1.0.0",
55
55
  "@payloadcms/eslint-config": "3.28.0",
56
- "payload": "3.37.0-canary.4"
56
+ "payload": "3.37.0-internal.294c1ac"
57
57
  },
58
58
  "peerDependencies": {
59
- "payload": "3.37.0-canary.4"
59
+ "payload": "3.37.0-internal.294c1ac"
60
60
  },
61
61
  "scripts": {
62
62
  "build": "pnpm build:swc && pnpm build:types",