@m1212e/rumble 0.3.14 → 0.4.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/README.md +2 -2
- package/index.cjs +6 -6
- package/index.cjs.map +1 -1
- package/index.d.cts +49 -19
- package/index.d.ts +49 -19
- package/index.js +6 -6
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.d.cts
CHANGED
@@ -95,9 +95,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
95
95
|
limit: any;
|
96
96
|
}> | undefined;
|
97
97
|
} | undefined) => {
|
98
|
-
|
99
|
-
|
100
|
-
|
98
|
+
single: {
|
99
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
100
|
+
columns: Record<string, any> | undefined;
|
101
|
+
};
|
102
|
+
many: {
|
103
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
104
|
+
columns: Record<string, any> | undefined;
|
105
|
+
limit: any;
|
106
|
+
};
|
101
107
|
};
|
102
108
|
}; } : never;
|
103
109
|
};
|
@@ -114,9 +120,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
114
120
|
limit: any;
|
115
121
|
}> | undefined;
|
116
122
|
} | undefined) => {
|
117
|
-
|
118
|
-
|
119
|
-
|
123
|
+
single: {
|
124
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
125
|
+
columns: Record<string, any> | undefined;
|
126
|
+
};
|
127
|
+
many: {
|
128
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
129
|
+
columns: Record<string, any> | undefined;
|
130
|
+
limit: any;
|
131
|
+
};
|
120
132
|
};
|
121
133
|
}; } : never;
|
122
134
|
}>;
|
@@ -167,9 +179,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
167
179
|
limit: any;
|
168
180
|
}> | undefined;
|
169
181
|
} | undefined) => {
|
170
|
-
|
171
|
-
|
172
|
-
|
182
|
+
single: {
|
183
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
184
|
+
columns: Record<string, any> | undefined;
|
185
|
+
};
|
186
|
+
many: {
|
187
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
188
|
+
columns: Record<string, any> | undefined;
|
189
|
+
limit: any;
|
190
|
+
};
|
173
191
|
};
|
174
192
|
}; } : never;
|
175
193
|
}>;
|
@@ -207,9 +225,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
207
225
|
limit: any;
|
208
226
|
}> | undefined;
|
209
227
|
} | undefined) => {
|
210
|
-
|
211
|
-
|
212
|
-
|
228
|
+
single: {
|
229
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
230
|
+
columns: Record<string, any> | undefined;
|
231
|
+
};
|
232
|
+
many: {
|
233
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
234
|
+
columns: Record<string, any> | undefined;
|
235
|
+
limit: any;
|
236
|
+
};
|
213
237
|
};
|
214
238
|
}; } : never;
|
215
239
|
}>;
|
@@ -258,8 +282,8 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
258
282
|
primaryKeyValue?: string;
|
259
283
|
}): void;
|
260
284
|
created(): void;
|
261
|
-
removed(primaryKeyValue?:
|
262
|
-
updated(primaryKeyValue?:
|
285
|
+
removed(primaryKeyValue?: NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"] | NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"][] | undefined): void;
|
286
|
+
updated(primaryKeyValue?: NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"] | NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"][] | undefined): void;
|
263
287
|
};
|
264
288
|
/**
|
265
289
|
* A function to implement enums for graphql usage.
|
@@ -287,9 +311,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
287
311
|
limit: any;
|
288
312
|
}> | undefined;
|
289
313
|
} | undefined) => {
|
290
|
-
|
291
|
-
|
292
|
-
|
314
|
+
single: {
|
315
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
316
|
+
columns: Record<string, any> | undefined;
|
317
|
+
};
|
318
|
+
many: {
|
319
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
320
|
+
columns: Record<string, any> | undefined;
|
321
|
+
limit: any;
|
322
|
+
};
|
293
323
|
};
|
294
324
|
}; } : never;
|
295
325
|
}>;
|
@@ -330,7 +360,7 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
330
360
|
db.query.users
|
331
361
|
.findFirst({
|
332
362
|
...query,
|
333
|
-
where: ctx.abilities.users.filter("read").where,
|
363
|
+
where: ctx.abilities.users.filter("read").single.where,
|
334
364
|
})
|
335
365
|
// note that we need to manually raise an error if the value is not found
|
336
366
|
.then(assertFindFirstExists)
|
@@ -369,7 +399,7 @@ declare const assertFindFirstExists: <T>(value: T | undefined) => T;
|
|
369
399
|
.where(
|
370
400
|
and(
|
371
401
|
eq(schema.users.id, args.userId),
|
372
|
-
ctx.abilities.users.filter("update").where
|
402
|
+
ctx.abilities.users.filter("update").single.where
|
373
403
|
)
|
374
404
|
)
|
375
405
|
.returning({ id: schema.users.id, name: schema.users.name })
|
package/index.d.ts
CHANGED
@@ -95,9 +95,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
95
95
|
limit: any;
|
96
96
|
}> | undefined;
|
97
97
|
} | undefined) => {
|
98
|
-
|
99
|
-
|
100
|
-
|
98
|
+
single: {
|
99
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
100
|
+
columns: Record<string, any> | undefined;
|
101
|
+
};
|
102
|
+
many: {
|
103
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
104
|
+
columns: Record<string, any> | undefined;
|
105
|
+
limit: any;
|
106
|
+
};
|
101
107
|
};
|
102
108
|
}; } : never;
|
103
109
|
};
|
@@ -114,9 +120,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
114
120
|
limit: any;
|
115
121
|
}> | undefined;
|
116
122
|
} | undefined) => {
|
117
|
-
|
118
|
-
|
119
|
-
|
123
|
+
single: {
|
124
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
125
|
+
columns: Record<string, any> | undefined;
|
126
|
+
};
|
127
|
+
many: {
|
128
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
129
|
+
columns: Record<string, any> | undefined;
|
130
|
+
limit: any;
|
131
|
+
};
|
120
132
|
};
|
121
133
|
}; } : never;
|
122
134
|
}>;
|
@@ -167,9 +179,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
167
179
|
limit: any;
|
168
180
|
}> | undefined;
|
169
181
|
} | undefined) => {
|
170
|
-
|
171
|
-
|
172
|
-
|
182
|
+
single: {
|
183
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
184
|
+
columns: Record<string, any> | undefined;
|
185
|
+
};
|
186
|
+
many: {
|
187
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
188
|
+
columns: Record<string, any> | undefined;
|
189
|
+
limit: any;
|
190
|
+
};
|
173
191
|
};
|
174
192
|
}; } : never;
|
175
193
|
}>;
|
@@ -207,9 +225,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
207
225
|
limit: any;
|
208
226
|
}> | undefined;
|
209
227
|
} | undefined) => {
|
210
|
-
|
211
|
-
|
212
|
-
|
228
|
+
single: {
|
229
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
230
|
+
columns: Record<string, any> | undefined;
|
231
|
+
};
|
232
|
+
many: {
|
233
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
234
|
+
columns: Record<string, any> | undefined;
|
235
|
+
limit: any;
|
236
|
+
};
|
213
237
|
};
|
214
238
|
}; } : never;
|
215
239
|
}>;
|
@@ -258,8 +282,8 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
258
282
|
primaryKeyValue?: string;
|
259
283
|
}): void;
|
260
284
|
created(): void;
|
261
|
-
removed(primaryKeyValue?:
|
262
|
-
updated(primaryKeyValue?:
|
285
|
+
removed(primaryKeyValue?: NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"] | NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"][] | undefined): void;
|
286
|
+
updated(primaryKeyValue?: NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"] | NonNullable<DB["_"]["schema"]>[ExplicitTableName]["primaryKey"][number]["_"]["data"][] | undefined): void;
|
263
287
|
};
|
264
288
|
/**
|
265
289
|
* A function to implement enums for graphql usage.
|
@@ -287,9 +311,15 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
287
311
|
limit: any;
|
288
312
|
}> | undefined;
|
289
313
|
} | undefined) => {
|
290
|
-
|
291
|
-
|
292
|
-
|
314
|
+
single: {
|
315
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
316
|
+
columns: Record<string, any> | undefined;
|
317
|
+
};
|
318
|
+
many: {
|
319
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
320
|
+
columns: Record<string, any> | undefined;
|
321
|
+
limit: any;
|
322
|
+
};
|
293
323
|
};
|
294
324
|
}; } : never;
|
295
325
|
}>;
|
@@ -330,7 +360,7 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
330
360
|
db.query.users
|
331
361
|
.findFirst({
|
332
362
|
...query,
|
333
|
-
where: ctx.abilities.users.filter("read").where,
|
363
|
+
where: ctx.abilities.users.filter("read").single.where,
|
334
364
|
})
|
335
365
|
// note that we need to manually raise an error if the value is not found
|
336
366
|
.then(assertFindFirstExists)
|
@@ -369,7 +399,7 @@ declare const assertFindFirstExists: <T>(value: T | undefined) => T;
|
|
369
399
|
.where(
|
370
400
|
and(
|
371
401
|
eq(schema.users.id, args.userId),
|
372
|
-
ctx.abilities.users.filter("update").where
|
402
|
+
ctx.abilities.users.filter("update").single.where
|
373
403
|
)
|
374
404
|
)
|
375
405
|
.returning({ id: schema.users.id, name: schema.users.name })
|
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 de from'@pothos/core';import ye from'@pothos/plugin-drizzle';import fe,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';function
|
2
|
-
`,r=
|
3
|
-
`)}function ee(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 de from'@pothos/core';import ye from'@pothos/plugin-drizzle';import fe,{subscribeOptionsFromIterator}from'@pothos/plugin-smart-subscriptions';import {JSONResolver,DateResolver,DateTimeISOResolver}from'graphql-scalars';function q(e){return typeof e=="object"&&e!==null}function z(e,t){throw new Error("Unexpected invariant triggered.")}var Z=/\r\n|[\n\r]/g;function A(e,t){let c=0,p=1;for(let n of e.body.matchAll(Z)){if(typeof n.index=="number"||z(),n.index>=t)break;c=n.index+n[0].length,p+=1;}return {line:p,column:t+1-c}}function w(e){return U(e.source,A(e.source,e.start))}function U(e,t){let c=e.locationOffset.column-1,p="".padStart(c)+e.body,n=t.line-1,a=e.locationOffset.line-1,i=t.line+a,u=t.line===1?c:0,o=t.column+u,s=`${e.name}:${i}:${o}
|
2
|
+
`,r=p.split(/\r\n|[\n\r]/g),m=r[n];if(m.length>120){let f=Math.floor(o/80),T=o%80,l=[];for(let x=0;x<m.length;x+=80)l.push(m.slice(x,x+80));return s+O([[`${i} |`,l[0]],...l.slice(1,f+1).map(x=>["|",x]),["|","^".padStart(T)],["|",l[f+1]]])}return s+O([[`${i-1} |`,r[n-1]],[`${i} |`,m],["|","^".padStart(o)],[`${i+1} |`,r[n+1]]])}function O(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 ee(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,a;let{nodes:i,source:u,positions:o,path:s,originalError:r,extensions:m}=ee(c);super(t),this.name="GraphQLError",this.path=s??void 0,this.originalError=r??void 0,this.nodes=Q(Array.isArray(i)?i:i?[i]:void 0);let f=Q((p=this.nodes)===null||p===void 0?void 0:p.map(l=>l.loc).filter(l=>l!=null));this.source=u??(f==null||(n=f[0])===null||n===void 0?void 0:n.source),this.positions=o??f?.map(l=>l.start),this.locations=o&&u?o.map(l=>A(u,l)):f?.map(l=>A(l.source,l.start));let T=q(r?.extensions)?r?.extensions:void 0;this.extensions=(a=m??T)!==null&&a!==void 0?a: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}}),r!=null&&r.stack?Object.defineProperty(this,"stack",{value:r.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+=`
|
4
4
|
|
5
|
-
`+
|
5
|
+
`+w(c.loc));else if(this.source&&this.locations)for(let c of this.locations)t+=`
|
6
6
|
|
7
|
-
`+L(this.source,m);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 F(e){return e===void 0||e.length===0?void 0:e}var S=class extends Error{constructor(t){super(t),this.name="RumbleError";}},P=class extends B{};var A=(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 A(e,"Distinct")}function oe(e){return typeof e!="function"}function ie(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var V=({db:e})=>{let t=e._.schema,m={},o={},n=i=>({allow:p=>{let l=o[i];l||(l={},o[i]=l);let s=Array.isArray(p)?p:[p];for(let y of s){let r=l[y];r||(r="wildcard",l[y]=r);}return {when:y=>{for(let r of s)l[r]==="wildcard"&&(l[r]=[]),l[r].push(y);}}}});for(let i of Object.keys(e.query))m[i]=n(i);return {...m,registeredConditions:o,buildWithUserContext:i=>{let p={},l=s=>({filter:(y,r)=>{let a=o[s];a||(a={});let f=a[y];if(f==="wildcard")return {where:r?.inject?.where,columns:r?.inject?.columns,limit:r?.inject?.limit};let C=()=>{let x=t[s].primaryKey.at(0);if(!x)throw new S(`No primary key found for entity ${s.toString()}`);let z=j(x.getSQLType());return {where:and(eq(x,z.value1),eq(x,z.value2))}};(!a||!f)&&(f=[C()]);let u=f.filter(oe),g=f.filter(ie).map(x=>x(i)),h=[...u,...g];h.filter(x=>x!==void 0).length===0&&h.push(C());let d;for(let x of h)x?.limit&&(d===void 0||x.limit>d)&&(d=x.limit);r?.inject?.limit&&d<r.inject.limit&&(d=r.inject.limit);let c;for(let x of [...h,r?.inject??{}])x?.columns&&(c===void 0?c=x.columns:c={...c,...x.columns});let b=h.filter(x=>x?.where).map(x=>x?.where),T=b.length>0?or(...b):void 0;return r?.inject?.where&&(T=T?and(T,r.inject.where):r.inject.where),{where:T,columns:c,limit:d}}});for(let s of Object.keys(e.query))p[s]=l(s);return p}}};var $=({context:e,abilityBuilder:t})=>async m=>{let o=e?await e(m):{};return {...o,abilities:t.buildWithUserContext(o)}};function R(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function I(e){let t=E(e);return t.enumValues!==void 0&&t.enumName!==void 0&&typeof t.enumName=="string"&&Array.isArray(t.enumValues)}function E(e){return e.enum??e}var K=({db:e,schemaBuilder:t})=>{let m=new Map;return ({enumVariableName:n,name:i,enumValues:p,enumName:l})=>{let s=e._.fullSchema,y;if(n?y=s[n]:p?y=Object.values(s).filter(I).map(E).find(C=>C.enumValues===p):l&&(y=Object.values(s).filter(I).map(E).find(C=>C.enumName===l)),!y)throw new S(`Could not determine enum structure! (${String(n)}, ${p}, ${l})`);let r=i??`${R(toCamelCase(y.enumName.toString()))}Enum`,a=m.get(r);return a||(a=t.enumType(r,{values:y.enumValues}),m.set(r,a),a)}};function N(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 A(e,"SQL to GQL")}var ae="RUMBLE_SUBSCRIPTION_NOTIFICATION",ue="REMOVED",me="UPDATED",le="CREATED";function U({action:e,tableName:t,primaryKeyValue:m}){let o;switch(e){case "created":o=le;break;case "removed":o=ue;break;case "updated":o=me;break;default:throw new Error(`Unknown action: ${e}`)}return `${ae}/${t}${m?`/${m}`:""}/${o}`}var W=({subscriptions:e})=>{let t=e?createPubSub(...e):createPubSub();return {pubsub:t,makePubSubInstance:({tableName:o})=>({registerOnInstance({instance:n,action:i,primaryKeyValue:p}){let l=U({tableName:o.toString(),action:i,primaryKeyValue:p});n.register(l);},created(){let n=U({tableName:o.toString(),action:"created"});return t.publish(n)},removed(n){let i=U({tableName:o.toString(),action:"removed"});return t.publish(i)},updated(n){let i=U({tableName:o.toString(),action:"updated",primaryKeyValue:n});return t.publish(i)}})}};var J=({db:e,schemaBuilder:t,makePubSubInstance:m,argImplementer:o,enumImplementer:n})=>({tableName:i,name:p,readAction:l="read"})=>{let s=e._.schema[i];if(!s)throw new S(`Could not find schema for ${i.toString()} (object)`);let y=s.primaryKey.at(0)?.name;y||console.warn(`Could not find primary key for ${i.toString()}. Cannot register subscriptions!`);let{registerOnInstance:r}=m({tableName:i});return t.drizzleObject(i,{name:p??R(i.toString()),subscribe:(a,f,C)=>{if(!y)return;let u=f[y];if(!u){console.warn(`Could not find primary key value for ${JSON.stringify(f)}. Cannot register subscription!`);return}r({instance:a,action:"updated",primaryKeyValue:u});},fields:a=>{let f=(g,h,d)=>{let c=N(g);switch(c){case "Int":return a.exposeInt(h,{nullable:d});case "String":return a.exposeString(h,{nullable:d});case "Boolean":return a.exposeBoolean(h,{nullable:d});case "Date":return a.field({type:"Date",resolve:b=>b[h],nullable:d});case "DateTime":return a.field({type:"DateTime",resolve:b=>b[h],nullable:d});case "Float":return a.exposeFloat(h,{nullable:d});case "ID":return a.exposeID(h,{nullable:d});case "JSON":return a.field({type:"JSON",resolve:b=>b[h],nullable:d});default:throw new S(`Unsupported object type ${c} for column ${h}`)}},C=Object.entries(s.columns).reduce((g,[h,d])=>{if(I(d)){let c=E(d),b=n({enumName:c.enumName});g[h]=a.field({type:b,resolve:T=>T[h],nullable:!d.notNull});}else g[h]=f(d.getSQLType(),h,!d.notNull);return g},{}),u=Object.entries(s.relations).reduce((g,[h,d])=>{let{inputType:c,transformArgumentToQueryCondition:b}=o({tableName:d.referencedTableName,nativeTableName:d.referencedTableName}),T=false;return d instanceof One&&(T=!d.isNullable),g[h]=a.relation(h,{args:{where:a.arg({type:c,required:false})},nullable:T,query:(D,x)=>x.abilities[d.referencedTableName].filter(l,{inject:{where:b(D.where)}})}),g},{});return {...C,...u}}})};var q=e=>{if(!e)throw new P("Value not found but required (findFirst)");return e},pe=e=>{let t=e.at(0);if(!t)throw new P("Value not found but required (firstEntry)");return t};var Y=({db:e,schemaBuilder:t,argImplementer:m,makePubSubInstance:o})=>({tableName:n,readAction:i="read",listAction:p="read"})=>{let l=e._.schema[n];if(!l)throw new S(`Could not find schema for ${n.toString()} (query)`);l.primaryKey.at(0)?.name||console.warn(`Could not find primary key for ${n.toString()}. Cannot register subscriptions!`);let{inputType:y,transformArgumentToQueryCondition:r}=m({tableName:n}),{registerOnInstance:a}=o({tableName:n});return t.queryFields(f=>({[`findMany${R(n.toString())}`]:f.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(C,u,g,h,d)=>{a({instance:C,action:"created"}),a({instance:C,action:"removed"});},args:{where:f.arg({type:y,required:false})},resolve:(C,u,g,h,d)=>{let c=h.abilities[n].filter(p,{inject:{where:r(g.where)}}),b=C(c);return c.columns&&(b.columns=c.columns),e.query[n].findMany(b)}}),[`findFirst${R(n.toString())}`]:f.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:f.arg({type:y,required:false})},resolve:(C,u,g,h,d)=>{let c=h.abilities[n].filter(i,{inject:{where:r(g.where)}}),b=C(c);return c.columns&&(b.columns=c.columns),e.query[n].findFirst(b).then(q)}})}))};var H=({db:e,disableDefaultObjects:t,pubsub:m,pothosConfig:o})=>{let n=new de({plugins:[ye,fe,...o?.plugins??[]],...o,drizzle:{client:e},smartSubscriptions:{...subscribeOptionsFromIterator((i,p)=>m.subscribe(i))}});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 Re=e=>`${R(toCamelCase(e.toString()))}WhereInputArgument`,X=({db:e,schemaBuilder:t,enumImplementer:m})=>{let o=new Map,n=({tableName:i,name:p,nativeTableName:l})=>{let s=e._.schema[i];if(l){let f=Object.values(e._.schema).find(C=>C.dbName===l);f&&(s=f);}if(!s)throw new S(`Could not find schema for ${i.toString()} (whereArg)`);let y=p??Re(s.dbName),r=o.get(y);return r||(r={inputType:t.inputType(y,{fields:u=>{let g=c=>{let b=N(c);switch(b){case "Int":return u.int({required:false});case "String":return u.string({required:false});case "Boolean":return u.boolean({required:false});case "Date":return u.field({type:"Date",required:false});case "DateTime":return u.field({type:"DateTime",required:false});case "Float":return u.float({required:false});case "ID":return u.id({required:false});case "JSON":return u.field({type:"JSON",required:false});default:throw new S(`Unsupported argument type ${b} for column ${c}`)}},h=Object.entries(s.columns).reduce((c,[b,T])=>{if(I(T)){let D=E(T),x=m({enumName:D.enumName});c[b]=u.field({type:x,required:false});}else c[b]=g(T.getSQLType());return c},{}),d=Object.entries(s.relations).reduce((c,[b,T])=>{let D=n({tableName:T.referencedTableName,nativeTableName:T.referencedTableName});return c[b]=u.field({type:D.inputType,required:false}),c},{});return {...h,...d}}}),transformArgumentToQueryCondition:u=>{if(!u)return;let g=c=>{let b=s.columns[c],T=u[c];if(T)return eq(b,T)},h=c=>{let b=s.relations[c],T=u[c];if(!T)return;let D=n({tableName:b.referencedTableName,nativeTableName:b.referencedTableName}).transformArgumentToQueryCondition;return D(T)},d=[...Object.keys(s.columns).map(g),...Object.keys(s.relations).map(h)];return and(...d)}},o.set(y,r),r)};return n};var Ee=e=>{let t=V(e),m=$({...e,abilityBuilder:t}),{makePubSubInstance:o,pubsub:n}=W({...e}),{schemaBuilder:i}=H({...e,pubsub:n}),p=K({...e,schemaBuilder:i}),l=X({...e,schemaBuilder:i,enumImplementer:p}),s=J({...e,schemaBuilder:i,makePubSubInstance:o,argImplementer:l,enumImplementer:p}),y=Y({...e,schemaBuilder:i,argImplementer:l,makePubSubInstance:o});return {abilityBuilder:t,schemaBuilder:i,createYoga:a=>createYoga({...a,schema:i.toSchema(),context:m}),object:s,arg:l,query:y,pubsub:o,enum_:p}};
|
8
|
-
export{S as RumbleError,
|
7
|
+
`+U(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 Q(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 v=(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 k(e){if(["serial","int","integer","tinyint","smallint","mediumint"].includes(e))return {value1:1,value2:2};if(["real","decimal","double","float"].includes(e))return {value1:1.1,value2:2.2};if(["string","text","varchar","char","text(256)"].includes(e))return {value1:"a",value2:"b"};if(["uuid"].includes(e))return {value1:"fba31870-5528-42d7-b27e-2e5ee657aea5",value2:"fc65db81-c2d1-483d-8a25-a30e2cf6e02d"};if(["boolean"].includes(e))return {value1:true,value2:false};if(["timestamp","datetime"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["date"].includes(e))return {value1:new Date(2022,1,1),value2:new Date(2022,1,2)};if(["json"].includes(e))return {value1:{a:1},value2:{b:2}};throw v(e,"Distinct")}function oe(e){return typeof e!="function"}function ie(e){return typeof e=="function"&&e.constructor.name!=="AsyncFunction"}var G=({db:e})=>{let t=e._.schema,c={},p={},n=a=>({allow:i=>{let u=p[a];u||(u={},p[a]=u);let o=Array.isArray(i)?i:[i];for(let s of o){let r=u[s];r||(r="wildcard",u[s]=r);}return {when:s=>{for(let r of o)u[r]==="wildcard"&&(u[r]=[]),u[r].push(s);}}}});for(let a of Object.keys(e.query))c[a]=n(a);return {...c,registeredConditions:p,buildWithUserContext:a=>{let i={},u=o=>({filter:(s,r)=>{let m=p[o];m||(m={});let f=m[s];if(f==="wildcard")return {single:{where:r?.inject?.where,columns:r?.inject?.columns},many:{where:r?.inject?.where,columns:r?.inject?.columns,limit:r?.inject?.limit}};let T=()=>{let g=t[o].primaryKey.at(0);if(!g)throw new S(`No primary key found for entity ${o.toString()}`);let D=k(g.getSQLType());return {where:and(eq(g,D.value1),eq(g,D.value2))}};(!m||!f)&&(f=[T()]);let l=f.filter(oe),x=f.filter(ie).map(g=>g(a)),h=[...l,...x];h.filter(g=>g!==void 0).length===0&&h.push(T());let y;for(let g of h)g?.limit&&(y===void 0||g.limit>y)&&(y=g.limit);r?.inject?.limit&&y<r.inject.limit&&(y=r.inject.limit);let d;for(let g of [...h,r?.inject??{}])g?.columns&&(d===void 0?d=g.columns:d={...d,...g.columns});let b=h.filter(g=>g?.where).map(g=>g?.where),C=b.length>0?or(...b):void 0;return r?.inject?.where&&(C=C?and(C,r.inject.where):r.inject.where),{single:{where:C,columns:d},many:{where:C,columns:d,limit:y}}}});for(let o of Object.keys(e.query))i[o]=u(o);return i}}};var _=({context:e,abilityBuilder:t})=>async c=>{let p=e?await e(c):{};return {...p,abilities:t.buildWithUserContext(p)}};function R(e){return String(e).charAt(0).toUpperCase()+String(e).slice(1)}function I(e){let t=E(e);return t.enumValues!==void 0&&t.enumName!==void 0&&typeof t.enumName=="string"&&Array.isArray(t.enumValues)}function E(e){return e.enum??e}var V=({db:e,schemaBuilder:t})=>{let c=new Map;return ({enumVariableName:n,name:a,enumValues:i,enumName:u})=>{let o=e._.fullSchema,s;if(n?s=o[n]:i?s=Object.values(o).filter(I).map(E).find(T=>T.enumValues===i):u&&(s=Object.values(o).filter(I).map(E).find(T=>T.enumName===u)),!s)throw new S(`Could not determine enum structure! (${String(n)}, ${i}, ${u})`);let r=a??`${R(toCamelCase(s.enumName.toString()))}Enum`,m=c.get(r);return m||(m=t.enumType(r,{values:s.enumValues}),c.set(r,m),m)}};function N(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 v(e,"SQL to GQL")}var ae="RUMBLE_SUBSCRIPTION_NOTIFICATION",ue="REMOVED",me="UPDATED",le="CREATED",$=({subscriptions:e,db:t})=>{let c=e?createPubSub(...e):createPubSub();return {pubsub:c,makePubSubInstance:({tableName:n})=>{function a({action:i,tableName:u,primaryKeyValue:o}){let s;switch(i){case "created":s=le;break;case "removed":s=ue;break;case "updated":s=me;break;default:throw new Error(`Unknown action: ${i}`)}return `${ae}/${u}${o?`/${o}`:""}/${s}`}return {registerOnInstance({instance:i,action:u,primaryKeyValue:o}){let s=a({tableName:n.toString(),action:u,primaryKeyValue:o});i.register(s);},created(){let i=a({tableName:n.toString(),action:"created"});return c.publish(i)},removed(i){let u=a({tableName:n.toString(),action:"removed"});return c.publish(u)},updated(i){let o=(Array.isArray(i)?i:[i]).map(r=>a({tableName:n.toString(),action:"updated",primaryKeyValue:r})),s=Array.from(new Set(o));for(let r of s)c.publish(r);}}}}};var M=({db:e,schemaBuilder:t,makePubSubInstance:c,argImplementer:p,enumImplementer:n})=>({tableName:a,name:i,readAction:u="read"})=>{let o=e._.schema[a];if(!o)throw new S(`Could not find schema for ${a.toString()} (object)`);let s=o.primaryKey.at(0)?.name;s||console.warn(`Could not find primary key for ${a.toString()}. Cannot register subscriptions!`);let{registerOnInstance:r}=c({tableName:a});return t.drizzleObject(a,{name:i??R(a.toString()),subscribe:(m,f,T)=>{if(!s)return;let l=f[s];if(!l){console.warn(`Could not find primary key value for ${JSON.stringify(f)}. Cannot register subscription!`);return}r({instance:m,action:"updated",primaryKeyValue:l});},fields:m=>{let f=(x,h,y)=>{let d=N(x);switch(d){case "Int":return m.exposeInt(h,{nullable:y});case "String":return m.exposeString(h,{nullable:y});case "Boolean":return m.exposeBoolean(h,{nullable:y});case "Date":return m.field({type:"Date",resolve:b=>b[h],nullable:y});case "DateTime":return m.field({type:"DateTime",resolve:b=>b[h],nullable:y});case "Float":return m.exposeFloat(h,{nullable:y});case "ID":return m.exposeID(h,{nullable:y});case "JSON":return m.field({type:"JSON",resolve:b=>b[h],nullable:y});default:throw new S(`Unsupported object type ${d} for column ${h}`)}},T=Object.entries(o.columns).reduce((x,[h,y])=>{if(I(y)){let d=E(y),b=n({enumName:d.enumName});x[h]=m.field({type:b,resolve:C=>C[h],nullable:!y.notNull});}else x[h]=f(y.getSQLType(),h,!y.notNull);return x},{}),l=Object.entries(o.relations).reduce((x,[h,y])=>{let {inputType:d,transformArgumentToQueryCondition:b}=p({tableName:y.referencedTableName,nativeTableName:y.referencedTableName}),C=false,D="many";return y instanceof One&&(C=!y.isNullable,D="single"),x[h]=m.relation(h,{args:{where:m.arg({type:d,required:false})},nullable:C,query:(H,X)=>X.abilities[y.referencedTableName].filter(u,{inject:{where:b(H.where)}})[D]}),x},{});return {...T,...l}}})};var L=e=>{if(!e)throw new B("Value not found but required (findFirst)");return e},pe=e=>{let t=e.at(0);if(!t)throw new B("Value not found but required (firstEntry)");return t};var W=({db:e,schemaBuilder:t,argImplementer:c,makePubSubInstance:p})=>({tableName:n,readAction:a="read",listAction:i="read"})=>{let u=e._.schema[n];if(!u)throw new S(`Could not find schema for ${n.toString()} (query)`);u.primaryKey.at(0)?.name||console.warn(`Could not find primary key for ${n.toString()}. Cannot register subscriptions!`);let{inputType:s,transformArgumentToQueryCondition:r}=c({tableName:n}),{registerOnInstance:m}=p({tableName:n});return t.queryFields(f=>({[`findMany${R(n.toString())}`]:f.drizzleField({type:[n],nullable:false,smartSubscription:true,subscribe:(T,l,x,h,y)=>{m({instance:T,action:"created"}),m({instance:T,action:"removed"});},args:{where:f.arg({type:s,required:false})},resolve:(T,l,x,h,y)=>{let d=h.abilities[n].filter(i,{inject:{where:r(x.where)}}).many,b=T(d);return d.columns&&(b.columns=d.columns),e.query[n].findMany(b)}}),[`findFirst${R(n.toString())}`]:f.drizzleField({type:n,nullable:false,smartSubscription:true,args:{where:f.arg({type:s,required:false})},resolve:(T,l,x,h,y)=>{let d=h.abilities[n].filter(a,{inject:{where:r(x.where)}}).single,b=T(d);return d.columns&&(b.columns=d.columns),e.query[n].findFirst(b).then(L)}})}))};var J=({db:e,disableDefaultObjects:t,pubsub:c,pothosConfig:p})=>{let n=new de({plugins:[ye,fe,...p?.plugins??[]],...p,drizzle:{client:e},smartSubscriptions:{...subscribeOptionsFromIterator((a,i)=>c.subscribe(a))}});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 Re=e=>`${R(toCamelCase(e.toString()))}WhereInputArgument`,Y=({db:e,schemaBuilder:t,enumImplementer:c})=>{let p=new Map,n=({tableName:a,name:i,nativeTableName:u})=>{let o=e._.schema[a];if(u){let f=Object.values(e._.schema).find(T=>T.dbName===u);f&&(o=f);}if(!o)throw new S(`Could not find schema for ${a.toString()} (whereArg)`);let s=i??Re(o.dbName),r=p.get(s);return r||(r={inputType:t.inputType(s,{fields:l=>{let x=d=>{let b=N(d);switch(b){case "Int":return l.int({required:false});case "String":return l.string({required:false});case "Boolean":return l.boolean({required:false});case "Date":return l.field({type:"Date",required:false});case "DateTime":return l.field({type:"DateTime",required:false});case "Float":return l.float({required:false});case "ID":return l.id({required:false});case "JSON":return l.field({type:"JSON",required:false});default:throw new S(`Unsupported argument type ${b} for column ${d}`)}},h=Object.entries(o.columns).reduce((d,[b,C])=>{if(I(C)){let g=E(C),D=c({enumName:g.enumName});d[b]=l.field({type:D,required:false});}else d[b]=x(C.getSQLType());return d},{}),y=Object.entries(o.relations).reduce((d,[b,C])=>{let g=n({tableName:C.referencedTableName,nativeTableName:C.referencedTableName});return d[b]=l.field({type:g.inputType,required:false}),d},{});return {...h,...y}}}),transformArgumentToQueryCondition:l=>{if(!l)return;let x=d=>{let b=o.columns[d],C=l[d];if(C)return eq(b,C)},h=d=>{let b=o.relations[d],C=l[d];if(!C)return;let g=n({tableName:b.referencedTableName,nativeTableName:b.referencedTableName}).transformArgumentToQueryCondition;return g(C)},y=[...Object.keys(o.columns).map(x),...Object.keys(o.relations).map(h)];return and(...y)}},p.set(s,r),r)};return n};var Ee=e=>{let t=G(e),c=_({...e,abilityBuilder:t}),{makePubSubInstance:p,pubsub:n}=$({...e}),{schemaBuilder:a}=J({...e,pubsub:n}),i=V({...e,schemaBuilder:a}),u=Y({...e,schemaBuilder:a,enumImplementer:i}),o=M({...e,schemaBuilder:a,makePubSubInstance:p,argImplementer:u,enumImplementer:i}),s=W({...e,schemaBuilder:a,argImplementer:u,makePubSubInstance:p});return {abilityBuilder:t,schemaBuilder:a,createYoga:m=>createYoga({...m,schema:a.toSchema(),context:c}),object:o,arg:u,query:s,pubsub:p,enum_:i}};
|
8
|
+
export{S as RumbleError,B as RumbleErrorSafe,L as assertFindFirstExists,pe as assertFirstEntryExists,Ee as rumble};//# sourceMappingURL=index.js.map
|
9
9
|
//# sourceMappingURL=index.js.map
|