arkormx 2.6.1 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- import { Collection } from "@h3ravel/collect.js";
2
1
  import { Kysely, Transaction } from "kysely";
3
- import { Command } from "@h3ravel/musket";
4
2
  import { PrismaClient } from "@prisma/client";
3
+ import { Collection } from "@h3ravel/collect.js";
4
+ import { Command } from "@h3ravel/musket";
5
5
 
6
6
  //#region src/types/migrations.d.ts
7
7
  type SchemaColumnType = 'id' | 'uuid' | 'enum' | 'string' | 'text' | 'integer' | 'bigInteger' | 'float' | 'boolean' | 'json' | 'date' | 'timestamp';
@@ -121,6 +121,17 @@ interface AppliedMigrationsState {
121
121
  runs?: AppliedMigrationRun[];
122
122
  }
123
123
  type MigrationClass = new () => MigrationInstanceLike;
124
+ /**
125
+ * Concrete createdAt / updatedAt names used by the timestamp helper.
126
+ */
127
+ interface TimestampNames {
128
+ createdAt: string;
129
+ updatedAt: string;
130
+ }
131
+ /**
132
+ * Casing keyword or explicit name overrides accepted by `timestamps()`.
133
+ */
134
+ type TimestampNaming = 'camel' | 'snake' | Partial<TimestampNames>;
124
135
  //#endregion
125
136
  //#region src/types/metadata.d.ts
126
137
  type ColumnMap = Record<string, string>;
@@ -2072,7 +2083,19 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2072
2083
  protected readonly attributes: Record<string, unknown>;
2073
2084
  protected original: Record<string, unknown>;
2074
2085
  protected changes: Record<string, unknown>;
2086
+ protected previous: Record<string, unknown>;
2075
2087
  protected readonly touchedAttributes: Set<string>;
2088
+ /**
2089
+ * Indicates whether the model corresponds to a row that exists in the
2090
+ * database. Hydrated and freshly inserted models are marked as existing;
2091
+ * models built with `new Model(...)` are not until they are saved.
2092
+ */
2093
+ exists: boolean;
2094
+ /**
2095
+ * Indicates whether the model was inserted during the current lifecycle
2096
+ * (i.e. the last successful save performed a create rather than an update).
2097
+ */
2098
+ wasRecentlyCreated: boolean;
2076
2099
  constructor(attributes?: Record<string, unknown>);
2077
2100
  private static emitDeprecationWarning;
2078
2101
  /**
@@ -2228,6 +2251,48 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2228
2251
  * @returns
2229
2252
  */
2230
2253
  static scope<TThis extends abstract new (attributes?: Record<string, unknown>) => Model<any, any>, TModel extends Model<any, any> = InstanceType<TThis>, TDelegate extends ModelQuerySchemaLike = QuerySchemaForModel<TModel extends Model<infer TSchema, any> ? TSchema : Record<string, any>, TModel extends Model<any, infer TAttributes> ? TAttributes : Record<string, any>>>(this: TThis, name: string, ...args: unknown[]): QueryBuilder<TModel, TDelegate>;
2254
+ /**
2255
+ * Start a query constrained by the given where clause.
2256
+ *
2257
+ * @param this
2258
+ * @param where
2259
+ * @returns
2260
+ */
2261
+ static where<TThis extends abstract new (attributes?: Record<string, unknown>) => Model<any, any>, TModel extends Model<any, any> = InstanceType<TThis>, TDelegate extends ModelQuerySchemaLike = QuerySchemaForModel<TModel extends Model<infer TSchema, any> ? TSchema : Record<string, any>, TModel extends Model<any, infer TAttributes> ? TAttributes : Record<string, any>>>(this: TThis, where: QuerySchemaWhere<TDelegate>): QueryBuilder<TModel, TDelegate>;
2262
+ /**
2263
+ * Retrieve all records for the model.
2264
+ *
2265
+ * @param this
2266
+ * @returns
2267
+ */
2268
+ static all<TThis extends abstract new (attributes?: Record<string, unknown>) => Model<any, any>, TModel extends Model<any, any> = InstanceType<TThis>, TDelegate extends ModelQuerySchemaLike = QuerySchemaForModel<TModel extends Model<infer TSchema, any> ? TSchema : Record<string, any>, TModel extends Model<any, infer TAttributes> ? TAttributes : Record<string, any>>>(this: TThis): Promise<ArkormCollection<TModel>>;
2269
+ /**
2270
+ * Create and persist a new record, returning the hydrated model instance.
2271
+ *
2272
+ * @param this
2273
+ * @param data
2274
+ * @returns
2275
+ */
2276
+ static create<TThis extends abstract new (attributes?: Record<string, unknown>) => Model<any, any>, TModel extends Model<any, any> = InstanceType<TThis>, TDelegate extends ModelQuerySchemaLike = QuerySchemaForModel<TModel extends Model<infer TSchema, any> ? TSchema : Record<string, any>, TModel extends Model<any, infer TAttributes> ? TAttributes : Record<string, any>>>(this: TThis, data: ModelCreateData<TModel, TDelegate>): Promise<TModel>;
2277
+ /**
2278
+ * Insert new records or update existing records by one or more unique keys.
2279
+ *
2280
+ * @param this
2281
+ * @param values
2282
+ * @param uniqueBy
2283
+ * @param update
2284
+ * @returns
2285
+ */
2286
+ static upsert<TThis extends abstract new (attributes?: Record<string, unknown>) => Model<any, any>, TModel extends Model<any, any> = InstanceType<TThis>, TDelegate extends ModelQuerySchemaLike = QuerySchemaForModel<TModel extends Model<infer TSchema, any> ? TSchema : Record<string, any>, TModel extends Model<any, infer TAttributes> ? TAttributes : Record<string, any>>>(this: TThis, values: Array<Record<string, unknown>>, uniqueBy: string | string[], update?: string[] | null): Promise<number>;
2287
+ /**
2288
+ * Delete records by their primary key(s), dispatching model events for each
2289
+ * matched record. Returns the number of records deleted.
2290
+ *
2291
+ * @param this
2292
+ * @param ids
2293
+ * @returns
2294
+ */
2295
+ static destroy<TThis extends abstract new (attributes?: Record<string, unknown>) => Model<any, any>, TModel extends Model<any, any> = InstanceType<TThis>, TDelegate extends ModelQuerySchemaLike = QuerySchemaForModel<TModel extends Model<infer TSchema, any> ? TSchema : Record<string, any>, TModel extends Model<any, infer TAttributes> ? TAttributes : Record<string, any>>>(this: TThis, ids: string | number | Array<string | number>): Promise<number>;
2231
2296
  /**
2232
2297
  * Get the soft delete configuration for the model, including whether
2233
2298
  * soft deletes are enabled and the name of the deleted at column.
@@ -2286,6 +2351,15 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2286
2351
  */
2287
2352
  update(attributes: Partial<TAttributes>): Promise<boolean>;
2288
2353
  update(attributes: Record<string, unknown>): Promise<boolean>;
2354
+ /**
2355
+ * Update the model and persist it within a transaction, rethrowing on
2356
+ * failure. Unlike update(), errors are not swallowed.
2357
+ *
2358
+ * @param attributes
2359
+ * @returns
2360
+ */
2361
+ updateOrFail(attributes: Partial<TAttributes>): Promise<this>;
2362
+ updateOrFail(attributes: Record<string, unknown>): Promise<this>;
2289
2363
  /**
2290
2364
  * Get the value of an attribute, applying any get mutators or casts if defined.
2291
2365
  *
@@ -2305,8 +2379,10 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2305
2379
  setAttribute(key: string, value: unknown): this;
2306
2380
  /**
2307
2381
  * Save the model to the database.
2308
- * If the model has an identifier (id), it will perform an update.
2309
- * Otherwise, it will perform a create.
2382
+ * If the model already exists in the database it performs an update;
2383
+ * otherwise it performs an insert. Existence is tracked through the
2384
+ * `exists` flag rather than the presence of a primary-key value, so a model
2385
+ * built with an explicit primary key still inserts on its first save.
2310
2386
  *
2311
2387
  * @returns
2312
2388
  */
@@ -2317,6 +2393,13 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2317
2393
  * @returns
