@zenstackhq/orm 3.3.0-beta.2 → 3.3.0-beta.3

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/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _zenstackhq_schema from '@zenstackhq/schema';
2
- import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetModelFields, FieldHasDefault, GetModelFieldType, ModelFieldIsOptional, GetModelField, NonRelationFields, FieldDef, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefField, TypeDefFieldIsOptional, RelationFields, FieldIsArray, RelationFieldType, FieldIsRelation, GetModel, BuiltinType, GetTypeDefFieldType, TypeDefFieldIsArray, FieldIsDelegateDiscriminator, FieldType, RelationInfo, FieldIsDelegateRelation, ProcedureDef, ModelDef, DataSourceProviderType, IsDelegateModel, Expression as Expression$1, LiteralExpression, ArrayExpression, FieldExpression, MemberExpression, BinaryExpression, UnaryExpression, CallExpression, ThisExpression, NullExpression } from '@zenstackhq/schema';
2
+ import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetModelFields, FieldHasDefault, GetModelFieldType, ModelFieldIsOptional, GetModelField, NonRelationFields, FieldDef, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefField, TypeDefFieldIsOptional, RelationFields, FieldIsArray, RelationFieldType, FieldIsRelation, GetModel, BuiltinType, GetTypeDefFieldType, TypeDefFieldIsArray, FieldIsDelegateDiscriminator, FieldType, RelationInfo, FieldIsDelegateRelation, ProcedureDef, ModelDef, DataSourceProviderType, IsDelegateModel, Expression as Expression$1, LiteralExpression, ArrayExpression, FieldExpression, MemberExpression, BinaryExpression, UnaryExpression, CallExpression, BindingExpression, ThisExpression, NullExpression } from '@zenstackhq/schema';
3
3
  import * as kysely from 'kysely';
4
- import { OperationNodeVisitor, OperationNode, SelectQueryNode, SelectionNode, ColumnNode, AliasNode, TableNode, FromNode, ReferenceNode, AndNode, OrNode, ValueListNode, ParensNode, JoinNode, RawNode, WhereNode, InsertQueryNode, DeleteQueryNode, ReturningNode, CreateTableNode, AddColumnNode, ColumnDefinitionNode, DropTableNode, OrderByNode, OrderByItemNode, GroupByNode, GroupByItemNode, UpdateQueryNode, ColumnUpdateNode, LimitNode, OffsetNode, OnConflictNode, OnDuplicateKeyNode, CheckConstraintNode, DataTypeNode, SelectAllNode, IdentifierNode, SchemableIdentifierNode, ValueNode, PrimitiveValueListNode, OperatorNode, CreateIndexNode, DropIndexNode, ListNode, PrimaryKeyConstraintNode, UniqueConstraintNode, ReferencesNode, WithNode, CommonTableExpressionNode, CommonTableExpressionNameNode, HavingNode, CreateSchemaNode, DropSchemaNode, AlterTableNode, DropColumnNode, RenameColumnNode, AlterColumnNode, ModifyColumnNode, AddConstraintNode, DropConstraintNode, ForeignKeyConstraintNode, CreateViewNode, DropViewNode, GeneratedNode, DefaultValueNode, OnNode, ValuesNode, SelectModifierNode, CreateTypeNode, DropTypeNode, ExplainNode, DefaultInsertValueNode, AggregateFunctionNode, OverNode, PartitionByNode, PartitionByItemNode, SetOperationNode, BinaryOperationNode, UnaryOperationNode, UsingNode, FunctionNode, CaseNode, WhenNode, JSONReferenceNode, JSONPathNode, JSONPathLegNode, JSONOperatorChainNode, TupleNode, MergeQueryNode, MatchedNode, AddIndexNode, CastNode, FetchNode, TopNode, OutputNode, RenameConstraintNode, RefreshMaterializedViewNode, OrActionNode, CollateNode, Kysely, Generated, ExpressionBuilder, OperandExpression, SqlBool, SelectQueryBuilder, Expression, ExpressionWrapper, QueryId, RootOperationNode, QueryResult, UnknownRow, Dialect, KyselyConfig } from 'kysely';
4
+ import { OperationNodeVisitor, OperationNode, SelectQueryNode, SelectionNode, ColumnNode, AliasNode, TableNode, FromNode, ReferenceNode, AndNode, OrNode, ValueListNode, ParensNode, JoinNode, RawNode, WhereNode, InsertQueryNode, DeleteQueryNode, ReturningNode, CreateTableNode, AddColumnNode, ColumnDefinitionNode, DropTableNode, OrderByNode, OrderByItemNode, GroupByNode, GroupByItemNode, UpdateQueryNode, ColumnUpdateNode, LimitNode, OffsetNode, OnConflictNode, OnDuplicateKeyNode, CheckConstraintNode, DataTypeNode, SelectAllNode, IdentifierNode, SchemableIdentifierNode, ValueNode, PrimitiveValueListNode, OperatorNode, CreateIndexNode, DropIndexNode, ListNode, PrimaryKeyConstraintNode, UniqueConstraintNode, ReferencesNode, WithNode, CommonTableExpressionNode, CommonTableExpressionNameNode, HavingNode, CreateSchemaNode, DropSchemaNode, AlterTableNode, DropColumnNode, RenameColumnNode, AlterColumnNode, ModifyColumnNode, AddConstraintNode, DropConstraintNode, ForeignKeyConstraintNode, CreateViewNode, DropViewNode, GeneratedNode, DefaultValueNode, OnNode, ValuesNode, SelectModifierNode, CreateTypeNode, DropTypeNode, ExplainNode, DefaultInsertValueNode, AggregateFunctionNode, OverNode, PartitionByNode, PartitionByItemNode, SetOperationNode, BinaryOperationNode, UnaryOperationNode, UsingNode, FunctionNode, CaseNode, WhenNode, JSONReferenceNode, JSONPathNode, JSONPathLegNode, JSONOperatorChainNode, TupleNode, MergeQueryNode, MatchedNode, AddIndexNode, CastNode, FetchNode, TopNode, OutputNode, RenameConstraintNode, RefreshMaterializedViewNode, OrActionNode, CollateNode, Kysely, Generated, ExpressionBuilder, OperandExpression, SqlBool, SelectQueryBuilder, Expression, ExpressionWrapper, AliasableExpression, QueryId, RootOperationNode, QueryResult, UnknownRow, Dialect, KyselyConfig } from 'kysely';
5
5
  import Decimal from 'decimal.js';
