@m1212e/rumble 0.4.3 → 0.5.0

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.d.cts CHANGED
@@ -77,6 +77,11 @@ type RumbleInput<UserContext extends Record<string, any>, DB extends GenericDriz
77
77
  * Options passed along to the pothos schema builder.
78
78
  */
79
79
  pothosConfig?: PothosConfig;
80
+ /**
81
+ * Limits the returned amount when querying lists. Set to null to disable.
82
+ * @default 100
83
+ */
84
+ defaultLimit?: number | undefined | null;
80
85
  };
81
86
 
82
87
  declare const rumble: <UserContext extends Record<string, any>, DB extends GenericDrizzleDbTypeConstraints, RequestEvent extends Record<string, any>, PothosConfig extends CustomRumblePothosConfig, Action extends string = "read" | "update" | "delete">(rumbleInput: RumbleInput<UserContext, DB, RequestEvent, Action, PothosConfig>) => {
@@ -129,10 +134,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
129
134
  many: {
130
135
  where: drizzle_orm.SQL<unknown> | undefined;
131
136
  columns: Record<string, any> | undefined;
132
- limit: any;
137
+ limit: number | undefined;
133
138
  };
134
139
  };
135
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
140
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
136
141
  }; } : never;
137
142
  };
138
143
  /**
@@ -155,10 +160,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
155
160
  many: {
156
161
  where: drizzle_orm.SQL<unknown> | undefined;
157
162
  columns: Record<string, any> | undefined;
158
- limit: any;
163
+ limit: number | undefined;
159
164
  };
160
165
  };
161
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
166
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
162
167
  }; } : never;
163
168
  }>;
164
169
  DrizzleSchema: DB["_"]["fullSchema"];
@@ -215,10 +220,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
215
220
  many: {
216
221
  where: drizzle_orm.SQL<unknown> | undefined;
217
222
  columns: Record<string, any> | undefined;
218
- limit: any;
223
+ limit: number | undefined;
219
224
  };
220
225
  };
221
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
226
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
222
227
  }; } : never;
223
228
  }>;
224
229
  DrizzleSchema: DB["_"]["fullSchema"];
@@ -262,10 +267,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
262
267
  many: {
263
268
  where: drizzle_orm.SQL<unknown> | undefined;
264
269
  columns: Record<string, any> | undefined;
265
- limit: any;
270
+ limit: number | undefined;
266
271
  };
267
272
  };
268
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
273
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
269
274
  }; } : never;
270
275
  }>;
271
276
  DrizzleSchema: DB["_"]["fullSchema"];
@@ -346,10 +351,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
346
351
  many: {
347
352
  where: drizzle_orm.SQL<unknown> | undefined;
348
353
  columns: Record<string, any> | undefined;
349
- limit: any;
354
+ limit: number | undefined;
350
355
  };
351
356
  };
352
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_6 extends keyof DB["query"] ? { [key_3 in T_6]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
357
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_6 extends keyof DB["query"] ? { [key_3 in T_6]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
353
358
  }; } : never;
354
359
  }>;
355
360
  DrizzleSchema: DB["_"]["fullSchema"];
package/index.d.ts CHANGED
@@ -77,6 +77,11 @@ type RumbleInput<UserContext extends Record<string, any>, DB extends GenericDriz
77
77
  * Options passed along to the pothos schema builder.
78
78
  */
79
79
  pothosConfig?: PothosConfig;
80
+ /**
81
+ * Limits the returned amount when querying lists. Set to null to disable.
82
+ * @default 100
83
+ */
84
+ defaultLimit?: number | undefined | null;
80
85
  };
81
86
 
82
87
  declare const rumble: <UserContext extends Record<string, any>, DB extends GenericDrizzleDbTypeConstraints, RequestEvent extends Record<string, any>, PothosConfig extends CustomRumblePothosConfig, Action extends string = "read" | "update" | "delete">(rumbleInput: RumbleInput<UserContext, DB, RequestEvent, Action, PothosConfig>) => {
@@ -129,10 +134,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
129
134
  many: {
130
135
  where: drizzle_orm.SQL<unknown> | undefined;
131
136
  columns: Record<string, any> | undefined;
132
- limit: any;
137
+ limit: number | undefined;
133
138
  };
134
139
  };
