orchid-orm 1.3.16 → 1.4.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +39 -32
- package/dist/index.esm.js +102 -100
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +102 -100
- package/dist/index.js.map +1 -1
- package/jest-setup.ts +4 -0
- package/package.json +8 -4
- package/src/appCodeUpdater/appCodeUpdater.ts +19 -0
- package/src/appCodeUpdater/fileChanges.ts +41 -0
- package/src/appCodeUpdater/testUtils.ts +31 -0
- package/src/appCodeUpdater/tsUtils.ts +137 -0
- package/src/appCodeUpdater/updateMainFile.test.ts +230 -0
- package/src/appCodeUpdater/updateMainFile.ts +163 -0
- package/src/appCodeUpdater/updateTableFile.ts +19 -0
- package/src/index.ts +5 -1
- package/src/orm.test.ts +13 -13
- package/src/orm.ts +21 -21
- package/src/relations/belongsTo.test.ts +1 -1
- package/src/relations/belongsTo.ts +2 -2
- package/src/relations/hasAndBelongsToMany.test.ts +1 -1
- package/src/relations/hasAndBelongsToMany.ts +9 -9
- package/src/relations/hasMany.test.ts +16 -10
- package/src/relations/hasMany.ts +6 -6
- package/src/relations/hasOne.test.ts +10 -10
- package/src/relations/hasOne.ts +6 -6
- package/src/relations/relations.ts +73 -71
- package/src/relations/utils.ts +3 -3
- package/src/repo.test.ts +29 -29
- package/src/repo.ts +6 -6
- package/src/{model.test.ts → table.test.ts} +15 -15
- package/src/{model.ts → table.ts} +17 -17
- package/src/test-utils/test-db.ts +15 -15
- package/src/test-utils/{test-models.ts → test-tables.ts} +42 -42
- package/src/transaction.test.ts +1 -1
- package/src/transaction.ts +4 -4
- package/src/utils.ts +9 -0
- package/tsconfig.json +1 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/model.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 ColumnShapeOutput,\n ColumnsShape,\n ColumnTypesBase,\n Db,\n getColumnTypes,\n Query,\n} from 'pqb';\nimport { MapRelations, Relation, RelationThunks } from './relations/relations';\nimport { OrchidORM } from './orm';\n\nexport type ModelClass<T extends Model = Model> = new () => T;\n\nexport type ModelClasses = Record<string, ModelClass>;\n\nexport type ModelToDb<T extends Model> = Db<\n T['table'],\n T['columns']['shape'],\n 'relations' extends keyof T\n ? T['relations'] extends RelationThunks\n ? {\n [K in keyof T['relations']]: Relation<T, T['relations'], K>;\n }\n : Query['relations']\n : Query['relations'],\n T['columnTypes']\n> & { definedAs: string; db: OrchidORM<ModelClasses> };\n\nexport type DbModel<T extends ModelClass> = ModelToDb<InstanceType<T>> &\n Omit<MapRelations<InstanceType<T>>, keyof Query>;\n\ntype ModelConfig = {\n shape: ColumnsShape;\n type: unknown;\n};\n\ntype ScopeFn<Related extends ModelClass, Scope extends Query> = (\n q: DbModel<Related>,\n) => Scope;\n\nexport type Model = {\n table: string;\n columns: ModelConfig;\n schema?: string;\n columnTypes: ColumnTypesBase;\n noPrimaryKey?: boolean;\n};\n\nexport const createModel = <CT extends ColumnTypesBase>(options: {\n columnTypes: CT;\n}) => {\n return class Model {\n table!: string;\n columns!: ModelConfig;\n schema?: string;\n columnTypes: CT;\n noPrimaryKey?: boolean;\n\n constructor() {\n this.columnTypes = options.columnTypes;\n }\n\n setColumns = <T extends ColumnsShape>(\n fn: (t: CT) => T,\n ): { shape: T; type: ColumnShapeOutput<T> } => {\n const shape = getColumnTypes(options.columnTypes, fn);\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 ModelClass,\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 ModelClass,\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 ModelClass,\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 ModelClass,\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","import { Model } from '../model';\nimport {\n addQueryOn,\n BelongsToRelation,\n CreateCtx,\n InsertQueryData,\n isQueryReturnsAll,\n pushQueryValue,\n Query,\n QueryBase,\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 Model,\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 updateLater?: Record<string, unknown>;\n updateLaterPromises?: Promise<void>[];\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 (q, 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.transacting(q);\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\n .transacting(q)\n ._findBy(params.set)\n ._get(primaryKey);\n }\n } else if (params.create) {\n update[foreignKey] = await query\n .transacting(q)\n ._get(primaryKey)\n ._create(params.create);\n } else if (params.delete) {\n const selectQuery = q.transacting(q);\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 if (!state.updateLater) {\n state.updateLater = {};\n state.updateLaterPromises = [];\n }\n\n const { handleResult } = q.query;\n q.query.handleResult = async (q, queryResult) => {\n const data = (await handleResult(q, queryResult)) as Record<\n string,\n unknown\n >[];\n\n const id = data[0][foreignKey];\n if (id !== null) {\n await query\n .transacting(q)\n ._findBy({ [primaryKey]: id })\n ._update<WhereResult<Query>>(upsert.update);\n } else {\n (state.updateLaterPromises as Promise<void>[]).push(\n query\n .transacting(q)\n ._select(primaryKey)\n ._create(upsert.create)\n .then((result) => {\n (state.updateLater as Record<string, unknown>)[foreignKey] = (\n result as Record<string, unknown>\n )[primaryKey];\n }) as unknown as Promise<void>,\n );\n }\n\n return data;\n };\n } else if (params.delete || params.update) {\n q._afterQuery(async (q, 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.transacting(q)._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 MaybeArray,\n pushQueryValue,\n Query,\n QueryBase,\n Relation,\n UpdateCtx,\n UpdateData,\n WhereArg,\n} from 'pqb';\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>;\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 = (model: Query, through: string) => {\n return (model.relations as Record<string, Relation>)[through];\n};\n\nexport const getSourceRelation = (\n throughRelation: Relation,\n source: string,\n) => {\n return (throughRelation.model.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 { Model } from '../model';\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 Model,\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 model: 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 ModelWithQueryMethod = Record<\n string,\n (params: Record<string, unknown>) => Query\n >;\n\n const throughRelation = getThroughRelation(model, 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 = (model as unknown as ModelWithQueryMethod)[\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).fromQuery = fromQuery;\n };\n },\n };\n};\n\nconst nestedInsert = ({ query, primaryKey, foreignKey }: State) => {\n return (async (q, 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.transacting(q);\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 WhereResult<Query> & {\n hasSelect: false;\n }\n )._updateOrThrow(data)\n : (\n t.where(item.connectOrCreate.where) as WhereResult<Query> & {\n hasSelect: false;\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.transacting(q);\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 & { hasSelect: true }>>(update);\n\n if (updatedIds.length < ids.length) {\n await t.createMany(\n ids\n .filter((id) => !updatedIds.includes(id))\n .map((id) => ({\n ...create,\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 { Model } from '../model';\nimport {\n addQueryOn,\n getQueryAs,\n HasManyRelation,\n CreateData,\n JoinCallback,\n MaybeArray,\n Query,\n QueryBase,\n toSqlCacheKey,\n WhereArg,\n WhereResult,\n InsertQueryData,\n isQueryReturnsAll,\n VirtualColumn,\n CreateCtx,\n UpdateCtx,\n} from 'pqb';\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 Model,\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 model: 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 ModelWithQueryMethod = Record<\n string,\n (params: Record<string, unknown>) => Query\n >;\n\n const throughRelation = getThroughRelation(model, 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 = (model as unknown as ModelWithQueryMethod)[\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).fromQuery = 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 (q, 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.transacting(q);\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.transacting(q);\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 { Model } from '../model';\nimport {\n CreateCtx,\n getQueryAs,\n HasAndBelongsToManyRelation,\n MaybeArray,\n NotFoundError,\n pushQueryValue,\n Query,\n QueryBase,\n toSqlCacheKey,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\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 Model,\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\nexport const makeHasAndBelongsToManyMethod = (\n model: 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 __model = Object.create(qb.__model);\n __model.__model = __model;\n __model.table = joinTable;\n __model.shape = {\n [fk]: model.shape[pk],\n [afk]: query.shape[apk],\n };\n const subQuery = Object.create(__model);\n subQuery.query = { ...subQuery.query };\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 return toQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${pk}`)\n ._on(foreignKeyFull, `${getQueryAs(fromQuery)}.${pk}`),\n );\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${pk}`)\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 (q: Query, result: Record<string, unknown>) => {\n const fromQuery = ref.query.clone();\n fromQuery.query.select = [{ selectAs: { [fk]: pk } }];\n\n const createdCount = await subQuery\n .transacting(q)\n .count()\n ._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();\n }\n },\n );\n\n return (q) => {\n ref.query = q;\n };\n },\n };\n};\n\nconst queryJoinTable = (\n state: State,\n q: Query,\n data: Record<string, unknown>[],\n conditions?: MaybeArray<WhereArg<Query>>,\n) => {\n const t = state.joinTableQuery.transacting(q);\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 q: Query,\n conditions: MaybeArray<WhereArg<Query>>,\n) => {\n return query\n .transacting(q)\n ._where<Query>(Array.isArray(conditions) ? { OR: conditions } : conditions);\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 (q, 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.transacting(q);\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\n .transacting(q)\n ._count()\n ._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 (q, data, params) => {\n if (params.create) {\n const ids = await state.relatedTableQuery\n .transacting(q)\n ._pluck(state.associationPrimaryKey)\n ._createMany(params.create);\n\n await state.joinTableQuery.transacting(q)._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 .transacting(q)\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, q, data, params.disconnect)._delete();\n }\n\n if (params.delete) {\n const j = queryJoinTable(state, q, data, params.delete);\n\n const ids = await j._pluck(state.associationForeignKey)._delete();\n\n await queryRelatedTable(state.relatedTableQuery, q, {\n [state.associationPrimaryKey]: { in: ids },\n })._delete();\n }\n\n if (params.set) {\n const j = queryJoinTable(state, q, data);\n await j._delete();\n delete j.query[toSqlCacheKey];\n\n const ids = await queryRelatedTable(\n state.relatedTableQuery,\n q,\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 { DbModel, Model, ModelClass, ModelClasses } from '../model';\nimport { OrchidORM } from '../orm';\nimport {\n Query,\n QueryWithTable,\n RelationQuery,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsOneOptional,\n BaseRelation,\n defaultsKey,\n relationQueryKey,\n EmptyObject,\n VirtualColumn,\n} from 'pqb';\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(): ModelClass;\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 Model,\n Relations extends RelationThunks,\n K extends keyof Relations,\n M extends Query = DbModel<ReturnType<Relations[K]['fn']>>,\n Info extends RelationInfo = RelationInfo<T, Relations, Relations[K]>,\n> = {\n type: Relations[K]['type'];\n returns: Relations[K]['returns'];\n key: K;\n model: 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 [defaultsKey]: Record<Info['populate'], true>;\n };\n primaryKey: string;\n options: Relations[K]['options'];\n};\n\nexport type RelationScopeOrModel<Relation extends RelationThunkBase> =\n Relation['options']['scope'] extends (q: Query) => Query\n ? ReturnType<Relation['options']['scope']>\n : DbModel<ReturnType<Relation['fn']>>;\n\nexport type RelationInfo<\n T extends Model = Model,\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 Model,\n Relations extends RelationThunks,\n RelationName extends keyof Relations,\n Relation extends RelationThunk = Relations[RelationName],\n RelatedQuery extends Query = RelationScopeOrModel<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 Model> = '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 dbModel: DbModel<ModelClass>;\n otherDbModel: DbModel<ModelClass>;\n};\n\ntype DelayedRelations = Map<Query, Record<string, ApplyRelationData[]>>;\n\nexport const applyRelations = (\n qb: Query,\n models: Record<string, Model>,\n result: OrchidORM<ModelClasses>,\n) => {\n const modelsEntries = Object.entries(models);\n\n const delayedRelations: DelayedRelations = new Map();\n\n for (const modelName in models) {\n const model = models[modelName] as Model & {\n relations?: RelationThunks;\n };\n if (!('relations' in model) || typeof model.relations !== 'object')\n continue;\n\n const dbModel = result[modelName];\n for (const relationName in model.relations) {\n const relation = model.relations[relationName];\n const otherModelClass = relation.fn();\n const otherModel = modelsEntries.find(\n (pair) => pair[1] instanceof otherModelClass,\n );\n if (!otherModel) {\n throw new Error(`Cannot find model for class ${otherModelClass.name}`);\n }\n const otherModelName = otherModel[0];\n const otherDbModel = result[otherModelName];\n if (!otherDbModel)\n throw new Error(`Cannot find model by name ${otherModelName}`);\n\n const data: ApplyRelationData = {\n relationName,\n relation,\n dbModel,\n otherDbModel,\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(dbModel, options.through);\n if (!throughRelation) {\n delayRelation(delayedRelations, dbModel, 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.model,\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.dbModel.relations[item.relationName as never]) continue;\n\n const as = item.dbModel.definedAs;\n let message = `Cannot define a \\`${item.relationName}\\` relation on \\`${as}\\``;\n const model = result[as];\n\n const { through, source } = relation.options as {\n through: string;\n source: string;\n };\n const throughRel = model.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.model.relations[source as never]\n ) {\n message += `: cannot find \\`${source}\\` relation in \\`${\n (throughRel.model as DbModel<ModelClass>).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 model: Query,\n relationName: string,\n data: ApplyRelationData,\n) => {\n let modelRelations = delayedRelations.get(model);\n if (!modelRelations) {\n modelRelations = {};\n delayedRelations.set(model, modelRelations);\n }\n if (modelRelations[relationName]) {\n modelRelations[relationName].push(data);\n } else {\n modelRelations[relationName] = [data];\n }\n};\n\nconst applyRelation = (\n qb: Query,\n { relationName, relation, dbModel, otherDbModel }: ApplyRelationData,\n delayedRelations: DelayedRelations,\n) => {\n const query = (\n relation.options.scope\n ? relation.options.scope(otherDbModel)\n : (otherDbModel as unknown as QueryWithTable)\n ).as(relationName);\n\n const definedAs = (query as unknown as { definedAs?: string }).definedAs;\n if (!definedAs) {\n throw new Error(\n `Model 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(dbModel, relation, relationName, query);\n } else if (type === 'hasMany') {\n data = makeHasManyMethod(dbModel, relation, relationName, query);\n } else if (type === 'hasAndBelongsToMany') {\n data = makeHasAndBelongsToManyMethod(\n dbModel,\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 }\n\n if (data.virtualColumn) {\n dbModel.shape[relationName] = data.virtualColumn;\n }\n\n makeRelationQuery(dbModel, definedAs, relationName, data);\n\n (dbModel.relations as Record<string, unknown>)[relationName] = {\n type,\n key: relationName,\n model: otherDbModel,\n query,\n joinQuery: data.joinQuery,\n primaryKey: data.primaryKey,\n options: relation.options,\n };\n\n const modelRelations = delayedRelations.get(dbModel);\n if (!modelRelations) return;\n\n modelRelations[relationName]?.forEach((data) => {\n applyRelation(qb, data, delayedRelations);\n });\n};\n\nconst makeRelationQuery = (\n model: Query,\n definedAs: string,\n relationName: string,\n data: RelationData,\n) => {\n Object.defineProperty(model, relationName, {\n get() {\n const toModel = this.db[definedAs].as(relationName) as Query;\n\n if (data.returns === 'one') {\n toModel._take();\n }\n\n const query = this.isSubQuery\n ? toModel\n : toModel._whereExists(data.reverseJoin(this, toModel), (q) => q);\n\n query.query[relationQueryKey] = {\n relationName,\n sourceQuery: this,\n relationQuery: toModel,\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 } from 'pqb';\n\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n fn: (db: T) => Promise<Result>,\n): Promise<Result> {\n if (fn.length === 0) {\n throw new Error('Argument of $transaction callback should be used');\n }\n\n return this.$queryBuilder.transaction((q) => {\n const orm = {} as T;\n for (const key in this) {\n const value = this[key];\n if (value instanceof Db) {\n const model = value.transacting(q);\n model.__model = model;\n (model as unknown as { db: unknown }).db = orm;\n orm[key] = model;\n } else {\n orm[key] = value;\n }\n }\n\n return fn(orm);\n });\n}\n","import {\n Adapter,\n Db,\n AdapterOptions,\n QueryLogOptions,\n columnTypes,\n NoPrimaryKeyOption,\n anyShape,\n DbTableOptions,\n} from 'pqb';\nimport { DbModel, Model, ModelClasses } from './model';\nimport { applyRelations } from './relations/relations';\nimport { transaction } from './transaction';\n\nexport type OrchidORM<T extends ModelClasses> = {\n [K in keyof T]: DbModel<T[K]>;\n} & {\n $transaction: typeof transaction;\n $adapter: Adapter;\n $queryBuilder: Db;\n $close(): Promise<void>;\n};\n\nexport const orchidORM = <T extends ModelClasses>(\n {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey = 'error',\n ...options\n }: ({ adapter: Adapter } | Omit<AdapterOptions, 'log'>) &\n QueryLogOptions & {\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n },\n models: T,\n): OrchidORM<T> => {\n const adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n const commonOptions = {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey,\n };\n const qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n anyShape,\n columnTypes,\n commonOptions,\n );\n qb.queryBuilder = qb as unknown as Db;\n\n const result = {\n $transaction: transaction,\n $adapter: adapter,\n $queryBuilder: qb,\n $close: () => adapter.close(),\n } as unknown as OrchidORM<ModelClasses>;\n\n const modelInstances: Record<string, Model> = {};\n\n for (const key in models) {\n if (key[0] === '$') {\n throw new Error(`Model name must not start with $`);\n }\n\n const model = new models[key]();\n modelInstances[key] = model;\n\n const options: DbTableOptions = {\n ...commonOptions,\n schema: model.schema,\n };\n\n if (model.noPrimaryKey) options.noPrimaryKey = 'ignore';\n\n const dbModel = new Db(\n adapter,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n qb as any,\n model.table,\n model.columns.shape,\n model.columnTypes,\n options,\n );\n\n (dbModel as unknown as { definedAs: string }).definedAs = key;\n (dbModel as unknown as { db: unknown }).db = result;\n\n (result as Record<string, unknown>)[key] = dbModel;\n }\n\n applyRelations(qb, modelInstances, result);\n\n return result as unknown as OrchidORM<T>;\n};\n","import {\n EmptyObject,\n getClonedQueryData,\n MergeQuery,\n Query,\n QueryReturnType,\n SetQueryReturns,\n WhereResult,\n} from 'pqb';\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 model: 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.__model);\n proto.__model = proto;\n const result = Object.create(proto);\n result.query = getClonedQueryData(q.query);\n\n if (plainMethods) {\n Object.assign(proto.__model, plainMethods);\n }\n\n for (const key in queryMethods) {\n const method = queryMethods[key] as (...args: unknown[]) => unknown;\n (proto.__model 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(model);\n\n return new Proxy(repo, {\n get(_, key) {\n return q[key];\n },\n }) as unknown as Repo<T, Methods>;\n};\n"],"names":["getColumnTypes","options","VirtualColumn","nestedInsert","nestedUpdate","pushQueryValue","q","values","rowIndex","columnIndex","addQueryOn","isQueryReturnsAll","id","getQueryAs","query","data","__spreadValues","__spreadProps","connect","connectOrCreate","create","toSqlCacheKey","NotFoundError","relationQueryKey","Db","Adapter","anyShape","columnTypes","getClonedQueryData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","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 ColumnShapeOutput,\n ColumnsShape,\n ColumnTypesBase,\n Db,\n getColumnTypes,\n Query,\n} from 'pqb';\nimport { MapRelations, Relation, RelationThunks } from './relations/relations';\nimport { OrchidORM } from './orm';\n\nexport type TableClass<T extends Table = Table> = new () => T;\n\nexport type TableClasses = Record<string, TableClass>;\n\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 keyof T['relations']]: Relation<T, T['relations'], K>;\n }\n : Query['relations']\n : Query['relations'],\n T['columnTypes']\n> & { definedAs: string; db: OrchidORM<TableClasses> };\n\nexport type DbTable<T extends TableClass> = TableToDb<InstanceType<T>> &\n Omit<MapRelations<InstanceType<T>>, keyof Query>;\n\ntype TableConfig = {\n shape: ColumnsShape;\n type: unknown;\n};\n\ntype ScopeFn<Related extends TableClass, Scope extends Query> = (\n q: DbTable<Related>,\n) => Scope;\n\nexport type Table = {\n table: string;\n columns: TableConfig;\n schema?: string;\n columnTypes: ColumnTypesBase;\n noPrimaryKey?: boolean;\n};\n\nexport const createBaseTable = <CT extends ColumnTypesBase>(options: {\n columnTypes: CT;\n}) => {\n return class BaseTable {\n table!: string;\n columns!: TableConfig;\n schema?: string;\n columnTypes: CT;\n noPrimaryKey?: boolean;\n\n constructor() {\n this.columnTypes = options.columnTypes;\n }\n\n setColumns = <T extends ColumnsShape>(\n fn: (t: CT) => T,\n ): { shape: T; type: ColumnShapeOutput<T> } => {\n const shape = getColumnTypes(options.columnTypes, fn);\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","import { Table } from '../table';\nimport {\n addQueryOn,\n BelongsToRelation,\n CreateCtx,\n InsertQueryData,\n isQueryReturnsAll,\n pushQueryValue,\n Query,\n QueryBase,\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 updateLater?: Record<string, unknown>;\n updateLaterPromises?: Promise<void>[];\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 (q, 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.transacting(q);\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\n .transacting(q)\n ._findBy(params.set)\n ._get(primaryKey);\n }\n } else if (params.create) {\n update[foreignKey] = await query\n .transacting(q)\n ._get(primaryKey)\n ._create(params.create);\n } else if (params.delete) {\n const selectQuery = q.transacting(q);\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 if (!state.updateLater) {\n state.updateLater = {};\n state.updateLaterPromises = [];\n }\n\n const { handleResult } = q.query;\n q.query.handleResult = async (q, queryResult) => {\n const data = (await handleResult(q, queryResult)) as Record<\n string,\n unknown\n >[];\n\n const id = data[0][foreignKey];\n if (id !== null) {\n await query\n .transacting(q)\n ._findBy({ [primaryKey]: id })\n ._update<WhereResult<Query>>(upsert.update);\n } else {\n (state.updateLaterPromises as Promise<void>[]).push(\n query\n .transacting(q)\n ._select(primaryKey)\n ._create(upsert.create)\n .then((result) => {\n (state.updateLater as Record<string, unknown>)[foreignKey] = (\n result as Record<string, unknown>\n )[primaryKey];\n }) as unknown as Promise<void>,\n );\n }\n\n return data;\n };\n } else if (params.delete || params.update) {\n q._afterQuery(async (q, 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.transacting(q)._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 MaybeArray,\n pushQueryValue,\n Query,\n QueryBase,\n Relation,\n UpdateCtx,\n UpdateData,\n WhereArg,\n} from 'pqb';\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>;\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).fromQuery = fromQuery;\n };\n },\n };\n};\n\nconst nestedInsert = ({ query, primaryKey, foreignKey }: State) => {\n return (async (q, 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.transacting(q);\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 WhereResult<Query> & {\n hasSelect: false;\n }\n )._updateOrThrow(data)\n : (\n t.where(item.connectOrCreate.where) as WhereResult<Query> & {\n hasSelect: false;\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.transacting(q);\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 & { hasSelect: true }>>(update);\n\n if (updatedIds.length < ids.length) {\n await t.createMany(\n ids\n .filter((id) => !updatedIds.includes(id))\n .map((id) => ({\n ...create,\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 MaybeArray,\n Query,\n QueryBase,\n toSqlCacheKey,\n WhereArg,\n WhereResult,\n InsertQueryData,\n isQueryReturnsAll,\n VirtualColumn,\n CreateCtx,\n UpdateCtx,\n} from 'pqb';\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).fromQuery = 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 (q, 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.transacting(q);\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.transacting(q);\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 CreateCtx,\n getQueryAs,\n HasAndBelongsToManyRelation,\n MaybeArray,\n NotFoundError,\n pushQueryValue,\n Query,\n QueryBase,\n toSqlCacheKey,\n UpdateCtx,\n VirtualColumn,\n WhereArg,\n WhereResult,\n} from 'pqb';\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\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 __table = Object.create(qb.__table);\n __table.__table = __table;\n __table.table = joinTable;\n __table.shape = {\n [fk]: table.shape[pk],\n [afk]: query.shape[apk],\n };\n const subQuery = Object.create(__table);\n subQuery.query = { ...subQuery.query };\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 return toQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${pk}`)\n ._on(foreignKeyFull, `${getQueryAs(fromQuery)}.${pk}`),\n );\n },\n reverseJoin(fromQuery, toQuery) {\n return fromQuery.whereExists(subQuery, (q) =>\n q\n ._on(associationForeignKeyFull, `${getQueryAs(toQuery)}.${pk}`)\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 (q: Query, result: Record<string, unknown>) => {\n const fromQuery = ref.query.clone();\n fromQuery.query.select = [{ selectAs: { [fk]: pk } }];\n\n const createdCount = await subQuery\n .transacting(q)\n .count()\n ._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();\n }\n },\n );\n\n return (q) => {\n ref.query = q;\n };\n },\n };\n};\n\nconst queryJoinTable = (\n state: State,\n q: Query,\n data: Record<string, unknown>[],\n conditions?: MaybeArray<WhereArg<Query>>,\n) => {\n const t = state.joinTableQuery.transacting(q);\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 q: Query,\n conditions: MaybeArray<WhereArg<Query>>,\n) => {\n return query\n .transacting(q)\n ._where<Query>(Array.isArray(conditions) ? { OR: conditions } : conditions);\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 (q, 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.transacting(q);\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\n .transacting(q)\n ._count()\n ._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 (q, data, params) => {\n if (params.create) {\n const ids = await state.relatedTableQuery\n .transacting(q)\n ._pluck(state.associationPrimaryKey)\n ._createMany(params.create);\n\n await state.joinTableQuery.transacting(q)._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 .transacting(q)\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, q, data, params.disconnect)._delete();\n }\n\n if (params.delete) {\n const j = queryJoinTable(state, q, data, params.delete);\n\n const ids = await j._pluck(state.associationForeignKey)._delete();\n\n await queryRelatedTable(state.relatedTableQuery, q, {\n [state.associationPrimaryKey]: { in: ids },\n })._delete();\n }\n\n if (params.set) {\n const j = queryJoinTable(state, q, data);\n await j._delete();\n delete j.query[toSqlCacheKey];\n\n const ids = await queryRelatedTable(\n state.relatedTableQuery,\n q,\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 QueryWithTable,\n RelationQuery,\n SetQueryReturnsAll,\n SetQueryReturnsOne,\n SetQueryReturnsOneOptional,\n BaseRelation,\n defaultsKey,\n relationQueryKey,\n EmptyObject,\n VirtualColumn,\n} from 'pqb';\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 keyof Relations,\n M extends Query = DbTable<ReturnType<Relations[K]['fn']>>,\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 [defaultsKey]: 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 query = (\n relation.options.scope\n ? relation.options.scope(otherDbTable)\n : (otherDbTable as unknown as QueryWithTable)\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 }\n\n if (data.virtualColumn) {\n dbTable.shape[relationName] = data.virtualColumn;\n }\n\n makeRelationQuery(dbTable, definedAs, relationName, data);\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 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 definedAs: string,\n relationName: string,\n data: RelationData,\n) => {\n Object.defineProperty(table, relationName, {\n get() {\n const toTable = this.db[definedAs].as(relationName) as Query;\n\n if (data.returns === 'one') {\n toTable._take();\n }\n\n const query = this.isSubQuery\n ? toTable\n : toTable._whereExists(data.reverseJoin(this, toTable), (q) => q);\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 } from 'pqb';\n\nexport function transaction<T extends { $queryBuilder: Db }, Result>(\n this: T,\n fn: (db: T) => Promise<Result>,\n): Promise<Result> {\n if (fn.length === 0) {\n throw new Error('Argument of $transaction callback should be used');\n }\n\n return this.$queryBuilder.transaction((q) => {\n const orm = {} as T;\n for (const key in this) {\n const value = this[key];\n if (value instanceof Db) {\n const table = value.transacting(q);\n table.__table = table;\n (table as unknown as { db: unknown }).db = orm;\n orm[key] = table;\n } else {\n orm[key] = value;\n }\n }\n\n return fn(orm);\n });\n}\n","import {\n Adapter,\n Db,\n AdapterOptions,\n QueryLogOptions,\n columnTypes,\n NoPrimaryKeyOption,\n anyShape,\n DbTableOptions,\n} from 'pqb';\nimport { DbTable, Table, TableClasses } from './table';\nimport { applyRelations } from './relations/relations';\nimport { transaction } from './transaction';\n\nexport type OrchidORM<T extends TableClasses> = {\n [K in keyof T]: DbTable<T[K]>;\n} & {\n $transaction: typeof transaction;\n $adapter: Adapter;\n $queryBuilder: Db;\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 }: ({ adapter: Adapter } | Omit<AdapterOptions, 'log'>) &\n QueryLogOptions & {\n autoPreparedStatements?: boolean;\n noPrimaryKey?: NoPrimaryKeyOption;\n },\n tables: T,\n): OrchidORM<T> => {\n const adapter = 'adapter' in options ? options.adapter : new Adapter(options);\n const commonOptions = {\n log,\n logger,\n autoPreparedStatements,\n noPrimaryKey,\n };\n const qb = new Db(\n adapter,\n undefined as unknown as Db,\n undefined,\n anyShape,\n columnTypes,\n commonOptions,\n );\n qb.queryBuilder = qb as unknown as Db;\n\n const result = {\n $transaction: transaction,\n $adapter: adapter,\n $queryBuilder: qb,\n $close: () => adapter.close(),\n } as unknown as OrchidORM<TableClasses>;\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 options,\n );\n\n (dbTable as unknown as { definedAs: string }).definedAs = key;\n (dbTable as unknown as { db: unknown }).db = result;\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 EmptyObject,\n getClonedQueryData,\n MergeQuery,\n Query,\n QueryReturnType,\n SetQueryReturns,\n WhereResult,\n} from 'pqb';\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.__table);\n proto.__table = proto;\n const result = Object.create(proto);\n result.query = getClonedQueryData(q.query);\n\n if (plainMethods) {\n Object.assign(proto.__table, plainMethods);\n }\n\n for (const key in queryMethods) {\n const method = queryMethods[key] as (...args: unknown[]) => unknown;\n (proto.__table 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":["getColumnTypes","options","VirtualColumn","nestedInsert","nestedUpdate","pushQueryValue","q","values","rowIndex","columnIndex","addQueryOn","isQueryReturnsAll","id","getQueryAs","query","data","__spreadValues","__spreadProps","connect","connectOrCreate","create","toSqlCacheKey","NotFoundError","relationQueryKey","Db","Adapter","anyShape","columnTypes","getClonedQueryData"],"mappings":"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"}
|
package/jest-setup.ts
CHANGED