6
6
  import { z, ZodType } from 'zod';
7
7
 
@@ -673,12 +673,12 @@ type SortAndTakeArgs<Schema extends SchemaDef, Model extends GetModels<Schema>>
673
673
  */
674
674
  cursor?: WhereUniqueInput<Schema, Model>;
675
675
  };
676
- type FindArgs<Schema extends SchemaDef, Model extends GetModels<Schema>, Collection extends boolean, AllowFilter extends boolean = true> = (Collection extends true ? SortAndTakeArgs<Schema, Model> & {
676
+ type FindArgs<Schema extends SchemaDef, Model extends GetModels<Schema>, Collection extends boolean, AllowFilter extends boolean = true> = (Collection extends true ? SortAndTakeArgs<Schema, Model> & (ProviderSupportsDistinct<Schema> extends true ? {
677
677
  /**
678
- * Distinct fields
678
+ * Distinct fields. Only supported by providers that natively support SQL "DISTINCT ON".
679
679
  */
680
680
  distinct?: OrArray<NonRelationFields<Schema, Model>>;
681
- } : {}) & (AllowFilter extends true ? FilterArgs<Schema, Model> : {}) & SelectIncludeOmit<Schema, Model, Collection>;
681
+ } : {}) : {}) & (AllowFilter extends true ? FilterArgs<Schema, Model> : {}) & SelectIncludeOmit<Schema, Model, Collection>;
682
682
  type FindManyArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = FindArgs<Schema, Model, true>;
683
683
  type FindFirstArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = FindArgs<Schema, Model, true>;
684
684
  type ExistsArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = FilterArgs<Schema, Model>;
@@ -1218,13 +1218,48 @@ type HasToManyRelations<Schema extends SchemaDef, Model extends GetModels<Schema
1218
1218
  } extends never ? false : true;
1219
1219
  type EnumValue<Schema extends SchemaDef, Enum extends GetEnums<Schema>> = GetEnum<Schema, Enum>[keyof GetEnum<Schema, Enum>];
1220
1220
  type MapType<Schema extends SchemaDef, T extends string> = T extends keyof TypeMap ? TypeMap[T] : T extends GetModels<Schema> ? ModelResult<Schema, T> : T extends GetTypeDefs<Schema> ? TypeDefResult<Schema, T> : T extends GetEnums<Schema> ? EnumValue<Schema, T> : unknown;
1221
+ type ProviderSupportsDistinct<Schema extends SchemaDef> = Schema['provider']['type'] extends 'postgresql' ? true : false;
1221
1222
 
