@m1212e/rumble 0.7.8 → 0.7.9

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'),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 L(e){let t,l=false;return ()=>(l||(t=e(),l=true),t)}function $(e){return typeof e=="object"&&e!==null}function W(e,t){throw new Error("Unexpected invariant triggered.")}var ce=/\r\n|[\n\r]/g;function q(e,t){let l=0,i=1;for(let n of e.body.matchAll(ce)){if(typeof n.index=="number"||W(),n.index>=t)break;l=n.index+n[0].length,i+=1;}return {line:i,column:t+1-l}}function J(e){return K(e.source,q(e.source,e.start))}function K(e,t){let l=e.locationOffset.column-1,i="".padStart(l)+e.body,n=t.line-1,u=e.locationOffset.line-1,s=t.line+u,p=t.line===1?l:0,a=t.column+p,c=`${e.name}:${s}:${a}
2
- `,r=i.split(/\r\n|[\n\r]/g),b=r[n];if(b.length>120){let o=Math.floor(a/80),d=a%80,y=[];for(let g=0;g<b.length;g+=80)y.push(b.slice(g,g+80));return c+H([[`${s} |`,y[0]],...y.slice(1,o+1).map(g=>["|",g]),["|","^".padStart(d)],["|",y[o+1]]])}return c+H([[`${s-1} |`,r[n-1]],[`${s} |`,b],["|","^".padStart(a)],[`${s+1} |`,r[n+1]]])}function H(e){let t=e.filter(([i,n])=>n!==void 0),l=Math.max(...t.map(([i])=>i.length));return t.map(([i,n])=>i.padStart(l)+(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,...l){var i,n,u;let{nodes:s,source:p,positions:a,path:c,originalError:r,extensions:b}=ye(l);super(t),this.name="GraphQLError",this.path=c??void 0,this.originalError=r??void 0,this.nodes=Y(Array.isArray(s)?s:s?[s]:void 0);let o=Y((i=this.nodes)===null||i===void 0?void 0:i.map(y=>y.loc).filter(y=>y!=null));this.source=p??(o==null||(n=o[0])===null||n===void 0?void 0:n.source),this.positions=a??o?.map(y=>y.start),this.locations=a&&p?a.map(y=>q(p,y)):o?.map(y=>q(y.source,y.start));let d=$(r?.extensions)?r?.extensions:void 0;this.extensions=(u=b??d)!==null&&u!==void 0?u: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 l of this.nodes)l.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 L(e){let t,r=false;return ()=>(r||(t=e(),r=true),t)}function $(e){return typeof e=="object"&&e!==null}function W(e,t){throw new Error("Unexpected invariant triggered.")}var ce=/\r\n|[\n\r]/g;function q(e,t){let r=0,m=1;for(let n of e.body.matchAll(ce)){if(typeof n.index=="number"||W(),n.index>=t)break;r=n.index+n[0].length,m+=1;}return {line:m,column:t+1-r}}function J(e){return K(e.source,q(e.source,e.start))}function K(e,t){let r=e.locationOffset.column-1,m="".padStart(r)+e.body,n=t.line-1,l=e.locationOffset.line-1,s=t.line+l,u=t.line===1?r:0,a=t.column+u,c=`${e.name}:${s}:${a}
2
+ `,i=m.split(/\r\n|[\n\r]/g),b=i[n];if(b.length>120){let o=Math.floor(a/80),d=a%80,y=[];for(let g=0;g<b.length;g+=80)y.push(b.slice(g,g+80));return c+H([[`${s} |`,y[0]],...y.slice(1,o+1).map(g=>["|",g]),["|","^".padStart(d)],["|",y[o+1]]])}return c+H([[`${s-1} |`,i[n-1]],[`${s} |`,b],["|","^".padStart(a)],[`${s+1} |`,i[n+1]]])}function H(e){let t=e.filter(([m,n])=>n!==void 0),r=Math.max(...t.map(([m])=>m.length));return t.map(([m,n])=>m.padStart(r)+(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,...r){var m,n,l;let{nodes:s,source:u,positions:a,path:c,originalError:i,extensions:b}=ye(r);super(t),this.name="GraphQLError",this.path=c??void 0,this.originalError=i??void 0,this.nodes=Y(Array.isArray(s)?s:s?[s]:void 0);let o=Y((m=this.nodes)===null||m===void 0?void 0:m.map(y=>y.loc).filter(y=>y!=null));this.source=u??(o==null||(n=o[0])===null||n===void 0?void 0:n.source),this.positions=a??o?.map(y=>y.start),this.locations=a&&u?a.map(y=>q(u,y)):o?.map(y=>q(y.source,y.start));let d=$(i?.extensions)?i?.extensions:void 0;this.extensions=(l=b??d)!==null&&l!==void 0?l: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}}),i!=null&&i.stack?Object.defineProperty(this,"stack",{value:i.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 r of this.nodes)r.loc&&(t+=`
4
4
 
