11import { invariant } from '@zenstackhq/common-helpers' ;
2+ import {
3+ getCrudDialect ,
4+ InternalError ,
5+ QueryError ,
6+ QueryUtils ,
7+ type BaseCrudDialect ,
8+ type ClientContract ,
9+ type CRUD_EXT ,
10+ } from '@zenstackhq/runtime' ;
11+ import type {
12+ BinaryExpression ,
13+ BinaryOperator ,
14+ BuiltinType ,
15+ FieldDef ,
16+ GetModels ,
17+ LiteralExpression ,
18+ MemberExpression ,
19+ UnaryExpression ,
20+ } from '@zenstackhq/runtime/schema' ;
21+ import {
22+ ExpressionUtils ,
23+ type ArrayExpression ,
24+ type CallExpression ,
25+ type Expression ,
26+ type FieldExpression ,
27+ type SchemaDef ,
28+ } from '@zenstackhq/runtime/schema' ;
229import {
330 AliasNode ,
431 BinaryOperationNode ,
@@ -20,35 +47,6 @@ import {
2047 type OperationNode ,
2148} from 'kysely' ;
2249import { match } from 'ts-pattern' ;
23- import type { ClientContract , CRUD_EXT } from '../../client/contract' ;
24- import { getCrudDialect } from '../../client/crud/dialects' ;
25- import type { BaseCrudDialect } from '../../client/crud/dialects/base-dialect' ;
26- import { InternalError , QueryError } from '../../client/errors' ;
27- import {
28- getManyToManyRelation ,
29- getModel ,
30- getRelationForeignKeyFieldPairs ,
31- requireField ,
32- requireIdFields ,
33- } from '../../client/query-utils' ;
34- import type {
35- BinaryExpression ,
36- BinaryOperator ,
37- BuiltinType ,
38- FieldDef ,
39- GetModels ,
40- LiteralExpression ,
41- MemberExpression ,
42- UnaryExpression ,
43- } from '../../schema' ;
44- import {
45- ExpressionUtils ,
46- type ArrayExpression ,
47- type CallExpression ,
48- type Expression ,
49- type FieldExpression ,
50- type SchemaDef ,
51- } from '../../schema' ;
5250import { ExpressionEvaluator } from './expression-evaluator' ;
5351import { conjunction , disjunction , falseNode , isBeforeInvocation , logicalNot , trueNode } from './utils' ;
5452
@@ -124,7 +122,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
124122
125123 @expr ( 'field' )
126124 private _field ( expr : FieldExpression , context : ExpressionTransformerContext < Schema > ) {
127- const fieldDef = requireField ( this . schema , context . model , expr . field ) ;
125+ const fieldDef = QueryUtils . requireField ( this . schema , context . model , expr . field ) ;
128126 if ( ! fieldDef . relation ) {
129127 return this . createColumnRef ( expr . field , context ) ;
130128 } else {
@@ -226,15 +224,15 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
226224 invariant ( ExpressionUtils . isNull ( expr . right ) , 'only null comparison is supported for relation field' ) ;
227225 const leftRelDef = this . getFieldDefFromFieldRef ( expr . left , context . model ) ;
228226 invariant ( leftRelDef , 'failed to get relation field definition' ) ;
229- const idFields = requireIdFields ( this . schema , leftRelDef . type ) ;
227+ const idFields = QueryUtils . requireIdFields ( this . schema , leftRelDef . type ) ;
230228 normalizedLeft = this . makeOrAppendMember ( normalizedLeft , idFields [ 0 ] ! ) ;
231229 }
232230 let normalizedRight : Expression = expr . right ;
233231 if ( this . isRelationField ( expr . right , context . model ) ) {
234232 invariant ( ExpressionUtils . isNull ( expr . left ) , 'only null comparison is supported for relation field' ) ;
235233 const rightRelDef = this . getFieldDefFromFieldRef ( expr . right , context . model ) ;
236234 invariant ( rightRelDef , 'failed to get relation field definition' ) ;
237- const idFields = requireIdFields ( this . schema , rightRelDef . type ) ;
235+ const idFields = QueryUtils . requireIdFields ( this . schema , rightRelDef . type ) ;
238236 normalizedRight = this . makeOrAppendMember ( normalizedRight , idFields [ 0 ] ! ) ;
239237 }
240238 return { normalizedLeft, normalizedRight } ;
@@ -265,10 +263,10 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
265263 ExpressionUtils . isMember ( expr . left ) && ExpressionUtils . isField ( expr . left . receiver ) ,
266264 'left operand must be member access with field receiver' ,
267265 ) ;
268- const fieldDef = requireField ( this . schema , context . model , expr . left . receiver . field ) ;
266+ const fieldDef = QueryUtils . requireField ( this . schema , context . model , expr . left . receiver . field ) ;
269267 newContextModel = fieldDef . type ;
270268 for ( const member of expr . left . members ) {
271- const memberDef = requireField ( this . schema , newContextModel , member ) ;
269+ const memberDef = QueryUtils . requireField ( this . schema , newContextModel , member ) ;
272270 newContextModel = memberDef . type ;
273271 }
274272 }
@@ -318,7 +316,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
318316 if ( ExpressionUtils . isNull ( other ) ) {
319317 return this . transformValue ( expr . op === '==' ? ! this . auth : ! ! this . auth , 'Boolean' ) ;
320318 } else {
321- const authModel = getModel ( this . schema , this . authType ) ;
319+ const authModel = QueryUtils . getModel ( this . schema , this . authType ) ;
322320 if ( ! authModel ) {
323321 throw new QueryError (
324322 `Unsupported use of \`auth()\` in policy of model "${ context . model } ", comparing with \`auth()\` is only possible when auth type is a model` ,
@@ -481,7 +479,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
481479 return this . _field ( ExpressionUtils . field ( expr . members [ 0 ] ! ) , context ) ;
482480 } else {
483481 // transform the first segment into a relation access, then continue with the rest of the members
484- const firstMemberFieldDef = requireField ( this . schema , context . model , expr . members [ 0 ] ! ) ;
482+ const firstMemberFieldDef = QueryUtils . requireField ( this . schema , context . model , expr . members [ 0 ] ! ) ;
485483 receiver = this . transformRelationAccess ( expr . members [ 0 ] ! , firstMemberFieldDef . type , restContext ) ;
486484 members = expr . members . slice ( 1 ) ;
487485 }
@@ -493,7 +491,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
493491
494492 let startType : string ;
495493 if ( ExpressionUtils . isField ( expr . receiver ) ) {
496- const receiverField = requireField ( this . schema , context . model , expr . receiver . field ) ;
494+ const receiverField = QueryUtils . requireField ( this . schema , context . model , expr . receiver . field ) ;
497495 startType = receiverField . type ;
498496 } else {
499497 // "this." case, start type is the model of the context
@@ -504,7 +502,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
504502 const memberFields : { fromModel : string ; fieldDef : FieldDef } [ ] = [ ] ;
505503 let currType = startType ;
506504 for ( const member of members ) {
507- const fieldDef = requireField ( this . schema , currType , member ) ;
505+ const fieldDef = QueryUtils . requireField ( this . schema , currType , member ) ;
508506 memberFields . push ( { fieldDef, fromModel : currType } ) ;
509507 currType = fieldDef . type ;
510508 }
@@ -561,7 +559,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
561559 }
562560
563561 const field = expr . members [ 0 ] ! ;
564- const fieldDef = requireField ( this . schema , receiverType , field ) ;
562+ const fieldDef = QueryUtils . requireField ( this . schema , receiverType , field ) ;
565563 const fieldValue = receiver [ field ] ?? null ;
566564 return this . transformValue ( fieldValue , fieldDef . type as BuiltinType ) ;
567565 }
@@ -571,13 +569,13 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
571569 relationModel : string ,
572570 context : ExpressionTransformerContext < Schema > ,
573571 ) : SelectQueryNode {
574- const m2m = getManyToManyRelation ( this . schema , context . model , field ) ;
572+ const m2m = QueryUtils . getManyToManyRelation ( this . schema , context . model , field ) ;
575573 if ( m2m ) {
576574 return this . transformManyToManyRelationAccess ( m2m , context ) ;
577575 }
578576
579577 const fromModel = context . model ;
580- const { keyPairs, ownedByModel } = getRelationForeignKeyFieldPairs ( this . schema , fromModel , field ) ;
578+ const { keyPairs, ownedByModel } = QueryUtils . getRelationForeignKeyFieldPairs ( this . schema , fromModel , field ) ;
581579
582580 let condition : OperationNode ;
583581 if ( ownedByModel ) {
@@ -614,7 +612,7 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
614612 }
615613
616614 private transformManyToManyRelationAccess (
617- m2m : NonNullable < ReturnType < typeof getManyToManyRelation > > ,
615+ m2m : NonNullable < ReturnType < typeof QueryUtils . getManyToManyRelation > > ,
618616 context : ExpressionTransformerContext < Schema > ,
619617 ) {
620618 const eb = expressionBuilder < any , any > ( ) ;
@@ -672,13 +670,13 @@ export class ExpressionTransformer<Schema extends SchemaDef> {
672670
673671 private getFieldDefFromFieldRef ( expr : Expression , model : GetModels < Schema > ) : FieldDef | undefined {
674672 if ( ExpressionUtils . isField ( expr ) ) {
675- return requireField ( this . schema , model , expr . field ) ;
673+ return QueryUtils . requireField ( this . schema , model , expr . field ) ;
676674 } else if (
677675 ExpressionUtils . isMember ( expr ) &&
678676 expr . members . length === 1 &&
679677 ExpressionUtils . isThis ( expr . receiver )
680678 ) {
681- return requireField ( this . schema , model , expr . members [ 0 ] ! ) ;
679+ return QueryUtils . requireField ( this . schema , model , expr . members [ 0 ] ! ) ;
682680 } else {
683681 return undefined ;
684682 }
0 commit comments