@m1212e/rumble 0.7.6 → 0.7.7

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.cjs CHANGED
@@ -1,9 +1,9 @@
1
- 'use strict';var graphqlYoga=require('graphql-yoga'),drizzleOrm=require('drizzle-orm'),casing=require('drizzle-orm/casing'),pgCore=require('drizzle-orm/pg-core'),Be=require('@pothos/core'),ve=require('@pothos/plugin-drizzle'),Fe=require('@pothos/plugin-smart-subscriptions'),graphqlScalars=require('graphql-scalars');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Be__default=/*#__PURE__*/_interopDefault(Be);var ve__default=/*#__PURE__*/_interopDefault(ve);var Fe__default=/*#__PURE__*/_interopDefault(Fe);function q(e){let t,u=false;return ()=>(u||(t=e(),u=true),t)}function M(e){return typeof e=="object"&&e!==null}function $(e,t){throw new Error("Unexpected invariant triggered.")}var me=/\r\n|[\n\r]/g;function w(e,t){let u=0,p=1;for(let n of e.body.matchAll(me)){if(typeof n.index=="number"||$(),n.index>=t)break;u=n.index+n[0].length,p+=1;}return {line:p,column:t+1-u}}function J(e){return j(e.source,w(e.source,e.start))}function j(e,t){let u=e.locationOffset.column-1,p="".padStart(u)+e.body,n=t.line-1,a=e.locationOffset.line-1,o=t.line+a,l=t.line===1?u:0,s=t.column+l,c=`${e.name}:${o}:${s}
2
- `,r=p.split(/\r\n|[\n\r]/g),b=r[n];if(b.length>120){let i=Math.floor(s/80),f=s%80,y=[];for(let T=0;T<b.length;T+=80)y.push(b.slice(T,T+80));return c+H([[`${o} |`,y[0]],...y.slice(1,i+1).map(T=>["|",T]),["|","^".padStart(f)],["|",y[i+1]]])}return c+H([[`${o-1} |`,r[n-1]],[`${o} |`,b],["|","^".padStart(s)],[`${o+1} |`,r[n+1]]])}function H(e){let t=e.filter(([p,n])=>n!==void 0),u=Math.max(...t.map(([p])=>p.length));return t.map(([p,n])=>p.padStart(u)+(n?" "+n:"")).join(`
3
- `)}function ce(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 L=class e extends Error{constructor(t,...u){var p,n,a;let{nodes:o,source:l,positions:s,path:c,originalError:r,extensions:b}=ce(u);super(t),this.name="GraphQLError",this.path=c??void 0,this.originalError=r??void 0,this.nodes=W(Array.isArray(o)?o:o?[o]:void 0);let i=W((p=this.nodes)===null||p===void 0?void 0:p.map(y=>y.loc).filter(y=>y!=null));this.source=l??(i==null||(n=i[0])===null||n===void 0?void 0:n.source),this.positions=s??i?.map(y=>y.start),this.locations=s&&l?s.map(y=>w(l,y)):i?.map(y=>w(y.source,y.start));let f=M(r?.extensions)?r?.extensions:void 0;this.extensions=(a=b??f)!==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 u of this.nodes)u.loc&&(t+=`
1
+ 'use strict';var graphqlYoga=require('graphql-yoga'),drizzleOrm=require('drizzle-orm'),casing=require('drizzle-orm/casing'),pgCore=require('drizzle-orm/pg-core'),Ie=require('@pothos/core'),Ne=require('@pothos/plugin-drizzle'),ze=require('@pothos/plugin-smart-subscriptions'),graphqlScalars=require('graphql-scalars');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ie__default=/*#__PURE__*/_interopDefault(Ie);var Ne__default=/*#__PURE__*/_interopDefault(Ne);var ze__default=/*#__PURE__*/_interopDefault(ze);function w(e){let t,p=false;return ()=>(p||(t=e(),p=true),t)}function $(e){return typeof e=="object"&&e!==null}function H(e,t){throw new Error("Unexpected invariant triggered.")}var ce=/\r\n|[\n\r]/g;function q(e,t){let p=0,m=1;for(let n of e.body.matchAll(ce)){if(typeof n.index=="number"||H(),n.index>=t)break;p=n.index+n[0].length,m+=1;}return {line:m,column:t+1-p}}function W(e){return K(e.source,q(e.source,e.start))}function K(e,t){let p=e.locationOffset.column-1,m="".padStart(p)+e.body,n=t.line-1,a=e.locationOffset.line-1,o=t.line+a,l=t.line===1?p:0,s=t.column+l,c=`${e.name}:${o}:${s}
2
+ `,r=m.split(/\r\n|[\n\r]/g),b=r[n];if(b.length>120){let i=Math.floor(s/80),d=s%80,y=[];for(let g=0;g<b.length;g+=80)y.push(b.slice(g,g+80));return c+J([[`${o} |`,y[0]],...y.slice(1,i+1).map(g=>["|",g]),["|","^".padStart(d)],["|",y[i+1]]])}return c+J([[`${o-1} |`,r[n-1]],[`${o} |`,b],["|","^".padStart(s)],[`${o+1} |`,r[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 ye(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 O=class e extends Error{constructor(t,...p){var m,n,a;let{nodes:o,source:l,positions:s,path:c,originalError:r,extensions:b}=ye(p);super(t),this.name="GraphQLError",this.path=c??void 0,this.originalError=r??void 0,this.nodes=Y(Array.isArray(o)?o:o?[o]:void 0);let i=Y((m=this.nodes)===null||m===void 0?void 0:m.map(y=>y.loc).filter(y=>y!=null));this.source=l??(i==null||(n=i[0])===null||n===void 0?void 0:n.source),this.positions=s??i?.map(y=>y.start),this.locations=s&&l?s.map(y=>q(l,y)):i?.map(y=>q(y.source,y.start));let d=$(r?.extensions)?r?.extensions:void 0;this.extensions=(a=b??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 p of this.nodes)p.loc&&(t+=`
4
4
 
5
- `+J(u.loc));else if(this.source&&this.locations)for(let u of this.locations)t+=`
5
+ `+W(p.loc));else if(this.source&&this.locations)for(let p of this.locations)t+=`
6
6
 
7
- `+j(this.source,u);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 W(e){return e===void 0||e.length===0?void 0:e}var R=class extends Error{constructor(t){super(t),this.name="RumbleError";}},O=class extends L{};var Q=(e,t)=>new R(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function Y(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 Q(e,"Distinct")}var K=Symbol.for("drizzle:Name"),X=Symbol.for("drizzle:Columns");function I({dbName:e,tsName:t,table:u,db:p}){let n=u;if(t&&(n=p._.relations.schema[t]),e&&(n=Object.values(p._.relations.schema).find(a=>a[K]===e)),!n)throw new R(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:u?.[K]}).toString()}`);return {tableSchema:n,columns:n[X],get primaryColumns(){return Object.entries(n[X]).filter(([a,o])=>o.primary).reduce((a,[o,l])=>(a[o]=l,a),{})},relations:p._.relations.config[t],dbName:n[K],get tsName(){return Object.entries(p._.relations.schema).find(([a,o])=>o===n).at(0)}}}function be(e){return typeof e!="function"}function Te(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var Z=({db:e,actions:t,defaultLimit:u})=>{let p={},n={},a={},o=l=>{for(let s of t)a[l]||(a[l]={}),a[l][s]||(a[l][s]=[]);return {allow:s=>{let c=n[l];c||(c={},n[l]=c);let r=Array.isArray(s)?s:[s];for(let b of r){let i=c[b];i||(i="unspecified",c[b]=i);}return {when:b=>{for(let i of r)c[i]==="unspecified"&&(c[i]=[]),c[i].push(b);}}},filter:s=>{let c=Array.isArray(s)?s:[s];return {by:r=>{for(let b of c)a[l][b].push(r);}}}}};for(let l of Object.keys(e.query))p[l]=o(l);return {...p,registeredQueryFilters:n,registeredFilters:a,buildWithUserContext:l=>{let s={},c=r=>({filter:(b,i)=>{let f=m=>{let P=q(()=>{if(!(!m?.where&&!i?.inject?.where)){if(i?.inject?.where&&m?.where)return {AND:[m?.where,i?.inject?.where]};if(i?.inject?.where&&!m?.where)return i?.inject?.where;if(!i?.inject?.where&&m?.where)return m?.where;!i?.inject?.where&&m?.where;}}),v=q(()=>{let C=P();if(!C)return;let z=I({tsName:r,db:e});return drizzleOrm.relationsFilterToSQL(z.tableSchema,C)}),U=q(()=>{let C=m?.limit??u;return i?.inject?.limit&&(!C||C>i.inject.limit)&&(C=i.inject.limit),m?.limit&&(!C||m.limit>C)&&(C=m.limit),C??void 0}),F=q(()=>{if(!(!m?.columns&&!i?.inject?.columns))return {...m?.columns,...i?.inject?.columns}}),N={query:{single:{get where(){return P()},columns:F()},many:{get where(){return P()},columns:F(),get limit(){return U()}}},sql:{get where(){return v()},columns:F(),get limit(){return U()}}};return F()||(delete N.sql.columns,delete N.query.many.columns,delete N.query.single.columns),N},y=()=>{let m=I({db:e,tsName:r});if(Object.keys(m.primaryColumns).length===0)throw new R(`No primary key found for entity ${r.toString()}`);let P=Object.values(m.primaryColumns)[0],v=Y(P.getSQLType());return {where:{AND:[{[P.name]:v.value1},{[P.name]:v.value2}]}}},T=n?.[r]?.[b];if(T==="unspecified")return f();T||(T=[y()]);let h=T.filter(be),D=T.filter(Te).map(m=>m(l)),B=D.some(m=>m==="allow"),E=[...h,...D].filter(m=>m!==void 0).filter(m=>m!=="allow");!B&&E.length===0&&(E=[y()]);let x;for(let m of E)m?.limit&&(x===void 0||m.limit>x)&&(x=m.limit);let d;for(let m of [...E,i?.inject])m?.columns&&(d===void 0?d=m.columns:d={...d,...m.columns});let g=B?[]:E.filter(m=>m?.where).map(m=>m.where),S=g.length>0?{OR:g}:void 0;return f({where:S,columns:d,limit:x})},explicitFilters:b=>a[r][b]});for(let r of Object.keys(e.query))s[r]=c(r);return s}}};var ee=({context:e,abilityBuilder:t})=>async u=>{let p=e?await e(u):{};return {...p,abilities:t.buildWithUserContext(p)}};function A(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function k(e){return e instanceof pgCore.PgEnumColumn}var te=({db:e,schemaBuilder:t})=>{let u=new Map;return ({tsName:n,enumColumn:a,refName:o})=>{let l,s;if(n){let i=e._.relations.schema[n];l=n.toString();let f=Object.values(e._.relations.schema).filter(y=>typeof y=="object").map(y=>Object.values(y[Symbol.for("drizzle:Columns")])).flat(2).find(y=>y.config?.enum===i);if(!f)throw new R(`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!`);s=f.enumValues;}else if(a){let i=Object.entries(e._.relations.schema).find(([f,y])=>y===a.config.enum);if(!i)throw new R(`Could not find enum in schema for ${a.name}!`);l=i[0],s=a.enumValues;}if(!l||!s)throw new R("Could not determine enum structure!");let c=o??`${A(casing.toCamelCase(l))}Enum`,r=u.get(c);return r||(r=t.enumType(c,{values:s}),u.set(c,r),r)}};function G(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 Q(e,"SQL to GQL")}var ne=({db:e,schemaBuilder:t,makePubSubInstance:u,argImplementer:p,enumImplementer:n,abilityBuilder:a})=>({table:o,refName:l,readAction:s="read",adjust:c})=>{let r=I({db:e,tsName:o});Object.keys(r.primaryColumns).length===0&&console.warn(`Could not find primary key for ${o.toString()}. Cannot register subscriptions!`);let b=Object.values(r.primaryColumns)[0],{registerOnInstance:i}=u({table:o});return t.drizzleObject(o,{name:l??A(o.toString()),subscribe:(f,y,T)=>{if(!b)return;let h=y[b.name];if(!h){console.warn(`Could not find primary key value for ${JSON.stringify(y)}. Cannot register subscription!`);return}i({instance:f,action:"updated",primaryKeyValue:h});},applyFilters:a?.registeredFilters?.[o]?.[s],fields:f=>{let y=r.columns,T=(x,d,g)=>{let S=G(x);switch(S){case "Int":return f.exposeInt(d,{nullable:g});case "String":return f.exposeString(d,{nullable:g});case "Boolean":return f.exposeBoolean(d,{nullable:g});case "Date":return f.field({type:"Date",resolve:m=>m[d],nullable:g});case "DateTime":return f.field({type:"DateTime",resolve:m=>m[d],nullable:g});case "Float":return f.exposeFloat(d,{nullable:g});case "ID":return f.exposeID(d,{nullable:g});case "JSON":return f.field({type:"JSON",resolve:m=>m[d],nullable:g});default:throw new R(`Unsupported object type ${S} for column ${d}`)}},h=new Map,D=c?.(new Proxy(f,{get:(x,d)=>typeof x[d]=="function"?g=>{let S=x[d](g);return h.set(S,{config:g,creatorFunction:x[d]}),S}:x[d]}))??{},B=Object.entries(y).reduce((x,[d,g])=>{if(D[d]){let{config:S,creatorFunction:m}=h.get(D[d]);return typeof S.nullable!="boolean"&&(S.nullable=!g.notNull),D[d]=m(S),x}if(k(g)){let S=n({enumColumn:g});x[d]=f.field({type:S,resolve:m=>m[d],nullable:!g.notNull});}else x[d]=T(g.getSQLType(),d,!g.notNull);return x},{}),E=Object.entries(r.relations??{}).reduce((x,[d,g])=>{let S=I({db:e,table:g.targetTable}),m=p({dbName:S.dbName}),P=u({table:S.tsName}),v=false,F="many";g instanceof drizzleOrm.One&&(v=g.optional,F="single");let N=(C,z)=>{P.registerOnInstance({instance:C,action:"created"}),P.registerOnInstance({instance:C,action:"removed"});};if(D[d]){let{config:C,creatorFunction:z}=h.get(D[d]);return typeof C.nullable!="boolean"&&(C.nullable=v),typeof C.subscribe!="function"&&(C.subscribe=N),D[d]=z(C),x}return x[d]=f.relation(d,{args:{where:f.arg({type:m,required:false})},subscribe:N,nullable:v,query:(C,z)=>z.abilities[S.tsName].filter(s,{inject:{where:C.where}}).query[F]}),x},{});return {...B,...E,...D}}})};var Ce="RUMBLE_SUBSCRIPTION_NOTIFICATION",De="REMOVED",Se="UPDATED",Re="CREATED",ie=({subscriptions:e,db:t})=>{let u=e?graphqlYoga.createPubSub(...e):graphqlYoga.createPubSub();return {pubsub:u,makePubSubInstance:({table:n})=>{function a({action:o,tableName:l,primaryKeyValue:s}){let c;switch(o){case "created":c=Re;break;case "removed":c=De;break;case "updated":c=Se;break;default:throw new Error(`Unknown action: ${o}`)}return `${Ce}/${l}${s?`/${s}`:""}/${c}`}return {registerOnInstance({instance:o,action:l,primaryKeyValue:s}){let c=a({tableName:n.toString(),action:l,primaryKeyValue:s});o.register(c);},created(){let o=a({tableName:n.toString(),action:"created"});return u.publish(o)},removed(o){let l=a({tableName:n.toString(),action:"removed"});return u.publish(l)},updated(o){let s=(Array.isArray(o)?o:[o]).map(r=>a({tableName:n.toString(),action:"updated",primaryKeyValue:r})),c=Array.from(new Set(s));for(let r of c)u.publish(r);}}}}};var _=e=>{if(!e)throw new O("Value not found but required (findFirst)");return e},Ee=e=>{let t=e.at(0);if(!t)throw new O("Value not found but required (firstEntry)");return t},oe=async({filters:e,entities:t,context:u})=>(await Promise.all(e.map(p=>p({context:u,entities:t})))).reduce((p,n)=>(p.push(...n),p),[]);var se=({db:e,schemaBuilder:t,argImplementer:u,makePubSubInstance:p})=>({table:n,readAction:a="read",listAction:o="read"})=>{let l=u({table:n}),{registerOnInstance:s}=p({table:n});return t.queryFields(c=>({[`findMany${A(n.toString())}`]:c.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(r,b,i,f,y)=>{s({instance:r,action:"created"}),s({instance:r,action:"removed"});},args:{where:c.arg({type:l,required:false})},resolve:(r,b,i,f,y)=>{let T=f.abilities[n].filter(o,i.where?{inject:{where:i.where}}:void 0).query.many,h=r(T);return T.columns&&(h.columns=T.columns),e.query[n].findMany(h)}}),[`findFirst${A(n.toString())}`]:c.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:c.arg({type:l,required:false})},resolve:(r,b,i,f,y)=>{let T=f.abilities[n].filter(a,i.where?{inject:{where:i.where}}:void 0).query.single,h=r(T);return T.columns&&(h.columns=T.columns),e.query[n].findFirst(h).then(_)}})}))};var ae="ManualFiltersPlugin",le=ae,Ie="applyFilters",V=class extends Be.BasePlugin{wrapResolve(t,u){return async(p,n,a,o)=>{let l=(u?.type).type?.ref.currentConfig.pothosOptions[Ie];if(!l||!Array.isArray(l)||l.length===0)return t(p,n,a,o);let s=await t(p,n,a,o),c=Array.isArray(s)?s:[s],r=Array.isArray(l)?l:[l],b=await oe({filters:r,entities:c,context:a});return Array.isArray(s)?b:b[0]??null}}};Be__default.default.registerPlugin(ae,V);var ue=({db:e,disableDefaultObjects:t,pubsub:u,pothosConfig:p})=>{let n=new Be__default.default({plugins:[le,ve__default.default,Fe__default.default,...p?.plugins??[]],...p,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(o=>o.primary)}}},smartSubscriptions:{...Fe.subscribeOptionsFromIterator((a,o)=>u.subscribe(a))}});return n.addScalarType("JSON",graphqlScalars.JSONResolver),n.addScalarType("Date",graphqlScalars.DateResolver),n.addScalarType("DateTime",graphqlScalars.DateTimeISOResolver),t?.query||n.queryType({}),t?.subscription||n.subscriptionType({}),t?.mutation||n.mutationType({}),{schemaBuilder:n}};var we=e=>`${A(casing.toCamelCase(e.toString()))}WhereInputArgument`,pe=({db:e,schemaBuilder:t,enumImplementer:u})=>{let p=new Map,n=({table:a,refName:o,dbName:l})=>{let s=I({db:e,dbName:l,tsName:a}),c=o??we(s.tsName),r=p.get(c);return r||(r=t.inputType(c,{fields:i=>{let f=h=>{let D=G(h);switch(D){case "Int":return i.int({required:false});case "String":return i.string({required:false});case "Boolean":return i.boolean({required:false});case "Date":return i.field({type:"Date",required:false});case "DateTime":return i.field({type:"DateTime",required:false});case "Float":return i.float({required:false});case "ID":return i.id({required:false});case "JSON":return i.field({type:"JSON",required:false});default:throw new R(`Unsupported argument type ${D} for column ${h}`)}},y=Object.entries(s.columns).reduce((h,[D,B])=>{if(k(B)){let E=u({enumColumn:B});h[D]=i.field({type:E,required:false});}else h[D]=f(B.getSQLType());return h},{}),T=Object.entries(s.relations??{}).reduce((h,[D,B])=>{let E=I({db:e,table:B.targetTable}),x=n({dbName:E.dbName});return h[D]=i.field({type:x,required:false}),h},{});return {...y,...T}}}),p.set(c,r),r)};return n};var Qe=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100);let t=Z(e),u=ee({...e,abilityBuilder:t}),{makePubSubInstance:p,pubsub:n}=ie({...e}),{schemaBuilder:a}=ue({...e,pubsub:n}),o=te({...e,schemaBuilder:a}),l=pe({...e,schemaBuilder:a,enumImplementer:o}),s=ne({...e,schemaBuilder:a,makePubSubInstance:p,argImplementer:l,enumImplementer:o,abilityBuilder:t}),c=se({...e,schemaBuilder:a,argImplementer:l,makePubSubInstance:p});return {abilityBuilder:t,schemaBuilder:a,createYoga:b=>graphqlYoga.createYoga({...b,schema:a.toSchema(),context:u}),object:s,arg:l,query:c,pubsub:p,enum_:o}};exports.RumbleError=R;exports.RumbleErrorSafe=O;exports.assertFindFirstExists=_;exports.assertFirstEntryExists=Ee;exports.rumble=Qe;//# sourceMappingURL=index.cjs.map
7
+ `+K(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 Y(e){return e===void 0||e.length===0?void 0:e}var D=class extends Error{constructor(t){super(t),this.name="RumbleError";}},L=class extends O{};var k=(e,t)=>new D(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function X(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 k(e,"Distinct")}var _=Symbol.for("drizzle:Name"),Z=Symbol.for("drizzle:Columns");function I({dbName:e,tsName:t,table:p,db:m}){let n=p;if(t&&(n=m._.relations.schema[t]),e&&(n=Object.values(m._.relations.schema).find(a=>a[_]===e)),!n)throw new D(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:p?.[_]}).toString()}`);return {tableSchema:n,columns:n[Z],get primaryColumns(){return Object.entries(n[Z]).filter(([a,o])=>o.primary).reduce((a,[o,l])=>(a[o]=l,a),{})},relations:m._.relations.config[t],dbName:n[_],get tsName(){return Object.entries(m._.relations.schema).find(([a,o])=>o===n).at(0)}}}function Te(e){return typeof e!="function"}function ge(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var ee=({db:e,actions:t,defaultLimit:p})=>{let m={},n={},a={},o=l=>{for(let s of t)a[l]||(a[l]={}),a[l][s]||(a[l][s]=[]);return {allow:s=>{let c=n[l];c||(c={},n[l]=c);let r=Array.isArray(s)?s:[s];for(let b of r){let i=c[b];i||(i="unspecified",c[b]=i);}return {when:b=>{for(let i of r)c[i]==="unspecified"&&(c[i]=[]),c[i].push(b);}}},filter:s=>{let c=Array.isArray(s)?s:[s];return {by:r=>{for(let b of c)a[l][b].push(r);}}}}};for(let l of Object.keys(e.query))m[l]=o(l);return {...m,registeredQueryFilters:n,registeredFilters:a,buildWithUserContext:l=>{let s={},c=r=>({filter:(b,i)=>{let d=u=>{let E=w(()=>{if(!(!u?.where&&!i?.inject?.where)){if(i?.inject?.where&&u?.where)return {AND:[u?.where,i?.inject?.where]};if(i?.inject?.where&&!u?.where)return i?.inject?.where;if(!i?.inject?.where&&u?.where)return u?.where;!i?.inject?.where&&u?.where;}}),v=w(()=>{let S=E();if(!S)return;let z=I({tsName:r,db:e});return drizzleOrm.relationsFilterToSQL(z.tableSchema,S)}),U=w(()=>{let S=u?.limit??p;return i?.inject?.limit&&(!S||S>i.inject.limit)&&(S=i.inject.limit),u?.limit&&(!S||u.limit>S)&&(S=u.limit),S??void 0}),F=w(()=>{if(!(!u?.columns&&!i?.inject?.columns))return {...u?.columns,...i?.inject?.columns}}),N={query:{single:{get where(){return E()},columns:F()},many:{get where(){return E()},columns:F(),get limit(){return U()}}},sql:{get where(){return v()},columns:F(),get limit(){return U()}}};return F()||(delete N.sql.columns,delete N.query.many.columns,delete N.query.single.columns),N},y=()=>{let u=I({db:e,tsName:r});if(Object.keys(u.primaryColumns).length===0)throw new D(`No primary key found for entity ${r.toString()}`);let E=Object.values(u.primaryColumns)[0],v=X(E.getSQLType());return {where:{AND:[{[E.name]:v.value1},{[E.name]:v.value2}]}}},g=n?.[r]?.[b];if(g==="unspecified")return d();g||(g=[y()]);let h=g.filter(Te),C=g.filter(ge).map(u=>u(l)),P=C.some(u=>u==="allow"),B=[...h,...C].filter(u=>u!==void 0).filter(u=>u!=="allow");!P&&B.length===0&&(B=[y()]);let x;for(let u of B)u?.limit&&(x===void 0||u.limit>x)&&(x=u.limit);let f;for(let u of [...B,i?.inject])u?.columns&&(f===void 0?f=u.columns:f={...f,...u.columns});let T=P?[]:B.filter(u=>u?.where).map(u=>u.where),R=T.length>0?{OR:T}:void 0;return d({where:R,columns:f,limit:x})},explicitFilters:b=>a[r][b]});for(let r of Object.keys(e.query))s[r]=c(r);return s}}};var te=({context:e,abilityBuilder:t})=>async p=>{let m=e?await e(p):{};return {...m,abilities:t.buildWithUserContext(m)}};function A(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function j(e){return e instanceof pgCore.PgEnumColumn}var ne=({db:e,schemaBuilder:t})=>{let p=new Map;return ({tsName:n,enumColumn:a,refName:o})=>{let l,s;if(n){let i=e._.relations.schema[n];l=n.toString();let d=Object.values(e._.relations.schema).filter(y=>typeof y=="object").map(y=>Object.values(y[Symbol.for("drizzle:Columns")])).flat(2).find(y=>y.config?.enum===i);if(!d)throw new D(`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!`);s=d.enumValues;}else if(a){let i=Object.entries(e._.relations.schema).find(([d,y])=>y===a.config.enum);if(!i)throw new D(`Could not find enum in schema for ${a.name}!`);l=i[0],s=a.enumValues;}if(!l||!s)throw new D("Could not determine enum structure!");let c=o??`${A(casing.toCamelCase(l))}Enum`,r=p.get(c);return r||(r=t.enumType(c,{values:s}),p.set(c,r),r)}};function G(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 k(e,"SQL to GQL")}var De=e=>typeof e!="object"?false:!!Object.keys(e).some(t=>["args","nullable","query","subscribe","description","type","resolve"].find(p=>p===t)),re=({db:e,schemaBuilder:t,makePubSubInstance:p,argImplementer:m,enumImplementer:n,abilityBuilder:a})=>({table:o,refName:l,readAction:s="read",adjust:c})=>{let r=I({db:e,tsName:o});Object.keys(r.primaryColumns).length===0&&console.warn(`Could not find primary key for ${o.toString()}. Cannot register subscriptions!`);let b=Object.values(r.primaryColumns)[0],{registerOnInstance:i}=p({table:o});return t.drizzleObject(o,{name:l??A(o.toString()),subscribe:(d,y,g)=>{if(!b)return;let h=y[b.name];if(!h){console.warn(`Could not find primary key value for ${JSON.stringify(y)}. Cannot register subscription!`);return}i({instance:d,action:"updated",primaryKeyValue:h});},applyFilters:a?.registeredFilters?.[o]?.[s],fields:d=>{let y=r.columns,g=(x,f,T)=>{let R=G(x);switch(R){case "Int":return d.exposeInt(f,{nullable:T});case "String":return d.exposeString(f,{nullable:T});case "Boolean":return d.exposeBoolean(f,{nullable:T});case "Date":return d.field({type:"Date",resolve:u=>u[f],nullable:T});case "DateTime":return d.field({type:"DateTime",resolve:u=>u[f],nullable:T});case "Float":return d.exposeFloat(f,{nullable:T});case "ID":return d.exposeID(f,{nullable:T});case "JSON":return d.field({type:"JSON",resolve:u=>u[f],nullable:T});default:throw new D(`Unsupported object type ${R} for column ${f}`)}},h=new Map,C=c?.(new Proxy(d,{get:(x,f)=>typeof x[f]=="function"?(...T)=>{let R=x[f](...T),u=T.find(De);if(!u)throw new D("Expected config object to be passed to adjust field");return h.set(R,{params:T,creatorFunction:x[f],configObject:u}),R}:x[f]}))??{},P=Object.entries(y).reduce((x,[f,T])=>{if(C[f]){let{params:R,creatorFunction:u,configObject:E}=h.get(C[f]);return typeof E.nullable!="boolean"&&(E.nullable=!T.notNull),C[f]=u.bind(d)(...R),x}if(j(T)){let R=n({enumColumn:T});x[f]=d.field({type:R,resolve:u=>u[f],nullable:!T.notNull});}else x[f]=g(T.getSQLType(),f,!T.notNull);return x},{}),B=Object.entries(r.relations??{}).reduce((x,[f,T])=>{let R=I({db:e,table:T.targetTable}),u=m({dbName:R.dbName}),E=p({table:R.tsName}),v=false,F="many";T instanceof drizzleOrm.One&&(v=T.optional,F="single");let N=(S,z)=>{E.registerOnInstance({instance:S,action:"created"}),E.registerOnInstance({instance:S,action:"removed"});};if(C[f]){let{params:S,creatorFunction:z,configObject:Q}=h.get(C[f]);return typeof Q.nullable!="boolean"&&(Q.nullable=v),typeof Q.subscribe!="function"&&(Q.subscribe=N),C[f]=z.bind(d)(...S),x}return x[f]=d.relation(f,{args:{where:d.arg({type:u,required:false})},subscribe:N,nullable:v,query:(S,z)=>z.abilities[R.tsName].filter(s,{inject:{where:S.where}}).query[F]}),x},{});return {...P,...B,...C}}})};var Se="RUMBLE_SUBSCRIPTION_NOTIFICATION",Re="REMOVED",Ee="UPDATED",Be="CREATED",oe=({subscriptions:e,db:t})=>{let p=e?graphqlYoga.createPubSub(...e):graphqlYoga.createPubSub();return {pubsub:p,makePubSubInstance:({table:n})=>{function a({action:o,tableName:l,primaryKeyValue:s}){let c;switch(o){case "created":c=Be;break;case "removed":c=Re;break;case "updated":c=Ee;break;default:throw new Error(`Unknown action: ${o}`)}return `${Se}/${l}${s?`/${s}`:""}/${c}`}return {registerOnInstance({instance:o,action:l,primaryKeyValue:s}){let c=a({tableName:n.toString(),action:l,primaryKeyValue:s});o.register(c);},created(){let o=a({tableName:n.toString(),action:"created"});return p.publish(o)},removed(o){let l=a({tableName:n.toString(),action:"removed"});return p.publish(l)},updated(o){let s=(Array.isArray(o)?o:[o]).map(r=>a({tableName:n.toString(),action:"updated",primaryKeyValue:r})),c=Array.from(new Set(s));for(let r of c)p.publish(r);}}}}};var V=e=>{if(!e)throw new L("Value not found but required (findFirst)");return e},Pe=e=>{let t=e.at(0);if(!t)throw new L("Value not found but required (firstEntry)");return t},se=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 ae=({db:e,schemaBuilder:t,argImplementer:p,makePubSubInstance:m})=>({table:n,readAction:a="read",listAction:o="read"})=>{let l=p({table:n}),{registerOnInstance:s}=m({table:n});return t.queryFields(c=>({[`findMany${A(n.toString())}`]:c.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(r,b,i,d,y)=>{s({instance:r,action:"created"}),s({instance:r,action:"removed"});},args:{where:c.arg({type:l,required:false})},resolve:(r,b,i,d,y)=>{let g=d.abilities[n].filter(o,i.where?{inject:{where:i.where}}:void 0).query.many,h=r(g);return g.columns&&(h.columns=g.columns),e.query[n].findMany(h)}}),[`findFirst${A(n.toString())}`]:c.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:c.arg({type:l,required:false})},resolve:(r,b,i,d,y)=>{let g=d.abilities[n].filter(a,i.where?{inject:{where:i.where}}:void 0).query.single,h=r(g);return g.columns&&(h.columns=g.columns),e.query[n].findFirst(h).then(V)}})}))};var le="ManualFiltersPlugin",ue=le,ve="applyFilters",M=class extends Ie.BasePlugin{wrapResolve(t,p){return async(m,n,a,o)=>{let l=(p?.type).type?.ref.currentConfig.pothosOptions[ve];if(!l||!Array.isArray(l)||l.length===0)return t(m,n,a,o);let s=await t(m,n,a,o),c=Array.isArray(s)?s:[s],r=Array.isArray(l)?l:[l],b=await se({filters:r,entities:c,context:a});return Array.isArray(s)?b:b[0]??null}}};Ie__default.default.registerPlugin(le,M);var pe=({db:e,disableDefaultObjects:t,pubsub:p,pothosConfig:m})=>{let n=new Ie__default.default({plugins:[ue,Ne__default.default,ze__default.default,...m?.plugins??[]],...m,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(o=>o.primary)}}},smartSubscriptions:{...ze.subscribeOptionsFromIterator((a,o)=>p.subscribe(a))}});return n.addScalarType("JSON",graphqlScalars.JSONResolver),n.addScalarType("Date",graphqlScalars.DateResolver),n.addScalarType("DateTime",graphqlScalars.DateTimeISOResolver),t?.query||n.queryType({}),t?.subscription||n.subscriptionType({}),t?.mutation||n.mutationType({}),{schemaBuilder:n}};var Qe=e=>`${A(casing.toCamelCase(e.toString()))}WhereInputArgument`,me=({db:e,schemaBuilder:t,enumImplementer:p})=>{let m=new Map,n=({table:a,refName:o,dbName:l})=>{let s=I({db:e,dbName:l,tsName:a}),c=o??Qe(s.tsName),r=m.get(c);return r||(r=t.inputType(c,{fields:i=>{let d=h=>{let C=G(h);switch(C){case "Int":return i.int({required:false});case "String":return i.string({required:false});case "Boolean":return i.boolean({required:false});case "Date":return i.field({type:"Date",required:false});case "DateTime":return i.field({type:"DateTime",required:false});case "Float":return i.float({required:false});case "ID":return i.id({required:false});case "JSON":return i.field({type:"JSON",required:false});default:throw new D(`Unsupported argument type ${C} for column ${h}`)}},y=Object.entries(s.columns).reduce((h,[C,P])=>{if(j(P)){let B=p({enumColumn:P});h[C]=i.field({type:B,required:false});}else h[C]=d(P.getSQLType());return h},{}),g=Object.entries(s.relations??{}).reduce((h,[C,P])=>{let B=I({db:e,table:P.targetTable}),x=n({dbName:B.dbName});return h[C]=i.field({type:x,required:false}),h},{});return {...y,...g}}}),m.set(c,r),r)};return n};var je=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100);let t=ee(e),p=te({...e,abilityBuilder:t}),{makePubSubInstance:m,pubsub:n}=oe({...e}),{schemaBuilder:a}=pe({...e,pubsub:n}),o=ne({...e,schemaBuilder:a}),l=me({...e,schemaBuilder:a,enumImplementer:o}),s=re({...e,schemaBuilder:a,makePubSubInstance:m,argImplementer:l,enumImplementer:o,abilityBuilder:t}),c=ae({...e,schemaBuilder:a,argImplementer:l,makePubSubInstance:m});return {abilityBuilder:t,schemaBuilder:a,createYoga:b=>graphqlYoga.createYoga({...b,schema:a.toSchema(),context:p}),object:s,arg:l,query:c,pubsub:m,enum_:o}};exports.RumbleError=D;exports.RumbleErrorSafe=L;exports.assertFindFirstExists=V;exports.assertFirstEntryExists=Pe;exports.rumble=je;//# sourceMappingURL=index.cjs.map
9
9
  //# sourceMappingURL=index.cjs.map