2318
2394
  */
2319
2395
  saveQuietly(): Promise<this>;
2396
+ /**
2397
+ * Save the model within a transaction, rolling back and rethrowing if the
2398
+ * operation fails. Unlike update(), this never swallows errors.
2399
+ *
2400
+ * @returns
2401
+ */
2402
+ saveOrFail(): Promise<this>;
2320
2403
  /**
2321
2404
  * Delete the model from the database.
2322
2405
  * If soft deletes are enabled, it will perform a soft delete by
@@ -2332,6 +2415,13 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2332
2415
  * @returns
2333
2416
  */
2334
2417
  deleteQuietly(): Promise<this>;
2418
+ /**
2419
+ * Delete the model within a transaction, rolling back and rethrowing if the
2420
+ * operation fails.
2421
+ *
2422
+ * @returns
2423
+ */
2424
+ deleteOrFail(): Promise<this>;
2335
2425
  /**
2336
2426
  * Permanently delete the model from the database, regardless of whether soft
2337
2427
  * deletes are enabled.
@@ -2432,6 +2522,24 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2432
2522
  * @returns
2433
2523
  */
2434
2524
  wasChanged(keys?: string | string[]): boolean;
2525
+ /**
2526
+ * Get the attributes that were changed during the last successful
2527
+ * persistence operation.
2528
+ *
2529
+ * @returns
2530
+ */
2531
+ getChanges(): Partial<TAttributes>;
2532
+ /**
2533
+ * Get the attribute snapshot that was persisted before the last successful
2534
+ * persistence operation.
2535
+ *
2536
+ * @returns
2537
+ */
2538
+ getPrevious(): Partial<TAttributes>;
2539
+ /**
2540
+ * @param key The attribute key to retrieve the previous value for.
2541
+ */
2542
+ getPrevious<TKey extends keyof TAttributes & string>(key: TKey): TAttributes[TKey] | undefined;
2435
2543
  /**
2436
2544
  * Convert the model instance to a plain object, applying visibility
2437
2545
  * rules, appends, and mutators.
@@ -2665,6 +2773,13 @@ declare abstract class Model<TSchema extends ModelQuerySchemaLike | Record<strin
2665
2773
  * @param previousOriginal
2666
2774
  */
2667
2775
  private syncChanges;
2776
+ /**
2777
+ * Capture the attribute snapshot that was persisted before the most recent
2778
+ * save so it can be read back via getPrevious().
2779
+ *
2780
+ * @param previousOriginal
2781
+ */
2782
+ private syncPrevious;
2668
2783
  /**
2669
2784
  * Resolve lifecycle state for the provided model class.
2670
2785
  *
@@ -2825,11 +2940,126 @@ type ModelLifecycleState = {
2825
2940
  globalScopesSuppressed: number;
2826
2941
  };
2827
2942
  //#endregion
2943
+ //#region src/JoinClause.d.ts
2944
+ /**
2945
+ * A fluent builder for the `on`/`where` constraints of a join clause.
2946
+ *
2947
+ * Instances are handed to the closure form of the query builder join helpers
2948
+ * (for example `query.join('posts', join => join.on(...).where(...))`) and
2949
+ * mirror Laravel's `JoinClause` surface. Column identifiers are treated as raw
2950
+ * database identifiers (qualify them as `table.column` when needed).
2951
+ *
2952
+ * @author Legacy (3m1n3nc3)
2953
+ */
2954
+ declare class JoinClause {
2955
+ private readonly constraints;
2956
+ /**
2957
+ * Adds a column-to-column `on` constraint, joined with `and`.
2958
+ *
2959
+ * Accepts either a closure (for a nested group) or a column comparison in
2960
+ * the `(first, second)` or `(first, operator, second)` form.
2961
+ *
2962
+ * @param first The left-hand column or a nested closure.
2963
+ * @param operator The comparison operator (defaults to `=`).
2964
+ * @param second The right-hand column.
2965
+ * @returns
2966
+ */
2967
+ on(first: string | ((join: JoinClause) => void), operator?: QueryScalarComparisonOperator | string, second?: string): this;
2968
+ /**
2969
+ * Adds a column-to-column `on` constraint, joined with `or`.
2970
+ *
2971
+ * @param first The left-hand column or a nested closure.
2972
+ * @param operator The comparison operator (defaults to `=`).
2973
+ * @param second The right-hand column.
2974
+ * @returns
2975
+ */
2976
+ orOn(first: string | ((join: JoinClause) => void), operator?: QueryScalarComparisonOperator | string, second?: string): this;
2977
+ /**
2978
+ * Adds a column-to-value constraint, joined with `and`.
2979
+ *
2980
+ * @param column The column being compared.
2981
+ * @param operator The comparison operator or the value when omitted.
2982
+ * @param value The value to compare against.
2983
+ * @returns
2984
+ */
2985
+ where(column: string, operator?: QueryComparisonOperator | string | DatabaseValue, value?: DatabaseValue): this;
2986
+ /**
2987
+ * Adds a column-to-value constraint, joined with `or`.
2988
+ *
2989
+ * @param column The column being compared.
2990
+ * @param operator The comparison operator or the value when omitted.
2991
+ * @param value The value to compare against.
2992
+ * @returns
2993
+ */
2994
+ orWhere(column: string, operator?: QueryComparisonOperator | string | DatabaseValue, value?: DatabaseValue): this;
2995
+ /**
2996
+ * Adds an `is null` constraint joined with `and`.
2997
+ *
2998
+ * @param column The column to test for null.
2999
+ * @returns
3000
+ */
3001
+ whereNull(column: string): this;
3002
+ /**
3003
+ * Adds an `is null` constraint joined with `or`.
3004
+ *
3005
+ * @param column The column to test for null.
3006
+ * @returns
3007
+ */
3008
+ orWhereNull(column: string): this;
3009
+ /**
3010
+ * Adds an `is not null` constraint joined with `and`.
3011
+ *
3012
+ * @param column The column to test for non-null.
3013
+ * @returns
3014
+ */
3015
+ whereNotNull(column: string): this;
3016
+ /**
3017
+ * Adds an `is not null` constraint joined with `or`.
3018
+ *
3019
+ * @param column The column to test for non-null.
3020
+ * @returns
3021
+ */
3022
+ orWhereNotNull(column: string): this;
3023
+ /**
3024
+ * Adds a raw constraint joined with `and`.
3025
+ *
3026
+ * @param sql The raw SQL fragment (with `?` placeholders for bindings).
3027
+ * @param bindings The values bound to the placeholders.
3028
+ * @returns
3029
+ */
3030
+ onRaw(sql: string, bindings?: DatabaseValue[]): this;
3031
+ /**
3032
+ * Adds a raw constraint joined with `or`.
3033
+ *
3034
+ * @param sql The raw SQL fragment (with `?` placeholders for bindings).
3035
+ * @param bindings The values bound to the placeholders.
3036
+ * @returns
3037
+ */
3038
+ orOnRaw(sql: string, bindings?: DatabaseValue[]): this;
3039
+ /**
3040
+ * Returns the accumulated constraints for this join clause.
3041
+ *
3042
+ * @returns
3043
+ */
3044
+ getConstraints(): QueryJoinConstraint[];
3045
+ private addOn;
3046
+ private addWhere;
3047
+ }
3048
+ //#endregion
2828
3049
  //#region src/QueryBuilder.d.ts
2829
3050
  type RelatedModelFromResult<TResult> = TResult extends ArkormCollection<infer TRelated> ? TRelated : Exclude<TResult, null | undefined>;
2830
3051
  type RelatedModelForRelationship<TModel, TKey extends ModelRelationshipKey<TModel>> = TModel[TKey] extends ((...args: any[]) => infer TRelation) ? TRelation extends {
2831
3052
  getResults: (...args: any[]) => Promise<infer TResult>;
2832
3053
  } ? RelatedModelFromResult<TResult> : never : never;
