@m1212e/rumble 0.11.1 → 0.11.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 CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var promises=require('fs/promises'),path=require('path'),esToolkit=require('es-toolkit'),wonka=require('wonka'),graphqlArmor=require('@escape.tech/graphql-armor'),pluginDisableIntrospection=require('@graphql-yoga/plugin-disable-introspection'),graphqlYoga=require('graphql-yoga'),sofaApi=require('sofa-api'),drizzleOrm=require('drizzle-orm'),casing=require('drizzle-orm/casing'),pgCore=require('drizzle-orm/pg-core'),pluralize=require('pluralize'),mysqlCore=require('drizzle-orm/mysql-core'),sqliteCore=require('drizzle-orm/sqlite-core'),kr=require('@pothos/core'),Vr=require('@pothos/plugin-drizzle'),Mr=require('@pothos/plugin-smart-subscriptions'),graphqlScalars=require('graphql-scalars');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var kr__default=/*#__PURE__*/_interopDefault(kr);var Vr__default=/*#__PURE__*/_interopDefault(Vr);var Mr__default=/*#__PURE__*/_interopDefault(Mr);function et({apiUrl:e,rumbleImportPath:t,useExternalUrqlClient:n,availableSubscriptions:r}){let o=[],i="";return typeof n=="string"?o.push(`import { urqlClient } from "${n}";`):(o.push("import { Client, fetchExchange } from '@urql/core';"),o.push("import { cacheExchange } from '@urql/exchange-graphcache';")),o.push(`import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${t}';`),n||(i+=`
1
+ 'use strict';var promises=require('fs/promises'),path=require('path'),esToolkit=require('es-toolkit'),wonka=require('wonka'),graphqlArmor=require('@escape.tech/graphql-armor'),pluginDisableIntrospection=require('@graphql-yoga/plugin-disable-introspection'),graphqlYoga=require('graphql-yoga'),sofaApi=require('sofa-api'),drizzleOrm=require('drizzle-orm'),casing=require('drizzle-orm/casing'),pgCore=require('drizzle-orm/pg-core'),pluralize=require('pluralize'),mysqlCore=require('drizzle-orm/mysql-core'),sqliteCore=require('drizzle-orm/sqlite-core'),zr=require('@pothos/core'),Wr=require('@pothos/plugin-drizzle'),Jr=require('@pothos/plugin-smart-subscriptions'),graphqlScalars=require('graphql-scalars');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var zr__default=/*#__PURE__*/_interopDefault(zr);var Wr__default=/*#__PURE__*/_interopDefault(Wr);var Jr__default=/*#__PURE__*/_interopDefault(Jr);function et({apiUrl:e,rumbleImportPath:t,useExternalUrqlClient:n,availableSubscriptions:r}){let o=[],i="";return typeof n=="string"?o.push(`import { urqlClient } from "${n}";`):(o.push("import { Client, fetchExchange } from '@urql/core';"),o.push("import { cacheExchange } from '@urql/exchange-graphcache';")),o.push(`import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${t}';`),n||(i+=`
2
2
  const urqlClient = new Client({
3
3
  url: "${e??"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT"}",
4
4
  fetchSubscriptions: true,
@@ -93,13 +93,19 @@ spurious results.`)}}return false};function pt(e,t){let[n,r]=t?[e,t]:[void 0,e]
93
93
  }`}function Hn(e,t){let n=false,r=false;for(let l=0;l<3;l++)e instanceof M&&(r=true,e=e.ofType),e instanceof U&&(n=true,e=e.ofType);let o=e.name;r&&(o+="[]"),n||(o+=" | null");let i=e instanceof J,s=new Map;for(let l of t??[])s.set(l.name,Zn(l.type));if(i){let l=s.entries().every(([,p])=>p.includes("| undefined"));return `(${(t??[]).length>0?`p${l?"?":""}: {
94
94
  ${s.entries().map(([p,a])=>` ${p}${a.includes("| undefined")?"?":""}: ${a}`).toArray().join(`,
95
95
  `)}
96
- }`:""}) => ${o}`}else return o}function Xn(e){let t=false,n=false;for(let o=0;o<3;o++)e instanceof M&&(n=true,e=e.ofType),e instanceof U&&(t=true,e=e.ofType);let r=e.name;return n&&(r+="[]"),t?n&&(r+=" | undefined"):r+=" | null | undefined",r}function Zn(e){let t="unknown",n=true;return e instanceof U&&(n=false,e=e.ofType),(e instanceof K||e instanceof W)&&(t=e.name),n&&(t+=" | null | undefined"),t}function er(e){switch(e.name){case "ID":return "string";case "String":return "string";case "Boolean":return "boolean";case "Int":return "number";case "Float":return "number";case "Date":return "Date";case "DateTime":return "Date";case "JSON":return "any";default:return "unknown"}}function tr(e){return e.getValues().map(t=>`"${t.name}"`).join(" | ")}async function Me({outputPath:e,schema:t,rumbleImportPath:n="@m1212e/rumble",apiUrl:r,useExternalUrqlClient:o=false}){await promises.exists(e)&&await promises.rm(e,{recursive:true,force:true}),await promises.mkdir(e,{recursive:true}),e.endsWith("/")||(e+="/");let i=[],s="",l=new Map;for(let[p,a]of Object.entries(t.getTypeMap()))p.startsWith("__")||l.set(p,a);for(let[p,a]of l.entries())Ve(a)!==p&&(s+=`
96
+ }`:""}) => ${o}`}else return o}function Xn(e){let t=false,n=false;for(let o=0;o<3;o++)e instanceof M&&(n=true,e=e.ofType),e instanceof U&&(t=true,e=e.ofType);let r=e.name;return n&&(r+="[]"),t?n&&(r+=" | undefined"):r+=" | null | undefined",r}function Zn(e){let t="unknown",n=true;return e instanceof U&&(n=false,e=e.ofType),(e instanceof K||e instanceof W)&&(t=e.name),n&&(t+=" | null | undefined"),t}function er(e){switch(e.name){case "ID":return "string";case "String":return "string";case "Boolean":return "boolean";case "Int":return "number";case "Float":return "number";case "Date":return "Date";case "DateTime":return "Date";case "JSON":return "any";default:return "unknown"}}function tr(e){return e.getValues().map(t=>`"${t.name}"`).join(" | ")}async function Me({outputPath:e,schema:t,rumbleImportPath:n="@m1212e/rumble",apiUrl:r,useExternalUrqlClient:o=false}){try{await promises.access(e),await promises.rm(e,{recursive:!0,force:!0});}catch{}await promises.mkdir(e,{recursive:true}),e.endsWith("/")||(e+="/");let i=[],s="",l=new Map;for(let[p,a]of Object.entries(t.getTypeMap()))p.startsWith("__")||l.set(p,a);for(let[p,a]of l.entries())Ve(a)!==p&&(s+=`
97
97
  export type ${p} = ${Ve(a)};
98
98
  `);let u=et({apiUrl:r,useExternalUrqlClient:o,rumbleImportPath:n,availableSubscriptions:new Set(Object.keys(t.getSubscriptionType()?.getFields()||{}))});i.push(...u.imports),s+=u.code,await promises.writeFile(path.join(e,"client.ts"),`${i.join(`
99
99
  `)}
100
100
  ${s}`);}var ee="__args";function De({queryName:e,input:t,client:n,enableSubscription:r=false}){let o=`${esToolkit.capitalize(e)}Query`,i=Ne(t[ee]??{}),s=a=>`${a} ${o} { ${e}${i} { ${ue(t)} }}`,l,u=wonka.pipe(wonka.merge([n.query(s("query"),{}),r?n.subscription(s("subscription"),{}):wonka.empty]),wonka.map(a=>{let m=a.data?.[e];if(!m&&a.error)throw a.error;return m}),wonka.onPush(a=>{l&&Object.assign(l,a);})),p=new Promise(a=>{let m=wonka.toObservable(u).subscribe(c=>{m();let x=wonka.pipe(wonka.merge([u,wonka.fromValue(c)]),wonka.toObservable);l={...c,...x},a(l);}).unsubscribe;});return Object.assign(p,wonka.toObservable(u)),p}function Nt({mutationName:e,input:t,client:n}){let r=`${esToolkit.capitalize(e)}Mutation`,o=Ne(t[ee]??{}),i=wonka.pipe(n.mutation(`mutation ${r} { ${e}${o} { ${ue(t)} }}`,{}),wonka.map(u=>{let p=u.data?.[e];if(!p&&u.error)throw u.error;return p})),s=wonka.toObservable(i),l=wonka.toPromise(i).then(u=>(Object.assign(u,s),u));return Object.assign(l,s),l}function Et({subscriptionName:e,input:t,client:n}){let r=`${esToolkit.capitalize(e)}Subscription`,o=Ne(t[ee]??{});return wonka.pipe(n.subscription(`subscription ${r} { ${e}${o} { ${ue(t)} }}`,{}),wonka.map(i=>{let s=i.data?.[e];if(!s&&i.error)throw i.error;return s}),wonka.toObservable)}function ue(e){return Object.entries(e).filter(([t])=>t!==ee).reduce((t,[n,r])=>{if(typeof r=="object"){if(r[ee]){let o=Ne(r[ee]);return t+=`${n}${o} { ${ue(r)} }
101
101
  `,t}t+=`${n} { ${ue(r)} }
102
102
  `;}else t+=`${n}
103
- `;return t},"")}function Ne(e){let t=Object.entries(e);return t.length===0?"":`(${t.map(([n,r])=>`${n}: ${At(r)}`).join(", ")})`}function At(e){switch(typeof e){case "string":return `"${e}"`;case "number":return `${e}`;case "bigint":return `${e}`;case "boolean":return `${e}`;case "symbol":throw new Error("Cannot stringify a symbol to send as gql arg");case "undefined":return "null";case "object":return `{ ${Object.entries(e).map(([t,n])=>`${t}: ${At(n)}`).join(", ")} }`;case "function":throw new Error("Cannot stringify a function to send as gql arg")}}function cr({urqlClient:e,availableSubscriptions:t}){return new Proxy({},{get:(n,r)=>o=>De({queryName:r,input:o,client:e,enableSubscription:t.has(r)})})}function mr({urqlClient:e}){return new Proxy({},{get:(t,n)=>r=>Nt({mutationName:n,input:r,client:e})})}function fr({urqlClient:e}){return new Proxy({},{get:(t,n)=>r=>De({queryName:n,input:r,client:e,enableSubscription:false})})}function dr({urqlClient:e}){return new Proxy({},{get:(t,n)=>r=>Et({subscriptionName:n,input:r,client:e})})}var O=class extends Error{constructor(t){super(t),this.name="RumbleError";}},te=class extends L{};var Ke=e=>{if(!e)throw new te("Value not found but required (findFirst)");return e},yr=e=>{let t=e.at(0);if(!t)throw new te("Value not found but required (firstEntry)");return t},Ct=async({filters:e,entities:t,context:n})=>(await Promise.all(e.map(r=>r({context:n,entities:t})))).reduce((r,o)=>(r.push(...o),r),[]);function hr(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n===null?void 0:n]))}function G(e){let t,n=false;return ()=>(n||(t=e(),n=true),t)}var Ee=(e,t)=>new O(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function It(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 Ee(e,"Distinct")}var Ye=Symbol.for("drizzle:Name"),Rt=Symbol.for("drizzle:Columns");function _({dbName:e,tsName:t,table:n,db:r}){let o=n;if(t&&(o=r._.relations.schema[t]),e&&(o=Object.values(r._.relations.schema).find(i=>i[Ye]===e)),!o)throw new O(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:n?.[Ye]}).toString()}`);return {tableSchema:o,columns:o[Rt],get primaryColumns(){return Object.entries(o[Rt]).filter(([,i])=>i.primary).reduce((i,[s,l])=>(i[s]=l,i),{})},relations:r._.relations.config[t],dbName:o[Ye],get tsName(){return Object.entries(r._.relations.schema).find(([,i])=>i===o).at(0)}}}function gr(e){return typeof e!="function"}function Tr(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var vt=({db:e,actions:t,defaultLimit:n})=>{let r={},o={},i={},s=l=>{for(let u of t)i[l]||(i[l]={}),i[l][u]||(i[l][u]=[]);return {allow:u=>{let p=o[l];p||(p={},o[l]=p);let a=Array.isArray(u)?u:[u];for(let m of a){let c=p[m];c||(c="unspecified",p[m]=c);}return {when:m=>{for(let c of a)p[c]==="unspecified"&&(p[c]=[]),p[c].push(m);}}},filter:u=>{let p=Array.isArray(u)?u:[u];return {by:a=>{for(let m of p)i[l][m].push(a);}}}}};for(let l of Object.keys(e.query))r[l]=s(l);return {...r,z_registeredQueryFilters:o,z_registeredFilters:i,z_buildWithUserContext:l=>{let u={},p=a=>({filter:(m,c)=>{let x=d=>{let A=G(()=>{if(!(!d?.where&&!c?.inject?.where)){if(c?.inject?.where&&d?.where)return {AND:[d?.where,c?.inject?.where]};if(c?.inject?.where&&!d?.where)return c?.inject?.where;if(!c?.inject?.where&&d?.where)return d?.where;!c?.inject?.where&&d?.where;}}),v=G(()=>{let w=A();if(!w)return;let pe=_({tsName:a,db:e});return drizzleOrm.relationsFilterToSQL(pe.tableSchema,w)}),Y=G(()=>{let w=d?.limit??n;return c?.inject?.limit&&(!w||w>c.inject.limit)&&(w=c.inject.limit),d?.limit&&(!w||d.limit>w)&&(w=d.limit),w??void 0}),H=G(()=>{if(!(!d?.columns&&!c?.inject?.columns))return {...d?.columns,...c?.inject?.columns}}),$={query:{single:{get where(){return A()},columns:H()},many:{get where(){return A()},columns:H(),get limit(){return Y()}}},sql:{get where(){return v()},columns:H(),get limit(){return Y()}}};return H()||(delete $.sql.columns,delete $.query.many.columns,delete $.query.single.columns),$},h=()=>{let d=_({db:e,tsName:a});if(Object.keys(d.primaryColumns).length===0)throw new O(`No primary key found for entity ${a.toString()}`);let A=Object.values(d.primaryColumns)[0],v=It(A.getSQLType());return {where:{AND:[{[A.name]:v.value1},{[A.name]:v.value2}]}}},y=o?.[a]?.[m];if(y==="unspecified")return x();y||(y=[h()]);let T=y.filter(gr),N=y.filter(Tr).map(d=>d(l)),g=N.some(d=>d==="allow"),D=[...T,...N].filter(d=>d!==void 0).filter(d=>d!=="allow");!g&&D.length===0&&(D=[h()]);let R;for(let d of D)d?.limit&&(R===void 0||d.limit>R)&&(R=d.limit);let I;for(let d of [...D,c?.inject])d?.columns&&(I===void 0?I=d.columns:I={...I,...d.columns});let E=g?[]:D.filter(d=>d?.where).map(d=>d.where),b=E.length>0?{OR:E}:void 0;return x({where:b,columns:I,limit:R})},runtimeFilters:m=>i[a][m]});for(let a of Object.keys(e.query))u[a]=p(a);return u}}};var Ot=({builtSchema:e})=>(process.env.NODE_ENV!=="development"&&console.warn("Running rumble client generation in non development mode. Are you sure this is correct?"),async({apiUrl:n,outputPath:r,rumbleImportPath:o,useExternalUrqlClient:i})=>{let s=e();await Me({schema:s,outputPath:r,rumbleImportPath:o,apiUrl:n,useExternalUrqlClient:i});});var Lt=({context:e,abilityBuilder:t})=>async n=>{let r=e?await e(n):{};return {...r,abilities:t.z_buildWithUserContext(r)}};function Ae(e){return e instanceof pgCore.PgEnumColumn}var Bt=({db:e,schemaBuilder:t})=>{let n=new Map;return ({tsName:o,enumColumn:i,refName:s})=>{let l,u;if(o){let c=e._.relations.schema[o];l=o.toString();let x=Object.values(e._.relations.schema).filter(h=>typeof h=="object").map(h=>Object.values(h[Symbol.for("drizzle:Columns")])).flat(2).find(h=>h.config?.enum===c);if(!x)throw new O(`Could not find applied enum column for ${o.toString()}.
104
- Please ensure that you use the enum at least once as a column of a table!`);u=x.enumValues;}else if(i){let c=Object.entries(e._.relations.schema).find(([,x])=>x===i.config.enum);if(!c)throw new O(`Could not find enum in schema for ${i.name}!`);l=c[0],u=i.enumValues;}if(!l||!u)throw new O("Could not determine enum structure!");let p=s??`${esToolkit.capitalize(casing.toCamelCase(l))}Enum`,a=n.get(p);return a||(a=t.enumType(p,{values:u}),n.set(p,a),a)}};var wt={paths:{"/webhook":{post:{operationId:"webhook_create",description:"Creates a webhook subscription.",tags:[],parameters:[],requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookCreateBody"}}}},responses:{200:{description:"",content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookDetailResponse"}}}}}}},"/webhook/{id}":{post:{operationId:"webhook_update",description:"Updates a webhook subscription.",parameters:[{name:"id",in:"path",description:"The ID of the webhook to update",required:true,schema:{type:"string"}}],requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookCreateBody"}}}},responses:{200:{description:"",content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookDetailResponse"}}}}}},delete:{operationId:"webhook_delete",description:"Removes a webhook subscription.",tags:[],parameters:[{name:"id",in:"path",description:"The ID of the webhook to delete",required:true,schema:{type:"string"}}],responses:{200:{description:"",content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookDetailResponse"}}}}}}}},components:{schemas:{WebhookCreateBody:{type:"object",properties:{subscription:{description:"The subscription to subscribe to. In many cases, these match the available query IDs without the '_query' suffix. E.g., 'findFirstUser_query' -> 'findFirstUser'. See the graphql schema for more details on what subscriptions are available.",type:"string"},variables:{description:"The variables to pass to the subscription.",type:"object"},url:{description:"The URL to send the webhook to.",type:"string"}}},WebhookDetailResponse:{type:"object",properties:{id:{description:"The ID of the webhook. Can be used as reference in update or delete calls.",type:"string"}}},DateTime:{type:"string",format:"date-time"},Date:{type:"string",format:"date"}}}};function Ce({sqlType:e,fieldName:t}){let n;if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e)&&(n="Int"),["real","decimal","double","float"].includes(e)&&(n="Float"),["string","text","varchar","char","text(256)"].includes(e)&&(t&&(t.toLowerCase().endsWith("_id")||t.toLowerCase().endsWith("id"))?n="ID":n="String"),["uuid"].includes(e)&&(n="ID"),["boolean"].includes(e)&&(n="Boolean"),["timestamp","datetime"].includes(e)&&(n="DateTime"),["date"].includes(e)&&(n="Date"),["json"].includes(e)&&(n="JSON"),n!==void 0)return n;throw Ee(e,"SQL to GQL")}function Cr(e){let t=new Set;for(let r of Object.values(e))typeof r=="object"&&(r instanceof pgCore.PgTable?t.add("postgres"):r instanceof mysqlCore.MySqlTable?t.add("mysql"):r instanceof sqliteCore.SQLiteTable&&t.add("sqlite"));let n=Array.from(t);if(n.length===1)return n[0];throw n.length===0?new Error("No tables found in schema, could not determine dialect"):new Error(`Multiple dialects found in schema: ${n.join(", ")}`)}function Pt(e){return Cr(e._.relations.schema)==="postgres"}async function jt(e){if(!Pt(e)){console.info("Database dialect is not compatible with search, skipping search initialization.");return}await e.execute(drizzleOrm.sql`CREATE EXTENSION IF NOT EXISTS pg_trgm;`);}function Ie({search:e,args:t,tableSchema:n,abilities:r}){if(e?.enabled&&t.search&&t.search.length>0){let o=esToolkit.cloneDeep(t.orderBy);t.orderBy=s=>{let l=drizzleOrm.sql.join(Object.entries(o??{}).map(([m,c])=>{if(c==="asc")return drizzleOrm.sql`${s[m]} ASC`;if(c==="desc")return drizzleOrm.sql`${s[m]} DESC`;throw new Error(`Invalid value ${c} for orderBy`)}),drizzleOrm.sql.raw(", ")),u=r.query.many.columns?Object.entries(n.columns).filter(([m])=>r.query.many.columns[m]):Object.entries(n.columns),p=drizzleOrm.sql`GREATEST(${drizzleOrm.sql.join(u.map(([m])=>drizzleOrm.sql`similarity(${s[m]}::TEXT, ${t.search})`),drizzleOrm.sql.raw(", "))}) DESC`;return o?drizzleOrm.sql.join([l,p],drizzleOrm.sql.raw(", ")):p};let i=esToolkit.cloneDeep(t.where);t.where={AND:[i??{},{RAW:s=>drizzleOrm.sql`GREATEST(${drizzleOrm.sql.join(Object.entries(n.columns).map(([l])=>drizzleOrm.sql`similarity(${s[l]}::TEXT, ${t.search})`),drizzleOrm.sql.raw(", "))}) > ${e.threshold??.1}`}]};}}var Lr=e=>typeof e!="object"?false:!!Object.keys(e).some(t=>["args","nullable","query","subscribe","description","type","resolve"].find(n=>n===t)),_t=({db:e,search:t,schemaBuilder:n,makePubSubInstance:r,whereArgImplementer:o,orderArgImplementer:i,enumImplementer:s,abilityBuilder:l})=>({table:u,refName:p,readAction:a="read",adjust:m})=>{let c=_({db:e,tsName:u});Object.keys(c.primaryColumns).length===0&&console.warn(`Could not find primary key for ${u.toString()}. Cannot register subscriptions!`);let x=Object.values(c.primaryColumns)[0],{registerOnInstance:h}=r({table:u});return n.drizzleObject(u,{name:p??esToolkit.capitalize(u.toString()),subscribe:(y,T,N)=>{if(!x)return;let g=T[x.name];if(!g){console.warn(`Could not find primary key value for ${JSON.stringify(T)}. Cannot register subscription!`);return}h({instance:y,action:"updated",primaryKeyValue:g});},applyFilters:l?.z_registeredFilters?.[u]?.[a],fields:y=>{let T=c.columns,N=(E,b,d)=>{let A=Ce({sqlType:E,fieldName:b});switch(A){case "Int":return y.exposeInt(b,{nullable:d});case "String":return y.exposeString(b,{nullable:d});case "Boolean":return y.exposeBoolean(b,{nullable:d});case "Date":return y.field({type:"Date",resolve:v=>v[b],nullable:d});case "DateTime":return y.field({type:"DateTime",resolve:v=>v[b],nullable:d});case "Float":return y.exposeFloat(b,{nullable:d});case "ID":return y.exposeID(b,{nullable:d});case "JSON":return y.field({type:"JSON",resolve:v=>v[b],nullable:d});default:throw new O(`Unsupported object type ${A} for column ${b}`)}},g=new Map,D=m?.(new Proxy(y,{get:(E,b)=>typeof E[b]!="function"||b==="arg"||b==="builder"||b==="graphqlKind"||b==="kind"||b==="listRef"||b==="table"||b==="typename"||b==="variant"||b.toString().startsWith("boolean")||b.toString().startsWith("float")||b.toString().startsWith("id")||b.toString().startsWith("int")||b.toString().startsWith("string")||b.toString().startsWith("expose")?E[b]:(...d)=>{let A=E[b](...d),v=d.find(Lr);if(!v)throw new O("Expected config object to be passed to adjust field");return g.set(A,{params:d,creatorFunction:E[b],configObject:v}),A}}))??{},R=Object.entries(T).reduce((E,[b,d])=>{if(D[b]){let{params:A,creatorFunction:v,configObject:Y}=g.get(D[b]);return typeof Y.nullable!="boolean"&&(Y.nullable=!d.notNull),D[b]=v.bind(y)(...A),E}if(Ae(d)){let A=s({enumColumn:d});E[b]=y.field({type:A,resolve:v=>v[b],nullable:!d.notNull});}else E[b]=N(d.getSQLType(),b,!d.notNull);return E},{}),I=Object.entries(c.relations??{}).reduce((E,[b,d])=>{let A=_({db:e,table:d.targetTable}),v=o({dbName:A.dbName}),Y=i({dbName:A.dbName}),H=r({table:A.tsName}),$=false,w=true,pe="many";d instanceof drizzleOrm.One&&(w=false,$=d.optional,pe="single");let Xe=(j,ne)=>{H.registerOnInstance({instance:j,action:"created"}),H.registerOnInstance({instance:j,action:"removed"});};if(D[b]){let{params:j,creatorFunction:ne,configObject:V}=g.get(D[b]);return typeof V.nullable!="boolean"&&(V.nullable=$),typeof V.subscribe!="function"&&(V.subscribe=Xe),D[b]=ne.bind(y)(...j),E}let Ze={where:y.arg({type:v,required:false}),orderBy:y.arg({type:Y,required:false}),...w?{offset:y.arg.int({required:false}),limit:y.arg.int({required:false})}:{},search:y.arg.string({required:false})};return (!t?.enabled||!w)&&delete Ze.search,E[b]=y.relation(b,{args:Ze,subscribe:Xe,nullable:$,description:`Get the ${pluralize.plural(A.tsName)} related to this ${pluralize.singular(c.tsName)}`,query:(j,ne)=>{j=JSON.parse(JSON.stringify(j)),w&&Ie({search:t,args:j,tableSchema:A,abilities:ne.abilities[A.tsName].filter(a)});let V=ne.abilities[A.tsName].filter(a,{inject:{where:j.where,limit:j.limit}}).query[pe];return j.offset&&(V.offset=j.offset),j.orderBy&&(V.orderBy=j.orderBy),V}}),E},{});return {...R,...I,...D}}})};var Pr=e=>`${esToolkit.capitalize(casing.toCamelCase(e.toString()))}OrderInputArgument`,Qt=({db:e,schemaBuilder:t})=>{let n=new Map,r=G(()=>t.enumType("SortingParameter",{values:["asc","desc"]})),o=({table:i,refName:s,dbName:l})=>{let u=_({db:e,dbName:l,tsName:i}),p=s??Pr(u.tsName),a=n.get(p);return a||(a=t.inputType(p,{fields:c=>{let x=Object.entries(u.columns).reduce((y,[T])=>(y[T]=c.field({type:r(),required:false}),y),{}),h=Object.entries(u.relations??{}).reduce((y,[T,N])=>{let g=_({db:e,table:N.targetTable}),D=o({dbName:g.dbName});return y[T]=c.field({type:D,required:false}),y},{});return {...x,...h}}}),n.set(p,a),a)};return o};var Fr="RUMBLE_SUBSCRIPTION_NOTIFICATION",jr="REMOVED",_r="UPDATED",Qr="CREATED",qt=({subscriptions:e})=>{let t=e?graphqlYoga.createPubSub(...e):graphqlYoga.createPubSub();return {pubsub:t,makePubSubInstance:({table:r})=>{function o({action:i,tableName:s,primaryKeyValue:l}){let u;switch(i){case "created":u=Qr;break;case "removed":u=jr;break;case "updated":u=_r;break;default:throw new Error(`Unknown action: ${i}`)}return `${Fr}/${s}${l?`/${l}`:""}/${u}`}return {registerOnInstance({instance:i,action:s,primaryKeyValue:l}){let u=o({tableName:r.toString(),action:s,primaryKeyValue:l});i.register(u);},created(){let i=o({tableName:r.toString(),action:"created"});return t.publish(i)},removed(){let i=o({tableName:r.toString(),action:"removed"});return t.publish(i)},updated(i){let l=(Array.isArray(i)?i:[i]).map(p=>o({tableName:r.toString(),action:"updated",primaryKeyValue:p})),u=Array.from(new Set(l));for(let p of u)t.publish(p);}}}}};var Gt=({db:e,schemaBuilder:t,search:n,whereArgImplementer:r,orderArgImplementer:o,makePubSubInstance:i})=>({table:s,readAction:l="read",listAction:u="read"})=>{let p=r({table:s}),a=o({table:s}),m=_({db:e,tsName:s}),c=Object.values(m.primaryColumns)[0],{registerOnInstance:x}=i({table:s});return t.queryFields(h=>{let y={where:h.arg({type:p,required:false}),orderBy:h.arg({type:a,required:false}),limit:h.arg.int({required:false}),offset:h.arg.int({required:false}),search:h.arg.string({required:false})};return n?.enabled||delete y.search,{[pluralize.plural(s.toString())]:h.drizzleField({type:[s],nullable:false,smartSubscription:true,description:`List all ${pluralize.plural(s.toString())}`,subscribe:(T,N,g,D,R)=>{x({instance:T,action:"created"}),x({instance:T,action:"removed"});},args:y,resolve:(T,N,g,D,R)=>{g=JSON.parse(JSON.stringify(g)),Ie({search:n,args:g,tableSchema:m,abilities:D.abilities[s].filter(u)});let I=D.abilities[s].filter(u,g.where||g.limit||g.offset?{inject:{where:g.where,limit:g.limit}}:void 0).query.many;g.offset&&(I.offset=g.offset),g.orderBy&&(I.orderBy=g.orderBy);let E=T(I);return I.columns&&(E.columns=I.columns),e.query[s].findMany(E)}}),[pluralize.singular(s.toString())]:h.drizzleField({type:s,nullable:false,smartSubscription:true,description:`Get a single ${pluralize.singular(s.toString())} by ID`,args:{id:h.arg.id({required:true})},resolve:(T,N,g,D,R)=>{g=JSON.parse(JSON.stringify(g));let I=D.abilities[s].filter(l,{inject:{where:{[c.name]:g.id}}}).query.single,E=T(I);return I.columns&&(E.columns=I.columns),e.query[s].findFirst(E).then(Ke)}})}})};var Vt="ManualFiltersPlugin",Mt=Vt,$t="applyFilters",He=class extends kr.BasePlugin{wrapResolve(t,n){return async(r,o,i,s)=>{let l,u=n?.type;if(u.kind==="List"?l=u.type?.ref.currentConfig.pothosOptions[$t]:u.kind==="Object"&&(l=u.ref.currentConfig.pothosOptions[$t]),!l||!Array.isArray(l)||l.length===0)return t(r,o,i,s);let p=await t(r,o,i,s),a=Array.isArray(p)?p:[p],m=Array.isArray(l)?l:[l],c=await Ct({filters:m,entities:a,context:i});return Array.isArray(p)?c:c[0]??null}}};kr__default.default.registerPlugin(Vt,He);var Gr=e=>`${esToolkit.capitalize(casing.toCamelCase(e.toString()))}WhereInputArgument`,Wt=({db:e,schemaBuilder:t,enumImplementer:n})=>{let r=new Map,o=({table:i,refName:s,dbName:l})=>{let u=_({db:e,dbName:l,tsName:i}),p=s??Gr(u.tsName),a=r.get(p);return a||(a=t.inputType(p,{fields:c=>{let x=(T,N)=>{let g=Ce({sqlType:T,fieldName:N});switch(g){case "Int":return c.field({type:"IntWhereInputArgument"});case "String":return c.field({type:"StringWhereInputArgument"});case "Boolean":return c.boolean({required:false});case "Date":return c.field({type:"DateWhereInputArgument"});case "DateTime":return c.field({type:"DateWhereInputArgument"});case "Float":return c.field({type:"FloatWhereInputArgument"});case "ID":return c.id({required:false});case "JSON":return c.field({type:"JSON",required:false});default:throw new O(`Unsupported argument type ${g} for column ${T}`)}},h=Object.entries(u.columns).reduce((T,[N,g])=>{if(Ae(g)){let D=n({enumColumn:g});T[N]=c.field({type:D,required:false});}else T[N]=x(g.getSQLType(),N);return T},{}),y=Object.entries(u.relations??{}).reduce((T,[N,g])=>{let D=_({db:e,table:g.targetTable}),R=o({dbName:D.dbName});return T[N]=c.field({type:R,required:false}),T},{});return {...h,...y}}}),r.set(p,a),a)};return o};function Jt(e){let t=e.inputRef("IntWhereInputArgument").implement({fields:i=>({eq:i.int(),ne:i.int(),gt:i.int(),gte:i.int(),lt:i.int(),lte:i.int(),in:i.intList(),notIn:i.intList(),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.intList(),arrayContained:i.intList(),arrayContains:i.intList(),AND:i.field({type:[t]}),OR:i.field({type:[t]}),NOT:i.field({type:t})})}),n=e.inputRef("FloatWhereInputArgument").implement({fields:i=>({eq:i.float(),ne:i.float(),gt:i.float(),gte:i.float(),lt:i.float(),lte:i.float(),in:i.floatList(),notIn:i.floatList(),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.floatList(),arrayContained:i.floatList(),arrayContains:i.floatList(),AND:i.field({type:[n]}),OR:i.field({type:[n]}),NOT:i.field({type:n})})}),r=e.inputRef("StringWhereInputArgument").implement({fields:i=>({eq:i.string(),ne:i.string(),gt:i.string(),gte:i.string(),lt:i.string(),lte:i.string(),in:i.stringList(),notIn:i.stringList(),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.stringList(),arrayContained:i.stringList(),arrayContains:i.stringList(),AND:i.field({type:[r]}),OR:i.field({type:[r]}),NOT:i.field({type:r})})}),o=e.inputRef("DateWhereInputArgument").implement({fields:i=>({eq:i.field({type:"Date"}),ne:i.field({type:"Date"}),gt:i.field({type:"Date"}),gte:i.field({type:"Date"}),lt:i.field({type:"Date"}),lte:i.field({type:"Date"}),in:i.field({type:["Date"]}),notIn:i.field({type:["Date"]}),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.field({type:["Date"]}),arrayContained:i.field({type:["Date"]}),arrayContains:i.field({type:["Date"]}),AND:i.field({type:[o]}),OR:i.field({type:[o]}),NOT:i.field({type:o})})});}var Kt=({db:e,disableDefaultObjects:t,pubsub:n,pothosConfig:r})=>{let o=new kr__default.default({...r,plugins:[Mt,Vr__default.default,Mr__default.default,...r?.plugins??[]],drizzle:{client:e,relations:e._.relations,getTableConfig(i){return {columns:Object.values(i[Symbol.for("drizzle:Columns")]),primaryKeys:Object.values(i[Symbol.for("drizzle:Columns")]).filter(s=>s.primary)}}},smartSubscriptions:{...Mr.subscribeOptionsFromIterator((i,s)=>n.subscribe(i))}});return o.addScalarType("JSON",graphqlScalars.JSONResolver),o.addScalarType("Date",graphqlScalars.DateResolver),o.addScalarType("DateTime",graphqlScalars.DateTimeISOResolver),Jt(o),t?.query||o.queryType({}),t?.subscription||o.subscriptionType({}),t?.mutation||o.mutationType({}),{schemaBuilder:o}};var ni=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100),e.search?.enabled&&jt(e.db);let t=vt(e),n=Lt({...e,abilityBuilder:t}),{makePubSubInstance:r,pubsub:o}=qt({...e}),{schemaBuilder:i}=Kt({...e,pubsub:o}),s=Bt({...e,schemaBuilder:i}),l=Wt({...e,schemaBuilder:i,enumImplementer:s}),u=Qt({...e,schemaBuilder:i}),p=_t({...e,schemaBuilder:i,makePubSubInstance:r,whereArgImplementer:l,orderArgImplementer:u,enumImplementer:s,abilityBuilder:t}),a=Gt({...e,schemaBuilder:i,whereArgImplementer:l,orderArgImplementer:u,makePubSubInstance:r}),m=G(()=>i.toSchema()),c=y=>{let T=y?.enableApiDocs??process?.env?.NODE_ENV==="development"??false;return graphqlYoga.createYoga({...y,graphiql:T,plugins:[...y?.plugins??[],...T?[]:[pluginDisableIntrospection.useDisableIntrospection(),graphqlArmor.EnvelopArmorPlugin()]].filter(Boolean),schema:m(),context:n})},x=y=>(y.openAPI&&esToolkit.merge(y.openAPI,wt),sofaApi.useSofa({...y,schema:m(),context:n})),h=Ot({...e,builtSchema:m});return {abilityBuilder:t,schemaBuilder:i,createYoga:c,createSofa:x,object:p,whereArg:l,orderArg:u,query:a,pubsub:r,enum_:s,clientCreator:h}};exports.RumbleError=O;exports.RumbleErrorSafe=te;exports.assertFindFirstExists=Ke;exports.assertFirstEntryExists=yr;exports.generateFromSchema=Me;exports.makeLiveQuery=cr;exports.makeMutation=mr;exports.makeQuery=fr;exports.makeSubscription=dr;exports.mapNullFieldsToUndefined=hr;exports.rumble=ni;//# sourceMappingURL=index.cjs.map
103
+ `;return t},"")}function Ne(e){let t=Object.entries(e);return t.length===0?"":`(${t.map(([n,r])=>`${n}: ${At(r)}`).join(", ")})`}function At(e){switch(typeof e){case "string":return `"${e}"`;case "number":return `${e}`;case "bigint":return `${e}`;case "boolean":return `${e}`;case "symbol":throw new Error("Cannot stringify a symbol to send as gql arg");case "undefined":return "null";case "object":return `{ ${Object.entries(e).map(([t,n])=>`${t}: ${At(n)}`).join(", ")} }`;case "function":throw new Error("Cannot stringify a function to send as gql arg")}}function cr({urqlClient:e,availableSubscriptions:t}){return new Proxy({},{get:(n,r)=>o=>De({queryName:r,input:o,client:e,enableSubscription:t.has(r)})})}function mr({urqlClient:e}){return new Proxy({},{get:(t,n)=>r=>Nt({mutationName:n,input:r,client:e})})}function fr({urqlClient:e}){return new Proxy({},{get:(t,n)=>r=>De({queryName:n,input:r,client:e,enableSubscription:false})})}function dr({urqlClient:e}){return new Proxy({},{get:(t,n)=>r=>Et({subscriptionName:n,input:r,client:e})})}var O=class extends Error{constructor(t){super(t),this.name="RumbleError";}},te=class extends L{};var Ke=e=>{if(!e)throw new te("Value not found but required (findFirst)");return e},yr=e=>{let t=e.at(0);if(!t)throw new te("Value not found but required (firstEntry)");return t},Ct=async({filters:e,entities:t,context:n})=>(await Promise.all(e.map(r=>r({context:n,entities:t})))).reduce((r,o)=>(r.push(...o),r),[]);function hr(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n===null?void 0:n]))}function G(e){let t,n=false;return ()=>(n||(t=e(),n=true),t)}var Ee=(e,t)=>new O(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function It(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 Ee(e,"Distinct")}var Ye=Symbol.for("drizzle:Name"),Rt=Symbol.for("drizzle:Columns");function _({dbName:e,tsName:t,table:n,db:r}){let o=n;if(t&&(o=r._.relations.schema[t]),e&&(o=Object.values(r._.relations.schema).find(i=>i[Ye]===e)),!o)throw new O(`Could not find schema for ${JSON.stringify({tsName:t,dbName:e,table:n?.[Ye]}).toString()}`);return {tableSchema:o,columns:o[Rt],get primaryColumns(){return Object.entries(o[Rt]).filter(([,i])=>i.primary).reduce((i,[s,l])=>(i[s]=l,i),{})},relations:r._.relations.config[t],dbName:o[Ye],get tsName(){return Object.entries(r._.relations.schema).find(([,i])=>i===o).at(0)}}}function Tr(e){return typeof e!="function"}function xr(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var Sr=esToolkit.debounce((e,t)=>{console.warn(`
104
+ Warning! No abilities have been registered for
105
+
106
+ ${e}/${t}
107
+
108
+ but has been accessed. This will block everything. If this is intended, you can ignore this warning. If not, please ensure that you register the ability in your ability builder.
109
+ `);},1e3),vt=({db:e,actions:t,defaultLimit:n})=>{let r={},o={},i={},s=l=>{for(let u of t)i[l]||(i[l]={}),i[l][u]||(i[l][u]=[]);return {allow:u=>{let p=o[l];p||(p={},o[l]=p);let a=Array.isArray(u)?u:[u];for(let m of a){let c=p[m];c||(c="unspecified",p[m]=c);}return {when:m=>{for(let c of a)p[c]==="unspecified"&&(p[c]=[]),p[c].push(m);}}},filter:u=>{let p=Array.isArray(u)?u:[u];return {by:a=>{for(let m of p)i[l][m].push(a);}}}}};for(let l of Object.keys(e.query))r[l]=s(l);return {...r,z_registeredQueryFilters:o,z_registeredFilters:i,z_buildWithUserContext:l=>{let u={},p=a=>({filter:(m,c)=>{let x=d=>{let A=G(()=>{if(!(!d?.where&&!c?.inject?.where)){if(c?.inject?.where&&d?.where)return {AND:[d?.where,c?.inject?.where]};if(c?.inject?.where&&!d?.where)return c?.inject?.where;if(!c?.inject?.where&&d?.where)return d?.where;!c?.inject?.where&&d?.where;}}),v=G(()=>{let w=A();if(!w)return;let pe=_({tsName:a,db:e});return drizzleOrm.relationsFilterToSQL(pe.tableSchema,w)}),Y=G(()=>{let w=d?.limit??n;return c?.inject?.limit&&(!w||w>c.inject.limit)&&(w=c.inject.limit),d?.limit&&(!w||d.limit>w)&&(w=d.limit),w??void 0}),H=G(()=>{if(!(!d?.columns&&!c?.inject?.columns))return {...d?.columns,...c?.inject?.columns}}),$={query:{single:{get where(){return A()},columns:H()},many:{get where(){return A()},columns:H(),get limit(){return Y()}}},sql:{get where(){return v()},columns:H(),get limit(){return Y()}}};return H()||(delete $.sql.columns,delete $.query.many.columns,delete $.query.single.columns),$},h=()=>{let d=_({db:e,tsName:a});if(Object.keys(d.primaryColumns).length===0)throw new O(`No primary key found for entity ${a.toString()}`);let A=Object.values(d.primaryColumns)[0],v=It(A.getSQLType());return {where:{AND:[{[A.name]:v.value1},{[A.name]:v.value2}]}}},y=o?.[a]?.[m];if(y==="unspecified")return x();y||(Sr(a.toString(),m),y=[h()]);let T=y.filter(Tr),N=y.filter(xr).map(d=>d(l)),g=N.some(d=>d==="allow"),D=[...T,...N].filter(d=>d!==void 0).filter(d=>d!=="allow");!g&&D.length===0&&(D=[h()]);let R;for(let d of D)d?.limit&&(R===void 0||d.limit>R)&&(R=d.limit);let I;for(let d of [...D,c?.inject])d?.columns&&(I===void 0?I=d.columns:I={...I,...d.columns});let E=g?[]:D.filter(d=>d?.where).map(d=>d.where),b=E.length>0?{OR:E}:void 0;return x({where:b,columns:I,limit:R})},runtimeFilters:m=>i[a][m]});for(let a of Object.keys(e.query))u[a]=p(a);return u}}};var Ot=({builtSchema:e})=>(process.env.NODE_ENV!=="development"&&console.warn("Running rumble client generation in non development mode. Are you sure this is correct?"),async({apiUrl:n,outputPath:r,rumbleImportPath:o,useExternalUrqlClient:i})=>{let s=e();await Me({schema:s,outputPath:r,rumbleImportPath:o,apiUrl:n,useExternalUrqlClient:i});});var Lt=({context:e,abilityBuilder:t})=>async n=>{let r=e?await e(n):{};return {...r,abilities:t.z_buildWithUserContext(r)}};function Ae(e){return e instanceof pgCore.PgEnumColumn}var Bt=({db:e,schemaBuilder:t})=>{let n=new Map;return ({tsName:o,enumColumn:i,refName:s})=>{let l,u;if(o){let c=e._.relations.schema[o];l=o.toString();let x=Object.values(e._.relations.schema).filter(h=>typeof h=="object").map(h=>Object.values(h[Symbol.for("drizzle:Columns")])).flat(2).find(h=>h.config?.enum===c);if(!x)throw new O(`Could not find applied enum column for ${o.toString()}.
110
+ Please ensure that you use the enum at least once as a column of a table!`);u=x.enumValues;}else if(i){let c=Object.entries(e._.relations.schema).find(([,x])=>x===i.config.enum);if(!c)throw new O(`Could not find enum in schema for ${i.name}!`);l=c[0],u=i.enumValues;}if(!l||!u)throw new O("Could not determine enum structure!");let p=s??`${esToolkit.capitalize(casing.toCamelCase(l))}Enum`,a=n.get(p);return a||(a=t.enumType(p,{values:u}),n.set(p,a),a)}};var wt={paths:{"/webhook":{post:{operationId:"webhook_create",description:"Creates a webhook subscription.",tags:[],parameters:[],requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookCreateBody"}}}},responses:{200:{description:"",content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookDetailResponse"}}}}}}},"/webhook/{id}":{post:{operationId:"webhook_update",description:"Updates a webhook subscription.",parameters:[{name:"id",in:"path",description:"The ID of the webhook to update",required:true,schema:{type:"string"}}],requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookCreateBody"}}}},responses:{200:{description:"",content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookDetailResponse"}}}}}},delete:{operationId:"webhook_delete",description:"Removes a webhook subscription.",tags:[],parameters:[{name:"id",in:"path",description:"The ID of the webhook to delete",required:true,schema:{type:"string"}}],responses:{200:{description:"",content:{"application/json":{schema:{$ref:"#/components/schemas/WebhookDetailResponse"}}}}}}}},components:{schemas:{WebhookCreateBody:{type:"object",properties:{subscription:{description:"The subscription to subscribe to. In many cases, these match the available query IDs without the '_query' suffix. E.g., 'findFirstUser_query' -> 'findFirstUser'. See the graphql schema for more details on what subscriptions are available.",type:"string"},variables:{description:"The variables to pass to the subscription.",type:"object"},url:{description:"The URL to send the webhook to.",type:"string"}}},WebhookDetailResponse:{type:"object",properties:{id:{description:"The ID of the webhook. Can be used as reference in update or delete calls.",type:"string"}}},DateTime:{type:"string",format:"date-time"},Date:{type:"string",format:"date"}}}};function Ce({sqlType:e,fieldName:t}){let n;if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e)&&(n="Int"),["real","decimal","double","float"].includes(e)&&(n="Float"),["string","text","varchar","char","text(256)"].includes(e)&&(t&&(t.toLowerCase().endsWith("_id")||t.toLowerCase().endsWith("id"))?n="ID":n="String"),["uuid"].includes(e)&&(n="ID"),["boolean"].includes(e)&&(n="Boolean"),["timestamp","datetime"].includes(e)&&(n="DateTime"),["date"].includes(e)&&(n="Date"),["json"].includes(e)&&(n="JSON"),n!==void 0)return n;throw Ee(e,"SQL to GQL")}function Rr(e){let t=new Set;for(let r of Object.values(e))typeof r=="object"&&(r instanceof pgCore.PgTable?t.add("postgres"):r instanceof mysqlCore.MySqlTable?t.add("mysql"):r instanceof sqliteCore.SQLiteTable&&t.add("sqlite"));let n=Array.from(t);if(n.length===1)return n[0];throw n.length===0?new Error("No tables found in schema, could not determine dialect"):new Error(`Multiple dialects found in schema: ${n.join(", ")}`)}function Pt(e){return Rr(e._.relations.schema)==="postgres"}async function jt(e){if(!Pt(e)){console.info("Database dialect is not compatible with search, skipping search initialization.");return}await e.execute(drizzleOrm.sql`CREATE EXTENSION IF NOT EXISTS pg_trgm;`);}function Ie({search:e,args:t,tableSchema:n,abilities:r}){if(e?.enabled&&t.search&&t.search.length>0){let o=esToolkit.cloneDeep(t.orderBy);t.orderBy=s=>{let l=drizzleOrm.sql.join(Object.entries(o??{}).map(([m,c])=>{if(c==="asc")return drizzleOrm.sql`${s[m]} ASC`;if(c==="desc")return drizzleOrm.sql`${s[m]} DESC`;throw new Error(`Invalid value ${c} for orderBy`)}),drizzleOrm.sql.raw(", ")),u=r.query.many.columns?Object.entries(n.columns).filter(([m])=>r.query.many.columns[m]):Object.entries(n.columns),p=drizzleOrm.sql`GREATEST(${drizzleOrm.sql.join(u.map(([m])=>drizzleOrm.sql`similarity(${s[m]}::TEXT, ${t.search})`),drizzleOrm.sql.raw(", "))}) DESC`;return o?drizzleOrm.sql.join([l,p],drizzleOrm.sql.raw(", ")):p};let i=esToolkit.cloneDeep(t.where);t.where={AND:[i??{},{RAW:s=>drizzleOrm.sql`GREATEST(${drizzleOrm.sql.join(Object.entries(n.columns).map(([l])=>drizzleOrm.sql`similarity(${s[l]}::TEXT, ${t.search})`),drizzleOrm.sql.raw(", "))}) > ${e.threshold??.1}`}]};}}var wr=e=>typeof e!="object"?false:!!Object.keys(e).some(t=>["args","nullable","query","subscribe","description","type","resolve"].find(n=>n===t)),_t=({db:e,search:t,schemaBuilder:n,makePubSubInstance:r,whereArgImplementer:o,orderArgImplementer:i,enumImplementer:s,abilityBuilder:l})=>({table:u,refName:p,readAction:a="read",adjust:m})=>{let c=_({db:e,tsName:u});Object.keys(c.primaryColumns).length===0&&console.warn(`Could not find primary key for ${u.toString()}. Cannot register subscriptions!`);let x=Object.values(c.primaryColumns)[0],{registerOnInstance:h}=r({table:u});return n.drizzleObject(u,{name:p??esToolkit.capitalize(u.toString()),subscribe:(y,T,N)=>{if(!x)return;let g=T[x.name];if(!g){console.warn(`Could not find primary key value for ${JSON.stringify(T)}. Cannot register subscription!`);return}h({instance:y,action:"updated",primaryKeyValue:g});},applyFilters:l?.z_registeredFilters?.[u]?.[a],fields:y=>{let T=c.columns,N=(E,b,d)=>{let A=Ce({sqlType:E,fieldName:b});switch(A){case "Int":return y.exposeInt(b,{nullable:d});case "String":return y.exposeString(b,{nullable:d});case "Boolean":return y.exposeBoolean(b,{nullable:d});case "Date":return y.field({type:"Date",resolve:v=>v[b],nullable:d});case "DateTime":return y.field({type:"DateTime",resolve:v=>v[b],nullable:d});case "Float":return y.exposeFloat(b,{nullable:d});case "ID":return y.exposeID(b,{nullable:d});case "JSON":return y.field({type:"JSON",resolve:v=>v[b],nullable:d});default:throw new O(`Unsupported object type ${A} for column ${b}`)}},g=new Map,D=m?.(new Proxy(y,{get:(E,b)=>typeof E[b]!="function"||b==="arg"||b==="builder"||b==="graphqlKind"||b==="kind"||b==="listRef"||b==="table"||b==="typename"||b==="variant"||b.toString().startsWith("boolean")||b.toString().startsWith("float")||b.toString().startsWith("id")||b.toString().startsWith("int")||b.toString().startsWith("string")||b.toString().startsWith("expose")?E[b]:(...d)=>{let A=E[b](...d),v=d.find(wr);if(!v)throw new O("Expected config object to be passed to adjust field");return g.set(A,{params:d,creatorFunction:E[b],configObject:v}),A}}))??{},R=Object.entries(T).reduce((E,[b,d])=>{if(D[b]){let{params:A,creatorFunction:v,configObject:Y}=g.get(D[b]);return typeof Y.nullable!="boolean"&&(Y.nullable=!d.notNull),D[b]=v.bind(y)(...A),E}if(Ae(d)){let A=s({enumColumn:d});E[b]=y.field({type:A,resolve:v=>v[b],nullable:!d.notNull});}else E[b]=N(d.getSQLType(),b,!d.notNull);return E},{}),I=Object.entries(c.relations??{}).reduce((E,[b,d])=>{let A=_({db:e,table:d.targetTable}),v=o({dbName:A.dbName}),Y=i({dbName:A.dbName}),H=r({table:A.tsName}),$=false,w=true,pe="many";d instanceof drizzleOrm.One&&(w=false,$=d.optional,pe="single");let Xe=(j,ne)=>{H.registerOnInstance({instance:j,action:"created"}),H.registerOnInstance({instance:j,action:"removed"});};if(D[b]){let{params:j,creatorFunction:ne,configObject:V}=g.get(D[b]);return typeof V.nullable!="boolean"&&(V.nullable=$),typeof V.subscribe!="function"&&(V.subscribe=Xe),D[b]=ne.bind(y)(...j),E}let Ze={where:y.arg({type:v,required:false}),orderBy:y.arg({type:Y,required:false}),...w?{offset:y.arg.int({required:false}),limit:y.arg.int({required:false})}:{},search:y.arg.string({required:false})};return (!t?.enabled||!w)&&delete Ze.search,E[b]=y.relation(b,{args:Ze,subscribe:Xe,nullable:$,description:`Get the ${pluralize.plural(A.tsName)} related to this ${pluralize.singular(c.tsName)}`,query:(j,ne)=>{j=JSON.parse(JSON.stringify(j)),w&&Ie({search:t,args:j,tableSchema:A,abilities:ne.abilities[A.tsName].filter(a)});let V=ne.abilities[A.tsName].filter(a,{inject:{where:j.where,limit:j.limit}}).query[pe];return j.offset&&(V.offset=j.offset),j.orderBy&&(V.orderBy=j.orderBy),V}}),E},{});return {...R,...I,...D}}})};var jr=e=>`${esToolkit.capitalize(casing.toCamelCase(e.toString()))}OrderInputArgument`,Qt=({db:e,schemaBuilder:t})=>{let n=new Map,r=G(()=>t.enumType("SortingParameter",{values:["asc","desc"]})),o=({table:i,refName:s,dbName:l})=>{let u=_({db:e,dbName:l,tsName:i}),p=s??jr(u.tsName),a=n.get(p);return a||(a=t.inputType(p,{fields:c=>{let x=Object.entries(u.columns).reduce((y,[T])=>(y[T]=c.field({type:r(),required:false}),y),{}),h=Object.entries(u.relations??{}).reduce((y,[T,N])=>{let g=_({db:e,table:N.targetTable}),D=o({dbName:g.dbName});return y[T]=c.field({type:D,required:false}),y},{});return {...x,...h}}}),n.set(p,a),a)};return o};var _r="RUMBLE_SUBSCRIPTION_NOTIFICATION",Qr="REMOVED",kr="UPDATED",qr="CREATED",qt=({subscriptions:e})=>{let t=e?graphqlYoga.createPubSub(...e):graphqlYoga.createPubSub();return {pubsub:t,makePubSubInstance:({table:r})=>{function o({action:i,tableName:s,primaryKeyValue:l}){let u;switch(i){case "created":u=qr;break;case "removed":u=Qr;break;case "updated":u=kr;break;default:throw new Error(`Unknown action: ${i}`)}return `${_r}/${s}${l?`/${l}`:""}/${u}`}return {registerOnInstance({instance:i,action:s,primaryKeyValue:l}){let u=o({tableName:r.toString(),action:s,primaryKeyValue:l});i.register(u);},created(){let i=o({tableName:r.toString(),action:"created"});return t.publish(i)},removed(){let i=o({tableName:r.toString(),action:"removed"});return t.publish(i)},updated(i){let l=(Array.isArray(i)?i:[i]).map(p=>o({tableName:r.toString(),action:"updated",primaryKeyValue:p})),u=Array.from(new Set(l));for(let p of u)t.publish(p);}}}}};var Gt=({db:e,schemaBuilder:t,search:n,whereArgImplementer:r,orderArgImplementer:o,makePubSubInstance:i})=>({table:s,readAction:l="read",listAction:u="read"})=>{let p=r({table:s}),a=o({table:s}),m=_({db:e,tsName:s}),c=Object.values(m.primaryColumns)[0],{registerOnInstance:x}=i({table:s});return t.queryFields(h=>{let y={where:h.arg({type:p,required:false}),orderBy:h.arg({type:a,required:false}),limit:h.arg.int({required:false}),offset:h.arg.int({required:false}),search:h.arg.string({required:false})};return n?.enabled||delete y.search,{[pluralize.plural(s.toString())]:h.drizzleField({type:[s],nullable:false,smartSubscription:true,description:`List all ${pluralize.plural(s.toString())}`,subscribe:(T,N,g,D,R)=>{x({instance:T,action:"created"}),x({instance:T,action:"removed"});},args:y,resolve:(T,N,g,D,R)=>{g=JSON.parse(JSON.stringify(g)),Ie({search:n,args:g,tableSchema:m,abilities:D.abilities[s].filter(u)});let I=D.abilities[s].filter(u,g.where||g.limit||g.offset?{inject:{where:g.where,limit:g.limit}}:void 0).query.many;g.offset&&(I.offset=g.offset),g.orderBy&&(I.orderBy=g.orderBy);let E=T(I);return I.columns&&(E.columns=I.columns),e.query[s].findMany(E)}}),[pluralize.singular(s.toString())]:h.drizzleField({type:s,nullable:false,smartSubscription:true,description:`Get a single ${pluralize.singular(s.toString())} by ID`,args:{id:h.arg.id({required:true})},resolve:(T,N,g,D,R)=>{g=JSON.parse(JSON.stringify(g));let I=D.abilities[s].filter(l,{inject:{where:{[c.name]:g.id}}}).query.single,E=T(I);return I.columns&&(E.columns=I.columns),e.query[s].findFirst(E).then(Ke)}})}})};var Vt="ManualFiltersPlugin",Mt=Vt,$t="applyFilters",He=class extends zr.BasePlugin{wrapResolve(t,n){return async(r,o,i,s)=>{let l,u=n?.type;if(u.kind==="List"?l=u.type?.ref.currentConfig.pothosOptions[$t]:u.kind==="Object"&&(l=u.ref.currentConfig.pothosOptions[$t]),!l||!Array.isArray(l)||l.length===0)return t(r,o,i,s);let p=await t(r,o,i,s),a=Array.isArray(p)?p:[p],m=Array.isArray(l)?l:[l],c=await Ct({filters:m,entities:a,context:i});return Array.isArray(p)?c:c[0]??null}}};zr__default.default.registerPlugin(Vt,He);var Vr=e=>`${esToolkit.capitalize(casing.toCamelCase(e.toString()))}WhereInputArgument`,Wt=({db:e,schemaBuilder:t,enumImplementer:n})=>{let r=new Map,o=({table:i,refName:s,dbName:l})=>{let u=_({db:e,dbName:l,tsName:i}),p=s??Vr(u.tsName),a=r.get(p);return a||(a=t.inputType(p,{fields:c=>{let x=(T,N)=>{let g=Ce({sqlType:T,fieldName:N});switch(g){case "Int":return c.field({type:"IntWhereInputArgument"});case "String":return c.field({type:"StringWhereInputArgument"});case "Boolean":return c.boolean({required:false});case "Date":return c.field({type:"DateWhereInputArgument"});case "DateTime":return c.field({type:"DateWhereInputArgument"});case "Float":return c.field({type:"FloatWhereInputArgument"});case "ID":return c.id({required:false});case "JSON":return c.field({type:"JSON",required:false});default:throw new O(`Unsupported argument type ${g} for column ${T}`)}},h=Object.entries(u.columns).reduce((T,[N,g])=>{if(Ae(g)){let D=n({enumColumn:g});T[N]=c.field({type:D,required:false});}else T[N]=x(g.getSQLType(),N);return T},{}),y=Object.entries(u.relations??{}).reduce((T,[N,g])=>{let D=_({db:e,table:g.targetTable}),R=o({dbName:D.dbName});return T[N]=c.field({type:R,required:false}),T},{});return {...h,...y}}}),r.set(p,a),a)};return o};function Jt(e){let t=e.inputRef("IntWhereInputArgument").implement({fields:i=>({eq:i.int(),ne:i.int(),gt:i.int(),gte:i.int(),lt:i.int(),lte:i.int(),in:i.intList(),notIn:i.intList(),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.intList(),arrayContained:i.intList(),arrayContains:i.intList(),AND:i.field({type:[t]}),OR:i.field({type:[t]}),NOT:i.field({type:t})})}),n=e.inputRef("FloatWhereInputArgument").implement({fields:i=>({eq:i.float(),ne:i.float(),gt:i.float(),gte:i.float(),lt:i.float(),lte:i.float(),in:i.floatList(),notIn:i.floatList(),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.floatList(),arrayContained:i.floatList(),arrayContains:i.floatList(),AND:i.field({type:[n]}),OR:i.field({type:[n]}),NOT:i.field({type:n})})}),r=e.inputRef("StringWhereInputArgument").implement({fields:i=>({eq:i.string(),ne:i.string(),gt:i.string(),gte:i.string(),lt:i.string(),lte:i.string(),in:i.stringList(),notIn:i.stringList(),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.stringList(),arrayContained:i.stringList(),arrayContains:i.stringList(),AND:i.field({type:[r]}),OR:i.field({type:[r]}),NOT:i.field({type:r})})}),o=e.inputRef("DateWhereInputArgument").implement({fields:i=>({eq:i.field({type:"Date"}),ne:i.field({type:"Date"}),gt:i.field({type:"Date"}),gte:i.field({type:"Date"}),lt:i.field({type:"Date"}),lte:i.field({type:"Date"}),in:i.field({type:["Date"]}),notIn:i.field({type:["Date"]}),like:i.string(),ilike:i.string(),notLike:i.string(),notIlike:i.string(),isNull:i.boolean(),isNotNull:i.boolean(),arrayOverlaps:i.field({type:["Date"]}),arrayContained:i.field({type:["Date"]}),arrayContains:i.field({type:["Date"]}),AND:i.field({type:[o]}),OR:i.field({type:[o]}),NOT:i.field({type:o})})});}var Kt=({db:e,disableDefaultObjects:t,pubsub:n,pothosConfig:r})=>{let o=new zr__default.default({...r,plugins:[Mt,Wr__default.default,Jr__default.default,...r?.plugins??[]],drizzle:{client:e,relations:e._.relations,getTableConfig(i){return {columns:Object.values(i[Symbol.for("drizzle:Columns")]),primaryKeys:Object.values(i[Symbol.for("drizzle:Columns")]).filter(s=>s.primary)}}},smartSubscriptions:{...Jr.subscribeOptionsFromIterator((i,s)=>n.subscribe(i))}});return o.addScalarType("JSON",graphqlScalars.JSONResolver),o.addScalarType("Date",graphqlScalars.DateResolver),o.addScalarType("DateTime",graphqlScalars.DateTimeISOResolver),Jt(o),t?.query||o.queryType({}),t?.subscription||o.subscriptionType({}),t?.mutation||o.mutationType({}),{schemaBuilder:o}};var ii=e=>{e.actions||(e.actions=["read","update","delete"]),e.defaultLimit===void 0&&(e.defaultLimit=100),e.search?.enabled&&jt(e.db);let t=vt(e),n=Lt({...e,abilityBuilder:t}),{makePubSubInstance:r,pubsub:o}=qt({...e}),{schemaBuilder:i}=Kt({...e,pubsub:o}),s=Bt({...e,schemaBuilder:i}),l=Wt({...e,schemaBuilder:i,enumImplementer:s}),u=Qt({...e,schemaBuilder:i}),p=_t({...e,schemaBuilder:i,makePubSubInstance:r,whereArgImplementer:l,orderArgImplementer:u,enumImplementer:s,abilityBuilder:t}),a=Gt({...e,schemaBuilder:i,whereArgImplementer:l,orderArgImplementer:u,makePubSubInstance:r}),m=G(()=>i.toSchema()),c=y=>{let T=y?.enableApiDocs??process?.env?.NODE_ENV==="development"??false;return graphqlYoga.createYoga({...y,graphiql:T,plugins:[...y?.plugins??[],...T?[]:[pluginDisableIntrospection.useDisableIntrospection(),graphqlArmor.EnvelopArmorPlugin()]].filter(Boolean),schema:m(),context:n})},x=y=>(y.openAPI&&esToolkit.merge(y.openAPI,wt),sofaApi.useSofa({...y,schema:m(),context:n})),h=Ot({...e,builtSchema:m});return {abilityBuilder:t,schemaBuilder:i,createYoga:c,createSofa:x,object:p,whereArg:l,orderArg:u,query:a,pubsub:r,enum_:s,clientCreator:h}};exports.RumbleError=O;exports.RumbleErrorSafe=te;exports.assertFindFirstExists=Ke;exports.assertFirstEntryExists=yr;exports.generateFromSchema=Me;exports.makeLiveQuery=cr;exports.makeMutation=mr;exports.makeQuery=fr;exports.makeSubscription=dr;exports.mapNullFieldsToUndefined=hr;exports.rumble=ii;//# sourceMappingURL=index.cjs.map
105
111
  //# sourceMappingURL=index.cjs.map