@m1212e/rumble 0.6.3 → 0.6.4

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