5
- `+J(l.loc));else if(this.source&&this.locations)for(let l of this.locations)t+=`
5
+ `+J(r.loc));else if(this.source&&this.locations)for(let r of this.locations)t+=`
6
6
 
7
- `+K(this.source,l);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 R=class extends Error{constructor(t){super(t),this.name="RumbleError";}},w=class extends O{};var j=(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 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 j(e,"Distinct")}var _=Symbol.for("drizzle:Name"),Z=Symbol.for("drizzle:Columns");function I({dbName:e,tsName:t,table:l,db:i}){let n=l;if(t&&(n=i._.relations.schema[t]),e&&(n=Object.values(i._.relations.schema).find(u=>u[_]===e)),!n)throw new R(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:l?.[_]}).toString()}`);return {tableSchema:n,columns:n[Z],get primaryColumns(){return Object.entries(n[Z]).filter(([u,s])=>s.primary).reduce((u,[s,p])=>(u[s]=p,u),{})},relations:i._.relations.config[t],dbName:n[_],get tsName(){return Object.entries(i._.relations.schema).find(([u,s])=>s===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:l})=>{let i={},n={},u={},s=p=>{for(let a of t)u[p]||(u[p]={}),u[p][a]||(u[p][a]=[]);return {allow:a=>{let c=n[p];c||(c={},n[p]=c);let r=Array.isArray(a)?a:[a];for(let b of r){let o=c[b];o||(o="unspecified",c[b]=o);}return {when:b=>{for(let o of r)c[o]==="unspecified"&&(c[o]=[]),c[o].push(b);}}},filter:a=>{let c=Array.isArray(a)?a:[a];return {by:r=>{for(let b of c)u[p][b].push(r);}}}}};for(let p of Object.keys(e.query))i[p]=s(p);return {...i,registeredQueryFilters:n,registeredFilters:u,buildWithUserContext:p=>{let a={},c=r=>({filter:(b,o)=>{let d=m=>{let C=L(()=>{if(!(!m?.where&&!o?.inject?.where)){if(o?.inject?.where&&m?.where)return {AND:[m?.where,o?.inject?.where]};if(o?.inject?.where&&!m?.where)return o?.inject?.where;if(!o?.inject?.where&&m?.where)return m?.where;!o?.inject?.where&&m?.where;}}),v=L(()=>{let S=C();if(!S)return;let z=I({tsName:r,db:e});return drizzleOrm.relationsFilterToSQL(z.tableSchema,S)}),U=L(()=>{let S=m?.limit??l;return o?.inject?.limit&&(!S||S>o.inject.limit)&&(S=o.inject.limit),m?.limit&&(!S||m.limit>S)&&(S=m.limit),S??void 0}),F=L(()=>{if(!(!m?.columns&&!o?.inject?.columns))return {...m?.columns,...o?.inject?.columns}}),N={query:{single:{get where(){return C()},columns:F()},many:{get where(){return C()},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 C=Object.values(m.primaryColumns)[0],v=X(C.getSQLType());return {where:{AND:[{[C.name]:v.value1},{[C.name]:v.value2}]}}},g=n?.[r]?.[b];if(g==="unspecified")return d();g||(g=[y()]);let h=g.filter(Te),D=g.filter(ge).map(m=>m(p)),P=D.some(m=>m==="allow"),E=[...h,...D].filter(m=>m!==void 0).filter(m=>m!=="allow");!P&&E.length===0&&(E=[y()]);let x;for(let m of E)m?.limit&&(x===void 0||m.limit>x)&&(x=m.limit);let f;for(let m of [...E,o?.inject])m?.columns&&(f===void 0?f=m.columns:f={...f,...m.columns});let T=P?[]:E.filter(m=>m?.where).map(m=>m.where),B=T.length>0?{OR:T}:void 0;return d({where:B,columns:f,limit:x})},explicitFilters:b=>u[r][b]});for(let r of Object.keys(e.query))a[r]=c(r);return a}}};var te=({context:e,abilityBuilder:t})=>async l=>{let i=e?await e(l):{};return {...i,abilities:t.buildWithUserContext(i)}};function A(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function k(e){return e instanceof pgCore.PgEnumColumn}var ne=({db:e,schemaBuilder:t})=>{let l=new Map;return ({tsName:n,enumColumn:u,refName:s})=>{let p,a;if(n){let o=e._.relations.schema[n];p=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===o);if(!d)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!`);a=d.enumValues;}else if(u){let o=Object.entries(e._.relations.schema).find(([d,y])=>y===u.config.enum);if(!o)throw new R(`Could not find enum in schema for ${u.name}!`);p=o[0],a=u.enumValues;}if(!p||!a)throw new R("Could not determine enum structure!");let c=s??`${A(casing.toCamelCase(p))}Enum`,r=l.get(c);return r||(r=t.enumType(c,{values:a}),l.set(c,r),r)}};function G({sqlType:e,fieldName:t,isPrimaryKey:l}){let i;if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e)&&(i="Int"),["real","decimal","double","float"].includes(e)&&(i="Float"),["string","text","varchar","char","text(256)"].includes(e)&&(l&&t&&(t.toLowerCase().endsWith("_id")||t.toLowerCase().endsWith("id"))?i="ID":i="String"),["uuid"].includes(e)&&(i="ID"),["boolean"].includes(e)&&(i="Boolean"),["timestamp","datetime"].includes(e)&&(i="DateTime"),["date"].includes(e)&&(i="Date"),["json"].includes(e)&&(i="JSON"),i!==void 0)return i;throw j(e,"SQL to GQL")}var De=e=>typeof e!="object"?false:!!Object.keys(e).some(t=>["args","nullable","query","subscribe","description","type","resolve"].find(l=>l===t)),re=({db:e,schemaBuilder:t,makePubSubInstance:l,argImplementer:i,enumImplementer:n,abilityBuilder:u})=>({table:s,refName:p,readAction:a="read",adjust:c})=>{let r=I({db:e,tsName:s});Object.keys(r.primaryColumns).length===0&&console.warn(`Could not find primary key for ${s.toString()}. Cannot register subscriptions!`);let b=Object.values(r.primaryColumns)[0],{registerOnInstance:o}=l({table:s});return t.drizzleObject(s,{name:p??A(s.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}o({instance:d,action:"updated",primaryKeyValue:h});},applyFilters:u?.registeredFilters?.[s]?.[a],fields:d=>{let y=r.columns,g=(x,f,T,B)=>{let m=G({sqlType:x,fieldName:f,isPrimaryKey:B});switch(m){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:C=>C[f],nullable:T});case "DateTime":return d.field({type:"DateTime",resolve:C=>C[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:C=>C[f],nullable:T});default:throw new R(`Unsupported object type ${m} for column ${f}`)}},h=new Map,D=c?.(new Proxy(d,{get:(x,f)=>typeof x[f]=="function"?(...T)=>{let B=x[f](...T),m=T.find(De);if(!m)throw new R("Expected config object to be passed to adjust field");return h.set(B,{params:T,creatorFunction:x[f],configObject:m}),B}:x[f]}))??{},P=Object.entries(y).reduce((x,[f,T])=>{if(D[f]){let{params:B,creatorFunction:m,configObject:C}=h.get(D[f]);return typeof C.nullable!="boolean"&&(C.nullable=!T.notNull),D[f]=m.bind(d)(...B),x}if(k(T)){let B=n({enumColumn:T});x[f]=d.field({type:B,resolve:m=>m[f],nullable:!T.notNull});}else x[f]=g(T.getSQLType(),f,!T.notNull,T.primary);return x},{}),E=Object.entries(r.relations??{}).reduce((x,[f,T])=>{let B=I({db:e,table:T.targetTable}),m=i({dbName:B.dbName}),C=l({table:B.tsName}),v=false,F="many";T instanceof drizzleOrm.One&&(v=T.optional,F="single");let N=(S,z)=>{C.registerOnInstance({instance:S,action:"created"}),C.registerOnInstance({instance:S,action:"removed"});};if(D[f]){let{params:S,creatorFunction:z,configObject:Q}=h.get(D[f]);return typeof Q.nullable!="boolean"&&(Q.nullable=v),typeof Q.subscribe!="function"&&(Q.subscribe=N),D[f]=z.bind(d)(...S),x}return x[f]=d.relation(f,{args:{where:d.arg({type:m,required:false})},subscribe:N,nullable:v,query:(S,z)=>z.abilities[B.tsName].filter(a,{inject:{where:S.where}}).query[F]}),x},{});return {...P,...E,...D}}})};var Re="RUMBLE_SUBSCRIPTION_NOTIFICATION",Se="REMOVED",Ee="UPDATED",Be="CREATED",oe=({subscriptions:e,db:t})=>{let l=e?graphqlYoga.createPubSub(...e):graphqlYoga.createPubSub();return {pubsub:l,makePubSubInstance:({table:n})=>{function u({action:s,tableName:p,primaryKeyValue:a}){let c;switch(s){case "created":c=Be;break;case "removed":c=Se;break;case "updated":c=Ee;break;default:throw new Error(`Unknown action: ${s}`)}return `${Re}/${p}${a?`/${a}`:""}/${c}`}return {registerOnInstance({instance:s,action:p,primaryKeyValue:a}){let c=u({tableName:n.toString(),action:p,primaryKeyValue:a});s.register(c);},created(){let s=u({tableName:n.toString(),action:"created"});return l.publish(s)},removed(s){let p=u({tableName:n.toString(),action:"removed"});return l.publish(p)},updated(s){let a=(Array.isArray(s)?s:[s]).map(r=>u({tableName:n.toString(),action:"updated",primaryKeyValue:r})),c=Array.from(new Set(a));for(let r of c)l.publish(r);}}}}};var V=e=>{if(!e)throw new w("Value not found but required (findFirst)");return e},Pe=e=>{let t=e.at(0);if(!t)throw new w("Value not found but required (firstEntry)");return t},se=async({filters:e,entities:t,context:l})=>(await Promise.all(e.map(i=>i({context:l,entities:t})))).reduce((i,n)=>(i.push(...n),i),[]);var ae=({db:e,schemaBuilder:t,argImplementer:l,makePubSubInstance:i})=>({table:n,readAction:u="read",listAction:s="read"})=>{let p=l({table:n}),{registerOnInstance:a}=i({table:n});return t.queryFields(c=>({[`findMany${A(n.toString())}`]:c.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(r,b,o,d,y)=>{a({instance:r,action:"created"}),a({instance:r,action:"removed"});},args:{where:c.arg({type:p,required:false})},resolve:(r,b,o,d,y)=>{let g=d.abilities[n].filter(s,o.where?{inject:{where:o.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:p,required:false})},resolve:(r,b,o,d,y)=>{let g=d.abilities[n].filter(u,o.where?{inject:{where:o.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,l){return async(i,n,u,s)=>{let p=(l?.type).type?.ref.currentConfig.pothosOptions[ve];if(!p||!Array.isArray(p)||p.length===0)return t(i,n,u,s);let a=await t(i,n,u,s),c=Array.isArray(a)?a:[a],r=Array.isArray(p)?p:[p],b=await se({filters:r,entities:c,context:u});return Array.isArray(a)?b:b[0]??null}}};Ie__default.default.registerPlugin(le,M);var pe=({db:e,disableDefaultObjects:t,pubsub:l,pothosConfig:i})=>{let n=new Ie__default.default({plugins:[ue,Ne__default.default,ze__default.default,...i?.plugins??[]],...i,drizzle:{client:e,relations:e._.relations,getTableConfig(u){return {columns:Object.values(u[Symbol.for("drizzle:Columns")]),primaryKeys:Object.values(u[Symbol.for("drizzle:Columns")]).filter(s=>s.primary)}}},smartSubscriptions:{...ze.subscribeOptionsFromIterator((u,s)=>l.subscribe(u))}});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:l})=>{let i=new Map,n=({table:u,refName:s,dbName:p})=>{let a=I({db:e,dbName:p,tsName:u}),c=s??Qe(a.tsName),r=i.get(c);return r||(r=t.inputType(c,{fields:o=>{let d=(h,D,P)=>{let E=G({sqlType:h,fieldName:D,isPrimaryKey:P});switch(E){case "Int":return o.int({required:false});case "String":return o.string({required:false});case "Boolean":return o.boolean({required:false});case "Date":return o.field({type:"Date",required:false});case "DateTime":return o.field({type:"DateTime",required:false});case "Float":return o.float({required:false});case "ID":return o.id({required:false});case "JSON":return o.field({type:"JSON",required:false});default:throw new R(`Unsupported argument type ${E} for column ${h}`)}},y=Object.entries(a.columns).reduce((h,[D,P])=>{if(k(P)){let E=l({enumColumn:P});h[D]=o.field({type:E,required:false});}else h[D]=d(P.getSQLType(),D,P.primary);return h},{}),g=Object.entries(a.relations??{}).reduce((h,[D,P])=>{let E=I({db:e,table:P.targetTable}),x=n({dbName:E.dbName});return h[D]=o.field({type:x,required:false}),h},{});return {...y,...g}}}),i.set(c,r),r)};return n};var ke=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100);let t=ee(e),l=te({...e,abilityBuilder:t}),{makePubSubInstance:i,pubsub:n}=oe({...e}),{schemaBuilder:u}=pe({...e,pubsub:n}),s=ne({...e,schemaBuilder:u}),p=me({...e,schemaBuilder:u,enumImplementer:s}),a=re({...e,schemaBuilder:u,makePubSubInstance:i,argImplementer:p,enumImplementer:s,abilityBuilder:t}),c=ae({...e,schemaBuilder:u,argImplementer:p,makePubSubInstance:i});return {abilityBuilder:t,schemaBuilder:u,createYoga:b=>graphqlYoga.createYoga({...b,schema:u.toSchema(),context:l}),object:a,arg:p,query:c,pubsub:i,enum_:s}};exports.RumbleError=R;exports.RumbleErrorSafe=w;exports.assertFindFirstExists=V;exports.assertFirstEntryExists=Pe;exports.rumble=ke;//# sourceMappingURL=index.cjs.map
7
+ `+K(this.source,r);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";}},w=class extends O{};var j=(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 j(e,"Distinct")}var _=Symbol.for("drizzle:Name"),Z=Symbol.for("drizzle:Columns");function I({dbName:e,tsName:t,table:r,db:m}){let n=r;if(t&&(n=m._.relations.schema[t]),e&&(n=Object.values(m._.relations.schema).find(l=>l[_]===e)),!n)throw new D(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:r?.[_]}).toString()}`);return {tableSchema:n,columns:n[Z],get primaryColumns(){return Object.entries(n[Z]).filter(([l,s])=>s.primary).reduce((l,[s,u])=>(l[s]=u,l),{})},relations:m._.relations.config[t],dbName:n[_],get tsName(){return Object.entries(m._.relations.schema).find(([l,s])=>s===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:r})=>{let m={},n={},l={},s=u=>{for(let a of t)l[u]||(l[u]={}),l[u][a]||(l[u][a]=[]);return {allow:a=>{let c=n[u];c||(c={},n[u]=c);let i=Array.isArray(a)?a:[a];for(let b of i){let o=c[b];o||(o="unspecified",c[b]=o);}return {when:b=>{for(let o of i)c[o]==="unspecified"&&(c[o]=[]),c[o].push(b);}}},filter:a=>{let c=Array.isArray(a)?a:[a];return {by:i=>{for(let b of c)l[u][b].push(i);}}}}};for(let u of Object.keys(e.query))m[u]=s(u);return {...m,registeredQueryFilters:n,registeredFilters:l,buildWithUserContext:u=>{let a={},c=i=>({filter:(b,o)=>{let d=p=>{let B=L(()=>{if(!(!p?.where&&!o?.inject?.where)){if(o?.inject?.where&&p?.where)return {AND:[p?.where,o?.inject?.where]};if(o?.inject?.where&&!p?.where)return o?.inject?.where;if(!o?.inject?.where&&p?.where)return p?.where;!o?.inject?.where&&p?.where;}}),v=L(()=>{let R=B();if(!R)return;let z=I({tsName:i,db:e});return drizzleOrm.relationsFilterToSQL(z.tableSchema,R)}),U=L(()=>{let R=p?.limit??r;return o?.inject?.limit&&(!R||R>o.inject.limit)&&(R=o.inject.limit),p?.limit&&(!R||p.limit>R)&&(R=p.limit),R??void 0}),F=L(()=>{if(!(!p?.columns&&!o?.inject?.columns))return {...p?.columns,...o?.inject?.columns}}),N={query:{single:{get where(){return B()},columns:F()},many:{get where(){return B()},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 p=I({db:e,tsName:i});if(Object.keys(p.primaryColumns).length===0)throw new D(`No primary key found for entity ${i.toString()}`);let B=Object.values(p.primaryColumns)[0],v=X(B.getSQLType());return {where:{AND:[{[B.name]:v.value1},{[B.name]:v.value2}]}}},g=n?.[i]?.[b];if(g==="unspecified")return d();g||(g=[y()]);let h=g.filter(Te),C=g.filter(ge).map(p=>p(u)),E=C.some(p=>p==="allow"),P=[...h,...C].filter(p=>p!==void 0).filter(p=>p!=="allow");!E&&P.length===0&&(P=[y()]);let x;for(let p of P)p?.limit&&(x===void 0||p.limit>x)&&(x=p.limit);let f;for(let p of [...P,o?.inject])p?.columns&&(f===void 0?f=p.columns:f={...f,...p.columns});let T=E?[]:P.filter(p=>p?.where).map(p=>p.where),S=T.length>0?{OR:T}:void 0;return d({where:S,columns:f,limit:x})},explicitFilters:b=>l[i][b]});for(let i of Object.keys(e.query))a[i]=c(i);return a}}};var te=({context:e,abilityBuilder:t})=>async r=>{let m=e?await e(r):{};return {...m,abilities:t.buildWithUserContext(m)}};function A(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function k(e){return e instanceof pgCore.PgEnumColumn}var ne=({db:e,schemaBuilder:t})=>{let r=new Map;return ({tsName:n,enumColumn:l,refName:s})=>{let u,a;if(n){let o=e._.relations.schema[n];u=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===o);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!`);a=d.enumValues;}else if(l){let o=Object.entries(e._.relations.schema).find(([d,y])=>y===l.config.enum);if(!o)throw new D(`Could not find enum in schema for ${l.name}!`);u=o[0],a=l.enumValues;}if(!u||!a)throw new D("Could not determine enum structure!");let c=s??`${A(casing.toCamelCase(u))}Enum`,i=r.get(c);return i||(i=t.enumType(c,{values:a}),r.set(c,i),i)}};function G({sqlType:e,fieldName:t}){let r;if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e)&&(r="Int"),["real","decimal","double","float"].includes(e)&&(r="Float"),["string","text","varchar","char","text(256)"].includes(e)&&(t&&(t.toLowerCase().endsWith("_id")||t.toLowerCase().endsWith("id"))?r="ID":r="String"),["uuid"].includes(e)&&(r="ID"),["boolean"].includes(e)&&(r="Boolean"),["timestamp","datetime"].includes(e)&&(r="DateTime"),["date"].includes(e)&&(r="Date"),["json"].includes(e)&&(r="JSON"),r!==void 0)return r;throw j(e,"SQL to GQL")}var De=e=>typeof e!="object"?false:!!Object.keys(e).some(t=>["args","nullable","query","subscribe","description","type","resolve"].find(r=>r===t)),re=({db:e,schemaBuilder:t,makePubSubInstance:r,argImplementer:m,enumImplementer:n,abilityBuilder:l})=>({table:s,refName:u,readAction:a="read",adjust:c})=>{let i=I({db:e,tsName:s});Object.keys(i.primaryColumns).length===0&&console.warn(`Could not find primary key for ${s.toString()}. Cannot register subscriptions!`);let b=Object.values(i.primaryColumns)[0],{registerOnInstance:o}=r({table:s});return t.drizzleObject(s,{name:u??A(s.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}o({instance:d,action:"updated",primaryKeyValue:h});},applyFilters:l?.registeredFilters?.[s]?.[a],fields:d=>{let y=i.columns,g=(x,f,T)=>{let S=G({sqlType:x,fieldName:f});switch(S){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:p=>p[f],nullable:T});case "DateTime":return d.field({type:"DateTime",resolve:p=>p[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:p=>p[f],nullable:T});default:throw new D(`Unsupported object type ${S} for column ${f}`)}},h=new Map,C=c?.(new Proxy(d,{get:(x,f)=>typeof x[f]=="function"?(...T)=>{let S=x[f](...T),p=T.find(De);if(!p)throw new D("Expected config object to be passed to adjust field");return h.set(S,{params:T,creatorFunction:x[f],configObject:p}),S}:x[f]}))??{},E=Object.entries(y).reduce((x,[f,T])=>{if(C[f]){let{params:S,creatorFunction:p,configObject:B}=h.get(C[f]);return typeof B.nullable!="boolean"&&(B.nullable=!T.notNull),C[f]=p.bind(d)(...S),x}if(k(T)){let S=n({enumColumn:T});x[f]=d.field({type:S,resolve:p=>p[f],nullable:!T.notNull});}else x[f]=g(T.getSQLType(),f,!T.notNull);return x},{}),P=Object.entries(i.relations??{}).reduce((x,[f,T])=>{let S=I({db:e,table:T.targetTable}),p=m({dbName:S.dbName}),B=r({table:S.tsName}),v=false,F="many";T instanceof drizzleOrm.One&&(v=T.optional,F="single");let N=(R,z)=>{B.registerOnInstance({instance:R,action:"created"}),B.registerOnInstance({instance:R,action:"removed"});};if(C[f]){let{params:R,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)(...R),x}return x[f]=d.relation(f,{args:{where:d.arg({type:p,required:false})},subscribe:N,nullable:v,query:(R,z)=>z.abilities[S.tsName].filter(a,{inject:{where:R.where}}).query[F]}),x},{});return {...E,...P,...C}}})};var Re="RUMBLE_SUBSCRIPTION_NOTIFICATION",Se="REMOVED",Ee="UPDATED",Be="CREATED",oe=({subscriptions:e,db:t})=>{let r=e?graphqlYoga.createPubSub(...e):graphqlYoga.createPubSub();return {pubsub:r,makePubSubInstance:({table:n})=>{function l({action:s,tableName:u,primaryKeyValue:a}){let c;switch(s){case "created":c=Be;break;case "removed":c=Se;break;case "updated":c=Ee;break;default:throw new Error(`Unknown action: ${s}`)}return `${Re}/${u}${a?`/${a}`:""}/${c}`}return {registerOnInstance({instance:s,action:u,primaryKeyValue:a}){let c=l({tableName:n.toString(),action:u,primaryKeyValue:a});s.register(c);},created(){let s=l({tableName:n.toString(),action:"created"});return r.publish(s)},removed(s){let u=l({tableName:n.toString(),action:"removed"});return r.publish(u)},updated(s){let a=(Array.isArray(s)?s:[s]).map(i=>l({tableName:n.toString(),action:"updated",primaryKeyValue:i})),c=Array.from(new Set(a));for(let i of c)r.publish(i);}}}}};var V=e=>{if(!e)throw new w("Value not found but required (findFirst)");return e},Pe=e=>{let t=e.at(0);if(!t)throw new w("Value not found but required (firstEntry)");return t},se=async({filters:e,entities:t,context:r})=>(await Promise.all(e.map(m=>m({context:r,entities:t})))).reduce((m,n)=>(m.push(...n),m),[]);var ae=({db:e,schemaBuilder:t,argImplementer:r,makePubSubInstance:m})=>({table:n,readAction:l="read",listAction:s="read"})=>{let u=r({table:n}),{registerOnInstance:a}=m({table:n});return t.queryFields(c=>({[`findMany${A(n.toString())}`]:c.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(i,b,o,d,y)=>{a({instance:i,action:"created"}),a({instance:i,action:"removed"});},args:{where:c.arg({type:u,required:false})},resolve:(i,b,o,d,y)=>{let g=d.abilities[n].filter(s,o.where?{inject:{where:o.where}}:void 0).query.many,h=i(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:u,required:false})},resolve:(i,b,o,d,y)=>{let g=d.abilities[n].filter(l,o.where?{inject:{where:o.where}}:void 0).query.single,h=i(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,r){return async(m,n,l,s)=>{let u=(r?.type).type?.ref.currentConfig.pothosOptions[ve];if(!u||!Array.isArray(u)||u.length===0)return t(m,n,l,s);let a=await t(m,n,l,s),c=Array.isArray(a)?a:[a],i=Array.isArray(u)?u:[u],b=await se({filters:i,entities:c,context:l});return Array.isArray(a)?b:b[0]??null}}};Ie__default.default.registerPlugin(le,M);var pe=({db:e,disableDefaultObjects:t,pubsub:r,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(l){return {columns:Object.values(l[Symbol.for("drizzle:Columns")]),primaryKeys:Object.values(l[Symbol.for("drizzle:Columns")]).filter(s=>s.primary)}}},smartSubscriptions:{...ze.subscribeOptionsFromIterator((l,s)=>r.subscribe(l))}});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:r})=>{let m=new Map,n=({table:l,refName:s,dbName:u})=>{let a=I({db:e,dbName:u,tsName:l}),c=s??Qe(a.tsName),i=m.get(c);return i||(i=t.inputType(c,{fields:o=>{let d=(h,C)=>{let E=G({sqlType:h,fieldName:C});switch(E){case "Int":return o.int({required:false});case "String":return o.string({required:false});case "Boolean":return o.boolean({required:false});case "Date":return o.field({type:"Date",required:false});case "DateTime":return o.field({type:"DateTime",required:false});case "Float":return o.float({required:false});case "ID":return o.id({required:false});case "JSON":return o.field({type:"JSON",required:false});default:throw new D(`Unsupported argument type ${E} for column ${h}`)}},y=Object.entries(a.columns).reduce((h,[C,E])=>{if(k(E)){let P=r({enumColumn:E});h[C]=o.field({type:P,required:false});}else h[C]=d(E.getSQLType(),C);return h},{}),g=Object.entries(a.relations??{}).reduce((h,[C,E])=>{let P=I({db:e,table:E.targetTable}),x=n({dbName:P.dbName});return h[C]=o.field({type:x,required:false}),h},{});return {...y,...g}}}),m.set(c,i),i)};return n};var ke=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100);let t=ee(e),r=te({...e,abilityBuilder:t}),{makePubSubInstance:m,pubsub:n}=oe({...e}),{schemaBuilder:l}=pe({...e,pubsub:n}),s=ne({...e,schemaBuilder:l}),u=me({...e,schemaBuilder:l,enumImplementer:s}),a=re({...e,schemaBuilder:l,makePubSubInstance:m,argImplementer:u,enumImplementer:s,abilityBuilder:t}),c=ae({...e,schemaBuilder:l,argImplementer:u,makePubSubInstance:m});return {abilityBuilder:t,schemaBuilder:l,createYoga:b=>graphqlYoga.createYoga({...b,schema:l.toSchema(),context:r}),object:a,arg:u,query:c,pubsub:m,enum_:s}};exports.RumbleError=D;exports.RumbleErrorSafe=w;exports.assertFindFirstExists=V;exports.assertFirstEntryExists=Pe;exports.rumble=ke;//# sourceMappingURL=index.cjs.map
9
9
  //# sourceMappingURL=index.cjs.map