@m1212e/rumble 0.5.5 → 0.6.2

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 CHANGED
@@ -1,9 +1,9 @@
1
- import {createYoga,createPubSub}from'graphql-yoga';import {One,or,and,eq}from'drizzle-orm';import {toCamelCase}from'drizzle-orm/casing';import Ce,{BasePlugin}from'@pothos/core';import Ee from'@pothos/plugin-drizzle';import Pe,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';function k(e){return typeof e=="object"&&e!==null}function G(e,t){throw new Error("Unexpected invariant triggered.")}var ae=/\r\n|[\n\r]/g;function v(e,t){let p=0,m=1;for(let n of e.body.matchAll(ae)){if(typeof n.index=="number"||G(),n.index>=t)break;p=n.index+n[0].length,m+=1;}return {line:m,column:t+1-p}}function _(e){return q(e.source,v(e.source,e.start))}function q(e,t){let p=e.locationOffset.column-1,m="".padStart(p)+e.body,n=t.line-1,d=e.locationOffset.line-1,i=t.line+d,y=t.line===1?p:0,r=t.column+y,a=`${e.name}:${i}:${r}
2
- `,o=m.split(/\r\n|[\n\r]/g),h=o[n];if(h.length>120){let f=Math.floor(r/80),s=r%80,u=[];for(let b=0;b<h.length;b+=80)u.push(h.slice(b,b+80));return a+j([[`${i} |`,u[0]],...u.slice(1,f+1).map(b=>["|",b]),["|","^".padStart(s)],["|",u[f+1]]])}return a+j([[`${i-1} |`,o[n-1]],[`${i} |`,h],["|","^".padStart(r)],[`${i+1} |`,o[n+1]]])}function j(e){let t=e.filter(([m,n])=>n!==void 0),p=Math.max(...t.map(([m])=>m.length));return t.map(([m,n])=>m.padStart(p)+(n?" "+n:"")).join(`
3
- `)}function ue(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var B=class e extends Error{constructor(t,...p){var m,n,d;let{nodes:i,source:y,positions:r,path:a,originalError:o,extensions:h}=ue(p);super(t),this.name="GraphQLError",this.path=a??void 0,this.originalError=o??void 0,this.nodes=K(Array.isArray(i)?i:i?[i]:void 0);let f=K((m=this.nodes)===null||m===void 0?void 0:m.map(u=>u.loc).filter(u=>u!=null));this.source=y??(f==null||(n=f[0])===null||n===void 0?void 0:n.source),this.positions=r??f?.map(u=>u.start),this.locations=r&&y?r.map(u=>v(y,u)):f?.map(u=>v(u.source,u.start));let s=k(o?.extensions)?o?.extensions:void 0;this.extensions=(d=h??s)!==null&&d!==void 0?d:Object.create(null),Object.defineProperties(this,{message:{writable:true,enumerable:true},name:{enumerable:false},nodes:{enumerable:false},source:{enumerable:false},positions:{enumerable:false},originalError:{enumerable:false}}),o!=null&&o.stack?Object.defineProperty(this,"stack",{value:o.stack,writable:true,configurable:true}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:true,configurable:true});}get[Symbol.toStringTag](){return "GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let p of this.nodes)p.loc&&(t+=`
1
+ import {createYoga,createPubSub}from'graphql-yoga';import {One,relationsFilterToSQL}from'drizzle-orm';import {toCamelCase}from'drizzle-orm/casing';import {PgEnumColumn}from'drizzle-orm/pg-core';import Ee,{BasePlugin}from'@pothos/core';import Ae from'@pothos/plugin-drizzle';import ve,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';function N(e){let t,m=false;return ()=>(m||(t=e(),m=true),t)}function _(e){return typeof e=="object"&&e!==null}function V(e,t){throw new Error("Unexpected invariant triggered.")}var pe=/\r\n|[\n\r]/g;function z(e,t){let m=0,u=1;for(let n of e.body.matchAll(pe)){if(typeof n.index=="number"||V(),n.index>=t)break;m=n.index+n[0].length,u+=1;}return {line:u,column:t+1-m}}function $(e){return k(e.source,z(e.source,e.start))}function k(e,t){let m=e.locationOffset.column-1,u="".padStart(m)+e.body,n=t.line-1,a=e.locationOffset.line-1,i=t.line+a,l=t.line===1?m:0,o=t.column+l,p=`${e.name}:${i}:${o}
2
+ `,r=u.split(/\r\n|[\n\r]/g),f=r[n];if(f.length>120){let s=Math.floor(o/80),d=o%80,c=[];for(let b=0;b<f.length;b+=80)c.push(f.slice(b,b+80));return p+M([[`${i} |`,c[0]],...c.slice(1,s+1).map(b=>["|",b]),["|","^".padStart(d)],["|",c[s+1]]])}return p+M([[`${i-1} |`,r[n-1]],[`${i} |`,f],["|","^".padStart(o)],[`${i+1} |`,r[n+1]]])}function M(e){let t=e.filter(([u,n])=>n!==void 0),m=Math.max(...t.map(([u])=>u.length));return t.map(([u,n])=>u.padStart(m)+(n?" "+n:"")).join(`
3
+ `)}function me(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var v=class e extends Error{constructor(t,...m){var u,n,a;let{nodes:i,source:l,positions:o,path:p,originalError:r,extensions:f}=me(m);super(t),this.name="GraphQLError",this.path=p??void 0,this.originalError=r??void 0,this.nodes=H(Array.isArray(i)?i:i?[i]:void 0);let s=H((u=this.nodes)===null||u===void 0?void 0:u.map(c=>c.loc).filter(c=>c!=null));this.source=l??(s==null||(n=s[0])===null||n===void 0?void 0:n.source),this.positions=o??s?.map(c=>c.start),this.locations=o&&l?o.map(c=>z(l,c)):s?.map(c=>z(c.source,c.start));let d=_(r?.extensions)?r?.extensions:void 0;this.extensions=(a=f??d)!==null&&a!==void 0?a:Object.create(null),Object.defineProperties(this,{message:{writable:true,enumerable:true},name:{enumerable:false},nodes:{enumerable:false},source:{enumerable:false},positions:{enumerable:false},originalError:{enumerable:false}}),r!=null&&r.stack?Object.defineProperty(this,"stack",{value:r.stack,writable:true,configurable:true}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:true,configurable:true});}get[Symbol.toStringTag](){return "GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let m of this.nodes)m.loc&&(t+=`
4
4
 
