@m1212e/rumble 0.4.3 → 0.5.1
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 +6 -6
- package/index.cjs.map +1 -1
- package/index.d.cts +15 -10
- package/index.d.ts +15 -10
- package/index.js +6 -6
- package/index.js.map +1 -1
- package/package.json +1 -1
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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:
|
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)[
|
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
|
2
|
-
`,
|
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
|
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
|
-
`+
|
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{
|
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
|