@payloadcms/drizzle 3.7.1-canary.a7f8738 → 3.7.1-canary.bde7f89

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.
Files changed (44) hide show
  1. package/dist/exports/postgres.d.ts +0 -2
  2. package/dist/exports/postgres.d.ts.map +1 -1
  3. package/dist/exports/postgres.js +0 -2
  4. package/dist/exports/postgres.js.map +1 -1
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +0 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/postgres/init.d.ts.map +1 -1
  10. package/dist/postgres/init.js +3 -7
  11. package/dist/postgres/init.js.map +1 -1
  12. package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -1
  13. package/dist/postgres/schema/buildDrizzleTable.js +7 -3
  14. package/dist/postgres/schema/buildDrizzleTable.js.map +1 -1
  15. package/dist/schema/build.js +4 -4
  16. package/dist/schema/build.js.map +1 -1
  17. package/dist/schema/buildDrizzleRelations.d.ts +2 -4
  18. package/dist/schema/buildDrizzleRelations.d.ts.map +1 -1
  19. package/dist/schema/buildDrizzleRelations.js +21 -18
  20. package/dist/schema/buildDrizzleRelations.js.map +1 -1
  21. package/dist/schema/traverseFields.js +9 -4
  22. package/dist/schema/traverseFields.js.map +1 -1
  23. package/dist/schema/withDefault.d.ts.map +1 -1
  24. package/dist/schema/withDefault.js +0 -6
  25. package/dist/schema/withDefault.js.map +1 -1
  26. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  27. package/dist/transform/read/traverseFields.js +7 -0
  28. package/dist/transform/read/traverseFields.js.map +1 -1
  29. package/dist/types.d.ts +40 -15
  30. package/dist/types.d.ts.map +1 -1
  31. package/dist/types.js.map +1 -1
  32. package/package.json +3 -3
  33. package/dist/postgres/columnToCodeConverter.d.ts +0 -3
  34. package/dist/postgres/columnToCodeConverter.d.ts.map +0 -1
  35. package/dist/postgres/columnToCodeConverter.js +0 -64
  36. package/dist/postgres/columnToCodeConverter.js.map +0 -1
  37. package/dist/postgres/schema/withDefault.d.ts +0 -4
  38. package/dist/postgres/schema/withDefault.d.ts.map +0 -1
  39. package/dist/postgres/schema/withDefault.js +0 -24
  40. package/dist/postgres/schema/withDefault.js.map +0 -1
  41. package/dist/utilities/createSchemaGenerator.d.ts +0 -11
  42. package/dist/utilities/createSchemaGenerator.d.ts.map +0 -1
  43. package/dist/utilities/createSchemaGenerator.js +0 -216
  44. package/dist/utilities/createSchemaGenerator.js.map +0 -1
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n Column,\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n ExtractTablesWithRelations,\n Relation,\n Relations,\n SQL,\n TableRelationalConfig,\n} from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { NodePgDatabase, NodePgQueryResultHKT } from 'drizzle-orm/node-postgres'\nimport type {\n PgColumn,\n PgTable,\n PgTransaction,\n Precision,\n UpdateDeleteAction,\n} from 'drizzle-orm/pg-core'\nimport type { SQLiteColumn, SQLiteTable, SQLiteTransaction } from 'drizzle-orm/sqlite-core'\nimport type { Result } from 'drizzle-orm/sqlite-core/session'\nimport type {\n BaseDatabaseAdapter,\n FlattenedField,\n MigrationData,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nimport type { BuildQueryJoinAliases } from './queries/buildQuery.js'\n\nexport { BuildQueryJoinAliases }\n\nimport type { ResultSet } from '@libsql/client'\nimport type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { QueryResult } from 'pg'\n\nimport type { ChainedMethods } from './find/chainMethods.js'\nimport type { Operators } from './queries/operatorMap.js'\n\nexport { ChainedMethods }\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type SQLiteDB = LibSQLDatabase<\n Record<string, GenericRelation | GenericTable> & Record<string, unknown>\n>\n\nexport type GenericPgColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns<T> = {\n [x: string]: T\n}\n\ntype GenericPgTable = PgTable<{\n columns: GenericColumns<GenericPgColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\ntype GenericSQLiteTable = SQLiteTable<{\n columns: GenericColumns<SQLiteColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\nexport type GenericColumn = GenericPgColumn | SQLiteColumn\n\nexport type GenericTable = GenericPgTable | GenericSQLiteTable\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type TransactionSQLite = SQLiteTransaction<\n 'async',\n Result<'async', unknown>,\n Record<string, unknown>,\n { tsName: TableRelationalConfig }\n>\nexport type TransactionPg = PgTransaction<\n NodePgQueryResultHKT,\n Record<string, unknown>,\n ExtractTablesWithRelations<Record<string, unknown>>\n>\n\nexport type DrizzleTransaction = TransactionPg | TransactionSQLite\n\nexport type CountDistinct = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: DrizzleAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n drizzle?: LibSQLDatabase | PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) =>\n | Promise<QueryResult<Record<string, T>>>\n | SQLiteRaw<Promise<{ rows: T[] }>>\n | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n onConflictDoUpdate?: unknown\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type RequireDrizzleKit = () => {\n generateDrizzleJson: (\n args: Record<string, unknown>,\n ) => DrizzleSnapshotJSON | Promise<DrizzleSnapshotJSON>\n generateMigration: (prev: DrizzleSnapshotJSON, cur: DrizzleSnapshotJSON) => Promise<string[]>\n pushSchema: (\n schema: Record<string, unknown>,\n drizzle: DrizzleAdapter['drizzle'],\n filterSchema?: string[],\n tablesFilter?: string[],\n extensionsFilter?: string[],\n ) => Promise<{ apply; hasDataLoss; warnings }>\n upSnapshot?: (snapshot: Record<string, unknown>) => DrizzleSnapshotJSON\n}\n\nexport type Migration = {\n down: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase<Record<string, never>> | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n up: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n} & MigrationData\n\nexport type CreateJSONQueryArgs = {\n column?: Column | string\n operator: string\n pathSegments: string[]\n table?: string\n treatAsArray?: string[]\n treatRootAsArray?: boolean\n value: boolean | number | string\n}\n\nexport type RawRelation =\n | {\n fields: { name: string; table: string }[]\n references: string[]\n relationName?: string\n to: string\n type: 'one'\n }\n | {\n relationName?: string\n to: string\n type: 'many'\n }\n\nexport type RawTable = {\n columns: Record<string, RawColumn>\n foreignKeys?: Record<string, RawForeignKey>\n indexes?: Record<string, RawIndex>\n name: string\n}\n\nexport type RawForeignKey = {\n columns: string[]\n foreignColumns: { name: string; table: string }[]\n name: string\n onDelete?: UpdateDeleteAction\n onUpdate?: UpdateDeleteAction\n}\n\nexport type RawIndex = {\n name: string\n on: string | string[]\n unique?: boolean\n}\n\nexport type RawColumn = {\n default?: any\n name: string\n notNull?: boolean\n primaryKey?: boolean\n reference?: {\n name: string\n onDelete: UpdateDeleteAction\n table: string\n }\n} & (\n | {\n defaultNow?: boolean\n mode: 'date' | 'string'\n precision: Precision\n type: 'timestamp'\n withTimezone?: boolean\n }\n | {\n defaultRandom?: boolean\n type: 'uuid'\n }\n | {\n type: 'boolean' | 'geometry' | 'integer' | 'jsonb' | 'numeric' | 'serial' | 'text' | 'varchar'\n }\n | (\n | {\n enumName: string\n options: string[]\n type: 'enum'\n }\n | {\n isLocale: true\n type: 'enum'\n }\n )\n)\n\nexport type IDType = 'integer' | 'numeric' | 'text' | 'uuid' | 'varchar'\n\nexport type SetColumnID = (args: {\n adapter: DrizzleAdapter\n columns: Record<string, RawColumn>\n fields: FlattenedField[]\n}) => IDType\n\nexport type ColumnToCodeConverter = (args: {\n adapter: DrizzleAdapter\n addEnum: (name: string, options: string[]) => void\n addImport: (from: string, name: string) => void\n column: RawColumn\n locales?: string[]\n}) => string\n\nexport type BuildDrizzleTable<T extends DrizzleAdapter = DrizzleAdapter> = (args: {\n adapter: T\n locales: string[]\n rawTable: RawTable\n}) => void\n\nexport interface DrizzleAdapter extends BaseDatabaseAdapter {\n convertPathToJSONTraversal?: (incomingSegments: string[]) => string\n countDistinct: CountDistinct\n createJSONQuery: (args: CreateJSONQueryArgs) => string\n defaultDrizzleSnapshot: Record<string, unknown>\n deleteWhere: DeleteWhere\n drizzle: LibSQLDatabase | PostgresDB\n dropDatabase: DropDatabase\n enums?: never | Record<string, unknown>\n execute: Execute<unknown>\n\n features: {\n json?: boolean\n }\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: 'serial' | 'uuid'\n indexes: Set<string>\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operators: Operators\n push: boolean\n rawRelations: Record<string, Record<string, RawRelation>>\n rawTables: Record<string, RawTable>\n rejectInitializing: () => void\n\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n requireDrizzleKit: RequireDrizzleKit\n resolveInitializing: () => void\n schema: Record<string, unknown>\n\n schemaName?: string\n sessions: {\n [id: string]: {\n db: DrizzleTransaction\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, any>\n transactionOptions: unknown\n versionsSuffix?: string\n}\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n"],"names":[],"mappings":"AA6TA,WAQC"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n Column,\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n ExtractTablesWithRelations,\n Relation,\n Relations,\n SQL,\n TableRelationalConfig,\n} from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { NodePgDatabase, NodePgQueryResultHKT } from 'drizzle-orm/node-postgres'\nimport type {\n PgColumn,\n PgTable,\n PgTransaction,\n Precision,\n UpdateDeleteAction,\n} from 'drizzle-orm/pg-core'\nimport type { SQLiteColumn, SQLiteTable, SQLiteTransaction } from 'drizzle-orm/sqlite-core'\nimport type { Result } from 'drizzle-orm/sqlite-core/session'\nimport type {\n BaseDatabaseAdapter,\n FlattenedField,\n MigrationData,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nimport type { BuildQueryJoinAliases } from './queries/buildQuery.js'\n\nexport { BuildQueryJoinAliases }\n\nimport type { ResultSet } from '@libsql/client'\nimport type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { QueryResult } from 'pg'\n\nimport type { ChainedMethods } from './find/chainMethods.js'\nimport type { Operators } from './queries/operatorMap.js'\n\nexport { ChainedMethods }\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type SQLiteDB = LibSQLDatabase<\n Record<string, GenericRelation | GenericTable> & Record<string, unknown>\n>\n\nexport type GenericPgColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns<T> = {\n [x: string]: T\n}\n\ntype GenericPgTable = PgTable<{\n columns: GenericColumns<GenericPgColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\ntype GenericSQLiteTable = SQLiteTable<{\n columns: GenericColumns<SQLiteColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\nexport type GenericColumn = GenericPgColumn | SQLiteColumn\n\nexport type GenericTable = GenericPgTable | GenericSQLiteTable\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type TransactionSQLite = SQLiteTransaction<\n 'async',\n Result<'async', unknown>,\n Record<string, unknown>,\n { tsName: TableRelationalConfig }\n>\nexport type TransactionPg = PgTransaction<\n NodePgQueryResultHKT,\n Record<string, unknown>,\n ExtractTablesWithRelations<Record<string, unknown>>\n>\n\nexport type DrizzleTransaction = TransactionPg | TransactionSQLite\n\nexport type CountDistinct = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: DrizzleAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n drizzle?: LibSQLDatabase | PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) =>\n | Promise<QueryResult<Record<string, T>>>\n | SQLiteRaw<Promise<{ rows: T[] }>>\n | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n onConflictDoUpdate?: unknown\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type RequireDrizzleKit = () => {\n generateDrizzleJson: (\n args: Record<string, unknown>,\n ) => DrizzleSnapshotJSON | Promise<DrizzleSnapshotJSON>\n generateMigration: (prev: DrizzleSnapshotJSON, cur: DrizzleSnapshotJSON) => Promise<string[]>\n pushSchema: (\n schema: Record<string, unknown>,\n drizzle: DrizzleAdapter['drizzle'],\n filterSchema?: string[],\n tablesFilter?: string[],\n extensionsFilter?: string[],\n ) => Promise<{ apply; hasDataLoss; warnings }>\n upSnapshot?: (snapshot: Record<string, unknown>) => DrizzleSnapshotJSON\n}\n\nexport type Migration = {\n down: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase<Record<string, never>> | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n up: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n} & MigrationData\n\nexport type CreateJSONQueryArgs = {\n column?: Column | string\n operator: string\n pathSegments: string[]\n table?: string\n treatAsArray?: string[]\n treatRootAsArray?: boolean\n value: boolean | number | string\n}\n\n/**\n * Abstract relation link\n */\nexport type RawRelation =\n | {\n fields: { name: string; table: string }[]\n references: string[]\n relationName?: string\n to: string\n type: 'one'\n }\n | {\n relationName?: string\n to: string\n type: 'many'\n }\n\n/**\n * Abstract SQL table that later gets converted by database specific implementation to Drizzle\n */\nexport type RawTable = {\n columns: Record<string, RawColumn>\n foreignKeys?: Record<string, RawForeignKey>\n indexes?: Record<string, RawIndex>\n name: string\n}\n\n/**\n * Abstract SQL foreign key that later gets converted by database specific implementation to Drizzle\n */\nexport type RawForeignKey = {\n columns: string[]\n foreignColumns: { name: string; table: string }[]\n name: string\n onDelete?: UpdateDeleteAction\n onUpdate?: UpdateDeleteAction\n}\n\n/**\n * Abstract SQL index that later gets converted by database specific implementation to Drizzle\n */\nexport type RawIndex = {\n name: string\n on: string | string[]\n unique?: boolean\n}\n\n/**\n * Abstract SQL column that later gets converted by database specific implementation to Drizzle\n */\nexport type BaseRawColumn = {\n default?: any\n name: string\n notNull?: boolean\n primaryKey?: boolean\n reference?: {\n name: string\n onDelete: UpdateDeleteAction\n table: string\n }\n}\n\n/**\n * Postgres: native timestamp type\n * SQLite: text column, defaultNow achieved through strftime('%Y-%m-%dT%H:%M:%fZ', 'now'). withTimezone/precision have no any effect.\n */\nexport type TimestampRawColumn = {\n defaultNow?: boolean\n mode: 'date' | 'string'\n precision: Precision\n type: 'timestamp'\n withTimezone?: boolean\n} & BaseRawColumn\n\n/**\n * Postgres: native UUID type and db lavel defaultRandom\n * SQLite: text type and defaultRandom in the app level\n */\nexport type UUIDRawColumn = {\n defaultRandom?: boolean\n type: 'uuid'\n} & BaseRawColumn\n\n/**\n * Accepts either `locale: true` to have options from locales or `options` string array\n * Postgres: native enums\n * SQLite: text column with checks.\n */\nexport type EnumRawColumn = (\n | {\n enumName: string\n options: string[]\n type: 'enum'\n }\n | {\n locale: true\n type: 'enum'\n }\n) &\n BaseRawColumn\n\nexport type RawColumn =\n | ({\n type: 'boolean' | 'geometry' | 'integer' | 'jsonb' | 'numeric' | 'serial' | 'text' | 'varchar'\n } & BaseRawColumn)\n | EnumRawColumn\n | TimestampRawColumn\n | UUIDRawColumn\n\nexport type IDType = 'integer' | 'numeric' | 'text' | 'uuid' | 'varchar'\n\nexport type SetColumnID = (args: {\n adapter: DrizzleAdapter\n columns: Record<string, RawColumn>\n fields: FlattenedField[]\n}) => IDType\n\nexport type BuildDrizzleTable<T extends DrizzleAdapter = DrizzleAdapter> = (args: {\n adapter: T\n locales: string[]\n rawTable: RawTable\n}) => void\n\nexport interface DrizzleAdapter extends BaseDatabaseAdapter {\n convertPathToJSONTraversal?: (incomingSegments: string[]) => string\n countDistinct: CountDistinct\n createJSONQuery: (args: CreateJSONQueryArgs) => string\n defaultDrizzleSnapshot: Record<string, unknown>\n deleteWhere: DeleteWhere\n drizzle: LibSQLDatabase | PostgresDB\n dropDatabase: DropDatabase\n enums?: never | Record<string, unknown>\n execute: Execute<unknown>\n\n features: {\n json?: boolean\n }\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: 'serial' | 'uuid'\n indexes: Set<string>\n initializing: Promise<void>\n insert: Insert\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operators: Operators\n push: boolean\n rawRelations: Record<string, Record<string, RawRelation>>\n rawTables: Record<string, RawTable>\n rejectInitializing: () => void\n\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n requireDrizzleKit: RequireDrizzleKit\n resolveInitializing: () => void\n schema: Record<string, unknown>\n\n schemaName?: string\n sessions: {\n [id: string]: {\n db: DrizzleTransaction\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, any>\n transactionOptions: unknown\n versionsSuffix?: string\n}\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n"],"names":[],"mappings":"AAyVA,WAQC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/drizzle",
3
- "version": "3.7.1-canary.a7f8738",
3
+ "version": "3.7.1-canary.bde7f89",
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.7.1-canary.a7f8738"
56
+ "payload": "3.7.1-canary.bde7f89"
57
57
  },
58
58
  "peerDependencies": {
59
- "payload": "3.7.1-canary.a7f8738"
59
+ "payload": "3.7.1-canary.bde7f89"
60
60
  },
61
61
  "scripts": {
62
62
  "build": "pnpm build:swc && pnpm build:types",
@@ -1,3 +0,0 @@
1
- import type { ColumnToCodeConverter } from '../types.js';
2
- export declare const columnToCodeConverter: ColumnToCodeConverter;
3
- //# sourceMappingURL=columnToCodeConverter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"columnToCodeConverter.d.ts","sourceRoot":"","sources":["../../src/postgres/columnToCodeConverter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,eAAO,MAAM,qBAAqB,EAAE,qBAkFnC,CAAA"}
@@ -1,64 +0,0 @@
1
- export const columnToCodeConverter = ({ adapter, addEnum, addImport, column })=>{
2
- let columnBuilderFn = column.type;
3
- if (column.type === 'geometry') {
4
- columnBuilderFn = 'geometryColumn';
5
- addImport(`@payloadcms/drizzle/postgres`, columnBuilderFn);
6
- } else if (column.type === 'enum') {
7
- if ('isLocale' in column) {
8
- columnBuilderFn = `enum__locales`;
9
- } else {
10
- addEnum(column.enumName, column.options);
11
- columnBuilderFn = column.enumName;
12
- }
13
- } else {
14
- addImport(`${adapter.packageName}/drizzle/pg-core`, columnBuilderFn);
15
- }
16
- const columnBuilderArgsArray = [];
17
- if (column.type === 'timestamp') {
18
- columnBuilderArgsArray.push(`mode: '${column.mode}'`);
19
- if (column.withTimezone) {
20
- columnBuilderArgsArray.push('withTimezone: true');
21
- }
22
- if (typeof column.precision === 'number') {
23
- columnBuilderArgsArray.push(`precision: ${column.precision}`);
24
- }
25
- }
26
- let columnBuilderArgs = '';
27
- if (columnBuilderArgsArray.length) {
28
- columnBuilderArgs = `, {${columnBuilderArgsArray.join(',')}}`;
29
- }
30
- let code = `${columnBuilderFn}('${column.name}'${columnBuilderArgs})`;
31
- if (column.type === 'timestamp' && column.defaultNow) {
32
- code = `${code}.defaultNow()`;
33
- }
34
- if (column.type === 'uuid' && column.defaultRandom) {
35
- code = `${code}.defaultRandom()`;
36
- }
37
- if (column.notNull) {
38
- code = `${code}.notNull()`;
39
- }
40
- if (column.primaryKey) {
41
- code = `${code}.primaryKey()`;
42
- }
43
- if (typeof column.default !== 'undefined') {
44
- let sanitizedDefault = column.default;
45
- if (column.type === 'geometry') {
46
- sanitizedDefault = `sql\`${column.default}\``;
47
- } else if (column.type === 'jsonb') {
48
- sanitizedDefault = `sql\`'${JSON.stringify(column.default)}'::jsonb\``;
49
- } else if (column.type === 'numeric') {
50
- sanitizedDefault = `sql\`${column.default}\``;
51
- } else if (typeof column.default === 'string') {
52
- sanitizedDefault = `'${column.default}'`;
53
- }
54
- code = `${code}.default(${sanitizedDefault})`;
55
- }
56
- if (column.reference) {
57
- code = `${code}.references(() => ${column.reference.table}.${column.reference.name}, {
58
- ${column.reference.onDelete ? `onDelete: '${column.reference.onDelete}'` : ''}
59
- })`;
60
- }
61
- return code;
62
- };
63
-
64
- //# sourceMappingURL=columnToCodeConverter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/postgres/columnToCodeConverter.ts"],"sourcesContent":["import type { ColumnToCodeConverter } from '../types.js'\n\nexport const columnToCodeConverter: ColumnToCodeConverter = ({\n adapter,\n addEnum,\n addImport,\n column,\n}) => {\n let columnBuilderFn: string = column.type\n\n if (column.type === 'geometry') {\n columnBuilderFn = 'geometryColumn'\n addImport(`@payloadcms/drizzle/postgres`, columnBuilderFn)\n } else if (column.type === 'enum') {\n if ('isLocale' in column) {\n columnBuilderFn = `enum__locales`\n } else {\n addEnum(column.enumName, column.options)\n columnBuilderFn = column.enumName\n }\n } else {\n addImport(`${adapter.packageName}/drizzle/pg-core`, columnBuilderFn)\n }\n\n const columnBuilderArgsArray: string[] = []\n\n if (column.type === 'timestamp') {\n columnBuilderArgsArray.push(`mode: '${column.mode}'`)\n if (column.withTimezone) {\n columnBuilderArgsArray.push('withTimezone: true')\n }\n\n if (typeof column.precision === 'number') {\n columnBuilderArgsArray.push(`precision: ${column.precision}`)\n }\n }\n\n let columnBuilderArgs = ''\n\n if (columnBuilderArgsArray.length) {\n columnBuilderArgs = `, {${columnBuilderArgsArray.join(',')}}`\n }\n\n let code = `${columnBuilderFn}('${column.name}'${columnBuilderArgs})`\n\n if (column.type === 'timestamp' && column.defaultNow) {\n code = `${code}.defaultNow()`\n }\n\n if (column.type === 'uuid' && column.defaultRandom) {\n code = `${code}.defaultRandom()`\n }\n\n if (column.notNull) {\n code = `${code}.notNull()`\n }\n\n if (column.primaryKey) {\n code = `${code}.primaryKey()`\n }\n\n if (typeof column.default !== 'undefined') {\n let sanitizedDefault = column.default\n\n if (column.type === 'geometry') {\n sanitizedDefault = `sql\\`${column.default}\\``\n } else if (column.type === 'jsonb') {\n sanitizedDefault = `sql\\`'${JSON.stringify(column.default)}'::jsonb\\``\n } else if (column.type === 'numeric') {\n sanitizedDefault = `sql\\`${column.default}\\``\n } else if (typeof column.default === 'string') {\n sanitizedDefault = `'${column.default}'`\n }\n\n code = `${code}.default(${sanitizedDefault})`\n }\n\n if (column.reference) {\n code = `${code}.references(() => ${column.reference.table}.${column.reference.name}, {\n ${column.reference.onDelete ? `onDelete: '${column.reference.onDelete}'` : ''}\n })`\n }\n\n return code\n}\n"],"names":["columnToCodeConverter","adapter","addEnum","addImport","column","columnBuilderFn","type","enumName","options","packageName","columnBuilderArgsArray","push","mode","withTimezone","precision","columnBuilderArgs","length","join","code","name","defaultNow","defaultRandom","notNull","primaryKey","default","sanitizedDefault","JSON","stringify","reference","table","onDelete"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { FieldAffectingData } from 'payload';
2
- import type { RawColumn } from '../../types.js';
3
- export declare const withDefault: (column: RawColumn, field: FieldAffectingData) => RawColumn;
4
- //# sourceMappingURL=withDefault.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"withDefault.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/withDefault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,eAAO,MAAM,WAAW,WAAY,SAAS,SAAS,kBAAkB,KAAG,SAwB1E,CAAA"}
@@ -1,24 +0,0 @@
1
- export const withDefault = (column, field)=>{
2
- if (typeof field.defaultValue === 'undefined' || typeof field.defaultValue === 'function') {
3
- return column;
4
- }
5
- if (typeof field.defaultValue === 'string' && field.defaultValue.includes("'")) {
6
- const escapedString = field.defaultValue.replaceAll("'", "''");
7
- return {
8
- ...column,
9
- default: escapedString
10
- };
11
- }
12
- if (field.type === 'point' && Array.isArray(field.defaultValue)) {
13
- return {
14
- ...column,
15
- default: `SRID=4326;POINT(${field.defaultValue[0]} ${field.defaultValue[1]})`
16
- };
17
- }
18
- return {
19
- ...column,
20
- default: field.defaultValue
21
- };
22
- };
23
-
24
- //# sourceMappingURL=withDefault.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/withDefault.ts"],"sourcesContent":["import type { FieldAffectingData } from 'payload'\n\nimport type { RawColumn } from '../../types.js'\n\nexport const withDefault = (column: RawColumn, field: FieldAffectingData): RawColumn => {\n if (typeof field.defaultValue === 'undefined' || typeof field.defaultValue === 'function') {\n return column\n }\n\n if (typeof field.defaultValue === 'string' && field.defaultValue.includes(\"'\")) {\n const escapedString = field.defaultValue.replaceAll(\"'\", \"''\")\n return {\n ...column,\n default: escapedString,\n }\n }\n\n if (field.type === 'point' && Array.isArray(field.defaultValue)) {\n return {\n ...column,\n default: `SRID=4326;POINT(${field.defaultValue[0]} ${field.defaultValue[1]})`,\n }\n }\n\n return {\n ...column,\n default: field.defaultValue,\n }\n}\n"],"names":["withDefault","column","field","defaultValue","includes","escapedString","replaceAll","default","type","Array","isArray"],"mappings":"AAIA,OAAO,MAAMA,cAAc,CAACC,QAAmBC;IAC7C,IAAI,OAAOA,MAAMC,YAAY,KAAK,eAAe,OAAOD,MAAMC,YAAY,KAAK,YAAY;QACzF,OAAOF;IACT;IAEA,IAAI,OAAOC,MAAMC,YAAY,KAAK,YAAYD,MAAMC,YAAY,CAACC,QAAQ,CAAC,MAAM;QAC9E,MAAMC,gBAAgBH,MAAMC,YAAY,CAACG,UAAU,CAAC,KAAK;QACzD,OAAO;YACL,GAAGL,MAAM;YACTM,SAASF;QACX;IACF;IAEA,IAAIH,MAAMM,IAAI,KAAK,WAAWC,MAAMC,OAAO,CAACR,MAAMC,YAAY,GAAG;QAC/D,OAAO;YACL,GAAGF,MAAM;YACTM,SAAS,CAAC,gBAAgB,EAAEL,MAAMC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAED,MAAMC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E;IACF;IAEA,OAAO;QACL,GAAGF,MAAM;QACTM,SAASL,MAAMC,YAAY;IAC7B;AACF,EAAC"}
@@ -1,11 +0,0 @@
1
- import type { GenerateSchema } from 'payload';
2
- import type { ColumnToCodeConverter } from '../types.js';
3
- export declare const createSchemaGenerator: ({ columnToCodeConverter, corePackageSuffix, defaultOutputFile, enumImport, schemaImport, tableImport, }: {
4
- columnToCodeConverter: ColumnToCodeConverter;
5
- corePackageSuffix: string;
6
- defaultOutputFile?: string;
7
- enumImport?: string;
8
- schemaImport?: string;
9
- tableImport: string;
10
- }) => GenerateSchema;
11
- //# 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;AAQ7C,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,aAAa,CAAA;AAoCxE,eAAO,MAAM,qBAAqB,4GAO/B;IACD,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,cA2PH,CAAA"}
@@ -1,216 +0,0 @@
1
- import { exec } from 'child_process';
2
- import { existsSync } from 'fs';
3
- import { writeFile } from 'fs/promises';
4
- import path from 'path';
5
- import { promisify } from 'util';
6
- const execAsync = promisify(exec);
7
- /**
8
- * @example
9
- * console.log(sanitizeObjectKey("oneTwo")); // oneTwo
10
- * console.log(sanitizeObjectKey("one-two")); // 'one-two'
11
- * console.log(sanitizeObjectKey("_one$Two3")); // _one$Two3
12
- * console.log(sanitizeObjectKey("3invalid")); // '3invalid'
13
- */ const sanitizeObjectKey = (key)=>{
14
- // Regular expression for a valid identifier
15
- const identifierRegex = /^[a-z_$][\w$]*$/i;
16
- if (identifierRegex.test(key)) {
17
- return key;
18
- }
19
- return `'${key}'`;
20
- };
21
- /**
22
- * @example
23
- * (columns default-valuesID) -> columns['default-valuesID']
24
- * (columns defaultValues) -> columns.defaultValues
25
- */ const accessProperty = (objName, key)=>{
26
- const sanitized = sanitizeObjectKey(key);
27
- if (sanitized.startsWith("'")) {
28
- return `${objName}[${sanitized}]`;
29
- }
30
- return `${objName}.${key}`;
31
- };
32
- export const createSchemaGenerator = ({ columnToCodeConverter, corePackageSuffix, defaultOutputFile, enumImport, schemaImport, tableImport })=>{
33
- return async function generateSchema({ log = true, outputFile = defaultOutputFile, prettify = true } = {}) {
34
- const importDeclarations = {};
35
- const tableDeclarations = [];
36
- const enumDeclarations = [];
37
- const relationsDeclarations = [];
38
- const addImport = (from, name)=>{
39
- if (!importDeclarations[from]) {
40
- importDeclarations[from] = new Set();
41
- }
42
- importDeclarations[from].add(name);
43
- };
44
- const corePackage = `${this.packageName}/drizzle/${corePackageSuffix}`;
45
- let schemaDeclaration = null;
46
- if (this.schemaName) {
47
- addImport(corePackage, schemaImport);
48
- schemaDeclaration = `export const db_schema = ${schemaImport}('${this.schemaName}')`;
49
- }
50
- const enumFn = this.schemaName ? `db_schema.enum` : enumImport;
51
- const enumsList = [];
52
- const addEnum = (name, options)=>{
53
- if (enumsList.some((each)=>each === name)) {
54
- return;
55
- }
56
- enumsList.push(name);
57
- enumDeclarations.push(`export const ${name} = ${enumFn}('${name}', [${options.map((option)=>`'${option}'`).join(', ')}])`);
58
- };
59
- if (this.payload.config.localization && enumImport) {
60
- addEnum('enum__locales', this.payload.config.localization.localeCodes);
61
- }
62
- const tableFn = this.schemaName ? `db_schema.table` : tableImport;
63
- if (!this.schemaName) {
64
- addImport(corePackage, tableImport);
65
- }
66
- addImport(corePackage, 'index');
67
- addImport(corePackage, 'uniqueIndex');
68
- addImport(corePackage, 'foreignKey');
69
- addImport(`${this.packageName}/drizzle`, 'sql');
70
- addImport(`${this.packageName}/drizzle`, 'relations');
71
- for(const tableName in this.rawTables){
72
- const table = this.rawTables[tableName];
73
- const extrasDeclarations = [];
74
- if (table.indexes) {
75
- for(const key in table.indexes){
76
- const index = table.indexes[key];
77
- let indexDeclaration = `${sanitizeObjectKey(key)}: ${index.unique ? 'uniqueIndex' : 'index'}('${index.name}')`;
78
- indexDeclaration += `.on(${typeof index.on === 'string' ? `${accessProperty('columns', index.on)}` : `${index.on.map((on)=>`${accessProperty('columns', on)}`).join(', ')}`}),`;
79
- extrasDeclarations.push(indexDeclaration);
80
- }
81
- }
82
- if (table.foreignKeys) {
83
- for(const key in table.foreignKeys){
84
- const foreignKey = table.foreignKeys[key];
85
- let foreignKeyDeclaration = `${sanitizeObjectKey(key)}: foreignKey({
86
- columns: [${foreignKey.columns.map((col)=>`columns['${col}']`).join(', ')}],
87
- foreignColumns: [${foreignKey.foreignColumns.map((col)=>`${accessProperty(col.table, col.name)}`).join(', ')}],
88
- name: '${foreignKey.name}'
89
- })`;
90
- if (foreignKey.onDelete) {
91
- foreignKeyDeclaration += `.onDelete('${foreignKey.onDelete}')`;
92
- }
93
- if (foreignKey.onUpdate) {
94
- foreignKeyDeclaration += `.onUpdate('${foreignKey.onDelete}')`;
95
- }
96
- foreignKeyDeclaration += ',';
97
- extrasDeclarations.push(foreignKeyDeclaration);
98
- }
99
- }
100
- const tableCode = `
101
- export const ${tableName} = ${tableFn}('${tableName}', {
102
- ${Object.entries(table.columns).map(([key, column])=>` ${sanitizeObjectKey(key)}: ${columnToCodeConverter({
103
- adapter: this,
104
- addEnum,
105
- addImport,
106
- column,
107
- locales: this.payload.config.localization ? this.payload.config.localization.localeCodes : undefined
108
- })},`).join('\n')}
109
- }${extrasDeclarations.length ? `, (columns) => ({
110
- ${extrasDeclarations.join('\n ')}
111
- })` : ''}
112
- )
113
- `;
114
- tableDeclarations.push(tableCode);
115
- }
116
- for(const tableName in this.rawRelations){
117
- const relations = this.rawRelations[tableName];
118
- const properties = [];
119
- for(const key in relations){
120
- const relation = relations[key];
121
- let declaration;
122
- if (relation.type === 'one') {
123
- declaration = `${sanitizeObjectKey(key)}: one(${relation.to}, {
124
- ${relation.fields.some((field)=>field.table !== tableName) ? '// @ts-expect-error Drizzle TypeScript bug for ONE relationships with a field in different table' : ''}
125
- fields: [${relation.fields.map((field)=>`${accessProperty(field.table, field.name)}`).join(', ')}],
126
- references: [${relation.references.map((col)=>`${accessProperty(relation.to, col)}`).join(', ')}],
127
- ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}
128
- }),`;
129
- } else {
130
- declaration = `${sanitizeObjectKey(key)}: many(${relation.to}, {
131
- ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}
132
- }),`;
133
- }
134
- properties.push(declaration);
135
- }
136
- // beautify / lintify relations callback output, when no many for example, don't add it
137
- const args = [];
138
- if (Object.values(relations).some((rel)=>rel.type === 'one')) {
139
- args.push('one');
140
- }
141
- if (Object.values(relations).some((rel)=>rel.type === 'many')) {
142
- args.push('many');
143
- }
144
- const arg = args.length ? `{ ${args.join(', ')} }` : '';
145
- const declaration = `export const relations_${tableName} = relations(${tableName}, (${arg}) => ({
146
- ${properties.join('\n ')}
147
- }))`;
148
- relationsDeclarations.push(declaration);
149
- }
150
- if (enumDeclarations.length && !this.schemaName) {
151
- addImport(corePackage, enumImport);
152
- }
153
- const importDeclarationsSanitized = [];
154
- for(const moduleName in importDeclarations){
155
- const moduleImports = importDeclarations[moduleName];
156
- importDeclarationsSanitized.push(`import { ${Array.from(moduleImports).join(', ')} } from '${moduleName}'`);
157
- }
158
- const schemaType = `
159
- type DatabaseSchema = {
160
- ${[
161
- this.schemaName ? 'db_schema' : null,
162
- ...enumsList,
163
- ...Object.keys(this.rawTables),
164
- ...Object.keys(this.rawRelations).map((table)=>`relations_${table}`)
165
- ].filter(Boolean).map((name)=>`${name}: typeof ${name}`).join('\n ')}
166
- }
167
- `;
168
- const finalDeclaration = `
169
- declare module '${this.packageName}/types' {
170
- export interface GeneratedDatabaseSchema {
171
- schema: DatabaseSchema
172
- }
173
- }
174
- `;
175
- const warning = `
176
- /* tslint:disable */
177
- /* eslint-disable */
178
- /**
179
- * This file was automatically generated by Payload.
180
- * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,
181
- * and re-run \`payload generate:db-schema\` to regenerate this file.
182
- */
183
- `;
184
- const code = [
185
- warning,
186
- ...importDeclarationsSanitized,
187
- schemaDeclaration,
188
- ...enumDeclarations,
189
- ...tableDeclarations,
190
- ...relationsDeclarations,
191
- schemaType,
192
- finalDeclaration
193
- ].filter(Boolean).join('\n');
194
- if (!outputFile) {
195
- const cwd = process.cwd();
196
- const srcDir = path.resolve(cwd, 'src');
197
- if (existsSync(srcDir)) {
198
- outputFile = path.resolve(srcDir, 'payload-generated-schema.ts');
199
- } else {
200
- outputFile = path.resolve(cwd, 'payload-generated-schema.ts');
201
- }
202
- }
203
- await writeFile(outputFile, code, 'utf-8');
204
- if (prettify) {
205
- try {
206
- await execAsync(`npx prettier ${outputFile} --write`);
207
- // eslint-disable-next-line no-empty
208
- } catch {}
209
- }
210
- if (log) {
211
- this.payload.logger.info(`Written ${outputFile}`);
212
- }
213
- };
214
- };
215
-
216
- //# sourceMappingURL=createSchemaGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/createSchemaGenerator.ts"],"sourcesContent":["import type { GenerateSchema } from 'payload'\n\nimport { exec } from 'child_process'\nimport { existsSync } from 'fs'\nimport { writeFile } from 'fs/promises'\nimport path from 'path'\nimport { promisify } from 'util'\n\nimport type { ColumnToCodeConverter, DrizzleAdapter } from '../types.js'\n\nconst execAsync = promisify(exec)\n\n/**\n * @example\n * console.log(sanitizeObjectKey(\"oneTwo\")); // oneTwo\n * console.log(sanitizeObjectKey(\"one-two\")); // 'one-two'\n * console.log(sanitizeObjectKey(\"_one$Two3\")); // _one$Two3\n * console.log(sanitizeObjectKey(\"3invalid\")); // '3invalid'\n */\nconst sanitizeObjectKey = (key: string) => {\n // Regular expression for a valid identifier\n const identifierRegex = /^[a-z_$][\\w$]*$/i\n if (identifierRegex.test(key)) {\n return key\n }\n\n return `'${key}'`\n}\n\n/**\n * @example\n * (columns default-valuesID) -> columns['default-valuesID']\n * (columns defaultValues) -> columns.defaultValues\n */\nconst accessProperty = (objName: string, key: string) => {\n const sanitized = sanitizeObjectKey(key)\n\n if (sanitized.startsWith(\"'\")) {\n return `${objName}[${sanitized}]`\n }\n\n return `${objName}.${key}`\n}\n\nexport const createSchemaGenerator = ({\n columnToCodeConverter,\n corePackageSuffix,\n defaultOutputFile,\n enumImport,\n schemaImport,\n tableImport,\n}: {\n columnToCodeConverter: ColumnToCodeConverter\n corePackageSuffix: string\n defaultOutputFile?: string\n enumImport?: string\n schemaImport?: string\n tableImport: string\n}): GenerateSchema => {\n return async function generateSchema(\n this: DrizzleAdapter,\n { log = true, outputFile = defaultOutputFile, prettify = true } = {},\n ) {\n const importDeclarations: Record<string, Set<string>> = {}\n\n const tableDeclarations: string[] = []\n const enumDeclarations: string[] = []\n const relationsDeclarations: string[] = []\n\n const addImport = (from: string, name: string) => {\n if (!importDeclarations[from]) {\n importDeclarations[from] = new Set()\n }\n\n importDeclarations[from].add(name)\n }\n\n const corePackage = `${this.packageName}/drizzle/${corePackageSuffix}`\n\n let schemaDeclaration: null | string = null\n\n if (this.schemaName) {\n addImport(corePackage, schemaImport)\n schemaDeclaration = `export const db_schema = ${schemaImport}('${this.schemaName}')`\n }\n\n const enumFn = this.schemaName ? `db_schema.enum` : enumImport\n\n const enumsList: string[] = []\n const addEnum = (name: string, options: string[]) => {\n if (enumsList.some((each) => each === name)) {\n return\n }\n enumsList.push(name)\n enumDeclarations.push(\n `export const ${name} = ${enumFn}('${name}', [${options.map((option) => `'${option}'`).join(', ')}])`,\n )\n }\n\n if (this.payload.config.localization && enumImport) {\n addEnum('enum__locales', this.payload.config.localization.localeCodes)\n }\n\n const tableFn = this.schemaName ? `db_schema.table` : tableImport\n\n if (!this.schemaName) {\n addImport(corePackage, tableImport)\n }\n\n addImport(corePackage, 'index')\n addImport(corePackage, 'uniqueIndex')\n addImport(corePackage, 'foreignKey')\n\n addImport(`${this.packageName}/drizzle`, 'sql')\n addImport(`${this.packageName}/drizzle`, 'relations')\n\n for (const tableName in this.rawTables) {\n const table = this.rawTables[tableName]\n\n const extrasDeclarations: string[] = []\n\n if (table.indexes) {\n for (const key in table.indexes) {\n const index = table.indexes[key]\n let indexDeclaration = `${sanitizeObjectKey(key)}: ${index.unique ? 'uniqueIndex' : 'index'}('${index.name}')`\n indexDeclaration += `.on(${typeof index.on === 'string' ? `${accessProperty('columns', index.on)}` : `${index.on.map((on) => `${accessProperty('columns', on)}`).join(', ')}`}),`\n extrasDeclarations.push(indexDeclaration)\n }\n }\n\n if (table.foreignKeys) {\n for (const key in table.foreignKeys) {\n const foreignKey = table.foreignKeys[key]\n\n let foreignKeyDeclaration = `${sanitizeObjectKey(key)}: foreignKey({\n columns: [${foreignKey.columns.map((col) => `columns['${col}']`).join(', ')}],\n foreignColumns: [${foreignKey.foreignColumns.map((col) => `${accessProperty(col.table, col.name)}`).join(', ')}],\n name: '${foreignKey.name}' \n })`\n\n if (foreignKey.onDelete) {\n foreignKeyDeclaration += `.onDelete('${foreignKey.onDelete}')`\n }\n if (foreignKey.onUpdate) {\n foreignKeyDeclaration += `.onUpdate('${foreignKey.onDelete}')`\n }\n\n foreignKeyDeclaration += ','\n\n extrasDeclarations.push(foreignKeyDeclaration)\n }\n }\n\n const tableCode = `\nexport const ${tableName} = ${tableFn}('${tableName}', {\n${Object.entries(table.columns)\n .map(\n ([key, column]) =>\n ` ${sanitizeObjectKey(key)}: ${columnToCodeConverter({\n adapter: this,\n addEnum,\n addImport,\n column,\n locales: this.payload.config.localization\n ? this.payload.config.localization.localeCodes\n : undefined,\n })},`,\n )\n .join('\\n')}\n}${\n extrasDeclarations.length\n ? `, (columns) => ({\n ${extrasDeclarations.join('\\n ')} \n })`\n : ''\n }\n) \n`\n\n tableDeclarations.push(tableCode)\n }\n\n for (const tableName in this.rawRelations) {\n const relations = this.rawRelations[tableName]\n const properties: string[] = []\n\n for (const key in relations) {\n const relation = relations[key]\n let declaration: string\n\n if (relation.type === 'one') {\n declaration = `${sanitizeObjectKey(key)}: one(${relation.to}, {\n ${relation.fields.some((field) => field.table !== tableName) ? '// @ts-expect-error Drizzle TypeScript bug for ONE relationships with a field in different table' : ''}\n fields: [${relation.fields.map((field) => `${accessProperty(field.table, field.name)}`).join(', ')}],\n references: [${relation.references.map((col) => `${accessProperty(relation.to, col)}`).join(', ')}],\n ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}\n }),`\n } else {\n declaration = `${sanitizeObjectKey(key)}: many(${relation.to}, {\n ${relation.relationName ? `relationName: '${relation.relationName}',` : ''}\n }),`\n }\n\n properties.push(declaration)\n }\n\n // beautify / lintify relations callback output, when no many for example, don't add it\n const args = []\n\n if (Object.values(relations).some((rel) => rel.type === 'one')) {\n args.push('one')\n }\n\n if (Object.values(relations).some((rel) => rel.type === 'many')) {\n args.push('many')\n }\n\n const arg = args.length ? `{ ${args.join(', ')} }` : ''\n\n const declaration = `export const relations_${tableName} = relations(${tableName}, (${arg}) => ({\n ${properties.join('\\n ')}\n }))`\n\n relationsDeclarations.push(declaration)\n }\n\n if (enumDeclarations.length && !this.schemaName) {\n addImport(corePackage, enumImport)\n }\n\n const importDeclarationsSanitized: string[] = []\n\n for (const moduleName in importDeclarations) {\n const moduleImports = importDeclarations[moduleName]\n\n importDeclarationsSanitized.push(\n `import { ${Array.from(moduleImports).join(', ')} } from '${moduleName}'`,\n )\n }\n\n const schemaType = `\ntype DatabaseSchema = {\n ${[\n this.schemaName ? 'db_schema' : null,\n ...enumsList,\n ...Object.keys(this.rawTables),\n ...Object.keys(this.rawRelations).map((table) => `relations_${table}`),\n ]\n .filter(Boolean)\n .map((name) => `${name}: typeof ${name}`)\n .join('\\n ')}\n}\n `\n\n const finalDeclaration = `\ndeclare module '${this.packageName}/types' {\n export interface GeneratedDatabaseSchema {\n schema: DatabaseSchema\n }\n}\n `\n\n const warning = `\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`\n\n const code = [\n warning,\n ...importDeclarationsSanitized,\n schemaDeclaration,\n ...enumDeclarations,\n ...tableDeclarations,\n ...relationsDeclarations,\n schemaType,\n finalDeclaration,\n ]\n .filter(Boolean)\n .join('\\n')\n\n if (!outputFile) {\n const cwd = process.cwd()\n const srcDir = path.resolve(cwd, 'src')\n\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, code, 'utf-8')\n\n if (prettify) {\n try {\n await execAsync(`npx prettier ${outputFile} --write`)\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n if (log) {\n this.payload.logger.info(`Written ${outputFile}`)\n }\n }\n}\n"],"names":["exec","existsSync","writeFile","path","promisify","execAsync","sanitizeObjectKey","key","identifierRegex","test","accessProperty","objName","sanitized","startsWith","createSchemaGenerator","columnToCodeConverter","corePackageSuffix","defaultOutputFile","enumImport","schemaImport","tableImport","generateSchema","log","outputFile","prettify","importDeclarations","tableDeclarations","enumDeclarations","relationsDeclarations","addImport","from","name","Set","add","corePackage","packageName","schemaDeclaration","schemaName","enumFn","enumsList","addEnum","options","some","each","push","map","option","join","payload","config","localization","localeCodes","tableFn","tableName","rawTables","table","extrasDeclarations","indexes","index","indexDeclaration","unique","on","foreignKeys","foreignKey","foreignKeyDeclaration","columns","col","foreignColumns","onDelete","onUpdate","tableCode","Object","entries","column","adapter","locales","undefined","length","rawRelations","relations","properties","relation","declaration","type","to","fields","field","references","relationName","args","values","rel","arg","importDeclarationsSanitized","moduleName","moduleImports","Array","schemaType","keys","filter","Boolean","finalDeclaration","warning","code","cwd","process","srcDir","resolve","logger","info"],"mappings":"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"}