semola 0.5.4 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +35 -50
  2. package/dist/lib/api/index.cjs +1 -523
  3. package/dist/lib/api/index.d.cts +1 -271
  4. package/dist/lib/api/index.d.mts +80 -84
  5. package/dist/lib/api/index.mjs +1 -521
  6. package/dist/lib/cache/index.cjs +1 -74
  7. package/dist/lib/cache/index.d.cts +1 -48
  8. package/dist/lib/cache/index.d.mts +3 -24
  9. package/dist/lib/cache/index.mjs +1 -73
  10. package/dist/lib/cron/index.cjs +1 -735
  11. package/dist/lib/cron/index.d.cts +1 -146
  12. package/dist/lib/cron/index.d.mts +99 -36
  13. package/dist/lib/cron/index.mjs +1 -726
  14. package/dist/lib/errors/index.cjs +1 -30
  15. package/dist/lib/errors/index.d.cts +1 -2
  16. package/dist/lib/errors/index.d.mts +12 -1
  17. package/dist/lib/errors/index.mjs +1 -26
  18. package/dist/lib/i18n/index.cjs +1 -42
  19. package/dist/lib/i18n/index.d.cts +1 -28
  20. package/dist/lib/i18n/index.mjs +1 -41
  21. package/dist/lib/logging/index.cjs +1 -387
  22. package/dist/lib/logging/index.d.cts +1 -108
  23. package/dist/lib/logging/index.mjs +1 -374
  24. package/dist/lib/orm/index.cjs +1 -0
  25. package/dist/lib/orm/index.d.cts +1 -0
  26. package/dist/lib/orm/index.d.mts +404 -0
  27. package/dist/lib/orm/index.mjs +1 -0
  28. package/dist/lib/policy/index.cjs +1 -285
  29. package/dist/lib/policy/index.d.cts +1 -77
  30. package/dist/lib/policy/index.mjs +1 -265
  31. package/dist/lib/prompts/index.cjs +6 -769
  32. package/dist/lib/prompts/index.d.cts +1 -96
  33. package/dist/lib/prompts/index.d.mts +12 -33
  34. package/dist/lib/prompts/index.mjs +6 -763
  35. package/dist/lib/pubsub/index.cjs +1 -117
  36. package/dist/lib/pubsub/index.d.cts +1 -41
  37. package/dist/lib/pubsub/index.d.mts +3 -18
  38. package/dist/lib/pubsub/index.mjs +1 -116
  39. package/dist/lib/queue/index.cjs +1 -182
  40. package/dist/lib/queue/index.d.cts +1 -74
  41. package/dist/lib/queue/index.d.mts +11 -4
  42. package/dist/lib/queue/index.mjs +1 -181
  43. package/dist/lib/workflow/index.cjs +1 -534
  44. package/dist/lib/workflow/index.d.cts +1 -85
  45. package/dist/lib/workflow/index.d.mts +76 -11
  46. package/dist/lib/workflow/index.mjs +1 -533
  47. package/dist/rolldown-runtime-CMqjfN_6.cjs +1 -0
  48. package/package.json +17 -5
  49. package/dist/index-BhGNDjPq.d.mts +0 -13
  50. package/dist/index-DxSbeGP-.d.cts +0 -13
