@m1212e/rumble 0.5.3 → 0.5.5

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