@m1212e/rumble 0.5.2 → 0.5.3
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 +4 -4
- package/index.cjs.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
import {createYoga,createPubSub}from'graphql-yoga';import {One,or,and,eq}from'drizzle-orm';import {toCamelCase}from'drizzle-orm/casing';import
|
1
|
+
import {createYoga,createPubSub}from'graphql-yoga';import {One,or,and,eq}from'drizzle-orm';import {toCamelCase}from'drizzle-orm/casing';import Te,{BasePlugin}from'@pothos/core';import De from'@pothos/plugin-drizzle';import Ee,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';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
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
|
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+=`
|
4
4
|
|
5
5
|
`+j(l.loc));else if(this.source&&this.locations)for(let l 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 L=(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 L(e,"Distinct")}function pe(e){return typeof e!="function"}function me(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 O=K(b.getSQLType());return {where:and(eq(b,O.value1),eq(b,O.value2))}};(!m||!x)&&(x=[C()]);let T=x.filter(pe),u=x.filter(me).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 I=g?[]:h.filter(b=>b!=="allow"&&b?.where).map(b=>b?.where),P=I.length>0?or(...I):void 0;return c?.inject?.where&&(P=P?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 F(e){let t=v(e);return t.enumValues!==void 0&&t.enumName!==void 0&&typeof t.enumName=="string"&&Array.isArray(t.enumValues)}function v(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(F).map(v).find(a=>a.enumName===i)),!r)throw new R(`Could not determine enum structure! (${String(n)}, ${enumValuesParam}, ${i})`);let s=d??`${E(toCamelCase(r.enumName.toString()))}Enum`,o=l.get(s);return o||(o=t.enumType(s,{values:r.enumValues}),l.set(s,o),o)}};function U(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 L(e,"SQL to GQL")}var ye="RUMBLE_SUBSCRIPTION_NOTIFICATION",de="REMOVED",fe="UPDATED",he="CREATED",H=({subscriptions:e,db:t})=>{let l=e?createPubSub(...e):createPubSub();return {pubsub:l,makePubSubInstance:({tableName:n})=>{function d({action:i,tableName:y,primaryKeyValue:r}){let s;switch(i){case "created":s=he;break;case "removed":s=de;break;case "updated":s=fe;break;default:throw new Error(`Unknown action: ${i}`)}return `${ye}/${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=U(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(F(u)){let g=v(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,I="many";return u instanceof One&&(S=!u.isNullable,I="single"),C[T]=a.relation(T,{args:{where:a.arg({type:g,required:false})},nullable:S,query:(P,b)=>b.abilities[u.referencedTableName].filter(r,{inject:{where:h(P.where)}})[I]}),C},{});return {...m,...x}}})};var w=e=>{if(!e)throw new A("Value not found but required (findFirst)");return e},be=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(w)}})}))};var te="ManualFiltersPlugin",ne=te,Ce="applyFilters",z=class extends BasePlugin{wrapResolve(t,l){return async(p,n,d,i)=>{let y=(l?.type).type?.ref.currentConfig.pothosOptions[Ce];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}}};xe.registerPlugin(te,z);var re=({db:e,disableDefaultObjects:t,pubsub:l,pothosConfig:p})=>{let n=new xe({plugins:[ne,Re,De,...p?.plugins??[]],...p,drizzle:{client:e},smartSubscriptions:{...subscribeOptionsFromIterator((d,i)=>l.subscribe(d))}});return n.addScalarType("JSON",JSONResolver),n.addScalarType("Date",DateResolver),n.addScalarType("DateTime",DateTimeISOResolver),t?.query||n.queryType({}),t?.subscription||n.subscriptionType({}),t?.mutation||n.mutationType({}),{schemaBuilder:n}};var Fe=e=>`${E(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??Fe(r.dbName),o=p.get(s);return o||(o={inputType:t.inputType(s,{fields:m=>{let x=u=>{let g=U(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(F(h)){let S=v(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 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 and(...T)}},p.set(s,o),o)};return n};var Ue=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=>createYoga({...f,schema:d.toSchema(),context:l}),object:r,arg:y,query:s,pubsub:p,enum_:i}};
|
8
|
-
export{R as RumbleError,A as RumbleErrorSafe,
|
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:and(eq(b,N.value1),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?or(...v):void 0;return c?.inject?.where&&(P=P?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(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?createPubSub(...e):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 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 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.registerPlugin(te,z);var re=({db:e,disableDefaultObjects:t,pubsub:l,pothosConfig:p})=>{let n=new Te({plugins:[ne,De,Ee,...p?.plugins??[]],...p,drizzle:{client:e},smartSubscriptions:{...subscribeOptionsFromIterator((d,i)=>l.subscribe(d))}});return n.addScalarType("JSON",JSONResolver),n.addScalarType("Date",DateResolver),n.addScalarType("DateTime",DateTimeISOResolver),t?.query||n.queryType({}),t?.subscription||n.subscriptionType({}),t?.mutation||n.mutationType({}),{schemaBuilder:n}};var Le=e=>`${E(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 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 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=>createYoga({...f,schema:d.toSchema(),context:l}),object:r,arg:y,query:s,pubsub:p,enum_:i}};
|
8
|
+
export{R as RumbleError,A as RumbleErrorSafe,O as assertFindFirstExists,xe as assertFirstEntryExists,we as rumble};//# sourceMappingURL=index.js.map
|
9
9
|
//# sourceMappingURL=index.js.map
|