1222
1223
  declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
1223
1224
  protected readonly schema: Schema;
1224
1225
  protected readonly options: ClientOptions<Schema>;
1225
1226
  protected eb: ExpressionBuilder<any, any>;
1226
1227
  constructor(schema: Schema, options: ClientOptions<Schema>);
1227
- transformPrimitive(value: unknown, _type: BuiltinType, _forArrayField: boolean): unknown;
1228
+ /**
1229
+ * Whether the dialect supports updating with a limit on the number of updated rows.
1230
+ */
1231
+ abstract get supportsUpdateWithLimit(): boolean;
1232
+ /**
1233
+ * Whether the dialect supports deleting with a limit on the number of deleted rows.
1234
+ */
1235
+ abstract get supportsDeleteWithLimit(): boolean;
1236
+ /**
1237
+ * Whether the dialect supports DISTINCT ON.
1238
+ */
1239
+ abstract get supportsDistinctOn(): boolean;
1240
+ /**
1241
+ * Whether the dialect support inserting with `DEFAULT` as field value.
1242
+ */
1243
+ abstract get supportsDefaultAsFieldValue(): boolean;
1244
+ /**
1245
+ * Whether the dialect supports the RETURNING clause in INSERT/UPDATE/DELETE statements.
1246
+ */
1247
+ abstract get supportsReturning(): boolean;
1248
+ /**
1249
+ * Whether the dialect supports `INSERT INTO ... DEFAULT VALUES` syntax.
1250
+ */
1251
+ abstract get supportsInsertDefaultValues(): boolean;
1252
+ /**
1253
+ * How to perform insert ignore operation.
1254
+ */
1255
+ abstract get insertIgnoreMethod(): 'onConflict' | 'ignore';
1256
+ /**
1257
+ * Transforms input value before sending to database.
1258
+ */
1259
+ transformInput(value: unknown, _type: BuiltinType, _forArrayField: boolean): unknown;
1260
+ /**
1261
+ * Transforms output value received from database.
1262
+ */
1228
1263
  transformOutput(value: unknown, _type: BuiltinType, _array: boolean): unknown;
1229
1264
  buildSelectModel(model: string, modelAlias: string): SelectQueryBuilder<any, any, {}>;
1230
1265
  buildFilterSortTake(model: string, args: FindArgs<Schema, GetModels<Schema>, true>, query: SelectQueryBuilder<any, any, {}>, modelAlias: string): SelectQueryBuilder<any, any, {}>;
@@ -1243,6 +1278,7 @@ declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
1243
1278
  private buildTypedJsonArrayFilter;
1244
1279
  private buildTypeJsonNonArrayFilter;
1245
1280
  private buildJsonValueFilterClause;
1281
+ protected buildJsonEqualityFilter(lhs: Expression<any>, rhs: unknown): ExpressionWrapper<any, any, SqlBool>;
1246
1282
  private buildLiteralFilter;
1247
1283
  private buildStandardFilter;
1248
1284
  private buildStringFilter;
@@ -1255,14 +1291,14 @@ declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
1255
1291
  private buildDateTimeFilter;
1256
1292
  private buildBytesFilter;
1257
1293
  private buildEnumFilter;
1258
- buildOrderBy(query: SelectQueryBuilder<any, any, any>, model: string, modelAlias: string, orderBy: OrArray<OrderBy<Schema, GetModels<Schema>, boolean, boolean>> | undefined, negated: boolean): SelectQueryBuilder<any, any, any>;
1294
+ buildOrderBy(query: SelectQueryBuilder<any, any, any>, model: string, modelAlias: string, orderBy: OrArray<OrderBy<Schema, GetModels<Schema>, boolean, boolean>> | undefined, negated: boolean, take: number | undefined): SelectQueryBuilder<any, any, any>;
1259
1295
  buildSelectAllFields(model: string, query: SelectQueryBuilder<any, any, any>, omit: Record<string, boolean | undefined> | undefined | null, modelAlias: string): SelectQueryBuilder<any, any, any>;
1260
1296
  shouldOmitField(omit: unknown, model: string, field: string): any;
1261
1297
  protected buildModelSelect(model: GetModels<Schema>, subQueryAlias: string, payload: true | FindArgs<Schema, GetModels<Schema>, true>, selectAllFields: boolean): SelectQueryBuilder<any, any, {}>;
1262
1298
  buildSelectField(query: SelectQueryBuilder<any, any, any>, model: string, modelAlias: string, field: string): SelectQueryBuilder<any, any, any>;
