@payloadcms/drizzle 3.6.1-canary.ca44922 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/postgres/createMigration.d.ts +3 -0
- package/dist/postgres/createMigration.d.ts.map +1 -0
- package/dist/postgres/createMigration.js +91 -0
- package/dist/postgres/createMigration.js.map +1 -0
- package/dist/postgres/getMigrationTemplate.d.ts +4 -0
- package/dist/postgres/getMigrationTemplate.d.ts.map +1 -0
- package/dist/postgres/getMigrationTemplate.js +13 -0
- package/dist/postgres/getMigrationTemplate.js.map +1 -0
- package/package.json +3 -3
- package/dist/utilities/createSchemaGenerator.d.ts +0 -7
- package/dist/utilities/createSchemaGenerator.d.ts.map +0 -1
- package/dist/utilities/createSchemaGenerator.js +0 -133
- package/dist/utilities/createSchemaGenerator.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -36,7 +36,6 @@ export { updateVersion } from './updateVersion.js';
|
|
|
36
36
|
export { upsertRow } from './upsertRow/index.js';
|
|
37
37
|
export { buildCreateMigration } from './utilities/buildCreateMigration.js';
|
|
38
38
|
export { buildIndexName } from './utilities/buildIndexName.js';
|
|
39
|
-
export { createSchemaGenerator } from './utilities/createSchemaGenerator.js';
|
|
40
39
|
export { executeSchemaHooks } from './utilities/executeSchemaHooks.js';
|
|
41
40
|
export { extendDrizzleTable } from './utilities/extendDrizzleTable.js';
|
|
42
41
|
export { hasLocalesTable } from './utilities/hasLocalesTable.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,6 @@ export { updateVersion } from './updateVersion.js';
|
|
|
35
35
|
export { upsertRow } from './upsertRow/index.js';
|
|
36
36
|
export { buildCreateMigration } from './utilities/buildCreateMigration.js';
|
|
37
37
|
export { buildIndexName } from './utilities/buildIndexName.js';
|
|
38
|
-
export { createSchemaGenerator } from './utilities/createSchemaGenerator.js';
|
|
39
38
|
export { executeSchemaHooks } from './utilities/executeSchemaHooks.js';
|
|
40
39
|
export { extendDrizzleTable } from './utilities/extendDrizzleTable.js';
|
|
41
40
|
export { hasLocalesTable } from './utilities/hasLocalesTable.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { count } from './count.js'\nexport { countGlobalVersions } from './countGlobalVersions.js'\nexport { countVersions } from './countVersions.js'\nexport { create } from './create.js'\nexport { createGlobal } from './createGlobal.js'\nexport { createGlobalVersion } from './createGlobalVersion.js'\nexport { createTableName } from './createTableName.js'\nexport { createVersion } from './createVersion.js'\nexport { deleteMany } from './deleteMany.js'\nexport { deleteOne } from './deleteOne.js'\nexport { deleteVersions } from './deleteVersions.js'\nexport { destroy } from './destroy.js'\nexport { find } from './find.js'\nexport { chainMethods } from './find/chainMethods.js'\nexport { findGlobal } from './findGlobal.js'\nexport { findGlobalVersions } from './findGlobalVersions.js'\nexport { findMigrationDir } from './findMigrationDir.js'\nexport { findOne } from './findOne.js'\nexport { findVersions } from './findVersions.js'\nexport { migrate } from './migrate.js'\nexport { migrateDown } from './migrateDown.js'\nexport { migrateFresh } from './migrateFresh.js'\nexport { migrateRefresh } from './migrateRefresh.js'\nexport { migrateReset } from './migrateReset.js'\nexport { migrateStatus } from './migrateStatus.js'\nexport { operatorMap } from './queries/operatorMap.js'\nexport type { Operators } from './queries/operatorMap.js'\nexport { queryDrafts } from './queryDrafts.js'\nexport { beginTransaction } from './transactions/beginTransaction.js'\nexport { commitTransaction } from './transactions/commitTransaction.js'\nexport { rollbackTransaction } from './transactions/rollbackTransaction.js'\nexport { updateOne } from './update.js'\nexport { updateGlobal } from './updateGlobal.js'\nexport { updateGlobalVersion } from './updateGlobalVersion.js'\nexport { updateVersion } from './updateVersion.js'\nexport { upsertRow } from './upsertRow/index.js'\nexport { buildCreateMigration } from './utilities/buildCreateMigration.js'\nexport { buildIndexName } from './utilities/buildIndexName.js'\nexport {
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { count } from './count.js'\nexport { countGlobalVersions } from './countGlobalVersions.js'\nexport { countVersions } from './countVersions.js'\nexport { create } from './create.js'\nexport { createGlobal } from './createGlobal.js'\nexport { createGlobalVersion } from './createGlobalVersion.js'\nexport { createTableName } from './createTableName.js'\nexport { createVersion } from './createVersion.js'\nexport { deleteMany } from './deleteMany.js'\nexport { deleteOne } from './deleteOne.js'\nexport { deleteVersions } from './deleteVersions.js'\nexport { destroy } from './destroy.js'\nexport { find } from './find.js'\nexport { chainMethods } from './find/chainMethods.js'\nexport { findGlobal } from './findGlobal.js'\nexport { findGlobalVersions } from './findGlobalVersions.js'\nexport { findMigrationDir } from './findMigrationDir.js'\nexport { findOne } from './findOne.js'\nexport { findVersions } from './findVersions.js'\nexport { migrate } from './migrate.js'\nexport { migrateDown } from './migrateDown.js'\nexport { migrateFresh } from './migrateFresh.js'\nexport { migrateRefresh } from './migrateRefresh.js'\nexport { migrateReset } from './migrateReset.js'\nexport { migrateStatus } from './migrateStatus.js'\nexport { operatorMap } from './queries/operatorMap.js'\nexport type { Operators } from './queries/operatorMap.js'\nexport { queryDrafts } from './queryDrafts.js'\nexport { beginTransaction } from './transactions/beginTransaction.js'\nexport { commitTransaction } from './transactions/commitTransaction.js'\nexport { rollbackTransaction } from './transactions/rollbackTransaction.js'\nexport { updateOne } from './update.js'\nexport { updateGlobal } from './updateGlobal.js'\nexport { updateGlobalVersion } from './updateGlobalVersion.js'\nexport { updateVersion } from './updateVersion.js'\nexport { upsertRow } from './upsertRow/index.js'\nexport { buildCreateMigration } from './utilities/buildCreateMigration.js'\nexport { buildIndexName } from './utilities/buildIndexName.js'\nexport { executeSchemaHooks } from './utilities/executeSchemaHooks.js'\nexport { extendDrizzleTable } from './utilities/extendDrizzleTable.js'\nexport { hasLocalesTable } from './utilities/hasLocalesTable.js'\nexport { pushDevSchema } from './utilities/pushDevSchema.js'\nexport { validateExistingBlockIsIdentical } from './utilities/validateExistingBlockIsIdentical.js'\n"],"names":["count","countGlobalVersions","countVersions","create","createGlobal","createGlobalVersion","createTableName","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","chainMethods","findGlobal","findGlobalVersions","findMigrationDir","findOne","findVersions","migrate","migrateDown","migrateFresh","migrateRefresh","migrateReset","migrateStatus","operatorMap","queryDrafts","beginTransaction","commitTransaction","rollbackTransaction","updateOne","updateGlobal","updateGlobalVersion","updateVersion","upsertRow","buildCreateMigration","buildIndexName","executeSchemaHooks","extendDrizzleTable","hasLocalesTable","pushDevSchema","validateExistingBlockIsIdentical"],"mappings":"AAAA,SAASA,KAAK,QAAQ,aAAY;AAClC,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,MAAM,QAAQ,cAAa;AACpC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,IAAI,QAAQ,YAAW;AAChC,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,WAAW,QAAQ,2BAA0B;AAEtD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,gBAAgB,QAAQ,qCAAoC;AACrE,SAASC,iBAAiB,QAAQ,sCAAqC;AACvE,SAASC,mBAAmB,QAAQ,wCAAuC;AAC3E,SAASC,SAAS,QAAQ,cAAa;AACvC,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,eAAe,QAAQ,iCAAgC;AAChE,SAASC,aAAa,QAAQ,+BAA8B;AAC5D,SAASC,gCAAgC,QAAQ,kDAAiD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMigration.d.ts","sourceRoot":"","sources":["../../src/postgres/createMigration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAc9C,eAAO,MAAM,eAAe,EAAE,eA2G7B,CAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import { getPredefinedMigration, writeMigrationIndex } from 'payload';
|
|
4
|
+
import prompts from 'prompts';
|
|
5
|
+
import { defaultDrizzleSnapshot } from './defaultSnapshot.js';
|
|
6
|
+
import { getMigrationTemplate } from './getMigrationTemplate.js';
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
export const createMigration = async function createMigration({ dirname, file, forceAcceptWarning, migrationName, payload, skipEmpty }) {
|
|
9
|
+
const dir = payload.db.migrationDir;
|
|
10
|
+
if (!fs.existsSync(dir)) {
|
|
11
|
+
fs.mkdirSync(dir);
|
|
12
|
+
}
|
|
13
|
+
const { generateDrizzleJson, generateMigration, upPgSnapshot } = require('drizzle-kit/api');
|
|
14
|
+
const drizzleJsonAfter = generateDrizzleJson(this.schema);
|
|
15
|
+
const [yyymmdd, hhmmss] = new Date().toISOString().split('T');
|
|
16
|
+
const formattedDate = yyymmdd.replace(/\D/g, '');
|
|
17
|
+
const formattedTime = hhmmss.split('.')[0].replace(/\D/g, '');
|
|
18
|
+
let imports = '';
|
|
19
|
+
let downSQL;
|
|
20
|
+
let upSQL;
|
|
21
|
+
({ downSQL, imports, upSQL } = await getPredefinedMigration({
|
|
22
|
+
dirname,
|
|
23
|
+
file,
|
|
24
|
+
migrationName,
|
|
25
|
+
payload
|
|
26
|
+
}));
|
|
27
|
+
const timestamp = `${formattedDate}_${formattedTime}`;
|
|
28
|
+
const name = migrationName || file?.split('/').slice(2).join('/');
|
|
29
|
+
const fileName = `${timestamp}${name ? `_${name.replace(/\W/g, '_')}` : ''}`;
|
|
30
|
+
const filePath = `${dir}/${fileName}`;
|
|
31
|
+
let drizzleJsonBefore = defaultDrizzleSnapshot;
|
|
32
|
+
if (this.schemaName) {
|
|
33
|
+
drizzleJsonBefore.schemas = {
|
|
34
|
+
[this.schemaName]: this.schemaName
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (!upSQL) {
|
|
38
|
+
// Get latest migration snapshot
|
|
39
|
+
const latestSnapshot = fs.readdirSync(dir).filter((file)=>file.endsWith('.json')).sort().reverse()?.[0];
|
|
40
|
+
if (latestSnapshot) {
|
|
41
|
+
drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'));
|
|
42
|
+
if (drizzleJsonBefore.version < drizzleJsonAfter.version) {
|
|
43
|
+
drizzleJsonBefore = upPgSnapshot(drizzleJsonBefore);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter);
|
|
47
|
+
const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore);
|
|
48
|
+
const sqlExecute = 'await payload.db.drizzle.execute(sql`';
|
|
49
|
+
if (sqlStatementsUp?.length) {
|
|
50
|
+
upSQL = `${sqlExecute}\n ${sqlStatementsUp?.join('\n')}\`)`;
|
|
51
|
+
}
|
|
52
|
+
if (sqlStatementsDown?.length) {
|
|
53
|
+
downSQL = `${sqlExecute}\n ${sqlStatementsDown?.join('\n')}\`)`;
|
|
54
|
+
}
|
|
55
|
+
if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {
|
|
56
|
+
if (skipEmpty) {
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
const { confirm: shouldCreateBlankMigration } = await prompts({
|
|
60
|
+
name: 'confirm',
|
|
61
|
+
type: 'confirm',
|
|
62
|
+
initial: false,
|
|
63
|
+
message: 'No schema changes detected. Would you like to create a blank migration file?'
|
|
64
|
+
}, {
|
|
65
|
+
onCancel: ()=>{
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
if (!shouldCreateBlankMigration) {
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// write schema
|
|
74
|
+
fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2));
|
|
75
|
+
}
|
|
76
|
+
// write migration
|
|
77
|
+
fs.writeFileSync(`${filePath}.ts`, getMigrationTemplate({
|
|
78
|
+
downSQL: downSQL || ` // Migration code`,
|
|
79
|
+
imports,
|
|
80
|
+
packageName: payload.db.packageName,
|
|
81
|
+
upSQL: upSQL || ` // Migration code`
|
|
82
|
+
}));
|
|
83
|
+
writeMigrationIndex({
|
|
84
|
+
migrationsDir: payload.db.migrationDir
|
|
85
|
+
});
|
|
86
|
+
payload.logger.info({
|
|
87
|
+
msg: `Migration created at ${filePath}.ts`
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=createMigration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/postgres/createMigration.ts"],"sourcesContent":["import type { CreateMigration } from 'payload'\n\nimport fs from 'fs'\nimport { createRequire } from 'module'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { defaultDrizzleSnapshot } from './defaultSnapshot.js'\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nconst require = createRequire(import.meta.url)\n\nexport const createMigration: CreateMigration = async function createMigration(\n this: BasePostgresAdapter,\n { dirname, file, forceAcceptWarning, migrationName, payload, skipEmpty },\n) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n const { generateDrizzleJson, generateMigration, upPgSnapshot } = require('drizzle-kit/api')\n const drizzleJsonAfter = generateDrizzleJson(this.schema)\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n ;({ downSQL, imports, upSQL } = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n }))\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n let drizzleJsonBefore = defaultDrizzleSnapshot\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upPgSnapshot(drizzleJsonBefore)\n }\n }\n\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n const sqlExecute = 'await payload.db.drizzle.execute(sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = `${sqlExecute}\\n ${sqlStatementsUp?.join('\\n')}\\`)`\n }\n if (sqlStatementsDown?.length) {\n downSQL = `${sqlExecute}\\n ${sqlStatementsDown?.join('\\n')}\\`)`\n }\n\n if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {\n if (skipEmpty) {\n process.exit(0)\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!shouldCreateBlankMigration) {\n process.exit(0)\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n // write migration\n fs.writeFileSync(\n `${filePath}.ts`,\n getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n }),\n )\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${filePath}.ts` })\n}\n"],"names":["fs","createRequire","getPredefinedMigration","writeMigrationIndex","prompts","defaultDrizzleSnapshot","getMigrationTemplate","require","url","createMigration","dirname","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upPgSnapshot","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","timestamp","name","slice","join","fileName","filePath","drizzleJsonBefore","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","process","exit","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","packageName","migrationsDir","logger","info","msg"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MigrationTemplateArgs } from 'payload';
|
|
2
|
+
export declare const indent: (text: string) => string;
|
|
3
|
+
export declare const getMigrationTemplate: ({ downSQL, imports, packageName, upSQL, }: MigrationTemplateArgs) => string;
|
|
4
|
+
//# sourceMappingURL=getMigrationTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMigrationTemplate.d.ts","sourceRoot":"","sources":["../../src/postgres/getMigrationTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,eAAO,MAAM,MAAM,SAAU,MAAM,WAIpB,CAAA;AAEf,eAAO,MAAM,oBAAoB,8CAK9B,qBAAqB,KAAG,MAS1B,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const indent = (text)=>text.split('\n').map((line)=>` ${line}`).join('\n');
|
|
2
|
+
export const getMigrationTemplate = ({ downSQL, imports, packageName, upSQL })=>`import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}'
|
|
3
|
+
${imports ? `${imports}\n` : ''}
|
|
4
|
+
export async function up({ payload, req }: MigrateUpArgs): Promise<void> {
|
|
5
|
+
${indent(upSQL)}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export async function down({ payload, req }: MigrateDownArgs): Promise<void> {
|
|
9
|
+
${indent(downSQL)}
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=getMigrationTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/postgres/getMigrationTemplate.ts"],"sourcesContent":["import type { MigrationTemplateArgs } from 'payload'\n\nexport const indent = (text: string) =>\n text\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n')\n\nexport const getMigrationTemplate = ({\n downSQL,\n imports,\n packageName,\n upSQL,\n}: MigrationTemplateArgs): string => `import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}'\n${imports ? `${imports}\\n` : ''}\nexport async function up({ payload, req }: MigrateUpArgs): Promise<void> {\n${indent(upSQL)}\n}\n\nexport async function down({ payload, req }: MigrateDownArgs): Promise<void> {\n${indent(downSQL)}\n}\n`\n"],"names":["indent","text","split","map","line","join","getMigrationTemplate","downSQL","imports","packageName","upSQL"],"mappings":"AAEA,OAAO,MAAMA,SAAS,CAACC,OACrBA,KACGC,KAAK,CAAC,MACNC,GAAG,CAAC,CAACC,OAAS,CAAC,EAAE,EAAEA,MAAM,EACzBC,IAAI,CAAC,MAAK;AAEf,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,OAAO,EACPC,OAAO,EACPC,WAAW,EACXC,KAAK,EACiB,GAAa,CAAC,qDAAqD,EAAED,YAAY;AACzG,EAAED,UAAU,GAAGA,QAAQ,EAAE,CAAC,GAAG,GAAG;;AAEhC,EAAER,OAAOU,OAAO;;;;AAIhB,EAAEV,OAAOO,SAAS;;AAElB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/drizzle",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.0",
|
|
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.0.0",
|
|
56
|
-
"payload": "3.
|
|
56
|
+
"payload": "3.7.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"payload": "3.
|
|
59
|
+
"payload": "3.7.0"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "pnpm build:swc && pnpm build:types",
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { GenerateSchema } from 'payload';
|
|
2
|
-
export declare const createSchemaGenerator: ({ dbCredentials, defaultOutputFile, dialect, }: {
|
|
3
|
-
dbCredentials: Record<string, string>;
|
|
4
|
-
defaultOutputFile?: string;
|
|
5
|
-
dialect: string;
|
|
6
|
-
}) => GenerateSchema;
|
|
7
|
-
//# sourceMappingURL=createSchemaGenerator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createSchemaGenerator.d.ts","sourceRoot":"","sources":["../../src/utilities/createSchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAgF7C,eAAO,MAAM,qBAAqB,mDAI/B;IACD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB,KAAG,cAsFH,CAAA"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import { mkdir, readFile, rm, writeFile } from 'fs/promises';
|
|
4
|
-
import { createRequire } from 'module';
|
|
5
|
-
import os from 'os';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import { v4 as uuid } from 'uuid';
|
|
8
|
-
const url = import.meta.url;
|
|
9
|
-
const require = createRequire(url);
|
|
10
|
-
const drizzleKitPath = require.resolve('drizzle-kit');
|
|
11
|
-
const drizzleBinPath = path.resolve(path.dirname(drizzleKitPath), 'bin.cjs');
|
|
12
|
-
const formatSchemaFile = (packageName, content)=>{
|
|
13
|
-
let formatted = '';
|
|
14
|
-
const imports = [];
|
|
15
|
-
const exports = [];
|
|
16
|
-
for (const line of content.split('\n')){
|
|
17
|
-
if (line.trim().startsWith('import')) {
|
|
18
|
-
// skip import of schema from relations
|
|
19
|
-
if (!line.includes(`"./schema"`)) {
|
|
20
|
-
// replace with the proxy path
|
|
21
|
-
imports.push(line.replace(`"drizzle-orm`, `"${packageName}/drizzle`));
|
|
22
|
-
}
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
// collect all exports to include to declaration later
|
|
26
|
-
if (line.startsWith('export const')) {
|
|
27
|
-
const [_, afterExport] = line.split('export const ');
|
|
28
|
-
const [exportName] = afterExport.split(' =');
|
|
29
|
-
exports.push(exportName);
|
|
30
|
-
}
|
|
31
|
-
let formattedLine = line;
|
|
32
|
-
// Drizzle typescript bug with default values and point field
|
|
33
|
-
if (line.includes(`geometry({ type: "point" }).default`)) {
|
|
34
|
-
const [firstChunk, secondChunk] = line.split('.default(');
|
|
35
|
-
const formattedSecondChunk = `sql.raw(${secondChunk.slice(0, secondChunk.length - 1)}),`;
|
|
36
|
-
formattedLine = `${firstChunk}.default(${formattedSecondChunk}`;
|
|
37
|
-
}
|
|
38
|
-
formatted += `${formattedLine}\n`;
|
|
39
|
-
}
|
|
40
|
-
return `
|
|
41
|
-
/* tslint:disable */
|
|
42
|
-
/* eslint-disable */
|
|
43
|
-
/**
|
|
44
|
-
* This file was automatically generated by Payload.
|
|
45
|
-
* DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,
|
|
46
|
-
* and re-run \`payload generate:db-schema\` to regenerate this file.
|
|
47
|
-
*/
|
|
48
|
-
${imports.join('\n')}
|
|
49
|
-
${formatted}
|
|
50
|
-
|
|
51
|
-
export type DatabaseSchema = {
|
|
52
|
-
${exports.map((exportName)=>` ${exportName}: typeof ${exportName}`).join('\n')}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
declare module "${packageName}/types" {
|
|
56
|
-
export interface GeneratedDatabaseSchema {
|
|
57
|
-
schema: DatabaseSchema
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
`;
|
|
62
|
-
};
|
|
63
|
-
export const createSchemaGenerator = ({ dbCredentials, defaultOutputFile, dialect })=>{
|
|
64
|
-
return async function generateSchema({ outputFile = defaultOutputFile } = {}) {
|
|
65
|
-
const tempDir = path.resolve(os.tmpdir(), uuid());
|
|
66
|
-
const extensionsFilters = [];
|
|
67
|
-
if ('extensions' in this && typeof this.extensions === 'object') {
|
|
68
|
-
for(const extension in this.extensions){
|
|
69
|
-
if (this.extensions[extension]) {
|
|
70
|
-
extensionsFilters.push(`"${extension}"`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const drizzleConfig = `
|
|
75
|
-
import { createRequire } from 'module'
|
|
76
|
-
const url = import.meta.url
|
|
77
|
-
const require = createRequire(url)
|
|
78
|
-
const { defineConfig } = require("${drizzleKitPath}")
|
|
79
|
-
export default defineConfig({
|
|
80
|
-
dialect: "${dialect}",
|
|
81
|
-
dbCredentials: {
|
|
82
|
-
${Object.entries(dbCredentials).filter(([_, val])=>Boolean(val)).map(([key, value])=>` ${key}: "${value}",`).join('\n')}
|
|
83
|
-
},
|
|
84
|
-
out: "${tempDir}",
|
|
85
|
-
${extensionsFilters.length ? `extensionsFilters: [${extensionsFilters.join(', ')}],` : ''}
|
|
86
|
-
${this.schemaName ? `schemaFilter: ["${this.schemaName}"],` : ''}
|
|
87
|
-
});
|
|
88
|
-
`;
|
|
89
|
-
const drizzleConfigPath = path.resolve(tempDir, 'drizzle.config.js');
|
|
90
|
-
await mkdir(tempDir, {
|
|
91
|
-
recursive: true
|
|
92
|
-
});
|
|
93
|
-
await writeFile(drizzleConfigPath, drizzleConfig, 'utf-8');
|
|
94
|
-
try {
|
|
95
|
-
execSync(`node ${drizzleBinPath} pull --config=${drizzleConfigPath}`, {
|
|
96
|
-
stdio: 'inherit'
|
|
97
|
-
});
|
|
98
|
-
} catch (e) {
|
|
99
|
-
this.payload.logger.error(e);
|
|
100
|
-
throw e;
|
|
101
|
-
}
|
|
102
|
-
this.payload.logger.info('Post processing...');
|
|
103
|
-
const [schema, relationships] = await Promise.all([
|
|
104
|
-
readFile(path.resolve(tempDir, 'schema.ts'), 'utf-8'),
|
|
105
|
-
readFile(path.resolve(tempDir, 'relations.ts'), 'utf-8')
|
|
106
|
-
]);
|
|
107
|
-
await rm(tempDir, {
|
|
108
|
-
force: true,
|
|
109
|
-
recursive: true
|
|
110
|
-
});
|
|
111
|
-
const output = formatSchemaFile(this.packageName, `
|
|
112
|
-
${schema}
|
|
113
|
-
|
|
114
|
-
${relationships}
|
|
115
|
-
`);
|
|
116
|
-
if (!outputFile) {
|
|
117
|
-
const cwd = process.cwd();
|
|
118
|
-
const srcDir = path.resolve(cwd, 'src');
|
|
119
|
-
if (existsSync(srcDir)) {
|
|
120
|
-
outputFile = path.resolve(srcDir, 'payload-generated-schema.ts');
|
|
121
|
-
} else {
|
|
122
|
-
outputFile = path.resolve(cwd, 'payload-generated-schema.ts');
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
await writeFile(outputFile, output, {
|
|
126
|
-
encoding: 'utf-8',
|
|
127
|
-
flag: 'w'
|
|
128
|
-
});
|
|
129
|
-
this.payload.logger.info(`Finished, written ${outputFile}`);
|
|
130
|
-
};
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
//# sourceMappingURL=createSchemaGenerator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/createSchemaGenerator.ts"],"sourcesContent":["import type { GenerateSchema } from 'payload'\n\nimport { execSync } from 'child_process'\nimport { existsSync } from 'fs'\nimport { mkdir, readFile, rm, writeFile } from 'fs/promises'\nimport { createRequire } from 'module'\nimport os from 'os'\nimport path from 'path'\nimport { v4 as uuid } from 'uuid'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nconst url = import.meta.url\n\nconst require = createRequire(url)\n\nconst drizzleKitPath = require.resolve('drizzle-kit')\n\nconst drizzleBinPath = path.resolve(path.dirname(drizzleKitPath), 'bin.cjs')\n\nconst formatSchemaFile = (packageName: string, content: string) => {\n let formatted = ''\n\n const imports = []\n const exports = []\n\n for (const line of content.split('\\n')) {\n if (line.trim().startsWith('import')) {\n // skip import of schema from relations\n if (!line.includes(`\"./schema\"`)) {\n // replace with the proxy path\n imports.push(line.replace(`\"drizzle-orm`, `\"${packageName}/drizzle`))\n }\n continue\n }\n\n // collect all exports to include to declaration later\n if (line.startsWith('export const')) {\n const [_, afterExport] = line.split('export const ')\n const [exportName] = afterExport.split(' =')\n exports.push(exportName)\n }\n\n let formattedLine = line\n\n // Drizzle typescript bug with default values and point field\n if (line.includes(`geometry({ type: \"point\" }).default`)) {\n const [firstChunk, secondChunk] = line.split('.default(')\n\n const formattedSecondChunk = `sql.raw(${secondChunk.slice(0, secondChunk.length - 1)}),`\n formattedLine = `${firstChunk}.default(${formattedSecondChunk}`\n }\n\n formatted += `${formattedLine}\\n`\n }\n\n return `\n/* tslint:disable */\n/* eslint-disable */\n/**\n * This file was automatically generated by Payload.\n * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,\n * and re-run \\`payload generate:db-schema\\` to regenerate this file.\n */\n${imports.join('\\n')}\n${formatted}\n\nexport type DatabaseSchema = {\n${exports.map((exportName) => ` ${exportName}: typeof ${exportName}`).join('\\n')}\n}\n\ndeclare module \"${packageName}/types\" {\n export interface GeneratedDatabaseSchema {\n schema: DatabaseSchema\n }\n}\n\n`\n}\n\nexport const createSchemaGenerator = ({\n dbCredentials,\n defaultOutputFile,\n dialect,\n}: {\n dbCredentials: Record<string, string>\n defaultOutputFile?: string\n dialect: string\n}): GenerateSchema => {\n return async function generateSchema(\n this: DrizzleAdapter,\n { outputFile = defaultOutputFile } = {},\n ) {\n const tempDir = path.resolve(os.tmpdir(), uuid())\n\n const extensionsFilters = []\n\n if ('extensions' in this && typeof this.extensions === 'object') {\n for (const extension in this.extensions) {\n if (this.extensions[extension]) {\n extensionsFilters.push(`\"${extension}\"`)\n }\n }\n }\n\n const drizzleConfig = `\nimport { createRequire } from 'module'\nconst url = import.meta.url\nconst require = createRequire(url)\nconst { defineConfig } = require(\"${drizzleKitPath}\")\nexport default defineConfig({\n dialect: \"${dialect}\",\n dbCredentials: {\n${Object.entries(dbCredentials)\n .filter(([_, val]) => Boolean(val))\n .map(([key, value]) => ` ${key}: \"${value}\",`)\n .join('\\n')}\n },\n out: \"${tempDir}\",\n ${extensionsFilters.length ? `extensionsFilters: [${extensionsFilters.join(', ')}],` : ''}\n ${this.schemaName ? `schemaFilter: [\"${this.schemaName}\"],` : ''}\n});\n`\n\n const drizzleConfigPath = path.resolve(tempDir, 'drizzle.config.js')\n\n await mkdir(tempDir, { recursive: true })\n\n await writeFile(drizzleConfigPath, drizzleConfig, 'utf-8')\n\n try {\n execSync(`node ${drizzleBinPath} pull --config=${drizzleConfigPath}`, {\n stdio: 'inherit',\n })\n } catch (e) {\n this.payload.logger.error(e)\n throw e\n }\n\n this.payload.logger.info('Post processing...')\n\n const [schema, relationships] = await Promise.all([\n readFile(path.resolve(tempDir, 'schema.ts'), 'utf-8'),\n readFile(path.resolve(tempDir, 'relations.ts'), 'utf-8'),\n ])\n\n await rm(tempDir, { force: true, recursive: true })\n\n const output = formatSchemaFile(\n this.packageName,\n `\n${schema}\n\n${relationships}\n`,\n )\n\n if (!outputFile) {\n const cwd = process.cwd()\n const srcDir = path.resolve(cwd, 'src')\n if (existsSync(srcDir)) {\n outputFile = path.resolve(srcDir, 'payload-generated-schema.ts')\n } else {\n outputFile = path.resolve(cwd, 'payload-generated-schema.ts')\n }\n }\n\n await writeFile(outputFile, output, {\n encoding: 'utf-8',\n flag: 'w',\n })\n\n this.payload.logger.info(`Finished, written ${outputFile}`)\n }\n}\n"],"names":["execSync","existsSync","mkdir","readFile","rm","writeFile","createRequire","os","path","v4","uuid","url","require","drizzleKitPath","resolve","drizzleBinPath","dirname","formatSchemaFile","packageName","content","formatted","imports","exports","line","split","trim","startsWith","includes","push","replace","_","afterExport","exportName","formattedLine","firstChunk","secondChunk","formattedSecondChunk","slice","length","join","map","createSchemaGenerator","dbCredentials","defaultOutputFile","dialect","generateSchema","outputFile","tempDir","tmpdir","extensionsFilters","extensions","extension","drizzleConfig","Object","entries","filter","val","Boolean","key","value","schemaName","drizzleConfigPath","recursive","stdio","e","payload","logger","error","info","schema","relationships","Promise","all","force","output","cwd","process","srcDir","encoding","flag"],"mappings":"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"}
|