hysteria-orm 11.0.2 → 11.0.4

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/lib/index.d.cts CHANGED
@@ -1,3 +1,4 @@
1
+ import { z } from 'zod';
1
2
  import { PassThrough } from 'node:stream';
2
3
  import * as mssql from 'mssql';
3
4
  import { config, Transaction as Transaction$1, IResult } from 'mssql';
@@ -4082,82 +4083,71 @@ declare abstract class WhereQueryBuilder<T extends Model, S extends Record<strin
4082
4083
  private orWhereGroup;
4083
4084
  }
4084
4085
 
4085
- type JsonParam = Record<string, unknown> | any[];
4086
+ type DefaultJsonParam = Record<string, any> | any[];
4087
+ type JsonValueForColumn<T extends Model, K extends string> = K extends ModelKey<T> ? NonNullable<T[StripTablePrefix<K> & keyof T]> : DefaultJsonParam;
4086
4088
  declare class JsonQueryBuilder<T extends Model, S extends Record<string, any> = Record<string, any>> extends WhereQueryBuilder<T, S> {
4087
4089
  /**
4088
4090
  * @description Filters records matching exact JSON value.
4089
4091
  */
4090
- whereJson(column: ModelKey<T>, value: JsonParam): this;
4091
- whereJson(column: string, value: JsonParam): this;
4092
+ whereJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4092
4093
  /**
4093
4094
  * @description Filters records matching the given JSON value.
4094
4095
  * @mssql Partial JSON matching not supported - only exact matches work
4095
4096
  */
4096
- andWhereJson(column: ModelKey<T>, value: JsonParam): this;
4097
- andWhereJson(column: string, value: JsonParam): this;
4097
+ andWhereJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4098
4098
  /**
4099
4099
  * @description Filters records matching the given JSON value.
4100
4100
  * @mssql Partial JSON matching not supported - only exact matches work
4101
4101
  */
4102
- orWhereJson(column: ModelKey<T>, value: JsonParam): this;
4103
- orWhereJson(column: string, value: JsonParam): this;
4102
+ orWhereJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4104
4103
  /**
4105
4104
  * @description Filters records where JSON column does NOT contain the given value.
4106
4105
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4107
4106
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4108
4107
  */
4109
- whereJsonNotContains(column: ModelKey<T>, value: JsonParam): this;
4110
- whereJsonNotContains(column: string, value: JsonParam): this;
4108
+ whereJsonNotContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4111
4109
  /**
4112
4110
  * @description Filters records where JSON column does NOT contain the given value (AND).
4113
4111
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4114
4112
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4115
4113
  */
4116
- andWhereJsonNotContains(column: ModelKey<T>, value: JsonParam): this;
4117
- andWhereJsonNotContains(column: string, value: JsonParam): this;
4114
+ andWhereJsonNotContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4118
4115
  /**
4119
4116
  * @description Filters records where JSON column does NOT contain the given value (OR).
4120
4117
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4121
4118
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4122
4119
  */
4123
- orWhereJsonNotContains(column: ModelKey<T>, value: JsonParam): this;
4124
- orWhereJsonNotContains(column: string, value: JsonParam): this;
4120
+ orWhereJsonNotContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4125
4121
  /**
4126
4122
  * @description Filters records where JSON column contains the given value.
4127
4123
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4128
4124
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4129
4125
  */
4130
- whereJsonContains(column: ModelKey<T>, value: JsonParam): this;
4131
- whereJsonContains(column: string, value: JsonParam): this;
4126
+ whereJsonContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4132
4127
  /**
4133
4128
  * @description Filters records where JSON column contains the given value (AND).
4134
4129
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4135
4130
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4136
4131
  */
4137
- andWhereJsonContains(column: ModelKey<T>, value: JsonParam): this;
4138
- andWhereJsonContains(column: string, value: JsonParam): this;
4132
+ andWhereJsonContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4139
4133
  /**
4140
4134
  * @description Filters records where JSON column contains the given value (OR).
4141
4135
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4142
4136
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4143
4137
  */
4144
- orWhereJsonContains(column: ModelKey<T>, value: JsonParam): this;
4145
- orWhereJsonContains(column: string, value: JsonParam): this;
4138
+ orWhereJsonContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4146
4139
  /**
4147
4140
  * @description Filters records where JSON column does NOT match the given value.
4148
4141
  */
4149
- whereNotJson(column: ModelKey<T>, value: JsonParam): this;
4150
- whereNotJson(column: string, value: JsonParam): this;
4142
+ whereNotJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4151
4143
  /**
4152
4144
  * @description Filters records where JSON column does NOT match the given value (AND).
4153
4145
  */
4154
- andWhereNotJson(column: ModelKey<T>, value: JsonParam): this;
4155
- andWhereNotJson(column: string, value: JsonParam): this;
4146
+ andWhereNotJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4156
4147
  /**
4157
4148
  * @description Filters records where JSON column does NOT match the given value (OR).
4158
4149
  */
4159
- orWhereNotJson(column: ModelKey<T>, value: JsonParam): this;
4160
- orWhereNotJson(column: string, value: JsonParam): this;
4150
+ orWhereNotJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4161
4151
  /**
4162
4152
  * @description Add a raw JSON filter expression.
4163
4153
  */
@@ -4699,6 +4689,7 @@ declare class Transaction {
4699
4689
 
4700
4690
  type Operation = "SELECT" | "INSERT" | "UPDATE" | "DELETE" | "OTHER";
4701
4691
  interface QueryContext {
4692
+ id: string;
4702
4693
  sql: string;
4703
4694
  params: any[];
4704
4695
  model?: any;
@@ -4837,6 +4828,10 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
4837
4828
  * @description Cached AdminJS instance
4838
4829
  */
4839
4830
  private adminJsInstance?;
4831
+ /**
4832
+ * @description Optional zod instance for schema generation
4833
+ */
4834
+ zodEngine: typeof z | null;
4840
4835
  /**
4841
4836
  * @description Callback to handle slave server failures
4842
4837
  */
@@ -5127,6 +5122,11 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
5127
5122
  * @description Returns the AdminJS configuration options
5128
5123
  */
5129
5124
  getAdminJsOptions(): AdminJsOptions | undefined;
5125
+ /**
5126
+ * @description Loads the zod engine into the data source
5127
+ * @param zod The zod namespace import
5128
+ */
5129
+ loadZodEngine(zod: typeof z): this;
5130
5130
  /**
5131
5131
  * @description Checks if AdminJS is enabled
5132
5132
  */
@@ -6506,6 +6506,10 @@ declare class ModelQueryBuilder<T extends Model, S extends Record<string, any> =
6506
6506
  */
6507
6507
  declare abstract class Model<T extends Model<T> = any> extends Entity {
6508
6508
  private "*";
6509
+ /**
6510
+ * @description The zod instance to use for creating zod schemas, if not set, toZodSchema will throw an error
6511
+ */
6512
+ static zodEngine: typeof z | null;
6509
6513
  /**
6510
6514
  * @description The column used to soft delete a record, default is deletedAt
6511
6515
  */
@@ -7105,6 +7109,14 @@ type DefinedModel<T extends string, C extends Record<string, ColumnDef>, R exten
7105
7109
  beforeDelete?: (queryBuilder: ModelQueryBuilder<{
7106
7110
  readonly __tableName: T;
7107
7111
  } & InferColumns<C> & Model>) => Promise<void> | void;
7112
+ /**
7113
+ * Translates the model definition to a Zod schema.
7114
+ * @throws {HysteriaError} If the zod engine is not loaded. Call `sql.loadZodEngine(z)` first.
7115
+ * @returns A ZodObject representing the model's columns.
7116
+ */
7117
+ toZodSchema(): z.ZodObject<{
7118
+ [K in keyof C]: z.ZodType<InferColumns<C>[K]>;
7119
+ }>;
7108
7120
  } & ModelColumns<T, C>;
7109
7121
  /**
7110
7122
  * Maps a model's column definitions to their fully-qualified `"table.column"`
@@ -7255,6 +7267,14 @@ type HiddenViewStatics = HiddenModelStatics;
7255
7267
  type DefinedView<T extends string, C extends Record<string, ColumnDef>> = Omit<ConcreteModelStatics, HiddenViewStatics> & {
7256
7268
  readonly table: T;
7257
7269
  new (): InferModel<T, C, {}> & Model;
7270
+ /**
7271
+ * Translates the model definition to a Zod schema.
7272
+ * @throws {HysteriaError} If the zod engine is not loaded. Call `sql.loadZodEngine(z)` first.
7273
+ * @returns A ZodObject representing the model's columns.
7274
+ */
7275
+ toZodSchema(): z.ZodObject<{
7276
+ [K in keyof C]: z.ZodType<InferColumns<C>[K]>;
7277
+ }>;
7258
7278
  } & ModelColumns<T, C>;
7259
7279
 
7260
7280
  declare const col: ColNamespace;
@@ -7333,10 +7353,9 @@ declare function createSchema<M extends Record<string, AnyModelConstructor>, R e
7333
7353
  [K in keyof M]?: RelationDefinitions<any, any>;
7334
7354
  }>(models: M, relations?: R): CreateSchemaResult<M, R>;
7335
7355
  /**
7336
- * Creates a fully-typed read-only Model subclass backed by a SQL view.
7337
- *
7338
7356
  * The returned class works with `sql.from(View).many()` and other read operations.
7339
7357
  * Mutation operations (insert, update, delete) are not intended for views.
7358
+ * Does not create a real database view, this is just a shortcut for common query results
7340
7359
  *
7341
7360
  * @example
7342
7361
  * ```typescript
@@ -7986,7 +8005,7 @@ declare abstract class BaseSeeder {
7986
8005
  abstract run(): Promise<void>;
7987
8006
  }
7988
8007
 
7989
- type HysteriaErrorCode = "VALIDATION_ERROR" | "CONNECTION_ALREADY_ESTABLISHED" | `UNSUPPORTED_ISOLATION_LEVEL_${string}` | "ROW_NOT_FOUND" | `UNSUPPORTED_DATABASE_TYPE_${string}` | `RELATION_TYPE_NOT_SUPPORTED_${string}` | `NOT_SUPPORTED_IN_${string}` | `RELATION_NOT_FOUND_IN_MODEL_${string}` | `UNKNOWN_RELATION_TYPE_${string}` | `DISTINCT_ON_NOT_SUPPORTED_IN_${string}` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_HAS_ONE_RELATION_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_BELONGS_TO_RELATION_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_HAS_MANY_RELATION_${string}` | `MANY_TO_MANY_RELATION_NOT_FOUND_FOR_RELATED_MODEL_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_MANY_TO_MANY_RELATION_${string}` | `RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${string}` | `FOR_SHARE_NOT_SUPPORTED_IN_${string}` | `SKIP_LOCKED_NOT_SUPPORTED_IN_${string}` | `LOCK_FOR_UPDATE_NOT_SUPPORTED_${string}` | `KEY_${string}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG` | `CACHE_ADAPTER_NOT_CONFIGURED` | `SQLITE_NOT_SUPPORTED` | `COCKROACHDB_NOT_SUPPORTED` | `RELATION_NOT_FOUND` | `POSTGRES_TABLE_REQUIRED` | `MODEL_HAS_NO_PRIMARY_KEY_VALUE` | `RELATION_NOT_MANY_TO_MANY` | "MATERIALIZED_CTE_NOT_SUPPORTED" | "DUPLICATE_MODEL_KEYS_WHILE_INSTANTIATING_MODELS" | "INVALID_ONE_PARAMETER_WHERE_CONDITION" | "INVALID_PAGINATION_PARAMETERS" | "MISSING_ALIAS_FOR_SUBQUERY" | "MODEL_HAS_NO_PRIMARY_KEY" | "PRIMARY_KEY_NOT_FOUND" | "SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL" | "MUST_CALL_BUILD_CTE_AT_LEAST_ONCE" | "REGEXP_NOT_SUPPORTED_IN_SQLITE" | "MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL" | "INSERT_FAILED" | "MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED" | "FILE_NOT_A_SQL_OR_TXT_FILE" | "CONNECTION_NOT_ESTABLISHED" | "TRANSACTION_NOT_ACTIVE" | "DEVELOPMENT_ERROR" | "MIGRATION_MODULE_NOT_FOUND" | "DRIVER_NOT_FOUND" | "FILE_NOT_FOUND_OR_NOT_ACCESSIBLE" | "ENV_NOT_SET" | "REQUIRED_VALUE_NOT_SET" | "SET_FAILED" | "GET_FAILED" | "REFERENCES_OPTION_REQUIRED" | "DELETE_FAILED" | "INVALID_DEFAULT_VALUE" | "DISCONNECT_FAILED" | "FLUSH_FAILED" | "LEFT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "RIGHT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "MODEL_HAS_NO_PRIMARY_KEY" | "GLOBAL_TRANSACTION_ALREADY_STARTED" | "GLOBAL_TRANSACTION_NOT_STARTED" | "MYSQL_REQUIRES_TABLE_NAME_FOR_INDEX_DROP" | "INVALID_DATE_OBJECT" | "INVALID_DATE_STRING" | "FAILED_TO_PARSE_DATE" | "MIGRATION_MODULE_REQUIRES_TS_NODE" | "FAILED_TO_ENCRYPT_SYMMETRICALLY" | "FAILED_TO_DECRYPT_SYMMETRICALLY" | "FAILED_TO_ENCRYPT_ASYMMETRICALLY" | "FAILED_TO_DECRYPT_ASYMMETRICALLY" | "UNSUPPORTED_RELATION_TYPE" | "LPUSH_FAILED" | "RPUSH_FAILED" | "LPOP_FAILED" | "RPOP_FAILED" | "LRANGE_FAILED" | "LLEN_FAILED" | "HSET_FAILED" | "HMSET_FAILED" | "HGET_FAILED" | "HGETALL_FAILED" | "HMGET_FAILED" | "HDEL_FAILED" | "HEXISTS_FAILED" | "HKEYS_FAILED" | "HLEN_FAILED" | "SADD_FAILED" | "SMEMBERS_FAILED" | "SREM_FAILED" | "SISMEMBER_FAILED" | "SCARD_FAILED" | "SINTER_FAILED" | "SUNION_FAILED" | "SDIFF_FAILED" | "ZADD_FAILED" | "ZRANGE_FAILED" | "ZREVRANGE_FAILED" | "ZREM_FAILED" | "ZSCORE_FAILED" | "ZCARD_FAILED" | "SUBSCRIBE_FAILED" | "UNSUBSCRIBE_FAILED" | "PUBLISH_FAILED" | "PSUBSCRIBE_FAILED" | "PUNSUBSCRIBE_FAILED" | "EXISTS_FAILED" | "EXPIRE_FAILED" | "EXPIREAT_FAILED" | "PEXPIRE_FAILED" | "TTL_FAILED" | "PTTL_FAILED" | "PERSIST_FAILED" | "KEYS_FAILED" | "RENAME_FAILED" | "TYPE_FAILED" | "SCAN_FAILED" | "ADMINJS_NOT_ENABLED" | "ADMINJS_INITIALIZATION_FAILED" | "ADMINJS_NO_MODELS_PROVIDED" | `SCOPE_NOT_FOUND_${string}`;
8008
+ type HysteriaErrorCode = "VALIDATION_ERROR" | "CONNECTION_ALREADY_ESTABLISHED" | `UNSUPPORTED_ISOLATION_LEVEL_${string}` | "ROW_NOT_FOUND" | `UNSUPPORTED_DATABASE_TYPE_${string}` | `RELATION_TYPE_NOT_SUPPORTED_${string}` | `NOT_SUPPORTED_IN_${string}` | `RELATION_NOT_FOUND_IN_MODEL_${string}` | `UNKNOWN_RELATION_TYPE_${string}` | `DISTINCT_ON_NOT_SUPPORTED_IN_${string}` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_HAS_ONE_RELATION_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_BELONGS_TO_RELATION_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_HAS_MANY_RELATION_${string}` | `MANY_TO_MANY_RELATION_NOT_FOUND_FOR_RELATED_MODEL_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_MANY_TO_MANY_RELATION_${string}` | `RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${string}` | `FOR_SHARE_NOT_SUPPORTED_IN_${string}` | `SKIP_LOCKED_NOT_SUPPORTED_IN_${string}` | `LOCK_FOR_UPDATE_NOT_SUPPORTED_${string}` | `KEY_${string}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG` | `CACHE_ADAPTER_NOT_CONFIGURED` | `SQLITE_NOT_SUPPORTED` | `COCKROACHDB_NOT_SUPPORTED` | `RELATION_NOT_FOUND` | `POSTGRES_TABLE_REQUIRED` | `MODEL_HAS_NO_PRIMARY_KEY_VALUE` | `RELATION_NOT_MANY_TO_MANY` | "MATERIALIZED_CTE_NOT_SUPPORTED" | "DUPLICATE_MODEL_KEYS_WHILE_INSTANTIATING_MODELS" | "INVALID_ONE_PARAMETER_WHERE_CONDITION" | "INVALID_PAGINATION_PARAMETERS" | "MISSING_ALIAS_FOR_SUBQUERY" | "MODEL_HAS_NO_PRIMARY_KEY" | "PRIMARY_KEY_NOT_FOUND" | "SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL" | "MUST_CALL_BUILD_CTE_AT_LEAST_ONCE" | "REGEXP_NOT_SUPPORTED_IN_SQLITE" | "MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL" | "INSERT_FAILED" | "MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED" | "FILE_NOT_A_SQL_OR_TXT_FILE" | "CONNECTION_NOT_ESTABLISHED" | "TRANSACTION_NOT_ACTIVE" | "DEVELOPMENT_ERROR" | "MIGRATION_MODULE_NOT_FOUND" | "DRIVER_NOT_FOUND" | "FILE_NOT_FOUND_OR_NOT_ACCESSIBLE" | "ENV_NOT_SET" | "REQUIRED_VALUE_NOT_SET" | "SET_FAILED" | "GET_FAILED" | "REFERENCES_OPTION_REQUIRED" | "DELETE_FAILED" | "INVALID_DEFAULT_VALUE" | "DISCONNECT_FAILED" | "FLUSH_FAILED" | "LEFT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "RIGHT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "MODEL_HAS_NO_PRIMARY_KEY" | "GLOBAL_TRANSACTION_ALREADY_STARTED" | "GLOBAL_TRANSACTION_NOT_STARTED" | "MYSQL_REQUIRES_TABLE_NAME_FOR_INDEX_DROP" | "INVALID_DATE_OBJECT" | "INVALID_DATE_STRING" | "FAILED_TO_PARSE_DATE" | "MIGRATION_MODULE_REQUIRES_TS_NODE" | "FAILED_TO_ENCRYPT_SYMMETRICALLY" | "FAILED_TO_DECRYPT_SYMMETRICALLY" | "FAILED_TO_ENCRYPT_ASYMMETRICALLY" | "FAILED_TO_DECRYPT_ASYMMETRICALLY" | "UNSUPPORTED_RELATION_TYPE" | "LPUSH_FAILED" | "RPUSH_FAILED" | "LPOP_FAILED" | "RPOP_FAILED" | "LRANGE_FAILED" | "LLEN_FAILED" | "HSET_FAILED" | "HMSET_FAILED" | "HGET_FAILED" | "HGETALL_FAILED" | "HMGET_FAILED" | "HDEL_FAILED" | "HEXISTS_FAILED" | "HKEYS_FAILED" | "HLEN_FAILED" | "SADD_FAILED" | "SMEMBERS_FAILED" | "SREM_FAILED" | "SISMEMBER_FAILED" | "SCARD_FAILED" | "SINTER_FAILED" | "SUNION_FAILED" | "SDIFF_FAILED" | "ZADD_FAILED" | "ZRANGE_FAILED" | "ZREVRANGE_FAILED" | "ZREM_FAILED" | "ZSCORE_FAILED" | "ZCARD_FAILED" | "SUBSCRIBE_FAILED" | "UNSUBSCRIBE_FAILED" | "PUBLISH_FAILED" | "PSUBSCRIBE_FAILED" | "PUNSUBSCRIBE_FAILED" | "EXISTS_FAILED" | "EXPIRE_FAILED" | "EXPIREAT_FAILED" | "PEXPIRE_FAILED" | "TTL_FAILED" | "PTTL_FAILED" | "PERSIST_FAILED" | "KEYS_FAILED" | "RENAME_FAILED" | "TYPE_FAILED" | "SCAN_FAILED" | "ADMINJS_NOT_ENABLED" | "ADMINJS_INITIALIZATION_FAILED" | "ADMINJS_NO_MODELS_PROVIDED" | "ZOD_ENGINE_NOT_LOADED" | `SCOPE_NOT_FOUND_${string}`;
7990
8009
 
7991
8010
  declare class HysteriaError extends Error {
7992
8011
  code: HysteriaErrorCode;
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { z } from 'zod';
1
2
  import { PassThrough } from 'node:stream';
2
3
  import * as mssql from 'mssql';
3
4
  import { config, Transaction as Transaction$1, IResult } from 'mssql';
@@ -4082,82 +4083,71 @@ declare abstract class WhereQueryBuilder<T extends Model, S extends Record<strin
4082
4083
  private orWhereGroup;
4083
4084
  }
4084
4085
 
4085
- type JsonParam = Record<string, unknown> | any[];
4086
+ type DefaultJsonParam = Record<string, any> | any[];
4087
+ type JsonValueForColumn<T extends Model, K extends string> = K extends ModelKey<T> ? NonNullable<T[StripTablePrefix<K> & keyof T]> : DefaultJsonParam;
4086
4088
  declare class JsonQueryBuilder<T extends Model, S extends Record<string, any> = Record<string, any>> extends WhereQueryBuilder<T, S> {
4087
4089
  /**
4088
4090
  * @description Filters records matching exact JSON value.
4089
4091
  */
4090
- whereJson(column: ModelKey<T>, value: JsonParam): this;
4091
- whereJson(column: string, value: JsonParam): this;
4092
+ whereJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4092
4093
  /**
4093
4094
  * @description Filters records matching the given JSON value.
4094
4095
  * @mssql Partial JSON matching not supported - only exact matches work
4095
4096
  */
4096
- andWhereJson(column: ModelKey<T>, value: JsonParam): this;
4097
- andWhereJson(column: string, value: JsonParam): this;
4097
+ andWhereJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4098
4098
  /**
4099
4099
  * @description Filters records matching the given JSON value.
4100
4100
  * @mssql Partial JSON matching not supported - only exact matches work
4101
4101
  */
4102
- orWhereJson(column: ModelKey<T>, value: JsonParam): this;
4103
- orWhereJson(column: string, value: JsonParam): this;
4102
+ orWhereJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4104
4103
  /**
4105
4104
  * @description Filters records where JSON column does NOT contain the given value.
4106
4105
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4107
4106
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4108
4107
  */
4109
- whereJsonNotContains(column: ModelKey<T>, value: JsonParam): this;
4110
- whereJsonNotContains(column: string, value: JsonParam): this;
4108
+ whereJsonNotContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4111
4109
  /**
4112
4110
  * @description Filters records where JSON column does NOT contain the given value (AND).
4113
4111
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4114
4112
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4115
4113
  */
4116
- andWhereJsonNotContains(column: ModelKey<T>, value: JsonParam): this;
4117
- andWhereJsonNotContains(column: string, value: JsonParam): this;
4114
+ andWhereJsonNotContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4118
4115
  /**
4119
4116
  * @description Filters records where JSON column does NOT contain the given value (OR).
4120
4117
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4121
4118
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4122
4119
  */
4123
- orWhereJsonNotContains(column: ModelKey<T>, value: JsonParam): this;
4124
- orWhereJsonNotContains(column: string, value: JsonParam): this;
4120
+ orWhereJsonNotContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4125
4121
  /**
4126
4122
  * @description Filters records where JSON column contains the given value.
4127
4123
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4128
4124
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4129
4125
  */
4130
- whereJsonContains(column: ModelKey<T>, value: JsonParam): this;
4131
- whereJsonContains(column: string, value: JsonParam): this;
4126
+ whereJsonContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4132
4127
  /**
4133
4128
  * @description Filters records where JSON column contains the given value (AND).
4134
4129
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4135
4130
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4136
4131
  */
4137
- andWhereJsonContains(column: ModelKey<T>, value: JsonParam): this;
4138
- andWhereJsonContains(column: string, value: JsonParam): this;
4132
+ andWhereJsonContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4139
4133
  /**
4140
4134
  * @description Filters records where JSON column contains the given value (OR).
4141
4135
  * @sqlite might not work for all cases, suggest using the whereJsonRaw method instead
4142
4136
  * @mssql not supported - CHARINDEX cannot do partial JSON containment
4143
4137
  */
4144
- orWhereJsonContains(column: ModelKey<T>, value: JsonParam): this;
4145
- orWhereJsonContains(column: string, value: JsonParam): this;
4138
+ orWhereJsonContains<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4146
4139
  /**
4147
4140
  * @description Filters records where JSON column does NOT match the given value.
4148
4141
  */
4149
- whereNotJson(column: ModelKey<T>, value: JsonParam): this;
4150
- whereNotJson(column: string, value: JsonParam): this;
4142
+ whereNotJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4151
4143
  /**
4152
4144
  * @description Filters records where JSON column does NOT match the given value (AND).
4153
4145
  */
4154
- andWhereNotJson(column: ModelKey<T>, value: JsonParam): this;
4155
- andWhereNotJson(column: string, value: JsonParam): this;
4146
+ andWhereNotJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4156
4147
  /**
4157
4148
  * @description Filters records where JSON column does NOT match the given value (OR).
4158
4149
  */
4159
- orWhereNotJson(column: ModelKey<T>, value: JsonParam): this;
4160
- orWhereNotJson(column: string, value: JsonParam): this;
4150
+ orWhereNotJson<K extends string>(column: K, value: JsonValueForColumn<T, K>): this;
4161
4151
  /**
4162
4152
  * @description Add a raw JSON filter expression.
4163
4153
  */
@@ -4699,6 +4689,7 @@ declare class Transaction {
4699
4689
 
4700
4690
  type Operation = "SELECT" | "INSERT" | "UPDATE" | "DELETE" | "OTHER";
4701
4691
  interface QueryContext {
4692
+ id: string;
4702
4693
  sql: string;
4703
4694
  params: any[];
4704
4695
  model?: any;
@@ -4837,6 +4828,10 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
4837
4828
  * @description Cached AdminJS instance
4838
4829
  */
4839
4830
  private adminJsInstance?;
4831
+ /**
4832
+ * @description Optional zod instance for schema generation
4833
+ */
4834
+ zodEngine: typeof z | null;
4840
4835
  /**
4841
4836
  * @description Callback to handle slave server failures
4842
4837
  */
@@ -5127,6 +5122,11 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
5127
5122
  * @description Returns the AdminJS configuration options
5128
5123
  */
5129
5124
  getAdminJsOptions(): AdminJsOptions | undefined;
5125
+ /**
5126
+ * @description Loads the zod engine into the data source
5127
+ * @param zod The zod namespace import
5128
+ */
5129
+ loadZodEngine(zod: typeof z): this;
5130
5130
  /**
5131
5131
  * @description Checks if AdminJS is enabled
5132
5132
  */
@@ -6506,6 +6506,10 @@ declare class ModelQueryBuilder<T extends Model, S extends Record<string, any> =
6506
6506
  */
6507
6507
  declare abstract class Model<T extends Model<T> = any> extends Entity {
6508
6508
  private "*";
6509
+ /**
6510
+ * @description The zod instance to use for creating zod schemas, if not set, toZodSchema will throw an error
6511
+ */
6512
+ static zodEngine: typeof z | null;
6509
6513
  /**
6510
6514
  * @description The column used to soft delete a record, default is deletedAt
6511
6515
  */
@@ -7105,6 +7109,14 @@ type DefinedModel<T extends string, C extends Record<string, ColumnDef>, R exten
7105
7109
  beforeDelete?: (queryBuilder: ModelQueryBuilder<{
7106
7110
  readonly __tableName: T;
7107
7111
  } & InferColumns<C> & Model>) => Promise<void> | void;
7112
+ /**
7113
+ * Translates the model definition to a Zod schema.
7114
+ * @throws {HysteriaError} If the zod engine is not loaded. Call `sql.loadZodEngine(z)` first.
7115
+ * @returns A ZodObject representing the model's columns.
7116
+ */
7117
+ toZodSchema(): z.ZodObject<{
7118
+ [K in keyof C]: z.ZodType<InferColumns<C>[K]>;
7119
+ }>;
7108
7120
  } & ModelColumns<T, C>;
7109
7121
  /**
7110
7122
  * Maps a model's column definitions to their fully-qualified `"table.column"`
@@ -7255,6 +7267,14 @@ type HiddenViewStatics = HiddenModelStatics;
7255
7267
  type DefinedView<T extends string, C extends Record<string, ColumnDef>> = Omit<ConcreteModelStatics, HiddenViewStatics> & {
7256
7268
  readonly table: T;
7257
7269
  new (): InferModel<T, C, {}> & Model;
7270
+ /**
7271
+ * Translates the model definition to a Zod schema.
7272
+ * @throws {HysteriaError} If the zod engine is not loaded. Call `sql.loadZodEngine(z)` first.
7273
+ * @returns A ZodObject representing the model's columns.
7274
+ */
7275
+ toZodSchema(): z.ZodObject<{
7276
+ [K in keyof C]: z.ZodType<InferColumns<C>[K]>;
7277
+ }>;
7258
7278
  } & ModelColumns<T, C>;
7259
7279
 
7260
7280
  declare const col: ColNamespace;
@@ -7333,10 +7353,9 @@ declare function createSchema<M extends Record<string, AnyModelConstructor>, R e
7333
7353
  [K in keyof M]?: RelationDefinitions<any, any>;
7334
7354
  }>(models: M, relations?: R): CreateSchemaResult<M, R>;
7335
7355
  /**
7336
- * Creates a fully-typed read-only Model subclass backed by a SQL view.
7337
- *
7338
7356
  * The returned class works with `sql.from(View).many()` and other read operations.
7339
7357
  * Mutation operations (insert, update, delete) are not intended for views.
7358
+ * Does not create a real database view, this is just a shortcut for common query results
7340
7359
  *
7341
7360
  * @example
7342
7361
  * ```typescript
@@ -7986,7 +8005,7 @@ declare abstract class BaseSeeder {
7986
8005
  abstract run(): Promise<void>;
7987
8006
  }
7988
8007
 
7989
- type HysteriaErrorCode = "VALIDATION_ERROR" | "CONNECTION_ALREADY_ESTABLISHED" | `UNSUPPORTED_ISOLATION_LEVEL_${string}` | "ROW_NOT_FOUND" | `UNSUPPORTED_DATABASE_TYPE_${string}` | `RELATION_TYPE_NOT_SUPPORTED_${string}` | `NOT_SUPPORTED_IN_${string}` | `RELATION_NOT_FOUND_IN_MODEL_${string}` | `UNKNOWN_RELATION_TYPE_${string}` | `DISTINCT_ON_NOT_SUPPORTED_IN_${string}` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_HAS_ONE_RELATION_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_BELONGS_TO_RELATION_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_HAS_MANY_RELATION_${string}` | `MANY_TO_MANY_RELATION_NOT_FOUND_FOR_RELATED_MODEL_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_MANY_TO_MANY_RELATION_${string}` | `RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${string}` | `FOR_SHARE_NOT_SUPPORTED_IN_${string}` | `SKIP_LOCKED_NOT_SUPPORTED_IN_${string}` | `LOCK_FOR_UPDATE_NOT_SUPPORTED_${string}` | `KEY_${string}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG` | `CACHE_ADAPTER_NOT_CONFIGURED` | `SQLITE_NOT_SUPPORTED` | `COCKROACHDB_NOT_SUPPORTED` | `RELATION_NOT_FOUND` | `POSTGRES_TABLE_REQUIRED` | `MODEL_HAS_NO_PRIMARY_KEY_VALUE` | `RELATION_NOT_MANY_TO_MANY` | "MATERIALIZED_CTE_NOT_SUPPORTED" | "DUPLICATE_MODEL_KEYS_WHILE_INSTANTIATING_MODELS" | "INVALID_ONE_PARAMETER_WHERE_CONDITION" | "INVALID_PAGINATION_PARAMETERS" | "MISSING_ALIAS_FOR_SUBQUERY" | "MODEL_HAS_NO_PRIMARY_KEY" | "PRIMARY_KEY_NOT_FOUND" | "SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL" | "MUST_CALL_BUILD_CTE_AT_LEAST_ONCE" | "REGEXP_NOT_SUPPORTED_IN_SQLITE" | "MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL" | "INSERT_FAILED" | "MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED" | "FILE_NOT_A_SQL_OR_TXT_FILE" | "CONNECTION_NOT_ESTABLISHED" | "TRANSACTION_NOT_ACTIVE" | "DEVELOPMENT_ERROR" | "MIGRATION_MODULE_NOT_FOUND" | "DRIVER_NOT_FOUND" | "FILE_NOT_FOUND_OR_NOT_ACCESSIBLE" | "ENV_NOT_SET" | "REQUIRED_VALUE_NOT_SET" | "SET_FAILED" | "GET_FAILED" | "REFERENCES_OPTION_REQUIRED" | "DELETE_FAILED" | "INVALID_DEFAULT_VALUE" | "DISCONNECT_FAILED" | "FLUSH_FAILED" | "LEFT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "RIGHT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "MODEL_HAS_NO_PRIMARY_KEY" | "GLOBAL_TRANSACTION_ALREADY_STARTED" | "GLOBAL_TRANSACTION_NOT_STARTED" | "MYSQL_REQUIRES_TABLE_NAME_FOR_INDEX_DROP" | "INVALID_DATE_OBJECT" | "INVALID_DATE_STRING" | "FAILED_TO_PARSE_DATE" | "MIGRATION_MODULE_REQUIRES_TS_NODE" | "FAILED_TO_ENCRYPT_SYMMETRICALLY" | "FAILED_TO_DECRYPT_SYMMETRICALLY" | "FAILED_TO_ENCRYPT_ASYMMETRICALLY" | "FAILED_TO_DECRYPT_ASYMMETRICALLY" | "UNSUPPORTED_RELATION_TYPE" | "LPUSH_FAILED" | "RPUSH_FAILED" | "LPOP_FAILED" | "RPOP_FAILED" | "LRANGE_FAILED" | "LLEN_FAILED" | "HSET_FAILED" | "HMSET_FAILED" | "HGET_FAILED" | "HGETALL_FAILED" | "HMGET_FAILED" | "HDEL_FAILED" | "HEXISTS_FAILED" | "HKEYS_FAILED" | "HLEN_FAILED" | "SADD_FAILED" | "SMEMBERS_FAILED" | "SREM_FAILED" | "SISMEMBER_FAILED" | "SCARD_FAILED" | "SINTER_FAILED" | "SUNION_FAILED" | "SDIFF_FAILED" | "ZADD_FAILED" | "ZRANGE_FAILED" | "ZREVRANGE_FAILED" | "ZREM_FAILED" | "ZSCORE_FAILED" | "ZCARD_FAILED" | "SUBSCRIBE_FAILED" | "UNSUBSCRIBE_FAILED" | "PUBLISH_FAILED" | "PSUBSCRIBE_FAILED" | "PUNSUBSCRIBE_FAILED" | "EXISTS_FAILED" | "EXPIRE_FAILED" | "EXPIREAT_FAILED" | "PEXPIRE_FAILED" | "TTL_FAILED" | "PTTL_FAILED" | "PERSIST_FAILED" | "KEYS_FAILED" | "RENAME_FAILED" | "TYPE_FAILED" | "SCAN_FAILED" | "ADMINJS_NOT_ENABLED" | "ADMINJS_INITIALIZATION_FAILED" | "ADMINJS_NO_MODELS_PROVIDED" | `SCOPE_NOT_FOUND_${string}`;
8008
+ type HysteriaErrorCode = "VALIDATION_ERROR" | "CONNECTION_ALREADY_ESTABLISHED" | `UNSUPPORTED_ISOLATION_LEVEL_${string}` | "ROW_NOT_FOUND" | `UNSUPPORTED_DATABASE_TYPE_${string}` | `RELATION_TYPE_NOT_SUPPORTED_${string}` | `NOT_SUPPORTED_IN_${string}` | `RELATION_NOT_FOUND_IN_MODEL_${string}` | `UNKNOWN_RELATION_TYPE_${string}` | `DISTINCT_ON_NOT_SUPPORTED_IN_${string}` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA` | `CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_HAS_ONE_RELATION_${string}` | `FOREIGN_KEY_VALUES_MISSING_FOR_BELONGS_TO_RELATION_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_HAS_MANY_RELATION_${string}` | `MANY_TO_MANY_RELATION_NOT_FOUND_FOR_RELATED_MODEL_${string}` | `PRIMARY_KEY_VALUES_MISSING_FOR_MANY_TO_MANY_RELATION_${string}` | `RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${string}` | `FOR_SHARE_NOT_SUPPORTED_IN_${string}` | `SKIP_LOCKED_NOT_SUPPORTED_IN_${string}` | `LOCK_FOR_UPDATE_NOT_SUPPORTED_${string}` | `KEY_${string}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG` | `CACHE_ADAPTER_NOT_CONFIGURED` | `SQLITE_NOT_SUPPORTED` | `COCKROACHDB_NOT_SUPPORTED` | `RELATION_NOT_FOUND` | `POSTGRES_TABLE_REQUIRED` | `MODEL_HAS_NO_PRIMARY_KEY_VALUE` | `RELATION_NOT_MANY_TO_MANY` | "MATERIALIZED_CTE_NOT_SUPPORTED" | "DUPLICATE_MODEL_KEYS_WHILE_INSTANTIATING_MODELS" | "INVALID_ONE_PARAMETER_WHERE_CONDITION" | "INVALID_PAGINATION_PARAMETERS" | "MISSING_ALIAS_FOR_SUBQUERY" | "MODEL_HAS_NO_PRIMARY_KEY" | "PRIMARY_KEY_NOT_FOUND" | "SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL" | "MUST_CALL_BUILD_CTE_AT_LEAST_ONCE" | "REGEXP_NOT_SUPPORTED_IN_SQLITE" | "MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL" | "INSERT_FAILED" | "MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED" | "FILE_NOT_A_SQL_OR_TXT_FILE" | "CONNECTION_NOT_ESTABLISHED" | "TRANSACTION_NOT_ACTIVE" | "DEVELOPMENT_ERROR" | "MIGRATION_MODULE_NOT_FOUND" | "DRIVER_NOT_FOUND" | "FILE_NOT_FOUND_OR_NOT_ACCESSIBLE" | "ENV_NOT_SET" | "REQUIRED_VALUE_NOT_SET" | "SET_FAILED" | "GET_FAILED" | "REFERENCES_OPTION_REQUIRED" | "DELETE_FAILED" | "INVALID_DEFAULT_VALUE" | "DISCONNECT_FAILED" | "FLUSH_FAILED" | "LEFT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "RIGHT_COLUMN_NOT_PROVIDED_FOR_JOIN" | "MODEL_HAS_NO_PRIMARY_KEY" | "GLOBAL_TRANSACTION_ALREADY_STARTED" | "GLOBAL_TRANSACTION_NOT_STARTED" | "MYSQL_REQUIRES_TABLE_NAME_FOR_INDEX_DROP" | "INVALID_DATE_OBJECT" | "INVALID_DATE_STRING" | "FAILED_TO_PARSE_DATE" | "MIGRATION_MODULE_REQUIRES_TS_NODE" | "FAILED_TO_ENCRYPT_SYMMETRICALLY" | "FAILED_TO_DECRYPT_SYMMETRICALLY" | "FAILED_TO_ENCRYPT_ASYMMETRICALLY" | "FAILED_TO_DECRYPT_ASYMMETRICALLY" | "UNSUPPORTED_RELATION_TYPE" | "LPUSH_FAILED" | "RPUSH_FAILED" | "LPOP_FAILED" | "RPOP_FAILED" | "LRANGE_FAILED" | "LLEN_FAILED" | "HSET_FAILED" | "HMSET_FAILED" | "HGET_FAILED" | "HGETALL_FAILED" | "HMGET_FAILED" | "HDEL_FAILED" | "HEXISTS_FAILED" | "HKEYS_FAILED" | "HLEN_FAILED" | "SADD_FAILED" | "SMEMBERS_FAILED" | "SREM_FAILED" | "SISMEMBER_FAILED" | "SCARD_FAILED" | "SINTER_FAILED" | "SUNION_FAILED" | "SDIFF_FAILED" | "ZADD_FAILED" | "ZRANGE_FAILED" | "ZREVRANGE_FAILED" | "ZREM_FAILED" | "ZSCORE_FAILED" | "ZCARD_FAILED" | "SUBSCRIBE_FAILED" | "UNSUBSCRIBE_FAILED" | "PUBLISH_FAILED" | "PSUBSCRIBE_FAILED" | "PUNSUBSCRIBE_FAILED" | "EXISTS_FAILED" | "EXPIRE_FAILED" | "EXPIREAT_FAILED" | "PEXPIRE_FAILED" | "TTL_FAILED" | "PTTL_FAILED" | "PERSIST_FAILED" | "KEYS_FAILED" | "RENAME_FAILED" | "TYPE_FAILED" | "SCAN_FAILED" | "ADMINJS_NOT_ENABLED" | "ADMINJS_INITIALIZATION_FAILED" | "ADMINJS_NO_MODELS_PROVIDED" | "ZOD_ENGINE_NOT_LOADED" | `SCOPE_NOT_FOUND_${string}`;
7990
8009
 
7991
8010
  declare class HysteriaError extends Error {
7992
8011
  code: HysteriaErrorCode;