1263
1299
  buildDelegateJoin(thisModel: string, thisModelAlias: string, otherModelAlias: string, query: SelectQueryBuilder<any, any, any>): SelectQueryBuilder<any, any, any>;
1264
- buildCountJson(model: string, eb: ExpressionBuilder<any, any>, parentAlias: string, payload: any): ExpressionWrapper<any, any, unknown>;
1265
- private negateSort;
1300
+ buildCountJson(model: string, eb: ExpressionBuilder<any, any>, parentAlias: string, payload: any): AliasableExpression<unknown>;
1301
+ protected negateSort(sort: SortOrder, negated: boolean): SortOrder;
1266
1302
  true(): Expression<SqlBool>;
1267
1303
  false(): Expression<SqlBool>;
1268
1304
  isTrue(expression: Expression<SqlBool>): boolean;
@@ -1284,31 +1320,27 @@ declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
1284
1320
  /**
1285
1321
  * Builds an Kysely expression that returns a JSON object for the given key-value pairs.
1286
1322
  */
1287
- abstract buildJsonObject(value: Record<string, Expression<unknown>>): ExpressionWrapper<any, any, unknown>;
1323
+ abstract buildJsonObject(value: Record<string, Expression<unknown>>): AliasableExpression<unknown>;
1288
1324
  /**
1289
1325
  * Builds an Kysely expression that returns the length of an array.
1290
1326
  */
1291
- abstract buildArrayLength(array: Expression<unknown>): ExpressionWrapper<any, any, number>;
1327
+ abstract buildArrayLength(array: Expression<unknown>): AliasableExpression<number>;
1292
1328
  /**
1293
1329
  * Builds an array literal SQL string for the given values.
1294
1330
  */
1295
- abstract buildArrayLiteralSQL(values: unknown[]): string;
1331
+ abstract buildArrayLiteralSQL(values: unknown[]): AliasableExpression<unknown>;
1296
1332
  /**
1297
- * Whether the dialect supports updating with a limit on the number of updated rows.
1298
- */
1299
- abstract get supportsUpdateWithLimit(): boolean;
1300
- /**
1301
- * Whether the dialect supports deleting with a limit on the number of deleted rows.
1333
+ * Casts the given expression to an integer type.
1302
1334
  */
1303
- abstract get supportsDeleteWithLimit(): boolean;
1335
+ abstract castInt<T extends Expression<any>>(expression: T): T;
1304
1336
  /**
1305
- * Whether the dialect supports DISTINCT ON.
1337
+ * Casts the given expression to a text type.
1306
1338
  */
1307
- abstract get supportsDistinctOn(): boolean;
1339
+ abstract castText<T extends Expression<any>>(expression: T): T;
1308
1340
  /**
1309
- * Whether the dialect support inserting with `DEFAULT` as field value.
1341
+ * Trims double quotes from the start and end of a text expression.
1310
1342
  */
1311
- abstract get supportInsertWithDefault(): boolean;
1343
+ abstract trimTextQuotes<T extends Expression<string>>(expression: T): T;
1312
1344
  /**
1313
1345
  * Gets the SQL column type for the given field definition.
1314
1346
  */
@@ -1317,6 +1349,10 @@ declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
1317
1349
  supportsILike: boolean;
1318
1350
  likeCaseSensitive: boolean;
1319
1351
  };
1352
+ /**
1353
+ * Builds a VALUES table and select all fields from it.
1354
+ */
1355
+ abstract buildValuesTableSelect(fields: FieldDef[], rows: unknown[][]): SelectQueryBuilder<any, any, any>;
1320
1356
  /**
1321
1357
  * Builds a JSON path selection expression.
1322
1358
  */
@@ -1329,6 +1365,10 @@ declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
1329
1365
  * Builds a JSON array exists predicate (returning if any element matches the filter).
1330
1366
  */
1331
1367
  protected abstract buildJsonArrayExistsPredicate(receiver: Expression<any>, buildFilter: (elem: Expression<any>) => Expression<SqlBool>): Expression<SqlBool>;
1368
+ /**
1369
+ * Builds an ORDER BY clause for a field with NULLS FIRST/LAST support.
1370
+ */
1371
+ protected abstract buildOrderByField(query: SelectQueryBuilder<any, any, any>, field: Expression<unknown>, sort: SortOrder, nulls: 'first' | 'last'): SelectQueryBuilder<any, any, any>;
1332
1372
  }
1333
1373
 