3054
+ /**
3055
+ * The left-hand argument accepted by the join helpers: either a column name or a
3056
+ * closure that configures the join constraints through a {@link JoinClause}.
3057
+ */
3058
+ type JoinOn = string | ((join: JoinClause) => void);
3059
+ /**
3060
+ * A subquery source accepted by the subquery/lateral join helpers.
3061
+ */
3062
+ type JoinSource = QueryBuilder<any, any> | string;
2833
3063
  type EagerLoadRelations<TModel> = { [TKey in ModelRelationshipKey<TModel>]?: true | EagerLoadConstraint<QueryBuilder<RelatedModelForRelationship<TModel, TKey>, QuerySchemaForModelInstance<RelatedModelForRelationship<TModel, TKey>>>> };
2834
3064
  /**
2835
3065
  * The QueryBuilder class provides a fluent interface for building and
@@ -2849,6 +3079,7 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
2849
3079
  private querySelect?;
2850
3080
  private queryDistinct;
2851
3081
  private queryGroupBy?;
3082
+ private queryJoins?;
2852
3083
  private offsetValue?;
2853
3084
  private limitValue?;
2854
3085
  private readonly eagerLoads;
@@ -3449,6 +3680,166 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
3449
3680
  */
3450
3681
  groupBy<TKey extends keyof ModelAttributes<TModel> & string>(columns: TKey[]): this;
3451
3682
  groupBy<TKey extends keyof ModelAttributes<TModel> & string>(...columns: TKey[]): this;
