### What?
Abstracts SQL schema building, significantly reducing code duplication
for SQLite / Postgres
db-sqlite lines count From:
```sh
wc -l **/*.ts
62 src/connect.ts
32 src/countDistinct.ts
9 src/createJSONQuery/convertPathToJSONTraversal.ts
86 src/createJSONQuery/index.ts
15 src/defaultSnapshot.ts
6 src/deleteWhere.ts
21 src/dropDatabase.ts
15 src/execute.ts
178 src/index.ts
139 src/init.ts
19 src/insert.ts
19 src/requireDrizzleKit.ts
544 src/schema/build.ts
27 src/schema/createIndex.ts
38 src/schema/getIDColumn.ts
13 src/schema/idToUUID.ts
28 src/schema/setColumnID.ts
787 src/schema/traverseFields.ts
18 src/schema/withDefault.ts
248 src/types.ts
2304 total
```
To:
```sh
wc -l **/*.ts
62 src/connect.ts
32 src/countDistinct.ts
9 src/createJSONQuery/convertPathToJSONTraversal.ts
86 src/createJSONQuery/index.ts
15 src/defaultSnapshot.ts
6 src/deleteWhere.ts
21 src/dropDatabase.ts
15 src/execute.ts
180 src/index.ts
39 src/init.ts
19 src/insert.ts
19 src/requireDrizzleKit.ts
149 src/schema/buildDrizzleTable.ts
32 src/schema/setColumnID.ts
258 src/types.ts
942 total
```
Builds abstract schema in shared drizzle package that later gets
converted by SQLite/ Postgres specific implementation into drizzle
schema.
This, apparently can also help here
https://github.com/payloadcms/payload/pull/9953. It should be very
trivial to implement a MySQL adapter with this as well.
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import type { DrizzleAdapter } from '@payloadcms/drizzle/types'
|
|
import type { Init } from 'payload'
|
|
|
|
import { buildDrizzleRelations, buildRawSchema, executeSchemaHooks } from '@payloadcms/drizzle'
|
|
|
|
import type { SQLiteAdapter } from './types.js'
|
|
|
|
import { buildDrizzleTable } from './schema/buildDrizzleTable.js'
|
|
import { setColumnID } from './schema/setColumnID.js'
|
|
|
|
export const init: Init = async function init(this: SQLiteAdapter) {
|
|
let locales: string[] | undefined
|
|
|
|
this.rawRelations = {}
|
|
this.rawTables = {}
|
|
|
|
if (this.payload.config.localization) {
|
|
locales = this.payload.config.localization.locales.map(({ code }) => code)
|
|
}
|
|
|
|
const adapter = this as unknown as DrizzleAdapter
|
|
|
|
buildRawSchema({
|
|
adapter,
|
|
setColumnID,
|
|
})
|
|
|
|
await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })
|
|
|
|
for (const tableName in this.rawTables) {
|
|
buildDrizzleTable({ adapter, locales, rawTable: this.rawTables[tableName] })
|
|
}
|
|
|
|
buildDrizzleRelations({
|
|
adapter,
|
|
})
|
|
|
|
await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })
|
|
}
|