135
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
140
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
136
141
  }; } : never;
137
142
  };
138
143
  /**
@@ -155,10 +160,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
155
160
  many: {
156
161
  where: drizzle_orm.SQL<unknown> | undefined;
157
162
  columns: Record<string, any> | undefined;
158
- limit: any;
163
+ limit: number | undefined;
159
164
  };
160
165
  };
161
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
166
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
162
167
  }; } : never;
163
168
  }>;
164
169
  DrizzleSchema: DB["_"]["fullSchema"];
@@ -215,10 +220,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
215
220
  many: {
216
221
  where: drizzle_orm.SQL<unknown> | undefined;
217
222
  columns: Record<string, any> | undefined;
218
- limit: any;
223
+ limit: number | undefined;
219
224
  };
220
225
  };
221
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
226
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
222
227
  }; } : never;
223
228
  }>;
224
229
  DrizzleSchema: DB["_"]["fullSchema"];
@@ -262,10 +267,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
262
267
  many: {
263
268
  where: drizzle_orm.SQL<unknown> | undefined;
264
269
  columns: Record<string, any> | undefined;
265
- limit: any;
270
+ limit: number | undefined;
266
271
  };
267
272
  };
268
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
273
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_5 extends keyof DB["query"] ? { [key_3 in T_5]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
269
274
  }; } : never;
270
275
  }>;
271
276
  DrizzleSchema: DB["_"]["fullSchema"];
@@ -346,10 +351,10 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
346
351
  many: {
347
352
  where: drizzle_orm.SQL<unknown> | undefined;
348
353
  columns: Record<string, any> | undefined;
349
- limit: any;
354
+ limit: number | undefined;
350
355
  };
351
356
  };
352
- explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_6 extends keyof DB["query"] ? { [key_3 in T_6]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[keyof DB["query"]][Action];
357
+ explicitFilters: (action: Action) => (keyof DB["query"] extends infer T_6 extends keyof DB["query"] ? { [key_3 in T_6]: { [key_4 in Action]: Filter<UserContext, any>[]; }; } : never)[key_5][Action];
353
358
  }; } : never;
354
359
  }>;
355
360
  DrizzleSchema: DB["_"]["fullSchema"];
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 be,{BasePlugin}from'@pothos/core';import Se from'@pothos/plugin-drizzle';import Re,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';function O(e){return typeof e=="object"&&e!==null}function w(e,t){throw new Error("Unexpected invariant triggered.")}var oe=/\r\n|[\n\r]/g;function I(e,t){let c=0,p=1;for(let n of e.body.matchAll(oe)){if(typeof n.index=="number"||w(),n.index>=t)break;c=n.index+n[0].length,p+=1;}return {line:p,column:t+1-c}}function k(e){return L(e.source,I(e.source,e.start))}function L(e,t){let c=e.locationOffset.column-1,p="".padStart(c)+e.body,n=t.line-1,y=e.locationOffset.line-1,u=t.line+y,a=t.line===1?c:0,r=t.column+a,l=`${e.name}:${u}:${r}
2
- `,i=p.split(/\r\n|[\n\r]/g),f=i[n];if(f.length>120){let o=Math.floor(r/80),b=r%80,m=[];for(let x=0;x<f.length;x+=80)m.push(f.slice(x,x+80));return l+Q([[`${u} |`,m[0]],...m.slice(1,o+1).map(x=>["|",x]),["|","^".padStart(b)],["|",m[o+1]]])}return l+Q([[`${u-1} |`,i[n-1]],[`${u} |`,f],["|","^".padStart(r)],[`${u+1} |`,i[n+1]]])}function Q(e){let t=e.filter(([p,n])=>n!==void 0),c=Math.max(...t.map(([p])=>p.length));return t.map(([p,n])=>p.padStart(c)+(n?" "+n:"")).join(`
3
- `)}function ie(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 P=class e extends Error{constructor(t,...c){var p,n,y;let{nodes:u,source:a,positions:r,path:l,originalError:i,extensions:f}=ie(c);super(t),this.name="GraphQLError",this.path=l??void 0,this.originalError=i??void 0,this.nodes=G(Array.isArray(u)?u:u?[u]:void 0);let o=G((p=this.nodes)===null||p===void 0?void 0:p.map(m=>m.loc).filter(m=>m!=null));this.source=a??(o==null||(n=o[0])===null||n===void 0?void 0:n.source),this.positions=r??o?.map(m=>m.start),this.locations=r&&a?r.map(m=>I(a,m)):o?.map(m=>I(m.source,m.start));let b=O(i?.extensions)?i?.extensions:void 0;this.extensions=(y=f??b)!==null&&y!==void 0?y:Object.create(null),Object.defineProperties(this,{message:{writable:true,enumerable:true},name:{enumerable:false},nodes:{enumerable:false},source:{enumerable:false},positions:{enumerable:false},originalError:{enumerable:false}}),i!=null&&i.stack?Object.defineProperty(this,"stack",{value:i.stack,writable:true,configurable:true}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:true,configurable:true});}get[Symbol.toStringTag](){return "GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let c of this.nodes)c.loc&&(t+=`
1
+ import {createYoga,createPubSub}from'graphql-yoga';import {One,or,and,eq}from'drizzle-orm';import {toCamelCase}from'drizzle-orm/casing';import be,{BasePlugin}from'@pothos/core';import Se from'@pothos/plugin-drizzle';import Re,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';function w(e){return typeof e=="object"&&e!==null}function Q(e,t){throw new Error("Unexpected invariant triggered.")}var oe=/\r\n|[\n\r]/g;function I(e,t){let l=0,p=1;for(let n of e.body.matchAll(oe)){if(typeof n.index=="number"||Q(),n.index>=t)break;l=n.index+n[0].length,p+=1;}return {line:p,column:t+1-l}}function G(e){return q(e.source,I(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 b=0;b<f.length;b+=80)m.push(f.slice(b,b+80));return s+k([[`${i} |`,m[0]],...m.slice(1,a+1).map(b=>["|",b]),["|","^".padStart(c)],["|",m[a+1]]])}return s+k([[`${i-1} |`,o[n-1]],[`${i} |`,f],["|","^".padStart(r)],[`${i+1} |`,o[n+1]]])}function k(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 ie(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}=ie(l);super(t),this.name="GraphQLError",this.path=s??void 0,this.originalError=o??void 0,this.nodes=j(Array.isArray(i)?i:i?[i]:void 0);let a=j((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=>I(y,m)):a?.map(m=>I(m.source,m.start));let c=w(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
- `+k(c.loc));else if(this.source&&this.locations)for(let c of this.locations)t+=`
5
+ `+G(l.loc));else if(this.source&&this.locations)for(let l of this.locations)t+=`
6
6
 
7
- `+L(this.source,c);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 G(e){return e===void 0||e.length===0?void 0:e}var S=class extends Error{constructor(t){super(t),this.name="RumbleError";}},B=class extends P{};var U=(e,t)=>new S(`RumbleError: Unknown SQL type '${e}'. Please open an issue (https://github.com/m1212e/rumble/issues) so it can be added. (${t})`);function j(e){if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e))return {value1:1,value2:2};if(["real","decimal","double","float"].includes(e))return {value1:1.1,value2:2.2};if(["string","text","varchar","char","text(256)"].includes(e))return {value1:"a",value2:"b"};if(["uuid"].includes(e))return {value1:"fba31870-5528-42d7-b27e-2e5ee657aea5",value2:"fc65db81-c2d1-483d-8a25-a30e2cf6e02d"};if(["boolean"].includes(e))return {value1:true,value2:false};if(["timestamp","datetime"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["date"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["json"].includes(e))return {value1:{a:1},value2:{b:2}};throw U(e,"Distinct")}function le(e){return typeof e!="function"}function pe(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var K=({db:e,actions:t})=>{let c=e._.schema,p={},n={},y={},u=a=>{for(let r of t)y[a]||(y[a]={}),y[a][r]||(y[a][r]=[]);return {allow:r=>{let l=n[a];l||(l={},n[a]=l);let i=Array.isArray(r)?r:[r];for(let f of i){let o=l[f];o||(o="wildcard",l[f]=o);}return {when:f=>{for(let o of i)l[o]==="wildcard"&&(l[o]=[]),l[o].push(f);}}},filter:r=>{let l=Array.isArray(r)?r:[r];return {by:i=>{for(let f of l)y[a][f].push(i);}}}}};for(let a of Object.keys(e.query))p[a]=u(a);return {...p,registeredConditions:n,registeredFilters:y,buildWithUserContext:a=>{let r={},l=i=>({filter:(f,o)=>{let b=n[i];b||(b={});let m=b[f];if(m==="wildcard")return {single:{where:o?.inject?.where,columns:o?.inject?.columns},many:{where:o?.inject?.where,columns:o?.inject?.columns,limit:o?.inject?.limit}};let x=()=>{let T=c[i].primaryKey.at(0);if(!T)throw new S(`No primary key found for entity ${i.toString()}`);let N=j(T.getSQLType());return {where:and(eq(T,N.value1),eq(T,N.value2))}};(!b||!m)&&(m=[x()]);let C=m.filter(le),g=m.filter(pe).map(T=>T(a)),s=[...C,...g];s.filter(T=>T!==void 0).length===0&&s.push(x());let d;for(let T of s)T?.limit&&(d===void 0||T.limit>d)&&(d=T.limit);o?.inject?.limit&&d<o.inject.limit&&(d=o.inject.limit);let h;for(let T of [...s,o?.inject??{}])T?.columns&&(h===void 0?h=T.columns:h={...h,...T.columns});let R=s.filter(T=>T?.where).map(T=>T?.where),D=R.length>0?or(...R):void 0;return o?.inject?.where&&(D=D?and(D,o.inject.where):o.inject.where),{single:{where:D,columns:h},many:{where:D,columns:h,limit:d}}},explicitFilters:f=>y[i][f]});for(let i of Object.keys(e.query))r[i]=l(i);return r}}};var $=({context:e,abilityBuilder:t})=>async c=>{let p=e?await e(c):{};return {...p,abilities:t.buildWithUserContext(p)}};function E(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function v(e){let t=A(e);return t.enumValues!==void 0&&t.enumName!==void 0&&typeof t.enumName=="string"&&Array.isArray(t.enumValues)}function A(e){return e.enum??e}var M=({db:e,schemaBuilder:t})=>{let c=new Map;return ({enumVariableName:n,name:y,enumName:u})=>{let a=e._.fullSchema,r;if(n?r=a[n]:u&&(r=Object.values(a).filter(v).map(A).find(o=>o.enumName===u)),!r)throw new S(`Could not determine enum structure! (${String(n)}, ${enumValuesParam}, ${u})`);let l=y??`${E(toCamelCase(r.enumName.toString()))}Enum`,i=c.get(l);return i||(i=t.enumType(l,{values:r.enumValues}),c.set(l,i),i)}};function F(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 ce="RUMBLE_SUBSCRIPTION_NOTIFICATION",ye="REMOVED",de="UPDATED",fe="CREATED",J=({subscriptions:e,db:t})=>{let c=e?createPubSub(...e):createPubSub();return {pubsub:c,makePubSubInstance:({tableName:n})=>{function y({action:u,tableName:a,primaryKeyValue:r}){let l;switch(u){case "created":l=fe;break;case "removed":l=ye;break;case "updated":l=de;break;default:throw new Error(`Unknown action: ${u}`)}return `${ce}/${a}${r?`/${r}`:""}/${l}`}return {registerOnInstance({instance:u,action:a,primaryKeyValue:r}){let l=y({tableName:n.toString(),action:a,primaryKeyValue:r});u.register(l);},created(){let u=y({tableName:n.toString(),action:"created"});return c.publish(u)},removed(u){let a=y({tableName:n.toString(),action:"removed"});return c.publish(a)},updated(u){let r=(Array.isArray(u)?u:[u]).map(i=>y({tableName:n.toString(),action:"updated",primaryKeyValue:i})),l=Array.from(new Set(r));for(let i of l)c.publish(i);}}}}};var Y=({db:e,schemaBuilder:t,makePubSubInstance:c,argImplementer:p,enumImplementer:n,abilityBuilder:y})=>({tableName:u,name:a,readAction:r="read"})=>{let l=e._.schema[u];if(!l)throw new S(`Could not find schema for ${u.toString()} (object)`);let i=l.primaryKey.at(0)?.name;i||console.warn(`Could not find primary key for ${u.toString()}. Cannot register subscriptions!`);let{registerOnInstance:f}=c({tableName:u});return t.drizzleObject(u,{name:a??E(u.toString()),subscribe:(o,b,m)=>{if(!i)return;let x=b[i];if(!x){console.warn(`Could not find primary key value for ${JSON.stringify(b)}. Cannot register subscription!`);return}f({instance:o,action:"updated",primaryKeyValue:x});},applyFilters:y?.registeredFilters?.[u]?.[r],fields:o=>{let b=(C,g,s)=>{let d=F(C);switch(d){case "Int":return o.exposeInt(g,{nullable:s});case "String":return o.exposeString(g,{nullable:s});case "Boolean":return o.exposeBoolean(g,{nullable:s});case "Date":return o.field({type:"Date",resolve:h=>h[g],nullable:s});case "DateTime":return o.field({type:"DateTime",resolve:h=>h[g],nullable:s});case "Float":return o.exposeFloat(g,{nullable:s});case "ID":return o.exposeID(g,{nullable:s});case "JSON":return o.field({type:"JSON",resolve:h=>h[g],nullable:s});default:throw new S(`Unsupported object type ${d} for column ${g}`)}},m=Object.entries(l.columns).reduce((C,[g,s])=>{if(v(s)){let d=A(s),h=n({enumName:d.enumName});C[g]=o.field({type:h,resolve:R=>R[g],nullable:!s.notNull});}else C[g]=b(s.getSQLType(),g,!s.notNull);return C},{}),x=Object.entries(l.relations).reduce((C,[g,s])=>{let {inputType:d,transformArgumentToQueryCondition:h}=p({tableName:s.referencedTableName,nativeTableName:s.referencedTableName}),R=false,T="many";return s instanceof One&&(R=!s.isNullable,T="single"),C[g]=o.relation(g,{args:{where:o.arg({type:d,required:false})},nullable:R,query:(N,re)=>re.abilities[s.referencedTableName].filter(r,{inject:{where:h(N.where)}})[T]}),C},{});return {...m,...x}}})};var q=e=>{if(!e)throw new B("Value not found but required (findFirst)");return e},ge=e=>{let t=e.at(0);if(!t)throw new B("Value not found but required (firstEntry)");return t},H=async({filters:e,entities:t,context:c})=>(await Promise.all(e.map(p=>p({context:c,entities:t})))).reduce((p,n)=>(p.push(...n),p),[]);var X=({db:e,schemaBuilder:t,argImplementer:c,makePubSubInstance:p})=>({tableName:n,readAction:y="read",listAction:u="read"})=>{let a=e._.schema[n];if(!a)throw new S(`Could not find schema for ${n.toString()} (query)`);a.primaryKey.at(0)?.name||console.warn(`Could not find primary key for ${n.toString()}. Cannot register subscriptions!`);let{inputType:l,transformArgumentToQueryCondition:i}=c({tableName:n}),{registerOnInstance:f}=p({tableName:n});return t.queryFields(o=>({[`findMany${E(n.toString())}`]:o.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(b,m,x,C,g)=>{f({instance:b,action:"created"}),f({instance:b,action:"removed"});},args:{where:o.arg({type:l,required:false})},resolve:(b,m,x,C,g)=>{let s=C.abilities[n].filter(u,{inject:{where:i(x.where)}}).many,d=b(s);return s.columns&&(d.columns=s.columns),e.query[n].findMany(d)}}),[`findFirst${E(n.toString())}`]:o.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:o.arg({type:l,required:false})},resolve:(b,m,x,C,g)=>{let s=C.abilities[n].filter(y,{inject:{where:i(x.where)}}).single,d=b(s);return s.columns&&(d.columns=s.columns),e.query[n].findFirst(d).then(q)}})}))};var Z="ManualFiltersPlugin",ee=Z,Te="applyFilters",z=class extends BasePlugin{wrapResolve(t,c){return async(p,n,y,u)=>{let a=(c?.type).type?.ref.currentConfig.pothosOptions[Te];if(!a||!Array.isArray(a)||a.length===0)return t(p,n,y,u);let r=await t(p,n,y,u),l=Array.isArray(r)?r:[r],i=Array.isArray(a)?a:[a],f=await H({filters:i,entities:l,context:y});return Array.isArray(r)?f:f[0]??null}}};be.registerPlugin(Z,z);var te=({db:e,disableDefaultObjects:t,pubsub:c,pothosConfig:p})=>{let n=new be({plugins:[ee,Se,Re,...p?.plugins??[]],...p,drizzle:{client:e},smartSubscriptions:{...subscribeOptionsFromIterator((y,u)=>c.subscribe(y))}});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 Ne=e=>`${E(toCamelCase(e.toString()))}WhereInputArgument`,ne=({db:e,schemaBuilder:t,enumImplementer:c})=>{let p=new Map,n=({tableName:y,name:u,nativeTableName:a})=>{let r=e._.schema[y];if(a){let o=Object.values(e._.schema).find(b=>b.dbName===a);o&&(r=o);}if(!r)throw new S(`Could not find schema for ${y.toString()} (whereArg)`);let l=u??Ne(r.dbName),i=p.get(l);return i||(i={inputType:t.inputType(l,{fields:m=>{let x=s=>{let d=F(s);switch(d){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 S(`Unsupported argument type ${d} for column ${s}`)}},C=Object.entries(r.columns).reduce((s,[d,h])=>{if(v(h)){let R=A(h),D=c({enumName:R.enumName});s[d]=m.field({type:D,required:false});}else s[d]=x(h.getSQLType());return s},{}),g=Object.entries(r.relations).reduce((s,[d,h])=>{let R=n({tableName:h.referencedTableName,nativeTableName:h.referencedTableName});return s[d]=m.field({type:R.inputType,required:false}),s},{});return {...C,...g}}}),transformArgumentToQueryCondition:m=>{if(!m)return;let x=s=>{let d=r.columns[s],h=m[s];if(h)return eq(d,h)},C=s=>{let d=r.relations[s],h=m[s];if(!h)return;let R=n({tableName:d.referencedTableName,nativeTableName:d.referencedTableName}).transformArgumentToQueryCondition;return R(h)},g=[...Object.keys(r.columns).map(x),...Object.keys(r.relations).map(C)];return and(...g)}},p.set(l,i),i)};return n};var Fe=e=>{e.actions||(e.actions=["read","update","delete"]);let t=K(e),c=$({...e,abilityBuilder:t}),{makePubSubInstance:p,pubsub:n}=J({...e}),{schemaBuilder:y}=te({...e,pubsub:n}),u=M({...e,schemaBuilder:y}),a=ne({...e,schemaBuilder:y,enumImplementer:u}),r=Y({...e,schemaBuilder:y,makePubSubInstance:p,argImplementer:a,enumImplementer:u,abilityBuilder:t}),l=X({...e,schemaBuilder:y,argImplementer:a,makePubSubInstance:p});return {abilityBuilder:t,schemaBuilder:y,createYoga:f=>createYoga({...f,schema:y.toSchema(),context:c}),object:r,arg:a,query:l,pubsub:p,enum_:u}};
8
- export{S as RumbleError,B as RumbleErrorSafe,q as assertFindFirstExists,ge as assertFirstEntryExists,Fe as rumble};//# sourceMappingURL=index.js.map
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 j(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 _(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 le(e){return typeof e!="function"}function pe(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var $=({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 b=m[a];if(b==="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 T=p[f].primaryKey.at(0);if(!T)throw new R(`No primary key found for entity ${f.toString()}`);let L=_(T.getSQLType());return {where:and(eq(T,L.value1),eq(T,L.value2))}};(!m||!b)&&(b=[C()]);let x=b.filter(le),u=b.filter(pe).map(T=>T(r)),h=[...x,...u];h.filter(T=>T!==void 0).length===0&&h.push(C());let g;for(let T of h)T?.limit&&(g===void 0||T.limit>g)&&(g=T.limit);c?.inject?.limit&&g&&g<c.inject.limit&&(g=c.inject.limit);let S;for(let T of [...h,c?.inject??{}])T?.columns&&(S===void 0?S=T.columns:S={...S,...T.columns});let P=h.filter(T=>T?.where).map(T=>T?.where),E=P.length>0?or(...P):void 0;return c?.inject?.where&&(E=E?and(E,c.inject.where):c.inject.where),{single:{where:E,columns:S},many:{where:E,columns:S,limit:g??l??void 0}}},explicitFilters:a=>i[f][a]});for(let f of Object.keys(e.query))s[f]=o(f);return s}}};var M=({context:e,abilityBuilder:t})=>async l=>{let p=e?await e(l):{};return {...p,abilities:t.buildWithUserContext(p)}};function D(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function N(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 W=({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(N).map(v).find(a=>a.enumName===i)),!r)throw new R(`Could not determine enum structure! (${String(n)}, ${enumValuesParam}, ${i})`);let s=d??`${D(toCamelCase(r.enumName.toString()))}Enum`,o=l.get(s);return o||(o=t.enumType(s,{values:r.enumValues}),l.set(s,o),o)}};function F(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 ce="RUMBLE_SUBSCRIPTION_NOTIFICATION",ye="REMOVED",de="UPDATED",fe="CREATED",Y=({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=fe;break;case "removed":s=ye;break;case "updated":s=de;break;default:throw new Error(`Unknown action: ${i}`)}return `${ce}/${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 H=({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??D(i.toString()),subscribe:(a,c,m)=>{if(!o)return;let b=c[o];if(!b){console.warn(`Could not find primary key value for ${JSON.stringify(c)}. Cannot register subscription!`);return}f({instance:a,action:"updated",primaryKeyValue:b});},applyFilters:d?.registeredFilters?.[i]?.[r],fields:a=>{let c=(C,x,u)=>{let h=F(C);switch(h){case "Int":return a.exposeInt(x,{nullable:u});case "String":return a.exposeString(x,{nullable:u});case "Boolean":return a.exposeBoolean(x,{nullable:u});case "Date":return a.field({type:"Date",resolve:g=>g[x],nullable:u});case "DateTime":return a.field({type:"DateTime",resolve:g=>g[x],nullable:u});case "Float":return a.exposeFloat(x,{nullable:u});case "ID":return a.exposeID(x,{nullable:u});case "JSON":return a.field({type:"JSON",resolve:g=>g[x],nullable:u});default:throw new R(`Unsupported object type ${h} for column ${x}`)}},m=Object.entries(s.columns).reduce((C,[x,u])=>{if(N(u)){let h=v(u),g=n({enumName:h.enumName});C[x]=a.field({type:g,resolve:S=>S[x],nullable:!u.notNull});}else C[x]=c(u.getSQLType(),x,!u.notNull);return C},{}),b=Object.entries(s.relations).reduce((C,[x,u])=>{let {inputType:h,transformArgumentToQueryCondition:g}=p({tableName:u.referencedTableName,nativeTableName:u.referencedTableName}),S=false,E="many";return u instanceof One&&(S=!u.isNullable,E="single"),C[x]=a.relation(x,{args:{where:a.arg({type:h,required:false})},nullable:S,query:(T,L)=>L.abilities[u.referencedTableName].filter(r,{inject:{where:g(T.where)}})[E]}),C},{});return {...m,...b}}})};var z=e=>{if(!e)throw new A("Value not found but required (findFirst)");return e},ge=e=>{let t=e.at(0);if(!t)throw new A("Value not found but required (firstEntry)");return t},X=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 Z=({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${D(n.toString())}`]:a.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(c,m,b,C,x)=>{f({instance:c,action:"created"}),f({instance:c,action:"removed"});},args:{where:a.arg({type:s,required:false})},resolve:(c,m,b,C,x)=>{let u=C.abilities[n].filter(i,{inject:{where:o(b.where)}}).many,h=c(u);return u.columns&&(h.columns=u.columns),e.query[n].findMany(h)}}),[`findFirst${D(n.toString())}`]:a.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:a.arg({type:s,required:false})},resolve:(c,m,b,C,x)=>{let u=C.abilities[n].filter(d,{inject:{where:o(b.where)}}).single,h=c(u);return u.columns&&(h.columns=u.columns),e.query[n].findFirst(h).then(z)}})}))};var ee="ManualFiltersPlugin",te=ee,Te="applyFilters",O=class extends BasePlugin{wrapResolve(t,l){return async(p,n,d,i)=>{let y=(l?.type).type?.ref.currentConfig.pothosOptions[Te];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 X({filters:o,entities:s,context:d});return Array.isArray(r)?f:f[0]??null}}};be.registerPlugin(ee,O);var ne=({db:e,disableDefaultObjects:t,pubsub:l,pothosConfig:p})=>{let n=new be({plugins:[te,Se,Re,...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 Ne=e=>`${D(toCamelCase(e.toString()))}WhereInputArgument`,re=({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??Ne(r.dbName),o=p.get(s);return o||(o={inputType:t.inputType(s,{fields:m=>{let b=u=>{let h=F(u);switch(h){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 ${h} for column ${u}`)}},C=Object.entries(r.columns).reduce((u,[h,g])=>{if(N(g)){let S=v(g),P=l({enumName:S.enumName});u[h]=m.field({type:P,required:false});}else u[h]=b(g.getSQLType());return u},{}),x=Object.entries(r.relations).reduce((u,[h,g])=>{let S=n({tableName:g.referencedTableName,nativeTableName:g.referencedTableName});return u[h]=m.field({type:S.inputType,required:false}),u},{});return {...C,...x}}}),transformArgumentToQueryCondition:m=>{if(!m)return;let b=u=>{let h=r.columns[u],g=m[u];if(g)return eq(h,g)},C=u=>{let h=r.relations[u],g=m[u];if(!g)return;let S=n({tableName:h.referencedTableName,nativeTableName:h.referencedTableName}).transformArgumentToQueryCondition;return S(g)},x=[...Object.keys(r.columns).map(b),...Object.keys(r.relations).map(C)];return and(...x)}},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=$(e),l=M({...e,abilityBuilder:t}),{makePubSubInstance:p,pubsub:n}=Y({...e}),{schemaBuilder:d}=ne({...e,pubsub:n}),i=W({...e,schemaBuilder:d}),y=re({...e,schemaBuilder:d,enumImplementer:i}),r=H({...e,schemaBuilder:d,makePubSubInstance:p,argImplementer:y,enumImplementer:i,abilityBuilder:t}),s=Z({...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,z as assertFindFirstExists,ge as assertFirstEntryExists,Ue as rumble};//# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map