3683
+ /**
3684
+ * Adds a join clause to the query.
3685
+ *
3686
+ * The `first`/`second` arguments are treated as raw database identifiers, so
3687
+ * qualify them as `table.column` when needed. Pass a closure as `first` to
3688
+ * build a compound `on` condition through a {@link JoinClause}.
3689
+ *
3690
+ * @param table The table (or aliased table) to join.
3691
+ * @param first The left-hand column or a closure receiving a JoinClause.
3692
+ * @param operator The comparison operator (defaults to `=`).
3693
+ * @param second The right-hand column.
3694
+ * @param type The join type (defaults to `inner`).
3695
+ * @returns
3696
+ */
3697
+ join(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string, type?: QueryJoinType): this;
3698
+ /**
3699
+ * Adds an inner join clause to the query.
3700
+ *
3701
+ * @param table The table (or aliased table) to join.
3702
+ * @param first The left-hand column or a closure receiving a JoinClause.
3703
+ * @param operator The comparison operator (defaults to `=`).
3704
+ * @param second The right-hand column.
3705
+ * @returns
3706
+ */
3707
+ innerJoin(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3708
+ /**
3709
+ * Adds a left join clause to the query.
3710
+ *
3711
+ * @param table The table (or aliased table) to join.
3712
+ * @param first The left-hand column or a closure receiving a JoinClause.
3713
+ * @param operator The comparison operator (defaults to `=`).
3714
+ * @param second The right-hand column.
3715
+ * @returns
3716
+ */
3717
+ leftJoin(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3718
+ /**
3719
+ * Adds a right join clause to the query.
3720
+ *
3721
+ * @param table The table (or aliased table) to join.
3722
+ * @param first The left-hand column or a closure receiving a JoinClause.
3723
+ * @param operator The comparison operator (defaults to `=`).
3724
+ * @param second The right-hand column.
3725
+ * @returns
3726
+ */
3727
+ rightJoin(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3728
+ /**
3729
+ * Adds a cross join clause to the query.
3730
+ *
3731
+ * When a `first` column (or closure) is supplied the cross join is promoted
3732
+ * to an inner join with the given constraints, mirroring Laravel's behaviour.
3733
+ *
3734
+ * @param table The table (or aliased table) to join.
3735
+ * @param first Optional column or closure to constrain the join.
3736
+ * @returns
3737
+ */
3738
+ crossJoin(table: string, first?: JoinOn): this;
3739
+ /**
3740
+ * Adds a join clause that compares a column to a value.
3741
+ *
3742
+ * @param table The table (or aliased table) to join.
3743
+ * @param first The column being compared.
3744
+ * @param operator The comparison operator.
3745
+ * @param value The value to compare against.
3746
+ * @param type The join type (defaults to `inner`).
3747
+ * @returns
3748
+ */
3749
+ joinWhere(table: string, first: string, operator: QueryComparisonOperator | string, value: DatabaseValue, type?: QueryJoinType): this;
3750
+ /**
3751
+ * Adds a left join clause that compares a column to a value.
3752
+ *
3753
+ * @param table The table (or aliased table) to join.
3754
+ * @param first The column being compared.
3755
+ * @param operator The comparison operator.
3756
+ * @param value The value to compare against.
3757
+ * @returns
3758
+ */
3759
+ leftJoinWhere(table: string, first: string, operator: QueryComparisonOperator | string, value: DatabaseValue): this;
3760
+ /**
3761
+ * Adds a right join clause that compares a column to a value.
3762
+ *
3763
+ * @param table The table (or aliased table) to join.
3764
+ * @param first The column being compared.
3765
+ * @param operator The comparison operator.
3766
+ * @param value The value to compare against.
3767
+ * @returns
3768
+ */
3769
+ rightJoinWhere(table: string, first: string, operator: QueryComparisonOperator | string, value: DatabaseValue): this;
3770
+ /**
3771
+ * Adds a subquery join clause to the query.
3772
+ *
3773
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3774
+ * @param alias The alias assigned to the subquery.
3775
+ * @param first The left-hand column or a closure receiving a JoinClause.
3776
+ * @param operator The comparison operator (defaults to `=`).
3777
+ * @param second The right-hand column.
3778
+ * @param type The join type (defaults to `inner`).
3779
+ * @returns
3780
+ */
3781
+ joinSub(query: JoinSource, alias: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string, type?: QueryJoinType): this;
3782
+ /**
3783
+ * Adds a subquery left join clause to the query.
3784
+ *
3785
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3786
+ * @param alias The alias assigned to the subquery.
3787
+ * @param first The left-hand column or a closure receiving a JoinClause.
3788
+ * @param operator The comparison operator (defaults to `=`).
3789
+ * @param second The right-hand column.
3790
+ * @returns
3791
+ */
3792
+ leftJoinSub(query: JoinSource, alias: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3793
+ /**
3794
+ * Adds a subquery right join clause to the query.
3795
+ *
3796
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3797
+ * @param alias The alias assigned to the subquery.
3798
+ * @param first The left-hand column or a closure receiving a JoinClause.
3799
+ * @param operator The comparison operator (defaults to `=`).
3800
+ * @param second The right-hand column.
3801
+ * @returns
3802
+ */
3803
+ rightJoinSub(query: JoinSource, alias: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3804
+ /**
3805
+ * Adds a cross subquery join clause to the query.
3806
+ *
3807
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3808
+ * @param alias The alias assigned to the subquery.
3809
+ * @returns
3810
+ */
3811
+ crossJoinSub(query: JoinSource, alias: string): this;
3812
+ /**
3813
+ * Adds a lateral join clause to the query.
3814
+ *
3815
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3816
+ * @param alias The alias assigned to the subquery.
3817
+ * @param type The join type (defaults to `inner`).
3818
+ * @returns
3819
+ */
3820
+ joinLateral(query: JoinSource, alias: string, type?: QueryJoinType): this;
3821
+ /**
3822
+ * Adds a lateral left join clause to the query.
3823
+ *
3824
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3825
+ * @param alias The alias assigned to the subquery.
3826
+ * @returns
3827
+ */
3828
+ leftJoinLateral(query: JoinSource, alias: string): this;
3829
+ /**
3830
+ * Builds a self-contained select specification used when this query is joined
3831
+ * as a subquery by another query builder.
3832
+ *
3833
+ * @returns
3834
+ */
3835
+ private buildJoinSubquerySpec;
3836
+ private guardJoinSupport;
3837
+ private pushJoin;
3838
+ private resolveJoinConstraints;
3839
+ private resolveJoinSource;
3840
+ private addJoin;
3841
+ private addJoinWhere;
3842
+ private addJoinSub;
3452
3843
  /**
3453
3844
  * Adds a skip clause to the query for pagination.
3454
3845
  * This will overwrite any existing skip clause.
@@ -3512,6 +3903,35 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
3512
3903
  * @returns
3513
3904
  */
3514
3905
  firstOrFail(): Promise<TModel>;
3906
+ /**
3907
+ * Returns the first record matching the given attributes or instantiates a
3908
+ * new, unpersisted model populated with the merged attributes and values.
3909
+ *
3910
+ * @param attributes
3911
+ * @param values
3912
+ * @returns
3913
+ */
3914
+ firstOrNew(attributes: Record<string, unknown>, values?: Record<string, unknown>): Promise<TModel>;
3915
+ /**
3916
+ * Returns the first record matching the given attributes or creates and
3917
+ * persists a new record populated with the merged attributes and values.
3918
+ *
3919
+ * @param attributes
3920
+ * @param values
3921
+ * @returns
3922
+ */
3923
+ firstOrCreate(attributes: Record<string, unknown>, values?: Record<string, unknown>): Promise<TModel>;
3924
+ /**
3925
+ * Returns the first record matching the query, or the result of the
3926
+ * fallback callback when no record exists. An optional column list narrows
3927
+ * the selected columns before the lookup.
3928
+ *
3929
+ * @param columnsOrCallback
3930
+ * @param maybeCallback
3931
+ * @returns
3932
+ */
3933
+ firstOr<TResult>(callback: () => TResult | Promise<TResult>): Promise<TModel | TResult>;
3934
+ firstOr<TResult>(columns: string[], callback: () => TResult | Promise<TResult>): Promise<TModel | TResult>;
3515
3935
  /**
3516
3936
  * Finds a record by a specific key and value.
3517
3937
  * This is a convenience method that is equivalent to
@@ -3638,6 +4058,15 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
3638
4058
  * @returns
3639
4059
  */
3640
4060
  updateOrInsert(attributes: Record<string, unknown>, values?: Record<string, unknown> | ((exists: boolean) => Record<string, unknown> | Promise<Record<string, unknown>>)): Promise<boolean>;
4061
+ /**
4062
+ * Update the first record matching the given attributes, or create a new
4063
+ * record populated with the merged attributes and values when none exists.
4064
+ *
4065
+ * @param attributes
4066
+ * @param values
4067
+ * @returns
4068
+ */
4069
+ updateOrCreate(attributes: Record<string, unknown>, values?: Record<string, unknown>): Promise<TModel>;
3641
4070
  private shouldFallbackUpdateOrInsertUpsert;
3642
4071
  /**
3643
4072
  * Insert new records or update existing records by one or more unique keys.
@@ -3655,6 +4084,14 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
3655
4084
  * @returns
3656
4085
  */
3657
4086
  delete(): Promise<TModel | null>;
4087
+ /**
4088
+ * Hydrate a row that was just deleted, marking the resulting model as no
4089
+ * longer existing in the database.
4090
+ *
4091
+ * @param attributes
4092
+ * @returns
4093
+ */
4094
+ private hydrateDeleted;
3658
4095
  /**
3659
4096
  * Deletes the first record matching the current query constraints and throws
3660
4097
  * when no record matches.
@@ -4260,7 +4697,7 @@ type DatabasePrimitive = string | number | boolean | bigint | Date | null;
4260
4697
  type DatabaseValue = DatabasePrimitive | DatabaseRow | DatabaseValue[];
4261
4698
  type DatabaseRow = Record<string, unknown>;
4262
4699
  type DatabaseRows = DatabaseRow[];
4263
- type AdapterCapability = 'transactions' | 'returning' | 'insertMany' | 'upsert' | 'updateMany' | 'deleteMany' | 'exists' | 'relationLoads' | 'relationAggregates' | 'relationFilters' | 'rawSelect' | 'rawWhere' | 'distinct' | 'groupBy';
4700
+ type AdapterCapability = 'transactions' | 'returning' | 'insertMany' | 'upsert' | 'updateMany' | 'deleteMany' | 'exists' | 'relationLoads' | 'relationAggregates' | 'relationFilters' | 'rawSelect' | 'rawWhere' | 'distinct' | 'groupBy' | 'joins';
4264
4701
  type AdapterCapabilities = Partial<Record<AdapterCapability, boolean>>;
4265
4702
  type QueryLogicalOperator = 'and' | 'or';
4266
4703
  type QueryComparisonOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'not-in' | 'contains' | 'starts-with' | 'ends-with' | 'is-null' | 'is-not-null';
@@ -4373,11 +4810,55 @@ interface RelationLoadPlan {
4373
4810
  groupBy?: string[];
4374
4811
  relationLoads?: RelationLoadPlan[];
4375
4812
  }
4813
+ type QueryJoinType = 'inner' | 'left' | 'right' | 'full' | 'cross';
4814
+ type QueryJoinBoolean = 'and' | 'or';
4815
+ interface QueryJoinColumnConstraint {
4816
+ type: 'column';
4817
+ boolean: QueryJoinBoolean;
4818
+ first: string;
4819
+ operator: QueryScalarComparisonOperator;
4820
+ second: string;
4821
+ }
4822
+ interface QueryJoinValueConstraint {
4823
+ type: 'value';
4824
+ boolean: QueryJoinBoolean;
4825
+ column: string;
4826
+ operator: QueryComparisonOperator;
4827
+ value?: DatabaseValue | DatabaseValue[];
4828
+ }
4829
+ interface QueryJoinNullConstraint {
4830
+ type: 'null';
4831
+ boolean: QueryJoinBoolean;
4832
+ column: string;
4833
+ not: boolean;
4834
+ }
4835
+ interface QueryJoinRawConstraint {
4836
+ type: 'raw';
4837
+ boolean: QueryJoinBoolean;
4838
+ sql: string;
4839
+ bindings?: DatabaseValue[];
4840
+ }
4841
+ interface QueryJoinNestedConstraint {
4842
+ type: 'nested';
4843
+ boolean: QueryJoinBoolean;
4844
+ constraints: QueryJoinConstraint[];
4845
+ }
4846
+ type QueryJoinConstraint = QueryJoinColumnConstraint | QueryJoinValueConstraint | QueryJoinNullConstraint | QueryJoinRawConstraint | QueryJoinNestedConstraint;
4847
+ interface QueryJoin {
4848
+ type: QueryJoinType;
4849
+ table?: string;
4850
+ alias?: string;
4851
+ subquery?: SelectSpec;
4852
+ subquerySql?: string;
4853
+ lateral?: boolean;
4854
+ constraints: QueryJoinConstraint[];
4855
+ }
4376
4856
  interface SelectSpec<TModel = unknown> {
4377
4857
  target: QueryTarget<TModel>;
4378
4858
  columns?: QuerySelectColumn[];
4379
4859
  distinct?: boolean;
4380
4860
  groupBy?: string[];
4861
+ joins?: QueryJoin[];
4381
4862
  where?: QueryCondition;
4382
4863
  orderBy?: QueryOrderBy[];
4383
4864
  limit?: number;
@@ -4426,6 +4907,7 @@ interface DeleteManySpec<TModel = unknown> {
4426
4907
  }
4427
4908
  interface AggregateSpec<TModel = unknown> {
4428
4909
  target: QueryTarget<TModel>;
4910
+ joins?: QueryJoin[];
4429
4911
  where?: QueryCondition;
4430
4912
  relationFilters?: RelationFilterSpec[];
4431
4913
  aggregate: AggregateSelection;
@@ -4548,10 +5030,50 @@ declare class KyselyDatabaseAdapter implements DatabaseAdapter {
4548
5030
  private createMaintenanceConnectionString;
4549
5031
  private getMissingDatabaseNameFromError;
4550
5032
  private quoteIdentifier;
5033
+ /**
5034
+ * Wraps bare camelCase identifiers in a fragment of raw SQL with double quotes
5035
+ * so PostgreSQL preserves their casing instead of folding them to lower case.
5036
+ *
5037
+ * Identifiers that are already quoted, string literals, dollar-quoted bodies,
5038
+ * comments and function names (a camelCase token immediately followed by `(`)
5039
+ * are left untouched. Lower-case identifiers are also left alone since
5040
+ * PostgreSQL folds them to the same value with or without quotes.
5041
+ *
5042
+ * @param sql The raw SQL fragment to normalize.
5043
+ * @returns
5044
+ */
5045
+ private quoteCamelCaseIdentifiers;
4551
5046
  private quoteLiteral;
4552
5047
  private interpolateRawSql;
4553
5048
  private executeRawStatement;
5049
+ /**
5050
+ * Splits a SQL script into individual top-level statements.
5051
+ *
5052
+ * The PostgreSQL wire protocol used by Kysely rejects scripts that contain
5053
+ * more than one command, so multi-statement raw SQL (for example a migration
5054
+ * that mixes `do $$ ... $$` blocks with `alter table` statements) must be
5055
+ * executed one statement at a time. Semicolons inside single-quoted strings,
5056
+ * double-quoted identifiers, dollar-quoted bodies and comments are ignored.
5057
+ *
5058
+ * @param sql The raw SQL script to split.
5059
+ * @returns
5060
+ */
5061
+ private splitSqlStatements;
4554
5062
  rawQuery<_TRow = unknown>(spec: RawQuerySpec): Promise<DatabaseRows>;
5063
+ /**
5064
+ * Executes a multi-statement raw SQL script one statement at a time.
5065
+ *
5066
+ * Each statement is sent individually so the PostgreSQL extended protocol
5067
+ * accepts it, and the rows of the last statement that returns any are used as
5068
+ * the result. The script is wrapped in a transaction when the adapter is not
5069
+ * already operating inside one so partial failures do not leave the database
5070
+ * in a half-applied state.
5071
+ *
5072
+ * @param statements The individual statements to execute in order.
5073
+ * @param fullScript The original (joined) script, used for error context.
5074
+ * @returns
5075
+ */
5076
+ private runMultiStatementRawQuery;
4555
5077
  private tryInspectRawQuery;
4556
5078
  private resolveSchemaColumnName;
4557
5079
  private resolveSchemaIndexName;
@@ -4584,6 +5106,12 @@ declare class KyselyDatabaseAdapter implements DatabaseAdapter {
4584
5106
  private buildSelectList;
4585
5107
  private buildOrderBy;
4586
5108
  private buildGroupBy;
5109
+ private buildJoinClause;
5110
+ private joinKeyword;
5111
+ private buildJoinSource;
5112
+ private buildSingleJoin;
5113
+ private buildJoinConstraints;
5114
+ private buildJoinConstraint;
4587
5115
  private buildConditionValueList;
4588
5116
  private buildComparisonCondition;
4589
5117
  private buildRawWhereCondition;
@@ -5945,9 +6473,30 @@ declare class TableBuilder {
5945
6473
  /**
5946
6474
  * Defines both createdAt and updatedAt timestamp columns in the table.
5947
6475
  *
6476
+ * The attribute casing (the names exposed on the model) is controlled by the
6477
+ * first argument, while the optional second argument controls the casing used
6478
+ * for the persisted database column names via `.map()`.
6479
+ *
6480
+ * @example
6481
+ * table.timestamps() // createdAt / updatedAt
6482
+ * table.timestamps('snake') // created_at / updated_at
6483
+ * table.timestamps('camel', 'snake') // createdAt -> created_at (mapped)
6484
+ * table.timestamps({ createdAt: 'createdOn' })
6485
+ * table.timestamps('camel', { createdAt: 'created_on' })
6486
+ *
6487
+ * @param casing The casing (or explicit names) used for the attribute names.
6488
+ * @param mapCasing The casing (or explicit names) used for the mapped database columns.
6489
+ * @returns
6490
+ */
6491
+ timestamps(casing?: TimestampNaming, mapCasing?: TimestampNaming): this;
6492
+ /**
6493
+ * Resolves a timestamp naming option into concrete createdAt / updatedAt names.
6494
+ *
6495
+ * @param naming The casing keyword or explicit name overrides.
6496
+ * @param fallback The names used when an explicit override is omitted.
5948
6497
  * @returns
5949
6498
  */
5950
- timestamps(): this;
6499
+ private resolveTimestampNames;
5951
6500
  /**
5952
6501
  * Defines a soft delete timestamp column in the table.
5953
6502
  *
@@ -6847,4 +7396,4 @@ declare class URLDriver {
6847
7396
  url(page: number): string;
6848
7397
  }
6849
7398
  //#endregion
6850
- export { buildRelationLine as $, ModelEventListener as $a, PrismaClientLike as $i, RuntimePathMap as $n, BelongsToManyRelationMetadata as $o, QueryFullTextCondition as $r, getPersistedColumnMap as $t, isTransactionCapableClient as A, TransactionContext as Aa, ClientResolver as Ai, ForeignKeyBuilder as An, RelationAggregateType as Ao, AdapterModelFieldStructure as Ar, SchemaPrimaryKey as As, createEmptyAppliedMigrationsState as At, applyDropTableOperation as B, AttributeSelect as Ba, DelegateUpdateData as Bi, MakeFactoryCommand as Bn, Paginator as Bo, DatabaseRow as Br, removeAppliedMigration as Bt, getRuntimeDebugHandler as C, RawSelectInput as Ca, ArkormConfig as Ci, ArkormException as Cn, BelongsToRelation as Co, createPrismaDatabaseAdapter as Cr, PrismaSchemaSyncOptions as Cs, supportsDatabaseMigrationExecution as Ct, getUserConfig as D, SoftDeleteConfig as Da, CastHandler as Di, SchemaBuilder as Dn, RelationTableLoader as Do, AdapterCapability as Dr, SchemaForeignKeyAction as Ds, buildMigrationIdentity as Dt, getRuntimePrismaClient as E, SimplePaginationMeta as Ea, CastDefinition as Ei, Migration as En, Relation as Eo, AdapterCapabilities as Er, SchemaForeignKey as Es, toModelName as Et, PRISMA_ENUM_MEMBER_REGEX as F, QueryBuilder as Fa, DelegateRow as Fi, MigrateFreshCommand as Fn, RelationMetadataProvider as Fo, AggregateOperation as Fr, TimestampColumnBehavior as Fs, isMigrationApplied as Ft, applyOperationsToPrismaSchema as G, ModelAttributeValue as Ga, ModelQuerySchemaLike as Gi, AttributeOptions as Gn, FactoryDefinition as Go, InsertManySpec as Gr, PersistedColumnMappingsState as Gt, applyMigrationRollbackToPrismaSchema as H, AttributeWhereInput as Ha, EagerLoadConstraint as Hi, CliApp as Hn, FactoryAttributeResolver as Ho, DatabaseValue as Hr, supportsDatabaseMigrationState as Ht, PRISMA_ENUM_REGEX as I, AttributeCreateInput as Ia, DelegateRows as Ii, MigrateCommand as In, RelationResult as Io, AggregateSelection as Ir, markMigrationApplied as It, buildIndexLine as J, ModelCreateData as Ja, PaginationCurrentPageResolver as Ji, RegisteredFactory as Jn, FactoryRelationshipResolver as Jo, QueryComparisonCondition as Jr, PersistedTableMetadata as Jt, buildEnumBlock as K, ModelAttributes as Ka, ModelTableCase as Ki, Arkorm as Kn, FactoryDefinitionAttributes as Ko, InsertSpec as Kr, PersistedMetadataFeatures as Kt, PRISMA_MODEL_REGEX as L, AttributeOrderBy as La, DelegateSelect as Li, MakeSeederCommand as Ln, RelationResultCache as Lo, AggregateSpec as Lr, markMigrationRun as Lt, resetArkormRuntimeForTests as M, ModelStatic as Ma, DelegateFindManyArgs as Mi, ModelsSyncCommand as Mn, RelationConstraint as Mo, AdapterModelStructure as Mr, SchemaTableCreateOperation as Ms, findAppliedMigration as Mt, runArkormTransaction as N, RelationshipModelStatic as Na, DelegateInclude as Ni, MigrationHistoryCommand as Nn, RelationDefaultResolver as No, AdapterQueryOperation as Nr, SchemaTableDropOperation as Ns, getLastMigrationRun as Nt, isDelegateLike as O, TransactionCallback as Oa, CastMap as Oi, EnumBuilder as On, RelationAggregateConstraint as Oo, AdapterDatabaseCreationResult as Or, SchemaIndex as Os, buildMigrationRunId as Ot, PrimaryKeyGenerationPlanner as P, EagerLoadRelations as Pa, DelegateOrderBy as Pi, MigrateRollbackCommand as Pn, RelationDefaultValue as Po, AdapterTransactionContext as Pr, SchemaUniqueConstraint as Ps, getLatestAppliedMigrations as Pt, buildPrimaryKeyLine as Q, ModelEventHandlerConstructor as Qa, PaginationURLDriverFactory as Qi, RuntimePathKey as Qn, DatabaseTablePersistedMetadataOptions as Qo, QueryExistsCondition as Qr, deletePersistedColumnMappingsState as Qt, applyAlterTableOperation as R, AttributeQuerySchema as Ra, DelegateUniqueWhere as Ri, MakeModelCommand as Rn, RelationTableLookupSpec as Ro, DatabaseAdapter as Rr, readAppliedMigrationsState as Rt, getRuntimeClient as S, QuerySchemaWhere as Sa, ArkormBootContext as Si, ArkormErrorContext as Sn, HasManyRelation as So, createPrismaCompatibilityAdapter as Sr, PrismaMigrationWorkflowOptions as Ss, supportsDatabaseCreation as St, getRuntimePaginationURLDriverFactory as T, Serializable as Ta, ArkormDebugHandler as Ti, MIGRATION_BRAND as Tn, BelongsToManyRelation as To, createKyselyAdapter as Tr, SchemaColumnType as Ts, toMigrationFileSlug as Tt, applyMigrationToDatabase as U, DelegateForModelSchema as Ua, EagerLoadMap as Ui, resolveCast as Un, FactoryAttributes as Uo, DeleteManySpec as Ur, writeAppliedMigrationsState as Ut, applyMigrationRollbackToDatabase as V, AttributeUpdateInput as Va, DelegateWhere as Vi, InitCommand as Vn, ArkormCollection as Vo, DatabaseRows as Vr, resolveMigrationStateFilePath as Vt, applyMigrationToPrismaSchema as W, GlobalScope as Wa, GetUserConfig as Wi, Attribute as Wn, FactoryCallback as Wo, DeleteSpec as Wr, writeAppliedMigrationsStateToStore as Wt, buildMigrationSource as X, ModelEventDispatcher as Xa, PaginationOptions as Xi, RuntimeConstructor as Xn, MaybePromise as Xo, QueryCondition as Xr, applyOperationsToPersistedColumnMappingsState as Xt, buildInverseRelationLine as Y, ModelDeclaredAttributeKey as Ya, PaginationMeta as Yi, RegisteredModel as Yn, FactoryState as Yo, QueryComparisonOperator as Yr, PersistedTimestampColumn as Yt, buildModelBlock as Z, ModelEventHandler as Za, PaginationURLDriver as Zi, RuntimePathInput as Zn, DatabaseTableOptions as Zo, QueryDayCondition as Zr, createEmptyPersistedColumnMappingsState as Zt, ensureArkormConfigLoading as _, QuerySchemaRows as _a, UpdateManySpec as _i, QueryExecutionException as _n, MorphOneRelation as _o, SeederCallArgument as _r, GenerateMigrationOptions as _s, resolveMigrationClassName as _t, getRuntimeCompatibilityAdapter as a, PrismaLikeSelect as aa, QueryScalarComparisonOperator as ai, readPersistedColumnMappingsState as an, ModelUpdateData as ao, loadFactoriesFrom as ar, HasOneThroughRelationMetadata as as, deriveRelationFieldName as at, getDefaultStubsPath as b, QuerySchemaUpdateArgs as ba, AdapterBindableModel as bi, ModelNotFoundException as bn, HasOneRelation as bo, PrismaDatabaseAdapter as br, MigrationInstanceLike as bs, runPrismaCommand as bt, PrismaDelegateMap as c, PrismaTransactionCallback as ca, QueryTimeCondition as ci, resolveColumnMappingsFilePath as cn, QuerySchemaForModelInstance as co, loadSeedersFrom as cr, MorphOneRelationMetadata as cs, findEnumBlock as ct, inferDelegateName as d, PrismaTransactionOptions as da, RelationFilterSpec as di, validatePersistedMetadataFeaturesForMigrations as dn, InlineFactory as do, registerModels as dr, PivotModelStatic as ds, formatEnumDefaultValue as dt, PrismaDelegateLike as ea, QueryGroupCondition as ei, getPersistedEnumMap as en, ModelEventName as eo, getRegisteredFactories as er, BelongsToRelationMetadata as es, buildUniqueConstraintLine as et, awaitConfiguredModelsRegistration as f, QuerySchemaCreateData as fa, RelationLoadPlan as fi, writePersistedColumnMappingsState as fn, ModelFactory as fo, registerPaths as fr, RelationMetadata as fs, formatRelationAction as ft, emitRuntimeDebugEvent as g, QuerySchemaRow as ga, SortDirection as gi, RelationResolutionException as gn, MorphToManyRelation as go, Seeder as gr, AppliedMigrationsState as gs, resolveEnumName as gt, defineConfig as h, QuerySchemaOrderBy as ha, SoftDeleteQueryMode as hi, ScopeNotDefinedException as hn, MorphToRelation as ho, SEEDER_BRAND as hr, AppliedMigrationRun as hs, pad as ht, RuntimeModuleLoader as i, PrismaLikeScalarFilter as ia, QueryRawCondition as ii, getPersistedTimestampColumns as in, ModelRelationshipResult as io, getRegisteredSeeders as ir, HasOneRelationMetadata as is, deriveRelationAlias as it, loadArkormConfig as j, TransactionOptions as ja, DelegateCreateData as ji, SeedCommand as jn, RelationColumnLookupSpec as jo, AdapterModelIntrospectionOptions as jr, SchemaTableAlterOperation as js, deleteAppliedMigrationsStateFromStore as jt, isQuerySchemaLike as k, TransactionCapableClient as ka, CastType as ki, TableBuilder as kn, RelationAggregateInput as ko, AdapterInspectionRequest as kr, SchemaOperation as ks, computeMigrationChecksum as kt, createPrismaAdapter as l, PrismaTransactionCapableClient as la, RawQuerySpec as li, resolvePersistedMetadataFeatures as ln, RelatedModelClass as lo, registerFactories as lr, MorphToManyRelationMetadata as ls, findModelBlock as lt, configureArkormRuntime as m, QuerySchemaInclude as ma, SelectSpec as mi, UniqueConstraintResolutionException as mn, SetBasedEagerLoader as mo, resetRuntimeRegistryForTests as mr, AppliedMigrationEntry as ms, getMigrationPlan as mt, PivotModel as n, PrismaLikeInclude as na, QueryNotCondition as ni, getPersistedPrimaryKeyGeneration as nn, ModelOrderByInput as no, getRegisteredModels as nr, HasManyRelationMetadata as ns, deriveCollectionFieldName as nt, resolveRuntimeCompatibilityQuerySchema as o, PrismaLikeSortOrder as oa, QuerySelectColumn as oi, rebuildPersistedColumnMappingsState as on, ModelWhereInput as oo, loadMigrationsFrom as or, ModelMetadata as os, deriveSingularFieldName as ot, bindAdapterToModels as p, QuerySchemaFindManyArgs as pa, RelationLoadSpec as pi, UnsupportedAdapterFeatureException as pn, defineFactory as po, registerSeeders as pr, RelationMetadataType as ps, generateMigrationFile as pt, buildFieldLine as q, ModelAttributesOf as qa, NamingCase as qi, Arkormx as qn, FactoryModelConstructor as qo, QueryColumnComparisonCondition as qr, PersistedPrimaryKeyGeneration as qt, LoadedRuntimeModule as r, PrismaLikeOrderBy as ra, QueryOrderBy as ri, getPersistedTableMetadata as rn, ModelRelationshipKey as ro, getRegisteredPaths as rr, HasManyThroughRelationMetadata as rs, deriveInverseRelationAlias as rt, resolveRuntimeCompatibilityQuerySchemaOrThrow as s, PrismaLikeWhereInput as sa, QueryTarget as si, resetPersistedColumnMappingsCache as sn, QuerySchemaForModel as so, loadModelsFrom as sr, MorphManyRelationMetadata as ss, escapeRegex as st, URLDriver as t, PrismaFindManyArgsLike as ta, QueryLogicalOperator as ti, getPersistedEnumTsType as tn, ModelLifecycleState as to, getRegisteredMigrations as tr, ColumnMap as ts, createMigrationTimestamp as tt, createPrismaDelegateMap as u, PrismaTransactionContext as ua, RelationAggregateSpec as ui, syncPersistedColumnMappingsFromState as un, Model as uo, registerMigrations as ur, MorphToRelationMetadata as us, formatDefaultValue as ut, getActiveTransactionAdapter as v, QuerySchemaSelect as va, UpdateSpec as vi, QueryExecutionExceptionContext as vn, MorphManyRelation as vo, SeederConstructor as vr, GeneratedMigrationFile as vs, resolvePrismaType as vt, getRuntimePaginationCurrentPageResolver as w, RuntimeClientLike as wa, ArkormDebugEvent as wi, DB as wn, SingleResultRelation as wo, KyselyDatabaseAdapter as wr, SchemaColumn as ws, supportsDatabaseReset as wt, getRuntimeAdapter as x, QuerySchemaUpdateData as xa, AdapterQueryInspection as xi, MissingDelegateException as xn, HasManyThroughRelation as xo, PrismaDelegateNameMapping as xr, PrimaryKeyGeneration as xs, stripPrismaSchemaModelsAndEnums as xt, getActiveTransactionClient as y, QuerySchemaUniqueWhere as ya, UpsertSpec as yi, QueryConstraintException as yn, HasOneThroughRelation as yo, SeederInput as yr, MigrationClass as ys, runMigrationWithPrisma as yt, applyCreateTableOperation as z, AttributeSchemaDelegate as za, DelegateUpdateArgs as zi, MakeMigrationCommand as zn, LengthAwarePaginator as zo, DatabasePrimitive as zr, readAppliedMigrationsStateFromStore as zt };
7399
+ export { buildRelationLine as $, AttributeUpdateInput as $a, GetUserConfig as $i, RuntimePathMap as $n, ArkormCollection as $o, QueryFullTextCondition as $r, getPersistedColumnMap as $t, isTransactionCapableClient as A, QuerySchemaUpdateData as Aa, AdapterQueryInspection as Ai, ForeignKeyBuilder as An, MorphManyRelation as Ao, AdapterModelFieldStructure as Ar, GeneratedMigrationFile as As, createEmptyAppliedMigrationsState as At, applyDropTableOperation as B, TransactionOptions as Ba, DelegateCreateData as Bi, MakeFactoryCommand as Bn, RelationAggregateConstraint as Bo, DatabaseRow as Br, SchemaIndex as Bs, removeAppliedMigration as Bt, getRuntimeDebugHandler as C, QuerySchemaInclude as Ca, SelectSpec as Ci, ArkormException as Cn, InlineFactory as Co, createPrismaDatabaseAdapter as Cr, PivotModelStatic as Cs, supportsDatabaseMigrationExecution as Ct, getUserConfig as D, QuerySchemaSelect as Da, UpdateSpec as Di, SchemaBuilder as Dn, MorphToRelation as Do, AdapterCapability as Dr, AppliedMigrationRun as Ds, buildMigrationIdentity as Dt, getRuntimePrismaClient as E, QuerySchemaRows as Ea, UpdateManySpec as Ei, Migration as En, SetBasedEagerLoader as Eo, AdapterCapabilities as Er, AppliedMigrationEntry as Es, toModelName as Et, PRISMA_ENUM_MEMBER_REGEX as F, SimplePaginationMeta as Fa, CastDefinition as Fi, MigrateFreshCommand as Fn, BelongsToRelation as Fo, AggregateOperation as Fr, PrismaSchemaSyncOptions as Fs, isMigrationApplied as Ft, applyOperationsToPrismaSchema as G, JoinSource as Ga, DelegateRows as Gi, AttributeOptions as Gn, RelationDefaultResolver as Go, InsertManySpec as Gr, SchemaTableDropOperation as Gs, PersistedColumnMappingsState as Gt, applyMigrationRollbackToPrismaSchema as H, RelationshipModelStatic as Ha, DelegateInclude as Hi, CliApp as Hn, RelationAggregateType as Ho, DatabaseValue as Hr, SchemaPrimaryKey as Hs, supportsDatabaseMigrationState as Ht, PRISMA_ENUM_REGEX as I, SoftDeleteConfig as Ia, CastHandler as Ii, MigrateCommand as In, SingleResultRelation as Io, AggregateSelection as Ir, SchemaColumn as Is, markMigrationApplied as It, buildIndexLine as J, AttributeCreateInput as Ja, DelegateUpdateArgs as Ji, RegisteredFactory as Jn, RelationResult as Jo, QueryComparisonCondition as Jr, TimestampNames as Js, PersistedTableMetadata as Jt, buildEnumBlock as K, QueryBuilder as Ka, DelegateSelect as Ki, Arkorm as Kn, RelationDefaultValue as Ko, InsertSpec as Kr, SchemaUniqueConstraint as Ks, PersistedMetadataFeatures as Kt, PRISMA_MODEL_REGEX as L, TransactionCallback as La, CastMap as Li, MakeSeederCommand as Ln, BelongsToManyRelation as Lo, AggregateSpec as Lr, SchemaColumnType as Ls, markMigrationRun as Lt, resetArkormRuntimeForTests as M, RawSelectInput as Ma, ArkormConfig as Mi, ModelsSyncCommand as Mn, HasOneRelation as Mo, AdapterModelStructure as Mr, MigrationInstanceLike as Ms, findAppliedMigration as Mt, runArkormTransaction as N, RuntimeClientLike as Na, ArkormDebugEvent as Ni, MigrationHistoryCommand as Nn, HasManyThroughRelation as No, AdapterQueryOperation as Nr, PrimaryKeyGeneration as Ns, getLastMigrationRun as Nt, isDelegateLike as O, QuerySchemaUniqueWhere as Oa, UpsertSpec as Oi, EnumBuilder as On, MorphToManyRelation as Oo, AdapterDatabaseCreationResult as Or, AppliedMigrationsState as Os, buildMigrationRunId as Ot, PrimaryKeyGenerationPlanner as P, Serializable as Pa, ArkormDebugHandler as Pi, MigrateRollbackCommand as Pn, HasManyRelation as Po, AdapterTransactionContext as Pr, PrismaMigrationWorkflowOptions as Ps, getLatestAppliedMigrations as Pt, buildPrimaryKeyLine as Q, AttributeSelect as Qa, EagerLoadMap as Qi, RuntimePathKey as Qn, Paginator as Qo, QueryExistsCondition as Qr, deletePersistedColumnMappingsState as Qt, applyAlterTableOperation as R, TransactionCapableClient as Ra, CastType as Ri, MakeModelCommand as Rn, Relation as Ro, DatabaseAdapter as Rr, SchemaForeignKey as Rs, readAppliedMigrationsState as Rt, getRuntimeClient as S, QuerySchemaFindManyArgs as Sa, RelationLoadSpec as Si, ArkormErrorContext as Sn, Model as So, createPrismaCompatibilityAdapter as Sr, MorphToRelationMetadata as Ss, supportsDatabaseCreation as St, getRuntimePaginationURLDriverFactory as T, QuerySchemaRow as Ta, SortDirection as Ti, MIGRATION_BRAND as Tn, defineFactory as To, createKyselyAdapter as Tr, RelationMetadataType as Ts, toMigrationFileSlug as Tt, applyMigrationToDatabase as U, EagerLoadRelations as Ua, DelegateOrderBy as Ui, resolveCast as Un, RelationColumnLookupSpec as Uo, DeleteManySpec as Ur, SchemaTableAlterOperation as Us, writeAppliedMigrationsState as Ut, applyMigrationRollbackToDatabase as V, ModelStatic as Va, DelegateFindManyArgs as Vi, InitCommand as Vn, RelationAggregateInput as Vo, DatabaseRows as Vr, SchemaOperation as Vs, resolveMigrationStateFilePath as Vt, applyMigrationToPrismaSchema as W, JoinOn as Wa, DelegateRow as Wi, Attribute as Wn, RelationConstraint as Wo, DeleteSpec as Wr, SchemaTableCreateOperation as Ws, writeAppliedMigrationsStateToStore as Wt, buildMigrationSource as X, AttributeQuerySchema as Xa, DelegateWhere as Xi, RuntimeConstructor as Xn, RelationTableLookupSpec as Xo, QueryCondition as Xr, applyOperationsToPersistedColumnMappingsState as Xt, buildInverseRelationLine as Y, AttributeOrderBy as Ya, DelegateUpdateData as Yi, RegisteredModel as Yn, RelationResultCache as Yo, QueryComparisonOperator as Yr, TimestampNaming as Ys, PersistedTimestampColumn as Yt, buildModelBlock as Z, AttributeSchemaDelegate as Za, EagerLoadConstraint as Zi, RuntimePathInput as Zn, LengthAwarePaginator as Zo, QueryDayCondition as Zr, createEmptyPersistedColumnMappingsState as Zt, ensureArkormConfigLoading as _, PrismaTransactionCallback as _a, QueryTimeCondition as _i, QueryExecutionException as _n, ModelUpdateData as _o, SeederCallArgument as _r, HasOneThroughRelationMetadata as _s, resolveMigrationClassName as _t, getRuntimeCompatibilityAdapter as a, PaginationOptions as aa, QueryJoinNestedConstraint as ai, readPersistedColumnMappingsState as an, ModelAttributesOf as ao, loadFactoriesFrom as ar, FactoryModelConstructor as as, deriveRelationFieldName as at, getDefaultStubsPath as b, PrismaTransactionOptions as ba, RelationFilterSpec as bi, ModelNotFoundException as bn, QuerySchemaForModelInstance as bo, PrismaDatabaseAdapter as br, MorphOneRelationMetadata as bs, runPrismaCommand as bt, PrismaDelegateMap as c, PrismaClientLike as ca, QueryJoinType as ci, resolveColumnMappingsFilePath as cn, ModelEventDispatcher as co, loadSeedersFrom as cr, MaybePromise as cs, findEnumBlock as ct, inferDelegateName as d, PrismaLikeInclude as da, QueryNotCondition as di, validatePersistedMetadataFeaturesForMigrations as dn, ModelEventListener as do, registerModels as dr, BelongsToManyRelationMetadata as ds, formatEnumDefaultValue as dt, ModelQuerySchemaLike as ea, QueryGroupCondition as ei, getPersistedEnumMap as en, AttributeWhereInput as eo, getRegisteredFactories as er, FactoryAttributeResolver as es, buildUniqueConstraintLine as et, awaitConfiguredModelsRegistration as f, PrismaLikeOrderBy as fa, QueryOrderBy as fi, writePersistedColumnMappingsState as fn, ModelEventName as fo, registerPaths as fr, BelongsToRelationMetadata as fs, formatRelationAction as ft, emitRuntimeDebugEvent as g, PrismaLikeWhereInput as ga, QueryTarget as gi, RelationResolutionException as gn, ModelRelationshipResult as go, Seeder as gr, HasOneRelationMetadata as gs, resolveEnumName as gt, defineConfig as h, PrismaLikeSortOrder as ha, QuerySelectColumn as hi, ScopeNotDefinedException as hn, ModelRelationshipKey as ho, SEEDER_BRAND as hr, HasManyThroughRelationMetadata as hs, pad as ht, RuntimeModuleLoader as i, PaginationMeta as ia, QueryJoinConstraint as ii, getPersistedTimestampColumns as in, ModelAttributes as io, getRegisteredSeeders as ir, FactoryDefinitionAttributes as is, deriveRelationAlias as it, loadArkormConfig as j, QuerySchemaWhere as ja, ArkormBootContext as ji, SeedCommand as jn, HasOneThroughRelation as jo, AdapterModelIntrospectionOptions as jr, MigrationClass as js, deleteAppliedMigrationsStateFromStore as jt, isQuerySchemaLike as k, QuerySchemaUpdateArgs as ka, AdapterBindableModel as ki, TableBuilder as kn, MorphOneRelation as ko, AdapterInspectionRequest as kr, GenerateMigrationOptions as ks, computeMigrationChecksum as kt, createPrismaAdapter as l, PrismaDelegateLike as la, QueryJoinValueConstraint as li, resolvePersistedMetadataFeatures as ln, ModelEventHandler as lo, registerFactories as lr, DatabaseTableOptions as ls, findModelBlock as lt, configureArkormRuntime as m, PrismaLikeSelect as ma, QueryScalarComparisonOperator as mi, UniqueConstraintResolutionException as mn, ModelOrderByInput as mo, resetRuntimeRegistryForTests as mr, HasManyRelationMetadata as ms, getMigrationPlan as mt, PivotModel as n, NamingCase as na, QueryJoinBoolean as ni, getPersistedPrimaryKeyGeneration as nn, GlobalScope as no, getRegisteredModels as nr, FactoryCallback as ns, deriveCollectionFieldName as nt, resolveRuntimeCompatibilityQuerySchema as o, PaginationURLDriver as oa, QueryJoinNullConstraint as oi, rebuildPersistedColumnMappingsState as on, ModelCreateData as oo, loadMigrationsFrom as or, FactoryRelationshipResolver as os, deriveSingularFieldName as ot, bindAdapterToModels as p, PrismaLikeScalarFilter as pa, QueryRawCondition as pi, UnsupportedAdapterFeatureException as pn, ModelLifecycleState as po, registerSeeders as pr, ColumnMap as ps, generateMigrationFile as pt, buildFieldLine as q, JoinClause as qa, DelegateUniqueWhere as qi, Arkormx as qn, RelationMetadataProvider as qo, QueryColumnComparisonCondition as qr, TimestampColumnBehavior as qs, PersistedPrimaryKeyGeneration as qt, LoadedRuntimeModule as r, PaginationCurrentPageResolver as ra, QueryJoinColumnConstraint as ri, getPersistedTableMetadata as rn, ModelAttributeValue as ro, getRegisteredPaths as rr, FactoryDefinition as rs, deriveInverseRelationAlias as rt, resolveRuntimeCompatibilityQuerySchemaOrThrow as s, PaginationURLDriverFactory as sa, QueryJoinRawConstraint as si, resetPersistedColumnMappingsCache as sn, ModelDeclaredAttributeKey as so, loadModelsFrom as sr, FactoryState as ss, escapeRegex as st, URLDriver as t, ModelTableCase as ta, QueryJoin as ti, getPersistedEnumTsType as tn, DelegateForModelSchema as to, getRegisteredMigrations as tr, FactoryAttributes as ts, createMigrationTimestamp as tt, createPrismaDelegateMap as u, PrismaFindManyArgsLike as ua, QueryLogicalOperator as ui, syncPersistedColumnMappingsFromState as un, ModelEventHandlerConstructor as uo, registerMigrations as ur, DatabaseTablePersistedMetadataOptions as us, formatDefaultValue as ut, getActiveTransactionAdapter as v, PrismaTransactionCapableClient as va, RawQuerySpec as vi, QueryExecutionExceptionContext as vn, ModelWhereInput as vo, SeederConstructor as vr, ModelMetadata as vs, resolvePrismaType as vt, getRuntimePaginationCurrentPageResolver as w, QuerySchemaOrderBy as wa, SoftDeleteQueryMode as wi, DB as wn, ModelFactory as wo, KyselyDatabaseAdapter as wr, RelationMetadata as ws, supportsDatabaseReset as wt, getRuntimeAdapter as x, QuerySchemaCreateData as xa, RelationLoadPlan as xi, MissingDelegateException as xn, RelatedModelClass as xo, PrismaDelegateNameMapping as xr, MorphToManyRelationMetadata as xs, stripPrismaSchemaModelsAndEnums as xt, getActiveTransactionClient as y, PrismaTransactionContext as ya, RelationAggregateSpec as yi, QueryConstraintException as yn, QuerySchemaForModel as yo, SeederInput as yr, MorphManyRelationMetadata as ys, runMigrationWithPrisma as yt, applyCreateTableOperation as z, TransactionContext as za, ClientResolver as zi, MakeMigrationCommand as zn, RelationTableLoader as zo, DatabasePrimitive as zr, SchemaForeignKeyAction as zs, readAppliedMigrationsStateFromStore as zt };