@graphql-suite/schema 0.9.0 → 0.9.1
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/index.js +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @graphql-suite/schema v0.9.
|
|
1
|
+
/** @graphql-suite/schema v0.9.1 | MIT */
|
|
2
2
|
import{createTableRelationsHelpers as L$,extractTablesRelationalConfig as T$}from"drizzle-orm";import{and as C,asc as a1,count as e1,createTableRelationsHelpers as $$,desc as Y$,eq as A1,exists as K1,getTableColumns as G,getTableName as P1,gt as Z$,gte as _$,ilike as U$,inArray as X$,is as r,isNotNull as J$,isNull as W$,like as K$,lt as P$,lte as H$,ne as B$,normalizeRelation as M$,not as H1,notIlike as D$,notInArray as j$,notLike as V$,One as B1,or as I1,Relations as E$,sql as Q}from"drizzle-orm";import{PgTable as R$}from"drizzle-orm/pg-core";import{GraphQLBoolean as $1,GraphQLEnumType as k$,GraphQLError as I,GraphQLInputObjectType as O,GraphQLInt as g,GraphQLList as h,GraphQLNonNull as F,GraphQLObjectType as v,GraphQLSchema as M1,GraphQLString as Y1,printSchema as w$}from"graphql";import{parseResolveInfo as p}from"graphql-parse-resolve-info";import{is as Q1}from"drizzle-orm";import{PgTable as v1}from"drizzle-orm/pg-core";class J1{supportsReturning=!0;isTable($){return Q1($,v1)}async executeInsert($,_,X,U){let Y=$.insert(_).values(X);if(U)Y=Y.returning(U);return Y=Y.onConflictDoNothing(),await Y}async executeUpdate($,_,X,U,Y){let Z=$.update(_).set(X);if(U)Z=Z.where(U);if(Y)Z=Z.returning(Y);return await Z}async executeDelete($,_,X,U){let Y=$.delete(_);if(X)Y=Y.where(X);if(U)Y=Y.returning(U);return await Y}}var y=($)=>$.length?`${$[0]?.toLocaleLowerCase()}${$.length>1?$.slice(1,$.length):""}`:$,R=($)=>$.length?`${$[0]?.toLocaleUpperCase()}${$.length>1?$.slice(1,$.length):""}`:$;import{getTableColumns as L1}from"drizzle-orm";import{GraphQLError as N}from"graphql";var R1=($,_,X,U,Y)=>{if(_ instanceof Date)return _.toISOString();if(_ instanceof Buffer)return Array.from(_);if(typeof _==="bigint")return _.toString();if(Array.isArray(_)){let Z=Y?.[X]?.[$];if(Z)return b(_,Z.targetTableName,Z.relation.referencedTable,Y);if(U.columnType==="PgGeometry"||U.columnType==="PgVector")return _;return _.map((J)=>R1($,J,X,U,Y))}if(typeof _==="object"){let Z=Y?.[X]?.[$];if(Z)return o(_,Z.targetTableName,Z.relation.referencedTable,Y);if(U.columnType==="PgGeometryObject")return _;if(U.dataType==="json")return _;return JSON.stringify(_)}return _},o=($,_,X,U)=>{for(let[Y,Z]of Object.entries($))if(Z===void 0||Z===null)delete $[Y];else $[Y]=R1(Y,Z,_,X[Y],U);return $},b=($,_,X,U)=>{for(let Y of $)o(Y,_,X,U);return $},t=($,_,X)=>{switch(_.dataType){case"date":{let U=new Date($);if(Number.isNaN(U.getTime()))throw new N(`Field '${X}' is not a valid date!`);return U}case"buffer":{if(!Array.isArray($))throw new N(`Field '${X}' is not an array!`);return Buffer.from($)}case"json":{if(_.columnType==="PgGeometryObject")return $;return $}case"array":{if(!Array.isArray($))throw new N(`Field '${X}' is not an array!`);if(_.columnType==="PgGeometry"&&$.length!==2)throw new N(`Invalid float tuple in field '${X}': expected array with length of 2, received ${$.length}`);return $}case"bigint":try{return BigInt($)}catch{throw new N(`Field '${X}' is not a BigInt!`)}default:return $}},a=($,_)=>{for(let[X,U]of Object.entries($))if(U===void 0)delete $[X];else{let Y=L1(_)[X];if(!Y)throw new N(`Unknown column: ${X}`);if(U===null&&Y.notNull){delete $[X];continue}$[X]=t(U,Y,X)}return $},k1=($,_)=>{for(let X of $)a(X,_);return $};import{is as c}from"drizzle-orm";import{PgBigInt53 as f1,PgBigSerial53 as g1,PgInteger as h1,PgSerial as d1,PgSmallInt as y1,PgSmallSerial as N1}from"drizzle-orm/pg-core";import{GraphQLBoolean as b1,GraphQLEnumType as c1,GraphQLFloat as f,GraphQLInputObjectType as p1,GraphQLInt as w1,GraphQLList as e,GraphQLNonNull as n,GraphQLObjectType as u1,GraphQLString as W1}from"graphql";import{GraphQLScalarType as T1,Kind as T}from"graphql";var s=new T1({name:"JSON",description:"The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).",serialize($){return $},parseValue($){return $},parseLiteral($){switch($.kind){case T.STRING:case T.BOOLEAN:return $.value;case T.INT:case T.FLOAT:return parseFloat($.value);case T.OBJECT:{let _=Object.create(null);return $.fields.forEach((X)=>{_[X.name.value]=s.parseLiteral(X.value)}),_}case T.LIST:return $.values.map((_)=>s.parseLiteral(_));case T.NULL:return null;default:return}}});var m1=/^[a-zA-Z0-9_]+$/,S1=new WeakMap,o1=($,_,X)=>{let U=S1.get($);if(U)return U;let Y=new c1({name:`${R(X)}${R(_)}Enum`,values:Object.fromEntries(($.enumValues??[]).map((Z,J)=>{let W=Z.replace(/-/g,"_");return[m1.test(W)?W:`Option${J}`,{value:Z,description:`Value: ${Z}`}]}))});return S1.set($,Y),Y},s1=new u1({name:"PgGeometryObject",fields:{x:{type:f},y:{type:f}}}),n1=new p1({name:"PgGeometryObjectInput",fields:{x:{type:f},y:{type:f}}}),x1=($,_,X,U)=>{switch($.dataType){case"boolean":return{type:b1,description:"Boolean"};case"json":return $.columnType==="PgGeometryObject"?{type:U?n1:s1,description:"Geometry points XY"}:{type:s,description:"JSON"};case"date":return{type:W1,description:"Date"};case"string":if($.enumValues?.length)return{type:o1($,_,X)};return{type:W1,description:"String"};case"bigint":return{type:W1,description:"BigInt"};case"number":return c($,h1)||c($,y1)||c($,f1)||c($,d1)||c($,N1)||c($,g1)?{type:w1,description:"Integer"}:{type:f,description:"Float"};case"buffer":return{type:new e(new n(w1)),description:"Buffer"};case"array":{if($.columnType==="PgVector")return{type:new e(new n(f)),description:"Array<Float>"};if($.columnType==="PgGeometry")return{type:new e(new n(f)),description:"Tuple<[Float, Float]>"};let Y=x1($.baseColumn,_,X,U);return{type:new e(new n(Y.type)),description:`Array<${Y.description}>`}}default:throw Error(`GraphQL-Suite Error: Type ${$.dataType} is not implemented!`)}},i=($,_,X,U=!1,Y=!1,Z=!1)=>{let J=x1($,_,X,Z);if(["string","boolean","number"].find((K)=>K===$.dataType))delete J.description;if(U)return J;if($.notNull&&!(Y&&($.hasDefault||$.defaultFn)))return{type:new n(J.type),description:J.description};return J};var i1=()=>({query:!0,insert:!1,update:!1,delete:!1}),r1=($,_)=>({id:$,mode:"permissive",tables:_}),l1=($,_)=>({id:$,mode:"restricted",tables:_});function F1($,_,X){let U=[...$.tables?.exclude??[]],Y={...$.tables?.config??{}},Z={};for(let W of X){if(U.includes(W))continue;let K=t1(_,W);if(K===!1){U.push(W);continue}if(K===!0)continue;let P=_.mode==="permissive",M=K.query??P,H=K.insert??P,B=K.update??P,D=K.delete??P;if(!M&&!H&&!B&&!D){U.push(W);continue}if(Y[W]={...Y[W],queries:M},!(H||B||D))Y[W]={...Y[W],mutations:!1};else if(Y[W]={...Y[W],mutations:!0},!H||!B||!D)Z[W]={insert:H,update:B,delete:D}}return{config:{...$,tables:{exclude:U.length?U:void 0,config:Object.keys(Y).length?Y:void 0}},mutationFilter:Z}}function t1($,_){let X=$.tables?.[_];if($.mode==="permissive"){if(X===void 0)return!0;return X}if(X===void 0)return!1;return X}function z1($,_){for(let[X,U]of Object.entries(_)){let Y=R(X);if(!U.insert)delete $[`insertInto${Y}`],delete $[`insertInto${Y}Single`];if(!U.update)delete $[`update${Y}`];if(!U.delete)delete $[`deleteFrom${Y}`]}}class d{db;tables;relationMap;relationalSchema;tableNamesMap;config;hooks;adapter;suffixes;limitRelationDepth;limitSelfRelationDepth;allTableNames;excludedTables;tableOperations;pruneRelations;filterTypes=new Map;orderByTypes=new Map;filterValueTypes=new Map;selectFieldTypes=new Map;innerOrder;constructor($,_){this.db=$,this.config=_??{},this.hooks=_?.hooks??{},this.adapter=new J1,this.suffixes={list:_?.suffixes?.list??"",single:_?.suffixes?.single??"Single"},this.limitRelationDepth=_?.limitRelationDepth??3,this.limitSelfRelationDepth=_?.limitSelfRelationDepth??1,this.pruneRelations=new Map(Object.entries(_?.pruneRelations??{}));let X=$._.fullSchema;if(!X)throw Error("GraphQL-Suite Error: Schema not found in drizzle instance. Make sure schema is passed to the drizzle() constructor.");let U=$._;if(this.relationalSchema=U.schema,this.tableNamesMap=U.tableNamesMap,typeof this.limitRelationDepth==="number"){if(this.limitRelationDepth<0||this.limitRelationDepth!==~~this.limitRelationDepth)throw Error("GraphQL-Suite Error: config.limitRelationDepth is supposed to be nonnegative integer or undefined!")}if(this.limitSelfRelationDepth<1||this.limitSelfRelationDepth!==~~this.limitSelfRelationDepth)throw Error("GraphQL-Suite Error: config.limitSelfRelationDepth must be a positive integer!");if(this.suffixes.list===this.suffixes.single)throw Error("GraphQL-Suite Error: List and single query suffixes cannot be the same. This would create conflicting GraphQL field names.");this.innerOrder=new O({name:"InnerOrder",fields:{direction:{type:new F(new k$({name:"OrderDirection",description:"Order by direction",values:{asc:{value:"asc",description:"Ascending order"},desc:{value:"desc",description:"Descending order"}}}))},priority:{type:new F(g),description:"Priority of current field"}}}),this.tables=this.extractTables(X),this.allTableNames=Object.keys(this.tables),this.excludedTables=new Set(_?.tables?.exclude??[]),this.tableOperations=_?.tables?.config??{};for(let Y of this.excludedTables)delete this.tables[Y];this.relationMap=this.buildRelationMap(X)}toFieldMap($,_){return{...$,..._}}buildEntities(){let $={},_={},X={},U={};for(let Y of Object.keys(this.tables)){let Z=this.tableOperations[Y],J=Z?.queries!==!1,W=Z?.mutations!==!1&&this.config.mutations!==!1;if(!J&&!W)continue;let K=this.generateTableTypes(Y),{insertInput:P,updateInput:M,tableFilters:H,tableOrder:B}=K.inputs,{selectSingleOutput:D,selectArrOutput:j,singleTableItemOutput:V,arrTableItemOutput:E}=K.outputs;if(J){let k=this.createQueryResolver(Y,B,H);$[k.name]={type:j,args:k.args,resolve:k.resolver};let w=this.createSingleQueryResolver(Y,B,H);$[w.name]={type:D,args:w.args,resolve:w.resolver};let x=this.createCountResolver(Y,H);$[x.name]={type:g,args:x.args,resolve:x.resolver},X[H.name]=H,X[B.name]=B,U[D.name]=D}if(W){let k=this.createInsertResolver(Y,P);_[k.name]={type:E,args:k.args,resolve:k.resolver};let w=this.createInsertSingleResolver(Y,P);_[w.name]={type:V,args:w.args,resolve:w.resolver};let x=this.createUpdateResolver(Y,M,H);_[x.name]={type:E,args:x.args,resolve:x.resolver};let S=this.createDeleteResolver(Y,H);_[S.name]={type:E,args:S.args,resolve:S.resolver},X[P.name]=P,X[M.name]=M,X[H.name]=H,X[B.name]=B,U[V.name]=V}}return{queries:$,mutations:_,inputs:X,types:U}}build(){let $=this.buildEntities(),{queries:_,mutations:X,inputs:U,types:Y}=$,Z={types:[...Object.values(U),...Object.values(Y)],query:new v({name:"Query",fields:_})};if(this.config.mutations!==!1)Z.mutation=new v({name:"Mutation",fields:X});let J=new M1(Z);this.logDebugInfo(J);let W=new Map,K=this.db,P=this.config,M=this.allTableNames;return{schema:J,entities:$,withPermissions:(D)=>{let j=W.get(D.id);if(j)return j;let{config:V,mutationFilter:E}=F1(P,D,M),k=new Set(V.tables?.exclude??[]);if(!M.some((A)=>!k.has(A))){let A=new M1({query:new v({name:"Query",fields:{_empty:{type:$1}}})});return W.set(D.id,A),A}let S=new d(K,V).buildEntities();if(Object.keys(E).length)z1(S.mutations,E);let z={types:[...Object.values(S.inputs),...Object.values(S.types)],query:new v({name:"Query",fields:Object.keys(S.queries).length?S.queries:{_empty:{type:$1}}})};if(V.mutations!==!1&&Object.keys(S.mutations).length)z.mutation=new v({name:"Mutation",fields:S.mutations});let L=new M1(z);return W.set(D.id,L),L},clearPermissionCache:(D)=>{if(D)W.delete(D);else W.clear()}}}logDebugInfo($){let _=this.config.debug;if(!_)return;let X=_===!0||typeof _==="object"&&_.schemaSize!==!1,U=typeof _==="object"&&_.relationTree===!0;if(X){let Y=w$($),Z=Object.keys($.getTypeMap()).filter((J)=>!J.startsWith("__")).length;console.info(`[drizzle-graphql] Schema: ${Y.length} bytes, ${Z} types`)}if(U)for(let[Y,Z]of Object.entries(this.relationMap)){let J=Object.keys(Z);if(J.length)console.info(`[drizzle-graphql] ${Y}: ${J.join(", ")}`)}}extractTables($){let _=Object.entries($).filter(([X,U])=>r(U,R$));if(!_.length)throw Error("GraphQL-Suite Error: No tables detected in Drizzle-ORM's database instance. Did you forget to pass schema to drizzle constructor?");return Object.fromEntries(_)}getTable($){let _=this.tables[$];if(!_)throw Error(`GraphQL-Suite Error: Table '${$}' not found.`);return _}buildRelationMap($){let _=Object.entries($),X=Object.entries(this.tables),U=_.filter(([Y,Z])=>r(Z,E$)).map(([Y,Z])=>{let J=X.find(([W,K])=>K===Z.table);if(!J)return null;return[J[0],Z]}).filter((Y)=>Y!==null).map(([Y,Z])=>[Y,Z.config($$(this.getTable(Y)))]);return Object.fromEntries(U.map(([Y,Z])=>{let J=Object.fromEntries(Object.entries(Z).map(([W,K])=>{let P=X.find(([M,H])=>H===K.referencedTable);if(!P)return null;return[W,{relation:K,targetTableName:P[0]}]}).filter((W)=>W!==null));return[Y,J]}))}getFilterType($){let _=this.filterTypes.get($);if(_)return _;let X=new O({name:`${R($)}Filters`,fields:()=>{let U=this.getFilterValues($),Y=this.buildRelationFilterFields($);return{...U,...Y,OR:{type:new h(new F(new O({name:`${R($)}FiltersOr`,fields:()=>({...U,...Y})})))}}}});return this.filterTypes.set($,X),X}getOrderByType($){let _=this.orderByTypes.get($);if(_)return _;let X=this.getTable($),U=G(X),Y=Object.fromEntries(Object.entries(U).map(([J])=>[J,{type:this.innerOrder}])),Z=new O({name:`${R($)}OrderBy`,fields:Y});return this.orderByTypes.set($,Z),Z}getFilterValues($){let _=this.filterValueTypes.get($);if(_)return _;let X=this.getTable($),U=G(X),Y=Object.fromEntries(Object.entries(U).map(([Z,J])=>[Z,{type:this.generateColumnFilterValues(J,$,Z)}]));return this.filterValueTypes.set($,Y),Y}getSelectFields($){let _=this.selectFieldTypes.get($);if(_)return _;let X=this.getTable($),U=G(X),Y=Object.fromEntries(Object.entries(U).map(([Z,J])=>[Z,i(J,Z,$)]));return this.selectFieldTypes.set($,Y),Y}generateColumnFilterValues($,_,X){let U=i($,X,_,!0,!1,!0),Y=new h(new F(U.type)),Z={eq:{type:U.type,description:U.description},ne:{type:U.type,description:U.description},lt:{type:U.type,description:U.description},lte:{type:U.type,description:U.description},gt:{type:U.type,description:U.description},gte:{type:U.type,description:U.description},like:{type:Y1},notLike:{type:Y1},ilike:{type:Y1},notIlike:{type:Y1},inArray:{type:Y,description:`Array<${U.description}>`},notInArray:{type:Y,description:`Array<${U.description}>`},isNull:{type:$1},isNotNull:{type:$1}};return new O({name:`${R(_)}${R(X)}Filters`,fields:{...Z,OR:{type:new h(new F(new O({name:`${R(_)}${R(X)}FiltersOr`,fields:Z})))}}})}generateSelectFields($,_,X,U=0,Y=new Set,Z=0,J,W){let K=this.relationMap[$],P=K?Object.entries(K):[],M=X?this.getOrderByType($):void 0,H=this.getFilterType($),B=this.getSelectFields($);if(J||typeof this.limitRelationDepth!=="number"&&Y.has($)||typeof this.limitRelationDepth==="number"&&U>=this.limitRelationDepth||!P.length)return{order:M,filters:H,tableFields:B,relationFields:{}};let D=[],j=new Set(Y).add($),V=U+1;for(let[k,{targetTableName:w,relation:x}]of P){if(W&&!W.includes(k))continue;let S=this.pruneRelations.get(`${$}.${k}`);if(S===!1)continue;let z=`${_}${R(k)}Relation`,L=r(x,B1),A=w===$;if(A&&Z+1>=this.limitSelfRelationDepth)continue;let U1=!A&&Y.has(w)&&typeof this.limitRelationDepth==="number"?Math.max(V,this.limitRelationDepth-1):V,m=S==="leaf",X1=S&&typeof S==="object"?S.only:void 0,q=this.generateSelectFields(w,z,!L,U1,j,A?Z+1:0,m,X1),l=new v({name:z,fields:this.toFieldMap(q.tableFields,q.relationFields)});if(L){D.push([k,{type:l,args:{where:{type:q.filters}}}]);continue}D.push([k,{type:new F(new h(new F(l))),args:{where:{type:q.filters},orderBy:{type:q.order},offset:{type:g},limit:{type:g}}}])}let E=Object.fromEntries(D);return{order:M,filters:H,tableFields:B,relationFields:E}}generateTableTypes($){let _=R($),{tableFields:X,relationFields:U,filters:Y,order:Z}=this.generateSelectFields($,_,!0),J=this.getTable($),W=G(J),K=Object.entries(W),P=Object.fromEntries(K.map(([k,w])=>[k,i(w,k,$,!1,!0,!0)])),M=Object.fromEntries(K.map(([k,w])=>[k,i(w,k,$,!0,!1,!0)])),H=new O({name:`${_}InsertInput`,fields:P}),B=new O({name:`${_}UpdateInput`,fields:M}),D=new v({name:`${_}SelectItem`,fields:this.toFieldMap(X,U)}),j=new F(new h(new F(D))),V=new v({name:`${_}Item`,fields:this.toFieldMap(X)}),E=new F(new h(new F(V)));return{inputs:{insertInput:H,updateInput:B,tableOrder:Z,tableFilters:Y},outputs:{selectSingleOutput:D,selectArrOutput:j,singleTableItemOutput:V,arrTableItemOutput:E}}}buildRelationFilterFields($){let _=this.relationMap[$];if(!_)return{};let X={};for(let[U,{targetTableName:Y,relation:Z}]of Object.entries(_))if(r(Z,B1))X[U]={type:this.getFilterType(Y)};else X[U]={type:new O({name:`${R($)}${R(U)}RelFilter`,fields:()=>({some:{type:this.getFilterType(Y)},every:{type:this.getFilterType(Y)},none:{type:this.getFilterType(Y)}})})};return X}createQueryResolver($,_,X){let U=`${y($)}${this.suffixes.list}`,Y=`${R($)}SelectItem`,Z=this.getTable($),J=this.db.query[$];if(!J)throw Error(`GraphQL-Suite Error: Table ${$} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`);return{name:U,resolver:async(P,M,H,B)=>{return this.executeWithHooks($,"query",M,H,B,async(D)=>{try{let{offset:j,limit:V,orderBy:E,where:k}=D,w=p(B,{deep:!0}),S=await J.findMany({columns:this.extractColumns(this.getFieldsByTypeName(w,Y),Z),offset:j,limit:V,orderBy:E?this.extractOrderBy(Z,E):void 0,where:k?this.extractAllFilters(Z,$,k):void 0,with:this.relationMap[$]?this.extractRelationsParams($,w,Y):void 0});return b(S,$,Z,this.relationMap)}catch(j){if(typeof j==="object"&&j!==null&&"message"in j&&typeof j.message==="string")throw new I(j.message);throw j}})},args:{offset:{type:g},limit:{type:g},orderBy:{type:_},where:{type:X}}}}createSingleQueryResolver($,_,X){let U=`${y($)}${this.suffixes.single}`,Y=`${R($)}SelectItem`,Z=this.getTable($),J=this.db.query[$];if(!J)throw Error(`GraphQL-Suite Error: Table ${$} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`);return{name:U,resolver:async(P,M,H,B)=>{return this.executeWithHooks($,"querySingle",M,H,B,async(D)=>{try{let{offset:j,orderBy:V,where:E}=D,k=p(B,{deep:!0}),x=await J.findFirst({columns:this.extractColumns(this.getFieldsByTypeName(k,Y),Z),offset:j,orderBy:V?this.extractOrderBy(Z,V):void 0,where:E?this.extractAllFilters(Z,$,E):void 0,with:this.relationMap[$]?this.extractRelationsParams($,k,Y):void 0});if(!x)return;return o(x,$,Z,this.relationMap)}catch(j){if(typeof j==="object"&&j!==null&&"message"in j&&typeof j.message==="string")throw new I(j.message);throw j}})},args:{offset:{type:g},orderBy:{type:_},where:{type:X}}}}createCountResolver($,_){let X=`${y($)}Count`,U=this.getTable($);return{name:X,resolver:async(J,W,K,P)=>{return this.executeWithHooks($,"count",W,K,P,async(M)=>{try{let{where:H}=M,B=H?this.extractAllFilters(U,$,H):void 0;return await this.executeCountQuery(U,B)}catch(H){if(typeof H==="object"&&H!==null&&"message"in H&&typeof H.message==="string")throw new I(H.message);throw H}})},args:{where:{type:_}}}}createInsertResolver($,_){let X=`insertInto${R($)}`,U=`${R($)}Item`,Y=this.getTable($),Z={values:{type:new F(new h(new F(_)))}};return{name:X,resolver:async(W,K,P,M)=>{return this.executeWithHooks($,"insert",K,P,M,async(H)=>{try{let B=k1(H.values,Y);if(!B.length)throw new I("No values were provided!");let D=p(M,{deep:!0}),j=this.extractColumnsSQLFormat(this.getFieldsByTypeName(D,U),Y),V=await this.adapter.executeInsert(this.db,Y,B,j);return b(V,$,Y)}catch(B){if(typeof B==="object"&&B!==null&&"message"in B&&typeof B.message==="string")throw new I(B.message);throw B}})},args:Z}}createInsertSingleResolver($,_){let X=`insertInto${R($)}Single`,U=`${R($)}Item`,Y=this.getTable($),Z={values:{type:new F(_)}};return{name:X,resolver:async(W,K,P,M)=>{return this.executeWithHooks($,"insertSingle",K,P,M,async(H)=>{try{let B=a(H.values,Y),D=p(M,{deep:!0}),j=this.extractColumnsSQLFormat(this.getFieldsByTypeName(D,U),Y),V=await this.adapter.executeInsert(this.db,Y,[B],j);if(!V[0])return;return o(V[0],$,Y)}catch(B){if(typeof B==="object"&&B!==null&&"message"in B&&typeof B.message==="string")throw new I(B.message);throw B}})},args:Z}}createUpdateResolver($,_,X){let U=`update${R($)}`,Y=`${R($)}Item`,Z=this.getTable($),J={set:{type:new F(_)},where:{type:X}};return{name:U,resolver:async(K,P,M,H)=>{return this.executeWithHooks($,"update",P,M,H,async(B)=>{try{let{where:D,set:j}=B,V=p(H,{deep:!0}),E=this.extractColumnsSQLFormat(this.getFieldsByTypeName(V,Y),Z),k=a(j,Z);if(!Object.keys(k).length)throw new I("Unable to update with no values specified!");let w=D?this.extractAllFilters(Z,$,D):void 0,x=await this.adapter.executeUpdate(this.db,Z,k,w,E);return b(x,$,Z)}catch(D){if(typeof D==="object"&&D!==null&&"message"in D&&typeof D.message==="string")throw new I(D.message);throw D}})},args:J}}createDeleteResolver($,_){let X=`deleteFrom${R($)}`,U=`${R($)}Item`,Y=this.getTable($);return{name:X,resolver:async(W,K,P,M)=>{return this.executeWithHooks($,"delete",K,P,M,async(H)=>{try{let{where:B}=H,D=p(M,{deep:!0}),j=this.extractColumnsSQLFormat(this.getFieldsByTypeName(D,U),Y),V=B?this.extractAllFilters(Y,$,B):void 0,E=await this.adapter.executeDelete(this.db,Y,V,j);return b(E,$,Y)}catch(B){if(typeof B==="object"&&B!==null&&"message"in B&&typeof B.message==="string")throw new I(B.message);throw B}})},args:{where:{type:_}}}}extractColumnFilters($,_,X){if(!X.OR?.length)delete X.OR;let U=Object.entries(X);if(X.OR){let P=[];for(let j of X.OR){let V=this.extractColumnFilters($,_,j);if(V)P.push(V)}let M=P.length>1?I1(...P):P.length===1?P[0]:void 0;if(U.length<=1)return M;let{OR:H,...B}=X,D=this.extractColumnFilters($,_,B);if(!D)return M;if(!M)return D;return C(D,M)}let Y={eq:A1,ne:B$,gt:Z$,gte:_$,lt:P$,lte:H$},Z={like:K$,notLike:V$,ilike:U$,notIlike:D$},J={inArray:X$,notInArray:j$},W={isNull:W$,isNotNull:J$},K=[];for(let[P,M]of U){if(M===null||M===!1)continue;if(P in Y){let H=Y[P];if(H){let B=t(M,$,_);K.push(H($,B))}}else if(P in Z){let H=Z[P];if(H)K.push(H($,M))}else if(P in J){let H=J[P];if(H){if(!M.length)throw new I(`WHERE ${_}: Unable to use operator ${P} with an empty array!`);let B=M.map((D)=>t(D,$,_));K.push(H($,B))}}else if(P in W){let H=W[P];if(H)K.push(H($))}}return K.length?K.length>1?C(...K):K[0]:void 0}extractTableColumnFilters($,_,X){if(!X.OR?.length)delete X.OR;let U=G($),Y=[],Z=[];for(let[W,K]of Object.entries(X)){if(W==="OR")continue;if(K===null)continue;if(U[W])Y.push([W,K]);else Z.push([W,K])}if(X.OR){let W=[];for(let B of X.OR){let D=this.extractAllFilters($,_,B);if(D)W.push(D)}let K=W.length>1?I1(...W):W.length===1?W[0]:void 0;if(Y.length===0&&Z.length===0)return K;let{OR:P,...M}=X,H=this.extractAllFilters($,_,M);if(!H)return K;if(!K)return H;return C(H,K)}let J=[];for(let[W,K]of Y){let P=U[W];if(!P)continue;let M=this.extractColumnFilters(P,W,K);if(M)J.push(M)}for(let[W,K]of Z){let P=this.extractRelationFilters($,_,W,K);if(P)J.push(P)}return J.length?J.length>1?C(...J):J[0]:void 0}extractAllFilters($,_,X){return this.extractTableColumnFilters($,_,X)}extractRelationFilters($,_,X,U){let Y=this.relationMap[_]?.[X];if(!Y)return;let{targetTableName:Z,relation:J}=Y,W=this.getTable(Z);if(r(J,B1))return this.buildExistsSubquery($,W,J,Z,U,"some");else{let P=[];if(U.some){let M=this.buildExistsSubquery($,W,J,Z,U.some,"some");if(M)P.push(M)}if(U.every){let M=this.buildExistsSubquery($,W,J,Z,U.every,"every");if(M)P.push(M)}if(U.none){let M=this.buildExistsSubquery($,W,J,Z,U.none,"none");if(M)P.push(M)}return P.length?P.length>1?C(...P):P[0]:void 0}}buildExistsSubquery($,_,X,U,Y,Z){let J=this.buildJoinCondition($,_,X);if(!J)return;let W=this.extractAllFilters(_,U,Y),K=W?C(J,W):J;if(!K)return;let P=this.db.select({_:Q`1`}).from(_).where(K);switch(Z){case"some":return K1(P);case"none":return H1(K1(P));case"every":{if(!W)return;let M=H1(W),H=C(J,M);if(!H)return;let B=this.db.select({_:Q`1`}).from(_).where(H);return H1(K1(B))}}}buildJoinCondition($,_,X){try{let{fields:U,references:Y}=M$(this.relationalSchema,this.tableNamesMap,X);if(!U?.length||!Y?.length)return;let Z=P1($),J=[];for(let W=0;W<U.length;W++){let K=U[W],P=Y[W];if(!K||!P)continue;if(P1(K.table)===Z)J.push(Q`${Q.identifier(Z)}.${Q.identifier(K.name)} = ${P}`);else if(P1(P.table)===Z)J.push(Q`${K} = ${Q.identifier(Z)}.${Q.identifier(P.name)}`);else J.push(A1(K,P))}return J.length>1?C(...J):J[0]}catch{return}}extractOrderBy($,_){let X=[];for(let[U,Y]of Object.entries(_).sort((Z,J)=>{let W=Z[1]?.priority??0;return(J[1]?.priority??0)-W})){if(!Y)continue;let{direction:Z}=Y,J=G($)[U];if(!J)continue;X.push(Z==="asc"?a1(J):Y$(J))}return X}extractColumns($,_){let X=G(_),U=[];for(let[Y,Z]of Object.entries($)){if(!X[Z.name])continue;U.push([Z.name,!0])}if(!U.length){let Y=Object.entries(X),Z=Y.find((J)=>!q1.includes(J[1].columnType))?.[0]??Y[0]?.[0]??"";U.push([Z,!0])}return Object.fromEntries(U)}extractColumnsSQLFormat($,_){let X=G(_),U=[];for(let[Y,Z]of Object.entries($)){let J=X[Z.name];if(!J)continue;U.push([Z.name,J])}if(!U.length){let Y=Object.entries(X),Z=Y.find((W)=>!q1.includes(W[1].columnType))?.[0]??Y[0]?.[0]??"",J=X[Z];if(J)U.push([Z,J])}return Object.fromEntries(U)}getFieldsByTypeName($,_){return $.fieldsByTypeName[_]??{}}extractRelationsParams($,_,X){return this.extractRelationsParamsInner($,X,_,!0)}extractRelationsParamsInner($,_,X,U=!1){let Y=this.relationMap[$];if(!Y)return;let Z=Object.entries(X.fieldsByTypeName).find(([W])=>W===_)?.[1];if(!Z)return;let J={};for(let[W,{targetTableName:K}]of Object.entries(Y)){let P=`${U?R($):_}${R(W)}Relation`,M=Object.values(Z).find((E)=>E.name===W)?.fieldsByTypeName[P];if(!M)continue;let H=this.getTable(K),D={columns:this.extractColumns(M,H)},j=Object.values(Z).find((E)=>E.name===W),V=j?.args;D.orderBy=V?.orderBy?this.extractOrderBy(H,V.orderBy):void 0,D.where=V?.where?this.extractAllFilters(H,W,V.where):void 0,D.offset=V?.offset??void 0,D.limit=V?.limit??void 0,D.with=j?this.extractRelationsParamsInner(K,P,j):void 0,J[W]=D}return J}async executeWithHooks($,_,X,U,Y,Z){let J=this.hooks[$];if(!J)return Z(X);let W=J[_];if(!W)return Z(X);if("resolve"in W&&W.resolve){let H=W.resolve;return H({args:X,context:U,info:Y,defaultResolve:(D)=>Z(D??X)})}let K=X,P;if("before"in W&&W.before){let H=await W.before({args:X,context:U,info:Y});if(H){if(H.args)K=H.args;if(H.data)P=H.data}}let M=await Z(K);if("after"in W&&W.after)return W.after({result:M,beforeData:P,context:U,info:Y});return M}async executeCountQuery($,_){let X=this.db;if(X.$count&&typeof X.$count==="function")try{let J=_?await X.$count($,_):await X.$count($);return Number(J)||0}catch(J){}let U=this.db.select({count:e1()}).from($),Z=(await(_?U.where(_):U))[0]?.count||0;return Number(Z)}}var q1=["SQLiteBigInt","SQLiteBlobJson","SQLiteBlobBuffer"];import{isEnumType as S$,isInputObjectType as Z1,isListType as V1,isNonNullType as u,isObjectType as D1,isScalarType as x$,printSchema as F$}from"graphql";function G1($){let _=$.getQueryType(),X=$.getMutationType(),U=new Map;if(!_)return U;let Y=_.getFields(),Z=X?.getFields()??{};for(let[W]of Object.entries(Y)){if(!W.endsWith("Count"))continue;let K=W.slice(0,-5),P=Y[`${K}s`]?`${K}s`:Y[K]?K:void 0,M=Y[K]?K:void 0;if(!P)continue;let H=Y[P];if(!H)continue;let B=j1(H.type);if(!B)continue;let D=B.getFields(),j=[],V={};for(let[m,X1]of Object.entries(D)){let q=O1(X1.type);if(D1(q.type)){let l=q.isList;V[m]={entity:m,type:l?"many":"one",_graphqlType:q.type}}else j.push(m)}let E=R(K),k=Z[`insertInto${E}`]?`insertInto${E}`:void 0,w=Z[`insertInto${E}Single`]?`insertInto${E}Single`:void 0,x=Z[`update${E}`]?`update${E}`:void 0,S=Z[`deleteFrom${E}`]?`deleteFrom${E}`:void 0,z=$.getTypeMap(),L=`${E}Filters`in z,A=`${E}InsertInput`in z,E1=`${E}UpdateInput`in z,U1=`${E}OrderBy`in z;U.set(K,{tableName:K,typeName:E,fields:j,relations:V,queryName:M,queryListName:P,countName:W,insertName:k,insertSingleName:w,updateName:x,deleteName:S,hasFilters:L,hasInsertInput:A,hasUpdateInput:E1,hasOrderBy:U1})}let J=new Map;for(let[W,K]of U)J.set(W,new Set(K.fields));for(let W of U.values())for(let[,K]of Object.entries(W.relations)){let P=K._graphqlType;if(delete K._graphqlType,!P)continue;let M=P.getFields(),H=new Set;for(let[j,V]of Object.entries(M)){let E=O1(V.type);if(!D1(E.type))H.add(j)}let B,D=0;for(let[j,V]of J){let E=0;for(let k of H)if(V.has(k))E++;if(E===H.size&&E>D)D=E,B=j}if(B)K.entity=B}return U}function j1($){if(u($))return j1($.ofType);if(V1($))return j1($.ofType);if(D1($))return $;return null}function O1($){let _=!1,X=!1,U=$;if(u(U))X=!0,U=U.ofType;if(V1(U)){if(_=!0,U=U.ofType,u(U))U=U.ofType}return{type:U,isList:_,isNonNull:X}}function z$($,_,X){let Y=$.getTypeMap()[`${_}Filters`];if(!Y||!Z1(Y))return"";let Z=[],J=Y.getFields();Z.push(`export type ${_}Filters = {`);for(let[W,K]of Object.entries(J)){if(W==="OR"){Z.push(` OR?: ${_}Filters[]`);continue}let M=X.get(y(_))?.relations[W];if(M){let D=R(M.entity);if(M.type==="one")Z.push(` ${W}?: ${D}Filters`);else Z.push(` ${W}?: { some?: ${D}Filters; every?: ${D}Filters; none?: ${D}Filters }`);continue}let H=K.type,B=u(H)?H.ofType:H;if(Z1(B)){let D=B.getFields(),j=A$(D);Z.push(` ${W}?: {`),Z.push(` eq?: ${j} | null`),Z.push(` ne?: ${j} | null`),Z.push(` lt?: ${j} | null`),Z.push(` lte?: ${j} | null`),Z.push(` gt?: ${j} | null`),Z.push(` gte?: ${j} | null`),Z.push(" like?: string | null"),Z.push(" notLike?: string | null"),Z.push(" ilike?: string | null"),Z.push(" notIlike?: string | null"),Z.push(` inArray?: ${j}[] | null`),Z.push(` notInArray?: ${j}[] | null`),Z.push(" isNull?: boolean | null"),Z.push(" isNotNull?: boolean | null"),Z.push(` OR?: Array<Omit<${_}Filters['${W}'], 'OR'>> | null`),Z.push(" }")}}return Z.push("}"),Z.join(`
|
|
3
3
|
`)}function A$($){let _=$.eq;if(!_)return"unknown";return _1(_.type)}function _1($){if(u($))return _1($.ofType);if(V1($))return`${_1($.ofType)}[]`;if(x$($))switch($.name){case"String":return"string";case"Int":case"Float":return"number";case"Boolean":return"boolean";case"JSON":return"unknown";default:return"unknown"}if(S$($))return $.getValues().map((_)=>`'${_.value}'`).join(" | ");return"unknown"}function C1($,_,X){let Y=$.getTypeMap()[_];if(!Y||!Z1(Y))return"";let Z=[],J=Y.getFields();Z.push(`export type ${X} = {`);for(let[W,K]of Object.entries(J)){let P=u(K.type),M=_1(K.type),H=P?"":"?",B=P?"":" | null";Z.push(` ${W}${H}: ${M}${B}`)}return Z.push("}"),Z.join(`
|
|
4
4
|
`)}function I$($,_){let U=$.getTypeMap()[`${_}OrderBy`];if(!U||!Z1(U))return"";let Y=U.getFields(),Z=Object.keys(Y),J=[];J.push(`export type ${_}OrderBy = {`);for(let W of Z)J.push(` ${W}?: { direction: 'asc' | 'desc'; priority: number }`);return J.push("}"),J.join(`
|
package/package.json
CHANGED