hysteria-orm 11.0.3 → 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
  */
@@ -4838,6 +4828,10 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
4838
4828
  * @description Cached AdminJS instance
4839
4829
  */
4840
4830
  private adminJsInstance?;
4831
+ /**
4832
+ * @description Optional zod instance for schema generation
4833
+ */
4834
+ zodEngine: typeof z | null;
4841
4835
  /**
4842
4836
  * @description Callback to handle slave server failures
4843
4837
  */
@@ -5128,6 +5122,11 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
5128
5122
  * @description Returns the AdminJS configuration options
5129
5123
  */
5130
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;
5131
5130
  /**
5132
5131
  * @description Checks if AdminJS is enabled
5133
5132
  */
@@ -6507,6 +6506,10 @@ declare class ModelQueryBuilder<T extends Model, S extends Record<string, any> =
6507
6506
  */
6508
6507
  declare abstract class Model<T extends Model<T> = any> extends Entity {
6509
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;
6510
6513
  /**
6511
6514
  * @description The column used to soft delete a record, default is deletedAt
6512
6515
  */
@@ -7106,6 +7109,14 @@ type DefinedModel<T extends string, C extends Record<string, ColumnDef>, R exten
7106
7109
  beforeDelete?: (queryBuilder: ModelQueryBuilder<{
7107
7110
  readonly __tableName: T;
7108
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
+ }>;
7109
7120
  } & ModelColumns<T, C>;
7110
7121
  /**
7111
7122
  * Maps a model's column definitions to their fully-qualified `"table.column"`
@@ -7256,6 +7267,14 @@ type HiddenViewStatics = HiddenModelStatics;
7256
7267
  type DefinedView<T extends string, C extends Record<string, ColumnDef>> = Omit<ConcreteModelStatics, HiddenViewStatics> & {
7257
7268
  readonly table: T;
7258
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
+ }>;
7259
7278
  } & ModelColumns<T, C>;
7260
7279
 
7261
7280
  declare const col: ColNamespace;
@@ -7334,10 +7353,9 @@ declare function createSchema<M extends Record<string, AnyModelConstructor>, R e
7334
7353
  [K in keyof M]?: RelationDefinitions<any, any>;
7335
7354
  }>(models: M, relations?: R): CreateSchemaResult<M, R>;
7336
7355
  /**
7337
- * Creates a fully-typed read-only Model subclass backed by a SQL view.
7338
- *
7339
7356
  * The returned class works with `sql.from(View).many()` and other read operations.
7340
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
7341
7359
  *
7342
7360
  * @example
7343
7361
  * ```typescript
@@ -7987,7 +8005,7 @@ declare abstract class BaseSeeder {
7987
8005
  abstract run(): Promise<void>;
7988
8006
  }
7989
8007
 
7990
- 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}`;
7991
8009
 
7992
8010
  declare class HysteriaError extends Error {
7993
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
  */
@@ -4838,6 +4828,10 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
4838
4828
  * @description Cached AdminJS instance
4839
4829
  */
4840
4830
  private adminJsInstance?;
4831
+ /**
4832
+ * @description Optional zod instance for schema generation
4833
+ */
4834
+ zodEngine: typeof z | null;
4841
4835
  /**
4842
4836
  * @description Callback to handle slave server failures
4843
4837
  */
@@ -5128,6 +5122,11 @@ declare class SqlDataSource<D extends SqlDataSourceType = SqlDataSourceType, T e
5128
5122
  * @description Returns the AdminJS configuration options
5129
5123
  */
5130
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;
5131
5130
  /**
5132
5131
  * @description Checks if AdminJS is enabled
5133
5132
  */
@@ -6507,6 +6506,10 @@ declare class ModelQueryBuilder<T extends Model, S extends Record<string, any> =
6507
6506
  */
6508
6507
  declare abstract class Model<T extends Model<T> = any> extends Entity {
6509
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;
6510
6513
  /**
6511
6514
  * @description The column used to soft delete a record, default is deletedAt
6512
6515
  */
@@ -7106,6 +7109,14 @@ type DefinedModel<T extends string, C extends Record<string, ColumnDef>, R exten
7106
7109
  beforeDelete?: (queryBuilder: ModelQueryBuilder<{
7107
7110
  readonly __tableName: T;
7108
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
+ }>;
7109
7120
  } & ModelColumns<T, C>;
7110
7121
  /**
7111
7122
  * Maps a model's column definitions to their fully-qualified `"table.column"`
@@ -7256,6 +7267,14 @@ type HiddenViewStatics = HiddenModelStatics;
7256
7267
  type DefinedView<T extends string, C extends Record<string, ColumnDef>> = Omit<ConcreteModelStatics, HiddenViewStatics> & {
7257
7268
  readonly table: T;
7258
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
+ }>;
7259
7278
  } & ModelColumns<T, C>;
7260
7279
 
7261
7280
  declare const col: ColNamespace;
@@ -7334,10 +7353,9 @@ declare function createSchema<M extends Record<string, AnyModelConstructor>, R e
7334
7353
  [K in keyof M]?: RelationDefinitions<any, any>;
7335
7354
  }>(models: M, relations?: R): CreateSchemaResult<M, R>;
7336
7355
  /**
7337
- * Creates a fully-typed read-only Model subclass backed by a SQL view.
7338
- *
7339
7356
  * The returned class works with `sql.from(View).many()` and other read operations.
7340
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
7341
7359
  *
7342
7360
  * @example
7343
7361
  * ```typescript
@@ -7987,7 +8005,7 @@ declare abstract class BaseSeeder {
7987
8005
  abstract run(): Promise<void>;
7988
8006
  }
7989
8007
 
7990
- 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}`;
7991
8009
 
7992
8010
  declare class HysteriaError extends Error {
7993
8011
  code: HysteriaErrorCode;