orchid-orm 1.9.22 → 1.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/table.ts","../src/relations/belongsTo.ts","../src/relations/utils.ts","../src/relations/hasOne.ts","../src/relations/hasMany.ts","../src/relations/hasAndBelongsToMany.ts","../src/relations/relations.ts","../src/transaction.ts","../src/orm.ts","../src/repo.ts","../src/codegen/fileChanges.ts","../src/codegen/tsUtils.ts","../src/codegen/updateMainFile.ts","../src/codegen/updateTableFile/handleForeignKey.ts","../src/codegen/updateTableFile/createTable.ts","../src/codegen/updateTableFile/changeTable.ts","../src/codegen/updateTableFile/renameTable.ts","../src/codegen/updateTableFile/updateTableFile.ts","../src/codegen/createBaseTableFile.ts","../src/codegen/updateTableFile/updateRelations.ts","../src/codegen/appCodeUpdater.ts"],"sourcesContent":["import {\n ColumnsShape,\n columnTypes as defaultColumnTypes,\n Db,\n DefaultColumnTypes,\n getColumnTypes,\n Query,\n} from 'pqb';\nimport {\n ColumnShapeOutput,\n ColumnTypesBase,\n getCallerFilePath,\n snakeCaseKey,\n StringKey,\n toSnakeCase,\n} from 'orchid-core';\nimport { MapRelations, Relation, RelationThunks } from './relations/relations';\nimport { OrchidORM } from './orm';\n\n// type of table class itself\nexport type TableClass<T extends Table = Table> = new () => T;\n\n// object with table classes, used on orchidORM() for setting tables\nexport type TableClasses = Record<string, TableClass>;\n\n// convert table instance type to queryable interface\n// processes relations to a type that's understandable by `pqb`\n// add ORM table specific metadata like `definedAt`, `db`, `filePath`\nexport type TableToDb<T extends Table> = Db<\n T['table'],\n T['columns']['shape'],\n 'relations' extends keyof T\n ? T['relations'] extends RelationThunks\n ? {\n [K in StringKey<keyof T['relations']>]: Relation<\n T,\n T['relations'],\n K\n >;\n }\n : Query['relations']\n : Query['relations'],\n T['columnTypes']\n> & { definedAs: string; db: OrchidORM; filePath: string; name: string };\n\n// convert a table class type into queryable interface\n// add relation methods\nexport type DbTable<T extends TableClass> = TableToDb<InstanceType<T>> &\n Omit<MapRelations<InstanceType<T>>, keyof Query>;\n\n// `columns` property of table has a shape and an output type of the columns\ntype ColumnsConfig = {\n shape: ColumnsShape;\n type: unknown;\n};\n\n// callback with a query of relation, to use as a default scope\ntype ScopeFn<Related extends TableClass, Scope extends Query> = (\n q: DbTable<Related>,\n) => Scope;\n\n// type of table instance created by a table class\nexport type Table = {\n table: string;\n columns: ColumnsConfig;\n schema?: string;\n columnTypes: ColumnTypesBase;\n noPrimaryKey?: boolean;\n filePath: string;\n};\n\n// base table constructor\nexport const createBaseTable = <CT extends ColumnTypesBase>(\n {\n columnTypes,\n snakeCase,\n filePath,\n nowSQL,\n }: {\n // concrete column types or a callback for overriding standard column types\n // this types will be used in tables to define their columns\n columnTypes?: CT | ((t: DefaultColumnTypes) => CT);\n // when set to true, all columns will be translated to `snake_case` when querying database\n snakeCase?: boolean;\n // if for some unknown reason you see error that file path for a table can't be guessed automatically,\n // provide it manually via `filePath`\n filePath?: string;\n // if `now()` for some reason doesn't suite your timestamps, provide a custom SQL for it\n nowSQL?: string;\n } = { columnTypes: defaultColumnTypes as unknown as CT },\n) => {\n const ct =\n typeof columnTypes === 'function'\n ? columnTypes(defaultColumnTypes)\n : columnTypes || defaultColumnTypes;\n\n filePath ??= getCallerFilePath();\n if (!filePath) {\n throw new Error(\n `Failed to determine file path of a base table. Please set the \\`filePath\\` option of \\`createBaseTable\\` manually.`,\n );\n }\n\n return create(\n ct as ColumnTypesBase extends CT ? DefaultColumnTypes : CT,\n filePath,\n snakeCase,\n nowSQL,\n );\n};\n\nconst create = <CT extends ColumnTypesBase>(\n columnTypes: CT,\n filePath: string,\n snakeCase?: boolean,\n nowSQL?: string,\n) => {\n const base = class BaseTable {\n static filePath = filePath;\n static nowSQL = nowSQL;\n\n table!: string;\n columns!: ColumnsConfig;\n schema?: string;\n noPrimaryKey?: boolean;\n snakeCase = snakeCase;\n columnTypes: CT;\n filePath!: string;\n\n constructor() {\n this.columnTypes = columnTypes;\n }\n\n setColumns<T extends ColumnsShape>(\n fn: (t: CT) => T,\n ): { shape: T; type: ColumnShapeOutput<T> } {\n if (!this.filePath) {\n const filePath = getCallerFilePath();\n if (!filePath) {\n throw new Error(\n `Failed to determine file path for table ${this.constructor.name}. Please set \\`filePath\\` property manually`,\n );\n }\n\n this.filePath = filePath;\n }\n\n (columnTypes as { [snakeCaseKey]?: boolean })[snakeCaseKey] =\n this.snakeCase;\n\n const shape = getColumnTypes(columnTypes, fn, nowSQL);\n\n if (this.snakeCase) {\n for (const key in shape) {\n const column = shape[key];\n if (column.data.name) continue;\n\n const snakeName = toSnakeCase(key);\n if (snakeName !== key) {\n column.data.name = snakeName;\n }\n }\n }\n\n return {\n shape,\n type: undefined as unknown as ColumnShapeOutput<T>,\n };\n }\n\n belongsTo<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Options extends {\n primaryKey: keyof InstanceType<Related>['columns']['shape'];\n foreignKey: keyof Self['columns']['shape'];\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'belongsTo' as const,\n returns: 'one' as const,\n fn,\n options,\n };\n }\n\n hasOne<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Through extends string,\n Source extends string,\n Options extends (\n | {\n primaryKey: keyof Self['columns']['shape'];\n foreignKey: keyof InstanceType<Related>['columns']['shape'];\n }\n | {\n through: Through;\n source: Source;\n }\n ) & {\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'hasOne' as const,\n returns: 'one' as const,\n fn,\n options,\n };\n }\n\n hasMany<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Through extends string,\n Source extends string,\n Options extends (\n | {\n primaryKey: keyof Self['columns']['shape'];\n foreignKey: keyof InstanceType<Related>['columns']['shape'];\n }\n | {\n through: Through;\n source: Source;\n }\n ) & {\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'hasMany' as const,\n returns: 'many' as const,\n fn,\n options,\n };\n }\n\n hasAndBelongsToMany<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Options extends {\n primaryKey: keyof Self['columns']['shape'];\n associationPrimaryKey: keyof InstanceType<Related>['columns']['shape'];\n foreignKey: string;\n associationForeignKey: string;\n joinTable: string;\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'hasAndBelongsToMany' as const,\n returns: 'many' as const,\n fn,\n options,\n };\n }\n };\n\n base.prototype.columnTypes = columnTypes;\n\n return base;\n};\n","import { Table } from '../table';\nimport {\n addQueryOn,\n BelongsToRelation,\n CreateCtx,\n InsertQueryData,\n isQueryReturnsAll,\n pushQueryValue,\n Query,\n QueryBase,\n QueryResult,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\nimport { RelationData, RelationThunkBase } from './relations';\nimport { NestedInsertOneItem, NestedUpdateOneItem } from './utils';\n\nexport interface BelongsTo extends RelationThunkBase {\n type: 'belongsTo';\n returns: 'one';\n options: BelongsToRelation['options'];\n}\n\nexport type BelongsToInfo<\n T extends Table,\n Relation extends BelongsTo,\n FK extends string = Relation['options']['foreignKey'],\n> = {\n params: Record<FK, T['columns']['shape'][FK]['type']>;\n populate: never;\n chainedCreate: false;\n chainedDelete: false;\n};\n\ntype State = {\n query: Query;\n primaryKey: string;\n foreignKey: string;\n};\n\ntype BelongsToNestedInsert = (\n query: Query,\n relationData: NestedInsertOneItem[],\n) => Promise<Record<string, unknown>[]>;\n\ntype BelongsToNestedUpdate = (\n q: Query,\n update: Record<string, unknown>,\n params: NestedUpdateOneItem,\n state: {\n queries?: ((queryResult: QueryResult) => Promise<void>)[];\n updateData?: Record<string, unknown>;\n },\n) => boolean;\n\nclass BelongsToVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: BelongsToNestedInsert;\n private readonly nestedUpdate: BelongsToNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(this.state);\n this.nestedUpdate = nestedUpdate(this.state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n const {\n key,\n state: { foreignKey, primaryKey },\n } = this;\n\n let columnIndex = ctx.columns.get(foreignKey);\n if (columnIndex === undefined) {\n ctx.columns.set(foreignKey, (columnIndex = ctx.columns.size));\n }\n\n const store = ctx as unknown as {\n belongsTo?: Record<string, [number, number, unknown][]>;\n };\n\n if (!store.belongsTo) store.belongsTo = {};\n\n const values = [rowIndex, columnIndex, item[key]] as [\n number,\n number,\n unknown,\n ];\n\n if (store.belongsTo[key]) {\n store.belongsTo[key].push(values);\n return;\n }\n\n const relationData = [values];\n store.belongsTo[key] = relationData;\n q.query.wrapInTransaction = true;\n\n pushQueryValue(q, 'beforeCreate', async (q: Query) => {\n const inserted = await this.nestedInsert(\n q,\n relationData.map(([, , data]) => data as NestedInsertOneItem),\n );\n\n const { values } = q.query as InsertQueryData;\n relationData.forEach(([rowIndex, columnIndex], index) => {\n (values as unknown[][])[rowIndex][columnIndex] =\n inserted[index][primaryKey];\n });\n });\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n q.query.wrapInTransaction = true;\n\n const data = set[this.key] as NestedUpdateOneItem;\n if (this.nestedUpdate(q, set, data, ctx)) {\n ctx.willSetKeys = true;\n }\n }\n}\n\nexport const makeBelongsToMethod = (\n relation: BelongsTo,\n relationName: string,\n query: Query,\n): RelationData => {\n const { primaryKey, foreignKey } = relation.options;\n const state: State = { query, primaryKey, foreignKey };\n\n return {\n returns: 'one',\n method: (params: Record<string, unknown>) => {\n return query.findBy({ [primaryKey]: params[foreignKey] });\n },\n virtualColumn: new BelongsToVirtualColumn(relationName, state),\n joinQuery(fromQuery, toQuery) {\n return addQueryOn(toQuery, fromQuery, toQuery, primaryKey, foreignKey);\n },\n reverseJoin(fromQuery, toQuery) {\n return addQueryOn(fromQuery, toQuery, fromQuery, foreignKey, primaryKey);\n },\n primaryKey,\n };\n};\n\nconst nestedInsert = ({ query, primaryKey }: State) => {\n return (async (_, data) => {\n const connectOrCreate = data.filter(\n (\n item,\n ): item is {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n } => Boolean(item.connectOrCreate),\n );\n\n const t = query.clone();\n\n let connectOrCreated: unknown[];\n if (connectOrCreate.length) {\n connectOrCreated = await Promise.all(\n connectOrCreate.map((item) =>\n t.findBy(item.connectOrCreate.where)._takeOptional(),\n ),\n );\n } else {\n connectOrCreated = [];\n }\n\n let connectOrCreatedI = 0;\n const create = data.filter(\n (\n item,\n ): item is\n | {\n create: Record<string, unknown>;\n }\n | {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n } => {\n if (item.connectOrCreate) {\n return !connectOrCreated[connectOrCreatedI++];\n } else {\n return Boolean(item.create);\n }\n },\n );\n\n let created: unknown[];\n if (create.length) {\n created = (await t\n .select(primaryKey)\n ._createMany(\n create.map((item) =>\n 'create' in item ? item.create : item.connectOrCreate.create,\n ),\n )) as unknown[];\n } else {\n created = [];\n }\n\n const connect = data.filter(\n (\n item,\n ): item is {\n connect: WhereArg<QueryBase>;\n } => Boolean(item.connect),\n );\n\n let connected: unknown[];\n if (connect.length) {\n connected = await Promise.all(\n connect.map((item) => t.findBy(item.connect)._take()),\n );\n } else {\n connected = [];\n }\n\n let createdI = 0;\n let connectedI = 0;\n connectOrCreatedI = 0;\n return data.map((item) =>\n item.connectOrCreate\n ? connectOrCreated[connectOrCreatedI++] || created[createdI++]\n : item.connect\n ? connected[connectedI++]\n : created[createdI++],\n ) as Record<string, unknown>[];\n }) as BelongsToNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKey, foreignKey }: State) => {\n return ((q, update, params, state) => {\n if (params.upsert && isQueryReturnsAll(q)) {\n throw new Error('`upsert` option is not allowed in a batch update');\n }\n\n let idForDelete: unknown;\n\n q._beforeUpdate(async (q) => {\n if (params.disconnect) {\n update[foreignKey] = null;\n } else if (params.set) {\n if (primaryKey in params.set) {\n update[foreignKey] =\n params.set[primaryKey as keyof typeof params.set];\n } else {\n update[foreignKey] = await query.findBy(params.set)._get(primaryKey);\n }\n } else if (params.create) {\n update[foreignKey] = await query.get(primaryKey)._create(params.create);\n } else if (params.delete) {\n const selectQuery = q.clone();\n selectQuery.query.type = undefined;\n idForDelete = await selectQuery._getOptional(foreignKey);\n update[foreignKey] = null;\n }\n });\n\n const { upsert } = params;\n if (upsert || params.update || params.delete) {\n if (\n !q.query.select?.includes('*') &&\n !q.query.select?.includes(foreignKey)\n ) {\n q._select(foreignKey);\n }\n }\n\n if (upsert) {\n (state.queries ??= []).push(async (queryResult) => {\n const id = queryResult.rows[0][foreignKey];\n if (id !== null) {\n await query\n .findBy({ [primaryKey]: id })\n ._update<WhereResult<Query>>(upsert.update);\n } else {\n const data =\n typeof upsert.create === 'function'\n ? upsert.create()\n : upsert.create;\n const result = await query.select(primaryKey)._create(data);\n\n (state.updateData ??= {})[foreignKey] = result[primaryKey];\n }\n });\n } else if (params.delete || params.update) {\n q._afterQuery(async (_, data) => {\n const id = params.delete\n ? idForDelete\n : Array.isArray(data)\n ? data.length === 0\n ? null\n : {\n in: data\n .map((item) => item[foreignKey])\n .filter((id) => id !== null),\n }\n : (data as Record<string, unknown>)[foreignKey];\n\n if (id !== undefined && id !== null) {\n const t = query.findBy({\n [primaryKey]: id,\n });\n\n if (params.delete) {\n await t._delete();\n } else if (params.update) {\n await t._update<WhereResult<Query>>(params.update);\n }\n }\n });\n }\n\n return !params.update && !params.upsert;\n }) as BelongsToNestedUpdate;\n};\n","import {\n CreateCtx,\n pushQueryValue,\n Query,\n QueryBase,\n Relation,\n UpdateCtx,\n UpdateData,\n WhereArg,\n} from 'pqb';\nimport { MaybeArray } from 'orchid-core';\nimport { HasOneNestedInsert, HasOneNestedUpdate } from './hasOne';\nimport { HasManyNestedInsert, HasManyNestedUpdate } from './hasMany';\n\nexport type NestedInsertOneItem = {\n create?: Record<string, unknown>;\n connect?: WhereArg<QueryBase>;\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n};\n\nexport type NestedInsertManyItems = {\n create?: Record<string, unknown>[];\n connect?: WhereArg<QueryBase>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n};\n\nexport type NestedInsertItem = NestedInsertOneItem | NestedInsertManyItems;\n\nexport type NestedUpdateOneItem = {\n disconnect?: boolean;\n set?: WhereArg<QueryBase>;\n delete?: boolean;\n update?: UpdateData<Query>;\n upsert?: {\n update: UpdateData<Query>;\n create: Record<string, unknown> | (() => Record<string, unknown>);\n };\n create: Record<string, unknown>;\n};\n\nexport type NestedUpdateManyItems = {\n disconnect?: MaybeArray<WhereArg<QueryBase>>;\n set?: MaybeArray<WhereArg<QueryBase>>;\n delete?: MaybeArray<WhereArg<QueryBase>>;\n update?: {\n where: MaybeArray<WhereArg<QueryBase>>;\n data: UpdateData<Query>;\n };\n create: Record<string, unknown>[];\n};\n\nexport type NestedUpdateItem = NestedUpdateOneItem | NestedUpdateManyItems;\n\nexport const getThroughRelation = (table: Query, through: string) => {\n return (table.relations as Record<string, Relation>)[through];\n};\n\nexport const getSourceRelation = (\n throughRelation: Relation,\n source: string,\n) => {\n return (throughRelation.table.relations as Record<string, Relation>)[source];\n};\n\nexport const hasRelationHandleCreate = (\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n key: string,\n primaryKey: string,\n nestedInsert: HasOneNestedInsert | HasManyNestedInsert,\n) => {\n const value = item[key] as NestedInsertItem;\n if (\n (!value.create ||\n (Array.isArray(value.create) && value.create.length === 0)) &&\n (!value.connect ||\n (Array.isArray(value.connect) && value.connect.length === 0)) &&\n (!value.connectOrCreate ||\n (Array.isArray(value.connectOrCreate) &&\n value.connectOrCreate.length === 0))\n )\n return;\n\n const store = ctx as unknown as {\n hasRelation?: Record<string, [number, NestedInsertItem][]>;\n };\n\n if (!store.hasRelation) store.hasRelation = {};\n\n const values = [rowIndex, value] as [number, NestedInsertItem];\n\n if (store.hasRelation[key]) {\n store.hasRelation[key].push(values);\n return;\n }\n\n q.query.wrapInTransaction = true;\n ctx.returnTypeAll = true;\n ctx.requiredReturning[primaryKey] = true;\n\n const relationData = [values];\n store.hasRelation[key] = relationData;\n\n pushQueryValue(q, 'afterCreate', async (q: Query) => {\n const { resultAll } = ctx;\n return (nestedInsert as HasOneNestedInsert)(\n q,\n relationData.map(([rowIndex, data]) => [\n resultAll[rowIndex],\n data as NestedInsertOneItem,\n ]),\n );\n });\n};\n\nexport const hasRelationHandleUpdate = (\n q: Query,\n ctx: UpdateCtx,\n set: Record<string, unknown>,\n key: string,\n primaryKey: string,\n nestedUpdate: HasOneNestedUpdate | HasManyNestedUpdate,\n) => {\n const value = set[key] as NestedUpdateItem;\n\n if (\n !value.set &&\n !('upsert' in value) &&\n (!value.disconnect ||\n (Array.isArray(value.disconnect) && value.disconnect.length === 0)) &&\n (!value.delete ||\n (Array.isArray(value.delete) && value.delete.length === 0)) &&\n (!value.update ||\n (Array.isArray(value.update.where) && value.update.where.length === 0)) &&\n (!value.create ||\n (Array.isArray(value.create) && value.create.length === 0))\n )\n return;\n\n if (!q.query.select?.includes('*') && !q.query.select?.includes(primaryKey)) {\n q._select(primaryKey);\n }\n\n q.query.wrapInTransaction = true;\n ctx.returnTypeAll = true;\n\n pushQueryValue(q, 'afterUpdate', (q: Query) => {\n return (nestedUpdate as HasOneNestedUpdate)(\n q,\n ctx.resultAll,\n value as NestedUpdateOneItem,\n );\n });\n};\n","import {\n addQueryOn,\n CreateCtx,\n getQueryAs,\n HasOneRelation,\n InsertQueryData,\n isQueryReturnsAll,\n JoinCallback,\n Query,\n QueryBase,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\nimport { Table } from '../table';\nimport {\n RelationData,\n RelationInfo,\n RelationThunkBase,\n RelationThunks,\n} from './relations';\nimport {\n getSourceRelation,\n getThroughRelation,\n hasRelationHandleCreate,\n hasRelationHandleUpdate,\n NestedInsertOneItem,\n NestedUpdateOneItem,\n} from './utils';\n\nexport interface HasOne extends RelationThunkBase {\n type: 'hasOne';\n returns: 'one';\n options: HasOneRelation['options'];\n}\n\nexport type HasOneInfo<\n T extends Table,\n Relations extends RelationThunks,\n Relation extends HasOne,\n> = {\n params: Relation['options'] extends { primaryKey: string }\n ? Record<\n Relation['options']['primaryKey'],\n T['columns']['shape'][Relation['options']['primaryKey']]['type']\n >\n : Relation['options'] extends { through: string }\n ? RelationInfo<\n T,\n Relations,\n Relations[Relation['options']['through']]\n >['params']\n : never;\n populate: Relation['options'] extends { foreignKey: string }\n ? Relation['options']['foreignKey']\n : never;\n chainedCreate: Relation['options'] extends { primaryKey: string }\n ? true\n : false;\n chainedDelete: true;\n};\n\ntype State = {\n query: Query;\n primaryKey: string;\n foreignKey: string;\n};\n\nexport type HasOneNestedInsert = (\n query: Query,\n data: [\n selfData: Record<string, unknown>,\n relationData: NestedInsertOneItem,\n ][],\n) => Promise<void>;\n\nexport type HasOneNestedUpdate = (\n query: Query,\n data: Record<string, unknown>[],\n relationData: NestedUpdateOneItem,\n) => Promise<void>;\n\nclass HasOneVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: HasOneNestedInsert;\n private readonly nestedUpdate: HasOneNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(state);\n this.nestedUpdate = nestedUpdate(state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n hasRelationHandleCreate(\n q,\n ctx,\n item,\n rowIndex,\n this.key,\n this.state.primaryKey,\n this.nestedInsert,\n );\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n hasRelationHandleUpdate(\n q,\n ctx,\n set,\n this.key,\n this.state.primaryKey,\n this.nestedUpdate,\n );\n }\n}\n\nexport const makeHasOneMethod = (\n table: Query,\n relation: HasOne,\n relationName: string,\n query: Query,\n): RelationData => {\n if (relation.options.required) {\n query._take();\n } else {\n query._takeOptional();\n }\n\n if ('through' in relation.options) {\n const { through, source } = relation.options;\n\n type TableWithQueryMethod = Record<\n string,\n (params: Record<string, unknown>) => Query\n >;\n\n const throughRelation = getThroughRelation(table, through);\n const sourceRelation = getSourceRelation(throughRelation, source);\n const sourceQuery = sourceRelation\n .joinQuery(throughRelation.query, sourceRelation.query)\n .as(relationName);\n\n const whereExistsCallback = () => sourceQuery;\n\n return {\n returns: 'one',\n method: (params: Record<string, unknown>) => {\n const throughQuery = (table as unknown as TableWithQueryMethod)[\n through\n ](params);\n\n return query.whereExists<Query, Query>(\n throughQuery,\n whereExistsCallback as unknown as JoinCallback<Query, Query>,\n );\n },\n joinQuery(fromQuery, toQuery) {\n return toQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n primaryKey: sourceRelation.primaryKey,\n };\n }\n\n const { primaryKey, foreignKey } = relation.options;\n const state: State = { query, primaryKey, foreignKey };\n\n const fromQuerySelect = [{ selectAs: { [foreignKey]: primaryKey } }];\n\n return {\n returns: 'one',\n method: (params: Record<string, unknown>) => {\n const values = { [foreignKey]: params[primaryKey] };\n return query.where(values)._defaults(values);\n },\n virtualColumn: new HasOneVirtualColumn(relationName, state),\n joinQuery(fromQuery, toQuery) {\n return addQueryOn(toQuery, fromQuery, toQuery, foreignKey, primaryKey);\n },\n reverseJoin(fromQuery, toQuery) {\n return addQueryOn(fromQuery, toQuery, fromQuery, primaryKey, foreignKey);\n },\n primaryKey,\n modifyRelatedQuery(relationQuery) {\n return (query) => {\n const fromQuery = query.clone();\n fromQuery.query.select = fromQuerySelect;\n (relationQuery.query as InsertQueryData).values = { from: fromQuery };\n };\n },\n };\n};\n\nconst nestedInsert = ({ query, primaryKey, foreignKey }: State) => {\n return (async (_, data) => {\n const connect = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n (\n | {\n connect: WhereArg<QueryBase>;\n }\n | {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n }\n ),\n ] => Boolean(item[1].connect || item[1].connectOrCreate),\n );\n\n const t = query.clone();\n\n let connected: number[];\n if (connect.length) {\n connected = await Promise.all(\n connect.map(([selfData, item]) => {\n const data = { [foreignKey]: selfData[primaryKey] };\n return 'connect' in item\n ? (\n t.where(item.connect) as Omit<Query, 'meta'> & {\n meta: Omit<Query['meta'], 'hasSelect' | 'hasWhere'> & {\n hasWhere: true;\n };\n }\n )._updateOrThrow(data)\n : (\n t.where(item.connectOrCreate.where) as Omit<Query, 'meta'> & {\n meta: Omit<Query['meta'], 'hasSelect' | 'hasWhere'> & {\n hasWhere: true;\n };\n }\n )._update(data);\n }),\n );\n } else {\n connected = [];\n }\n\n let connectedI = 0;\n const create = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n (\n | { create: Record<string, unknown> }\n | {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n }\n ),\n ] => {\n if (item[1].connectOrCreate) {\n return !connected[connectedI++];\n }\n return Boolean(item[1].create);\n },\n );\n\n if (create.length) {\n await t._count()._createMany(\n create.map(([selfData, item]) => ({\n [foreignKey]: selfData[primaryKey],\n ...('create' in item ? item.create : item.connectOrCreate.create),\n })),\n );\n }\n }) as HasOneNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKey, foreignKey }: State) => {\n return (async (q, data, params) => {\n if (\n (params.set || params.create || params.upsert) &&\n isQueryReturnsAll(q)\n ) {\n const key = params.set ? 'set' : params.create ? 'create' : 'upsert';\n throw new Error(`\\`${key}\\` option is not allowed in a batch update`);\n }\n\n const t = query.clone();\n const ids = data.map((item) => item[primaryKey]);\n const currentRelationsQuery = t.where({\n [foreignKey]: { in: ids },\n });\n\n if (params.create || params.disconnect || params.set) {\n await currentRelationsQuery._update({ [foreignKey]: null });\n\n if (params.create) {\n await t._count()._create({\n ...params.create,\n [foreignKey]: data[0][primaryKey],\n });\n }\n if (params.set) {\n await t\n ._where<Query>(params.set)\n ._update({ [foreignKey]: data[0][primaryKey] });\n }\n } else if (params.update) {\n await currentRelationsQuery._update<WhereResult<Query>>(params.update);\n } else if (params.delete) {\n await currentRelationsQuery._delete();\n } else if (params.upsert) {\n const { update, create } = params.upsert;\n const updatedIds: unknown[] = await currentRelationsQuery\n ._pluck(foreignKey)\n ._update<WhereResult<Query & { meta: { hasSelect: true } }>>(update);\n\n if (updatedIds.length < ids.length) {\n const data = typeof create === 'function' ? create() : create;\n\n await t.createMany(\n ids\n .filter((id) => !updatedIds.includes(id))\n .map((id) => ({\n ...data,\n [foreignKey]: id,\n })),\n );\n }\n }\n }) as HasOneNestedUpdate;\n};\n","import {\n RelationData,\n RelationInfo,\n RelationThunkBase,\n RelationThunks,\n} from './relations';\nimport { Table } from '../table';\nimport {\n addQueryOn,\n getQueryAs,\n HasManyRelation,\n CreateData,\n JoinCallback,\n Query,\n QueryBase,\n toSqlCacheKey,\n WhereArg,\n WhereResult,\n InsertQueryData,\n isQueryReturnsAll,\n VirtualColumn,\n CreateCtx,\n UpdateCtx,\n} from 'pqb';\nimport { MaybeArray } from 'orchid-core';\nimport {\n getSourceRelation,\n getThroughRelation,\n hasRelationHandleCreate,\n hasRelationHandleUpdate,\n NestedInsertManyItems,\n NestedUpdateManyItems,\n} from './utils';\n\nexport interface HasMany extends RelationThunkBase {\n type: 'hasMany';\n returns: 'many';\n options: HasManyRelation['options'];\n}\n\nexport type HasManyInfo<\n T extends Table,\n Relations extends RelationThunks,\n Relation extends HasMany,\n> = {\n params: Relation['options'] extends { primaryKey: string }\n ? Record<\n Relation['options']['primaryKey'],\n T['columns']['shape'][Relation['options']['primaryKey']]['type']\n >\n : Relation['options'] extends { through: string }\n ? RelationInfo<\n T,\n Relations,\n Relations[Relation['options']['through']]\n >['params']\n : never;\n populate: Relation['options'] extends { foreignKey: string }\n ? Relation['options']['foreignKey']\n : never;\n chainedCreate: Relation['options'] extends { primaryKey: string }\n ? true\n : false;\n chainedDelete: true;\n};\n\ntype State = {\n query: Query;\n primaryKey: string;\n foreignKey: string;\n};\n\nexport type HasManyNestedUpdate = (\n query: Query,\n data: Record<string, unknown>[],\n relationData: NestedUpdateManyItems,\n) => Promise<void>;\n\nexport type HasManyNestedInsert = (\n query: Query,\n data: [\n selfData: Record<string, unknown>,\n relationData: NestedInsertManyItems,\n ][],\n) => Promise<void>;\n\nclass HasManyVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: HasManyNestedInsert;\n private readonly nestedUpdate: HasManyNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(state);\n this.nestedUpdate = nestedUpdate(state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n hasRelationHandleCreate(\n q,\n ctx,\n item,\n rowIndex,\n this.key,\n this.state.primaryKey,\n this.nestedInsert,\n );\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n hasRelationHandleUpdate(\n q,\n ctx,\n set,\n this.key,\n this.state.primaryKey,\n this.nestedUpdate,\n );\n }\n}\n\nexport const makeHasManyMethod = (\n table: Query,\n relation: HasMany,\n relationName: string,\n query: Query,\n): RelationData => {\n if ('through' in relation.options) {\n const { through, source } = relation.options;\n\n type TableWithQueryMethod = Record<\n string,\n (params: Record<string, unknown>) => Query\n >;\n\n const throughRelation = getThroughRelation(table, through);\n const sourceRelation = getSourceRelation(throughRelation, source);\n const sourceRelationQuery = sourceRelation.query.as(relationName);\n const sourceQuery = sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelationQuery,\n );\n\n const whereExistsCallback = () => sourceQuery;\n\n return {\n returns: 'many',\n method: (params: Record<string, unknown>) => {\n const throughQuery = (table as unknown as TableWithQueryMethod)[\n through\n ](params);\n\n return query.whereExists<Query, Query>(\n throughQuery,\n whereExistsCallback as unknown as JoinCallback<Query, Query>,\n );\n },\n joinQuery(fromQuery, toQuery) {\n return toQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n primaryKey: sourceRelation.primaryKey,\n };\n }\n\n const { primaryKey, foreignKey } = relation.options;\n const state: State = { query, primaryKey, foreignKey };\n\n const fromQuerySelect = [{ selectAs: { [foreignKey]: primaryKey } }];\n\n return {\n returns: 'many',\n method: (params: Record<string, unknown>) => {\n const values = { [foreignKey]: params[primaryKey] };\n return query.where(values)._defaults(values);\n },\n virtualColumn: new HasManyVirtualColumn(relationName, state),\n joinQuery(fromQuery, toQuery) {\n return addQueryOn(toQuery, fromQuery, toQuery, foreignKey, primaryKey);\n },\n reverseJoin(fromQuery, toQuery) {\n return addQueryOn(fromQuery, toQuery, fromQuery, primaryKey, foreignKey);\n },\n primaryKey,\n modifyRelatedQuery(relationQuery) {\n return (query) => {\n const fromQuery = query.clone();\n fromQuery.query.select = fromQuerySelect;\n (relationQuery.query as InsertQueryData).values = { from: fromQuery };\n };\n },\n };\n};\n\nconst getWhereForNestedUpdate = (\n data: Record<string, unknown>[],\n params: MaybeArray<WhereArg<QueryBase>> | undefined,\n primaryKey: string,\n foreignKey: string,\n) => {\n const where: WhereArg<Query> = {\n [foreignKey]: { in: data.map((item) => item[primaryKey]) },\n };\n if (params) {\n if (Array.isArray(params)) {\n where.OR = params;\n } else {\n Object.assign(where, params);\n }\n }\n return where;\n};\n\nconst nestedInsert = ({ query, primaryKey, foreignKey }: State) => {\n return (async (_, data) => {\n const connect = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n { connect: WhereArg<QueryBase>[] },\n ] => Boolean(item[1].connect),\n );\n\n const t = query.clone();\n\n if (connect.length) {\n await Promise.all(\n connect.flatMap(([selfData, { connect }]) =>\n t\n .or<Query>(...connect)\n ._updateOrThrow({ [foreignKey]: selfData[primaryKey] }),\n ),\n );\n }\n\n const connectOrCreate = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => Boolean(item[1].connectOrCreate),\n );\n\n let connected: number[];\n if (connectOrCreate.length) {\n connected = await Promise.all(\n connectOrCreate.flatMap(([selfData, { connectOrCreate }]) =>\n connectOrCreate.map((item) =>\n (\n t.where(item.where) as WhereResult<Query & { hasSelect: false }>\n )._update({\n [foreignKey]: selfData[primaryKey],\n }),\n ),\n ),\n );\n } else {\n connected = [];\n }\n\n let connectedI = 0;\n const create = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n create?: Record<string, unknown>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => {\n if (item[1].connectOrCreate) {\n const length = item[1].connectOrCreate.length;\n connectedI += length;\n for (let i = length; i > 0; i--) {\n if (connected[connectedI - i] === 0) return true;\n }\n }\n return Boolean(item[1].create);\n },\n );\n\n connectedI = 0;\n if (create.length) {\n await t._createMany(\n create.flatMap(([selfData, { create = [], connectOrCreate = [] }]) => {\n return [\n ...create.map((item) => ({\n [foreignKey]: selfData[primaryKey],\n ...item,\n })),\n ...connectOrCreate\n .filter(() => connected[connectedI++] === 0)\n .map((item) => ({\n [foreignKey]: selfData[primaryKey],\n ...item.create,\n })),\n ];\n }) as CreateData<Query>[],\n );\n }\n }) as HasManyNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKey, foreignKey }: State) => {\n return (async (q, data, params) => {\n if ((params.set || params.create) && isQueryReturnsAll(q)) {\n const key = params.set ? 'set' : 'create';\n throw new Error(`\\`${key}\\` option is not allowed in a batch update`);\n }\n\n const t = query.clone();\n if (params.create) {\n await t._count()._createMany(\n params.create.map((create) => ({\n ...create,\n [foreignKey]: data[0][primaryKey],\n })),\n );\n delete t.query[toSqlCacheKey];\n }\n\n if (params.disconnect || params.set) {\n await t\n .where<Query>(\n getWhereForNestedUpdate(\n data,\n params.disconnect,\n primaryKey,\n foreignKey,\n ),\n )\n ._update({ [foreignKey]: null });\n\n if (params.set) {\n delete t.query[toSqlCacheKey];\n await t\n .where<Query>(\n Array.isArray(params.set)\n ? {\n OR: params.set,\n }\n : params.set,\n )\n ._update({ [foreignKey]: data[0][primaryKey] });\n }\n }\n\n if (params.delete || params.update) {\n delete t.query[toSqlCacheKey];\n const q = t._where(\n getWhereForNestedUpdate(\n data,\n params.delete || params.update?.where,\n primaryKey,\n foreignKey,\n ),\n );\n\n if (params.delete) {\n await q._delete();\n } else if (params.update) {\n await q._update<WhereResult<Query>>(params.update.data);\n }\n }\n }) as HasManyNestedUpdate;\n};\n","import { RelationData, RelationThunkBase } from './relations';\nimport { Table } from '../table';\nimport {\n ColumnType,\n CreateCtx,\n getQueryAs,\n HasAndBelongsToManyRelation,\n NotFoundError,\n pushQueryValue,\n Query,\n QueryBase,\n toSqlCacheKey,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\nimport { MaybeArray } from 'orchid-core';\nimport { hasRelationHandleCreate, hasRelationHandleUpdate } from './utils';\nimport { HasManyNestedInsert, HasManyNestedUpdate } from './hasMany';\n\nexport interface HasAndBelongsToMany extends RelationThunkBase {\n type: 'hasAndBelongsToMany';\n returns: 'many';\n options: HasAndBelongsToManyRelation['options'];\n}\n\nexport type HasAndBelongsToManyInfo<\n T extends Table,\n Relation extends HasAndBelongsToMany,\n> = {\n params: Record<\n Relation['options']['primaryKey'],\n T['columns']['shape'][Relation['options']['primaryKey']]['type']\n >;\n populate: never;\n chainedCreate: true;\n chainedDelete: true;\n};\n\ntype State = {\n relatedTableQuery: Query;\n joinTableQuery: Query;\n primaryKey: string;\n foreignKey: string;\n associationPrimaryKey: string;\n associationForeignKey: string;\n foreignKeyFull: string;\n associationPrimaryKeyFull: string;\n associationForeignKeyFull: string;\n};\n\nclass HasAndBelongsToManyVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: HasManyNestedInsert;\n private readonly nestedUpdate: HasManyNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(state);\n this.nestedUpdate = nestedUpdate(state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n hasRelationHandleCreate(\n q,\n ctx,\n item,\n rowIndex,\n this.key,\n this.state.primaryKey,\n this.nestedInsert,\n );\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n hasRelationHandleUpdate(\n q,\n ctx,\n set,\n this.key,\n this.state.primaryKey,\n this.nestedUpdate,\n );\n }\n}\n\nconst removeColumnName = (column: ColumnType) => {\n if (!column.data.name) return column;\n\n const cloned = Object.create(column);\n cloned.data = { ...column.data, name: undefined };\n return cloned;\n};\n\nexport const makeHasAndBelongsToManyMethod = (\n table: Query,\n qb: Query,\n relation: HasAndBelongsToMany,\n relationName: string,\n query: Query,\n): RelationData => {\n const {\n primaryKey: pk,\n foreignKey: fk,\n associationPrimaryKey: apk,\n associationForeignKey: afk,\n joinTable,\n } = relation.options;\n\n const foreignKeyFull = `${joinTable}.${fk}`;\n const associationForeignKeyFull = `${joinTable}.${afk}`;\n const associationPrimaryKeyFull = `${getQueryAs(query)}.${apk}`;\n\n const baseQuery = Object.create(qb.baseQuery);\n baseQuery.baseQuery = baseQuery;\n baseQuery.table = joinTable;\n baseQuery.shape = {\n [fk]: removeColumnName(table.shape[pk]),\n [afk]: removeColumnName(query.shape[apk]),\n };\n baseQuery.query = {\n ...baseQuery.query,\n shape: baseQuery.shape,\n };\n const subQuery = Object.create(baseQuery);\n\n const state: State = {\n relatedTableQuery: query,\n joinTableQuery: subQuery,\n primaryKey: pk,\n foreignKey: fk,\n associationPrimaryKey: apk,\n associationForeignKey: afk,\n foreignKeyFull,\n associationForeignKeyFull,\n associationPrimaryKeyFull,\n };\n\n return {\n returns: 'many',\n method(params: Record<string, unknown>) {\n return query.whereExists(subQuery, (q) =>\n q.on(associationForeignKeyFull, associationPrimaryKeyFull).where({\n [foreignKeyFull]: params[pk],\n }),\n );\n },\n virtualColumn: new HasAndBelongsToManyVirtualColumn(relationName, state),\n // joinQuery can be a property of RelationQuery and be used by whereExists and other stuff which needs it\n // and the chained query itself may be a query around this joinQuery\n joinQuery(fromQuery, toQuery) {\n const join = toQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${apk}`)\n ._on(foreignKeyFull, `${getQueryAs(fromQuery)}.${pk}`),\n );\n join.query.joinedShapes = {\n ...join.query.joinedShapes,\n [(fromQuery.query.as || fromQuery.table) as string]:\n fromQuery.query.shape,\n };\n return join;\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${apk}`)\n ._on(foreignKeyFull, `${getQueryAs(fromQuery)}.${pk}`),\n );\n },\n primaryKey: pk,\n modifyRelatedQuery(relationQuery) {\n const ref = {} as { query: Query };\n\n pushQueryValue(\n relationQuery,\n 'afterCreate',\n async (_: Query, result: Record<string, unknown>) => {\n const fromQuery = ref.query.clone();\n fromQuery.query.select = [{ selectAs: { [fk]: pk } }];\n\n const createdCount = await subQuery.count()._createFrom(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fromQuery as any,\n {\n [afk]: result[apk],\n } as never,\n );\n\n if (createdCount === 0) {\n throw new NotFoundError(fromQuery);\n }\n },\n );\n\n return (q) => {\n ref.query = q;\n };\n },\n };\n};\n\nconst queryJoinTable = (\n state: State,\n data: Record<string, unknown>[],\n conditions?: MaybeArray<WhereArg<Query>>,\n) => {\n const t = state.joinTableQuery.clone();\n const where: WhereArg<Query> = {\n [state.foreignKey]: { in: data.map((item) => item[state.primaryKey]) },\n };\n\n if (conditions) {\n where[state.associationForeignKey] = {\n in: state.relatedTableQuery\n .where<Query>(\n Array.isArray(conditions) ? { OR: conditions } : conditions,\n )\n ._select(state.associationPrimaryKey),\n };\n }\n\n return t._where(where);\n};\n\nconst queryRelatedTable = (\n query: Query,\n conditions: MaybeArray<WhereArg<Query>>,\n) => {\n return query.where<Query>(\n Array.isArray(conditions) ? { OR: conditions } : conditions,\n );\n};\n\nconst insertToJoinTable = (\n state: State,\n joinTableTransaction: Query,\n data: Record<string, unknown>[],\n ids: unknown[],\n) => {\n return joinTableTransaction._count()._createMany(\n data.flatMap((item) =>\n ids.map((id) => ({\n [state.foreignKey]: item[state.primaryKey],\n [state.associationForeignKey]: id,\n })),\n ),\n );\n};\n\nconst nestedInsert = ({\n relatedTableQuery,\n joinTableQuery,\n primaryKey,\n foreignKey,\n associationPrimaryKey,\n associationForeignKey,\n}: State) => {\n return (async (_, data) => {\n const connect = data.filter(\n (\n item,\n ): item is [\n selfData: Record<string, unknown>,\n relationData: {\n connect: WhereArg<QueryBase>[];\n },\n ] => Boolean(item[1].connect),\n );\n\n const t = relatedTableQuery.clone();\n\n let connected: Record<string, unknown>[];\n if (connect.length) {\n connected = (await Promise.all(\n connect.flatMap(([, { connect }]) =>\n connect.map((item) =>\n t.select(associationPrimaryKey)._findBy(item)._take(),\n ),\n ),\n )) as Record<string, unknown[]>[];\n } else {\n connected = [];\n }\n\n const connectOrCreate = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => Boolean(item[1].connectOrCreate),\n );\n\n let connectOrCreated: (Record<string, unknown> | undefined)[];\n if (connectOrCreate.length) {\n connectOrCreated = await Promise.all(\n connectOrCreate.flatMap(([, { connectOrCreate }]) =>\n connectOrCreate.map((item) =>\n t.select(associationPrimaryKey)._findBy(item.where)._takeOptional(),\n ),\n ),\n );\n } else {\n connectOrCreated = [];\n }\n\n let connectOrCreateI = 0;\n const create = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n create?: Record<string, unknown>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => {\n if (item[1].connectOrCreate) {\n const length = item[1].connectOrCreate.length;\n connectOrCreateI += length;\n for (let i = length; i > 0; i--) {\n if (!connectOrCreated[connectOrCreateI - i]) return true;\n }\n }\n return Boolean(item[1].create);\n },\n );\n\n connectOrCreateI = 0;\n let created: Record<string, unknown>[];\n if (create.length) {\n created = (await t\n .select(associationPrimaryKey)\n ._createMany(\n create.flatMap(([, { create = [], connectOrCreate = [] }]) => [\n ...create,\n ...connectOrCreate\n .filter(() => !connectOrCreated[connectOrCreateI++])\n .map((item) => item.create),\n ]),\n )) as Record<string, unknown>[];\n } else {\n created = [];\n }\n\n const allKeys = data as unknown as [\n selfData: Record<string, unknown>,\n relationKeys: Record<string, unknown>[],\n ][];\n\n let createI = 0;\n let connectI = 0;\n connectOrCreateI = 0;\n data.forEach(([, data], index) => {\n if (data.create || data.connectOrCreate) {\n if (data.create) {\n const len = data.create.length;\n allKeys[index][1] = created.slice(createI, createI + len);\n createI += len;\n }\n if (data.connectOrCreate) {\n const arr: Record<string, unknown>[] = [];\n allKeys[index][1] = arr;\n\n const len = data.connectOrCreate.length;\n for (let i = 0; i < len; i++) {\n const item = connectOrCreated[connectOrCreateI++];\n if (item) {\n arr.push(item);\n } else {\n arr.push(created[createI++]);\n }\n }\n }\n }\n\n if (data.connect) {\n const len = data.connect.length;\n allKeys[index][1] = connected.slice(connectI, connectI + len);\n connectI += len;\n }\n });\n\n await joinTableQuery.count()._createMany(\n allKeys.flatMap(([selfData, relationKeys]) => {\n const selfKey = selfData[primaryKey];\n return relationKeys.map((relationData) => ({\n [foreignKey]: selfKey,\n [associationForeignKey]: relationData[associationPrimaryKey],\n }));\n }),\n );\n }) as HasManyNestedInsert;\n};\n\nconst nestedUpdate = (state: State) => {\n return (async (_, data, params) => {\n if (params.create) {\n const ids = await state.relatedTableQuery\n .pluck(state.associationPrimaryKey)\n ._createMany(params.create);\n\n await state.joinTableQuery.createMany(\n data.flatMap((item) =>\n ids.map((id) => ({\n [state.foreignKey]: item[state.primaryKey],\n [state.associationForeignKey]: id,\n })),\n ),\n );\n }\n\n if (params.update) {\n await (\n state.relatedTableQuery\n .whereExists(state.joinTableQuery, (q) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (q as any)\n ._on(\n state.associationForeignKeyFull,\n state.associationPrimaryKeyFull,\n )\n ._where({\n IN: {\n columns: [state.foreignKeyFull],\n values: [data.map((item) => item[state.primaryKey])],\n },\n }),\n )\n ._where(\n Array.isArray(params.update.where)\n ? { OR: params.update.where }\n : params.update.where,\n ) as WhereResult<Query>\n )._update<WhereResult<Query>>(params.update.data);\n }\n\n if (params.disconnect) {\n await queryJoinTable(state, data, params.disconnect)._delete();\n }\n\n if (params.delete) {\n const j = queryJoinTable(state, data, params.delete);\n\n const ids = await j._pluck(state.associationForeignKey)._delete();\n\n await queryRelatedTable(state.relatedTableQuery, {\n [state.associationPrimaryKey]: { in: ids },\n })._delete();\n }\n\n if (params.set) {\n const j = queryJoinTable(state, data);\n await j._delete();\n delete j.query[toSqlCacheKey];\n\n const ids = await queryRelatedTable(\n state.relatedTableQuery,\n params.set,\n )._pluck(state.associationPrimaryKey);\n\n await insertToJoinTable(state, j, data, ids);\n }\n }) as HasManyNestedUpdate;\n};\n","import { BelongsTo, BelongsToInfo, makeBelongsToMethod } from './belongsTo';\nimport { HasOne, HasOneInfo, makeHasOneMethod } from './hasOne';\nimport { DbTable, Table, TableClass, TableClasses } from '../table';\nimport { OrchidORM } from '../orm';\nimport {\n Query,\n RelationQuery,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsOneOptional,\n BaseRelation,\n relationQueryKey,\n VirtualColumn,\n SetQueryTableAlias,\n} from 'pqb';\nimport { EmptyObject, StringKey } from 'orchid-core';\nimport { HasMany, HasManyInfo, makeHasManyMethod } from './hasMany';\nimport {\n HasAndBelongsToMany,\n HasAndBelongsToManyInfo,\n makeHasAndBelongsToManyMethod,\n} from './hasAndBelongsToMany';\nimport { getSourceRelation, getThroughRelation } from './utils';\n\nexport interface RelationThunkBase {\n type: string;\n returns: 'one' | 'many';\n fn(): TableClass;\n options: BaseRelation['options'];\n}\n\nexport type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;\n\nexport type RelationThunks = Record<string, RelationThunk>;\n\nexport type RelationData = {\n returns: 'one' | 'many';\n method(params: Record<string, unknown>): Query;\n virtualColumn?: VirtualColumn;\n joinQuery(fromQuery: Query, toQuery: Query): Query;\n reverseJoin(fromQuery: Query, toQuery: Query): Query;\n primaryKey: string;\n modifyRelatedQuery?(relatedQuery: Query): (query: Query) => void;\n};\n\nexport type Relation<\n T extends Table,\n Relations extends RelationThunks,\n K extends StringKey<keyof Relations>,\n M extends Query = SetQueryTableAlias<\n DbTable<ReturnType<Relations[K]['fn']>>,\n K\n >,\n Info extends RelationInfo = RelationInfo<T, Relations, Relations[K]>,\n> = {\n type: Relations[K]['type'];\n returns: Relations[K]['returns'];\n key: K;\n table: M;\n query: M;\n joinQuery(fromQuery: Query, toQuery: Query): Query;\n defaults: Info['populate'];\n nestedCreateQuery: [Info['populate']] extends [never]\n ? M\n : M & {\n meta: { defaults: Record<Info['populate'], true> };\n };\n primaryKey: string;\n options: Relations[K]['options'];\n};\n\nexport type RelationScopeOrTable<Relation extends RelationThunkBase> =\n Relation['options']['scope'] extends (q: Query) => Query\n ? ReturnType<Relation['options']['scope']>\n : DbTable<ReturnType<Relation['fn']>>;\n\nexport type RelationInfo<\n T extends Table = Table,\n Relations extends RelationThunks = RelationThunks,\n Relation extends RelationThunk = RelationThunk,\n> = Relation extends BelongsTo\n ? BelongsToInfo<T, Relation>\n : Relation extends HasOne\n ? HasOneInfo<T, Relations, Relation>\n : Relation extends HasMany\n ? HasManyInfo<T, Relations, Relation>\n : Relation extends HasAndBelongsToMany\n ? HasAndBelongsToManyInfo<T, Relation>\n : never;\n\nexport type MapRelation<\n T extends Table,\n Relations extends RelationThunks,\n RelationName extends keyof Relations,\n Relation extends RelationThunk = Relations[RelationName],\n RelatedQuery extends Query = RelationScopeOrTable<Relation>,\n Info extends {\n params: Record<string, unknown>;\n populate: string;\n chainedCreate: boolean;\n chainedDelete: boolean;\n } = RelationInfo<T, Relations, Relation>,\n> = RelationQuery<\n RelationName,\n Info['params'],\n Info['populate'],\n Relation['returns'] extends 'one'\n ? Relation['options']['required'] extends true\n ? SetQueryReturnsOne<RelatedQuery>\n : SetQueryReturnsOneOptional<RelatedQuery>\n : SetQueryReturnsAll<RelatedQuery>,\n Relation['options']['required'] extends boolean\n ? Relation['options']['required']\n : false,\n Info['chainedCreate'],\n Info['chainedDelete']\n>;\n\nexport type MapRelations<T extends Table> = 'relations' extends keyof T\n ? T['relations'] extends RelationThunks\n ? {\n [K in keyof T['relations']]: MapRelation<T, T['relations'], K>;\n }\n : EmptyObject\n : EmptyObject;\n\ntype ApplyRelationData = {\n relationName: string;\n relation: RelationThunk;\n dbTable: DbTable<TableClass>;\n otherDbTable: DbTable<TableClass>;\n};\n\ntype DelayedRelations = Map<Query, Record<string, ApplyRelationData[]>>;\n\nexport const applyRelations = (\n qb: Query,\n tables: Record<string, Table>,\n result: OrchidORM<TableClasses>,\n) => {\n const tableEntries = Object.entries(tables);\n\n const delayedRelations: DelayedRelations = new Map();\n\n for (const name in tables) {\n const table = tables[name] as Table & {\n relations?: RelationThunks;\n };\n if (!('relations' in table) || typeof table.relations !== 'object')\n continue;\n\n const dbTable = result[name];\n for (const relationName in table.relations) {\n const relation = table.relations[relationName];\n const otherTableClass = relation.fn();\n const otherTable = tableEntries.find(\n (pair) => pair[1] instanceof otherTableClass,\n );\n if (!otherTable) {\n throw new Error(\n `Cannot find table class for class ${otherTableClass.name}`,\n );\n }\n const otherTableName = otherTable[0];\n const otherDbTable = result[otherTableName];\n if (!otherDbTable)\n throw new Error(`Cannot find table class by name ${otherTableName}`);\n\n const data: ApplyRelationData = {\n relationName,\n relation,\n dbTable,\n otherDbTable,\n };\n\n const options = relation.options as { through?: string; source?: string };\n if (\n typeof options.through === 'string' &&\n typeof options.source === 'string'\n ) {\n const throughRelation = getThroughRelation(dbTable, options.through);\n if (!throughRelation) {\n delayRelation(delayedRelations, dbTable, options.through, data);\n continue;\n }\n\n const sourceRelation = getSourceRelation(\n throughRelation,\n options.source,\n );\n if (!sourceRelation) {\n delayRelation(\n delayedRelations,\n throughRelation.table,\n options.source,\n data,\n );\n continue;\n }\n }\n\n applyRelation(qb, data, delayedRelations);\n }\n }\n\n if (delayedRelations.size) {\n const { value } = delayedRelations.values().next() as {\n value: Record<string, ApplyRelationData[]>;\n };\n for (const key in value) {\n for (const item of value[key]) {\n const { relation } = item;\n\n if (item.dbTable.relations[item.relationName as never]) continue;\n\n const as = item.dbTable.definedAs;\n let message = `Cannot define a \\`${item.relationName}\\` relation on \\`${as}\\``;\n const table = result[as];\n\n const { through, source } = relation.options as {\n through: string;\n source: string;\n };\n const throughRel = table.relations[\n through as never\n ] as unknown as BaseRelation;\n\n if (through && !throughRel) {\n message += `: cannot find \\`${through}\\` relation required by the \\`through\\` option`;\n } else if (\n source &&\n throughRel &&\n !throughRel.table.relations[source as never]\n ) {\n message += `: cannot find \\`${source}\\` relation in \\`${\n (throughRel.table as DbTable<TableClass>).definedAs\n }\\` required by the \\`source\\` option`;\n }\n\n throw new Error(message);\n }\n }\n }\n};\n\nconst delayRelation = (\n delayedRelations: DelayedRelations,\n table: Query,\n relationName: string,\n data: ApplyRelationData,\n) => {\n let tableRelations = delayedRelations.get(table);\n if (!tableRelations) {\n tableRelations = {};\n delayedRelations.set(table, tableRelations);\n }\n if (tableRelations[relationName]) {\n tableRelations[relationName].push(data);\n } else {\n tableRelations[relationName] = [data];\n }\n};\n\nconst applyRelation = (\n qb: Query,\n { relationName, relation, dbTable, otherDbTable }: ApplyRelationData,\n delayedRelations: DelayedRelations,\n) => {\n const baseQuery = Object.create(otherDbTable);\n baseQuery.baseQuery = baseQuery;\n\n const query = (\n relation.options.scope ? relation.options.scope(baseQuery) : baseQuery\n ).as(relationName);\n\n const definedAs = (query as unknown as { definedAs?: string }).definedAs;\n if (!definedAs) {\n throw new Error(\n `Table class for table ${query.table} is not attached to db instance`,\n );\n }\n\n const { type } = relation;\n let data;\n if (type === 'belongsTo') {\n data = makeBelongsToMethod(relation, relationName, query);\n } else if (type === 'hasOne') {\n data = makeHasOneMethod(dbTable, relation, relationName, query);\n } else if (type === 'hasMany') {\n data = makeHasManyMethod(dbTable, relation, relationName, query);\n } else if (type === 'hasAndBelongsToMany') {\n data = makeHasAndBelongsToManyMethod(\n dbTable,\n qb,\n relation,\n relationName,\n query,\n );\n } else {\n throw new Error(`Unknown relation type ${type}`);\n }\n\n if (data.returns === 'one') {\n query._take();\n query.query.returnsOne = true;\n }\n\n if (data.virtualColumn) {\n dbTable.shape[relationName] = dbTable.query.shape[relationName] =\n data.virtualColumn;\n }\n\n makeRelationQuery(dbTable, relationName, data, query);\n\n baseQuery.joinQuery = data.joinQuery;\n\n const { join: originalJoin } = baseQuery;\n baseQuery.join = function (...args: unknown[]) {\n if (args.length) {\n return originalJoin.apply(this, args);\n } else {\n const q = this.clone();\n q.query.innerJoinLateral = true;\n return q;\n }\n };\n\n (dbTable.relations as Record<string, unknown>)[relationName] = {\n type,\n key: relationName,\n table: otherDbTable,\n query,\n joinQuery: data.joinQuery,\n primaryKey: data.primaryKey,\n options: relation.options,\n };\n\n dbTable.relationsQueries[relationName] = query;\n\n const tableRelations = delayedRelations.get(dbTable);\n if (!tableRelations) return;\n\n tableRelations[relationName]?.forEach((data) => {\n applyRelation(qb, data, delayedRelations);\n });\n};\n\nconst makeRelationQuery = (\n table: Query,\n relationName: string,\n data: RelationData,\n q: Query,\n) => {\n Object.defineProperty(table, relationName, {\n get() {\n const toTable = q.clone();\n\n const query = this.isSubQuery\n ? toTable\n : toTable._whereExists(\n this.baseQuery,\n (q) => data.reverseJoin(this, toTable) as unknown as typeof q,\n );\n\n query.query[relationQueryKey] = {\n relationName,\n sourceQuery: this,\n relationQuery: toTable,\n joinQuery: data.joinQuery,\n };\n\n const setQuery = data.modifyRelatedQuery?.(query);\n setQuery?.(this);\n\n return new Proxy(data.method, {\n get(_, prop) {\n return (query as unknown as Record<string, unknown>)[prop as string];\n },\n }) as unknown as RelationQuery;\n },\n });\n};\n","import { Db, IsolationLevel, TransactionOptions } from 'pqb';\n\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n fn: () => Promise<Result>,\n): Promise<Result>;\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n options: IsolationLevel | TransactionOptions,\n fn: () => Promise<Result>,\n): Promise<Result>;\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n fnOrOptions: IsolationLevel | TransactionOptions | (() => Promise<Result>),\n fn?: () => Promise<Result>,\n): Promise<Result> {\n return this.$queryBuilder.transaction(\n fnOrOptions as IsolationLevel,\n fn as () => Promise<Result>,\n );\n}\n","import {\n Adapter,\n Db,\n AdapterOptions,\n QueryLogOptions,\n columnTypes,\n NoPrimaryKeyOption,\n anyShape,\n DbTableOptions,\n FromArgs,\n Query,\n FromResult,\n} from 'pqb';\nimport { DbTable, Table, TableClasses } from './table';\nimport { applyRelations } from './relations/relations';\nimport { transaction } from './transaction';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { AdapterBase } from 'orchid-core';\n\nexport type OrchidORM<T extends TableClasses = TableClasses> = {\n [K in keyof T]: DbTable<T[K]>;\n} & {\n $transaction: typeof transaction;\n $adapter: Adapter;\n $queryBuilder: Db;\n $from<Args extends FromArgs<Query>>(...args: Args): FromResult<Query, Args>;\n $close(): Promise<void>;\n};\n\nexport const orchidORM = <T extends TableClasses>(\n {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey = 'error',\n ...options\n }: ({ db: Query } | { adapter: Adapter } | Omit<AdapterOptions, 'log'>) &\n QueryLogOptions & {\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n },\n tables: T,\n): OrchidORM<T> => {\n const commonOptions = {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey,\n };\n\n let adapter: Adapter;\n let transactionStorage;\n let qb: Query;\n if ('db' in options) {\n adapter = options.db.query.adapter;\n transactionStorage = options.db.internal.transactionStorage;\n qb = options.db.queryBuilder;\n } else {\n adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n\n transactionStorage = new AsyncLocalStorage<AdapterBase>();\n\n qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n anyShape,\n columnTypes,\n transactionStorage,\n commonOptions,\n );\n qb.queryBuilder = qb as unknown as Db;\n }\n\n const result = {\n $transaction: transaction,\n $adapter: adapter,\n $queryBuilder: qb,\n $from: (...args: FromArgs<Query>) => qb.from(...args),\n $close: () => adapter.close(),\n } as unknown as OrchidORM;\n\n const tableInstances: Record<string, Table> = {};\n\n for (const key in tables) {\n if (key[0] === '$') {\n throw new Error(`Table class name must not start with $`);\n }\n\n const table = new tables[key]();\n tableInstances[key] = table;\n\n const options: DbTableOptions = {\n ...commonOptions,\n schema: table.schema,\n };\n\n if (table.noPrimaryKey) options.noPrimaryKey = 'ignore';\n\n const dbTable = new Db(\n adapter,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n qb as any,\n table.table,\n table.columns.shape,\n table.columnTypes,\n transactionStorage,\n options,\n );\n\n (dbTable as unknown as { definedAs: string }).definedAs = key;\n (dbTable as unknown as { db: unknown }).db = result;\n (dbTable as unknown as { filePath: string }).filePath = table.filePath;\n (dbTable as unknown as { name: string }).name = table.constructor.name;\n\n (result as Record<string, unknown>)[key] = dbTable;\n }\n\n applyRelations(qb, tableInstances, result);\n\n return result as unknown as OrchidORM<T>;\n};\n","import {\n getClonedQueryData,\n MergeQuery,\n Query,\n QueryReturnType,\n SetQueryReturns,\n WhereResult,\n} from 'pqb';\nimport { EmptyObject } from 'orchid-core';\n\nexport type QueryMethods<T extends Query> = Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (q: T, ...args: any[]) => any\n>;\n\ntype QueryOne<T extends Query> = SetQueryReturns<\n T,\n Exclude<QueryReturnType, 'all'>\n>;\n\nexport type MethodsBase<T extends Query> = {\n queryMethods?: QueryMethods<T>;\n queryOneMethods?: QueryMethods<QueryOne<T>>;\n queryWithWhereMethods?: QueryMethods<WhereResult<T>>;\n queryOneWithWhereMethods?: QueryMethods<QueryOne<WhereResult<T>>>;\n methods?: Record<string, unknown>;\n};\n\nexport type MapQueryMethods<\n T extends Query,\n BaseQuery extends Query,\n Methods,\n> = Methods extends QueryMethods<T>\n ? {\n [K in keyof Methods]: Methods[K] extends (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n q: any,\n ...args: infer Args\n ) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infer Result\n ? <T extends BaseQuery>(\n this: T,\n ...args: Args\n ) => Result extends Query ? MergeQuery<T, Result> : Result\n : never;\n }\n : EmptyObject;\n\nexport type MapMethods<\n T extends Query,\n Methods extends MethodsBase<T>,\n> = MapQueryMethods<T, Query, Methods['queryMethods']> &\n MapQueryMethods<QueryOne<T>, QueryOne<Query>, Methods['queryOneMethods']> &\n MapQueryMethods<\n WhereResult<T>,\n WhereResult<Query>,\n Methods['queryWithWhereMethods']\n > &\n MapQueryMethods<\n QueryOne<WhereResult<T>>,\n QueryOne<WhereResult<Query>>,\n Methods['queryOneWithWhereMethods']\n > &\n (Methods['methods'] extends Record<string, unknown>\n ? Methods['methods']\n : EmptyObject);\n\nexport type Repo<\n T extends Query,\n Methods extends MethodsBase<T>,\n Mapped = MapMethods<T, Methods>,\n> = (<Q extends { table: T['table']; shape: T['shape'] }>(q: Q) => Q & Mapped) &\n T &\n Mapped;\n\nexport const createRepo = <T extends Query, Methods extends MethodsBase<T>>(\n table: T,\n methods: Methods,\n): Repo<T, Methods> => {\n const queryMethods = {\n ...methods.queryMethods,\n ...methods.queryOneMethods,\n ...methods.queryWithWhereMethods,\n ...methods.queryOneWithWhereMethods,\n };\n\n const plainMethods = methods.methods;\n\n const repo = (q: Query) => {\n const proto = Object.create(q.baseQuery);\n proto.baseQuery = proto;\n const result = Object.create(proto);\n result.query = getClonedQueryData(q.query);\n\n if (plainMethods) {\n Object.assign(proto.baseQuery, plainMethods);\n }\n\n for (const key in queryMethods) {\n const method = queryMethods[key] as (...args: unknown[]) => unknown;\n (proto.baseQuery as unknown as Record<string, unknown>)[key] = function (\n ...args: unknown[]\n ) {\n return method(this, ...args);\n };\n }\n\n return result;\n };\n\n const q = repo(table);\n\n return new Proxy(repo, {\n get(_, key) {\n return q[key];\n },\n }) as unknown as Repo<T, Methods>;\n};\n","export class FileChanges {\n private ranges: ([from: number, to: number] | string)[] = [];\n\n constructor(public content: string) {}\n\n add(at: number, text: string, end = at) {\n if (this.ranges.length === 0) {\n this.ranges.push([0, at], text, [end, this.content.length]);\n } else {\n const last = this.ranges[this.ranges.length - 1] as [number, number];\n last[1] = at;\n this.ranges.push(text, [end, this.content.length]);\n }\n }\n\n replace(from: number, to: number, text: string) {\n this.add(from, text, to);\n }\n\n remove(from: number, to: number) {\n if (this.ranges.length === 0) {\n this.ranges.push([0, from], [to, this.content.length]);\n } else {\n const last = this.ranges[this.ranges.length - 1] as [number, number];\n last[1] = from;\n this.ranges.push([to, this.content.length]);\n }\n }\n\n apply() {\n return this.ranges.length\n ? this.ranges\n .map((item) =>\n typeof item === 'string'\n ? item\n : this.content.slice(item[0], item[1]),\n )\n .join('')\n : this.content;\n }\n}\n","import {\n CallExpression,\n ClassDeclaration,\n ComputedPropertyName,\n Expression,\n Identifier,\n ImportDeclaration,\n NamedImports,\n Node,\n NodeArray,\n NumericLiteral,\n ObjectLiteralElement,\n ObjectLiteralExpression,\n PrivateIdentifier,\n PropertyAccessExpression,\n PropertyAssignment,\n ShorthandPropertyAssignment,\n Statement,\n StringLiteral,\n VariableStatement,\n ThisExpression,\n ArrowFunction,\n ParenthesizedExpression,\n PropertyName,\n SpreadAssignment,\n ArrayLiteralExpression,\n} from 'typescript';\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\nconst iterate = <T>(\n kind: number,\n): ((statements: NodeArray<Statement>) => Generator<T, void, unknown>) => {\n return function* (statements: NodeArray<Statement>) {\n for (const node of statements) {\n if (node.kind === kind) {\n yield node as T;\n }\n }\n };\n};\n\nconst isNode = <T extends Expression | ObjectLiteralElement | Node>(\n kind: number,\n) => {\n return (node?: Expression | ObjectLiteralElement | Node): node is T => {\n return node?.kind === kind;\n };\n};\n\nexport const ts = {\n getStatements(content: string): NodeArray<Statement> {\n const { statements } = createSourceFile(\n 'file.ts',\n content,\n ScriptTarget.Latest,\n true,\n );\n return statements;\n },\n is: {\n call: isNode<CallExpression>(SyntaxKind.CallExpression),\n objectLiteral: isNode<ObjectLiteralExpression>(\n SyntaxKind.ObjectLiteralExpression,\n ),\n propertyAssignment: isNode<PropertyAssignment>(\n SyntaxKind.PropertyAssignment,\n ),\n shorthandPropertyAssignment: isNode<ShorthandPropertyAssignment>(\n SyntaxKind.ShorthandPropertyAssignment,\n ),\n identifier: isNode<Identifier>(SyntaxKind.Identifier),\n stringLiteral: isNode<StringLiteral>(SyntaxKind.StringLiteral),\n arrayLiteral: isNode<ArrayLiteralExpression>(\n SyntaxKind.ArrayLiteralExpression,\n ),\n numericLiteral: isNode<NumericLiteral>(SyntaxKind.NumericLiteral),\n computedPropertyName: isNode<ComputedPropertyName>(\n SyntaxKind.ComputedPropertyName,\n ),\n privateIdentifier: isNode<PrivateIdentifier>(SyntaxKind.PrivateIdentifier),\n this: isNode<ThisExpression>(SyntaxKind.ThisKeyword),\n propertyAccess: isNode<PropertyAccessExpression>(\n SyntaxKind.PropertyAccessExpression,\n ),\n arrowFunction: isNode<ArrowFunction>(SyntaxKind.ArrowFunction),\n parenthesizedExpression: isNode<ParenthesizedExpression>(\n SyntaxKind.ParenthesizedExpression,\n ),\n spreadAssignment: isNode<SpreadAssignment>(SyntaxKind.SpreadAssignment),\n },\n import: {\n iterate: iterate<ImportDeclaration>(SyntaxKind.ImportDeclaration),\n *iterateWithSource(statements: NodeArray<Statement>, path: string) {\n for (const node of ts.import.iterate(statements)) {\n if (ts.import.getSource(node) !== path) continue;\n yield node;\n }\n },\n getSource(node: ImportDeclaration) {\n return node.moduleSpecifier.getText().slice(1, -1);\n },\n getEndPos(statements: NodeArray<Statement>) {\n let end = 0;\n for (const node of ts.import.iterate(statements)) {\n end = node.end;\n }\n return end;\n },\n getStatementsImportedName(\n statements: NodeArray<Statement>,\n path: string,\n key: string,\n ) {\n for (const node of ts.import.iterateWithSource(statements, path)) {\n const name = ts.import.getImportName(node, key);\n if (name) return name;\n }\n\n return;\n },\n getImportName(node: ImportDeclaration, key: string) {\n if (!node.importClause) return;\n\n const elements = (node.importClause.namedBindings as NamedImports)\n ?.elements;\n\n if (!elements) return;\n\n for (const element of elements) {\n if (\n element.propertyName?.escapedText === key ||\n element.name.escapedText === key\n ) {\n return element.name.escapedText.toString();\n }\n }\n\n return;\n },\n },\n variable: {\n iterate: iterate<VariableStatement>(SyntaxKind.VariableStatement),\n *iterateDeclarations(statements: NodeArray<Statement>) {\n for (const node of ts.variable.iterate(statements)) {\n for (const dec of node.declarationList.declarations) {\n yield dec;\n }\n }\n },\n },\n class: {\n iterate: iterate<ClassDeclaration>(SyntaxKind.ClassDeclaration),\n },\n prop: {\n getName({ name }: { name?: PropertyName }) {\n if (ts.is.identifier(name)) {\n return name.escapedText;\n } else {\n return name?.getText();\n }\n },\n getValue(prop: ObjectLiteralElement) {\n if (ts.is.propertyAssignment(prop)) {\n return prop.initializer.getText();\n } else if (ts.is.shorthandPropertyAssignment(prop)) {\n return prop.name.escapedText.toString();\n } else {\n return;\n }\n },\n },\n spaces: {\n getAtLine(content: string, pos: number) {\n const lines = content.slice(0, pos).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n },\n },\n};\n","import { RakeDbAst } from 'rake-db';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { NodeArray, ObjectLiteralExpression, Statement } from 'typescript';\nimport { AppCodeUpdaterError } from './appCodeUpdater';\nimport { FileChanges } from './fileChanges';\nimport { ts } from './tsUtils';\nimport { AdapterOptions, QueryLogOptions } from 'pqb';\nimport {\n singleQuote,\n pathToLog,\n toCamelCase,\n toPascalCase,\n getImportPath,\n} from 'orchid-core';\n\ntype Context = {\n filePath: string;\n tablePath: (name: string) => string;\n statements: NodeArray<Statement>;\n object: ObjectLiteralExpression;\n content: string;\n spaces: string;\n};\n\nconst libraryName = 'orchid-orm';\nconst importKey = 'orchidORM';\n\nconst newFile = (\n options: AdapterOptions,\n) => `import { orchidORM } from 'orchid-orm';\n\nexport const db = orchidORM(\n {\n ${optionsToString(options)}\n },\n {\n }\n);\n`;\n\nconst optionsToString = (options: AdapterOptions) => {\n const lines: string[] = [];\n for (const key in options) {\n const value = options[key as keyof AdapterOptions];\n if (typeof value !== 'object' && typeof value !== 'function') {\n lines.push(\n `${key}: ${typeof value === 'string' ? singleQuote(value) : value},`,\n );\n }\n }\n return lines.join('\\n ');\n};\n\nexport const updateMainFile = async (\n filePath: string,\n tablePath: (name: string) => string,\n ast: RakeDbAst,\n options: AdapterOptions,\n logger: QueryLogOptions['logger'],\n) => {\n const result = await fs.readFile(filePath, 'utf-8').then(\n (content) => ({ error: undefined, content }),\n (error) => {\n return { error, content: undefined };\n },\n );\n\n if (result.error && result.error.code !== 'ENOENT') throw result.error;\n const content = result.content || newFile(options);\n\n const statements = ts.getStatements(content);\n\n const importName = ts.import.getStatementsImportedName(\n statements,\n libraryName,\n importKey,\n );\n if (!importName) {\n throw new AppCodeUpdaterError(\n `Main file does not contain import of orchid-orm`,\n );\n }\n\n const object = getTablesListObject(importName, statements);\n if (!object) {\n throw new Error('List of tables is not found in main file');\n }\n\n const spaces = ts.spaces.getAtLine(content, object.end);\n\n const context: Context = {\n filePath,\n tablePath,\n statements,\n object,\n content,\n spaces,\n };\n\n let write: string | undefined;\n if (ast.type === 'table') {\n if (ast.action === 'create') {\n write = createTable(context, ast);\n } else {\n write = dropTable(context, ast);\n }\n }\n // rename table is not handled because renaming of the class and the file is better to be done by the editor,\n // editor can scan all project files, rename import path and imported class name\n\n if (write) {\n if (result.error) {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n await fs.writeFile(filePath, write);\n logger?.log(\n `${result.content ? 'Updated' : 'Created'} ${pathToLog(filePath)}`,\n );\n }\n};\n\nconst createTable = (\n { filePath, tablePath, statements, object, content, spaces }: Context,\n ast: RakeDbAst.Table,\n) => {\n const key = toCamelCase(ast.name);\n const value = `${toPascalCase(ast.name)}Table`;\n\n const changes = new FileChanges(content);\n\n const importPath = getImportPath(filePath, tablePath(toCamelCase(ast.name)));\n\n const existing = Array.from(\n ts.import.iterateWithSource(statements, importPath),\n );\n if (existing.length) return;\n\n for (const prop of object.properties) {\n if (key === ts.prop.getName(prop)) {\n return;\n }\n }\n\n const importPos = ts.import.getEndPos(statements);\n changes.add(\n importPos,\n `${importPos === 0 ? '' : '\\n'}import { ${value} } from '${importPath}';`,\n );\n\n let insert = `\\n${spaces} ${key}: ${value},`;\n if (object.properties.length && !object.properties.hasTrailingComma) {\n insert = `,${insert}`;\n }\n if (!content.slice(object.properties.end, object.end).includes('\\n')) {\n insert += `\\n${spaces}`;\n }\n changes.add(object.properties.end, insert);\n\n return changes.apply();\n};\n\nconst dropTable = (\n { filePath, tablePath, statements, object, content }: Context,\n ast: RakeDbAst.Table,\n) => {\n const changes = new FileChanges(content);\n\n const importPath = getImportPath(filePath, tablePath(toCamelCase(ast.name)));\n const tableClassName = `${toPascalCase(ast.name)}Table`;\n const importNames: string[] = [];\n for (const node of ts.import.iterateWithSource(statements, importPath)) {\n changes.remove(node.pos, node.end);\n\n const name = ts.import.getImportName(node, tableClassName);\n if (name && !importNames.includes(name)) {\n importNames.push(name);\n }\n }\n\n for (const prop of object.properties) {\n const name = ts.prop.getValue(prop);\n if (!name || !importNames.includes(name)) continue;\n\n let { end } = prop;\n if (content[end] === ',') end++;\n changes.remove(prop.pos, end);\n }\n\n return changes.apply();\n};\n\nconst getTablesListObject = (\n importName: string,\n statements: NodeArray<Statement>,\n): ObjectLiteralExpression | undefined => {\n for (const node of ts.variable.iterateDeclarations(statements)) {\n const call = node.initializer;\n if (!ts.is.call(call)) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1];\n if (!ts.is.objectLiteral(object)) {\n throw new Error('Second argument of orchidORM must be an object literal');\n }\n\n return object;\n }\n\n return;\n};\n","import {\n AppCodeUpdaterRelations,\n AppCodeUpdaterGetTable,\n} from '../appCodeUpdater';\n\nexport type HandleForeignKeysParams = {\n getTable: AppCodeUpdaterGetTable;\n relations: AppCodeUpdaterRelations;\n tableName: string;\n columns: string[];\n foreignTableName: string;\n foreignColumns: string[];\n skipBelongsTo?: boolean;\n};\n\nexport const handleForeignKey = async ({\n getTable,\n relations,\n tableName,\n columns,\n foreignTableName,\n foreignColumns,\n skipBelongsTo,\n}: HandleForeignKeysParams) => {\n const table = await getTable(tableName);\n if (!table) return;\n\n const foreignTable = await getTable(foreignTableName);\n if (!foreignTable) return;\n\n if (!skipBelongsTo) {\n relations[tableName] ??= {\n path: table.path,\n relations: [],\n };\n\n relations[tableName].relations.push({\n kind: 'belongsTo',\n columns,\n className: foreignTable.name,\n path: foreignTable.path,\n foreignColumns,\n });\n }\n\n relations[foreignTableName] ??= {\n path: foreignTable.path,\n relations: [],\n };\n\n relations[foreignTableName].relations.push({\n kind: 'hasMany',\n columns: foreignColumns,\n className: table.name,\n path: table.path,\n foreignColumns: columns,\n });\n};\n","import { RakeDbAst } from 'rake-db';\nimport { columnsShapeToCode, ColumnType } from 'pqb';\nimport {\n Code,\n singleQuote,\n pathToLog,\n codeToString,\n toCamelCase,\n toPascalCase,\n getImportPath,\n} from 'orchid-core';\nimport fs from 'fs/promises';\nimport { UpdateTableFileParams } from './updateTableFile';\nimport path from 'path';\nimport {\n AppCodeUpdaterRelations,\n AppCodeUpdaterGetTable,\n} from '../appCodeUpdater';\nimport { handleForeignKey } from './handleForeignKey';\n\nexport const createTable = async ({\n ast,\n logger,\n getTable,\n relations,\n tables,\n ...params\n}: UpdateTableFileParams & {\n ast: RakeDbAst.Table;\n}) => {\n const key = toCamelCase(ast.name);\n const tablePath = params.tablePath(key);\n const baseTablePath = getImportPath(tablePath, params.baseTable.filePath);\n const className = `${toPascalCase(ast.name)}Table`;\n\n tables[ast.name] = {\n key,\n name: className,\n path: tablePath,\n };\n\n const imports: Record<string, string> = {\n [baseTablePath]: params.baseTable.name,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n props.push(\n 'columns = this.setColumns((t) => ({',\n columnsShapeToCode(ast.shape, ast, 't'),\n '}));',\n );\n\n const relCode = await getRelations(\n ast,\n getTable,\n tablePath,\n imports,\n relations,\n ast.name,\n );\n if (relCode) {\n props.push('', ...relCode);\n }\n\n const code: Code[] = [\n ...Object.entries(imports).map(\n ([from, name]) => `import { ${name} } from '${from}';`,\n ),\n '',\n `export class ${className} extends ${params.baseTable.name} {`,\n props,\n '}\\n',\n ];\n\n await fs.mkdir(path.dirname(tablePath), { recursive: true });\n try {\n await fs.writeFile(tablePath, codeToString(code, '', ' '), { flag: 'wx' });\n logger?.log(`Created ${pathToLog(tablePath)}`);\n } catch (err) {\n if ((err as unknown as { code: string }).code !== 'EEXIST') {\n throw err;\n }\n }\n};\n\nconst getRelations = async (\n ast: RakeDbAst.Table,\n getTable: AppCodeUpdaterGetTable,\n tablePath: string,\n imports: Record<string, string>,\n relations: AppCodeUpdaterRelations,\n tableName: string,\n): Promise<Code[] | undefined> => {\n const refs: { table: string; columns: string[]; foreignColumns: string[] }[] =\n [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n if (!(item instanceof ColumnType) || !item.data.foreignKeys) continue;\n\n for (const fkey of item.data.foreignKeys) {\n if ('table' in fkey) {\n refs.push({\n table: fkey.table,\n columns: [key],\n foreignColumns: fkey.columns,\n });\n }\n }\n }\n\n if (ast.constraints) {\n for (const { references: ref } of ast.constraints) {\n if (ref && typeof ref.fnOrTable === 'string') {\n refs.push({\n table: ref.fnOrTable,\n columns: ref.columns,\n foreignColumns: ref.foreignColumns,\n });\n }\n }\n }\n\n if (!refs.length) return;\n\n const code: Code[] = [];\n\n for (const ref of refs) {\n const { columns, foreignColumns } = ref;\n if (columns.length > 1 || foreignColumns.length > 1) continue;\n\n const info = await getTable(ref.table);\n if (!info) continue;\n\n const path = getImportPath(tablePath, info.path);\n imports[path] = info.name;\n\n code.push(\n `${info.key}: this.belongsTo(() => ${info.name}, {`,\n [`primaryKey: '${foreignColumns[0]}',`, `foreignKey: '${columns[0]}',`],\n '}),',\n );\n\n await handleForeignKey({\n getTable,\n relations,\n tableName,\n columns: ref.columns,\n foreignTableName: ref.table,\n foreignColumns: ref.foreignColumns,\n skipBelongsTo: true,\n });\n }\n\n return code.length ? ['relations = {', code, '};'] : undefined;\n};\n","import { RakeDbAst } from 'rake-db';\nimport fs from 'fs/promises';\nimport { FileChanges } from '../fileChanges';\nimport { ts } from '../tsUtils';\nimport {\n CallExpression,\n Expression,\n NodeArray,\n ObjectLiteralElementLike,\n ObjectLiteralExpression,\n PropertyAssignment,\n Statement,\n} from 'typescript';\nimport {\n columnCheckToCode,\n ColumnData,\n columnForeignKeysToCode,\n columnIndexesToCode,\n ColumnType,\n constraintToCode,\n ForeignKey,\n identityToCode,\n indexToCode,\n primaryKeyToCode,\n TableData,\n} from 'pqb';\nimport {\n addCode,\n Code,\n codeToString,\n columnDefaultArgumentToCode,\n deepCompare,\n pathToLog,\n quoteObjectKey,\n RawExpression,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'orchid-core';\nimport { UpdateTableFileParams } from './updateTableFile';\n\nexport const changeTable = async ({\n ast,\n logger,\n ...params\n}: UpdateTableFileParams & { ast: RakeDbAst.ChangeTable }) => {\n const tablePath = params.tablePath(toCamelCase(ast.name));\n const content = await fs.readFile(tablePath, 'utf-8').catch(() => undefined);\n if (!content) return;\n\n const changes = new FileChanges(content);\n const statements = ts.getStatements(content);\n const className = toPascalCase(ast.name) + 'Table';\n\n for (const { t, object } of iterateColumnsShapes(statements, className)) {\n const context = makeChangeContext(changes, ast, content, object, t);\n\n prependSpaces(context);\n applySchemaChanges(context);\n appendTrailingComma(context);\n addColumns(context);\n addTableData(context);\n }\n\n await fs.writeFile(tablePath, changes.apply());\n logger?.log(`Updated ${pathToLog(tablePath)}`);\n};\n\nfunction* iterateColumnsShapes(\n statements: NodeArray<Statement>,\n className: string,\n) {\n for (const node of ts.class.iterate(statements)) {\n if (node.name?.escapedText !== className) continue;\n\n for (const member of node.members) {\n const name = ts.prop.getName(member);\n const { initializer: call } = member as unknown as {\n initializer?: Expression;\n };\n\n if (name !== 'columns' || !call || !ts.is.call(call)) continue;\n\n const { expression } = call;\n if (\n !ts.is.propertyAccess(expression) ||\n !ts.is.this(expression.expression) ||\n expression.name.escapedText !== 'setColumns'\n )\n continue;\n\n const [arg] = call.arguments;\n if (!ts.is.arrowFunction(arg)) continue;\n\n const { parameters, body } = arg;\n const param = parameters[0]?.name;\n if (!ts.is.identifier(param) || !ts.is.parenthesizedExpression(body))\n continue;\n\n const { expression: object } = body;\n if (!ts.is.objectLiteral(object)) continue;\n\n yield { t: param.escapedText.toString(), object };\n }\n }\n}\n\ntype ChangeContext = {\n changes: FileChanges;\n props: NodeArray<ObjectLiteralElementLike>;\n shape: {\n add: Record<string, ColumnType>;\n drop: Record<string, true>;\n change: Record<string, RakeDbAst.ChangeTableItem.Change>;\n };\n t: string;\n spaces: string;\n object: Expression;\n drop: TableData;\n add: TableData;\n};\n\nconst makeChangeContext = (\n changes: FileChanges,\n ast: RakeDbAst.ChangeTable,\n content: string,\n object: ObjectLiteralExpression,\n t: string,\n): ChangeContext => {\n const add: ChangeContext['shape']['add'] = {};\n const drop: ChangeContext['shape']['drop'] = {};\n const change: ChangeContext['shape']['change'] = {};\n\n const { properties: props } = object;\n const existingColumns = getExistingColumns(props);\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n if (item.type === 'add' && !existingColumns[key]) {\n add[key] = item.item;\n }\n\n if (!existingColumns[key]) continue;\n\n if (item.type === 'drop' && existingColumns[key]) {\n drop[key] = true;\n } else if (item.type === 'change' && existingColumns[key]) {\n change[key] = item;\n }\n }\n\n const spaces = ts.spaces.getAtLine(content, object.end);\n\n const shape = { add, drop, change };\n return {\n changes,\n props,\n shape,\n spaces,\n t,\n object,\n add: ast.add,\n drop: ast.drop,\n };\n};\n\nconst getExistingColumns = (props: NodeArray<ObjectLiteralElementLike>) => {\n const existingColumns: Record<string, true> = {};\n props\n .map((prop) => ts.is.propertyAssignment(prop) && ts.prop.getName(prop))\n .filter((name): name is string => !!name)\n .forEach((name) => (existingColumns[name] = true));\n\n for (const prop of props) {\n if (!ts.is.propertyAssignment(prop)) continue;\n const name = ts.prop.getName(prop);\n if (name) existingColumns[name] = true;\n }\n\n return existingColumns;\n};\n\nconst prependSpaces = ({\n props,\n shape: { add },\n changes,\n spaces,\n}: ChangeContext) => {\n if (Object.keys(add).length && props.pos === props.end) {\n changes.add(props.pos, `\\n${spaces}`);\n }\n};\n\nconst applySchemaChanges = (context: ChangeContext) => {\n const {\n props,\n shape: { drop: dropColumns, change: changeColumns },\n add,\n drop,\n } = context;\n\n props.forEach((prop, i) => {\n if (ts.is.spreadAssignment(prop)) {\n const call = prop.expression;\n if (!ts.is.call(call)) return;\n\n const access = call.expression;\n if (!ts.is.propertyAccess(access)) return;\n\n const name = access.name.escapedText.toString();\n if (name === 'primaryKey') {\n if (drop.primaryKey || add.primaryKey) {\n removeProp(context, prop, i);\n }\n } else if (name === 'index') {\n dropMatchingIndexes(context, prop, i, call, drop.indexes);\n } else if (name === 'foreignKey') {\n dropMatchingForeignKey(context, prop, i, call, drop.constraints);\n } else if (name === 'check') {\n dropMatchingCheck(context, prop, i, call, drop.constraints);\n } else if (name === 'constraint') {\n dropMatchingConstraint(context, prop, i, call, drop.constraints);\n }\n } else if (ts.is.propertyAssignment(prop)) {\n const name = ts.prop.getName(prop);\n if (!name) return;\n\n if (dropColumns[name]) {\n removeProp(context, prop, i);\n } else {\n const changeItem = changeColumns[name];\n if (changeItem) {\n changeColumn(context, changeItem, prop);\n }\n }\n }\n });\n};\n\nconst removeProp = (\n { props, changes }: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n) => {\n const end = props[i + 1]?.pos || props.end;\n changes.remove(prop.pos, end);\n};\n\nconst changeColumn = (\n { changes, t, spaces }: ChangeContext,\n changeItem: RakeDbAst.ChangeTableItem.Change,\n prop: PropertyAssignment,\n) => {\n const { from, to } = changeItem;\n if (\n (from.type !== to.type || !!from.identity !== !!to.identity) &&\n to.column\n ) {\n changes.replace(\n prop.initializer.pos,\n prop.end,\n ` ${codeToString(to.column.toCode(t), spaces + ' ', ' ').trim()}`,\n );\n return;\n }\n\n const items: CallExpression[] = [];\n let chain: Expression | undefined = prop.initializer;\n while (ts.is.call(chain) && ts.is.propertyAccess(chain.expression)) {\n items.push(chain);\n chain = chain.expression.expression;\n }\n\n type Key = keyof RakeDbAst.ChangeTableItem.Change['to'];\n const propsToChange: Partial<Record<Key, true>> = {};\n\n for (const key in from) {\n if (to[key as Key] !== from[key as Key]) {\n propsToChange[key as Key] = true;\n }\n }\n\n for (const key in to) {\n if (to[key as Key] !== from[key as Key]) {\n propsToChange[key as Key] = true;\n }\n }\n\n const changedProps: Partial<Record<Key, true>> = {};\n const replaced: Record<string, true> = {};\n for (const item of items.reverse()) {\n if (!ts.is.propertyAccess(item.expression)) continue;\n\n const { name } = item.expression;\n let key = name.escapedText.toString();\n if (key === 'index') key = 'indexes';\n else if (key === 'foreignKey') key = 'foreignKeys';\n\n if (!propsToChange[key as Key]) continue;\n\n let remove = true;\n if (!replaced[key]) {\n let code = getColumnMethodArgs(t, to, key as Key, to.type);\n\n if (!code && key === 'identity' && to.type) {\n code = [`.${to.type}()`];\n }\n\n if (code) {\n changes.replace(\n item.expression.expression.end,\n item.end,\n codeToString(code, spaces + ' ', ' ').trim(),\n );\n replaced[key] = true;\n remove = false;\n }\n }\n\n if (remove) {\n changes.remove(item.expression.expression.end, item.end);\n }\n\n changedProps[key as Key] = true;\n }\n\n let append = '';\n for (const key in propsToChange) {\n if (changedProps[key as Key]) continue;\n\n const code = getColumnMethodArgs(t, to, key as Key);\n if (code) {\n append += codeToString(code, spaces + ' ', ' ').trim();\n }\n }\n\n if (append) {\n changes.add(prop.end, append);\n }\n};\n\nconst appendTrailingComma = ({ props, changes }: ChangeContext) => {\n if (!props.hasTrailingComma) {\n const last = props[props.length - 1];\n if (last) {\n changes.add(last.end, ',');\n }\n }\n};\n\nconst addColumns = ({\n shape: { add },\n changes,\n object,\n t,\n spaces,\n}: ChangeContext) => {\n const end = object.end - 1;\n for (const key in add) {\n const code = codeToString(add[key].toCode(t), spaces + ' ', ' ');\n changes.add(end, ` ${quoteObjectKey(key)}: ${code.trim()},\\n${spaces}`);\n }\n};\n\nconst addTableData = ({ add, changes, object, t, spaces }: ChangeContext) => {\n const end = object.end - 1;\n if (add.primaryKey) {\n const code = codeToString(\n primaryKeyToCode(add.primaryKey, t),\n spaces,\n ' ',\n );\n changes.add(end, ` ${code.trim()}\\n${spaces}`);\n }\n if (add.indexes) {\n for (const item of add.indexes) {\n const code = codeToString(indexToCode(item, t), spaces + ' ', ' ');\n changes.add(end, ` ${code.trim()}\\n${spaces}`);\n }\n }\n if (add.constraints) {\n for (const item of add.constraints) {\n const code = codeToString(constraintToCode(item, t), spaces + ' ', ' ');\n changes.add(end, ` ${code.trim()}\\n${spaces}`);\n }\n }\n};\n\nconst getColumnMethodArgs = (\n t: string,\n to: RakeDbAst.ChangeTableItem.Change['to'],\n key: keyof RakeDbAst.ChangeTableItem.Change['to'],\n dataType?: string,\n): Code[] | undefined => {\n const value = to[key];\n if (!value) return;\n\n if (key === 'indexes') {\n return columnIndexesToCode(\n value as Exclude<ColumnData['indexes'], undefined>,\n );\n }\n\n if (key === 'foreignKeys') {\n return columnForeignKeysToCode(value as ForeignKey<string, string[]>[]);\n }\n\n if (key === 'check') {\n return [columnCheckToCode(t, value as RawExpression)];\n }\n\n if (key === 'identity') {\n const code = identityToCode(value as TableData.Identity, dataType);\n code[0] = `.${code[0]}`;\n return code;\n }\n\n const code = [`.${key}(`];\n\n if (key === 'collate' || key === 'compression') {\n addCode(code, singleQuote(value as string));\n } else if (key === 'default') {\n addCode(code, columnDefaultArgumentToCode(t, value));\n } else if (key !== 'nullable' && key !== 'primaryKey') {\n return;\n }\n\n addCode(code, ')');\n return code;\n};\n\nconst dropMatchingIndexes = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Index[],\n) => {\n if (!items?.length) return;\n\n const [columnsNode, optionsNode] = call.arguments;\n const columns: Record<string, string | number>[] = [];\n if (ts.is.stringLiteral(columnsNode)) {\n columns.push({ column: columnsNode.text });\n } else if (ts.is.arrayLiteral(columnsNode)) {\n for (const node of columnsNode.elements) {\n if (ts.is.stringLiteral(node)) {\n columns.push({ column: node.text });\n } else if (ts.is.objectLiteral(node)) {\n const object = collectObjectFromCode(node);\n if (!object) return;\n columns.push(object);\n }\n }\n } else {\n return;\n }\n\n const options =\n (ts.is.objectLiteral(optionsNode) && collectObjectFromCode(optionsNode)) ||\n {};\n\n for (const item of items) {\n if (\n deepCompare(columns, item.columns) &&\n deepCompare(options, item.options)\n ) {\n removeProp(context, prop, i);\n }\n }\n};\n\nconst dropMatchingForeignKey = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Constraint[],\n) => {\n if (!items?.length) return;\n\n const existing = parseReferencesArgs(context, call.arguments);\n if (!existing) return;\n\n for (const item of items) {\n if (compareReferences(existing, item.references))\n removeProp(context, prop, i);\n }\n};\n\nconst parseReferencesArgs = (\n context: ChangeContext,\n args: NodeArray<Expression>,\n) => {\n const columns = collectStringArrayFromCode(args[0]);\n if (!columns) return;\n\n const fnOrTableNode = args[1];\n let fnOrTable: string;\n if (ts.is.stringLiteral(fnOrTableNode)) {\n fnOrTable = fnOrTableNode.text;\n } else if (ts.is.arrowFunction(fnOrTableNode)) {\n fnOrTable = context.changes.content\n .slice(fnOrTableNode.pos, fnOrTableNode.end)\n .replaceAll(/\\s/g, '');\n } else {\n return;\n }\n\n const foreignColumns = collectStringArrayFromCode(args[2]);\n if (!foreignColumns) return;\n\n const options =\n (ts.is.objectLiteral(args[3]) && collectObjectFromCode(args[3])) || {};\n\n return { columns, fnOrTable, foreignColumns, options };\n};\n\nconst compareReferences = (\n existing?: TableData.References,\n item?: TableData.References,\n) => {\n if (!item) return;\n\n const itemOptions = item.options ? { ...item.options } : undefined;\n if (itemOptions) {\n delete itemOptions.dropMode;\n }\n\n return (\n deepCompare(existing?.columns, item?.columns) &&\n deepCompare(existing?.fnOrTable, item?.fnOrTable.toString()) &&\n deepCompare(existing?.foreignColumns, item?.foreignColumns) &&\n deepCompare(existing?.options, itemOptions)\n );\n};\n\nconst dropMatchingCheck = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Constraint[],\n) => {\n if (!items?.length) return;\n\n const sql = parseCheckArg(context, call.arguments[0]);\n\n for (const item of items) {\n const { check } = item;\n if (!check) continue;\n\n if (check.__raw === sql) {\n removeProp(context, prop, i);\n }\n }\n};\n\nconst parseCheckArg = (context: ChangeContext, arg: Expression) => {\n if (!arg || !ts.is.call(arg)) return;\n\n const { expression } = arg;\n if (\n !ts.is.propertyAccess(expression) ||\n !ts.is.identifier(expression.expression) ||\n expression.expression.escapedText !== context.t ||\n expression.name.escapedText !== 'raw'\n )\n return;\n\n const [sqlArg] = arg.arguments;\n if (!sqlArg || !ts.is.stringLiteral(sqlArg)) return;\n\n return sqlArg.text;\n};\n\nconst dropMatchingConstraint = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Constraint[],\n) => {\n if (!items?.length) return;\n\n const {\n arguments: [arg],\n } = call;\n\n if (!arg || !ts.is.objectLiteral(arg)) return;\n\n const existing: Omit<TableData.Constraint, 'check'> & { check?: string } = {};\n for (const prop of arg.properties) {\n if (!ts.is.propertyAssignment(prop)) return;\n const name = ts.prop.getName(prop);\n if (!name) return;\n\n const init = prop.initializer;\n\n if (name === 'name') {\n if (!ts.is.stringLiteral(init)) return;\n\n existing.name = init.text;\n } else if (name === 'references') {\n if (!ts.is.arrayLiteral(init)) return;\n\n const refs = parseReferencesArgs(context, init.elements);\n if (!refs) return;\n\n existing.references = refs;\n } else if (name === 'check') {\n existing.check = parseCheckArg(context, init);\n }\n }\n\n for (const item of items) {\n if (existing.name !== item.name) continue;\n if (existing.check !== item.check?.__raw) continue;\n if (\n (existing.references || item.references) &&\n !compareReferences(existing.references, item.references)\n )\n continue;\n\n removeProp(context, prop, i);\n }\n};\n\nconst collectStringArrayFromCode = (node: Expression) => {\n if (!ts.is.arrayLiteral(node)) return;\n\n const result = node.elements\n .filter(ts.is.stringLiteral)\n .map((item) => item.text);\n\n return result.length === node.elements.length ? result : undefined;\n};\n\nconst collectObjectFromCode = (node: ObjectLiteralExpression) => {\n const object: Record<string, string | number> = {};\n for (const prop of node.properties) {\n if (!ts.is.propertyAssignment(prop)) return;\n const name = ts.prop.getName(prop);\n if (!name) return;\n\n const init = prop.initializer;\n if (ts.is.stringLiteral(init)) {\n object[name] = init.text;\n } else if (ts.is.numericLiteral(init)) {\n object[name] = parseFloat(init.text);\n } else {\n return;\n }\n }\n return object;\n};\n","import { UpdateTableFileParams } from './updateTableFile';\nimport { RakeDbAst } from 'rake-db';\nimport fs from 'fs/promises';\nimport { FileChanges } from '../fileChanges';\nimport { ts } from '../tsUtils';\nimport { Expression } from 'typescript';\nimport { singleQuote, pathToLog, toCamelCase, toPascalCase } from 'orchid-core';\n\nexport const renameTable = async ({\n ast,\n logger,\n ...params\n}: UpdateTableFileParams & { ast: RakeDbAst.RenameTable }) => {\n const tablePath = params.tablePath(toCamelCase(ast.from));\n const content = await fs.readFile(tablePath, 'utf-8').catch(() => undefined);\n if (!content) return;\n\n const changes = new FileChanges(content);\n const statements = ts.getStatements(content);\n const className = toPascalCase(ast.from) + 'Table';\n\n const changeSchema = ast.fromSchema !== ast.toSchema;\n\n for (const node of ts.class.iterate(statements)) {\n if (node.name?.escapedText !== className) continue;\n\n const addSchema =\n changeSchema &&\n ast.toSchema &&\n !node.members.some((member) => ts.prop.getName(member) === 'schema');\n\n if (addSchema && ast.toSchema) {\n changes.add(\n node.members.pos,\n `\\n schema = ${singleQuote(ast.toSchema)};`,\n );\n }\n\n for (const member of node.members) {\n const name = ts.prop.getName(member);\n\n if (name !== 'table' && !(changeSchema && name === 'schema')) continue;\n\n const { initializer: value } = member as unknown as {\n initializer?: Expression;\n };\n\n if (!value) continue;\n\n if (name === 'schema') {\n if (ast.toSchema) {\n changes.replace(\n value.pos,\n value.end,\n ` ${singleQuote(ast.toSchema)}`,\n );\n } else {\n changes.remove(member.pos, member.end);\n }\n } else {\n changes.replace(value.pos, value.end, ` ${singleQuote(ast.to)}`);\n }\n }\n }\n\n await fs.writeFile(tablePath, changes.apply());\n logger?.log(`Updated ${pathToLog(tablePath)}`);\n};\n","import { RakeDbAst } from 'rake-db';\nimport { createTable } from './createTable';\nimport { changeTable } from './changeTable';\nimport { renameTable } from './renameTable';\nimport { QueryLogOptions } from 'pqb';\nimport {\n AppCodeUpdaterTables,\n AppCodeUpdaterRelations,\n BaseTableParam,\n AppCodeUpdaterGetTable,\n} from '../appCodeUpdater';\nimport { handleForeignKey } from './handleForeignKey';\n\nexport type UpdateTableFileParams = {\n baseTable: BaseTableParam;\n tablePath: (name: string) => string;\n ast: RakeDbAst;\n logger?: QueryLogOptions['logger'];\n getTable: AppCodeUpdaterGetTable;\n relations: AppCodeUpdaterRelations;\n tables: AppCodeUpdaterTables;\n};\n\nexport const updateTableFile = async (params: UpdateTableFileParams) => {\n const { ast } = params;\n if (ast.type === 'table' && ast.action === 'create') {\n await createTable({ ...params, ast });\n } else if (ast.type === 'changeTable') {\n await changeTable({ ...params, ast });\n } else if (ast.type === 'renameTable') {\n await renameTable({ ...params, ast });\n } else if (ast.type === 'constraint' && ast.references) {\n const ref = ast.references;\n if (typeof ref.fnOrTable === 'string') {\n await handleForeignKey({\n getTable: params.getTable,\n relations: params.relations,\n tableName: ast.tableName,\n columns: ref.columns,\n foreignTableName: ref.fnOrTable,\n foreignColumns: ref.foreignColumns,\n });\n }\n }\n};\n","import { AppCodeUpdaterConfig, BaseTableParam } from './appCodeUpdater';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { pathToLog } from 'orchid-core';\n\ntype CreateBaseTableFileParams = Pick<AppCodeUpdaterConfig, 'logger'> & {\n baseTable: BaseTableParam;\n};\n\nexport const createBaseTableFile = async ({\n baseTable,\n logger,\n}: CreateBaseTableFileParams) => {\n await fs.mkdir(path.dirname(baseTable.filePath), { recursive: true });\n\n await fs\n .writeFile(\n baseTable.filePath,\n `import { createBaseTable } from 'orchid-orm';\n\nexport const ${baseTable.name} = createBaseTable();\n`,\n {\n flag: 'wx',\n },\n )\n .then(() => {\n logger?.log(`Created ${pathToLog(baseTable.filePath)}`);\n })\n .catch((err) => {\n if (err.code === 'EEXIST') return;\n throw err;\n });\n};\n","import {\n AppCodeUpdaterRelations,\n AppCodeUpdaterRelationItem,\n AppCodeUpdaterRelation,\n} from '../appCodeUpdater';\nimport { QueryLogOptions } from 'pqb';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { FileChanges } from '../fileChanges';\nimport { getImportPath, pathToLog } from 'orchid-core';\nimport { ts } from '../tsUtils';\nimport {\n ClassDeclaration,\n ClassElement,\n Expression,\n NodeArray,\n Statement,\n} from 'typescript';\nimport { pluralize } from 'inflection';\n\nexport type UpdateRelationsParams = {\n relations: AppCodeUpdaterRelations;\n logger?: QueryLogOptions['logger'];\n};\n\ntype Imports = Record<string, string>;\n\nexport const updateRelations = async ({\n relations,\n logger,\n}: UpdateRelationsParams) => {\n await Promise.all(\n Object.entries(relations).map(([tableName, item]) =>\n updateRelationItem(tableName, item, logger),\n ),\n );\n};\n\nconst updateRelationItem = async (\n tableName: string,\n item: AppCodeUpdaterRelationItem,\n logger?: QueryLogOptions['logger'],\n) => {\n const content = await fs.readFile(item.path, 'utf-8').catch(() => undefined);\n if (!content) return;\n\n const changes = new FileChanges(content);\n const statements = ts.getStatements(content);\n const dirName = path.dirname(item.path);\n\n const imports: Imports = {};\n for (const relation of item.relations) {\n if (!imports[relation.path]) {\n imports[relation.path] = relation.className;\n }\n }\n\n let importsEnd = 0;\n for (const node of ts.import.iterate(statements)) {\n const source = ts.import.getSource(node);\n const full = path.join(dirName, source + '.ts');\n if (imports[full]) {\n delete imports[full];\n }\n importsEnd = node.end;\n }\n\n const addImports = Object.entries(imports)\n .map(\n ([path, name]) =>\n `import { ${name} } from '${getImportPath(item.path, path)}';`,\n )\n .join('\\n');\n\n if (addImports) {\n changes.add(importsEnd, `\\n${addImports}`);\n }\n\n const targetClass = findClassByTableName(statements, tableName);\n if (targetClass) {\n const relationsMember = findRelationsMember(targetClass.members);\n if (relationsMember) {\n const { initializer } = relationsMember as {\n initializer?: Expression;\n };\n const takenKeys: Record<string, true> = {};\n if (ts.is.objectLiteral(initializer)) {\n const props = initializer.properties;\n for (const prop of props) {\n const name = prop.name?.getText();\n if (name) takenKeys[name] = true;\n }\n\n const addRelations: string[] = [];\n for (const rel of item.relations) {\n if (!checkRelation(rel)) continue;\n\n const name = makeRelationName(rel);\n if (takenKeys[name]) continue;\n\n addRelations.push(relationToCode(rel));\n }\n\n if (addRelations.length) {\n const pos = props.end;\n changes.add(pos, addRelations.join(''));\n }\n }\n } else {\n changes.add(\n targetClass.end - 1,\n `\\n relations = {${item.relations\n .filter(checkRelation)\n .map((rel) => relationToCode(rel))\n .join('')}\\n };\\n`,\n );\n }\n }\n\n await fs.writeFile(item.path, changes.apply());\n logger?.log(`Updated ${pathToLog(item.path)}`);\n};\n\nconst findClassByTableName = (\n statements: NodeArray<Statement>,\n tableName: string,\n): ClassDeclaration | undefined => {\n for (const node of ts.class.iterate(statements)) {\n for (const member of node.members) {\n const name = ts.prop.getName(member);\n if (name !== 'table') continue;\n\n const { initializer: value } = member as unknown as {\n initializer?: Expression;\n };\n if (!value || !ts.is.stringLiteral(value)) continue;\n\n if (value.text === tableName) {\n return node;\n }\n }\n }\n return;\n};\n\nconst findRelationsMember = (\n members: NodeArray<ClassElement>,\n): ClassElement | undefined => {\n for (const member of members) {\n const name = ts.prop.getName(member);\n if (name === 'relations') return member;\n }\n return;\n};\n\nconst checkRelation = (rel: AppCodeUpdaterRelation): boolean => {\n return rel.columns.length === 1 && rel.foreignColumns.length === 1;\n};\n\nconst makeRelationName = (rel: AppCodeUpdaterRelation): string => {\n return pluralize(\n rel.className[0].toLowerCase() +\n rel.className.slice(1).replace(/Table$/, ''),\n );\n};\n\nconst relationToCode = (\n rel: AppCodeUpdaterRelation,\n name = makeRelationName(rel),\n): string => {\n const code = [`\\n ${name}: this.${rel.kind}(() => ${rel.className}, {`];\n\n const pk = rel[rel.kind === 'hasMany' ? 'columns' : 'foreignColumns'][0];\n const fk = rel[rel.kind === 'hasMany' ? 'foreignColumns' : 'columns'][0];\n code.push(\n ` primaryKey: '${pk}',`,\n ` foreignKey: '${fk}',`,\n ' }),',\n );\n\n return code.join('\\n');\n};\n","import { AppCodeUpdater } from 'rake-db';\nimport * as path from 'path';\nimport { updateMainFile } from './updateMainFile';\nimport { updateTableFile } from './updateTableFile/updateTableFile';\nimport { createBaseTableFile } from './createBaseTableFile';\nimport { Db, QueryLogOptions } from 'pqb';\nimport { OrchidORM } from '../orm';\nimport { updateRelations } from './updateTableFile/updateRelations';\n\nexport class AppCodeUpdaterError extends Error {}\n\nexport type AppCodeUpdaterConfig = {\n tablePath(tableName: string): string;\n ormPath: string;\n ormExportedAs?: string;\n logger?: QueryLogOptions['logger'];\n};\n\nexport type BaseTableParam = {\n filePath: string;\n name: string;\n};\n\nexport type AppCodeUpdaterRelations = {\n [Table in string]: AppCodeUpdaterRelationItem;\n};\n\nexport type AppCodeUpdaterRelationItem = {\n path: string;\n relations: AppCodeUpdaterRelation[];\n};\n\nexport type AppCodeUpdaterRelation = {\n kind: 'belongsTo' | 'hasMany';\n className: string;\n path: string;\n columns: string[];\n foreignColumns: string[];\n};\n\nexport type AppCodeUpdaterTableInfo = {\n key: string;\n name: string;\n path: string;\n};\n\nexport type AppCodeUpdaterTables = {\n [TableName in string]: AppCodeUpdaterTableInfo;\n};\n\nexport type AppCodeUpdaterGetTable = (\n tableName: string,\n) => Promise<AppCodeUpdaterTableInfo | undefined>;\n\nconst makeGetTable = (\n path: string,\n ormExportedAs: string,\n tables: AppCodeUpdaterTables,\n): AppCodeUpdaterGetTable => {\n let orm: OrchidORM | undefined;\n\n return async (tableName) => {\n if (tables[tableName]) return tables[tableName];\n\n if (!orm) {\n orm = (await import(path))[ormExportedAs];\n if (!orm) {\n throw new Error(`ORM is not exported as ${ormExportedAs} from ${path}`);\n }\n }\n\n for (const key in orm) {\n const table = orm[key];\n if (\n table &&\n typeof table === 'object' &&\n (table as object) instanceof Db &&\n (table as Db).table === tableName\n ) {\n const tableInfo = {\n key,\n name: (table as { name: string }).name,\n path: (table as { filePath: string }).filePath,\n };\n return (tables[tableName] = tableInfo);\n }\n }\n\n return;\n };\n};\n\nexport const appCodeUpdater = ({\n tablePath,\n ormPath,\n ormExportedAs = 'db',\n}: AppCodeUpdaterConfig): AppCodeUpdater => ({\n async process({\n ast,\n options,\n basePath,\n cache: cacheObject,\n logger,\n baseTable,\n }) {\n const params: AppCodeUpdaterConfig = {\n tablePath(name: string) {\n const file = tablePath(name);\n return resolvePath(basePath, file);\n },\n ormPath: resolvePath(basePath, ormPath),\n ormExportedAs,\n logger,\n };\n\n const cache = cacheObject as {\n createdBaseTable?: true;\n relations?: AppCodeUpdaterRelations;\n tables?: AppCodeUpdaterTables;\n };\n\n cache.relations ??= {};\n cache.tables ??= {};\n\n const getTable = makeGetTable(params.ormPath, ormExportedAs, cache.tables);\n\n const promises: Promise<void>[] = [\n updateMainFile(params.ormPath, params.tablePath, ast, options, logger),\n updateTableFile({\n ...params,\n ast,\n baseTable,\n getTable,\n relations: cache.relations,\n tables: cache.tables,\n }),\n ];\n\n if (!cache.createdBaseTable) {\n promises.push(\n createBaseTableFile({ logger: params.logger, baseTable }).then(() => {\n cache.createdBaseTable = true;\n }),\n );\n }\n\n await Promise.all(promises);\n },\n\n async afterAll({ cache, logger }) {\n const { relations } = cache as {\n relations?: AppCodeUpdaterRelations;\n };\n if (!relations) return;\n\n await updateRelations({\n relations,\n logger,\n });\n },\n});\n\nconst resolvePath = (basePath: string, filePath: string) =>\n path.isAbsolute(filePath) ? filePath : path.resolve(basePath, filePath);\n"],"names":["columnTypes","defaultColumnTypes","filePath","nestedInsert","nestedUpdate","q","values","rowIndex","columnIndex","_a","id","query","data","__spreadValues","__spreadProps","connect","connectOrCreate","create","__objRest","options","content","createTable","path","code","prop"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/table.ts","../src/relations/belongsTo.ts","../src/relations/utils.ts","../src/relations/hasOne.ts","../src/relations/hasMany.ts","../src/relations/hasAndBelongsToMany.ts","../src/relations/relations.ts","../src/transaction.ts","../src/orm.ts","../src/repo.ts"],"sourcesContent":["import {\n ColumnsShape,\n columnTypes as defaultColumnTypes,\n Db,\n DefaultColumnTypes,\n getColumnTypes,\n Query,\n} from 'pqb';\nimport {\n ColumnShapeOutput,\n ColumnTypesBase,\n getCallerFilePath,\n snakeCaseKey,\n StringKey,\n toSnakeCase,\n} from 'orchid-core';\nimport { MapRelations, Relation, RelationThunks } from './relations/relations';\nimport { OrchidORM } from './orm';\n\n// type of table class itself\nexport type TableClass<T extends Table = Table> = new () => T;\n\n// object with table classes, used on orchidORM() for setting tables\nexport type TableClasses = Record<string, TableClass>;\n\n// convert table instance type to queryable interface\n// processes relations to a type that's understandable by `pqb`\n// add ORM table specific metadata like `definedAt`, `db`, `filePath`\nexport type TableToDb<T extends Table> = Db<\n T['table'],\n T['columns']['shape'],\n 'relations' extends keyof T\n ? T['relations'] extends RelationThunks\n ? {\n [K in StringKey<keyof T['relations']>]: Relation<\n T,\n T['relations'],\n K\n >;\n }\n : Query['relations']\n : Query['relations'],\n T['columnTypes']\n> & { definedAs: string; db: OrchidORM; filePath: string; name: string };\n\n// convert a table class type into queryable interface\n// add relation methods\nexport type DbTable<T extends TableClass> = TableToDb<InstanceType<T>> &\n Omit<MapRelations<InstanceType<T>>, keyof Query>;\n\n// `columns` property of table has a shape and an output type of the columns\ntype ColumnsConfig = {\n shape: ColumnsShape;\n type: unknown;\n};\n\n// callback with a query of relation, to use as a default scope\ntype ScopeFn<Related extends TableClass, Scope extends Query> = (\n q: DbTable<Related>,\n) => Scope;\n\n// type of table instance created by a table class\nexport type Table = {\n table: string;\n columns: ColumnsConfig;\n schema?: string;\n columnTypes: ColumnTypesBase;\n noPrimaryKey?: boolean;\n filePath: string;\n};\n\n// base table constructor\nexport const createBaseTable = <CT extends ColumnTypesBase>(\n {\n columnTypes,\n snakeCase,\n filePath,\n nowSQL,\n }: {\n // concrete column types or a callback for overriding standard column types\n // this types will be used in tables to define their columns\n columnTypes?: CT | ((t: DefaultColumnTypes) => CT);\n // when set to true, all columns will be translated to `snake_case` when querying database\n snakeCase?: boolean;\n // if for some unknown reason you see error that file path for a table can't be guessed automatically,\n // provide it manually via `filePath`\n filePath?: string;\n // if `now()` for some reason doesn't suite your timestamps, provide a custom SQL for it\n nowSQL?: string;\n } = { columnTypes: defaultColumnTypes as unknown as CT },\n) => {\n const ct =\n typeof columnTypes === 'function'\n ? columnTypes(defaultColumnTypes)\n : columnTypes || defaultColumnTypes;\n\n filePath ??= getCallerFilePath();\n if (!filePath) {\n throw new Error(\n `Failed to determine file path of a base table. Please set the \\`filePath\\` option of \\`createBaseTable\\` manually.`,\n );\n }\n\n return create(\n ct as ColumnTypesBase extends CT ? DefaultColumnTypes : CT,\n filePath,\n snakeCase,\n nowSQL,\n );\n};\n\nconst create = <CT extends ColumnTypesBase>(\n columnTypes: CT,\n filePath: string,\n snakeCase?: boolean,\n nowSQL?: string,\n) => {\n const base = class BaseTable {\n static filePath = filePath;\n static nowSQL = nowSQL;\n\n table!: string;\n columns!: ColumnsConfig;\n schema?: string;\n noPrimaryKey?: boolean;\n snakeCase = snakeCase;\n columnTypes: CT;\n filePath!: string;\n\n constructor() {\n this.columnTypes = columnTypes;\n }\n\n setColumns<T extends ColumnsShape>(\n fn: (t: CT) => T,\n ): { shape: T; type: ColumnShapeOutput<T> } {\n if (!this.filePath) {\n const filePath = getCallerFilePath();\n if (!filePath) {\n throw new Error(\n `Failed to determine file path for table ${this.constructor.name}. Please set \\`filePath\\` property manually`,\n );\n }\n\n this.filePath = filePath;\n }\n\n (columnTypes as { [snakeCaseKey]?: boolean })[snakeCaseKey] =\n this.snakeCase;\n\n const shape = getColumnTypes(columnTypes, fn, nowSQL);\n\n if (this.snakeCase) {\n for (const key in shape) {\n const column = shape[key];\n if (column.data.name) continue;\n\n const snakeName = toSnakeCase(key);\n if (snakeName !== key) {\n column.data.name = snakeName;\n }\n }\n }\n\n return {\n shape,\n type: undefined as unknown as ColumnShapeOutput<T>,\n };\n }\n\n belongsTo<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Options extends {\n primaryKey: keyof InstanceType<Related>['columns']['shape'];\n foreignKey: keyof Self['columns']['shape'];\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'belongsTo' as const,\n returns: 'one' as const,\n fn,\n options,\n };\n }\n\n hasOne<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Through extends string,\n Source extends string,\n Options extends (\n | {\n primaryKey: keyof Self['columns']['shape'];\n foreignKey: keyof InstanceType<Related>['columns']['shape'];\n }\n | {\n through: Through;\n source: Source;\n }\n ) & {\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'hasOne' as const,\n returns: 'one' as const,\n fn,\n options,\n };\n }\n\n hasMany<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Through extends string,\n Source extends string,\n Options extends (\n | {\n primaryKey: keyof Self['columns']['shape'];\n foreignKey: keyof InstanceType<Related>['columns']['shape'];\n }\n | {\n through: Through;\n source: Source;\n }\n ) & {\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'hasMany' as const,\n returns: 'many' as const,\n fn,\n options,\n };\n }\n\n hasAndBelongsToMany<\n Self extends this,\n Related extends TableClass,\n Scope extends Query,\n Options extends {\n primaryKey: keyof Self['columns']['shape'];\n associationPrimaryKey: keyof InstanceType<Related>['columns']['shape'];\n foreignKey: string;\n associationForeignKey: string;\n joinTable: string;\n scope?: ScopeFn<Related, Scope>;\n required?: boolean;\n },\n >(this: Self, fn: () => Related, options: Options) {\n return {\n type: 'hasAndBelongsToMany' as const,\n returns: 'many' as const,\n fn,\n options,\n };\n }\n };\n\n base.prototype.columnTypes = columnTypes;\n\n return base;\n};\n","import { Table } from '../table';\nimport {\n addQueryOn,\n BelongsToRelation,\n CreateCtx,\n InsertQueryData,\n isQueryReturnsAll,\n pushQueryValue,\n Query,\n QueryBase,\n QueryResult,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\nimport { RelationData, RelationThunkBase } from './relations';\nimport { NestedInsertOneItem, NestedUpdateOneItem } from './utils';\n\nexport interface BelongsTo extends RelationThunkBase {\n type: 'belongsTo';\n returns: 'one';\n options: BelongsToRelation['options'];\n}\n\nexport type BelongsToInfo<\n T extends Table,\n Relation extends BelongsTo,\n FK extends string = Relation['options']['foreignKey'],\n> = {\n params: Record<FK, T['columns']['shape'][FK]['type']>;\n populate: never;\n chainedCreate: false;\n chainedDelete: false;\n};\n\ntype State = {\n query: Query;\n primaryKey: string;\n foreignKey: string;\n};\n\ntype BelongsToNestedInsert = (\n query: Query,\n relationData: NestedInsertOneItem[],\n) => Promise<Record<string, unknown>[]>;\n\ntype BelongsToNestedUpdate = (\n q: Query,\n update: Record<string, unknown>,\n params: NestedUpdateOneItem,\n state: {\n queries?: ((queryResult: QueryResult) => Promise<void>)[];\n updateData?: Record<string, unknown>;\n },\n) => boolean;\n\nclass BelongsToVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: BelongsToNestedInsert;\n private readonly nestedUpdate: BelongsToNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(this.state);\n this.nestedUpdate = nestedUpdate(this.state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n const {\n key,\n state: { foreignKey, primaryKey },\n } = this;\n\n let columnIndex = ctx.columns.get(foreignKey);\n if (columnIndex === undefined) {\n ctx.columns.set(foreignKey, (columnIndex = ctx.columns.size));\n }\n\n const store = ctx as unknown as {\n belongsTo?: Record<string, [number, number, unknown][]>;\n };\n\n if (!store.belongsTo) store.belongsTo = {};\n\n const values = [rowIndex, columnIndex, item[key]] as [\n number,\n number,\n unknown,\n ];\n\n if (store.belongsTo[key]) {\n store.belongsTo[key].push(values);\n return;\n }\n\n const relationData = [values];\n store.belongsTo[key] = relationData;\n q.query.wrapInTransaction = true;\n\n pushQueryValue(q, 'beforeCreate', async (q: Query) => {\n const inserted = await this.nestedInsert(\n q,\n relationData.map(([, , data]) => data as NestedInsertOneItem),\n );\n\n const { values } = q.query as InsertQueryData;\n relationData.forEach(([rowIndex, columnIndex], index) => {\n (values as unknown[][])[rowIndex][columnIndex] =\n inserted[index][primaryKey];\n });\n });\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n q.query.wrapInTransaction = true;\n\n const data = set[this.key] as NestedUpdateOneItem;\n if (this.nestedUpdate(q, set, data, ctx)) {\n ctx.willSetKeys = true;\n }\n }\n}\n\nexport const makeBelongsToMethod = (\n relation: BelongsTo,\n relationName: string,\n query: Query,\n): RelationData => {\n const { primaryKey, foreignKey } = relation.options;\n const state: State = { query, primaryKey, foreignKey };\n\n return {\n returns: 'one',\n method: (params: Record<string, unknown>) => {\n return query.findBy({ [primaryKey]: params[foreignKey] });\n },\n virtualColumn: new BelongsToVirtualColumn(relationName, state),\n joinQuery(fromQuery, toQuery) {\n return addQueryOn(toQuery, fromQuery, toQuery, primaryKey, foreignKey);\n },\n reverseJoin(fromQuery, toQuery) {\n return addQueryOn(fromQuery, toQuery, fromQuery, foreignKey, primaryKey);\n },\n primaryKey,\n };\n};\n\nconst nestedInsert = ({ query, primaryKey }: State) => {\n return (async (_, data) => {\n const connectOrCreate = data.filter(\n (\n item,\n ): item is {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n } => Boolean(item.connectOrCreate),\n );\n\n const t = query.clone();\n\n let connectOrCreated: unknown[];\n if (connectOrCreate.length) {\n connectOrCreated = await Promise.all(\n connectOrCreate.map((item) =>\n t.findBy(item.connectOrCreate.where)._takeOptional(),\n ),\n );\n } else {\n connectOrCreated = [];\n }\n\n let connectOrCreatedI = 0;\n const create = data.filter(\n (\n item,\n ): item is\n | {\n create: Record<string, unknown>;\n }\n | {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n } => {\n if (item.connectOrCreate) {\n return !connectOrCreated[connectOrCreatedI++];\n } else {\n return Boolean(item.create);\n }\n },\n );\n\n let created: unknown[];\n if (create.length) {\n created = (await t\n .select(primaryKey)\n ._createMany(\n create.map((item) =>\n 'create' in item ? item.create : item.connectOrCreate.create,\n ),\n )) as unknown[];\n } else {\n created = [];\n }\n\n const connect = data.filter(\n (\n item,\n ): item is {\n connect: WhereArg<QueryBase>;\n } => Boolean(item.connect),\n );\n\n let connected: unknown[];\n if (connect.length) {\n connected = await Promise.all(\n connect.map((item) => t.findBy(item.connect)._take()),\n );\n } else {\n connected = [];\n }\n\n let createdI = 0;\n let connectedI = 0;\n connectOrCreatedI = 0;\n return data.map((item) =>\n item.connectOrCreate\n ? connectOrCreated[connectOrCreatedI++] || created[createdI++]\n : item.connect\n ? connected[connectedI++]\n : created[createdI++],\n ) as Record<string, unknown>[];\n }) as BelongsToNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKey, foreignKey }: State) => {\n return ((q, update, params, state) => {\n if (params.upsert && isQueryReturnsAll(q)) {\n throw new Error('`upsert` option is not allowed in a batch update');\n }\n\n let idForDelete: unknown;\n\n q._beforeUpdate(async (q) => {\n if (params.disconnect) {\n update[foreignKey] = null;\n } else if (params.set) {\n if (primaryKey in params.set) {\n update[foreignKey] =\n params.set[primaryKey as keyof typeof params.set];\n } else {\n update[foreignKey] = await query.findBy(params.set)._get(primaryKey);\n }\n } else if (params.create) {\n update[foreignKey] = await query.get(primaryKey)._create(params.create);\n } else if (params.delete) {\n const selectQuery = q.clone();\n selectQuery.query.type = undefined;\n idForDelete = await selectQuery._getOptional(foreignKey);\n update[foreignKey] = null;\n }\n });\n\n const { upsert } = params;\n if (upsert || params.update || params.delete) {\n if (\n !q.query.select?.includes('*') &&\n !q.query.select?.includes(foreignKey)\n ) {\n q._select(foreignKey);\n }\n }\n\n if (upsert) {\n (state.queries ??= []).push(async (queryResult) => {\n const id = queryResult.rows[0][foreignKey];\n if (id !== null) {\n await query\n .findBy({ [primaryKey]: id })\n ._update<WhereResult<Query>>(upsert.update);\n } else {\n const data =\n typeof upsert.create === 'function'\n ? upsert.create()\n : upsert.create;\n const result = await query.select(primaryKey)._create(data);\n\n (state.updateData ??= {})[foreignKey] = result[primaryKey];\n }\n });\n } else if (params.delete || params.update) {\n q._afterQuery(async (_, data) => {\n const id = params.delete\n ? idForDelete\n : Array.isArray(data)\n ? data.length === 0\n ? null\n : {\n in: data\n .map((item) => item[foreignKey])\n .filter((id) => id !== null),\n }\n : (data as Record<string, unknown>)[foreignKey];\n\n if (id !== undefined && id !== null) {\n const t = query.findBy({\n [primaryKey]: id,\n });\n\n if (params.delete) {\n await t._delete();\n } else if (params.update) {\n await t._update<WhereResult<Query>>(params.update);\n }\n }\n });\n }\n\n return !params.update && !params.upsert;\n }) as BelongsToNestedUpdate;\n};\n","import {\n CreateCtx,\n pushQueryValue,\n Query,\n QueryBase,\n Relation,\n UpdateCtx,\n UpdateData,\n WhereArg,\n} from 'pqb';\nimport { MaybeArray } from 'orchid-core';\nimport { HasOneNestedInsert, HasOneNestedUpdate } from './hasOne';\nimport { HasManyNestedInsert, HasManyNestedUpdate } from './hasMany';\n\nexport type NestedInsertOneItem = {\n create?: Record<string, unknown>;\n connect?: WhereArg<QueryBase>;\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n};\n\nexport type NestedInsertManyItems = {\n create?: Record<string, unknown>[];\n connect?: WhereArg<QueryBase>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n};\n\nexport type NestedInsertItem = NestedInsertOneItem | NestedInsertManyItems;\n\nexport type NestedUpdateOneItem = {\n disconnect?: boolean;\n set?: WhereArg<QueryBase>;\n delete?: boolean;\n update?: UpdateData<Query>;\n upsert?: {\n update: UpdateData<Query>;\n create: Record<string, unknown> | (() => Record<string, unknown>);\n };\n create: Record<string, unknown>;\n};\n\nexport type NestedUpdateManyItems = {\n disconnect?: MaybeArray<WhereArg<QueryBase>>;\n set?: MaybeArray<WhereArg<QueryBase>>;\n delete?: MaybeArray<WhereArg<QueryBase>>;\n update?: {\n where: MaybeArray<WhereArg<QueryBase>>;\n data: UpdateData<Query>;\n };\n create: Record<string, unknown>[];\n};\n\nexport type NestedUpdateItem = NestedUpdateOneItem | NestedUpdateManyItems;\n\nexport const getThroughRelation = (table: Query, through: string) => {\n return (table.relations as Record<string, Relation>)[through];\n};\n\nexport const getSourceRelation = (\n throughRelation: Relation,\n source: string,\n) => {\n return (throughRelation.table.relations as Record<string, Relation>)[source];\n};\n\nexport const hasRelationHandleCreate = (\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n key: string,\n primaryKey: string,\n nestedInsert: HasOneNestedInsert | HasManyNestedInsert,\n) => {\n const value = item[key] as NestedInsertItem;\n if (\n (!value.create ||\n (Array.isArray(value.create) && value.create.length === 0)) &&\n (!value.connect ||\n (Array.isArray(value.connect) && value.connect.length === 0)) &&\n (!value.connectOrCreate ||\n (Array.isArray(value.connectOrCreate) &&\n value.connectOrCreate.length === 0))\n )\n return;\n\n const store = ctx as unknown as {\n hasRelation?: Record<string, [number, NestedInsertItem][]>;\n };\n\n if (!store.hasRelation) store.hasRelation = {};\n\n const values = [rowIndex, value] as [number, NestedInsertItem];\n\n if (store.hasRelation[key]) {\n store.hasRelation[key].push(values);\n return;\n }\n\n q.query.wrapInTransaction = true;\n ctx.returnTypeAll = true;\n ctx.requiredReturning[primaryKey] = true;\n\n const relationData = [values];\n store.hasRelation[key] = relationData;\n\n pushQueryValue(q, 'afterCreate', async (q: Query) => {\n const { resultAll } = ctx;\n return (nestedInsert as HasOneNestedInsert)(\n q,\n relationData.map(([rowIndex, data]) => [\n resultAll[rowIndex],\n data as NestedInsertOneItem,\n ]),\n );\n });\n};\n\nexport const hasRelationHandleUpdate = (\n q: Query,\n ctx: UpdateCtx,\n set: Record<string, unknown>,\n key: string,\n primaryKey: string,\n nestedUpdate: HasOneNestedUpdate | HasManyNestedUpdate,\n) => {\n const value = set[key] as NestedUpdateItem;\n\n if (\n !value.set &&\n !('upsert' in value) &&\n (!value.disconnect ||\n (Array.isArray(value.disconnect) && value.disconnect.length === 0)) &&\n (!value.delete ||\n (Array.isArray(value.delete) && value.delete.length === 0)) &&\n (!value.update ||\n (Array.isArray(value.update.where) && value.update.where.length === 0)) &&\n (!value.create ||\n (Array.isArray(value.create) && value.create.length === 0))\n )\n return;\n\n if (!q.query.select?.includes('*') && !q.query.select?.includes(primaryKey)) {\n q._select(primaryKey);\n }\n\n q.query.wrapInTransaction = true;\n ctx.returnTypeAll = true;\n\n pushQueryValue(q, 'afterUpdate', (q: Query) => {\n return (nestedUpdate as HasOneNestedUpdate)(\n q,\n ctx.resultAll,\n value as NestedUpdateOneItem,\n );\n });\n};\n","import {\n addQueryOn,\n CreateCtx,\n getQueryAs,\n HasOneRelation,\n InsertQueryData,\n isQueryReturnsAll,\n JoinCallback,\n Query,\n QueryBase,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\nimport { Table } from '../table';\nimport {\n RelationData,\n RelationInfo,\n RelationThunkBase,\n RelationThunks,\n} from './relations';\nimport {\n getSourceRelation,\n getThroughRelation,\n hasRelationHandleCreate,\n hasRelationHandleUpdate,\n NestedInsertOneItem,\n NestedUpdateOneItem,\n} from './utils';\n\nexport interface HasOne extends RelationThunkBase {\n type: 'hasOne';\n returns: 'one';\n options: HasOneRelation['options'];\n}\n\nexport type HasOneInfo<\n T extends Table,\n Relations extends RelationThunks,\n Relation extends HasOne,\n> = {\n params: Relation['options'] extends { primaryKey: string }\n ? Record<\n Relation['options']['primaryKey'],\n T['columns']['shape'][Relation['options']['primaryKey']]['type']\n >\n : Relation['options'] extends { through: string }\n ? RelationInfo<\n T,\n Relations,\n Relations[Relation['options']['through']]\n >['params']\n : never;\n populate: Relation['options'] extends { foreignKey: string }\n ? Relation['options']['foreignKey']\n : never;\n chainedCreate: Relation['options'] extends { primaryKey: string }\n ? true\n : false;\n chainedDelete: true;\n};\n\ntype State = {\n query: Query;\n primaryKey: string;\n foreignKey: string;\n};\n\nexport type HasOneNestedInsert = (\n query: Query,\n data: [\n selfData: Record<string, unknown>,\n relationData: NestedInsertOneItem,\n ][],\n) => Promise<void>;\n\nexport type HasOneNestedUpdate = (\n query: Query,\n data: Record<string, unknown>[],\n relationData: NestedUpdateOneItem,\n) => Promise<void>;\n\nclass HasOneVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: HasOneNestedInsert;\n private readonly nestedUpdate: HasOneNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(state);\n this.nestedUpdate = nestedUpdate(state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n hasRelationHandleCreate(\n q,\n ctx,\n item,\n rowIndex,\n this.key,\n this.state.primaryKey,\n this.nestedInsert,\n );\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n hasRelationHandleUpdate(\n q,\n ctx,\n set,\n this.key,\n this.state.primaryKey,\n this.nestedUpdate,\n );\n }\n}\n\nexport const makeHasOneMethod = (\n table: Query,\n relation: HasOne,\n relationName: string,\n query: Query,\n): RelationData => {\n if (relation.options.required) {\n query._take();\n } else {\n query._takeOptional();\n }\n\n if ('through' in relation.options) {\n const { through, source } = relation.options;\n\n type TableWithQueryMethod = Record<\n string,\n (params: Record<string, unknown>) => Query\n >;\n\n const throughRelation = getThroughRelation(table, through);\n const sourceRelation = getSourceRelation(throughRelation, source);\n const sourceQuery = sourceRelation\n .joinQuery(throughRelation.query, sourceRelation.query)\n .as(relationName);\n\n const whereExistsCallback = () => sourceQuery;\n\n return {\n returns: 'one',\n method: (params: Record<string, unknown>) => {\n const throughQuery = (table as unknown as TableWithQueryMethod)[\n through\n ](params);\n\n return query.whereExists<Query, Query>(\n throughQuery,\n whereExistsCallback as unknown as JoinCallback<Query, Query>,\n );\n },\n joinQuery(fromQuery, toQuery) {\n return toQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n primaryKey: sourceRelation.primaryKey,\n };\n }\n\n const { primaryKey, foreignKey } = relation.options;\n const state: State = { query, primaryKey, foreignKey };\n\n const fromQuerySelect = [{ selectAs: { [foreignKey]: primaryKey } }];\n\n return {\n returns: 'one',\n method: (params: Record<string, unknown>) => {\n const values = { [foreignKey]: params[primaryKey] };\n return query.where(values)._defaults(values);\n },\n virtualColumn: new HasOneVirtualColumn(relationName, state),\n joinQuery(fromQuery, toQuery) {\n return addQueryOn(toQuery, fromQuery, toQuery, foreignKey, primaryKey);\n },\n reverseJoin(fromQuery, toQuery) {\n return addQueryOn(fromQuery, toQuery, fromQuery, primaryKey, foreignKey);\n },\n primaryKey,\n modifyRelatedQuery(relationQuery) {\n return (query) => {\n const fromQuery = query.clone();\n fromQuery.query.select = fromQuerySelect;\n (relationQuery.query as InsertQueryData).values = { from: fromQuery };\n };\n },\n };\n};\n\nconst nestedInsert = ({ query, primaryKey, foreignKey }: State) => {\n return (async (_, data) => {\n const connect = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n (\n | {\n connect: WhereArg<QueryBase>;\n }\n | {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n }\n ),\n ] => Boolean(item[1].connect || item[1].connectOrCreate),\n );\n\n const t = query.clone();\n\n let connected: number[];\n if (connect.length) {\n connected = await Promise.all(\n connect.map(([selfData, item]) => {\n const data = { [foreignKey]: selfData[primaryKey] };\n return 'connect' in item\n ? (\n t.where(item.connect) as Omit<Query, 'meta'> & {\n meta: Omit<Query['meta'], 'hasSelect' | 'hasWhere'> & {\n hasWhere: true;\n };\n }\n )._updateOrThrow(data)\n : (\n t.where(item.connectOrCreate.where) as Omit<Query, 'meta'> & {\n meta: Omit<Query['meta'], 'hasSelect' | 'hasWhere'> & {\n hasWhere: true;\n };\n }\n )._update(data);\n }),\n );\n } else {\n connected = [];\n }\n\n let connectedI = 0;\n const create = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n (\n | { create: Record<string, unknown> }\n | {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n };\n }\n ),\n ] => {\n if (item[1].connectOrCreate) {\n return !connected[connectedI++];\n }\n return Boolean(item[1].create);\n },\n );\n\n if (create.length) {\n await t._count()._createMany(\n create.map(([selfData, item]) => ({\n [foreignKey]: selfData[primaryKey],\n ...('create' in item ? item.create : item.connectOrCreate.create),\n })),\n );\n }\n }) as HasOneNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKey, foreignKey }: State) => {\n return (async (q, data, params) => {\n if (\n (params.set || params.create || params.upsert) &&\n isQueryReturnsAll(q)\n ) {\n const key = params.set ? 'set' : params.create ? 'create' : 'upsert';\n throw new Error(`\\`${key}\\` option is not allowed in a batch update`);\n }\n\n const t = query.clone();\n const ids = data.map((item) => item[primaryKey]);\n const currentRelationsQuery = t.where({\n [foreignKey]: { in: ids },\n });\n\n if (params.create || params.disconnect || params.set) {\n await currentRelationsQuery._update({ [foreignKey]: null });\n\n if (params.create) {\n await t._count()._create({\n ...params.create,\n [foreignKey]: data[0][primaryKey],\n });\n }\n if (params.set) {\n await t\n ._where<Query>(params.set)\n ._update({ [foreignKey]: data[0][primaryKey] });\n }\n } else if (params.update) {\n await currentRelationsQuery._update<WhereResult<Query>>(params.update);\n } else if (params.delete) {\n await currentRelationsQuery._delete();\n } else if (params.upsert) {\n const { update, create } = params.upsert;\n const updatedIds: unknown[] = await currentRelationsQuery\n ._pluck(foreignKey)\n ._update<WhereResult<Query & { meta: { hasSelect: true } }>>(update);\n\n if (updatedIds.length < ids.length) {\n const data = typeof create === 'function' ? create() : create;\n\n await t.createMany(\n ids\n .filter((id) => !updatedIds.includes(id))\n .map((id) => ({\n ...data,\n [foreignKey]: id,\n })),\n );\n }\n }\n }) as HasOneNestedUpdate;\n};\n","import {\n RelationData,\n RelationInfo,\n RelationThunkBase,\n RelationThunks,\n} from './relations';\nimport { Table } from '../table';\nimport {\n addQueryOn,\n getQueryAs,\n HasManyRelation,\n CreateData,\n JoinCallback,\n Query,\n QueryBase,\n toSqlCacheKey,\n WhereArg,\n WhereResult,\n InsertQueryData,\n isQueryReturnsAll,\n VirtualColumn,\n CreateCtx,\n UpdateCtx,\n} from 'pqb';\nimport { MaybeArray } from 'orchid-core';\nimport {\n getSourceRelation,\n getThroughRelation,\n hasRelationHandleCreate,\n hasRelationHandleUpdate,\n NestedInsertManyItems,\n NestedUpdateManyItems,\n} from './utils';\n\nexport interface HasMany extends RelationThunkBase {\n type: 'hasMany';\n returns: 'many';\n options: HasManyRelation['options'];\n}\n\nexport type HasManyInfo<\n T extends Table,\n Relations extends RelationThunks,\n Relation extends HasMany,\n> = {\n params: Relation['options'] extends { primaryKey: string }\n ? Record<\n Relation['options']['primaryKey'],\n T['columns']['shape'][Relation['options']['primaryKey']]['type']\n >\n : Relation['options'] extends { through: string }\n ? RelationInfo<\n T,\n Relations,\n Relations[Relation['options']['through']]\n >['params']\n : never;\n populate: Relation['options'] extends { foreignKey: string }\n ? Relation['options']['foreignKey']\n : never;\n chainedCreate: Relation['options'] extends { primaryKey: string }\n ? true\n : false;\n chainedDelete: true;\n};\n\ntype State = {\n query: Query;\n primaryKey: string;\n foreignKey: string;\n};\n\nexport type HasManyNestedUpdate = (\n query: Query,\n data: Record<string, unknown>[],\n relationData: NestedUpdateManyItems,\n) => Promise<void>;\n\nexport type HasManyNestedInsert = (\n query: Query,\n data: [\n selfData: Record<string, unknown>,\n relationData: NestedInsertManyItems,\n ][],\n) => Promise<void>;\n\nclass HasManyVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: HasManyNestedInsert;\n private readonly nestedUpdate: HasManyNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(state);\n this.nestedUpdate = nestedUpdate(state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n hasRelationHandleCreate(\n q,\n ctx,\n item,\n rowIndex,\n this.key,\n this.state.primaryKey,\n this.nestedInsert,\n );\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n hasRelationHandleUpdate(\n q,\n ctx,\n set,\n this.key,\n this.state.primaryKey,\n this.nestedUpdate,\n );\n }\n}\n\nexport const makeHasManyMethod = (\n table: Query,\n relation: HasMany,\n relationName: string,\n query: Query,\n): RelationData => {\n if ('through' in relation.options) {\n const { through, source } = relation.options;\n\n type TableWithQueryMethod = Record<\n string,\n (params: Record<string, unknown>) => Query\n >;\n\n const throughRelation = getThroughRelation(table, through);\n const sourceRelation = getSourceRelation(throughRelation, source);\n const sourceRelationQuery = sourceRelation.query.as(relationName);\n const sourceQuery = sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelationQuery,\n );\n\n const whereExistsCallback = () => sourceQuery;\n\n return {\n returns: 'many',\n method: (params: Record<string, unknown>) => {\n const throughQuery = (table as unknown as TableWithQueryMethod)[\n through\n ](params);\n\n return query.whereExists<Query, Query>(\n throughQuery,\n whereExistsCallback as unknown as JoinCallback<Query, Query>,\n );\n },\n joinQuery(fromQuery, toQuery) {\n return toQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists<Query, Query>(\n throughRelation.joinQuery(fromQuery, throughRelation.query),\n (() => {\n const as = getQueryAs(toQuery);\n return sourceRelation.joinQuery(\n throughRelation.query,\n sourceRelation.query.as(as),\n );\n }) as unknown as JoinCallback<Query, Query>,\n );\n },\n primaryKey: sourceRelation.primaryKey,\n };\n }\n\n const { primaryKey, foreignKey } = relation.options;\n const state: State = { query, primaryKey, foreignKey };\n\n const fromQuerySelect = [{ selectAs: { [foreignKey]: primaryKey } }];\n\n return {\n returns: 'many',\n method: (params: Record<string, unknown>) => {\n const values = { [foreignKey]: params[primaryKey] };\n return query.where(values)._defaults(values);\n },\n virtualColumn: new HasManyVirtualColumn(relationName, state),\n joinQuery(fromQuery, toQuery) {\n return addQueryOn(toQuery, fromQuery, toQuery, foreignKey, primaryKey);\n },\n reverseJoin(fromQuery, toQuery) {\n return addQueryOn(fromQuery, toQuery, fromQuery, primaryKey, foreignKey);\n },\n primaryKey,\n modifyRelatedQuery(relationQuery) {\n return (query) => {\n const fromQuery = query.clone();\n fromQuery.query.select = fromQuerySelect;\n (relationQuery.query as InsertQueryData).values = { from: fromQuery };\n };\n },\n };\n};\n\nconst getWhereForNestedUpdate = (\n data: Record<string, unknown>[],\n params: MaybeArray<WhereArg<QueryBase>> | undefined,\n primaryKey: string,\n foreignKey: string,\n) => {\n const where: WhereArg<Query> = {\n [foreignKey]: { in: data.map((item) => item[primaryKey]) },\n };\n if (params) {\n if (Array.isArray(params)) {\n where.OR = params;\n } else {\n Object.assign(where, params);\n }\n }\n return where;\n};\n\nconst nestedInsert = ({ query, primaryKey, foreignKey }: State) => {\n return (async (_, data) => {\n const connect = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n { connect: WhereArg<QueryBase>[] },\n ] => Boolean(item[1].connect),\n );\n\n const t = query.clone();\n\n if (connect.length) {\n await Promise.all(\n connect.flatMap(([selfData, { connect }]) =>\n t\n .or<Query>(...connect)\n ._updateOrThrow({ [foreignKey]: selfData[primaryKey] }),\n ),\n );\n }\n\n const connectOrCreate = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => Boolean(item[1].connectOrCreate),\n );\n\n let connected: number[];\n if (connectOrCreate.length) {\n connected = await Promise.all(\n connectOrCreate.flatMap(([selfData, { connectOrCreate }]) =>\n connectOrCreate.map((item) =>\n (\n t.where(item.where) as WhereResult<Query & { hasSelect: false }>\n )._update({\n [foreignKey]: selfData[primaryKey],\n }),\n ),\n ),\n );\n } else {\n connected = [];\n }\n\n let connectedI = 0;\n const create = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n create?: Record<string, unknown>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => {\n if (item[1].connectOrCreate) {\n const length = item[1].connectOrCreate.length;\n connectedI += length;\n for (let i = length; i > 0; i--) {\n if (connected[connectedI - i] === 0) return true;\n }\n }\n return Boolean(item[1].create);\n },\n );\n\n connectedI = 0;\n if (create.length) {\n await t._createMany(\n create.flatMap(([selfData, { create = [], connectOrCreate = [] }]) => {\n return [\n ...create.map((item) => ({\n [foreignKey]: selfData[primaryKey],\n ...item,\n })),\n ...connectOrCreate\n .filter(() => connected[connectedI++] === 0)\n .map((item) => ({\n [foreignKey]: selfData[primaryKey],\n ...item.create,\n })),\n ];\n }) as CreateData<Query>[],\n );\n }\n }) as HasManyNestedInsert;\n};\n\nconst nestedUpdate = ({ query, primaryKey, foreignKey }: State) => {\n return (async (q, data, params) => {\n if ((params.set || params.create) && isQueryReturnsAll(q)) {\n const key = params.set ? 'set' : 'create';\n throw new Error(`\\`${key}\\` option is not allowed in a batch update`);\n }\n\n const t = query.clone();\n if (params.create) {\n await t._count()._createMany(\n params.create.map((create) => ({\n ...create,\n [foreignKey]: data[0][primaryKey],\n })),\n );\n delete t.query[toSqlCacheKey];\n }\n\n if (params.disconnect || params.set) {\n await t\n .where<Query>(\n getWhereForNestedUpdate(\n data,\n params.disconnect,\n primaryKey,\n foreignKey,\n ),\n )\n ._update({ [foreignKey]: null });\n\n if (params.set) {\n delete t.query[toSqlCacheKey];\n await t\n .where<Query>(\n Array.isArray(params.set)\n ? {\n OR: params.set,\n }\n : params.set,\n )\n ._update({ [foreignKey]: data[0][primaryKey] });\n }\n }\n\n if (params.delete || params.update) {\n delete t.query[toSqlCacheKey];\n const q = t._where(\n getWhereForNestedUpdate(\n data,\n params.delete || params.update?.where,\n primaryKey,\n foreignKey,\n ),\n );\n\n if (params.delete) {\n await q._delete();\n } else if (params.update) {\n await q._update<WhereResult<Query>>(params.update.data);\n }\n }\n }) as HasManyNestedUpdate;\n};\n","import { RelationData, RelationThunkBase } from './relations';\nimport { Table } from '../table';\nimport {\n ColumnType,\n CreateCtx,\n getQueryAs,\n HasAndBelongsToManyRelation,\n NotFoundError,\n pushQueryValue,\n Query,\n QueryBase,\n toSqlCacheKey,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\nimport { MaybeArray } from 'orchid-core';\nimport { hasRelationHandleCreate, hasRelationHandleUpdate } from './utils';\nimport { HasManyNestedInsert, HasManyNestedUpdate } from './hasMany';\n\nexport interface HasAndBelongsToMany extends RelationThunkBase {\n type: 'hasAndBelongsToMany';\n returns: 'many';\n options: HasAndBelongsToManyRelation['options'];\n}\n\nexport type HasAndBelongsToManyInfo<\n T extends Table,\n Relation extends HasAndBelongsToMany,\n> = {\n params: Record<\n Relation['options']['primaryKey'],\n T['columns']['shape'][Relation['options']['primaryKey']]['type']\n >;\n populate: never;\n chainedCreate: true;\n chainedDelete: true;\n};\n\ntype State = {\n relatedTableQuery: Query;\n joinTableQuery: Query;\n primaryKey: string;\n foreignKey: string;\n associationPrimaryKey: string;\n associationForeignKey: string;\n foreignKeyFull: string;\n associationPrimaryKeyFull: string;\n associationForeignKeyFull: string;\n};\n\nclass HasAndBelongsToManyVirtualColumn extends VirtualColumn {\n private readonly nestedInsert: HasManyNestedInsert;\n private readonly nestedUpdate: HasManyNestedUpdate;\n\n constructor(private key: string, private state: State) {\n super();\n this.nestedInsert = nestedInsert(state);\n this.nestedUpdate = nestedUpdate(state);\n }\n\n create(\n q: Query,\n ctx: CreateCtx,\n item: Record<string, unknown>,\n rowIndex: number,\n ) {\n hasRelationHandleCreate(\n q,\n ctx,\n item,\n rowIndex,\n this.key,\n this.state.primaryKey,\n this.nestedInsert,\n );\n }\n\n update(q: Query, ctx: UpdateCtx, set: Record<string, unknown>) {\n hasRelationHandleUpdate(\n q,\n ctx,\n set,\n this.key,\n this.state.primaryKey,\n this.nestedUpdate,\n );\n }\n}\n\nconst removeColumnName = (column: ColumnType) => {\n if (!column.data.name) return column;\n\n const cloned = Object.create(column);\n cloned.data = { ...column.data, name: undefined };\n return cloned;\n};\n\nexport const makeHasAndBelongsToManyMethod = (\n table: Query,\n qb: Query,\n relation: HasAndBelongsToMany,\n relationName: string,\n query: Query,\n): RelationData => {\n const {\n primaryKey: pk,\n foreignKey: fk,\n associationPrimaryKey: apk,\n associationForeignKey: afk,\n joinTable,\n } = relation.options;\n\n const foreignKeyFull = `${joinTable}.${fk}`;\n const associationForeignKeyFull = `${joinTable}.${afk}`;\n const associationPrimaryKeyFull = `${getQueryAs(query)}.${apk}`;\n\n const baseQuery = Object.create(qb.baseQuery);\n baseQuery.baseQuery = baseQuery;\n baseQuery.table = joinTable;\n baseQuery.shape = {\n [fk]: removeColumnName(table.shape[pk]),\n [afk]: removeColumnName(query.shape[apk]),\n };\n baseQuery.query = {\n ...baseQuery.query,\n shape: baseQuery.shape,\n };\n const subQuery = Object.create(baseQuery);\n\n const state: State = {\n relatedTableQuery: query,\n joinTableQuery: subQuery,\n primaryKey: pk,\n foreignKey: fk,\n associationPrimaryKey: apk,\n associationForeignKey: afk,\n foreignKeyFull,\n associationForeignKeyFull,\n associationPrimaryKeyFull,\n };\n\n return {\n returns: 'many',\n method(params: Record<string, unknown>) {\n return query.whereExists(subQuery, (q) =>\n q.on(associationForeignKeyFull, associationPrimaryKeyFull).where({\n [foreignKeyFull]: params[pk],\n }),\n );\n },\n virtualColumn: new HasAndBelongsToManyVirtualColumn(relationName, state),\n // joinQuery can be a property of RelationQuery and be used by whereExists and other stuff which needs it\n // and the chained query itself may be a query around this joinQuery\n joinQuery(fromQuery, toQuery) {\n const join = toQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${apk}`)\n ._on(foreignKeyFull, `${getQueryAs(fromQuery)}.${pk}`),\n );\n join.query.joinedShapes = {\n ...join.query.joinedShapes,\n [(fromQuery.query.as || fromQuery.table) as string]:\n fromQuery.query.shape,\n };\n return join;\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${apk}`)\n ._on(foreignKeyFull, `${getQueryAs(fromQuery)}.${pk}`),\n );\n },\n primaryKey: pk,\n modifyRelatedQuery(relationQuery) {\n const ref = {} as { query: Query };\n\n pushQueryValue(\n relationQuery,\n 'afterCreate',\n async (_: Query, result: Record<string, unknown>) => {\n const fromQuery = ref.query.clone();\n fromQuery.query.select = [{ selectAs: { [fk]: pk } }];\n\n const createdCount = await subQuery.count()._createFrom(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fromQuery as any,\n {\n [afk]: result[apk],\n } as never,\n );\n\n if (createdCount === 0) {\n throw new NotFoundError(fromQuery);\n }\n },\n );\n\n return (q) => {\n ref.query = q;\n };\n },\n };\n};\n\nconst queryJoinTable = (\n state: State,\n data: Record<string, unknown>[],\n conditions?: MaybeArray<WhereArg<Query>>,\n) => {\n const t = state.joinTableQuery.clone();\n const where: WhereArg<Query> = {\n [state.foreignKey]: { in: data.map((item) => item[state.primaryKey]) },\n };\n\n if (conditions) {\n where[state.associationForeignKey] = {\n in: state.relatedTableQuery\n .where<Query>(\n Array.isArray(conditions) ? { OR: conditions } : conditions,\n )\n ._select(state.associationPrimaryKey),\n };\n }\n\n return t._where(where);\n};\n\nconst queryRelatedTable = (\n query: Query,\n conditions: MaybeArray<WhereArg<Query>>,\n) => {\n return query.where<Query>(\n Array.isArray(conditions) ? { OR: conditions } : conditions,\n );\n};\n\nconst insertToJoinTable = (\n state: State,\n joinTableTransaction: Query,\n data: Record<string, unknown>[],\n ids: unknown[],\n) => {\n return joinTableTransaction._count()._createMany(\n data.flatMap((item) =>\n ids.map((id) => ({\n [state.foreignKey]: item[state.primaryKey],\n [state.associationForeignKey]: id,\n })),\n ),\n );\n};\n\nconst nestedInsert = ({\n relatedTableQuery,\n joinTableQuery,\n primaryKey,\n foreignKey,\n associationPrimaryKey,\n associationForeignKey,\n}: State) => {\n return (async (_, data) => {\n const connect = data.filter(\n (\n item,\n ): item is [\n selfData: Record<string, unknown>,\n relationData: {\n connect: WhereArg<QueryBase>[];\n },\n ] => Boolean(item[1].connect),\n );\n\n const t = relatedTableQuery.clone();\n\n let connected: Record<string, unknown>[];\n if (connect.length) {\n connected = (await Promise.all(\n connect.flatMap(([, { connect }]) =>\n connect.map((item) =>\n t.select(associationPrimaryKey)._findBy(item)._take(),\n ),\n ),\n )) as Record<string, unknown[]>[];\n } else {\n connected = [];\n }\n\n const connectOrCreate = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n connectOrCreate: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => Boolean(item[1].connectOrCreate),\n );\n\n let connectOrCreated: (Record<string, unknown> | undefined)[];\n if (connectOrCreate.length) {\n connectOrCreated = await Promise.all(\n connectOrCreate.flatMap(([, { connectOrCreate }]) =>\n connectOrCreate.map((item) =>\n t.select(associationPrimaryKey)._findBy(item.where)._takeOptional(),\n ),\n ),\n );\n } else {\n connectOrCreated = [];\n }\n\n let connectOrCreateI = 0;\n const create = data.filter(\n (\n item,\n ): item is [\n Record<string, unknown>,\n {\n create?: Record<string, unknown>[];\n connectOrCreate?: {\n where: WhereArg<QueryBase>;\n create: Record<string, unknown>;\n }[];\n },\n ] => {\n if (item[1].connectOrCreate) {\n const length = item[1].connectOrCreate.length;\n connectOrCreateI += length;\n for (let i = length; i > 0; i--) {\n if (!connectOrCreated[connectOrCreateI - i]) return true;\n }\n }\n return Boolean(item[1].create);\n },\n );\n\n connectOrCreateI = 0;\n let created: Record<string, unknown>[];\n if (create.length) {\n created = (await t\n .select(associationPrimaryKey)\n ._createMany(\n create.flatMap(([, { create = [], connectOrCreate = [] }]) => [\n ...create,\n ...connectOrCreate\n .filter(() => !connectOrCreated[connectOrCreateI++])\n .map((item) => item.create),\n ]),\n )) as Record<string, unknown>[];\n } else {\n created = [];\n }\n\n const allKeys = data as unknown as [\n selfData: Record<string, unknown>,\n relationKeys: Record<string, unknown>[],\n ][];\n\n let createI = 0;\n let connectI = 0;\n connectOrCreateI = 0;\n data.forEach(([, data], index) => {\n if (data.create || data.connectOrCreate) {\n if (data.create) {\n const len = data.create.length;\n allKeys[index][1] = created.slice(createI, createI + len);\n createI += len;\n }\n if (data.connectOrCreate) {\n const arr: Record<string, unknown>[] = [];\n allKeys[index][1] = arr;\n\n const len = data.connectOrCreate.length;\n for (let i = 0; i < len; i++) {\n const item = connectOrCreated[connectOrCreateI++];\n if (item) {\n arr.push(item);\n } else {\n arr.push(created[createI++]);\n }\n }\n }\n }\n\n if (data.connect) {\n const len = data.connect.length;\n allKeys[index][1] = connected.slice(connectI, connectI + len);\n connectI += len;\n }\n });\n\n await joinTableQuery.count()._createMany(\n allKeys.flatMap(([selfData, relationKeys]) => {\n const selfKey = selfData[primaryKey];\n return relationKeys.map((relationData) => ({\n [foreignKey]: selfKey,\n [associationForeignKey]: relationData[associationPrimaryKey],\n }));\n }),\n );\n }) as HasManyNestedInsert;\n};\n\nconst nestedUpdate = (state: State) => {\n return (async (_, data, params) => {\n if (params.create) {\n const ids = await state.relatedTableQuery\n .pluck(state.associationPrimaryKey)\n ._createMany(params.create);\n\n await state.joinTableQuery.createMany(\n data.flatMap((item) =>\n ids.map((id) => ({\n [state.foreignKey]: item[state.primaryKey],\n [state.associationForeignKey]: id,\n })),\n ),\n );\n }\n\n if (params.update) {\n await (\n state.relatedTableQuery\n .whereExists(state.joinTableQuery, (q) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (q as any)\n ._on(\n state.associationForeignKeyFull,\n state.associationPrimaryKeyFull,\n )\n ._where({\n IN: {\n columns: [state.foreignKeyFull],\n values: [data.map((item) => item[state.primaryKey])],\n },\n }),\n )\n ._where(\n Array.isArray(params.update.where)\n ? { OR: params.update.where }\n : params.update.where,\n ) as WhereResult<Query>\n )._update<WhereResult<Query>>(params.update.data);\n }\n\n if (params.disconnect) {\n await queryJoinTable(state, data, params.disconnect)._delete();\n }\n\n if (params.delete) {\n const j = queryJoinTable(state, data, params.delete);\n\n const ids = await j._pluck(state.associationForeignKey)._delete();\n\n await queryRelatedTable(state.relatedTableQuery, {\n [state.associationPrimaryKey]: { in: ids },\n })._delete();\n }\n\n if (params.set) {\n const j = queryJoinTable(state, data);\n await j._delete();\n delete j.query[toSqlCacheKey];\n\n const ids = await queryRelatedTable(\n state.relatedTableQuery,\n params.set,\n )._pluck(state.associationPrimaryKey);\n\n await insertToJoinTable(state, j, data, ids);\n }\n }) as HasManyNestedUpdate;\n};\n","import { BelongsTo, BelongsToInfo, makeBelongsToMethod } from './belongsTo';\nimport { HasOne, HasOneInfo, makeHasOneMethod } from './hasOne';\nimport { DbTable, Table, TableClass, TableClasses } from '../table';\nimport { OrchidORM } from '../orm';\nimport {\n Query,\n RelationQuery,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsOneOptional,\n BaseRelation,\n relationQueryKey,\n VirtualColumn,\n SetQueryTableAlias,\n} from 'pqb';\nimport { EmptyObject, StringKey } from 'orchid-core';\nimport { HasMany, HasManyInfo, makeHasManyMethod } from './hasMany';\nimport {\n HasAndBelongsToMany,\n HasAndBelongsToManyInfo,\n makeHasAndBelongsToManyMethod,\n} from './hasAndBelongsToMany';\nimport { getSourceRelation, getThroughRelation } from './utils';\n\nexport interface RelationThunkBase {\n type: string;\n returns: 'one' | 'many';\n fn(): TableClass;\n options: BaseRelation['options'];\n}\n\nexport type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;\n\nexport type RelationThunks = Record<string, RelationThunk>;\n\nexport type RelationData = {\n returns: 'one' | 'many';\n method(params: Record<string, unknown>): Query;\n virtualColumn?: VirtualColumn;\n joinQuery(fromQuery: Query, toQuery: Query): Query;\n reverseJoin(fromQuery: Query, toQuery: Query): Query;\n primaryKey: string;\n modifyRelatedQuery?(relatedQuery: Query): (query: Query) => void;\n};\n\nexport type Relation<\n T extends Table,\n Relations extends RelationThunks,\n K extends StringKey<keyof Relations>,\n M extends Query = SetQueryTableAlias<\n DbTable<ReturnType<Relations[K]['fn']>>,\n K\n >,\n Info extends RelationInfo = RelationInfo<T, Relations, Relations[K]>,\n> = {\n type: Relations[K]['type'];\n returns: Relations[K]['returns'];\n key: K;\n table: M;\n query: M;\n joinQuery(fromQuery: Query, toQuery: Query): Query;\n defaults: Info['populate'];\n nestedCreateQuery: [Info['populate']] extends [never]\n ? M\n : M & {\n meta: { defaults: Record<Info['populate'], true> };\n };\n primaryKey: string;\n options: Relations[K]['options'];\n};\n\nexport type RelationScopeOrTable<Relation extends RelationThunkBase> =\n Relation['options']['scope'] extends (q: Query) => Query\n ? ReturnType<Relation['options']['scope']>\n : DbTable<ReturnType<Relation['fn']>>;\n\nexport type RelationInfo<\n T extends Table = Table,\n Relations extends RelationThunks = RelationThunks,\n Relation extends RelationThunk = RelationThunk,\n> = Relation extends BelongsTo\n ? BelongsToInfo<T, Relation>\n : Relation extends HasOne\n ? HasOneInfo<T, Relations, Relation>\n : Relation extends HasMany\n ? HasManyInfo<T, Relations, Relation>\n : Relation extends HasAndBelongsToMany\n ? HasAndBelongsToManyInfo<T, Relation>\n : never;\n\nexport type MapRelation<\n T extends Table,\n Relations extends RelationThunks,\n RelationName extends keyof Relations,\n Relation extends RelationThunk = Relations[RelationName],\n RelatedQuery extends Query = RelationScopeOrTable<Relation>,\n Info extends {\n params: Record<string, unknown>;\n populate: string;\n chainedCreate: boolean;\n chainedDelete: boolean;\n } = RelationInfo<T, Relations, Relation>,\n> = RelationQuery<\n RelationName,\n Info['params'],\n Info['populate'],\n Relation['returns'] extends 'one'\n ? Relation['options']['required'] extends true\n ? SetQueryReturnsOne<RelatedQuery>\n : SetQueryReturnsOneOptional<RelatedQuery>\n : SetQueryReturnsAll<RelatedQuery>,\n Relation['options']['required'] extends boolean\n ? Relation['options']['required']\n : false,\n Info['chainedCreate'],\n Info['chainedDelete']\n>;\n\nexport type MapRelations<T extends Table> = 'relations' extends keyof T\n ? T['relations'] extends RelationThunks\n ? {\n [K in keyof T['relations']]: MapRelation<T, T['relations'], K>;\n }\n : EmptyObject\n : EmptyObject;\n\ntype ApplyRelationData = {\n relationName: string;\n relation: RelationThunk;\n dbTable: DbTable<TableClass>;\n otherDbTable: DbTable<TableClass>;\n};\n\ntype DelayedRelations = Map<Query, Record<string, ApplyRelationData[]>>;\n\nexport const applyRelations = (\n qb: Query,\n tables: Record<string, Table>,\n result: OrchidORM<TableClasses>,\n) => {\n const tableEntries = Object.entries(tables);\n\n const delayedRelations: DelayedRelations = new Map();\n\n for (const name in tables) {\n const table = tables[name] as Table & {\n relations?: RelationThunks;\n };\n if (!('relations' in table) || typeof table.relations !== 'object')\n continue;\n\n const dbTable = result[name];\n for (const relationName in table.relations) {\n const relation = table.relations[relationName];\n const otherTableClass = relation.fn();\n const otherTable = tableEntries.find(\n (pair) => pair[1] instanceof otherTableClass,\n );\n if (!otherTable) {\n throw new Error(\n `Cannot find table class for class ${otherTableClass.name}`,\n );\n }\n const otherTableName = otherTable[0];\n const otherDbTable = result[otherTableName];\n if (!otherDbTable)\n throw new Error(`Cannot find table class by name ${otherTableName}`);\n\n const data: ApplyRelationData = {\n relationName,\n relation,\n dbTable,\n otherDbTable,\n };\n\n const options = relation.options as { through?: string; source?: string };\n if (\n typeof options.through === 'string' &&\n typeof options.source === 'string'\n ) {\n const throughRelation = getThroughRelation(dbTable, options.through);\n if (!throughRelation) {\n delayRelation(delayedRelations, dbTable, options.through, data);\n continue;\n }\n\n const sourceRelation = getSourceRelation(\n throughRelation,\n options.source,\n );\n if (!sourceRelation) {\n delayRelation(\n delayedRelations,\n throughRelation.table,\n options.source,\n data,\n );\n continue;\n }\n }\n\n applyRelation(qb, data, delayedRelations);\n }\n }\n\n if (delayedRelations.size) {\n const { value } = delayedRelations.values().next() as {\n value: Record<string, ApplyRelationData[]>;\n };\n for (const key in value) {\n for (const item of value[key]) {\n const { relation } = item;\n\n if (item.dbTable.relations[item.relationName as never]) continue;\n\n const as = item.dbTable.definedAs;\n let message = `Cannot define a \\`${item.relationName}\\` relation on \\`${as}\\``;\n const table = result[as];\n\n const { through, source } = relation.options as {\n through: string;\n source: string;\n };\n const throughRel = table.relations[\n through as never\n ] as unknown as BaseRelation;\n\n if (through && !throughRel) {\n message += `: cannot find \\`${through}\\` relation required by the \\`through\\` option`;\n } else if (\n source &&\n throughRel &&\n !throughRel.table.relations[source as never]\n ) {\n message += `: cannot find \\`${source}\\` relation in \\`${\n (throughRel.table as DbTable<TableClass>).definedAs\n }\\` required by the \\`source\\` option`;\n }\n\n throw new Error(message);\n }\n }\n }\n};\n\nconst delayRelation = (\n delayedRelations: DelayedRelations,\n table: Query,\n relationName: string,\n data: ApplyRelationData,\n) => {\n let tableRelations = delayedRelations.get(table);\n if (!tableRelations) {\n tableRelations = {};\n delayedRelations.set(table, tableRelations);\n }\n if (tableRelations[relationName]) {\n tableRelations[relationName].push(data);\n } else {\n tableRelations[relationName] = [data];\n }\n};\n\nconst applyRelation = (\n qb: Query,\n { relationName, relation, dbTable, otherDbTable }: ApplyRelationData,\n delayedRelations: DelayedRelations,\n) => {\n const baseQuery = Object.create(otherDbTable);\n baseQuery.baseQuery = baseQuery;\n\n const query = (\n relation.options.scope ? relation.options.scope(baseQuery) : baseQuery\n ).as(relationName);\n\n const definedAs = (query as unknown as { definedAs?: string }).definedAs;\n if (!definedAs) {\n throw new Error(\n `Table class for table ${query.table} is not attached to db instance`,\n );\n }\n\n const { type } = relation;\n let data;\n if (type === 'belongsTo') {\n data = makeBelongsToMethod(relation, relationName, query);\n } else if (type === 'hasOne') {\n data = makeHasOneMethod(dbTable, relation, relationName, query);\n } else if (type === 'hasMany') {\n data = makeHasManyMethod(dbTable, relation, relationName, query);\n } else if (type === 'hasAndBelongsToMany') {\n data = makeHasAndBelongsToManyMethod(\n dbTable,\n qb,\n relation,\n relationName,\n query,\n );\n } else {\n throw new Error(`Unknown relation type ${type}`);\n }\n\n if (data.returns === 'one') {\n query._take();\n query.query.returnsOne = true;\n }\n\n if (data.virtualColumn) {\n dbTable.shape[relationName] = dbTable.query.shape[relationName] =\n data.virtualColumn;\n }\n\n makeRelationQuery(dbTable, relationName, data, query);\n\n baseQuery.joinQuery = data.joinQuery;\n\n const { join: originalJoin } = baseQuery;\n baseQuery.join = function (...args: unknown[]) {\n if (args.length) {\n return originalJoin.apply(this, args);\n } else {\n const q = this.clone();\n q.query.innerJoinLateral = true;\n return q;\n }\n };\n\n (dbTable.relations as Record<string, unknown>)[relationName] = {\n type,\n key: relationName,\n table: otherDbTable,\n query,\n joinQuery: data.joinQuery,\n primaryKey: data.primaryKey,\n options: relation.options,\n };\n\n dbTable.relationsQueries[relationName] = query;\n\n const tableRelations = delayedRelations.get(dbTable);\n if (!tableRelations) return;\n\n tableRelations[relationName]?.forEach((data) => {\n applyRelation(qb, data, delayedRelations);\n });\n};\n\nconst makeRelationQuery = (\n table: Query,\n relationName: string,\n data: RelationData,\n q: Query,\n) => {\n Object.defineProperty(table, relationName, {\n get() {\n const toTable = q.clone();\n\n const query = this.isSubQuery\n ? toTable\n : toTable._whereExists(\n this.baseQuery,\n (q) => data.reverseJoin(this, toTable) as unknown as typeof q,\n );\n\n query.query[relationQueryKey] = {\n relationName,\n sourceQuery: this,\n relationQuery: toTable,\n joinQuery: data.joinQuery,\n };\n\n const setQuery = data.modifyRelatedQuery?.(query);\n setQuery?.(this);\n\n return new Proxy(data.method, {\n get(_, prop) {\n return (query as unknown as Record<string, unknown>)[prop as string];\n },\n }) as unknown as RelationQuery;\n },\n });\n};\n","import { Db, IsolationLevel, TransactionOptions } from 'pqb';\n\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n fn: () => Promise<Result>,\n): Promise<Result>;\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n options: IsolationLevel | TransactionOptions,\n fn: () => Promise<Result>,\n): Promise<Result>;\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n fnOrOptions: IsolationLevel | TransactionOptions | (() => Promise<Result>),\n fn?: () => Promise<Result>,\n): Promise<Result> {\n return this.$queryBuilder.transaction(\n fnOrOptions as IsolationLevel,\n fn as () => Promise<Result>,\n );\n}\n","import {\n Adapter,\n Db,\n AdapterOptions,\n QueryLogOptions,\n columnTypes,\n NoPrimaryKeyOption,\n anyShape,\n DbTableOptions,\n FromArgs,\n Query,\n FromResult,\n} from 'pqb';\nimport { DbTable, Table, TableClasses } from './table';\nimport { applyRelations } from './relations/relations';\nimport { transaction } from './transaction';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { AdapterBase } from 'orchid-core';\n\nexport type OrchidORM<T extends TableClasses = TableClasses> = {\n [K in keyof T]: DbTable<T[K]>;\n} & {\n $transaction: typeof transaction;\n $adapter: Adapter;\n $queryBuilder: Db;\n $from<Args extends FromArgs<Query>>(...args: Args): FromResult<Query, Args>;\n $close(): Promise<void>;\n};\n\nexport const orchidORM = <T extends TableClasses>(\n {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey = 'error',\n ...options\n }: ({ db: Query } | { adapter: Adapter } | Omit<AdapterOptions, 'log'>) &\n QueryLogOptions & {\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n },\n tables: T,\n): OrchidORM<T> => {\n const commonOptions = {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey,\n };\n\n let adapter: Adapter;\n let transactionStorage;\n let qb: Query;\n if ('db' in options) {\n adapter = options.db.query.adapter;\n transactionStorage = options.db.internal.transactionStorage;\n qb = options.db.queryBuilder;\n } else {\n adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n\n transactionStorage = new AsyncLocalStorage<AdapterBase>();\n\n qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n anyShape,\n columnTypes,\n transactionStorage,\n commonOptions,\n );\n qb.queryBuilder = qb as unknown as Db;\n }\n\n const result = {\n $transaction: transaction,\n $adapter: adapter,\n $queryBuilder: qb,\n $from: (...args: FromArgs<Query>) => qb.from(...args),\n $close: () => adapter.close(),\n } as unknown as OrchidORM;\n\n const tableInstances: Record<string, Table> = {};\n\n for (const key in tables) {\n if (key[0] === '$') {\n throw new Error(`Table class name must not start with $`);\n }\n\n const table = new tables[key]();\n tableInstances[key] = table;\n\n const options: DbTableOptions = {\n ...commonOptions,\n schema: table.schema,\n };\n\n if (table.noPrimaryKey) options.noPrimaryKey = 'ignore';\n\n const dbTable = new Db(\n adapter,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n qb as any,\n table.table,\n table.columns.shape,\n table.columnTypes,\n transactionStorage,\n options,\n );\n\n (dbTable as unknown as { definedAs: string }).definedAs = key;\n (dbTable as unknown as { db: unknown }).db = result;\n (dbTable as unknown as { filePath: string }).filePath = table.filePath;\n (dbTable as unknown as { name: string }).name = table.constructor.name;\n\n (result as Record<string, unknown>)[key] = dbTable;\n }\n\n applyRelations(qb, tableInstances, result);\n\n return result as unknown as OrchidORM<T>;\n};\n","import {\n getClonedQueryData,\n MergeQuery,\n Query,\n QueryReturnType,\n SetQueryReturns,\n WhereResult,\n} from 'pqb';\nimport { EmptyObject } from 'orchid-core';\n\nexport type QueryMethods<T extends Query> = Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (q: T, ...args: any[]) => any\n>;\n\ntype QueryOne<T extends Query> = SetQueryReturns<\n T,\n Exclude<QueryReturnType, 'all'>\n>;\n\nexport type MethodsBase<T extends Query> = {\n queryMethods?: QueryMethods<T>;\n queryOneMethods?: QueryMethods<QueryOne<T>>;\n queryWithWhereMethods?: QueryMethods<WhereResult<T>>;\n queryOneWithWhereMethods?: QueryMethods<QueryOne<WhereResult<T>>>;\n methods?: Record<string, unknown>;\n};\n\nexport type MapQueryMethods<\n T extends Query,\n BaseQuery extends Query,\n Methods,\n> = Methods extends QueryMethods<T>\n ? {\n [K in keyof Methods]: Methods[K] extends (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n q: any,\n ...args: infer Args\n ) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infer Result\n ? <T extends BaseQuery>(\n this: T,\n ...args: Args\n ) => Result extends Query ? MergeQuery<T, Result> : Result\n : never;\n }\n : EmptyObject;\n\nexport type MapMethods<\n T extends Query,\n Methods extends MethodsBase<T>,\n> = MapQueryMethods<T, Query, Methods['queryMethods']> &\n MapQueryMethods<QueryOne<T>, QueryOne<Query>, Methods['queryOneMethods']> &\n MapQueryMethods<\n WhereResult<T>,\n WhereResult<Query>,\n Methods['queryWithWhereMethods']\n > &\n MapQueryMethods<\n QueryOne<WhereResult<T>>,\n QueryOne<WhereResult<Query>>,\n Methods['queryOneWithWhereMethods']\n > &\n (Methods['methods'] extends Record<string, unknown>\n ? Methods['methods']\n : EmptyObject);\n\nexport type Repo<\n T extends Query,\n Methods extends MethodsBase<T>,\n Mapped = MapMethods<T, Methods>,\n> = (<Q extends { table: T['table']; shape: T['shape'] }>(q: Q) => Q & Mapped) &\n T &\n Mapped;\n\nexport const createRepo = <T extends Query, Methods extends MethodsBase<T>>(\n table: T,\n methods: Methods,\n): Repo<T, Methods> => {\n const queryMethods = {\n ...methods.queryMethods,\n ...methods.queryOneMethods,\n ...methods.queryWithWhereMethods,\n ...methods.queryOneWithWhereMethods,\n };\n\n const plainMethods = methods.methods;\n\n const repo = (q: Query) => {\n const proto = Object.create(q.baseQuery);\n proto.baseQuery = proto;\n const result = Object.create(proto);\n result.query = getClonedQueryData(q.query);\n\n if (plainMethods) {\n Object.assign(proto.baseQuery, plainMethods);\n }\n\n for (const key in queryMethods) {\n const method = queryMethods[key] as (...args: unknown[]) => unknown;\n (proto.baseQuery as unknown as Record<string, unknown>)[key] = function (\n ...args: unknown[]\n ) {\n return method(this, ...args);\n };\n }\n\n return result;\n };\n\n const q = repo(table);\n\n return new Proxy(repo, {\n get(_, key) {\n return q[key];\n },\n }) as unknown as Repo<T, Methods>;\n};\n"],"names":["columnTypes","defaultColumnTypes","filePath","nestedInsert","nestedUpdate","q","values","rowIndex","columnIndex","_a","id","query","data","__spreadValues","__spreadProps","connect","connectOrCreate","create","options"],"mappings":"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"}