arkormx 2.6.0 → 2.7.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.
package/dist/cli.mjs CHANGED
@@ -366,6 +366,10 @@ var PrimaryKeyGenerationPlanner = class {
366
366
  //#endregion
367
367
  //#region src/database/TableBuilder.ts
368
368
  const PRISMA_ENUM_MEMBER_REGEX$1 = /^[A-Za-z][A-Za-z0-9_]*$/;
369
+ const defaultTimestampNames = {
370
+ createdAt: "createdAt",
371
+ updatedAt: "updatedAt"
372
+ };
369
373
  const normalizeEnumMember = (columnName, value) => {
370
374
  const normalized = value.trim();
371
375
  if (!normalized) throw new Error(`Enum column [${columnName}] must define only non-empty values.`);
@@ -677,21 +681,59 @@ var TableBuilder = class {
677
681
  }
678
682
  /**
679
683
  * Defines both createdAt and updatedAt timestamp columns in the table.
680
- *
681
- * @returns
684
+ *
685
+ * The attribute casing (the names exposed on the model) is controlled by the
686
+ * first argument, while the optional second argument controls the casing used
687
+ * for the persisted database column names via `.map()`.
688
+ *
689
+ * @example
690
+ * table.timestamps() // createdAt / updatedAt
691
+ * table.timestamps('snake') // created_at / updated_at
692
+ * table.timestamps('camel', 'snake') // createdAt -> created_at (mapped)
693
+ * table.timestamps({ createdAt: 'createdOn' })
694
+ * table.timestamps('camel', { createdAt: 'created_on' })
695
+ *
696
+ * @param casing The casing (or explicit names) used for the attribute names.
697
+ * @param mapCasing The casing (or explicit names) used for the mapped database columns.
698
+ * @returns
682
699
  */
683
- timestamps() {
684
- this.timestamp("createdAt", {
700
+ timestamps(casing = "camel", mapCasing) {
701
+ const names = this.resolveTimestampNames(casing, defaultTimestampNames);
702
+ const maps = mapCasing === void 0 ? void 0 : this.resolveTimestampNames(mapCasing, names);
703
+ this.timestamp(names.createdAt, {
685
704
  nullable: false,
686
- default: "now()"
705
+ default: "now()",
706
+ ...maps && maps.createdAt !== names.createdAt ? { map: maps.createdAt } : {}
687
707
  });
688
- this.timestamp("updatedAt", {
708
+ this.timestamp(names.updatedAt, {
689
709
  nullable: false,
690
- updatedAt: true
710
+ updatedAt: true,
711
+ ...maps && maps.updatedAt !== names.updatedAt ? { map: maps.updatedAt } : {}
691
712
  });
692
713
  return this;
693
714
  }
694
715
  /**
716
+ * Resolves a timestamp naming option into concrete createdAt / updatedAt names.
717
+ *
718
+ * @param naming The casing keyword or explicit name overrides.
719
+ * @param fallback The names used when an explicit override is omitted.
720
+ * @returns
721
+ */
722
+ resolveTimestampNames(naming, fallback) {
723
+ if (naming === "snake") return {
724
+ createdAt: "created_at",
725
+ updatedAt: "updated_at"
726
+ };
727
+ if (naming === "camel") return {
728
+ createdAt: "createdAt",
729
+ updatedAt: "updatedAt"
730
+ };
731
+ return {
732
+ createdAt: naming.createdAt ?? fallback.createdAt,
733
+ updatedAt: naming.updatedAt ?? fallback.updatedAt
734
+ };
735
+ }
736
+ /**
695
737
  * Defines a soft delete timestamp column in the table.
696
738
  *
697
739
  * @param column The name of the soft delete column.
@@ -2670,6 +2712,10 @@ var PrismaDatabaseAdapter = class PrismaDatabaseAdapter {
2670
2712
  operation: "adapter.select",
2671
2713
  meta: { feature: "groupBy" }
2672
2714
  });
2715
+ if (spec.joins?.length) throw new UnsupportedAdapterFeatureException("Join clauses are not supported by the Prisma compatibility adapter; use a SQL-backed adapter or DB.raw().", {
2716
+ operation: "adapter.select",
2717
+ meta: { feature: "joins" }
2718
+ });
2673
2719
  return {
2674
2720
  include: this.toQueryInclude(spec.relationLoads),
2675
2721
  where: this.toQueryWhere(spec.where),
@@ -1,7 +1,7 @@
1
- import { Kysely, Transaction } from "kysely";
2
- import { PrismaClient } from "@prisma/client";
3
1
  import { Collection } from "@h3ravel/collect.js";
2
+ import { Kysely, Transaction } from "kysely";
4
3
  import { Command } from "@h3ravel/musket";
4
+ import { PrismaClient } from "@prisma/client";
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>;
@@ -1722,6 +1733,39 @@ declare class SetBasedEagerLoader {
1722
1733
  * @returns
1723
1734
  */
1724
1735
  private loadMorphTo;
1736
+ /**
1737
+ * Loads a polymorphic one-to-one ("morph one") relationship for the set of
1738
+ * models. See {@link loadMorphChildren} for the batching strategy.
1739
+ *
1740
+ * @param name
1741
+ * @param resolver
1742
+ * @param metadata
1743
+ * @param constraint
1744
+ */
1745
+ private loadMorphOne;
1746
+ /**
1747
+ * Loads a polymorphic one-to-many ("morph many") relationship for the set of
1748
+ * models. See {@link loadMorphChildren} for the batching strategy.
1749
+ *
1750
+ * @param name
1751
+ * @param metadata
1752
+ * @param constraint
1753
+ */
1754
+ private loadMorphMany;
1755
+ /**
1756
+ * Batch-loads the children for a morphOne/morphMany relationship. Parents are
1757
+ * grouped by their own morph type (constructor name), so each distinct type
1758
+ * runs a single query constrained by `idColumn IN (...) AND typeColumn = type`
1759
+ * instead of one query per parent row. This also supports a heterogeneous
1760
+ * parent set (e.g. the result of a nested load after a morphTo).
1761
+ *
1762
+ * @param metadata
1763
+ * @param constraint
1764
+ * @returns A map of `"{type}:{localKey}" -> related[]`.
1765
+ */
1766
+ private loadMorphChildren;
1767
+ private morphParentKey;
1768
+ private morphTypeOf;
1725
1769
  /**
1726
1770
  * Fallback method to load relationships individually for each model when the
1727
1771
  * relationship type is not supported for set-based loading.
@@ -2792,11 +2836,126 @@ type ModelLifecycleState = {
2792
2836
  globalScopesSuppressed: number;
2793
2837
  };
2794
2838
  //#endregion
2839
+ //#region src/JoinClause.d.ts
2840
+ /**
2841
+ * A fluent builder for the `on`/`where` constraints of a join clause.
2842
+ *
2843
+ * Instances are handed to the closure form of the query builder join helpers
2844
+ * (for example `query.join('posts', join => join.on(...).where(...))`) and
2845
+ * mirror Laravel's `JoinClause` surface. Column identifiers are treated as raw
2846
+ * database identifiers (qualify them as `table.column` when needed).
2847
+ *
2848
+ * @author Legacy (3m1n3nc3)
2849
+ */
2850
+ declare class JoinClause {
2851
+ private readonly constraints;
2852
+ /**
2853
+ * Adds a column-to-column `on` constraint, joined with `and`.
2854
+ *
2855
+ * Accepts either a closure (for a nested group) or a column comparison in
2856
+ * the `(first, second)` or `(first, operator, second)` form.
2857
+ *
2858
+ * @param first The left-hand column or a nested closure.
2859
+ * @param operator The comparison operator (defaults to `=`).
2860
+ * @param second The right-hand column.
2861
+ * @returns
2862
+ */
2863
+ on(first: string | ((join: JoinClause) => void), operator?: QueryScalarComparisonOperator | string, second?: string): this;
2864
+ /**
2865
+ * Adds a column-to-column `on` constraint, joined with `or`.
2866
+ *
2867
+ * @param first The left-hand column or a nested closure.
2868
+ * @param operator The comparison operator (defaults to `=`).
2869
+ * @param second The right-hand column.
2870
+ * @returns
2871
+ */
2872
+ orOn(first: string | ((join: JoinClause) => void), operator?: QueryScalarComparisonOperator | string, second?: string): this;
2873
+ /**
2874
+ * Adds a column-to-value constraint, joined with `and`.
2875
+ *
2876
+ * @param column The column being compared.
2877
+ * @param operator The comparison operator or the value when omitted.
2878
+ * @param value The value to compare against.
2879
+ * @returns
2880
+ */
2881
+ where(column: string, operator?: QueryComparisonOperator | string | DatabaseValue, value?: DatabaseValue): this;
2882
+ /**
2883
+ * Adds a column-to-value constraint, joined with `or`.
2884
+ *
2885
+ * @param column The column being compared.
2886
+ * @param operator The comparison operator or the value when omitted.
2887
+ * @param value The value to compare against.
2888
+ * @returns
2889
+ */
2890
+ orWhere(column: string, operator?: QueryComparisonOperator | string | DatabaseValue, value?: DatabaseValue): this;
2891
+ /**
2892
+ * Adds an `is null` constraint joined with `and`.
2893
+ *
2894
+ * @param column The column to test for null.
2895
+ * @returns
2896
+ */
2897
+ whereNull(column: string): this;
2898
+ /**
2899
+ * Adds an `is null` constraint joined with `or`.
2900
+ *
2901
+ * @param column The column to test for null.
2902
+ * @returns
2903
+ */
2904
+ orWhereNull(column: string): this;
2905
+ /**
2906
+ * Adds an `is not null` constraint joined with `and`.
2907
+ *
2908
+ * @param column The column to test for non-null.
2909
+ * @returns
2910
+ */
2911
+ whereNotNull(column: string): this;
2912
+ /**
2913
+ * Adds an `is not null` constraint joined with `or`.
2914
+ *
2915
+ * @param column The column to test for non-null.
2916
+ * @returns
2917
+ */
2918
+ orWhereNotNull(column: string): this;
2919
+ /**
2920
+ * Adds a raw constraint joined with `and`.
2921
+ *
2922
+ * @param sql The raw SQL fragment (with `?` placeholders for bindings).
2923
+ * @param bindings The values bound to the placeholders.
2924
+ * @returns
2925
+ */
2926
+ onRaw(sql: string, bindings?: DatabaseValue[]): this;
2927
+ /**
2928
+ * Adds a raw constraint joined with `or`.
2929
+ *
2930
+ * @param sql The raw SQL fragment (with `?` placeholders for bindings).
2931
+ * @param bindings The values bound to the placeholders.
2932
+ * @returns
2933
+ */
2934
+ orOnRaw(sql: string, bindings?: DatabaseValue[]): this;
2935
+ /**
2936
+ * Returns the accumulated constraints for this join clause.
2937
+ *
2938
+ * @returns
2939
+ */
2940
+ getConstraints(): QueryJoinConstraint[];
2941
+ private addOn;
2942
+ private addWhere;
2943
+ }
2944
+ //#endregion
2795
2945
  //#region src/QueryBuilder.d.ts
2796
2946
  type RelatedModelFromResult<TResult> = TResult extends ArkormCollection<infer TRelated> ? TRelated : Exclude<TResult, null | undefined>;
2797
2947
  type RelatedModelForRelationship<TModel, TKey extends ModelRelationshipKey<TModel>> = TModel[TKey] extends ((...args: any[]) => infer TRelation) ? TRelation extends {
2798
2948
  getResults: (...args: any[]) => Promise<infer TResult>;
2799
2949
  } ? RelatedModelFromResult<TResult> : never : never;
2950
+ /**
2951
+ * The left-hand argument accepted by the join helpers: either a column name or a
2952
+ * closure that configures the join constraints through a {@link JoinClause}.
2953
+ */
2954
+ type JoinOn = string | ((join: JoinClause) => void);
2955
+ /**
2956
+ * A subquery source accepted by the subquery/lateral join helpers.
2957
+ */
2958
+ type JoinSource = QueryBuilder<any, any> | string;
2800
2959
  type EagerLoadRelations<TModel> = { [TKey in ModelRelationshipKey<TModel>]?: true | EagerLoadConstraint<QueryBuilder<RelatedModelForRelationship<TModel, TKey>, QuerySchemaForModelInstance<RelatedModelForRelationship<TModel, TKey>>>> };
2801
2960
  /**
2802
2961
  * The QueryBuilder class provides a fluent interface for building and
@@ -2816,6 +2975,7 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
2816
2975
  private querySelect?;
2817
2976
  private queryDistinct;
2818
2977
  private queryGroupBy?;
2978
+ private queryJoins?;
2819
2979
  private offsetValue?;
2820
2980
  private limitValue?;
2821
2981
  private readonly eagerLoads;
@@ -3416,6 +3576,166 @@ declare class QueryBuilder<TModel, TDelegate extends ModelQuerySchemaLike = Mode
3416
3576
  */
3417
3577
  groupBy<TKey extends keyof ModelAttributes<TModel> & string>(columns: TKey[]): this;
3418
3578
  groupBy<TKey extends keyof ModelAttributes<TModel> & string>(...columns: TKey[]): this;
3579
+ /**
3580
+ * Adds a join clause to the query.
3581
+ *
3582
+ * The `first`/`second` arguments are treated as raw database identifiers, so
3583
+ * qualify them as `table.column` when needed. Pass a closure as `first` to
3584
+ * build a compound `on` condition through a {@link JoinClause}.
3585
+ *
3586
+ * @param table The table (or aliased table) to join.
3587
+ * @param first The left-hand column or a closure receiving a JoinClause.
3588
+ * @param operator The comparison operator (defaults to `=`).
3589
+ * @param second The right-hand column.
3590
+ * @param type The join type (defaults to `inner`).
3591
+ * @returns
3592
+ */
3593
+ join(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string, type?: QueryJoinType): this;
3594
+ /**
3595
+ * Adds an inner join clause to the query.
3596
+ *
3597
+ * @param table The table (or aliased table) to join.
3598
+ * @param first The left-hand column or a closure receiving a JoinClause.
3599
+ * @param operator The comparison operator (defaults to `=`).
3600
+ * @param second The right-hand column.
3601
+ * @returns
3602
+ */
3603
+ innerJoin(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3604
+ /**
3605
+ * Adds a left join clause to the query.
3606
+ *
3607
+ * @param table The table (or aliased table) to join.
3608
+ * @param first The left-hand column or a closure receiving a JoinClause.
3609
+ * @param operator The comparison operator (defaults to `=`).
3610
+ * @param second The right-hand column.
3611
+ * @returns
3612
+ */
3613
+ leftJoin(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3614
+ /**
3615
+ * Adds a right join clause to the query.
3616
+ *
3617
+ * @param table The table (or aliased table) to join.
3618
+ * @param first The left-hand column or a closure receiving a JoinClause.
3619
+ * @param operator The comparison operator (defaults to `=`).
3620
+ * @param second The right-hand column.
3621
+ * @returns
3622
+ */
3623
+ rightJoin(table: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3624
+ /**
3625
+ * Adds a cross join clause to the query.
3626
+ *
3627
+ * When a `first` column (or closure) is supplied the cross join is promoted
3628
+ * to an inner join with the given constraints, mirroring Laravel's behaviour.
3629
+ *
3630
+ * @param table The table (or aliased table) to join.
3631
+ * @param first Optional column or closure to constrain the join.
3632
+ * @returns
3633
+ */
3634
+ crossJoin(table: string, first?: JoinOn): this;
3635
+ /**
3636
+ * Adds a join clause that compares a column to a value.
3637
+ *
3638
+ * @param table The table (or aliased table) to join.
3639
+ * @param first The column being compared.
3640
+ * @param operator The comparison operator.
3641
+ * @param value The value to compare against.
3642
+ * @param type The join type (defaults to `inner`).
3643
+ * @returns
3644
+ */
3645
+ joinWhere(table: string, first: string, operator: QueryComparisonOperator | string, value: DatabaseValue, type?: QueryJoinType): this;
3646
+ /**
3647
+ * Adds a left join clause that compares a column to a value.
3648
+ *
3649
+ * @param table The table (or aliased table) to join.
3650
+ * @param first The column being compared.
3651
+ * @param operator The comparison operator.
3652
+ * @param value The value to compare against.
3653
+ * @returns
3654
+ */
3655
+ leftJoinWhere(table: string, first: string, operator: QueryComparisonOperator | string, value: DatabaseValue): this;
3656
+ /**
3657
+ * Adds a right join clause that compares a column to a value.
3658
+ *
3659
+ * @param table The table (or aliased table) to join.
3660
+ * @param first The column being compared.
3661
+ * @param operator The comparison operator.
3662
+ * @param value The value to compare against.
3663
+ * @returns
3664
+ */
3665
+ rightJoinWhere(table: string, first: string, operator: QueryComparisonOperator | string, value: DatabaseValue): this;
3666
+ /**
3667
+ * Adds a subquery join clause to the query.
3668
+ *
3669
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3670
+ * @param alias The alias assigned to the subquery.
3671
+ * @param first The left-hand column or a closure receiving a JoinClause.
3672
+ * @param operator The comparison operator (defaults to `=`).
3673
+ * @param second The right-hand column.
3674
+ * @param type The join type (defaults to `inner`).
3675
+ * @returns
3676
+ */
3677
+ joinSub(query: JoinSource, alias: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string, type?: QueryJoinType): this;
3678
+ /**
3679
+ * Adds a subquery left join clause to the query.
3680
+ *
3681
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3682
+ * @param alias The alias assigned to the subquery.
3683
+ * @param first The left-hand column or a closure receiving a JoinClause.
3684
+ * @param operator The comparison operator (defaults to `=`).
3685
+ * @param second The right-hand column.
3686
+ * @returns
3687
+ */
3688
+ leftJoinSub(query: JoinSource, alias: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3689
+ /**
3690
+ * Adds a subquery right join clause to the query.
3691
+ *
3692
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3693
+ * @param alias The alias assigned to the subquery.
3694
+ * @param first The left-hand column or a closure receiving a JoinClause.
3695
+ * @param operator The comparison operator (defaults to `=`).
3696
+ * @param second The right-hand column.
3697
+ * @returns
3698
+ */
3699
+ rightJoinSub(query: JoinSource, alias: string, first?: JoinOn, operator?: QueryScalarComparisonOperator | string, second?: string): this;
3700
+ /**
3701
+ * Adds a cross subquery join clause to the query.
3702
+ *
3703
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3704
+ * @param alias The alias assigned to the subquery.
3705
+ * @returns
3706
+ */
3707
+ crossJoinSub(query: JoinSource, alias: string): this;
3708
+ /**
3709
+ * Adds a lateral join clause to the query.
3710
+ *
3711
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3712
+ * @param alias The alias assigned to the subquery.
3713
+ * @param type The join type (defaults to `inner`).
3714
+ * @returns
3715
+ */
3716
+ joinLateral(query: JoinSource, alias: string, type?: QueryJoinType): this;
3717
+ /**
3718
+ * Adds a lateral left join clause to the query.
3719
+ *
3720
+ * @param query The subquery (a QueryBuilder instance or raw SQL string).
3721
+ * @param alias The alias assigned to the subquery.
3722
+ * @returns
3723
+ */
3724
+ leftJoinLateral(query: JoinSource, alias: string): this;
3725
+ /**
3726
+ * Builds a self-contained select specification used when this query is joined
3727
+ * as a subquery by another query builder.
3728
+ *
3729
+ * @returns
3730
+ */
3731
+ private buildJoinSubquerySpec;
3732
+ private guardJoinSupport;
3733
+ private pushJoin;
3734
+ private resolveJoinConstraints;
3735
+ private resolveJoinSource;
3736
+ private addJoin;
3737
+ private addJoinWhere;
3738
+ private addJoinSub;
3419
3739
  /**
3420
3740
  * Adds a skip clause to the query for pagination.
3421
3741
  * This will overwrite any existing skip clause.
@@ -4227,7 +4547,7 @@ type DatabasePrimitive = string | number | boolean | bigint | Date | null;
4227
4547
  type DatabaseValue = DatabasePrimitive | DatabaseRow | DatabaseValue[];
4228
4548
  type DatabaseRow = Record<string, unknown>;
4229
4549
  type DatabaseRows = DatabaseRow[];
4230
- type AdapterCapability = 'transactions' | 'returning' | 'insertMany' | 'upsert' | 'updateMany' | 'deleteMany' | 'exists' | 'relationLoads' | 'relationAggregates' | 'relationFilters' | 'rawSelect' | 'rawWhere' | 'distinct' | 'groupBy';
4550
+ type AdapterCapability = 'transactions' | 'returning' | 'insertMany' | 'upsert' | 'updateMany' | 'deleteMany' | 'exists' | 'relationLoads' | 'relationAggregates' | 'relationFilters' | 'rawSelect' | 'rawWhere' | 'distinct' | 'groupBy' | 'joins';
4231
4551
  type AdapterCapabilities = Partial<Record<AdapterCapability, boolean>>;
4232
4552
  type QueryLogicalOperator = 'and' | 'or';
4233
4553
  type QueryComparisonOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'not-in' | 'contains' | 'starts-with' | 'ends-with' | 'is-null' | 'is-not-null';
@@ -4340,11 +4660,55 @@ interface RelationLoadPlan {
4340
4660
  groupBy?: string[];
4341
4661
  relationLoads?: RelationLoadPlan[];
4342
4662
  }
4663
+ type QueryJoinType = 'inner' | 'left' | 'right' | 'full' | 'cross';
4664
+ type QueryJoinBoolean = 'and' | 'or';
4665
+ interface QueryJoinColumnConstraint {
4666
+ type: 'column';
4667
+ boolean: QueryJoinBoolean;
4668
+ first: string;
4669
+ operator: QueryScalarComparisonOperator;
4670
+ second: string;
4671
+ }
4672
+ interface QueryJoinValueConstraint {
4673
+ type: 'value';
4674
+ boolean: QueryJoinBoolean;
4675
+ column: string;
4676
+ operator: QueryComparisonOperator;
4677
+ value?: DatabaseValue | DatabaseValue[];
4678
+ }
4679
+ interface QueryJoinNullConstraint {
4680
+ type: 'null';
4681
+ boolean: QueryJoinBoolean;
4682
+ column: string;
4683
+ not: boolean;
4684
+ }
4685
+ interface QueryJoinRawConstraint {
4686
+ type: 'raw';
4687
+ boolean: QueryJoinBoolean;
4688
+ sql: string;
4689
+ bindings?: DatabaseValue[];
4690
+ }
4691
+ interface QueryJoinNestedConstraint {
4692
+ type: 'nested';
4693
+ boolean: QueryJoinBoolean;
4694
+ constraints: QueryJoinConstraint[];
4695
+ }
4696
+ type QueryJoinConstraint = QueryJoinColumnConstraint | QueryJoinValueConstraint | QueryJoinNullConstraint | QueryJoinRawConstraint | QueryJoinNestedConstraint;
4697
+ interface QueryJoin {
4698
+ type: QueryJoinType;
4699
+ table?: string;
4700
+ alias?: string;
4701
+ subquery?: SelectSpec;
4702
+ subquerySql?: string;
4703
+ lateral?: boolean;
4704
+ constraints: QueryJoinConstraint[];
4705
+ }
4343
4706
  interface SelectSpec<TModel = unknown> {
4344
4707
  target: QueryTarget<TModel>;
4345
4708
  columns?: QuerySelectColumn[];
4346
4709
  distinct?: boolean;
4347
4710
  groupBy?: string[];
4711
+ joins?: QueryJoin[];
4348
4712
  where?: QueryCondition;
4349
4713
  orderBy?: QueryOrderBy[];
4350
4714
  limit?: number;
@@ -4393,6 +4757,7 @@ interface DeleteManySpec<TModel = unknown> {
4393
4757
  }
4394
4758
  interface AggregateSpec<TModel = unknown> {
4395
4759
  target: QueryTarget<TModel>;
4760
+ joins?: QueryJoin[];
4396
4761
  where?: QueryCondition;
4397
4762
  relationFilters?: RelationFilterSpec[];
4398
4763
  aggregate: AggregateSelection;
@@ -4515,10 +4880,50 @@ declare class KyselyDatabaseAdapter implements DatabaseAdapter {
4515
4880
  private createMaintenanceConnectionString;
4516
4881
  private getMissingDatabaseNameFromError;
4517
4882
  private quoteIdentifier;
4883
+ /**
4884
+ * Wraps bare camelCase identifiers in a fragment of raw SQL with double quotes
4885
+ * so PostgreSQL preserves their casing instead of folding them to lower case.
4886
+ *
4887
+ * Identifiers that are already quoted, string literals, dollar-quoted bodies,
4888
+ * comments and function names (a camelCase token immediately followed by `(`)
4889
+ * are left untouched. Lower-case identifiers are also left alone since
4890
+ * PostgreSQL folds them to the same value with or without quotes.
4891
+ *
4892
+ * @param sql The raw SQL fragment to normalize.
4893
+ * @returns
4894
+ */
4895
+ private quoteCamelCaseIdentifiers;
4518
4896
  private quoteLiteral;
4519
4897
  private interpolateRawSql;
4520
4898
  private executeRawStatement;
4899
+ /**
4900
+ * Splits a SQL script into individual top-level statements.
4901
+ *
4902
+ * The PostgreSQL wire protocol used by Kysely rejects scripts that contain
4903
+ * more than one command, so multi-statement raw SQL (for example a migration
4904
+ * that mixes `do $$ ... $$` blocks with `alter table` statements) must be
4905
+ * executed one statement at a time. Semicolons inside single-quoted strings,
4906
+ * double-quoted identifiers, dollar-quoted bodies and comments are ignored.
4907
+ *
4908
+ * @param sql The raw SQL script to split.
4909
+ * @returns
4910
+ */
4911
+ private splitSqlStatements;
4521
4912
  rawQuery<_TRow = unknown>(spec: RawQuerySpec): Promise<DatabaseRows>;
4913
+ /**
4914
+ * Executes a multi-statement raw SQL script one statement at a time.
4915
+ *
4916
+ * Each statement is sent individually so the PostgreSQL extended protocol
4917
+ * accepts it, and the rows of the last statement that returns any are used as
4918
+ * the result. The script is wrapped in a transaction when the adapter is not
4919
+ * already operating inside one so partial failures do not leave the database
4920
+ * in a half-applied state.
4921
+ *
4922
+ * @param statements The individual statements to execute in order.
4923
+ * @param fullScript The original (joined) script, used for error context.
4924
+ * @returns
4925
+ */
4926
+ private runMultiStatementRawQuery;
4522
4927
  private tryInspectRawQuery;
4523
4928
  private resolveSchemaColumnName;
4524
4929
  private resolveSchemaIndexName;
@@ -4551,6 +4956,12 @@ declare class KyselyDatabaseAdapter implements DatabaseAdapter {
4551
4956
  private buildSelectList;
4552
4957
  private buildOrderBy;
4553
4958
  private buildGroupBy;
4959
+ private buildJoinClause;
4960
+ private joinKeyword;
4961
+ private buildJoinSource;
4962
+ private buildSingleJoin;
4963
+ private buildJoinConstraints;
4964
+ private buildJoinConstraint;
4554
4965
  private buildConditionValueList;
4555
4966
  private buildComparisonCondition;
4556
4967
  private buildRawWhereCondition;
@@ -5912,9 +6323,30 @@ declare class TableBuilder {
5912
6323
  /**
5913
6324
  * Defines both createdAt and updatedAt timestamp columns in the table.
5914
6325
  *
6326
+ * The attribute casing (the names exposed on the model) is controlled by the
6327
+ * first argument, while the optional second argument controls the casing used
6328
+ * for the persisted database column names via `.map()`.
6329
+ *
6330
+ * @example
6331
+ * table.timestamps() // createdAt / updatedAt
6332
+ * table.timestamps('snake') // created_at / updated_at
6333
+ * table.timestamps('camel', 'snake') // createdAt -> created_at (mapped)
6334
+ * table.timestamps({ createdAt: 'createdOn' })
6335
+ * table.timestamps('camel', { createdAt: 'created_on' })
6336
+ *
6337
+ * @param casing The casing (or explicit names) used for the attribute names.
6338
+ * @param mapCasing The casing (or explicit names) used for the mapped database columns.
6339
+ * @returns
6340
+ */
6341
+ timestamps(casing?: TimestampNaming, mapCasing?: TimestampNaming): this;
6342
+ /**
6343
+ * Resolves a timestamp naming option into concrete createdAt / updatedAt names.
6344
+ *
6345
+ * @param naming The casing keyword or explicit name overrides.
6346
+ * @param fallback The names used when an explicit override is omitted.
5915
6347
  * @returns
5916
6348
  */
5917
- timestamps(): this;
6349
+ private resolveTimestampNames;
5918
6350
  /**
5919
6351
  * Defines a soft delete timestamp column in the table.
5920
6352
  *
@@ -6814,4 +7246,4 @@ declare class URLDriver {
6814
7246
  url(page: number): string;
6815
7247
  }
6816
7248
  //#endregion
6817
- 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 };
7249
+ 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 };