1334
1374
  declare class InputValidator<Schema extends SchemaDef> {
@@ -1338,8 +1378,6 @@ declare class InputValidator<Schema extends SchemaDef> {
1338
1378
  private get schema();
1339
1379
  private get options();
1340
1380
  private get extraValidationsEnabled();
1341
- validateProcedureInput(proc: string, input: unknown): unknown;
1342
- private makeProcedureParamSchema;
1343
1381
  validateFindArgs(model: GetModels<Schema>, args: unknown, operation: CoreCrudOperations): FindArgs<Schema, GetModels<Schema>, true> | undefined;
1344
1382
  validateExistsArgs(model: GetModels<Schema>, args: unknown): ExistsArgs<Schema, GetModels<Schema>> | undefined;
1345
1383
  validateCreateArgs(model: GetModels<Schema>, args: unknown): CreateArgs<Schema, GetModels<Schema>>;
@@ -1354,8 +1392,7 @@ declare class InputValidator<Schema extends SchemaDef> {
1354
1392
  validateCountArgs(model: GetModels<Schema>, args: unknown): CountArgs<Schema, GetModels<Schema>> | undefined;
1355
1393
  validateAggregateArgs(model: GetModels<Schema>, args: unknown): AggregateArgs<Schema, GetModels<Schema>>;
1356
1394
  validateGroupByArgs(model: GetModels<Schema>, args: unknown): GroupByArgs<Schema, GetModels<Schema>>;
1357
- private getSchemaCache;
1358
- private setSchemaCache;
1395
+ validateProcedureInput(proc: string, input: unknown): unknown;
1359
1396
  private validate;
1360
1397
  private mergePluginArgsSchema;
1361
1398
  private getPluginExtQueryArgsSchema;
@@ -1408,14 +1445,18 @@ declare class InputValidator<Schema extends SchemaDef> {
1408
1445
  private makeUpdateDataSchema;
1409
1446
  private makeDeleteSchema;
1410
1447
  private makeDeleteManySchema;
1411
- makeCountSchema(model: GetModels<Schema>): z.ZodOptional<z.ZodObject<z.core.$ZodLooseShape, z.core.$strict>>;
1448
+ makeCountSchema(model: string): z.ZodOptional<z.ZodObject<z.core.$ZodLooseShape, z.core.$strict>>;
1412
1449
  private makeCountAggregateInputSchema;
1413
- makeAggregateSchema(model: GetModels<Schema>): z.ZodOptional<z.ZodObject<z.core.$ZodLooseShape, z.core.$strict>>;
1414
- makeSumAvgInputSchema(model: GetModels<Schema>): z.ZodObject<Record<string, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.core.$strict>;
1415
- makeMinMaxInputSchema(model: GetModels<Schema>): z.ZodObject<Record<string, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.core.$strict>;
1450
+ makeAggregateSchema(model: string): z.ZodOptional<z.ZodObject<z.core.$ZodLooseShape, z.core.$strict>>;
1451
+ makeSumAvgInputSchema(model: string): z.ZodObject<Record<string, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.core.$strict>;
1452
+ makeMinMaxInputSchema(model: string): z.ZodObject<Record<string, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.core.$strict>;
1416
1453
  private makeGroupBySchema;
1417
1454
  private onlyAggregationFields;
1418
1455
  private makeHavingSchema;
1456
+ private makeProcedureParamSchema;
1457
+ getCache(cacheKey: string): z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> | undefined;
1458
+ setCache(cacheKey: string, schema: ZodType): Map<string, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
1459
+ private printCacheStats;
1419
1460
  private makeSkipSchema;
1420
1461
  private makeTakeSchema;
1421
1462
  private refineForSelectIncludeMutuallyExclusive;
@@ -1672,6 +1713,11 @@ type PluginAfterEntityMutationArgs<Schema extends SchemaDef> = MutationHooksArgs
1672
1713
  * Loads the entities that have been mutated.
1673
1714
  */
1674
1715
  loadAfterMutationEntities(): Promise<Record<string, unknown>[] | undefined>;
1716
+ /**
1717
+ * The entities before mutation. Only available if `beforeEntityMutation` hook is provided and
1718
+ * the `loadBeforeMutationEntities` function is called in that hook.
1719
+ */
1720
+ beforeMutationEntities?: Record<string, unknown>[];
1675
1721
  /**
1676
1722
  * The ZenStack client you can use to perform additional operations.
1677
1723
  * See {@link EntityMutationHooksDef.runAfterMutationWithinTransaction} for detailed transaction behavior.
@@ -1866,7 +1912,51 @@ type CRUD_EXT = CRUD | 'post-update';
1866
1912
  * Extended CRUD operations including 'post-update'.
1867
1913
  */
1868
1914
  declare const CRUD_EXT: readonly ["create", "read", "update", "delete", "post-update"];
1869
- type AllModelOperations<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, ExtQueryArgs> = {
1915
+ type AllModelOperations<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, ExtQueryArgs> = CommonModelOperations<Schema, Model, Options, ExtQueryArgs> & (Schema['provider']['type'] extends 'mysql' ? {} : {
1916
+ /**
1917
+ * Creates multiple entities and returns them.
1918
+ * @param args - create args. See {@link createMany} for input. Use
1919
+ * `select` and `omit` to control the fields returned.
1920
+ * @returns the created entities
1921
+ *
1922
+ * @example
1923
+ * ```ts
1924
+ * // create multiple entities and return selected fields
1925
+ * await db.user.createManyAndReturn({
1926
+ * data: [
1927
+ * { name: 'Alex', email: 'alex@zenstack.dev' },
1928
+ * { name: 'John', email: 'john@zenstack.dev' }
1929
+ * ],
1930
+ * select: { id: true, email: true }
1931
+ * });
1932
+ * ```
1933
+ */
1934
+ createManyAndReturn<T extends CreateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'createManyAndReturn'>>(args?: SelectSubset<T, CreateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'createManyAndReturn'>>): ZenStackPromise<Schema, SimplifiedPlainResult<Schema, Model, T, Options>[]>;
1935
+ /**
1936
+ * Updates multiple entities and returns them.
1937
+ * @param args - update args. Only scalar fields are allowed for data.
1938
+ * @returns the updated entities
1939
+ *
1940
+ * @example
1941
+ * ```ts
1942
+ * // update many entities and return selected fields
1943
+ * await db.user.updateManyAndReturn({
1944
+ * where: { email: { endsWith: '@zenstack.dev' } },
1945
+ * data: { role: 'ADMIN' },
1946
+ * select: { id: true, email: true }
1947
+ * }); // result: `Array<{ id: string; email: string }>`
1948
+ *
1949
+ * // limit the number of updated entities
1950
+ * await db.user.updateManyAndReturn({
1951
+ * where: { email: { endsWith: '@zenstack.dev' } },
1952
+ * data: { role: 'ADMIN' },
1953
+ * limit: 10
1954
+ * });
1955
+ * ```
1956
+ */
1957
+ updateManyAndReturn<T extends UpdateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'updateManyAndReturn'>>(args: Subset<T, UpdateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'updateManyAndReturn'>>): ZenStackPromise<Schema, SimplifiedPlainResult<Schema, Model, T, Options>[]>;
1958
+ });
1959
+ type CommonModelOperations<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, ExtQueryArgs> = {
1870
1960
  /**
1871
1961
  * Returns a list of entities.
1872
1962
  * @param args - query args
@@ -2056,25 +2146,6 @@ type AllModelOperations<Schema extends SchemaDef, Model extends GetModels<Schema
2056
2146
  * ```
2057
2147
  */
2058
2148
  createMany<T extends CreateManyArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'createMany'>>(args?: SelectSubset<T, CreateManyArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'createMany'>>): ZenStackPromise<Schema, BatchResult>;
2059
- /**
2060
- * Creates multiple entities and returns them.
2061
- * @param args - create args. See {@link createMany} for input. Use
2062
- * `select` and `omit` to control the fields returned.
2063
- * @returns the created entities
2064
- *
2065
- * @example
2066
- * ```ts
2067
- * // create multiple entities and return selected fields
2068
- * await db.user.createManyAndReturn({
2069
- * data: [
2070
- * { name: 'Alex', email: 'alex@zenstack.dev' },
2071
- * { name: 'John', email: 'john@zenstack.dev' }
2072
- * ],
2073
- * select: { id: true, email: true }
2074
- * });
2075
- * ```
2076
- */
2077
- createManyAndReturn<T extends CreateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'createManyAndReturn'>>(args?: SelectSubset<T, CreateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'createManyAndReturn'>>): ZenStackPromise<Schema, SimplifiedPlainResult<Schema, Model, T, Options>[]>;
2078
2149
  /**
2079
2150
  * Updates a uniquely identified entity.
2080
2151
  * @param args - update args. See {@link findMany} for how to control
@@ -2214,29 +2285,6 @@ type AllModelOperations<Schema extends SchemaDef, Model extends GetModels<Schema
2214
2285
  * });
2215
2286
  */
2216
2287
  updateMany<T extends UpdateManyArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'updateMany'>>(args: Subset<T, UpdateManyArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'updateMany'>>): ZenStackPromise<Schema, BatchResult>;
2217
- /**
2218
- * Updates multiple entities and returns them.
2219
- * @param args - update args. Only scalar fields are allowed for data.
2220
- * @returns the updated entities
2221
- *
2222
- * @example
2223
- * ```ts
2224
- * // update many entities and return selected fields
2225
- * await db.user.updateManyAndReturn({
2226
- * where: { email: { endsWith: '@zenstack.dev' } },
2227
- * data: { role: 'ADMIN' },
2228
- * select: { id: true, email: true }
2229
- * }); // result: `Array<{ id: string; email: string }>`
2230
- *
2231
- * // limit the number of updated entities
2232
- * await db.user.updateManyAndReturn({
2233
- * where: { email: { endsWith: '@zenstack.dev' } },
2234
- * data: { role: 'ADMIN' },
2235
- * limit: 10
2236
- * });
2237
- * ```
2238
- */
2239
- updateManyAndReturn<T extends UpdateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'updateManyAndReturn'>>(args: Subset<T, UpdateManyAndReturnArgs<Schema, Model> & ExtractExtQueryArgs<ExtQueryArgs, 'updateManyAndReturn'>>): ZenStackPromise<Schema, SimplifiedPlainResult<Schema, Model, T, Options>[]>;
2240
2288
  /**
2241
2289
  * Creates or updates an entity.
2242
2290
  * @param args - upsert args
@@ -2606,6 +2654,14 @@ declare function requireModel(schema: SchemaDef, model: string): ModelDef;
2606
2654
  declare function requireTypeDef(schema: SchemaDef, type: string): _zenstackhq_schema.TypeDefDef;
2607
2655
  declare function getField(schema: SchemaDef, model: string, field: string): FieldDef | undefined;
2608
2656
  declare function requireField(schema: SchemaDef, modelOrType: string, field: string): FieldDef;
2657
+ /**
2658
+ * Gets all model fields, by default non-relation, non-computed, non-inherited fields only.
2659
+ */
2660
+ declare function getModelFields(schema: SchemaDef, model: string, options?: {
2661
+ relations?: boolean;
2662
+ computed?: boolean;
2663
+ inherited?: boolean;
2664
+ }): FieldDef[];
2609
2665
  declare function getIdFields<Schema extends SchemaDef>(schema: SchemaDef, model: GetModels<Schema>): readonly string[] | undefined;
2610
2666
  declare function requireIdFields(schema: SchemaDef, model: string): readonly string[];
2611
2667
  declare function getRelationForeignKeyFieldPairs(schema: SchemaDef, model: string, relationField: string): {
@@ -2632,7 +2688,9 @@ declare function isEnum(schema: SchemaDef, type: string): boolean;
2632
2688
  declare function getEnum(schema: SchemaDef, type: string): _zenstackhq_schema.EnumDef | undefined;
2633
2689
  declare function isTypeDef(schema: SchemaDef, type: string): boolean;
2634
2690
  declare function buildJoinPairs(schema: SchemaDef, model: string, modelAlias: string, relationField: string, relationModelAlias: string): [string, string][];
2635
- declare function makeDefaultOrderBy<Schema extends SchemaDef>(schema: SchemaDef, model: string): OrderBy<Schema, GetModels<Schema>, true, false>[];
2691
+ declare function makeDefaultOrderBy(schema: SchemaDef, model: string): {
2692
+ readonly [x: string]: "asc";
2693
+ }[];
2636
2694
  declare function getManyToManyRelation(schema: SchemaDef, model: string, field: string): {
2637
2695
  parentFkName: string;
2638
2696
  parentPKName: string;
@@ -2688,6 +2746,7 @@ declare const queryUtils_getIdFields: typeof getIdFields;
2688
2746
  declare const queryUtils_getIdValues: typeof getIdValues;
2689
2747
  declare const queryUtils_getManyToManyRelation: typeof getManyToManyRelation;
2690
2748
  declare const queryUtils_getModel: typeof getModel;
2749
+ declare const queryUtils_getModelFields: typeof getModelFields;
2691
2750
  declare const queryUtils_getRelationForeignKeyFieldPairs: typeof getRelationForeignKeyFieldPairs;
2692
2751
  declare const queryUtils_getTypeDef: typeof getTypeDef;
2693
2752
  declare const queryUtils_getUniqueFields: typeof getUniqueFields;
@@ -2705,7 +2764,7 @@ declare const queryUtils_requireModel: typeof requireModel;
2705
2764
  declare const queryUtils_requireTypeDef: typeof requireTypeDef;
2706
2765
  declare const queryUtils_stripAlias: typeof stripAlias;
2707
2766
  declare namespace queryUtils {
2708
- export { queryUtils_aggregate as aggregate, queryUtils_buildJoinPairs as buildJoinPairs, queryUtils_ensureArray as ensureArray, queryUtils_extractFieldName as extractFieldName, queryUtils_extractIdFields as extractIdFields, queryUtils_extractModelName as extractModelName, queryUtils_fieldHasDefaultValue as fieldHasDefaultValue, queryUtils_flattenCompoundUniqueFilters as flattenCompoundUniqueFilters, queryUtils_getDelegateDescendantModels as getDelegateDescendantModels, queryUtils_getDiscriminatorField as getDiscriminatorField, queryUtils_getEnum as getEnum, queryUtils_getField as getField, queryUtils_getIdFields as getIdFields, queryUtils_getIdValues as getIdValues, queryUtils_getManyToManyRelation as getManyToManyRelation, queryUtils_getModel as getModel, queryUtils_getRelationForeignKeyFieldPairs as getRelationForeignKeyFieldPairs, queryUtils_getTypeDef as getTypeDef, queryUtils_getUniqueFields as getUniqueFields, queryUtils_hasModel as hasModel, queryUtils_isEnum as isEnum, queryUtils_isForeignKeyField as isForeignKeyField, queryUtils_isInheritedField as isInheritedField, queryUtils_isRelationField as isRelationField, queryUtils_isScalarField as isScalarField, queryUtils_isTypeDef as isTypeDef, queryUtils_makeDefaultOrderBy as makeDefaultOrderBy, queryUtils_requireField as requireField, queryUtils_requireIdFields as requireIdFields, queryUtils_requireModel as requireModel, queryUtils_requireTypeDef as requireTypeDef, queryUtils_stripAlias as stripAlias };
2767
+ export { queryUtils_aggregate as aggregate, queryUtils_buildJoinPairs as buildJoinPairs, queryUtils_ensureArray as ensureArray, queryUtils_extractFieldName as extractFieldName, queryUtils_extractIdFields as extractIdFields, queryUtils_extractModelName as extractModelName, queryUtils_fieldHasDefaultValue as fieldHasDefaultValue, queryUtils_flattenCompoundUniqueFilters as flattenCompoundUniqueFilters, queryUtils_getDelegateDescendantModels as getDelegateDescendantModels, queryUtils_getDiscriminatorField as getDiscriminatorField, queryUtils_getEnum as getEnum, queryUtils_getField as getField, queryUtils_getIdFields as getIdFields, queryUtils_getIdValues as getIdValues, queryUtils_getManyToManyRelation as getManyToManyRelation, queryUtils_getModel as getModel, queryUtils_getModelFields as getModelFields, queryUtils_getRelationForeignKeyFieldPairs as getRelationForeignKeyFieldPairs, queryUtils_getTypeDef as getTypeDef, queryUtils_getUniqueFields as getUniqueFields, queryUtils_hasModel as hasModel, queryUtils_isEnum as isEnum, queryUtils_isForeignKeyField as isForeignKeyField, queryUtils_isInheritedField as isInheritedField, queryUtils_isRelationField as isRelationField, queryUtils_isScalarField as isScalarField, queryUtils_isTypeDef as isTypeDef, queryUtils_makeDefaultOrderBy as makeDefaultOrderBy, queryUtils_requireField as requireField, queryUtils_requireIdFields as requireIdFields, queryUtils_requireModel as requireModel, queryUtils_requireTypeDef as requireTypeDef, queryUtils_stripAlias as stripAlias };
2709
2768
  }
2710
2769
 
2711
2770
  type VisitResult = void | {
@@ -2720,6 +2779,7 @@ declare class ExpressionVisitor {
2720
2779
  protected visitBinary(e: BinaryExpression): VisitResult;
2721
2780
  protected visitUnary(e: UnaryExpression): VisitResult;
2722
2781
  protected visitCall(e: CallExpression): VisitResult;
2782
+ protected visitBinding(_e: BindingExpression): VisitResult;
2723
2783
  protected visitThis(_e: ThisExpression): VisitResult;
2724
2784
  protected visitNull(_e: NullExpression): VisitResult;
2725
2785
  }