5
- `+_(p.loc));else if(this.source&&this.locations)for(let p of this.locations)t+=`
5
+ `+$(m.loc));else if(this.source&&this.locations)for(let m of this.locations)t+=`
6
6
 
7
- `+q(this.source,p);return t}toJSON(){let t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}};function K(e){return e===void 0||e.length===0?void 0:e}var C=class extends Error{constructor(t){super(t),this.name="RumbleError";}},A=class extends B{};var U=(e,t)=>new C(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function V(e){if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e))return {value1:1,value2:2};if(["real","decimal","double","float"].includes(e))return {value1:1.1,value2:2.2};if(["string","text","varchar","char","text(256)"].includes(e))return {value1:"a",value2:"b"};if(["uuid"].includes(e))return {value1:"fba31870-5528-42d7-b27e-2e5ee657aea5",value2:"fc65db81-c2d1-483d-8a25-a30e2cf6e02d"};if(["boolean"].includes(e))return {value1:true,value2:false};if(["timestamp","datetime"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["date"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["json"].includes(e))return {value1:{a:1},value2:{b:2}};throw U(e,"Distinct")}function ce(e){return typeof e!="function"}function ye(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var W=({db:e,actions:t,defaultLimit:p})=>{let m=e._.schema,n={},d={},i={},y=r=>{for(let a of t)i[r]||(i[r]={}),i[r][a]||(i[r][a]=[]);return {allow:a=>{let o=d[r];o||(o={},d[r]=o);let h=Array.isArray(a)?a:[a];for(let f of h){let s=o[f];s||(s="wildcard",o[f]=s);}return {when:f=>{for(let s of h)o[s]==="wildcard"&&(o[s]=[]),o[s].push(f);}}},filter:a=>{let o=Array.isArray(a)?a:[a];return {by:h=>{for(let f of o)i[r][f].push(h);}}}}};for(let r of Object.keys(e.query))n[r]=y(r);return {...n,registeredConditions:d,registeredFilters:i,buildWithUserContext:r=>{let a={},o=h=>({filter:(f,s)=>{let u=d[h];u||(u={});let b=u[f];if(b==="wildcard")return {single:{where:s?.inject?.where,columns:s?.inject?.columns},many:{where:s?.inject?.where,columns:s?.inject?.columns,limit:s?.inject?.limit??p??void 0}};let S=()=>{let g=m[h].primaryKey.at(0);if(!g)throw new C(`No primary key found for entity ${h.toString()}`);let L=V(g.getSQLType());return {where:and(eq(g,L.value1),eq(g,L.value2))}};(!u||!b)&&(b=[S()]);let R=b.filter(ce),l=b.filter(ye).map(g=>g(r)),c=l.some(g=>g==="allow"),x=[...R,...l];x.filter(g=>g!==void 0).length===0&&x.push(S());let T;for(let g of x)g!=="allow"&&g?.limit&&(T===void 0||g.limit>T)&&(T=g.limit);s?.inject?.limit&&T&&T<s.inject.limit&&(T=s.inject.limit);let D;for(let g of [...x,s?.inject??{}])g!=="allow"&&g?.columns&&(D===void 0?D=g.columns:D={...D,...g.columns});let F=c?[]:x.filter(g=>g!=="allow"&&g?.where).map(g=>g?.where),P=F.length>0?or(...F):void 0;return s?.inject?.where&&(P=P?and(P,s.inject.where):s.inject.where),{single:{where:P,columns:D},many:{where:P,columns:D,limit:T??p??void 0}}},explicitFilters:f=>i[h][f]});for(let h of Object.keys(e.query))a[h]=o(h);return a}}};var J=({context:e,abilityBuilder:t})=>async p=>{let m=e?await e(p):{};return {...m,abilities:t.buildWithUserContext(m)}};function E(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function N(e){let t=I(e);return t.enumValues!==void 0&&t.enumName!==void 0&&typeof t.enumName=="string"&&Array.isArray(t.enumValues)}function I(e){return e.enum??e}var Y=({db:e,schemaBuilder:t})=>{let p=new Map;return ({enumVariableName:n,name:d,enumName:i})=>{let y=e._.fullSchema,r;if(n?r=y[n]:i&&(r=Object.values(y).filter(N).map(I).find(f=>f.enumName===i)),!r)throw new C(`Could not determine enum structure! (${String(n)}, ${enumValuesParam}, ${i})`);let a=d??`${E(toCamelCase(r.enumName.toString()))}Enum`,o=p.get(a);return o||(o=t.enumType(a,{values:r.enumValues}),p.set(a,o),o)}};function w(e){let t;if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e)&&(t="Int"),["real","decimal","double","float"].includes(e)&&(t="Float"),["string","text","varchar","char","text(256)"].includes(e)&&(t="String"),["uuid"].includes(e)&&(t="ID"),["boolean"].includes(e)&&(t="Boolean"),["timestamp","datetime"].includes(e)&&(t="DateTime"),["date"].includes(e)&&(t="Date"),["json"].includes(e)&&(t="JSON"),t!==void 0)return t;throw U(e,"SQL to GQL")}var fe="RUMBLE_SUBSCRIPTION_NOTIFICATION",he="REMOVED",ge="UPDATED",be="CREATED",X=({subscriptions:e,db:t})=>{let p=e?createPubSub(...e):createPubSub();return {pubsub:p,makePubSubInstance:({tableName:n})=>{function d({action:i,tableName:y,primaryKeyValue:r}){let a;switch(i){case "created":a=be;break;case "removed":a=he;break;case "updated":a=ge;break;default:throw new Error(`Unknown action: ${i}`)}return `${fe}/${y}${r?`/${r}`:""}/${a}`}return {registerOnInstance({instance:i,action:y,primaryKeyValue:r}){let a=d({tableName:n.toString(),action:y,primaryKeyValue:r});i.register(a);},created(){let i=d({tableName:n.toString(),action:"created"});return p.publish(i)},removed(i){let y=d({tableName:n.toString(),action:"removed"});return p.publish(y)},updated(i){let r=(Array.isArray(i)?i:[i]).map(o=>d({tableName:n.toString(),action:"updated",primaryKeyValue:o})),a=Array.from(new Set(r));for(let o of a)p.publish(o);}}}}};var Z=({db:e,schemaBuilder:t,makePubSubInstance:p,argImplementer:m,enumImplementer:n,abilityBuilder:d})=>({tableName:i,name:y,readAction:r="read",extend:a})=>{let o=e._.schema[i];if(!o)throw new C(`Could not find schema for ${i.toString()} (object)`);let h=o.primaryKey.at(0)?.name;h||console.warn(`Could not find primary key for ${i.toString()}. Cannot register subscriptions!`);let{registerOnInstance:f}=p({tableName:i});return t.drizzleObject(i,{name:y??E(i.toString()),subscribe:(s,u,b)=>{if(!h)return;let S=u[h];if(!S){console.warn(`Could not find primary key value for ${JSON.stringify(u)}. Cannot register subscription!`);return}f({instance:s,action:"updated",primaryKeyValue:S});},applyFilters:d?.registeredFilters?.[i]?.[r],fields:s=>{let u=(R,l,c)=>{let x=w(R);switch(x){case "Int":return s.exposeInt(l,{nullable:c});case "String":return s.exposeString(l,{nullable:c});case "Boolean":return s.exposeBoolean(l,{nullable:c});case "Date":return s.field({type:"Date",resolve:T=>T[l],nullable:c});case "DateTime":return s.field({type:"DateTime",resolve:T=>T[l],nullable:c});case "Float":return s.exposeFloat(l,{nullable:c});case "ID":return s.exposeID(l,{nullable:c});case "JSON":return s.field({type:"JSON",resolve:T=>T[l],nullable:c});default:throw new C(`Unsupported object type ${x} for column ${l}`)}},b=Object.entries(o.columns).reduce((R,[l,c])=>{if(N(c)){let x=I(c),T=n({enumName:x.enumName});R[l]=s.field({type:T,resolve:D=>D[l],nullable:!c.notNull});}else R[l]=u(c.getSQLType(),l,!c.notNull);return R},{}),S=Object.entries(o.relations).reduce((R,[l,c])=>{let {inputType:x,transformArgumentToQueryCondition:T}=m({tableName:c.referencedTableName,nativeTableName:c.referencedTableName}),D=false,P="many";return c instanceof One&&(D=!c.isNullable,P="single"),R[l]=s.relation(l,{args:{where:s.arg({type:x,required:false})},nullable:D,query:(g,L)=>{let Q=Object.entries(e._.schema).find(([Oe,se])=>se.dbName===c.referencedTableName)?.at(0);if(!Q)throw new C(`Could not find table ${c.referencedTableName} in schema object`);return L.abilities[Q].filter(r,{inject:{where:T(g.where)}})[P]}}),R},{});return a?{...b,...S,...a(s)??{}}:{...b,...S}}})};var O=e=>{if(!e)throw new A("Value not found but required (findFirst)");return e},Te=e=>{let t=e.at(0);if(!t)throw new A("Value not found but required (firstEntry)");return t},ee=async({filters:e,entities:t,context:p})=>(await Promise.all(e.map(m=>m({context:p,entities:t})))).reduce((m,n)=>(m.push(...n),m),[]);var te=({db:e,schemaBuilder:t,argImplementer:p,makePubSubInstance:m})=>({tableName:n,readAction:d="read",listAction:i="read"})=>{let y=e._.schema[n];if(!y)throw new C(`Could not find schema for ${n.toString()} (query)`);y.primaryKey.at(0)?.name||console.warn(`Could not find primary key for ${n.toString()}. Cannot register subscriptions!`);let{inputType:a,transformArgumentToQueryCondition:o}=p({tableName:n}),{registerOnInstance:h}=m({tableName:n});return t.queryFields(f=>({[`findMany${E(n.toString())}`]:f.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(s,u,b,S,R)=>{h({instance:s,action:"created"}),h({instance:s,action:"removed"});},args:{where:f.arg({type:a,required:false})},resolve:(s,u,b,S,R)=>{let l=S.abilities[n].filter(i,{inject:{where:o(b.where)}}).many,c=s(l);return l.columns&&(c.columns=l.columns),e.query[n].findMany(c)}}),[`findFirst${E(n.toString())}`]:f.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:f.arg({type:a,required:false})},resolve:(s,u,b,S,R)=>{let l=S.abilities[n].filter(d,{inject:{where:o(b.where)}}).single,c=s(l);return l.columns&&(c.columns=l.columns),e.query[n].findFirst(c).then(O)}})}))};var ne="ManualFiltersPlugin",re=ne,Re="applyFilters",z=class extends BasePlugin{wrapResolve(t,p){return async(m,n,d,i)=>{let y=(p?.type).type?.ref.currentConfig.pothosOptions[Re];if(!y||!Array.isArray(y)||y.length===0)return t(m,n,d,i);let r=await t(m,n,d,i),a=Array.isArray(r)?r:[r],o=Array.isArray(y)?y:[y],h=await ee({filters:o,entities:a,context:d});return Array.isArray(r)?h:h[0]??null}}};Ce.registerPlugin(ne,z);var oe=({db:e,disableDefaultObjects:t,pubsub:p,pothosConfig:m})=>{let n=new Ce({plugins:[re,Ee,Pe,...m?.plugins??[]],...m,drizzle:{client:e},smartSubscriptions:{...subscribeOptionsFromIterator((d,i)=>p.subscribe(d))}});return n.addScalarType("JSON",JSONResolver),n.addScalarType("Date",DateResolver),n.addScalarType("DateTime",DateTimeISOResolver),t?.query||n.queryType({}),t?.subscription||n.subscriptionType({}),t?.mutation||n.mutationType({}),{schemaBuilder:n}};var Ue=e=>`${E(toCamelCase(e.toString()))}WhereInputArgument`,ie=({db:e,schemaBuilder:t,enumImplementer:p})=>{let m=new Map,n=({tableName:d,name:i,nativeTableName:y})=>{let r=e._.schema[d];if(y){let f=Object.values(e._.schema).find(s=>s.dbName===y);f&&(r=f);}if(!r)throw new C(`Could not find schema for ${d.toString()} (whereArg)`);let a=i??Ue(r.dbName),o=m.get(a);return o||(o={inputType:t.inputType(a,{fields:u=>{let b=l=>{let c=w(l);switch(c){case "Int":return u.int({required:false});case "String":return u.string({required:false});case "Boolean":return u.boolean({required:false});case "Date":return u.field({type:"Date",required:false});case "DateTime":return u.field({type:"DateTime",required:false});case "Float":return u.float({required:false});case "ID":return u.id({required:false});case "JSON":return u.field({type:"JSON",required:false});default:throw new C(`Unsupported argument type ${c} for column ${l}`)}},S=Object.entries(r.columns).reduce((l,[c,x])=>{if(N(x)){let T=I(x),D=p({enumName:T.enumName});l[c]=u.field({type:D,required:false});}else l[c]=b(x.getSQLType());return l},{}),R=Object.entries(r.relations).reduce((l,[c,x])=>{let T=n({tableName:x.referencedTableName,nativeTableName:x.referencedTableName});return l[c]=u.field({type:T.inputType,required:false}),l},{});return {...S,...R}}}),transformArgumentToQueryCondition:u=>{if(!u)return;let b=l=>{let c=r.columns[l],x=u[l];if(x)return eq(c,x)},S=l=>{let c=r.relations[l],x=u[l];if(!x)return;let T=n({tableName:c.referencedTableName,nativeTableName:c.referencedTableName}).transformArgumentToQueryCondition;return T(x)},R=[...Object.keys(r.columns).map(b),...Object.keys(r.relations).map(S)];return and(...R)}},m.set(a,o),o)};return n};var qe=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100);let t=W(e),p=J({...e,abilityBuilder:t}),{makePubSubInstance:m,pubsub:n}=X({...e}),{schemaBuilder:d}=oe({...e,pubsub:n}),i=Y({...e,schemaBuilder:d}),y=ie({...e,schemaBuilder:d,enumImplementer:i}),r=Z({...e,schemaBuilder:d,makePubSubInstance:m,argImplementer:y,enumImplementer:i,abilityBuilder:t}),a=te({...e,schemaBuilder:d,argImplementer:y,makePubSubInstance:m});return {abilityBuilder:t,schemaBuilder:d,createYoga:h=>createYoga({...h,schema:d.toSchema(),context:p}),object:r,arg:y,query:a,pubsub:m,enum_:i}};
8
- export{C as RumbleError,A as RumbleErrorSafe,O as assertFindFirstExists,Te as assertFirstEntryExists,qe as rumble};//# sourceMappingURL=index.js.map
7
+ `+k(this.source,m);return t}toJSON(){let t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}};function H(e){return e===void 0||e.length===0?void 0:e}var C=class extends Error{constructor(t){super(t),this.name="RumbleError";}},F=class extends v{};var O=(e,t)=>new C(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function J(e){if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e))return {value1:1,value2:2};if(["real","decimal","double","float"].includes(e))return {value1:1.1,value2:2.2};if(["string","text","varchar","char","text(256)"].includes(e))return {value1:"a",value2:"b"};if(["uuid"].includes(e))return {value1:"fba31870-5528-42d7-b27e-2e5ee657aea5",value2:"fc65db81-c2d1-483d-8a25-a30e2cf6e02d"};if(["boolean"].includes(e))return {value1:true,value2:false};if(["timestamp","datetime"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["date"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["json"].includes(e))return {value1:{a:1},value2:{b:2}};throw O(e,"Distinct")}var G=Symbol.for("drizzle:Name"),W=Symbol.for("drizzle:Columns");function P({dbName:e,tsName:t,table:m,db:u}){let n=m;if(t&&(n=u._.relations.schema[t]),e&&(n=Object.values(u._.relations.schema).find(a=>a[G]===e)),!n)throw new C(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:m?.[G]}).toString()}`);return {tableSchema:n,columns:n[W],get primaryColumns(){return Object.entries(n[W]).filter(([a,i])=>i.primary).reduce((a,[i,l])=>(a[i]=l,a),{})},relations:u._.relations.config[t],dbName:n[G],get tsName(){return Object.entries(u._.relations.schema).find(([a,i])=>i===n).at(0)}}}function fe(e){return typeof e!="function"}function Te(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var Y=({db:e,actions:t,defaultLimit:m})=>{let u={},n={},a={},i=l=>{for(let o of t)a[l]||(a[l]={}),a[l][o]||(a[l][o]=[]);return {allow:o=>{let p=n[l];p||(p={},n[l]=p);let r=Array.isArray(o)?o:[o];for(let f of r){let s=p[f];s||(s="unspecified",p[f]=s);}return {when:f=>{for(let s of r)p[s]==="unspecified"&&(p[s]=[]),p[s].push(f);}}},filter:o=>{let p=Array.isArray(o)?o:[o];return {by:r=>{for(let f of p)a[l][f].push(r);}}}}};for(let l of Object.keys(e.query))u[l]=i(l);return {...u,registeredQueryFilters:n,registeredFilters:a,buildWithUserContext:l=>{let o={},p=r=>({filter:(f,s)=>{let d=y=>{let E=N(()=>{if(!(!y?.where&&!s?.inject?.where))return s?.inject?.where?{AND:[y?.where,s?.inject?.where]}:y?.where}),A=N(()=>{let B=E();if(!B)return;let ue=P({tsName:r,db:e});return relationsFilterToSQL(ue.tableSchema,B)}),q=N(()=>{let B=y?.limit??m;return s?.inject?.limit&&(!B||B>s.inject.limit)&&(B=s.inject.limit),y?.limit&&(!B||y.limit>B)&&(B=y.limit),B??void 0}),w=N(()=>{if(!(!y?.columns&&!s?.inject?.columns))return {...y?.columns,...s?.inject?.columns}});return {query:{single:{get where(){return E()},get columns(){return w()}},many:{get where(){return E()},get columns(){return w()},get limit(){return q()}}},sql:{get where(){return A()},get columns(){return w()},get limit(){return q()}}}},c=()=>{let y=P({db:e,tsName:r});if(Object.keys(y.primaryColumns).length===0)throw new C(`No primary key found for entity ${r.toString()}`);let E=Object.values(y.primaryColumns)[0],A=J(E.getSQLType());return {where:{AND:[{[E.name]:A.value1},{[E.name]:A.value2}]}}},b=n?.[r]?.[f];if(b==="unspecified")return d();b||(b=[c()]);let x=b.filter(fe),D=b.filter(Te).map(y=>y(l)),h=D.some(y=>y==="allow"),T=[...x,...D].filter(y=>y!==void 0).filter(y=>y!=="allow");!h&&T.length===0&&(T=[c()]);let g;for(let y of T)y?.limit&&(g===void 0||y.limit>g)&&(g=y.limit);let S;for(let y of [...T,s?.inject])y?.columns&&(S===void 0?S=y.columns:S={...S,...y.columns});let R=h?[]:T.filter(y=>y?.where).map(y=>y.where),L=R.length>0?{OR:R}:void 0;return d({where:L,columns:S,limit:g})},explicitFilters:f=>a[r][f]});for(let r of Object.keys(e.query))o[r]=p(r);return o}}};var X=({context:e,abilityBuilder:t})=>async m=>{let u=e?await e(m):{};return {...u,abilities:t.buildWithUserContext(u)}};function I(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function U(e){return e instanceof PgEnumColumn}var Z=({db:e,schemaBuilder:t})=>{let m=new Map;return ({tsName:n,enumColumn:a,refName:i})=>{let l,o;if(n){let s=e._.relations.schema[n];l=n.toString();let d=Object.values(e._.relations.schema).filter(c=>typeof c=="object").map(c=>Object.values(c[Symbol.for("drizzle:Columns")])).flat(2).find(c=>c.config?.enum===s);if(!d)throw new C(`Could not find applied enum column for ${n.toString()}.
8
+ Please ensure that you use the enum at least once as a column of a table!`);o=d.enumValues;}else if(a){let s=Object.entries(e._.relations.schema).find(([d,c])=>c===a.config.enum);if(!s)throw new C(`Could not find enum in schema for ${a.name}!`);l=s[0],o=a.enumValues;}if(!l||!o)throw new C("Could not determine enum structure!");let p=i??`${I(toCamelCase(l))}Enum`,r=m.get(p);return r||(r=t.enumType(p,{values:o}),m.set(p,r),r)}};function Q(e){let t;if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e)&&(t="Int"),["real","decimal","double","float"].includes(e)&&(t="Float"),["string","text","varchar","char","text(256)"].includes(e)&&(t="String"),["uuid"].includes(e)&&(t="ID"),["boolean"].includes(e)&&(t="Boolean"),["timestamp","datetime"].includes(e)&&(t="DateTime"),["date"].includes(e)&&(t="Date"),["json"].includes(e)&&(t="JSON"),t!==void 0)return t;throw O(e,"SQL to GQL")}var ee=({db:e,schemaBuilder:t,makePubSubInstance:m,argImplementer:u,enumImplementer:n,abilityBuilder:a})=>({table:i,refName:l,readAction:o="read",extend:p})=>{let r=P({db:e,tsName:i});Object.keys(r.primaryColumns).length===0&&console.warn(`Could not find primary key for ${i.toString()}. Cannot register subscriptions!`);let f=Object.values(r.primaryColumns)[0],{registerOnInstance:s}=m({table:i});return t.drizzleObject(i,{name:l??I(i.toString()),subscribe:(d,c,b)=>{if(!f)return;let x=c[f.name];if(!x){console.warn(`Could not find primary key value for ${JSON.stringify(c)}. Cannot register subscription!`);return}s({instance:d,action:"updated",primaryKeyValue:x});},applyFilters:a?.registeredFilters?.[i]?.[o],fields:d=>{let c=r.columns,b=(h,T,g)=>{let S=Q(h);switch(S){case "Int":return d.exposeInt(T,{nullable:g});case "String":return d.exposeString(T,{nullable:g});case "Boolean":return d.exposeBoolean(T,{nullable:g});case "Date":return d.field({type:"Date",resolve:R=>R[T],nullable:g});case "DateTime":return d.field({type:"DateTime",resolve:R=>R[T],nullable:g});case "Float":return d.exposeFloat(T,{nullable:g});case "ID":return d.exposeID(T,{nullable:g});case "JSON":return d.field({type:"JSON",resolve:R=>R[T],nullable:g});default:throw new C(`Unsupported object type ${S} for column ${T}`)}},x=Object.entries(c).reduce((h,[T,g])=>{if(U(g)){let S=n({enumColumn:g});h[T]=d.field({type:S,resolve:R=>R[T],nullable:!g.notNull});}else h[T]=b(g.getSQLType(),T,!g.notNull);return h},{}),D=Object.entries(r.relations??{}).reduce((h,[T,g])=>{let S=P({db:e,table:g.targetTable}),R=u({dbName:S.dbName}),L=false,E="many";return g instanceof One&&(L=g.optional,E="single"),h[T]=d.relation(T,{args:{where:d.arg({type:R,required:false})},nullable:L,query:(A,q)=>q.abilities[S.tsName].filter(o,{inject:{where:A.where}}).query[E]}),h},{});return p?{...x,...D,...p(d)??{}}:{...x,...D}}})};var he="RUMBLE_SUBSCRIPTION_NOTIFICATION",Ce="REMOVED",De="UPDATED",Se="CREATED",ne=({subscriptions:e,db:t})=>{let m=e?createPubSub(...e):createPubSub();return {pubsub:m,makePubSubInstance:({table:n})=>{function a({action:i,tableName:l,primaryKeyValue:o}){let p;switch(i){case "created":p=Se;break;case "removed":p=Ce;break;case "updated":p=De;break;default:throw new Error(`Unknown action: ${i}`)}return `${he}/${l}${o?`/${o}`:""}/${p}`}return {registerOnInstance({instance:i,action:l,primaryKeyValue:o}){let p=a({tableName:n.toString(),action:l,primaryKeyValue:o});i.register(p);},created(){let i=a({tableName:n.toString(),action:"created"});return m.publish(i)},removed(i){let l=a({tableName:n.toString(),action:"removed"});return m.publish(l)},updated(i){let o=(Array.isArray(i)?i:[i]).map(r=>a({tableName:n.toString(),action:"updated",primaryKeyValue:r})),p=Array.from(new Set(o));for(let r of p)m.publish(r);}}}}};var j=e=>{if(!e)throw new F("Value not found but required (findFirst)");return e},Re=e=>{let t=e.at(0);if(!t)throw new F("Value not found but required (firstEntry)");return t},re=async({filters:e,entities:t,context:m})=>(await Promise.all(e.map(u=>u({context:m,entities:t})))).reduce((u,n)=>(u.push(...n),u),[]);var ie=({db:e,schemaBuilder:t,argImplementer:m,makePubSubInstance:u})=>({table:n,readAction:a="read",listAction:i="read"})=>{let l=m({table:n}),{registerOnInstance:o}=u({table:n});return t.queryFields(p=>({[`findMany${I(n.toString())}`]:p.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(r,f,s,d,c)=>{o({instance:r,action:"created"}),o({instance:r,action:"removed"});},args:{where:p.arg({type:l,required:false})},resolve:(r,f,s,d,c)=>{let b=d.abilities[n].filter(i,{inject:{where:s.where}}).query.many,x=r(b);return b.columns&&(x.columns=b.columns),e.query[n].findMany(x)}}),[`findFirst${I(n.toString())}`]:p.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:p.arg({type:l,required:false})},resolve:(r,f,s,d,c)=>{let b=d.abilities[n].filter(a,{inject:{where:s.where}}).query.single,x=r(b);return b.columns&&(x.columns=b.columns),e.query[n].findFirst(x).then(j)}})}))};var oe="ManualFiltersPlugin",se=oe,Pe="applyFilters",K=class extends BasePlugin{wrapResolve(t,m){return async(u,n,a,i)=>{let l=(m?.type).type?.ref.currentConfig.pothosOptions[Pe];if(!l||!Array.isArray(l)||l.length===0)return t(u,n,a,i);let o=await t(u,n,a,i),p=Array.isArray(o)?o:[o],r=Array.isArray(l)?l:[l],f=await re({filters:r,entities:p,context:a});return Array.isArray(o)?f:f[0]??null}}};Ee.registerPlugin(oe,K);var ae=({db:e,disableDefaultObjects:t,pubsub:m,pothosConfig:u})=>{let n=new Ee({plugins:[se,Ae,ve,...u?.plugins??[]],...u,drizzle:{client:e,relations:e._.relations,getTableConfig(a){return {columns:Object.values(a[Symbol.for("drizzle:Columns")]),primaryKeys:Object.values(a[Symbol.for("drizzle:Columns")]).filter(i=>i.primary)}}},smartSubscriptions:{...subscribeOptionsFromIterator((a,i)=>m.subscribe(a))}});return n.addScalarType("JSON",JSONResolver),n.addScalarType("Date",DateResolver),n.addScalarType("DateTime",DateTimeISOResolver),t?.query||n.queryType({}),t?.subscription||n.subscriptionType({}),t?.mutation||n.mutationType({}),{schemaBuilder:n}};var Oe=e=>`${I(toCamelCase(e.toString()))}WhereInputArgument`,le=({db:e,schemaBuilder:t,enumImplementer:m})=>{let u=new Map,n=({table:a,refName:i,dbName:l})=>{let o=P({db:e,dbName:l,tsName:a}),p=i??Oe(o.tsName),r=u.get(p);return r||(r=t.inputType(p,{fields:s=>{let d=x=>{let D=Q(x);switch(D){case "Int":return s.int({required:false});case "String":return s.string({required:false});case "Boolean":return s.boolean({required:false});case "Date":return s.field({type:"Date",required:false});case "DateTime":return s.field({type:"DateTime",required:false});case "Float":return s.float({required:false});case "ID":return s.id({required:false});case "JSON":return s.field({type:"JSON",required:false});default:throw new C(`Unsupported argument type ${D} for column ${x}`)}},c=Object.entries(o.columns).reduce((x,[D,h])=>{if(U(h)){let T=m({enumColumn:h});x[D]=s.field({type:T,required:false});}else x[D]=d(h.getSQLType());return x},{}),b=Object.entries(o.relations??{}).reduce((x,[D,h])=>{let T=P({db:e,table:h.targetTable}),g=n({dbName:T.dbName});return x[D]=s.field({type:g,required:false}),x},{});return {...c,...b}}}),u.set(p,r),r)};return n};var Qe=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100);let t=Y(e),m=X({...e,abilityBuilder:t}),{makePubSubInstance:u,pubsub:n}=ne({...e}),{schemaBuilder:a}=ae({...e,pubsub:n}),i=Z({...e,schemaBuilder:a}),l=le({...e,schemaBuilder:a,enumImplementer:i}),o=ee({...e,schemaBuilder:a,makePubSubInstance:u,argImplementer:l,enumImplementer:i,abilityBuilder:t}),p=ie({...e,schemaBuilder:a,argImplementer:l,makePubSubInstance:u});return {abilityBuilder:t,schemaBuilder:a,createYoga:f=>createYoga({...f,schema:a.toSchema(),context:m}),object:o,arg:l,query:p,pubsub:u,enum_:i}};export{C as RumbleError,F as RumbleErrorSafe,j as assertFindFirstExists,Re as assertFirstEntryExists,Qe as rumble};//# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map