@payloadcms/drizzle 4.0.0-internal.c3ac604 → 4.0.0-internal.cc18726
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/createTableName.d.ts.map +1 -1
- package/dist/createTableName.js +2 -7
- package/dist/createTableName.js.map +1 -1
- package/dist/exports/postgres.d.ts +2 -0
- package/dist/exports/postgres.d.ts.map +1 -1
- package/dist/exports/postgres.js +2 -0
- package/dist/exports/postgres.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +35 -13
- package/dist/migrate.js.map +1 -1
- package/dist/migrateDown.d.ts +2 -1
- package/dist/migrateDown.d.ts.map +1 -1
- package/dist/migrateDown.js +12 -2
- package/dist/migrateDown.js.map +1 -1
- package/dist/migrateFresh.d.ts +4 -2
- package/dist/migrateFresh.d.ts.map +1 -1
- package/dist/migrateFresh.js +21 -7
- package/dist/migrateFresh.js.map +1 -1
- package/dist/migrateRefresh.d.ts +2 -1
- package/dist/migrateRefresh.d.ts.map +1 -1
- package/dist/migrateRefresh.js +14 -3
- package/dist/migrateRefresh.js.map +1 -1
- package/dist/migrateReset.d.ts +2 -1
- package/dist/migrateReset.d.ts.map +1 -1
- package/dist/migrateReset.js +12 -2
- package/dist/migrateReset.js.map +1 -1
- package/dist/migrateStatus.d.ts +2 -1
- package/dist/migrateStatus.d.ts.map +1 -1
- package/dist/migrateStatus.js +11 -6
- package/dist/migrateStatus.js.map +1 -1
- package/dist/postgres/init.d.ts.map +1 -1
- package/dist/postgres/init.js +6 -0
- package/dist/postgres/init.js.map +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
- package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js +91 -0
- package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js.map +1 -0
- package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
- package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
- package/dist/postgres/query/postgresUnaccent.js +40 -0
- package/dist/postgres/query/postgresUnaccent.js.map +1 -0
- package/dist/postgres/query/postgresUnaccent.spec.js +71 -0
- package/dist/postgres/query/postgresUnaccent.spec.js.map +1 -0
- package/dist/postgres/types.d.ts +13 -2
- package/dist/postgres/types.d.ts.map +1 -1
- package/dist/postgres/types.js.map +1 -1
- package/dist/queries/buildOperatorConstraint.d.ts +22 -0
- package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
- package/dist/queries/buildOperatorConstraint.js +63 -0
- package/dist/queries/buildOperatorConstraint.js.map +1 -0
- package/dist/queries/buildOperatorConstraint.spec.js +348 -0
- package/dist/queries/buildOperatorConstraint.spec.js.map +1 -0
- package/dist/queries/getTableColumnFromPath.d.ts +12 -3
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +50 -27
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/queries/operatorMap.d.ts +7 -3
- package/dist/queries/operatorMap.d.ts.map +1 -1
- package/dist/queries/operatorMap.js.map +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +203 -8
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/resolveRelationshipPath.d.ts +36 -0
- package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
- package/dist/queries/resolveRelationshipPath.js +66 -0
- package/dist/queries/resolveRelationshipPath.js.map +1 -0
- package/dist/queries/validateOperatorHandlers.d.ts +8 -0
- package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
- package/dist/queries/validateOperatorHandlers.js +30 -0
- package/dist/queries/validateOperatorHandlers.js.map +1 -0
- package/dist/queries/validateOperatorHandlers.spec.js +142 -0
- package/dist/queries/validateOperatorHandlers.spec.js.map +1 -0
- package/dist/schema/buildRawSchema.spec.js +128 -5
- package/dist/schema/buildRawSchema.spec.js.map +1 -1
- package/dist/types.d.ts +50 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
- package/dist/utilities/buildCreateMigration.js +12 -8
- package/dist/utilities/buildCreateMigration.js.map +1 -1
- package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
- package/dist/utilities/buildForeignKeyName.js +3 -2
- package/dist/utilities/buildForeignKeyName.js.map +1 -1
- package/dist/utilities/buildIndexName.d.ts.map +1 -1
- package/dist/utilities/buildIndexName.js +3 -2
- package/dist/utilities/buildIndexName.js.map +1 -1
- package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
- package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
- package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
- package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
- package/dist/utilities/checkTruncatedIdentifiers.spec.js +301 -0
- package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +1 -0
- package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
- package/dist/utilities/createSchemaGenerator.js +3 -0
- package/dist/utilities/createSchemaGenerator.js.map +1 -1
- package/dist/utilities/validateIdentifierLength.d.ts +12 -0
- package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
- package/dist/utilities/validateIdentifierLength.js +18 -0
- package/dist/utilities/validateIdentifierLength.js.map +1 -0
- package/dist/utilities/validateIdentifierLength.spec.js +19 -0
- package/dist/utilities/validateIdentifierLength.spec.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/migrateRefresh.ts"],"sourcesContent":["import {\n commitTransaction,\n createLocalReq,\n getMigrations,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\nimport { parseError } from './utilities/parseError.js'\n\n/**\n * Run all migration down functions before running up\n */\nexport async function migrateRefresh(this: DrizzleAdapter) {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations, latestBatch } = await getMigrations({\n payload,\n })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to rollback.' })\n return\n }\n\n payload.logger.info({\n msg: `Rolling back batch ${latestBatch} consisting of ${existingMigrations.length} migration(s).`,\n })\n\n const req = await createLocalReq({}, payload)\n\n // Reverse order of migrations to rollback\n existingMigrations.reverse()\n\n for (const migration of existingMigrations) {\n try {\n const migrationFile = migrationFiles.find((m) => m.name === migration.name)\n if (!migrationFile) {\n throw new Error(`Migration ${migration.name} not found locally.`)\n }\n\n payload.logger.info({ msg: `Migrating down: ${migration.name}` })\n const start = Date.now()\n await initTransaction(req)\n const db = await getTransaction(this, req)\n await migrationFile.down({ db, payload, req })\n payload.logger.info({\n msg: `Migrated down: ${migration.name} (${Date.now() - start}ms)`,\n })\n\n const tableExists = await migrationTableExists(this, db)\n if (tableExists) {\n await payload.delete({\n collection: 'payload-migrations',\n req,\n where: {\n name: {\n equals: migration.name,\n },\n },\n })\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}. Rolling back.`),\n })\n
|
|
1
|
+
{"version":3,"sources":["../src/migrateRefresh.ts"],"sourcesContent":["import type { MigrationResult } from 'payload'\n\nimport {\n commitTransaction,\n createLocalReq,\n getMigrations,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\nimport { parseError } from './utilities/parseError.js'\n\n/**\n * Run all migration down functions before running up\n */\nexport async function migrateRefresh(this: DrizzleAdapter): Promise<MigrationResult> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations, latestBatch } = await getMigrations({\n payload,\n })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to rollback.' })\n return { migrated: [], rolledBack: [] }\n }\n\n payload.logger.info({\n msg: `Rolling back batch ${latestBatch} consisting of ${existingMigrations.length} migration(s).`,\n })\n\n const req = await createLocalReq({}, payload)\n const migrated: string[] = []\n const rolledBack: string[] = []\n\n // Reverse order of migrations to rollback\n existingMigrations.reverse()\n\n for (const migration of existingMigrations) {\n try {\n const migrationFile = migrationFiles.find((m) => m.name === migration.name)\n if (!migrationFile) {\n throw new Error(`Migration ${migration.name} not found locally.`)\n }\n\n payload.logger.info({ msg: `Migrating down: ${migration.name}` })\n const start = Date.now()\n await initTransaction(req)\n const db = await getTransaction(this, req)\n await migrationFile.down({ db, payload, req })\n payload.logger.info({\n msg: `Migrated down: ${migration.name} (${Date.now() - start}ms)`,\n })\n\n const tableExists = await migrationTableExists(this, db)\n if (tableExists) {\n await payload.delete({\n collection: 'payload-migrations',\n req,\n where: {\n name: {\n equals: migration.name,\n },\n },\n })\n }\n await commitTransaction(req)\n rolledBack.push(migration.name)\n } catch (err: unknown) {\n await killTransaction(req)\n payload.logger.error({\n err,\n msg: parseError(err, `Error running migration ${migration.name}. Rolling back.`),\n })\n throw err\n }\n }\n\n // Run all migrate up\n for (const migration of migrationFiles) {\n payload.logger.info({ msg: `Migrating: ${migration.name}` })\n try {\n const start = Date.now()\n await initTransaction(req)\n await migration.up({ payload, req })\n await payload.create({\n collection: 'payload-migrations',\n data: {\n name: migration.name,\n executed: true,\n },\n req,\n })\n await commitTransaction(req)\n migrated.push(migration.name)\n\n payload.logger.info({ msg: `Migrated: ${migration.name} (${Date.now() - start}ms)` })\n } catch (err: unknown) {\n await killTransaction(req)\n payload.logger.error({\n err,\n msg: parseError(err, `Error running migration ${migration.name}. Rolling back.`),\n })\n throw err\n }\n }\n\n return { migrated, rolledBack }\n}\n"],"names":["commitTransaction","createLocalReq","getMigrations","initTransaction","killTransaction","readMigrationFiles","getTransaction","migrationTableExists","parseError","migrateRefresh","payload","migrationFiles","existingMigrations","latestBatch","length","logger","info","msg","migrated","rolledBack","req","reverse","migration","migrationFile","find","m","name","Error","start","Date","now","db","down","tableExists","delete","collection","where","equals","push","err","error","up","create","data","executed"],"mappings":"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"}
|
package/dist/migrateReset.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { MigrationResult } from 'payload';
|
|
1
2
|
import type { DrizzleAdapter } from './types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Run all migrate down functions
|
|
4
5
|
*/
|
|
5
|
-
export declare function migrateReset(this: DrizzleAdapter): Promise<
|
|
6
|
+
export declare function migrateReset(this: DrizzleAdapter): Promise<MigrationResult>;
|
|
6
7
|
//# sourceMappingURL=migrateReset.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrateReset.d.ts","sourceRoot":"","sources":["../src/migrateReset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrateReset.d.ts","sourceRoot":"","sources":["../src/migrateReset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAW9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKhD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAgFjF"}
|
package/dist/migrateReset.js
CHANGED
|
@@ -15,10 +15,14 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
|
|
|
15
15
|
payload.logger.info({
|
|
16
16
|
msg: 'No migrations to reset.'
|
|
17
17
|
});
|
|
18
|
-
return
|
|
18
|
+
return {
|
|
19
|
+
migrated: [],
|
|
20
|
+
rolledBack: []
|
|
21
|
+
};
|
|
19
22
|
}
|
|
20
23
|
const req = await createLocalReq({}, payload);
|
|
21
24
|
existingMigrations.reverse();
|
|
25
|
+
const rolledBack = [];
|
|
22
26
|
// Rollback all migrations in order
|
|
23
27
|
for (const migration of existingMigrations){
|
|
24
28
|
const migrationFile = migrationFiles.find((m)=>m.name === migration.name);
|
|
@@ -49,6 +53,7 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
|
|
|
49
53
|
});
|
|
50
54
|
}
|
|
51
55
|
await commitTransaction(req);
|
|
56
|
+
rolledBack.push(migrationFile.name);
|
|
52
57
|
} catch (err) {
|
|
53
58
|
let msg = `Error running migration ${migrationFile.name}.`;
|
|
54
59
|
if (err instanceof Error) {
|
|
@@ -59,7 +64,7 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
|
|
|
59
64
|
err,
|
|
60
65
|
msg
|
|
61
66
|
});
|
|
62
|
-
|
|
67
|
+
throw err;
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
// Delete dev migration
|
|
@@ -79,8 +84,13 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
|
|
|
79
84
|
err,
|
|
80
85
|
msg: 'Error deleting dev migration'
|
|
81
86
|
});
|
|
87
|
+
throw err;
|
|
82
88
|
}
|
|
83
89
|
}
|
|
90
|
+
return {
|
|
91
|
+
migrated: [],
|
|
92
|
+
rolledBack
|
|
93
|
+
};
|
|
84
94
|
}
|
|
85
95
|
|
|
86
96
|
//# sourceMappingURL=migrateReset.js.map
|
package/dist/migrateReset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/migrateReset.ts"],"sourcesContent":["import {\n commitTransaction,\n createLocalReq,\n getMigrations,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\n/**\n * Run all migrate down functions\n */\nexport async function migrateReset(this: DrizzleAdapter): Promise<
|
|
1
|
+
{"version":3,"sources":["../src/migrateReset.ts"],"sourcesContent":["import type { MigrationResult } from 'payload'\n\nimport {\n commitTransaction,\n createLocalReq,\n getMigrations,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\n/**\n * Run all migrate down functions\n */\nexport async function migrateReset(this: DrizzleAdapter): Promise<MigrationResult> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations } = await getMigrations({ payload })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to reset.' })\n return { migrated: [], rolledBack: [] }\n }\n\n const req = await createLocalReq({}, payload)\n\n existingMigrations.reverse()\n const rolledBack: string[] = []\n\n // Rollback all migrations in order\n for (const migration of existingMigrations) {\n const migrationFile = migrationFiles.find((m) => m.name === migration.name)\n try {\n if (!migrationFile) {\n throw new Error(`Migration ${migration.name} not found locally.`)\n }\n\n const start = Date.now()\n payload.logger.info({ msg: `Migrating down: ${migrationFile.name}` })\n await initTransaction(req)\n const db = await getTransaction(this, req)\n await migrationFile.down({ db, payload, req })\n payload.logger.info({\n msg: `Migrated down: ${migrationFile.name} (${Date.now() - start}ms)`,\n })\n\n const tableExists = await migrationTableExists(this, db)\n if (tableExists) {\n await payload.delete({\n id: migration.id,\n collection: 'payload-migrations',\n req,\n })\n }\n\n await commitTransaction(req)\n rolledBack.push(migrationFile.name)\n } catch (err: unknown) {\n let msg = `Error running migration ${migrationFile.name}.`\n\n if (err instanceof Error) {\n msg += ` ${err.message}`\n }\n\n await killTransaction(req)\n payload.logger.error({\n err,\n msg,\n })\n throw err\n }\n }\n\n // Delete dev migration\n\n const tableExists = await migrationTableExists(this)\n if (tableExists) {\n try {\n await payload.delete({\n collection: 'payload-migrations',\n where: {\n batch: {\n equals: -1,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: 'Error deleting dev migration' })\n throw err\n }\n }\n\n return { migrated: [], rolledBack }\n}\n"],"names":["commitTransaction","createLocalReq","getMigrations","initTransaction","killTransaction","readMigrationFiles","getTransaction","migrationTableExists","migrateReset","payload","migrationFiles","existingMigrations","length","logger","info","msg","migrated","rolledBack","req","reverse","migration","migrationFile","find","m","name","Error","start","Date","now","db","down","tableExists","delete","id","collection","push","err","message","error","where","batch","equals"],"mappings":"AAEA,SACEA,iBAAiB,EACjBC,cAAc,EACdC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,kBAAkB,QACb,UAAS;AAIhB,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,oBAAoB,QAAQ,sCAAqC;AAE1E;;CAEC,GACD,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAML,mBAAmB;QAAEI;IAAQ;IAE1D,MAAM,EAAEE,kBAAkB,EAAE,GAAG,MAAMT,cAAc;QAAEO;IAAQ;IAE7D,IAAI,CAACE,oBAAoBC,QAAQ;QAC/BH,QAAQI,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAA0B;QACrD,OAAO;YAAEC,UAAU,EAAE;YAAEC,YAAY,EAAE;QAAC;IACxC;IAEA,MAAMC,MAAM,MAAMjB,eAAe,CAAC,GAAGQ;IAErCE,mBAAmBQ,OAAO;IAC1B,MAAMF,aAAuB,EAAE;IAE/B,mCAAmC;IACnC,KAAK,MAAMG,aAAaT,mBAAoB;QAC1C,MAAMU,gBAAgBX,eAAeY,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUI,IAAI;QAC1E,IAAI;YACF,IAAI,CAACH,eAAe;gBAClB,MAAM,IAAII,MAAM,CAAC,UAAU,EAAEL,UAAUI,IAAI,CAAC,mBAAmB,CAAC;YAClE;YAEA,MAAME,QAAQC,KAAKC,GAAG;YACtBnB,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAAEC,KAAK,CAAC,gBAAgB,EAAEM,cAAcG,IAAI,EAAE;YAAC;YACnE,MAAMrB,gBAAgBe;YACtB,MAAMW,KAAK,MAAMvB,eAAe,IAAI,EAAEY;YACtC,MAAMG,cAAcS,IAAI,CAAC;gBAAED;gBAAIpB;gBAASS;YAAI;YAC5CT,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAClBC,KAAK,CAAC,gBAAgB,EAAEM,cAAcG,IAAI,CAAC,EAAE,EAAEG,KAAKC,GAAG,KAAKF,MAAM,GAAG,CAAC;YACxE;YAEA,MAAMK,cAAc,MAAMxB,qBAAqB,IAAI,EAAEsB;YACrD,IAAIE,aAAa;gBACf,MAAMtB,QAAQuB,MAAM,CAAC;oBACnBC,IAAIb,UAAUa,EAAE;oBAChBC,YAAY;oBACZhB;gBACF;YACF;YAEA,MAAMlB,kBAAkBkB;YACxBD,WAAWkB,IAAI,CAACd,cAAcG,IAAI;QACpC,EAAE,OAAOY,KAAc;YACrB,IAAIrB,MAAM,CAAC,wBAAwB,EAAEM,cAAcG,IAAI,CAAC,CAAC,CAAC;YAE1D,IAAIY,eAAeX,OAAO;gBACxBV,OAAO,CAAC,CAAC,EAAEqB,IAAIC,OAAO,EAAE;YAC1B;YAEA,MAAMjC,gBAAgBc;YACtBT,QAAQI,MAAM,CAACyB,KAAK,CAAC;gBACnBF;gBACArB;YACF;YACA,MAAMqB;QACR;IACF;IAEA,uBAAuB;IAEvB,MAAML,cAAc,MAAMxB,qBAAqB,IAAI;IACnD,IAAIwB,aAAa;QACf,IAAI;YACF,MAAMtB,QAAQuB,MAAM,CAAC;gBACnBE,YAAY;gBACZK,OAAO;oBACLC,OAAO;wBACLC,QAAQ,CAAC;oBACX;gBACF;YACF;QACF,EAAE,OAAOL,KAAc;YACrB3B,QAAQI,MAAM,CAACyB,KAAK,CAAC;gBAAEF;gBAAKrB,KAAK;YAA+B;YAChE,MAAMqB;QACR;IACF;IAEA,OAAO;QAAEpB,UAAU,EAAE;QAAEC;IAAW;AACpC"}
|
package/dist/migrateStatus.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MigrationStatus } from 'payload';
|
|
1
2
|
import type { DrizzleAdapter } from './types.js';
|
|
2
|
-
export declare function migrateStatus(this: DrizzleAdapter): Promise<
|
|
3
|
+
export declare function migrateStatus(this: DrizzleAdapter): Promise<MigrationStatus[]>;
|
|
3
4
|
//# sourceMappingURL=migrateStatus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrateStatus.d.ts","sourceRoot":"","sources":["../src/migrateStatus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrateStatus.d.ts","sourceRoot":"","sources":["../src/migrateStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAK9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAIhD,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA2CpF"}
|
package/dist/migrateStatus.js
CHANGED
|
@@ -21,24 +21,29 @@ export async function migrateStatus() {
|
|
|
21
21
|
payload.logger.info({
|
|
22
22
|
msg: 'No migrations found.'
|
|
23
23
|
});
|
|
24
|
-
return;
|
|
24
|
+
return [];
|
|
25
25
|
}
|
|
26
26
|
// Compare migration files to existing migrations
|
|
27
27
|
const statuses = migrationFiles.map((migration)=>{
|
|
28
28
|
const existingMigration = existingMigrations.find((m)=>m.name === migration.name);
|
|
29
29
|
return {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
name: migration.name,
|
|
31
|
+
batch: existingMigration?.batch,
|
|
32
|
+
ran: Boolean(existingMigration)
|
|
33
33
|
};
|
|
34
34
|
});
|
|
35
35
|
const p = new Table();
|
|
36
36
|
statuses.forEach((s)=>{
|
|
37
|
-
p.addRow(
|
|
38
|
-
|
|
37
|
+
p.addRow({
|
|
38
|
+
Batch: s.batch,
|
|
39
|
+
Name: s.name,
|
|
40
|
+
Ran: s.ran ? 'Yes' : 'No'
|
|
41
|
+
}, {
|
|
42
|
+
color: s.ran ? 'green' : 'red'
|
|
39
43
|
});
|
|
40
44
|
});
|
|
41
45
|
p.printTable();
|
|
46
|
+
return statuses;
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
//# sourceMappingURL=migrateStatus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/migrateStatus.ts"],"sourcesContent":["import { Table } from 'console-table-printer'\nimport { getMigrations, readMigrationFiles } from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\nexport async function migrateStatus(this: DrizzleAdapter): Promise<
|
|
1
|
+
{"version":3,"sources":["../src/migrateStatus.ts"],"sourcesContent":["import type { MigrationStatus } from 'payload'\n\nimport { Table } from 'console-table-printer'\nimport { getMigrations, readMigrationFiles } from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\nexport async function migrateStatus(this: DrizzleAdapter): Promise<MigrationStatus[]> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n payload.logger.debug({\n msg: `Found ${migrationFiles.length} migration files.`,\n })\n\n let existingMigrations = []\n const hasMigrationTable = await migrationTableExists(this)\n\n if (hasMigrationTable) {\n ;({ existingMigrations } = await getMigrations({ payload }))\n }\n\n if (!migrationFiles.length) {\n payload.logger.info({ msg: 'No migrations found.' })\n return []\n }\n\n // Compare migration files to existing migrations\n const statuses = migrationFiles.map((migration) => {\n const existingMigration = existingMigrations.find((m) => m.name === migration.name)\n return {\n name: migration.name,\n batch: existingMigration?.batch,\n ran: Boolean(existingMigration),\n }\n })\n\n const p = new Table()\n\n statuses.forEach((s) => {\n p.addRow(\n { Batch: s.batch, Name: s.name, Ran: s.ran ? 'Yes' : 'No' },\n {\n color: s.ran ? 'green' : 'red',\n },\n )\n })\n p.printTable()\n\n return statuses\n}\n"],"names":["Table","getMigrations","readMigrationFiles","migrationTableExists","migrateStatus","payload","migrationFiles","logger","debug","msg","length","existingMigrations","hasMigrationTable","info","statuses","map","migration","existingMigration","find","m","name","batch","ran","Boolean","p","forEach","s","addRow","Batch","Name","Ran","color","printTable"],"mappings":"AAEA,SAASA,KAAK,QAAQ,wBAAuB;AAC7C,SAASC,aAAa,EAAEC,kBAAkB,QAAQ,UAAS;AAI3D,SAASC,oBAAoB,QAAQ,sCAAqC;AAE1E,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAMJ,mBAAmB;QAAEG;IAAQ;IAE1DA,QAAQE,MAAM,CAACC,KAAK,CAAC;QACnBC,KAAK,CAAC,MAAM,EAAEH,eAAeI,MAAM,CAAC,iBAAiB,CAAC;IACxD;IAEA,IAAIC,qBAAqB,EAAE;IAC3B,MAAMC,oBAAoB,MAAMT,qBAAqB,IAAI;IAEzD,IAAIS,mBAAmB;;QACnB,CAAA,EAAED,kBAAkB,EAAE,GAAG,MAAMV,cAAc;YAAEI;QAAQ,EAAC;IAC5D;IAEA,IAAI,CAACC,eAAeI,MAAM,EAAE;QAC1BL,QAAQE,MAAM,CAACM,IAAI,CAAC;YAAEJ,KAAK;QAAuB;QAClD,OAAO,EAAE;IACX;IAEA,iDAAiD;IACjD,MAAMK,WAAWR,eAAeS,GAAG,CAAC,CAACC;QACnC,MAAMC,oBAAoBN,mBAAmBO,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUI,IAAI;QAClF,OAAO;YACLA,MAAMJ,UAAUI,IAAI;YACpBC,OAAOJ,mBAAmBI;YAC1BC,KAAKC,QAAQN;QACf;IACF;IAEA,MAAMO,IAAI,IAAIxB;IAEdc,SAASW,OAAO,CAAC,CAACC;QAChBF,EAAEG,MAAM,CACN;YAAEC,OAAOF,EAAEL,KAAK;YAAEQ,MAAMH,EAAEN,IAAI;YAAEU,KAAKJ,EAAEJ,GAAG,GAAG,QAAQ;QAAK,GAC1D;YACES,OAAOL,EAAEJ,GAAG,GAAG,UAAU;QAC3B;IAEJ;IACAE,EAAEQ,UAAU;IAEZ,OAAOlB;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAWnC,eAAO,MAAM,IAAI,EAAE,IAqClB,CAAA"}
|
package/dist/postgres/init.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js';
|
|
2
2
|
import { buildRawSchema } from '../schema/buildRawSchema.js';
|
|
3
|
+
import { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js';
|
|
3
4
|
import { executeSchemaHooks } from '../utilities/executeSchemaHooks.js';
|
|
4
5
|
import { buildDrizzleTable } from './schema/buildDrizzleTable.js';
|
|
5
6
|
import { setColumnID } from './schema/setColumnID.js';
|
|
@@ -14,6 +15,11 @@ export const init = async function init() {
|
|
|
14
15
|
type: 'beforeSchemaInit',
|
|
15
16
|
adapter: this
|
|
16
17
|
});
|
|
18
|
+
// Warn on identifiers Postgres will truncate past 63 chars; throw only when two collide.
|
|
19
|
+
checkTruncatedIdentifiers({
|
|
20
|
+
adapter: this,
|
|
21
|
+
logWarnings: process.env.NODE_ENV !== 'production'
|
|
22
|
+
});
|
|
17
23
|
if (this.payload.config.localization) {
|
|
18
24
|
this.enums.enum__locales = this.pgSchema.enum('_locales', this.payload.config.localization.locales.map(({ code })=>code));
|
|
19
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init } from 'payload'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js'\nimport { buildRawSchema } from '../schema/buildRawSchema.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildDrizzleTable } from './schema/buildDrizzleTable.js'\nimport { setColumnID } from './schema/setColumnID.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n this.rawRelations = {}\n this.rawTables = {}\n\n buildRawSchema({\n adapter: this,\n setColumnID,\n })\n\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n for (const tableName in this.rawTables) {\n buildDrizzleTable({ adapter: this, rawTable: this.rawTables[tableName] })\n }\n\n buildDrizzleRelations({\n adapter: this,\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n\n this.schema = {\n pgSchema: this.pgSchema,\n ...this.tables,\n ...this.relations,\n ...this.enums,\n }\n}\n"],"names":["buildDrizzleRelations","buildRawSchema","executeSchemaHooks","buildDrizzleTable","setColumnID","init","rawRelations","rawTables","adapter","type","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","tableName","rawTable","schema","tables","relations"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAErD,OAAO,MAAMC,OAAa,eAAeA;IACvC,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,SAAS,GAAG,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init } from 'payload'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js'\nimport { buildRawSchema } from '../schema/buildRawSchema.js'\nimport { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildDrizzleTable } from './schema/buildDrizzleTable.js'\nimport { setColumnID } from './schema/setColumnID.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n this.rawRelations = {}\n this.rawTables = {}\n\n buildRawSchema({\n adapter: this,\n setColumnID,\n })\n\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n // Warn on identifiers Postgres will truncate past 63 chars; throw only when two collide.\n checkTruncatedIdentifiers({ adapter: this, logWarnings: process.env.NODE_ENV !== 'production' })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n for (const tableName in this.rawTables) {\n buildDrizzleTable({ adapter: this, rawTable: this.rawTables[tableName] })\n }\n\n buildDrizzleRelations({\n adapter: this,\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n\n this.schema = {\n pgSchema: this.pgSchema,\n ...this.tables,\n ...this.relations,\n ...this.enums,\n }\n}\n"],"names":["buildDrizzleRelations","buildRawSchema","checkTruncatedIdentifiers","executeSchemaHooks","buildDrizzleTable","setColumnID","init","rawRelations","rawTables","adapter","type","logWarnings","process","env","NODE_ENV","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","tableName","rawTable","schema","tables","relations"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,yBAAyB,QAAQ,4CAA2C;AACrF,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAErD,OAAO,MAAMC,OAAa,eAAeA;IACvC,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,SAAS,GAAG,CAAC;IAElBP,eAAe;QACbQ,SAAS,IAAI;QACbJ;IACF;IAEA,MAAMF,mBAAmB;QAAEO,MAAM;QAAoBD,SAAS,IAAI;IAAC;IAEnE,yFAAyF;IACzFP,0BAA0B;QAAEO,SAAS,IAAI;QAAEE,aAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK;IAAa;IAE9F,IAAI,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,YAAY,EAAE;QACpC,IAAI,CAACC,KAAK,CAACC,aAAa,GAAG,IAAI,CAACC,QAAQ,CAACC,IAAI,CAC3C,YACA,IAAI,CAACN,OAAO,CAACC,MAAM,CAACC,YAAY,CAACK,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA;IAE/D;IAEA,IAAK,MAAMC,aAAa,IAAI,CAACjB,SAAS,CAAE;QACtCJ,kBAAkB;YAAEK,SAAS,IAAI;YAAEiB,UAAU,IAAI,CAAClB,SAAS,CAACiB,UAAU;QAAC;IACzE;IAEAzB,sBAAsB;QACpBS,SAAS,IAAI;IACf;IAEA,MAAMN,mBAAmB;QAAEO,MAAM;QAAmBD,SAAS,IAAI;IAAC;IAElE,IAAI,CAACkB,MAAM,GAAG;QACZP,UAAU,IAAI,CAACA,QAAQ;QACvB,GAAG,IAAI,CAACQ,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;QACjB,GAAG,IAAI,CAACX,KAAK;IACf;AACF,EAAC"}
|
|
@@ -45,7 +45,7 @@ const runStatementGroup = async ({ adapter, db, debug, statements })=>{
|
|
|
45
45
|
const generatedSQL = await generateMigration(drizzleJsonBefore, drizzleJsonAfter);
|
|
46
46
|
if (!generatedSQL.length) {
|
|
47
47
|
payload.logger.info(`No schema changes needed.`);
|
|
48
|
-
|
|
48
|
+
return;
|
|
49
49
|
}
|
|
50
50
|
const sqlUpStatements = groupUpSQLStatements(generatedSQL);
|
|
51
51
|
const db = await getTransaction(adapter, req);
|
|
@@ -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\nconst runStatementGroup = async ({ adapter, db, debug, statements }) => {\n const addColumnsStatement = statements.join('\\n')\n\n if (debug) {\n adapter.payload.logger.info(debug)\n adapter.payload.logger.info(addColumnsStatement)\n }\n\n await db.execute(sql.raw(addColumnsStatement))\n}\n\n/**\n * Moves upload and relationship columns from the join table and into the tables while moving data\n * This is done in the following order:\n * ADD COLUMNs\n * -- manipulate data to move relationships to new columns\n * ADD CONSTRAINTs\n * NOT NULLs\n * DROP TABLEs\n * DROP CONSTRAINTs\n * DROP COLUMNs\n * @param debug\n * @param payload\n * @param req\n */\nexport const migratePostgresV2toV3 = async ({ debug, payload, req }: Args) => {\n const adapter = payload.db as unknown as BasePostgresAdapter\n const dir = payload.db.migrationDir\n\n // get the drizzle migrateUpSQL from drizzle using the last schema\n const { generateDrizzleJson, generateMigration, upSnapshot } = adapter.requireDrizzleKit()\n 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 await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING TYPES' : null,\n statements: sqlUpStatements.createType,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'ALTERING TYPES' : null,\n statements: sqlUpStatements.alterType,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING TABLES' : null,\n statements: sqlUpStatements.createTable,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'RENAMING COLUMNS' : null,\n statements: sqlUpStatements.renameColumn,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING NEW RELATIONSHIP COLUMNS' : null,\n statements: sqlUpStatements.addColumn,\n })\n\n // SET DEFAULTS\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'SETTING DEFAULTS' : null,\n statements: sqlUpStatements.setDefault,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING INDEXES' : null,\n statements: sqlUpStatements.createIndex,\n })\n\n for (const collection of payload.config.collections) {\n 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 await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'ADDING CONSTRAINTS' : null,\n statements: sqlUpStatements.addConstraint,\n })\n\n // NOT NULL\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'NOT NULL CONSTRAINTS' : null,\n statements: sqlUpStatements.notNull,\n })\n\n // DROP TABLE\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING TABLES' : null,\n statements: sqlUpStatements.dropTable,\n })\n\n // DROP INDEX\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING INDEXES' : null,\n statements: sqlUpStatements.dropIndex,\n })\n\n // DROP CONSTRAINT\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING CONSTRAINTS' : null,\n statements: sqlUpStatements.dropConstraint,\n })\n\n // DROP COLUMN\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING COLUMNS' : null,\n statements: sqlUpStatements.dropColumn,\n })\n\n // DROP TYPES\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING TYPES' : null,\n statements: sqlUpStatements.dropType,\n })\n}\n"],"names":["sql","fs","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","getTransaction","groupUpSQLStatements","migrateRelationships","traverseFields","runStatementGroup","adapter","db","debug","statements","addColumnsStatement","join","payload","logger","info","execute","raw","migratePostgresV2toV3","req","dir","migrationDir","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","drizzleJsonAfter","schema","previousSnapshot","readdirSync","filter","file","endsWith","sort","reverse","Error","drizzleJsonBefore","JSON","parse","readFileSync","version","generatedSQL","length","process","exit","sqlUpStatements","createType","alterType","createTable","renameColumn","addColumn","setDefault","createIndex","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","addConstraint","notNull","dropTable","dropIndex","dropConstraint","dropColumn","dropType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/postgres/predefinedMigrations/v2-v3/index.ts"],"sourcesContent":["import type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { Payload, PayloadRequest } from 'payload'\n\nimport { sql } from 'drizzle-orm'\nimport fs from 'fs'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BasePostgresAdapter } from '../../types.js'\nimport type { PathsToQuery } from './types.js'\n\nimport { getTransaction } from '../../../utilities/getTransaction.js'\nimport { groupUpSQLStatements } from './groupUpSQLStatements.js'\nimport { migrateRelationships } from './migrateRelationships.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n debug?: boolean\n payload: Payload\n req?: Partial<PayloadRequest>\n}\n\nconst runStatementGroup = async ({ adapter, db, debug, statements }) => {\n const addColumnsStatement = statements.join('\\n')\n\n if (debug) {\n adapter.payload.logger.info(debug)\n adapter.payload.logger.info(addColumnsStatement)\n }\n\n await db.execute(sql.raw(addColumnsStatement))\n}\n\n/**\n * Moves upload and relationship columns from the join table and into the tables while moving data\n * This is done in the following order:\n * ADD COLUMNs\n * -- manipulate data to move relationships to new columns\n * ADD CONSTRAINTs\n * NOT NULLs\n * DROP TABLEs\n * DROP CONSTRAINTs\n * DROP COLUMNs\n * @param debug\n * @param payload\n * @param req\n */\nexport const migratePostgresV2toV3 = async ({ debug, payload, req }: Args) => {\n const adapter = payload.db as unknown as BasePostgresAdapter\n const dir = payload.db.migrationDir\n\n // get the drizzle migrateUpSQL from drizzle using the last schema\n const { generateDrizzleJson, generateMigration, upSnapshot } = adapter.requireDrizzleKit()\n 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 return\n }\n\n const sqlUpStatements = groupUpSQLStatements(generatedSQL)\n\n const db = await getTransaction(adapter, req)\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING TYPES' : null,\n statements: sqlUpStatements.createType,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'ALTERING TYPES' : null,\n statements: sqlUpStatements.alterType,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING TABLES' : null,\n statements: sqlUpStatements.createTable,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'RENAMING COLUMNS' : null,\n statements: sqlUpStatements.renameColumn,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING NEW RELATIONSHIP COLUMNS' : null,\n statements: sqlUpStatements.addColumn,\n })\n\n // SET DEFAULTS\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'SETTING DEFAULTS' : null,\n statements: sqlUpStatements.setDefault,\n })\n\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'CREATING INDEXES' : null,\n statements: sqlUpStatements.createIndex,\n })\n\n for (const collection of payload.config.collections) {\n 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 await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'ADDING CONSTRAINTS' : null,\n statements: sqlUpStatements.addConstraint,\n })\n\n // NOT NULL\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'NOT NULL CONSTRAINTS' : null,\n statements: sqlUpStatements.notNull,\n })\n\n // DROP TABLE\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING TABLES' : null,\n statements: sqlUpStatements.dropTable,\n })\n\n // DROP INDEX\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING INDEXES' : null,\n statements: sqlUpStatements.dropIndex,\n })\n\n // DROP CONSTRAINT\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING CONSTRAINTS' : null,\n statements: sqlUpStatements.dropConstraint,\n })\n\n // DROP COLUMN\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING COLUMNS' : null,\n statements: sqlUpStatements.dropColumn,\n })\n\n // DROP TYPES\n await runStatementGroup({\n adapter,\n db,\n debug: debug ? 'DROPPING TYPES' : null,\n statements: sqlUpStatements.dropType,\n })\n}\n"],"names":["sql","fs","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","getTransaction","groupUpSQLStatements","migrateRelationships","traverseFields","runStatementGroup","adapter","db","debug","statements","addColumnsStatement","join","payload","logger","info","execute","raw","migratePostgresV2toV3","req","dir","migrationDir","generateDrizzleJson","generateMigration","upSnapshot","requireDrizzleKit","drizzleJsonAfter","schema","previousSnapshot","readdirSync","filter","file","endsWith","sort","reverse","Error","drizzleJsonBefore","JSON","parse","readFileSync","version","generatedSQL","length","sqlUpStatements","createType","alterType","createTable","renameColumn","addColumn","setDefault","createIndex","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","addConstraint","notNull","dropTable","dropIndex","dropConstraint","dropColumn","dropType"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PostgresDB } from '../../types.js';
|
|
2
|
+
import type { PostgresOperatorHandler } from '../types.js';
|
|
3
|
+
type Args = {
|
|
4
|
+
drizzle: PostgresDB;
|
|
5
|
+
operatorHandlers: PostgresOperatorHandler[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Confirms every Postgres extension named in an operator handler's `requiredExtensions` is
|
|
9
|
+
* installed in the connected database. Runs once per connect, after `createExtensions` has had a
|
|
10
|
+
* chance to install any extension declared in the adapter's `extensions` option - an extension
|
|
11
|
+
* that was installed by hand, without ever being declared there, still satisfies this check.
|
|
12
|
+
*/
|
|
13
|
+
export declare const assertOperatorHandlerExtensionsInstalled: ({ drizzle, operatorHandlers, }: Args) => Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=assertOperatorHandlerExtensionsInstalled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertOperatorHandlerExtensionsInstalled.d.ts","sourceRoot":"","sources":["../../../src/postgres/query/assertOperatorHandlerExtensionsInstalled.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE1D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,UAAU,CAAA;IACnB,gBAAgB,EAAE,uBAAuB,EAAE,CAAA;CAC5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,mCAGlD,IAAI,KAAG,OAAO,CAAC,IAAI,CAqBrB,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { APIError } from 'payload';
|
|
3
|
+
/**
|
|
4
|
+
* Confirms every Postgres extension named in an operator handler's `requiredExtensions` is
|
|
5
|
+
* installed in the connected database. Runs once per connect, after `createExtensions` has had a
|
|
6
|
+
* chance to install any extension declared in the adapter's `extensions` option - an extension
|
|
7
|
+
* that was installed by hand, without ever being declared there, still satisfies this check.
|
|
8
|
+
*/ export const assertOperatorHandlerExtensionsInstalled = async ({ drizzle, operatorHandlers })=>{
|
|
9
|
+
const requiredExtensionsByHandler = operatorHandlers.flatMap((handler)=>(handler.requiredExtensions ?? []).map((extensionName)=>({
|
|
10
|
+
extensionName,
|
|
11
|
+
handler
|
|
12
|
+
})));
|
|
13
|
+
if (!requiredExtensionsByHandler.length) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const { rows: installedExtensionRows } = await drizzle.execute(sql`SELECT extname FROM pg_extension`);
|
|
17
|
+
const installedExtensions = new Set(installedExtensionRows.map((row)=>row.extname));
|
|
18
|
+
for (const { extensionName, handler } of requiredExtensionsByHandler){
|
|
19
|
+
if (!installedExtensions.has(extensionName)) {
|
|
20
|
+
throw new APIError(`Operator handler "${handler.name}" requires the "${extensionName}" Postgres extension, which is not installed on this database. Add it to the adapter's "extensions" option, or install it manually with CREATE EXTENSION.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=assertOperatorHandlerExtensionsInstalled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/postgres/query/assertOperatorHandlerExtensionsInstalled.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\nimport { APIError } from 'payload'\n\nimport type { PostgresDB } from '../../types.js'\nimport type { PostgresOperatorHandler } from '../types.js'\n\ntype Args = {\n drizzle: PostgresDB\n operatorHandlers: PostgresOperatorHandler[]\n}\n\n/**\n * Confirms every Postgres extension named in an operator handler's `requiredExtensions` is\n * installed in the connected database. Runs once per connect, after `createExtensions` has had a\n * chance to install any extension declared in the adapter's `extensions` option - an extension\n * that was installed by hand, without ever being declared there, still satisfies this check.\n */\nexport const assertOperatorHandlerExtensionsInstalled = async ({\n drizzle,\n operatorHandlers,\n}: Args): Promise<void> => {\n const requiredExtensionsByHandler = operatorHandlers.flatMap((handler) =>\n (handler.requiredExtensions ?? []).map((extensionName) => ({ extensionName, handler })),\n )\n\n if (!requiredExtensionsByHandler.length) {\n return\n }\n\n const { rows: installedExtensionRows } = await drizzle.execute<{ extname: string }>(\n sql`SELECT extname FROM pg_extension`,\n )\n const installedExtensions = new Set(installedExtensionRows.map((row) => row.extname))\n\n for (const { extensionName, handler } of requiredExtensionsByHandler) {\n if (!installedExtensions.has(extensionName)) {\n throw new APIError(\n `Operator handler \"${handler.name}\" requires the \"${extensionName}\" Postgres extension, which is not installed on this database. Add it to the adapter's \"extensions\" option, or install it manually with CREATE EXTENSION.`,\n )\n }\n }\n}\n"],"names":["sql","APIError","assertOperatorHandlerExtensionsInstalled","drizzle","operatorHandlers","requiredExtensionsByHandler","flatMap","handler","requiredExtensions","map","extensionName","length","rows","installedExtensionRows","execute","installedExtensions","Set","row","extname","has","name"],"mappings":"AAAA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,QAAQ,QAAQ,UAAS;AAUlC;;;;;CAKC,GACD,OAAO,MAAMC,2CAA2C,OAAO,EAC7DC,OAAO,EACPC,gBAAgB,EACX;IACL,MAAMC,8BAA8BD,iBAAiBE,OAAO,CAAC,CAACC,UAC5D,AAACA,CAAAA,QAAQC,kBAAkB,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,gBAAmB,CAAA;gBAAEA;gBAAeH;YAAQ,CAAA;IAGtF,IAAI,CAACF,4BAA4BM,MAAM,EAAE;QACvC;IACF;IAEA,MAAM,EAAEC,MAAMC,sBAAsB,EAAE,GAAG,MAAMV,QAAQW,OAAO,CAC5Dd,GAAG,CAAC,gCAAgC,CAAC;IAEvC,MAAMe,sBAAsB,IAAIC,IAAIH,uBAAuBJ,GAAG,CAAC,CAACQ,MAAQA,IAAIC,OAAO;IAEnF,KAAK,MAAM,EAAER,aAAa,EAAEH,OAAO,EAAE,IAAIF,4BAA6B;QACpE,IAAI,CAACU,oBAAoBI,GAAG,CAACT,gBAAgB;YAC3C,MAAM,IAAIT,SACR,CAAC,kBAAkB,EAAEM,QAAQa,IAAI,CAAC,gBAAgB,EAAEV,cAAc,yJAAyJ,CAAC;QAEhO;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { assertOperatorHandlerExtensionsInstalled } from './assertOperatorHandlerExtensionsInstalled.js';
|
|
3
|
+
const transformHandler = (overrides = {})=>({
|
|
4
|
+
name: 'transform',
|
|
5
|
+
operators: [
|
|
6
|
+
'contains'
|
|
7
|
+
],
|
|
8
|
+
transformOperands: ({ column, value })=>({
|
|
9
|
+
column,
|
|
10
|
+
value
|
|
11
|
+
}),
|
|
12
|
+
...overrides
|
|
13
|
+
});
|
|
14
|
+
const drizzleWithInstalledExtensions = (installedExtensions)=>({
|
|
15
|
+
execute: vi.fn().mockResolvedValue({
|
|
16
|
+
rows: installedExtensions.map((extname)=>({
|
|
17
|
+
extname
|
|
18
|
+
}))
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
describe('assertOperatorHandlerExtensionsInstalled', ()=>{
|
|
22
|
+
it('does not query the database when no handler declares requiredExtensions', async ()=>{
|
|
23
|
+
const drizzle = drizzleWithInstalledExtensions([]);
|
|
24
|
+
await expect(assertOperatorHandlerExtensionsInstalled({
|
|
25
|
+
drizzle: drizzle,
|
|
26
|
+
operatorHandlers: [
|
|
27
|
+
transformHandler({
|
|
28
|
+
requiredExtensions: undefined
|
|
29
|
+
})
|
|
30
|
+
]
|
|
31
|
+
})).resolves.toBeUndefined();
|
|
32
|
+
expect(drizzle.execute).not.toHaveBeenCalled();
|
|
33
|
+
});
|
|
34
|
+
it('does not throw for a handler requiring an extension installed in the database', async ()=>{
|
|
35
|
+
const drizzle = drizzleWithInstalledExtensions([
|
|
36
|
+
'unaccent'
|
|
37
|
+
]);
|
|
38
|
+
await expect(assertOperatorHandlerExtensionsInstalled({
|
|
39
|
+
drizzle: drizzle,
|
|
40
|
+
operatorHandlers: [
|
|
41
|
+
transformHandler({
|
|
42
|
+
requiredExtensions: [
|
|
43
|
+
'unaccent'
|
|
44
|
+
]
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
})).resolves.toBeUndefined();
|
|
48
|
+
});
|
|
49
|
+
it('throws for a handler requiring an extension absent from the database, naming the handler and the missing extension', async ()=>{
|
|
50
|
+
const drizzle = drizzleWithInstalledExtensions([]);
|
|
51
|
+
await expect(assertOperatorHandlerExtensionsInstalled({
|
|
52
|
+
drizzle: drizzle,
|
|
53
|
+
operatorHandlers: [
|
|
54
|
+
transformHandler({
|
|
55
|
+
name: 'postgres-unaccent',
|
|
56
|
+
requiredExtensions: [
|
|
57
|
+
'unaccent'
|
|
58
|
+
]
|
|
59
|
+
})
|
|
60
|
+
]
|
|
61
|
+
})).rejects.toThrow(/postgres-unaccent/);
|
|
62
|
+
await expect(assertOperatorHandlerExtensionsInstalled({
|
|
63
|
+
drizzle: drizzle,
|
|
64
|
+
operatorHandlers: [
|
|
65
|
+
transformHandler({
|
|
66
|
+
name: 'postgres-unaccent',
|
|
67
|
+
requiredExtensions: [
|
|
68
|
+
'unaccent'
|
|
69
|
+
]
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
})).rejects.toThrow(/unaccent/);
|
|
73
|
+
});
|
|
74
|
+
it('does not throw when the extension is installed even though it is not declared in any config option', async ()=>{
|
|
75
|
+
const drizzle = drizzleWithInstalledExtensions([
|
|
76
|
+
'unaccent'
|
|
77
|
+
]);
|
|
78
|
+
await expect(assertOperatorHandlerExtensionsInstalled({
|
|
79
|
+
drizzle: drizzle,
|
|
80
|
+
operatorHandlers: [
|
|
81
|
+
transformHandler({
|
|
82
|
+
requiredExtensions: [
|
|
83
|
+
'unaccent'
|
|
84
|
+
]
|
|
85
|
+
})
|
|
86
|
+
]
|
|
87
|
+
})).resolves.toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=assertOperatorHandlerExtensionsInstalled.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.ts"],"sourcesContent":["import { describe, expect, it, vi } from 'vitest'\n\nimport type { PostgresOperatorHandler } from '../types.js'\n\nimport { assertOperatorHandlerExtensionsInstalled } from './assertOperatorHandlerExtensionsInstalled.js'\n\nconst transformHandler = (\n overrides: Partial<PostgresOperatorHandler> = {},\n): PostgresOperatorHandler =>\n ({\n name: 'transform',\n operators: ['contains'],\n transformOperands: ({ column, value }) => ({ column, value }),\n ...overrides,\n }) as PostgresOperatorHandler\n\nconst drizzleWithInstalledExtensions = (installedExtensions: string[]) => ({\n execute: vi.fn().mockResolvedValue({\n rows: installedExtensions.map((extname) => ({ extname })),\n }),\n})\n\ndescribe('assertOperatorHandlerExtensionsInstalled', () => {\n it('does not query the database when no handler declares requiredExtensions', async () => {\n const drizzle = drizzleWithInstalledExtensions([])\n\n await expect(\n assertOperatorHandlerExtensionsInstalled({\n drizzle: drizzle as any,\n operatorHandlers: [transformHandler({ requiredExtensions: undefined })],\n }),\n ).resolves.toBeUndefined()\n\n expect(drizzle.execute).not.toHaveBeenCalled()\n })\n\n it('does not throw for a handler requiring an extension installed in the database', async () => {\n const drizzle = drizzleWithInstalledExtensions(['unaccent'])\n\n await expect(\n assertOperatorHandlerExtensionsInstalled({\n drizzle: drizzle as any,\n operatorHandlers: [transformHandler({ requiredExtensions: ['unaccent'] })],\n }),\n ).resolves.toBeUndefined()\n })\n\n it('throws for a handler requiring an extension absent from the database, naming the handler and the missing extension', async () => {\n const drizzle = drizzleWithInstalledExtensions([])\n\n await expect(\n assertOperatorHandlerExtensionsInstalled({\n drizzle: drizzle as any,\n operatorHandlers: [\n transformHandler({ name: 'postgres-unaccent', requiredExtensions: ['unaccent'] }),\n ],\n }),\n ).rejects.toThrow(/postgres-unaccent/)\n\n await expect(\n assertOperatorHandlerExtensionsInstalled({\n drizzle: drizzle as any,\n operatorHandlers: [\n transformHandler({ name: 'postgres-unaccent', requiredExtensions: ['unaccent'] }),\n ],\n }),\n ).rejects.toThrow(/unaccent/)\n })\n\n it('does not throw when the extension is installed even though it is not declared in any config option', async () => {\n const drizzle = drizzleWithInstalledExtensions(['unaccent'])\n\n await expect(\n assertOperatorHandlerExtensionsInstalled({\n drizzle: drizzle as any,\n operatorHandlers: [transformHandler({ requiredExtensions: ['unaccent'] })],\n }),\n ).resolves.toBeUndefined()\n })\n})\n"],"names":["describe","expect","it","vi","assertOperatorHandlerExtensionsInstalled","transformHandler","overrides","name","operators","transformOperands","column","value","drizzleWithInstalledExtensions","installedExtensions","execute","fn","mockResolvedValue","rows","map","extname","drizzle","operatorHandlers","requiredExtensions","undefined","resolves","toBeUndefined","not","toHaveBeenCalled","rejects","toThrow"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,SAAQ;AAIjD,SAASC,wCAAwC,QAAQ,gDAA+C;AAExG,MAAMC,mBAAmB,CACvBC,YAA8C,CAAC,CAAC,GAE/C,CAAA;QACCC,MAAM;QACNC,WAAW;YAAC;SAAW;QACvBC,mBAAmB,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAM,CAAA;gBAAED;gBAAQC;YAAM,CAAA;QAC3D,GAAGL,SAAS;IACd,CAAA;AAEF,MAAMM,iCAAiC,CAACC,sBAAmC,CAAA;QACzEC,SAASX,GAAGY,EAAE,GAAGC,iBAAiB,CAAC;YACjCC,MAAMJ,oBAAoBK,GAAG,CAAC,CAACC,UAAa,CAAA;oBAAEA;gBAAQ,CAAA;QACxD;IACF,CAAA;AAEAnB,SAAS,4CAA4C;IACnDE,GAAG,2EAA2E;QAC5E,MAAMkB,UAAUR,+BAA+B,EAAE;QAEjD,MAAMX,OACJG,yCAAyC;YACvCgB,SAASA;YACTC,kBAAkB;gBAAChB,iBAAiB;oBAAEiB,oBAAoBC;gBAAU;aAAG;QACzE,IACAC,QAAQ,CAACC,aAAa;QAExBxB,OAAOmB,QAAQN,OAAO,EAAEY,GAAG,CAACC,gBAAgB;IAC9C;IAEAzB,GAAG,iFAAiF;QAClF,MAAMkB,UAAUR,+BAA+B;YAAC;SAAW;QAE3D,MAAMX,OACJG,yCAAyC;YACvCgB,SAASA;YACTC,kBAAkB;gBAAChB,iBAAiB;oBAAEiB,oBAAoB;wBAAC;qBAAW;gBAAC;aAAG;QAC5E,IACAE,QAAQ,CAACC,aAAa;IAC1B;IAEAvB,GAAG,sHAAsH;QACvH,MAAMkB,UAAUR,+BAA+B,EAAE;QAEjD,MAAMX,OACJG,yCAAyC;YACvCgB,SAASA;YACTC,kBAAkB;gBAChBhB,iBAAiB;oBAAEE,MAAM;oBAAqBe,oBAAoB;wBAAC;qBAAW;gBAAC;aAChF;QACH,IACAM,OAAO,CAACC,OAAO,CAAC;QAElB,MAAM5B,OACJG,yCAAyC;YACvCgB,SAASA;YACTC,kBAAkB;gBAChBhB,iBAAiB;oBAAEE,MAAM;oBAAqBe,oBAAoB;wBAAC;qBAAW;gBAAC;aAChF;QACH,IACAM,OAAO,CAACC,OAAO,CAAC;IACpB;IAEA3B,GAAG,sGAAsG;QACvG,MAAMkB,UAAUR,+BAA+B;YAAC;SAAW;QAE3D,MAAMX,OACJG,yCAAyC;YACvCgB,SAASA;YACTC,kBAAkB;gBAAChB,iBAAiB;oBAAEiB,oBAAoB;wBAAC;qBAAW;gBAAC;aAAG;QAC5E,IACAE,QAAQ,CAACC,aAAa;IAC1B;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PostgresOperatorHandler } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Makes Postgres `contains`, `like`, and `not_like` text comparisons accent-insensitive by
|
|
4
|
+
* wrapping both operands in `unaccent(...)`. Requires the `unaccent` extension to be installed in
|
|
5
|
+
* the database - list it in the adapter's `extensions` option to have Payload install it for you.
|
|
6
|
+
*
|
|
7
|
+
* Skips native `uuid` columns: a default or custom UUID/UUIDv7 `id` field is reported as a
|
|
8
|
+
* `text`-type field by Payload even though it is stored as a `uuid` column, so `fieldTypes`
|
|
9
|
+
* alone cannot exclude it. A genuine custom `text`/`varchar` `id` column is not a `PgUUID`
|
|
10
|
+
* column and still receives accent-insensitive matching.
|
|
11
|
+
*/
|
|
12
|
+
export declare const postgresUnaccent: () => PostgresOperatorHandler;
|
|
13
|
+
//# sourceMappingURL=postgresUnaccent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresUnaccent.d.ts","sourceRoot":"","sources":["../../../src/postgres/query/postgresUnaccent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,QAAO,uBAelC,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { PgUUID } from 'drizzle-orm/pg-core';
|
|
3
|
+
/**
|
|
4
|
+
* Makes Postgres `contains`, `like`, and `not_like` text comparisons accent-insensitive by
|
|
5
|
+
* wrapping both operands in `unaccent(...)`. Requires the `unaccent` extension to be installed in
|
|
6
|
+
* the database - list it in the adapter's `extensions` option to have Payload install it for you.
|
|
7
|
+
*
|
|
8
|
+
* Skips native `uuid` columns: a default or custom UUID/UUIDv7 `id` field is reported as a
|
|
9
|
+
* `text`-type field by Payload even though it is stored as a `uuid` column, so `fieldTypes`
|
|
10
|
+
* alone cannot exclude it. A genuine custom `text`/`varchar` `id` column is not a `PgUUID`
|
|
11
|
+
* column and still receives accent-insensitive matching.
|
|
12
|
+
*/ export const postgresUnaccent = ()=>({
|
|
13
|
+
name: 'postgres-unaccent',
|
|
14
|
+
fieldTypes: [
|
|
15
|
+
'text',
|
|
16
|
+
'textarea'
|
|
17
|
+
],
|
|
18
|
+
operators: [
|
|
19
|
+
'contains',
|
|
20
|
+
'like',
|
|
21
|
+
'not_like'
|
|
22
|
+
],
|
|
23
|
+
requiredExtensions: [
|
|
24
|
+
'unaccent'
|
|
25
|
+
],
|
|
26
|
+
transformOperands: ({ column, value })=>{
|
|
27
|
+
if (column instanceof PgUUID) {
|
|
28
|
+
return {
|
|
29
|
+
column,
|
|
30
|
+
value
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
column: sql`unaccent(${column})`,
|
|
35
|
+
value: sql`unaccent(${value})`
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=postgresUnaccent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/postgres/query/postgresUnaccent.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\nimport { PgUUID } from 'drizzle-orm/pg-core'\n\nimport type { PostgresOperatorHandler } from '../types.js'\n\n/**\n * Makes Postgres `contains`, `like`, and `not_like` text comparisons accent-insensitive by\n * wrapping both operands in `unaccent(...)`. Requires the `unaccent` extension to be installed in\n * the database - list it in the adapter's `extensions` option to have Payload install it for you.\n *\n * Skips native `uuid` columns: a default or custom UUID/UUIDv7 `id` field is reported as a\n * `text`-type field by Payload even though it is stored as a `uuid` column, so `fieldTypes`\n * alone cannot exclude it. A genuine custom `text`/`varchar` `id` column is not a `PgUUID`\n * column and still receives accent-insensitive matching.\n */\nexport const postgresUnaccent = (): PostgresOperatorHandler => ({\n name: 'postgres-unaccent',\n fieldTypes: ['text', 'textarea'],\n operators: ['contains', 'like', 'not_like'],\n requiredExtensions: ['unaccent'],\n transformOperands: ({ column, value }) => {\n if (column instanceof PgUUID) {\n return { column, value }\n }\n\n return {\n column: sql`unaccent(${column})`,\n value: sql`unaccent(${value})`,\n }\n },\n})\n"],"names":["sql","PgUUID","postgresUnaccent","name","fieldTypes","operators","requiredExtensions","transformOperands","column","value"],"mappings":"AAAA,SAASA,GAAG,QAAQ,cAAa;AACjC,SAASC,MAAM,QAAQ,sBAAqB;AAI5C;;;;;;;;;CASC,GACD,OAAO,MAAMC,mBAAmB,IAAgC,CAAA;QAC9DC,MAAM;QACNC,YAAY;YAAC;YAAQ;SAAW;QAChCC,WAAW;YAAC;YAAY;YAAQ;SAAW;QAC3CC,oBAAoB;YAAC;SAAW;QAChCC,mBAAmB,CAAC,EAAEC,MAAM,EAAEC,KAAK,EAAE;YACnC,IAAID,kBAAkBP,QAAQ;gBAC5B,OAAO;oBAAEO;oBAAQC;gBAAM;YACzB;YAEA,OAAO;gBACLD,QAAQR,GAAG,CAAC,SAAS,EAAEQ,OAAO,CAAC,CAAC;gBAChCC,OAAOT,GAAG,CAAC,SAAS,EAAES,MAAM,CAAC,CAAC;YAChC;QACF;IACF,CAAA,EAAE"}
|