@@ -0,0 +1,404 @@
1
+ //#region src/lib/orm/column/types.d.ts
2
+ type BaseColumn<TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean, TValue = unknown> = {
3
+ sqlName: string;
4
+ _meta: ColumnTypeState<TNullable, TPrimaryKey, TUnique, THasDefault>;
5
+ _default?: () => TValue;
6
+ references?: {
7
+ tableColumn?: () => {
8
+ sqlName: string;
9
+ };
10
+ };
11
+ };
12
+ type ColumnTypeState<TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = {
13
+ isNullable: TNullable;
14
+ isPrimaryKey: TPrimaryKey;
15
+ isUnique: TUnique;
16
+ hasDefault: THasDefault;
17
+ };
18
+ type ColumnRuntimeValueMap = {
19
+ string: string;
20
+ number: number;
21
+ boolean: boolean;
22
+ date: Date;
23
+ enum: string;
24
+ json: unknown;
25
+ jsonb: unknown;
26
+ };
27
+ type StringColumn<TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, string> & {
28
+ type: "string";
29
+ };
30
+ type NumberColumn<TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, number> & {
31
+ type: "number";
32
+ };
33
+ type BooleanColumn<TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, boolean> & {
34
+ type: "boolean";
35
+ };
36
+ type DateColumn<TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, Date> & {
37
+ type: "date";
38
+ };
39
+ type EnumColumn<TValue extends string = string, TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, TValue> & {
40
+ type: "enum";
41
+ enumValues?: readonly TValue[];
42
+ };
43
+ type JsonColumn<TValue = unknown, TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, TValue> & {
44
+ type: "json";
45
+ };
46
+ type JsonbColumn<TValue = unknown, TNullable extends boolean = boolean, TPrimaryKey extends boolean = boolean, TUnique extends boolean = boolean, THasDefault extends boolean = boolean> = BaseColumn<TNullable, TPrimaryKey, TUnique, THasDefault, TValue> & {
47
+ type: "jsonb";
48
+ };
49
+ type Column = StringColumn | NumberColumn | BooleanColumn | DateColumn | EnumColumn | JsonColumn | JsonbColumn;
50
+ type ColumnType = Column["type"];
51
+ type ColumnBuilderState<TType extends ColumnType, TNullable extends boolean, TPrimaryKey extends boolean, TUnique extends boolean, THasDefault extends boolean, TValue extends ColumnRuntimeValueMap[TType]> = {
52
+ sqlName: string;
53
+ type: TType;
54
+ _meta: ColumnTypeState<TNullable, TPrimaryKey, TUnique, THasDefault>;
55
+ _default?: () => TValue;
56
+ enumValues?: readonly TValue[];
57
+ references?: {
58
+ tableColumn?: () => {
59
+ sqlName: string;
60
+ };
61
+ };
62
+ };
63
+ type SetNullable<TType extends ColumnType, TPrimaryKey extends boolean, TUnique extends boolean, THasDefault extends boolean, TValue extends ColumnRuntimeValueMap[TType]> = ColumnBuilder<TType, TPrimaryKey extends true ? false : true, TPrimaryKey, TUnique, THasDefault, TValue>;
64
+ type SetNotNull<TType extends ColumnType, TPrimaryKey extends boolean, TUnique extends boolean, THasDefault extends boolean, TValue extends ColumnRuntimeValueMap[TType]> = ColumnBuilder<TType, false, TPrimaryKey, TUnique, THasDefault, TValue>;
65
+ type SetHasDefault<TType extends ColumnType, TNullable extends boolean, TPrimaryKey extends boolean, TUnique extends boolean, TValue extends ColumnRuntimeValueMap[TType]> = ColumnBuilder<TType, TNullable, TPrimaryKey, TUnique, true, TValue>;
66
+ type SetPrimaryKey<TType extends ColumnType, TUnique extends boolean, THasDefault extends boolean, TValue extends ColumnRuntimeValueMap[TType]> = ColumnBuilder<TType, false, true, TUnique, THasDefault, TValue>;
67
+ type SetUnique<TType extends ColumnType, TNullable extends boolean, TPrimaryKey extends boolean, _TUnique extends boolean, THasDefault extends boolean, TValue extends ColumnRuntimeValueMap[TType]> = ColumnBuilder<TType, TNullable, TPrimaryKey, true, THasDefault, TValue>;
68
+ type ColumnBuilder<TType extends ColumnType, TNullable extends boolean = true, TPrimaryKey extends boolean = false, TUnique extends boolean = false, THasDefault extends boolean = false, TValue extends ColumnRuntimeValueMap[TType] = ColumnRuntimeValueMap[TType]> = ColumnBuilderState<TType, TNullable, TPrimaryKey, TUnique, THasDefault, TValue> & {
69
+ primaryKey: () => SetPrimaryKey<TType, TUnique, THasDefault, TValue>;
70
+ notNull: () => SetNotNull<TType, TPrimaryKey, TUnique, THasDefault, TValue>;
71
+ nullable: () => SetNullable<TType, TPrimaryKey, TUnique, THasDefault, TValue>;
72
+ unique: () => SetUnique<TType, TNullable, TPrimaryKey, TUnique, THasDefault, TValue>;
73
+ default: (value: () => TValue) => SetHasDefault<TType, TNullable, TPrimaryKey, TUnique, TValue>;
74
+ references: ((tableColumn: () => {
75
+ sqlName: string;
76
+ }) => ColumnBuilder<TType, TNullable, TPrimaryKey, TUnique, THasDefault, TValue>) & {
77
+ tableColumn?: () => {
78
+ sqlName: string;
79
+ };
80
+ };
81
+ };
82
+ //#endregion
83
+ //#region src/lib/orm/column/index.d.ts
84
+ declare const string: (sqlName: string) => ColumnBuilder<"string">;
85
+ declare const uuid: (sqlName: string) => ColumnBuilder<"string">;
86
+ declare const number: (sqlName: string) => ColumnBuilder<"number">;
87
+ declare const boolean: (sqlName: string) => ColumnBuilder<"boolean">;
88
+ declare const date: (sqlName: string) => ColumnBuilder<"date">;
89
+ declare const enumType: <const TValues extends readonly string[]>(sqlName: string, values: TValues) => ColumnBuilder<"enum", true, false, false, false, TValues[number]>;
90
+ declare const json: <T = unknown>(sqlName: string) => ColumnBuilder<"json", true, false, false, false, T>;
91
+ declare const jsonb: <T = unknown>(sqlName: string) => ColumnBuilder<"jsonb", true, false, false, false, T>;
92
+ //#endregion
93
+ //#region src/lib/orm/table/types.d.ts
94
+ type Table<TColumns extends Record<string, Column> = Record<string, Column>> = {
95
+ sqlName: string;
96
+ columns: TColumns;
97
+ };
98
+ //#endregion
99
+ //#region src/lib/orm/dialect/types.d.ts
100
+ type Adapter = "sqlite" | "postgres";
101
+ //#endregion
102
+ //#region src/lib/orm/orm/types.d.ts
103
+ type HasMany<T extends Table> = {
104
+ _type: "hasMany";
105
+ _table: T;
106
+ };
107
+ type HasOne<T extends Table, TKey extends string = string> = {
108
+ _type: "hasOne";
109
+ _table: T;
110
+ _foreignKey: TKey;
111
+ };
112
+ type TableRelations = Record<string, HasMany<Table> | HasOne<Table>>;
113
+ type RelationsFor<T extends Record<string, Table>> = { [TTableName in keyof T]?: {
114
+ [key: string]: HasMany<Table> | HasOne<Table, keyof T[TTableName]["columns"] & string>;
115
+ } };
116
+ type Prettify<T> = { [TKey in keyof T]: T[TKey] } & {};
117
+ type ExactlyOne<T extends Record<PropertyKey, unknown>> = { [TKey in keyof T]: { [TSelected in TKey]-?: T[TSelected] } & { [TOmitted in Exclude<keyof T, TKey>]?: never } }[keyof T];
118
+ type OrmQueryOptions = {
119
+ $skipHooks?: boolean;
120
+ };
121
+ type CreateOrmOptions<T extends Record<string, Table> = Record<string, Table>, R extends RelationsFor<T> = RelationsFor<T>> = {
122
+ adapter: Adapter;
123
+ url: string;
124
+ tables: T;
125
+ relations?: R;
126
+ hooks?: OrmHooksConfig<T, R>;
127
+ };
128
+ type RelationsForTableByType<TTable extends Table, TAllTables extends Record<string, Table>, TAllRelations> = { [K in keyof TAllTables]: TAllTables[K] extends TTable ? TTable extends TAllTables[K] ? K extends keyof TAllRelations ? NonNullable<TAllRelations[K]> : Record<never, never> : never : never }[keyof TAllTables] extends infer R ? [R] extends [TableRelations] ? R : Record<never, never> : Record<never, never>;
129
+ type TableRelationsFor<TRelations, TTableName extends PropertyKey> = TTableName extends keyof TRelations ? NonNullable<TRelations[TTableName]> : Record<never, never>;
130
+ type OrmClient<T extends Record<string, Table> = Record<string, Table>, R extends RelationsFor<T> = RelationsFor<T>> = { [TTableName in keyof T]: TableClient<T[TTableName], TableRelationsFor<R, TTableName>, T, R> } & {
131
+ $raw: Bun.SQL;
132
+ $transaction: <TResult>(callback: (tx: TransactionClient<T, R>) => Promise<TResult>) => Promise<TResult>;
133
+ };
134
+ type TransactionClient<T extends Record<string, Table>, R extends RelationsFor<T> = RelationsFor<T>> = { [TTableName in keyof T]: TableClient<T[TTableName], TableRelationsFor<R, TTableName>, T, R> } & {
135
+ $raw: Bun.SQL;
136
+ };
137
+ type ColumnRuntimeValue<T extends Column> = T extends BaseColumn<boolean, boolean, boolean, boolean, infer TValue> ? TValue : never;
138
+ type ColumnValue<T extends Column> = T["_meta"]["isNullable"] extends false ? ColumnRuntimeValue<T> : ColumnRuntimeValue<T> | null;
139
+ type NonNullableColumnValue<T extends Column> = Exclude<ColumnValue<T>, null>;
140
+ type InWhereOperators<T extends Column> = {
141
+ in?: NonNullableColumnValue<T>[];
142
+ notIn?: NonNullableColumnValue<T>[];
143
+ };
144
+ type StringWhereOperators<T extends Column> = InWhereOperators<T> & {
145
+ equals?: ColumnValue<T>;
146
+ startsWith?: NonNullableColumnValue<T>;
147
+ endsWith?: NonNullableColumnValue<T>;
148
+ contains?: NonNullableColumnValue<T>;
149
+ };
150
+ type NumberWhereOperators<T extends Column> = InWhereOperators<T> & {
151
+ equals?: ColumnValue<T>;
152
+ gt?: NonNullableColumnValue<T>;
153
+ gte?: NonNullableColumnValue<T>;
154
+ lt?: NonNullableColumnValue<T>;
155
+ lte?: NonNullableColumnValue<T>;
156
+ between?: [NonNullableColumnValue<T>, NonNullableColumnValue<T>];
157
+ };
158
+ type BooleanWhereOperators<T extends Column> = InWhereOperators<T> & {
159
+ equals?: ColumnValue<T>;
160
+ };
161
+ type DateWhereOperators<T extends Column> = InWhereOperators<T> & {
162
+ equals?: ColumnValue<T>;
163
+ gt?: NonNullableColumnValue<T>;
164
+ gte?: NonNullableColumnValue<T>;
165
+ lt?: NonNullableColumnValue<T>;
166
+ lte?: NonNullableColumnValue<T>;
167
+ between?: [NonNullableColumnValue<T>, NonNullableColumnValue<T>];
168
+ };
169
+ type EnumWhereOperators<T extends Column> = InWhereOperators<T> & {
170
+ equals?: ColumnValue<T>;
171
+ };
172
+ type JsonWhereOperators<T extends Column> = InWhereOperators<T> & {
173
+ equals?: ColumnValue<T>;
174
+ };
175
+ type ColumnWhereOperatorsMap<T extends Column> = {
176
+ string: StringWhereOperators<T>;
177
+ number: NumberWhereOperators<T>;
178
+ boolean: BooleanWhereOperators<T>;
179
+ date: DateWhereOperators<T>;
180
+ enum: EnumWhereOperators<T>;
181
+ json: JsonWhereOperators<T>;
182
+ jsonb: JsonWhereOperators<T>;
183
+ };
184
+ type ColumnWhereOperators<T extends Column> = ColumnWhereOperatorsMap<T>[T["type"]];
185
+ type ColumnWhere<T extends Column> = ColumnRuntimeValue<T> extends object ? ColumnWhereOperators<T> : ColumnValue<T> | ColumnWhereOperators<T>;
186
+ type TableLogicalWhere<T extends Table, TRelations extends TableRelations = Record<never, never>> = { [TKey in "$or"]?: TableWhere<T, TRelations>[] } & { [TKey in "$and" | "$not"]?: TableWhere<T, TRelations> | TableWhere<T, TRelations>[] };
187
+ type RelationWhereFilter<R extends HasMany<Table> | HasOne<Table>> = {
188
+ every?: TableWhere<RelationTable<R>>;
189
+ some?: TableWhere<RelationTable<R>>;
190
+ none?: TableWhere<RelationTable<R>>;
191
+ } & ({
192
+ every: TableWhere<RelationTable<R>>;
193
+ } | {
194
+ some: TableWhere<RelationTable<R>>;
195
+ } | {
196
+ none: TableWhere<RelationTable<R>>;
197
+ });
198
+ type IsOpenTableRelations<TRelations extends TableRelations> = string extends keyof TRelations ? true : false;
199
+ type TableRelationWhere<TRelations extends TableRelations> = IsOpenTableRelations<TRelations> extends true ? Record<never, never> : { [K in keyof TRelations]?: RelationWhereFilter<TRelations[K]> };
200
+ type TableWhere<T extends Table, TRelations extends TableRelations = Record<never, never>> = TableLogicalWhere<T, TRelations> & { [TColumnName in keyof T["columns"]]?: ColumnWhere<T["columns"][TColumnName]> } & TableRelationWhere<TRelations>;
201
+ type TableSelect<T extends Table> = { [TColumnName in keyof T["columns"]]?: true };
202
+ type TableOrderBy<T extends Table> = { [TColumnName in keyof T["columns"]]?: "asc" | "desc" };
203
+ type RelationTable<R extends HasMany<Table> | HasOne<Table>> = R extends {
204
+ _table: infer T extends Table;
205
+ } ? T : never;
206
+ type RelationTableRelations<R extends HasMany<Table> | HasOne<Table>, TAllTables extends Record<string, Table>, TAllRelations> = [RelationsForTableByType<RelationTable<R>, TAllTables, TAllRelations>] extends [never] ? TableRelations : RelationsForTableByType<RelationTable<R>, TAllTables, TAllRelations>;
207
+ type RelationIncludeOptions<R extends HasMany<Table> | HasOne<Table>, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = {
208
+ where?: TableWhere<RelationTable<R>>;
209
+ orderBy?: TableOrderBy<RelationTable<R>>;
210
+ take?: number;
211
+ skip?: number;
212
+ select?: TableSelect<RelationTable<R>>;
213
+ include?: TableInclude<RelationTableRelations<R, TAllTables, TAllRelations>, TAllTables, TAllRelations>;
214
+ };
215
+ type TableInclude<TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = Partial<{ [K in keyof TRelations]: boolean | RelationIncludeOptions<TRelations[K], TAllTables, TAllRelations> }>;
216
+ type FindManyOptions<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = OrmQueryOptions & {
217
+ where?: TableWhere<T, TRelations>;
218
+ select?: TableSelect<T>;
219
+ orderBy?: TableOrderBy<T>;
220
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
221
+ take?: number;
222
+ skip?: number;
223
+ };
224
+ type FindFirstOptions<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = Omit<FindManyOptions<T, TRelations, TAllTables, TAllRelations>, "take">;
225
+ type TableColumns<T extends Table> = T["columns"];
226
+ type TableColumnByName<T extends Table, TColumnName extends keyof TableColumns<T>> = TableColumns<T>[TColumnName];
227
+ type IsUniqueColumn<TColumn extends Column> = TColumn["_meta"]["isPrimaryKey"] extends true ? true : TColumn["_meta"]["isUnique"];
228
+ type FindUniqueColumnValue<TColumn extends Column> = NonNullable<ColumnValue<TColumn>>;
229
+ type UniqueColumnKeys<T extends Table> = { [TColumnName in keyof TableColumns<T>]: IsUniqueColumn<TableColumnByName<T, TColumnName>> extends true ? TColumnName : never }[keyof TableColumns<T>];
230
+ type UniqueColumnWhereShape<T extends Table> = { [TColumnName in UniqueColumnKeys<T>]: FindUniqueColumnValue<TableColumnByName<T, TColumnName>> };
231
+ type NonUniqueColumnKeys<T extends Table> = Exclude<keyof TableColumns<T>, UniqueColumnKeys<T>>;
232
+ type FindUniqueWhere<T extends Table> = ExactlyOne<UniqueColumnWhereShape<T>> & { [TColumnName in NonUniqueColumnKeys<T>]?: ColumnWhere<TableColumnByName<T, TColumnName>> };
233
+ type FindUniqueOptions<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = OrmQueryOptions & {
234
+ where: FindUniqueWhere<T>;
235
+ select?: TableSelect<T>;
236
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
237
+ };
238
+ type TableRow<T extends Table> = Prettify<{ [TColumnName in keyof T["columns"]]: ColumnValue<T["columns"][TColumnName]> }>;
239
+ type TableHookResult<T extends Table> = Prettify<Partial<TableRow<T>> & Record<string, unknown>>;
240
+ type IsRequiredCreateColumn<TColumn extends Column> = TColumn["_meta"]["isNullable"] extends false ? TColumn["_meta"]["hasDefault"] extends true ? false : true : false;
241
+ type CreateRequiredColumnKeys<T extends Table> = { [TColumnName in keyof TableColumns<T>]: IsRequiredCreateColumn<TableColumnByName<T, TColumnName>> extends true ? TColumnName : never }[keyof TableColumns<T>];
242
+ type CreateData<T extends Table> = Prettify<{ [TColumnName in CreateRequiredColumnKeys<T>]: ColumnValue<TableColumnByName<T, TColumnName>> } & { [TColumnName in Exclude<keyof TableColumns<T>, CreateRequiredColumnKeys<T>>]?: ColumnValue<TableColumnByName<T, TColumnName>> }>;
243
+ type CreateOptions<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = OrmQueryOptions & {
244
+ data: CreateData<T>;
245
+ select?: TableSelect<T>;
246
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
247
+ };
248
+ type CreateResult<T extends Table, TRelations extends TableRelations, TOptions extends {
249
+ select?: TableSelect<T>;
250
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
251
+ }, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = Prettify<SelectResult<T, TOptions> & IncludeResult<TRelations, TOptions, TAllTables, TAllRelations>>;
252
+ type UpdateData<T extends Table> = Partial<{ [TColumnName in keyof TableColumns<T>]: ColumnValue<TableColumnByName<T, TColumnName>> }>;
253
+ type UpdateOptions<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = OrmQueryOptions & {
254
+ where: FindUniqueWhere<T>;
255
+ data: UpdateData<T>;
256
+ select?: TableSelect<T>;
257
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
258
+ };
259
+ type UpdateResult<T extends Table, TRelations extends TableRelations, TOptions extends {
260
+ where: FindUniqueWhere<T>;
261
+ select?: TableSelect<T>;
262
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
263
+ }, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = NonNullable<FindUniqueResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
264
+ type DeleteOptions<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = FindUniqueOptions<T, TRelations, TAllTables, TAllRelations>;
265
+ type DeleteResult<T extends Table, TRelations extends TableRelations, TOptions extends {
266
+ where: FindUniqueWhere<T>;
267
+ select?: TableSelect<T>;
268
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
269
+ }, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = NonNullable<FindUniqueResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
270
+ type CreateManyOptions<T extends Table> = OrmQueryOptions & {
271
+ data: CreateData<T>[];
272
+ };
273
+ type UpdateManyOptions<T extends Table, TRelations extends TableRelations = TableRelations> = OrmQueryOptions & {
274
+ where?: TableWhere<T, TRelations>;
275
+ data: UpdateData<T>;
276
+ };
277
+ type DeleteManyOptions<T extends Table, TRelations extends TableRelations = TableRelations> = OrmQueryOptions & {
278
+ where?: TableWhere<T, TRelations>;
279
+ };
280
+ type IncludedKeys<TInclude> = keyof { [K in keyof TInclude as TInclude[K] extends false | undefined ? never : K]: unknown };
281
+ type SelectResult<T extends Table, TOptions extends {
282
+ select?: TableSelect<T>;
283
+ }> = TOptions extends {
284
+ select: infer TSelect extends TableSelect<T>;
285
+ } ? [keyof TSelect] extends [never] ? TableRow<T> : { [K in keyof TSelect & keyof T["columns"]]: ColumnValue<T["columns"][K]> } : TableRow<T>;
286
+ type RelationBaseRow<TTable extends Table, TIncludeValue> = TIncludeValue extends {
287
+ select: infer TSelect extends TableSelect<TTable>;
288
+ } ? SelectResult<TTable, {
289
+ select: TSelect;
290
+ }> : TableRow<TTable>;
291
+ type RelationRow<TTable extends Table, TIncludeValue, TAllTables extends Record<string, Table>, TAllRelations> = Prettify<RelationBaseRow<TTable, TIncludeValue> & (TIncludeValue extends {
292
+ include?: infer TNestedInclude;
293
+ } ? IncludeResult<RelationsForTableByType<TTable, TAllTables, TAllRelations>, TNestedInclude extends TableInclude<RelationsForTableByType<TTable, TAllTables, TAllRelations>, TAllTables, TAllRelations> ? {
294
+ include: TNestedInclude;
295
+ } : {}, TAllTables, TAllRelations> : {})>;
296
+ type RelationResultType<R extends HasMany<Table> | HasOne<Table>, TIncludeValue, TAllTables extends Record<string, Table>, TAllRelations> = R extends HasMany<infer TTable> ? Array<RelationRow<TTable, TIncludeValue, TAllTables, TAllRelations>> : R extends HasOne<infer TTable> ? RelationRow<TTable, TIncludeValue, TAllTables, TAllRelations> | null : never;
297
+ type IncludeResult<TRelations extends TableRelations, TOptions extends {
298
+ include?: TableInclude<TRelations, TAllTables, TAllRelations>;
299
+ }, TAllTables extends Record<string, Table>, TAllRelations> = [keyof TRelations] extends [never] ? {} : TOptions["include"] extends TableInclude<TRelations, TAllTables, TAllRelations> ? { [K in IncludedKeys<NonNullable<TOptions["include"]>>]: K extends keyof TRelations ? RelationResultType<TRelations[K], NonNullable<TOptions["include"]>[K], TAllTables, TAllRelations> : never } : {};
300
+ type FindManyResult<T extends Table, TRelations extends TableRelations, TOptions extends FindManyOptions<T, TRelations, TAllTables, TAllRelations>, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = Prettify<SelectResult<T, TOptions> & IncludeResult<TRelations, TOptions, TAllTables, TAllRelations>>;
301
+ type FindFirstResult<T extends Table, TRelations extends TableRelations, TOptions extends FindFirstOptions<T, TRelations, TAllTables, TAllRelations>, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = Prettify<SelectResult<T, TOptions> & IncludeResult<TRelations, TOptions, TAllTables, TAllRelations>> | null;
302
+ type FindUniqueResult<T extends Table, TRelations extends TableRelations, TOptions extends FindUniqueOptions<T, TRelations, TAllTables, TAllRelations>, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = Prettify<SelectResult<T, TOptions> & IncludeResult<TRelations, TOptions, TAllTables, TAllRelations>> | null;
303
+ type OrmHookContext<TOptions, TResult = undefined> = {
304
+ tableName: string;
305
+ table: Table;
306
+ options: TOptions;
307
+ result?: TResult;
308
+ };
309
+ type OrmReadHookContext<TOptions, TResult = undefined> = {
310
+ tableName: string;
311
+ table: Table;
312
+ readonly options: Readonly<TOptions>;
313
+ result?: TResult;
314
+ };
315
+ type BeforeHookReturn<TResult> = TResult | undefined | Promise<TResult | undefined>;
316
+ type BeforeCreateHookResult<TTable extends Table, TRelations extends TableRelations> = {
317
+ data?: CreateOptions<TTable, TRelations>["data"];
318
+ };
319
+ type BeforeCreateManyHookResult<TTable extends Table> = {
320
+ data?: CreateManyOptions<TTable>["data"];
321
+ };
322
+ type BeforeUpdateHookResult<TTable extends Table, TRelations extends TableRelations> = {
323
+ where?: UpdateOptions<TTable, TRelations>["where"];
324
+ data?: UpdateOptions<TTable, TRelations>["data"];
325
+ };
326
+ type BeforeUpdateManyHookResult<TTable extends Table, TRelations extends TableRelations> = {
327
+ where?: UpdateManyOptions<TTable, TRelations>["where"];
328
+ data?: UpdateManyOptions<TTable, TRelations>["data"];
329
+ };
330
+ type BeforeDeleteHookResult<TTable extends Table, TRelations extends TableRelations> = {
331
+ where?: DeleteOptions<TTable, TRelations>["where"];
332
+ };
333
+ type BeforeDeleteManyHookResult<TTable extends Table, TRelations extends TableRelations> = {
334
+ where?: DeleteManyOptions<TTable, TRelations>["where"];
335
+ };
336
+ type GlobalOrmHooks = {
337
+ beforeFindMany?: <T extends Table>(ctx: OrmReadHookContext<FindManyOptions<T> | undefined>) => void | Promise<void>;
338
+ afterFindMany?: <T extends Table>(ctx: OrmReadHookContext<FindManyOptions<T> | undefined, unknown[]>) => void | Promise<void>;
339
+ beforeFindFirst?: <T extends Table>(ctx: OrmReadHookContext<FindFirstOptions<T> | undefined>) => void | Promise<void>;
340
+ afterFindFirst?: <T extends Table>(ctx: OrmReadHookContext<FindFirstOptions<T> | undefined, unknown | null>) => void | Promise<void>;
341
+ beforeFindUnique?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmReadHookContext<FindUniqueOptions<TTable, TRelations>>) => void | Promise<void>;
342
+ afterFindUnique?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmReadHookContext<FindUniqueOptions<TTable, TRelations>, unknown | null>) => void | Promise<void>;
343
+ beforeCreate?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<CreateOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeCreateHookResult<TTable, TRelations>>;
344
+ afterCreate?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<CreateOptions<TTable, TRelations>, unknown>) => void | Promise<void>;
345
+ beforeCreateMany?: <TTable extends Table>(ctx: OrmHookContext<CreateManyOptions<TTable>>) => BeforeHookReturn<BeforeCreateManyHookResult<TTable>>;
346
+ afterCreateMany?: <TTable extends Table>(ctx: OrmHookContext<CreateManyOptions<TTable>, unknown[]>) => void | Promise<void>;
347
+ beforeUpdate?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<UpdateOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeUpdateHookResult<TTable, TRelations>>;
348
+ afterUpdate?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<UpdateOptions<TTable, TRelations>, unknown>) => void | Promise<void>;
349
+ beforeUpdateMany?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<UpdateManyOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeUpdateManyHookResult<TTable, TRelations>>;
350
+ afterUpdateMany?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<UpdateManyOptions<TTable, TRelations>, unknown[]>) => void | Promise<void>;
351
+ beforeDelete?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<DeleteOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeDeleteHookResult<TTable, TRelations>>;
352
+ afterDelete?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<DeleteOptions<TTable, TRelations>, unknown>) => void | Promise<void>;
353
+ beforeDeleteMany?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<DeleteManyOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeDeleteManyHookResult<TTable, TRelations>>;
354
+ afterDeleteMany?: <TTable extends Table, TRelations extends TableRelations = TableRelations>(ctx: OrmHookContext<DeleteManyOptions<TTable, TRelations>, unknown[]>) => void | Promise<void>;
355
+ };
356
+ type TableHooks<TTable extends Table, TRelations extends TableRelations = TableRelations> = {
357
+ beforeFindMany?: (ctx: OrmReadHookContext<FindManyOptions<TTable, TRelations> | undefined>) => void | Promise<void>;
358
+ afterFindMany?: (ctx: OrmReadHookContext<FindManyOptions<TTable, TRelations> | undefined, Array<TableHookResult<TTable>>>) => void | Promise<void>;
359
+ beforeFindFirst?: (ctx: OrmReadHookContext<FindFirstOptions<TTable, TRelations> | undefined>) => void | Promise<void>;
360
+ afterFindFirst?: (ctx: OrmReadHookContext<FindFirstOptions<TTable, TRelations> | undefined, TableHookResult<TTable> | null>) => void | Promise<void>;
361
+ beforeFindUnique?: (ctx: OrmReadHookContext<FindUniqueOptions<TTable, TRelations>>) => void | Promise<void>;
362
+ afterFindUnique?: (ctx: OrmReadHookContext<FindUniqueOptions<TTable, TRelations>, TableHookResult<TTable> | null>) => void | Promise<void>;
363
+ beforeCreate?: (ctx: OrmHookContext<CreateOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeCreateHookResult<TTable, TRelations>>;
364
+ afterCreate?: (ctx: OrmHookContext<CreateOptions<TTable, TRelations>, TableHookResult<TTable>>) => void | Promise<void>;
365
+ beforeCreateMany?: (ctx: OrmHookContext<CreateManyOptions<TTable>>) => BeforeHookReturn<BeforeCreateManyHookResult<TTable>>;
366
+ afterCreateMany?: (ctx: OrmHookContext<CreateManyOptions<TTable>, Array<TableRow<TTable>>>) => void | Promise<void>;
367
+ beforeUpdate?: (ctx: OrmHookContext<UpdateOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeUpdateHookResult<TTable, TRelations>>;
368
+ afterUpdate?: (ctx: OrmHookContext<UpdateOptions<TTable, TRelations>, TableHookResult<TTable>>) => void | Promise<void>;
369
+ beforeUpdateMany?: (ctx: OrmHookContext<UpdateManyOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeUpdateManyHookResult<TTable, TRelations>>;
370
+ afterUpdateMany?: (ctx: OrmHookContext<UpdateManyOptions<TTable, TRelations>, Array<TableRow<TTable>>>) => void | Promise<void>;
371
+ beforeDelete?: (ctx: OrmHookContext<DeleteOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeDeleteHookResult<TTable, TRelations>>;
372
+ afterDelete?: (ctx: OrmHookContext<DeleteOptions<TTable, TRelations>, TableHookResult<TTable>>) => void | Promise<void>;
373
+ beforeDeleteMany?: (ctx: OrmHookContext<DeleteManyOptions<TTable, TRelations>>) => BeforeHookReturn<BeforeDeleteManyHookResult<TTable, TRelations>>;
374
+ afterDeleteMany?: (ctx: OrmHookContext<DeleteManyOptions<TTable, TRelations>, Array<TableRow<TTable>>>) => void | Promise<void>;
375
+ };
376
+ type OrmHooksConfig<T extends Record<string, Table>, R extends RelationsFor<T> = RelationsFor<T>> = GlobalOrmHooks & {
377
+ tables?: { [K in keyof T]?: TableHooks<T[K], TableRelationsFor<R, K>> };
378
+ };
379
+ type TableClient<T extends Table, TRelations extends TableRelations = TableRelations, TAllTables extends Record<string, Table> = Record<string, Table>, TAllRelations = Record<string, unknown>> = {
380
+ findMany<const TOptions extends FindManyOptions<T, TRelations, TAllTables, TAllRelations>>(options?: TOptions): Promise<Array<FindManyResult<T, TRelations, TOptions, TAllTables, TAllRelations>>>;
381
+ findFirst<const TOptions extends FindFirstOptions<T, TRelations, TAllTables, TAllRelations>>(options?: TOptions): Promise<FindFirstResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
382
+ findUnique<const TOptions extends FindUniqueOptions<T, TRelations, TAllTables, TAllRelations>>(options: TOptions): Promise<FindUniqueResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
383
+ create<const TOptions extends CreateOptions<T, TRelations, TAllTables, TAllRelations>>(options: TOptions): Promise<CreateResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
384
+ createMany(options: CreateManyOptions<T>): Promise<Array<TableRow<T>>>;
385
+ update<const TOptions extends UpdateOptions<T, TRelations, TAllTables, TAllRelations>>(options: TOptions): Promise<UpdateResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
386
+ updateMany(options: UpdateManyOptions<T, TRelations>): Promise<Array<TableRow<T>>>;
387
+ delete<const TOptions extends DeleteOptions<T, TRelations, TAllTables, TAllRelations>>(options: TOptions): Promise<DeleteResult<T, TRelations, TOptions, TAllTables, TAllRelations>>;
388
+ deleteMany(options: DeleteManyOptions<T, TRelations>): Promise<Array<TableRow<T>>>;
389
+ };
390
+ //#endregion
391
+ //#region src/lib/orm/orm/orm.d.ts
392
+ declare const createOrm: <const T extends Record<string, Table>, const R extends RelationsFor<T>>(options: CreateOrmOptions<T, R>) => OrmClient<T, R>;
393
+ //#endregion
394
+ //#region src/lib/orm/orm/relations.d.ts
395
+ declare const many: <T extends Table>(table: () => T) => HasMany<T>;
396
+ declare const one: <T extends Table, const TKey extends string>(foreignKey: TKey, table: () => T) => HasOne<T, TKey>;
397
+ //#endregion
398
+ //#region src/lib/orm/table/index.d.ts
399
+ declare const defineTable: <const TColumns extends Record<string, Column>>(sqlName: string, columns: TColumns) => {
400
+ sqlName: string;
401
+ columns: TColumns;
402
+ };
403
+ //#endregion
404
+ export { type CreateData, type CreateManyOptions, type CreateOptions, type CreateResult, type DeleteManyOptions, type DeleteOptions, type DeleteResult, type FindFirstOptions, type FindManyOptions, type FindUniqueOptions, type GlobalOrmHooks, type OrmHookContext, type OrmHooksConfig, type OrmReadHookContext, type TableHooks, type TableRow, type TransactionClient, type UpdateData, type UpdateManyOptions, type UpdateOptions, type UpdateResult, boolean, createOrm, date, defineTable, enumType, json, jsonb, many, number, one, string, uuid };
@@ -0,0 +1 @@
1
+ const e=t=>{let n=()=>e({...t,_meta:{...t._meta,isNullable:!1,isPrimaryKey:!0}}),r=()=>e({...t,_meta:{...t._meta,isNullable:!1}}),i=(()=>t._meta.isPrimaryKey?e({...t,_meta:{...t._meta,isNullable:!1}}):e({...t,_meta:{...t._meta,isNullable:!0}})),a=()=>e({...t,_meta:{...t._meta,isUnique:!0}}),o=n=>e({...t,_meta:{...t._meta,hasDefault:!0},_default:n}),s=n=>e({...t,references:{tableColumn:n}});return s.tableColumn=t.references?.tableColumn,{...t,primaryKey:n,notNull:r,nullable:i,unique:a,default:o,references:s}},t=(t,n,r)=>e({sqlName:t,type:n,enumValues:r,_meta:{isNullable:!0,isPrimaryKey:!1,isUnique:!1,hasDefault:!1}}),n=e=>t(e,`string`),r=e=>n(e),i=e=>t(e,`number`),a=e=>t(e,`boolean`),o=e=>t(e,`date`),s=(e,n)=>t(e,`enum`,n),c=e=>t(e,`json`),l=e=>t(e,`jsonb`);var u=class{tableName;table;constructor(e,t){this.tableName=e,this.table=t}shouldSkip(e){return e?.$skipHooks===!0}stripSkipHooks(e){let{$skipHooks:t,...n}=e;return n}toHookOptions(e){if(e)return this.stripSkipHooks(e)}async withReadHooks(e){let t={tableName:this.tableName,table:this.table,options:e.hookOptions};e.skipHooks||await this.runReadHooks(e.beforeGlobal,e.beforeTable,t);let n=await e.query();return e.skipHooks||await this.runReadHooks(e.afterGlobal,e.afterTable,{...t,result:n}),n}async runReadHooks(e,t,n){await this.runHook(e,n),await this.runHook(t,n)}async runHook(e,t){await e?.(t)}};const d=e=>{let{tables:t,...n}=e;return n},f=e=>(e=e.replaceAll(`"`,`""`),`"${e}"`),p=new class{resolveHasMany(e,t){let n=Object.values(e.columns),r=[];for(let[,e]of Object.entries(t.columns)){if(!e.references)continue;let t=e.references.tableColumn;if(!t)continue;let i=t();n.some(e=>e===i)&&r.push({fk:e,source:i})}if(r.length>1)throw Error(`Ambiguous hasMany foreign key from ${t.sqlName} to ${e.sqlName}`);let[i]=r;if(!i)throw Error(`Missing hasMany foreign key from ${t.sqlName} to ${e.sqlName}`);return i}resolveHasOne(e){let{sourceTable:t,relationTable:n,relationForeignKey:r}=e,i=t.columns[r];if(!i)throw Error(`Missing hasOne foreign key column ${r} on ${t.sqlName}`);if(!i.references?.tableColumn)throw Error(`Column ${r} on ${t.sqlName} is not a foreign key - call .references() on it`);let a=i.references.tableColumn();if(!Object.values(n.columns).some(e=>e===a))throw Error(`Column ${r} on ${t.sqlName} does not reference ${n.sqlName}`);return{localForeignKey:i,target:a}}},m=new class{buildColumns(e,t){if(!t||Object.keys(t).length===0)return Object.entries(e.columns).map(([e,t])=>this.getColumnAlias(t.sqlName,e)).join(`, `);let n=[],r=Object.entries(t).filter(([,e])=>e===!0).map(([e])=>e);if(!r.length)throw Error(`select must include at least one selected column on table ${e.sqlName}`);for(let t of r){let r=e.columns[t];if(!r)throw Error(`Unknown select key "${t}" on table ${e.sqlName}`);n.push(this.getColumnAlias(r.sqlName,t))}return n.join(`, `)}buildList(e,t){return t.sql?`${e}, ${t.sql}`:e}buildOrderBy(e,t){if(!t)return``;let n=[];for(let[r,i]of Object.entries(t)){let t=e.columns[r];if(!t)throw Error(`Unknown orderBy key "${r}" on table ${e.sqlName}`);if(i===`desc`){n.push(`${f(t.sqlName)} DESC`);continue}if(i===`asc`){n.push(`${f(t.sqlName)} ASC`);continue}throw Error(`Unknown orderBy direction "${i}" for key "${r}" on table ${e.sqlName}`)}return n.length?n.join(`, `):``}buildPagination(e,t,n,r){let i=[];if(n===void 0){if(r===void 0)return{sql:``,params:i};let n=t();return i.push(r),{sql:`${e.unlimitedOffsetKeyword} ${n}`,params:i}}let a=t();if(i.push(n),r===void 0)return{sql:`LIMIT ${a}`,params:i};let o=t();return i.push(r),{sql:`LIMIT ${a} OFFSET ${o}`,params:i}}buildStatement(e){let{tableName:t,columns:n,where:r,orderBy:i,pagination:a}=e,o=`SELECT ${n} FROM ${t}`;return r&&(o=`${o} WHERE ${r}`),i&&(o=`${o} ORDER BY ${i}`),a&&(o=`${o} ${a}`),o}getColumnAlias(e,t){return`${f(e)} AS ${f(t)}`}},h=e=>e instanceof Date?e.toISOString():e,g=(e,t)=>e.type!==`json`&&e.type!==`jsonb`?h(t):t===null?t:t===void 0?null:JSON.stringify(t),_=(e,t)=>t===void 0?e._default?e._default():null:t,v=(e,t)=>{let n=Object.entries(t).filter(([,e])=>e!==void 0);if(!n.map(([e])=>e).length)throw Error(`findUnique requires at least one where key`);let r=!1;for(let[t,i]of n){let n=e.columns[t];if(!n)throw Error(`Unknown where key ${t} on table ${e.sqlName}`);if(n._meta.isPrimaryKey||n._meta.isUnique){if(i===null)throw Error(`findUnique where key "${t}" must be non-null on table ${e.sqlName}`);r=!0}}if(!r)throw Error(`findUnique where must include at least one unique or primary key column`)},y=e=>{let{nextPlaceholder:t,table:n,data:r}=e,i=[],a=[];for(let[e,o]of Object.entries(r)){if(o===void 0)continue;let r=n.columns[e];if(!r)throw Error(`Unknown data key "${e}" on table ${n.sqlName}`);i.push(`${f(r.sqlName)} = ${t()}`),a.push(g(r,o))}return{setClauses:i,params:a}},b=`(1 = 0)`,x=`(1 = 1)`,S=[`every`,`some`,`none`],C=e=>h(`${h(e)}`.replaceAll(`\\`,`\\\\`).replaceAll(`%`,`\\%`).replaceAll(`_`,`\\_`)),w={equals:{sql:e=>`= ${e}`,transform:e=>h(e)},gt:{sql:e=>`> ${e}`,transform:e=>h(e)},gte:{sql:e=>`>= ${e}`,transform:e=>h(e)},lt:{sql:e=>`< ${e}`,transform:e=>h(e)},lte:{sql:e=>`<= ${e}`,transform:e=>h(e)},startsWith:{sql:e=>`LIKE ${e} ESCAPE '\\'`,transform:e=>h(`${C(e)}%`)},endsWith:{sql:e=>`LIKE ${e} ESCAPE '\\'`,transform:e=>h(`%${C(e)}`)},contains:{sql:e=>`LIKE ${e} ESCAPE '\\'`,transform:e=>h(`%${C(e)}%`)}},T=e=>{if(typeof e!=`object`||!e||Array.isArray(e)||e instanceof Date)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype};var E=class e{table;relations;parentAlias;nextPlaceholder;clauses=[];params=[];constructor(e,t,n,r){this.table=e,this.relations=t,this.parentAlias=n,this.nextPlaceholder=r}static from(t){return new e(t.table,t.relations,t.parentAlias,t.nextPlaceholder).build(t.where)}build(e){if(!e)return{sql:``,params:[]};for(let[t,n]of Object.entries(e)){if(n===void 0)continue;let e=this.getLogicalWhereKey(t);if(e){this.appendLogical(e,n);continue}let r=this.relations?.[t];if(r&&this.isRelationFilterValue(n)){this.appendRelation({relation:r,relationName:t,value:n,parentAlias:this.parentAlias??f(this.table.sqlName)});continue}this.appendField(t,n)}return{sql:this.clauses.join(` AND `),params:this.params}}appendField(e,t){if(!(e in this.table.columns))throw Error(`Unknown where key "${e}" on table ${this.table.sqlName}`);let n=this.table.columns[e];if(!n)throw Error(`Unknown where key "${e}" on table ${this.table.sqlName}`);let r=f(n.sqlName);if(!T(t)){this.appendDirect(n,r,t);return}this.appendOperators(n,r,e,t)}appendDirect(e,t,n){if(n===null){this.clauses.push(`${t} IS NULL`);return}this.clauses.push(`${t} = ${this.nextPlaceholder()}`),this.params.push(g(e,n))}appendOperators(e,t,n,r){let i=Object.entries(r);if(!i.length)throw Error(`Missing where operator for field ${n}`);for(let[r,a]of i){if(r===`in`||r===`notIn`){this.appendInOperator(e,t,n,r,a);continue}if(r===`between`){this.appendBetweenOperator(e,t,n,a);continue}let i=w[r];if(!i)throw Error(`Unknown where operator: ${r} for field ${n}`);if(r===`equals`&&a===null){this.clauses.push(`${t} IS NULL`);continue}this.clauses.push(`${t} ${i.sql(this.nextPlaceholder())}`),this.params.push(i.transform(g(e,a)))}}appendInOperator(e,t,n,r,i){if(!Array.isArray(i))throw Error(`Expected array for where operator: ${r} for field ${n}`);if(r===`in`&&i.length===0){this.clauses.push(b);return}if(r===`notIn`&&i.length===0)return;let a=i.map(()=>this.nextPlaceholder()),o=r===`in`?`IN`:`NOT IN`;this.clauses.push(`${t} ${o} (${a.join(`, `)})`);for(let t of i)this.params.push(g(e,t))}appendBetweenOperator(e,t,n,r){if(!Array.isArray(r))throw Error(`Expected array for where operator: between for field ${n}`);if(r.length!==2)throw Error(`Expected 2-element array for where operator: between for field ${n}`);let[i,a]=r,o=this.nextPlaceholder(),s=this.nextPlaceholder();this.clauses.push(`${t} BETWEEN ${o} AND ${s}`),this.params.push(g(e,i),g(e,a))}appendLogical(e,t){let n=this.collectLogicalClauses(e,t);if(typeof n==`string`){this.clauses.push(n);return}if(!n.nestedClauses.length)return;if(this.params.push(...n.nestedParams),e===`$not`){let e=n.nestedClauses.map(e=>`NOT (${e})`).join(` AND `);this.clauses.push(e);return}let r=this.getLogicalOperator(e);this.clauses.push(`(${n.nestedClauses.join(` ${r} `)})`)}collectLogicalClauses(t,n){let r=this.getLogicalWhereValues(t,n),i=[],a=[];for(let n of r){if(!T(n))throw Error(`${t} where value must contain object filters`);let r=e.from({nextPlaceholder:this.nextPlaceholder,table:this.table,where:n,relations:this.relations,parentAlias:this.parentAlias});if(!r.sql){if(t===`$or`)return x;continue}i.push(`(${r.sql})`),a.push(...r.params)}return t===`$or`&&!i.length?b:{nestedClauses:i,nestedParams:a}}appendRelation(e){let t=this.parseRelationFilters(e.relationName,e.value);for(let n of t)this.appendRelationFilter({...e,...n})}appendRelationFilter(t){let n=t.relation._table,r=`where_${t.relationName}__${n.sqlName}`,i=this.buildRelationForeignKeyCondition({relation:t.relation,relationTable:n,relationAlias:r,parentAlias:t.parentAlias}),a=e.from({nextPlaceholder:this.nextPlaceholder,table:n,where:t.where}),o=a.sql?a.sql:x;this.params.push(...a.params);let s=`${f(n.sqlName)} AS ${r}`;if(t.key===`some`){this.clauses.push(`EXISTS (SELECT 1 FROM ${s} WHERE ${i} AND (${o}))`);return}if(t.key===`none`){this.clauses.push(`NOT EXISTS (SELECT 1 FROM ${s} WHERE ${i} AND (${o}))`);return}this.clauses.push(`NOT EXISTS (SELECT 1 FROM ${s} WHERE ${i} AND NOT (${o}))`)}buildRelationForeignKeyCondition(e){if(e.relation._type===`hasMany`){let{fk:t,source:n}=p.resolveHasMany(this.table,e.relationTable);return`${e.relationAlias}.${f(t.sqlName)} = ${e.parentAlias}.${f(n.sqlName)}`}if(e.relation._type!==`hasOne`)throw Error(`Expected hasOne relation`);let{localForeignKey:t,target:n}=p.resolveHasOne({sourceTable:this.table,relationTable:e.relationTable,relationForeignKey:e.relation._foreignKey});return`${e.relationAlias}.${f(n.sqlName)} = ${e.parentAlias}.${f(t.sqlName)}`}parseRelationFilters(e,t){if(!T(t))throw Error(`Relation where filter for ${e} must be an object`);let n=t,r=[];for(let e of S){if(!(e in n))continue;let t=n[e];if(!T(t))throw Error(`Relation where filter ${e} must be an object`);r.push({key:e,where:t})}let i=new Set(S),a=Object.keys(n).filter(e=>!i.has(e));if(a.length)throw Error(`Relation where filter for ${e} has unknown operators: ${a.join(`, `)}`);if(r.length===0)throw Error(`Relation where filter for ${e} must include at least one of every, some, or none`);return r}isRelationFilterValue(e){if(!T(e))return!1;let t=e;for(let e of S)if(e in t)return!0;return Object.keys(t).length===0}getLogicalWhereKey(e){return e===`$and`||e===`$not`||e===`$or`?e:null}getLogicalOperator(e){return e===`$or`?`OR`:`AND`}getLogicalWhereValues(e,t){if(e===`$or`&&!Array.isArray(t))throw Error(`$or where value must be an array`);return Array.isArray(t)?t:[t]}};const D={sql:``,params:[],descriptors:[]},O=new class{build(e){let{table:t,parentAlias:n,relations:r,tableRelationsMap:i,include:a}=e;if(!a)return D;let o=Object.entries(a).filter(([,e])=>!!e);if(!o.length)return D;let s=[],c=[],l=[];for(let[a,u]of o){let o=r[a];if(!o)throw Error(`Unknown relation ${a} on table ${t.sqlName}`);let d=this.buildSubquery({spec:e.spec,nextPlaceholder:e.nextPlaceholder,parentTable:t,parentAlias:n,relation:o,relationName:a,includeValue:u,tableRelationsMap:i});s.push(`${d.sql} AS ${f(a)}`),c.push(...d.params),l.push(d.descriptor)}return{sql:s.join(`, `),params:c,descriptors:l}}buildSubquery(e){if(e.includeValue!==!0&&!this.isRelationIncludeOptions(e.includeValue))throw Error(`Invalid include options for relation ${e.relationName} on table ${e.parentTable.sqlName}`);let t=this.getRelationOptions(e.includeValue),n=e.relation._table,r=`${e.relationName}__${n.sqlName}`,i=this.buildNestedPairs({...e,relationTable:n,relationAlias:r,options:t}),a=this.buildJsonObject({spec:e.spec,alias:r,table:n,extraPairs:i.nestedExtraPairs,select:t.select}),o=E.from({nextPlaceholder:e.nextPlaceholder,table:n,where:t.where}),s=m.buildOrderBy(n,t.orderBy),c=m.buildPagination(e.spec,e.nextPlaceholder,t.take,t.skip),l=[...i.nestedParams,...o.params,...c.params];return e.relation._type===`hasMany`?this.buildHasManySubquery({...e,relationTable:n,relationAlias:r,jsonObj:a,nestedDescriptors:i.nestedDescriptors,whereSql:o.sql,orderBy:s,paginationSql:c.sql,allParams:l}):this.buildHasOneSubquery({...e,relationTable:n,relationAlias:r,jsonObj:a,nestedDescriptors:i.nestedDescriptors,whereSql:o.sql,allParams:l})}buildNestedPairs(e){let t=e.tableRelationsMap.get(e.relationTable)??{},n=[],r=[],i=[];if(!e.options.include)return{nestedExtraPairs:n,nestedParams:r,nestedDescriptors:i};for(let[a,o]of Object.entries(e.options.include)){if(!o)continue;let s=t[a];if(!s)throw Error(`Unknown relation ${a} on table ${e.relationTable.sqlName}`);let c=this.buildSubquery({spec:e.spec,nextPlaceholder:e.nextPlaceholder,parentTable:e.relationTable,parentAlias:e.relationAlias,relation:s,relationName:a,includeValue:o,tableRelationsMap:e.tableRelationsMap});n.push(`'${a}'`,c.sql),r.push(...c.params),i.push(c.descriptor)}return{nestedExtraPairs:n,nestedParams:r,nestedDescriptors:i}}buildJsonObject(e){let t=Object.entries(e.table.columns),n=e.select!==void 0&&Object.keys(e.select).length>0,r=t;if(n){let n=e.select??{};for(let t of Object.keys(n))if(!(t in e.table.columns))throw Error(`Unknown select key "${t}" on table ${e.table.sqlName}`);r=t.filter(([e])=>e in n)}let i=r.flatMap(([t,n])=>[`'${t}'`,`${e.alias}.${f(n.sqlName)}`]),a=e.extraPairs??[];return`${e.spec.jsonObjectFunctionName}(${[...i,...a].join(`, `)})`}buildHasManySubquery(e){let{fk:t,source:n}=p.resolveHasMany(e.parentTable,e.relationTable),r=`${e.relationAlias}.${f(t.sqlName)} = ${e.parentAlias}.${f(n.sqlName)}`,i=this.joinWhereSql(r,e.whereSql);return{sql:`COALESCE((${this.buildNestedHasManyQuery({spec:e.spec,relationTable:e.relationTable,relationAlias:e.relationAlias,whereSql:i,orderBy:e.orderBy,paginationSql:e.paginationSql,jsonObj:e.jsonObj})}), ${e.spec.emptyJsonArrayLiteral})`,params:e.allParams,descriptor:{name:e.relationName,type:`hasMany`,table:e.relationTable,nested:e.nestedDescriptors}}}buildHasOneSubquery(e){if(e.relation._type!==`hasOne`)throw Error(`Expected hasOne relation for ${e.relationName}`);let{localForeignKey:t,target:n}=p.resolveHasOne({sourceTable:e.parentTable,relationTable:e.relationTable,relationForeignKey:e.relation._foreignKey}),r=`${e.relationAlias}.${f(n.sqlName)} = ${e.parentAlias}.${f(t.sqlName)}`,i=this.joinWhereSql(r,e.whereSql);return{sql:`(${`SELECT ${e.jsonObj} FROM ${f(e.relationTable.sqlName)} AS ${e.relationAlias} WHERE ${i} LIMIT 1`})`,params:e.allParams,descriptor:{name:e.relationName,type:`hasOne`,table:e.relationTable,nested:e.nestedDescriptors}}}buildNestedHasManyQuery(e){if(!e.orderBy&&!e.paginationSql)return`SELECT ${e.spec.jsonArrayAggregateFunctionName}(${e.jsonObj}) FROM ${f(e.relationTable.sqlName)} AS ${e.relationAlias} WHERE ${e.whereSql}`;let t=`SELECT * FROM ${f(e.relationTable.sqlName)} AS ${e.relationAlias} WHERE ${e.whereSql}`;return e.orderBy&&(t=`${t} ORDER BY ${e.orderBy}`),e.paginationSql&&(t=`${t} ${e.paginationSql}`),`SELECT ${e.spec.jsonArrayAggregateFunctionName}(${e.jsonObj}) FROM (${t}) AS ${e.relationAlias}`}joinWhereSql(e,t){return t?`${e} AND ${t}`:e}isRelationIncludeOptions(e){return!(typeof e!=`object`||!e||Array.isArray(e))}getRelationOptions(e){let t={};return typeof e!=`object`||!e||Object.assign(t,e),t}};var k=class{spec;index=0;constructor(e){this.spec=e}next(){return this.index+=1,this.spec.formatPlaceholder(this.index)}asFn(){return()=>this.next()}},A=class{spec;table;relations;tableRelationsMap;constructor(e){this.spec=e.spec,this.table=e.table,this.relations=e.relations,this.tableRelationsMap=e.tableRelationsMap??new Map}buildFindMany(e){let t=new k(this.spec).asFn(),n=this.buildSelectIncludeWhere(t,{where:e?.where,select:e?.select,include:e?.include}),r=m.buildOrderBy(this.table,e?.orderBy),i=m.buildPagination(this.spec,t,e?.take,e?.skip),a=[...n.include.params,...n.where.params,...i.params];return{statement:m.buildStatement({tableName:f(this.table.sqlName),columns:n.selectColumns,where:n.where.sql,orderBy:r,pagination:i.sql}),params:a,includeDescriptors:n.include.descriptors}}buildFindFirst(e){return this.buildFindMany({...e,take:1})}buildFindUnique(e){v(this.table,e.where);let t=new k(this.spec).asFn(),n=this.buildSelectIncludeWhere(t,{where:e.where,select:e.select,include:e.include});return{statement:m.buildStatement({tableName:f(this.table.sqlName),columns:n.selectColumns,where:n.where.sql,orderBy:``,pagination:`LIMIT 1`}),params:[...n.include.params,...n.where.params],includeDescriptors:n.include.descriptors}}buildCreate(e){let t=new k(this.spec).asFn(),n=new Map(Object.entries(e.data)),r=[],i=[],a=[];for(let[e,o]of Object.entries(this.table.columns)){let s=_(o,n.get(e));r.push(f(o.sqlName)),i.push(t()),a.push(g(o,s))}let o=m.buildColumns(this.table,e.select),s=this.buildInclude(t,e.include),c=m.buildList(o,s);return{statement:`INSERT INTO ${f(this.table.sqlName)} (${r.join(`, `)}) VALUES (${i.join(`, `)}) RETURNING ${c}`,params:[...a,...s.params],includeDescriptors:s.descriptors}}buildUpdate(e){v(this.table,e.where);let t=new k(this.spec).asFn(),n=y({nextPlaceholder:t,table:this.table,data:e.data});if(!n.setClauses.length)throw Error(`update requires at least one field in data`);let r=this.buildWhereIncludeReturning(t,{where:e.where,select:e.select,include:e.include}),i=`UPDATE ${f(this.table.sqlName)} SET ${n.setClauses.join(`, `)}`;return r.where.sql&&(i=`${i} WHERE ${r.where.sql}`),i=`${i} RETURNING ${r.returning}`,n.params.push(...r.where.params,...r.include.params),{statement:i,params:n.params,includeDescriptors:r.include.descriptors}}buildDelete(e){v(this.table,e.where);let t=new k(this.spec).asFn(),n=this.buildWhereIncludeReturning(t,{where:e.where,select:e.select,include:e.include}),r=`DELETE FROM ${f(this.table.sqlName)}`;return n.where.sql&&(r=`${r} WHERE ${n.where.sql}`),r=`${r} RETURNING ${n.returning}`,{statement:r,params:[...n.where.params,...n.include.params],includeDescriptors:n.include.descriptors}}buildCreateMany(e){let t=new k(this.spec).asFn(),n=Object.entries(this.table.columns),r=n.map(([,e])=>f(e.sqlName)),i=[],a=[];for(let r of e.data){let e=r,o=[];for(let[r,a]of n){let n=_(a,e[r]);o.push(t()),i.push(g(a,n))}a.push(`(${o.join(`, `)})`)}let o=m.buildColumns(this.table,void 0);return{statement:`INSERT INTO ${f(this.table.sqlName)} (${r.join(`, `)}) VALUES ${a.join(`, `)} RETURNING ${o}`,params:i,includeDescriptors:[]}}buildUpdateMany(e){let t=new k(this.spec).asFn(),n=y({nextPlaceholder:t,table:this.table,data:e.data});if(!n.setClauses.length)throw Error(`updateMany requires at least one field in data`);let r=E.from({nextPlaceholder:t,table:this.table,where:e.where,relations:this.relations,parentAlias:f(this.table.sqlName)}),i=`UPDATE ${f(this.table.sqlName)} SET ${n.setClauses.join(`, `)}`;r.sql&&(i=`${i} WHERE ${r.sql}`),n.params.push(...r.params);let a=m.buildColumns(this.table,void 0);return i=`${i} RETURNING ${a}`,{statement:i,params:n.params,includeDescriptors:[]}}buildDeleteMany(e){let t=new k(this.spec).asFn(),n=E.from({nextPlaceholder:t,table:this.table,where:e.where,relations:this.relations,parentAlias:f(this.table.sqlName)}),r=`DELETE FROM ${f(this.table.sqlName)}`;n.sql&&(r=`${r} WHERE ${n.sql}`);let i=m.buildColumns(this.table,void 0);return r=`${r} RETURNING ${i}`,{statement:r,params:n.params,includeDescriptors:[]}}buildInclude(e,t){return O.build({spec:this.spec,nextPlaceholder:e,table:this.table,parentAlias:f(this.table.sqlName),relations:this.relations,tableRelationsMap:this.tableRelationsMap,include:t})}buildSelectIncludeWhere(e,t){let n=this.buildInclude(e,t.include),r=E.from({nextPlaceholder:e,table:this.table,where:t.where,relations:this.relations,parentAlias:f(this.table.sqlName)}),i=m.buildColumns(this.table,t.select);return{include:n,where:r,selectColumns:m.buildList(i,n)}}buildWhereIncludeReturning(e,t){let n=E.from({nextPlaceholder:e,table:this.table,where:t.where,relations:this.relations,parentAlias:f(this.table.sqlName)}),r=m.buildColumns(this.table,t.select),i=this.buildInclude(e,t.include);return{where:n,include:i,returning:m.buildList(r,i)}}},j=class{parseRows(e){let{table:t,rows:n,descriptors:r}=e,i=new Map;for(let e of n)this.coerceRow({row:e,table:t,descriptors:r,columnKeyCache:i})}async executeQuery(e,t,n){let r=[...await e.unsafe(n.statement,n.params)];return this.parseRows({table:t,rows:r,descriptors:n.includeDescriptors}),r}coerceRow(e){let{row:t,table:n,descriptors:r,columnKeyCache:i}=e;this.coerceColumnValues(t,n,i),this.coerceRelationValues(t,r,i)}coerceColumnValues(e,t,n){let{boolKeys:r,jsonKeys:i}=this.getCachedColumnKeysByType(t,n);for(let t of r)t in e&&(e[t]=this.coerceBooleanValue(e[t]));for(let t of i){if(!(t in e))continue;let n=e[t];typeof n==`string`&&(e[t]=JSON.parse(n))}}coerceRelationValues(e,t,n){for(let r of t)this.coerceRelationValue({row:e,descriptor:r,columnKeyCache:n})}coerceRelationValue(e){let{row:t,descriptor:n}=e,r=t[n.name];if(r===null){n.type===`hasMany`&&(t[n.name]=[]);return}let i=n.nested??[];if(typeof r==`string`){let a=JSON.parse(r);this.coerceRelationItems({value:a,table:n.table,nested:i,columnKeyCache:e.columnKeyCache}),t[n.name]=a;return}this.coerceRelationItems({value:r,table:n.table,nested:i,columnKeyCache:e.columnKeyCache})}coerceRelationItems(e){let{value:t,table:n,nested:r,columnKeyCache:i}=e;if(Array.isArray(t)){for(let e of t)typeof e==`object`&&e&&this.coerceRow({row:e,table:n,descriptors:r,columnKeyCache:i});return}typeof t==`object`&&t&&this.coerceRow({row:t,table:n,descriptors:r,columnKeyCache:i})}getCachedColumnKeysByType(e,t){let n=t.get(e);if(n)return n;let r=this.getColumnKeysByType(e);return t.set(e,r),r}coerceBooleanValue(e){return e==null?e:!!e}getColumnKeysByType(e){let t=new Set,n=new Set;for(let[r,i]of Object.entries(e.columns))i.type===`boolean`&&t.add(r),i.type===`json`&&n.add(r),i.type===`jsonb`&&n.add(r);return{boolKeys:t,jsonKeys:n}}},M=class{name;builder;parser=new j;constructor(e){this.name=e.spec.name,this.builder=new A(e)}async findMany(e,t){let n=this.builder.buildFindMany(t);return this.parser.executeQuery(e,this.builder.table,n)}async findFirst(e,t){let n=this.builder.buildFindFirst(t),[r]=await this.parser.executeQuery(e,this.builder.table,n);return r??null}async findUnique(e,t){let n=this.builder.buildFindUnique(t),[r]=await this.parser.executeQuery(e,this.builder.table,n);return r??null}async create(e,t){let n=this.builder.buildCreate(t);return this.executeOne(e,n,`insert`)}async createMany(e,t){if(!t.data.length)return[];let n=this.builder.buildCreateMany(t);return this.parser.executeQuery(e,this.builder.table,n)}async update(e,t){let n=this.builder.buildUpdate(t);return this.executeOne(e,n,`update`)}async updateMany(e,t){let n=this.builder.buildUpdateMany(t);return this.parser.executeQuery(e,this.builder.table,n)}async delete(e,t){let n=this.builder.buildDelete(t);return this.executeOne(e,n,`delete`)}async deleteMany(e,t){let n=this.builder.buildDeleteMany(t);return this.parser.executeQuery(e,this.builder.table,n)}async executeOne(e,t,n){let[r]=await this.parser.executeQuery(e,this.builder.table,t);if(!r)throw Error(`Record not found after ${n} on table ${this.builder.table.sqlName}`);return r}};const N={name:`postgres`,formatPlaceholder:e=>`$${e}`,unlimitedOffsetKeyword:`LIMIT ALL OFFSET`,jsonObjectFunctionName:`jsonb_build_object`,jsonArrayAggregateFunctionName:`jsonb_agg`,emptyJsonArrayLiteral:`'[]'::jsonb`},P={name:`sqlite`,formatPlaceholder:()=>`?`,unlimitedOffsetKeyword:`LIMIT -1 OFFSET`,jsonObjectFunctionName:`json_object`,jsonArrayAggregateFunctionName:`json_group_array`,emptyJsonArrayLiteral:`'[]'`},F=e=>{let t={...e,tableRelationsMap:e.tableRelationsMap??new Map};switch(e.adapter){case`sqlite`:return new M({spec:P,...t});case`postgres`:return new M({spec:N,...t});default:throw Error(`Unsupported adapter: ${e.adapter}`)}};var I=class{sql;dialect;hooks;tableName;table;globalHooks;tableHooks;constructor(e){this.sql=e.sql,this.tableName=e.tableName,this.table=e.table,this.globalHooks=e.globalHooks,this.tableHooks=e.tableHooks,this.dialect=F(e),this.hooks=new u(e.tableName,e.table)}findMany(e){let t=this.hooks.shouldSkip(e),n=this.hooks.toHookOptions(e);return this.hooks.withReadHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeFindMany,beforeTable:this.tableHooks?.beforeFindMany,afterGlobal:this.globalHooks?.afterFindMany,afterTable:this.tableHooks?.afterFindMany,query:()=>this.dialect.findMany(this.sql,n)})}findFirst(e){let t=this.hooks.shouldSkip(e),n=this.hooks.toHookOptions(e);return this.hooks.withReadHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeFindFirst,beforeTable:this.tableHooks?.beforeFindFirst,afterGlobal:this.globalHooks?.afterFindFirst,afterTable:this.tableHooks?.afterFindFirst,query:()=>this.dialect.findFirst(this.sql,n)})}findUnique(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.hooks.withReadHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeFindUnique,beforeTable:this.tableHooks?.beforeFindUnique,afterGlobal:this.globalHooks?.afterFindUnique,afterTable:this.tableHooks?.afterFindUnique,query:()=>this.dialect.findUnique(this.sql,n)})}create(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.withMutationHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeCreate,beforeTable:this.tableHooks?.beforeCreate,afterGlobal:this.globalHooks?.afterCreate,afterTable:this.tableHooks?.afterCreate,query:e=>this.dialect.create(this.sql,e)})}createMany(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.withMutationHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeCreateMany,beforeTable:this.tableHooks?.beforeCreateMany,afterGlobal:this.globalHooks?.afterCreateMany,afterTable:this.tableHooks?.afterCreateMany,query:e=>this.dialect.createMany(this.sql,e)})}update(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.withMutationHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeUpdate,beforeTable:this.tableHooks?.beforeUpdate,afterGlobal:this.globalHooks?.afterUpdate,afterTable:this.tableHooks?.afterUpdate,query:e=>this.dialect.update(this.sql,e)})}updateMany(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.withMutationHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeUpdateMany,beforeTable:this.tableHooks?.beforeUpdateMany,afterGlobal:this.globalHooks?.afterUpdateMany,afterTable:this.tableHooks?.afterUpdateMany,query:e=>this.dialect.updateMany(this.sql,e)})}delete(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.withMutationHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeDelete,beforeTable:this.tableHooks?.beforeDelete,afterGlobal:this.globalHooks?.afterDelete,afterTable:this.tableHooks?.afterDelete,query:e=>this.dialect.delete(this.sql,e)})}deleteMany(e){let t=this.hooks.shouldSkip(e),n=this.hooks.stripSkipHooks(e);return this.withMutationHooks({skipHooks:t,hookOptions:n,beforeGlobal:this.globalHooks?.beforeDeleteMany,beforeTable:this.tableHooks?.beforeDeleteMany,afterGlobal:this.globalHooks?.afterDeleteMany,afterTable:this.tableHooks?.afterDeleteMany,query:e=>this.dialect.deleteMany(this.sql,e)})}async withMutationHooks(e){let t=e.hookOptions;if(!e.skipHooks){let n={tableName:this.tableName,table:this.table,options:e.hookOptions},r=await e.beforeGlobal?.(n);t=L(e.hookOptions,r);let i=await e.beforeTable?.({...n,options:t});t=L(t,i)}let n=await e.query(t);return e.skipHooks||await this.hooks.runReadHooks(e.afterGlobal,e.afterTable,{tableName:this.tableName,table:this.table,options:t,result:n}),n}};const L=(e,t)=>typeof t!=`object`||!t?e:{...e,...t};var R=class{$raw;options;tableRelationsMap=new Map;constructor(e){this.options=e,this.$raw=new Bun.SQL(e.url,{adapter:e.adapter})}buildClient(){let e=this.buildTableClients(this.$raw),t=this.buildTransaction();return{...e,$raw:this.$raw,$transaction:t}}buildTableClients(e){let t=Object.create(null);for(let n of this.toObjectEntries(this.options.tables))this.setTableClient(t,e,n[0],n[1]);return t}setTableClient(e,t,n,r){let i=this.getTableRelations(n);this.tableRelationsMap.set(r,i),e[n]=new I({sql:t,tableName:n,table:r,adapter:this.options.adapter,relations:i,tableRelationsMap:this.tableRelationsMap,globalHooks:this.options.hooks?d(this.options.hooks):void 0,tableHooks:this.options.hooks?.tables?.[n]})}buildTransaction(){return async e=>await this.$raw.begin(async t=>await e({...this.buildTableClients(t),$raw:t}))}getTableRelations(e){return this.options.relations?.[e]||Object.create(null)}toObjectEntries(e){let t=[];for(let n in e)Object.hasOwn(e,n)&&t.push([n,e[n]]);return t}};const z=e=>new R(e).buildClient();var B=class{_type=`hasMany`;_table;constructor(e){this._table=e}},V=class{_type=`hasOne`;_table;_foreignKey;constructor(e,t){this._foreignKey=e,this._table=t}};const H=e=>new B(e()),U=(e,t)=>new V(e,t()),W=(e,t)=>({sqlName:e,columns:t});export{a as boolean,z as createOrm,o as date,W as defineTable,s as enumType,c as json,l as jsonb,H as many,i as number,U as one,n as string,r as uuid};