@m1212e/rumble 0.0.7 → 0.0.9
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 +93 -70
- package/index.cjs +1 -1
- package/index.cjs.map +1 -1
- package/index.d.cts +65 -64
- package/index.d.ts +66 -65
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -94,92 +94,115 @@ const UserRef = implementDefaultObject({
|
|
94
94
|
});
|
95
95
|
```
|
96
96
|
|
97
|
-
|
98
|
-
|
97
|
+
#### Automatic arg implementation
|
98
|
+
rumble also supports automatically implementing basic filtering args. Those currently only allow for equality filtering for each field. E.g. the user can pass an email or an id and retrieve only results matching these for equality. Implementation works like this
|
99
|
+
```ts
|
100
|
+
const {
|
101
|
+
// the input arg type, here we rename it to UserWhere
|
102
|
+
inputType: UserWhere,
|
103
|
+
// since drizzle wants proper instantiated filter clauses with `eq` calls and references to each field
|
104
|
+
// we need a transformer function which converts the object received from gql to a drizzle filter
|
105
|
+
transformArgumentToQueryCondition: transformUserWhere,
|
106
|
+
} = implementWhereArg({
|
107
|
+
// for which table to implement this
|
108
|
+
tableName: "users",
|
109
|
+
});
|
110
|
+
```
|
111
|
+
usage of the above argument type may look like this. This query will return all users which the currently logged in user, according to our defined abilities, is allowed to see AND which match the passed filter arguments.
|
99
112
|
```ts
|
100
113
|
schemaBuilder.queryFields((t) => {
|
101
114
|
return {
|
102
115
|
findManyUsers: t.drizzleField({
|
103
116
|
type: [UserRef],
|
117
|
+
args: {
|
118
|
+
// here we set our default type as type for the where argument
|
119
|
+
where: t.arg({ type: UserWhere }),
|
120
|
+
},
|
104
121
|
resolve: (query, root, args, ctx, info) => {
|
105
|
-
return db.query.users.findMany(
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
122
|
+
return db.query.users.findMany(
|
123
|
+
query(
|
124
|
+
ctx.abilities.users.filter("read",
|
125
|
+
// this additional object offers temporarily injecting additional filters to our existing ability filters
|
126
|
+
{
|
127
|
+
// the inject field allows for temp, this time only filters to be added to our ability filters. They will only be applied for this specific call.
|
128
|
+
inject: {
|
129
|
+
// where conditions which are injected will be applied with an AND rather than an OR so the injected filter will further restrict the existing restrictions rather than expanding them
|
130
|
+
where: transformUserWhere(args.where) },
|
131
|
+
})
|
132
|
+
)
|
133
|
+
);
|
110
134
|
},
|
111
135
|
}),
|
112
136
|
};
|
113
137
|
});
|
138
|
+
```
|
114
139
|
|
140
|
+
### Defining queries and mutations
|
141
|
+
Now we can define some things you can do. Again we use pothos for that. So please refer to [the docs](https://pothos-graphql.dev/docs/plugins/drizzle) if something is unclear.
|
142
|
+
```ts
|
115
143
|
schemaBuilder.queryFields((t) => {
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
};
|
144
|
+
return {
|
145
|
+
findManyPosts: t.drizzleField({
|
146
|
+
type: [PostRef],
|
147
|
+
resolve: (query, root, args, ctx, info) => {
|
148
|
+
return db.query.posts.findMany(
|
149
|
+
query(ctx.abilities.posts.filter("read")),
|
150
|
+
);
|
151
|
+
},
|
152
|
+
}),
|
153
|
+
};
|
127
154
|
});
|
128
155
|
|
129
|
-
import {
|
130
|
-
assertFindFirstExists,
|
131
|
-
assertFirstEntryExists,
|
132
|
-
} from "@m1212e/rumble";
|
133
156
|
schemaBuilder.queryFields((t) => {
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
// since there is a type mismatch between
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
157
|
+
return {
|
158
|
+
findFirstUser: t.drizzleField({
|
159
|
+
type: UserRef,
|
160
|
+
resolve: (query, root, args, ctx, info) => {
|
161
|
+
return (
|
162
|
+
db.query.users
|
163
|
+
.findFirst(
|
164
|
+
query({
|
165
|
+
where: ctx.abilities.users.filter("read").where,
|
166
|
+
}),
|
167
|
+
)
|
168
|
+
// note that we need to manually raise an error if the value is not found
|
169
|
+
// since there is a type mismatch between drizzle and pothos
|
170
|
+
.then(assertFindFirstExists)
|
171
|
+
);
|
172
|
+
},
|
173
|
+
}),
|
174
|
+
};
|
152
175
|
});
|
153
|
-
|
154
|
-
|
155
|
-
```ts
|
176
|
+
|
177
|
+
// mutation to update the username
|
156
178
|
schemaBuilder.mutationFields((t) => {
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
179
|
+
return {
|
180
|
+
updateUsername: t.drizzleField({
|
181
|
+
type: UserRef,
|
182
|
+
args: {
|
183
|
+
userId: t.arg.int({ required: true }),
|
184
|
+
newName: t.arg.string({ required: true }),
|
185
|
+
},
|
186
|
+
resolve: (query, root, args, ctx, info) => {
|
187
|
+
return (
|
188
|
+
db
|
189
|
+
.update(schema.users)
|
190
|
+
.set({
|
191
|
+
name: args.newName,
|
192
|
+
})
|
193
|
+
.where(
|
194
|
+
and(
|
195
|
+
eq(schema.users.id, args.userId),
|
196
|
+
ctx.abilities.users.filter("update").where,
|
197
|
+
),
|
198
|
+
)
|
199
|
+
.returning({ id: schema.users.id, name: schema.users.name })
|
200
|
+
// note the different error mapper
|
201
|
+
.then(assertFirstEntryExists)
|
202
|
+
);
|
203
|
+
},
|
204
|
+
}),
|
205
|
+
};
|
184
206
|
});
|
207
|
+
|
185
208
|
```
|
package/index.cjs
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
'use strict';var P=require('@pothos/core'),
|
1
|
+
'use strict';var P=require('@pothos/core'),j=require('@pothos/plugin-drizzle'),drizzleOrm=require('drizzle-orm'),graphqlYoga=require('graphql-yoga');require('console');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);var j__default=/*#__PURE__*/_interopDefault(j);function E(r){return typeof r!="function"}function Q(r){return typeof r=="function"&&r.constructor.name!=="AsyncFunction"}var B=({db:r})=>{let l={},x={},D=f=>({allow:p=>{let y=x[f];y||(y={},x[f]=y);let i=Array.isArray(p)?p:[p];for(let C of i){let s=y[C];s||(s=[],y[C]=s);}return {when:C=>{for(let s of i)y[s].push(C);}}}});for(let f of Object.keys(r.query))l[f]=D(f);return {...l,registeredConditions:x,buildWithUserContext:f=>{let p={},y=i=>({filter:(C,s)=>{let c=x[i];if(!c)throw "TODO (No allowed entry found for this condition) #1";let d=c[C];if(!d)throw "TODO (No allowed entry found for this condition) #2";let T=d.filter(E),h=d.filter(Q).map(n=>n(f)),a=[...T,...h],o;for(let n of a)n.limit&&(o===void 0||n.limit>o)&&(o=n.limit);s?.inject?.limit&&o<s.inject.limit&&(o=s.inject.limit);let u;for(let n of [...a,s?.inject??{}])n.columns&&(u===void 0?u=n.columns:u={...u,...n.columns});let b=a.filter(n=>n.where).map(n=>n.where),t=b.length>0?drizzleOrm.or(...b):void 0;return s?.inject?.where&&(t=t?drizzleOrm.and(t,s.inject.where):s.inject.where),{where:t,columns:u,limit:o}}});for(let i of Object.keys(r.query))p[i]=y(i);return p}}};var m=class extends Error{constructor(l){super(l),this.name="RumbleError";}};var U=({db:r,nativeServerOptions:l,context:x,onlyQuery:D=!1,actions:f=["create","read","update","delete"]})=>{let p=B({db:r}),y=async c=>{let d=x?await x(c):{};return {...d,abilities:p.buildWithUserContext(d)}},i=new P__default.default({plugins:[j__default.default],drizzle:{client:r}});return i.queryType({}),D||i.mutationType({}),{abilityBuilder:p,schemaBuilder:i,yoga:()=>graphqlYoga.createYoga({...l,schema:i.toSchema(),context:y}),implementDefaultObject:({tableName:c,name:d,readAction:T="read"})=>{let h=r._.schema[c];return i.drizzleObject(c,{name:d,fields:a=>{let o=(t,e)=>{switch(t){case"serial":return a.exposeInt(e);case"int":return a.exposeInt(e);case"string":return a.exposeString(e);case"text":return a.exposeString(e);case"boolean":return a.exposeBoolean(e);default:throw new m(`Unknown SQL type: ${t}. Please open an issue so it can be added.`)}},u=Object.entries(h.columns).reduce((t,[e,n])=>(t[e]=o(n.getSQLType(),e),t),{}),b=Object.entries(h.relations).reduce((t,[e,n])=>(t[e]=a.relation(e,{query:(L,g)=>g.abilities[e].filter(T)}),t),{});return {...u,...b}}})},implementWhereArg:({tableName:c,name:d})=>{let T=r._.schema[c];return {inputType:i.inputType(d??`${String(c).charAt(0).toUpperCase()+String(c).slice(1)}WhereInputArgument`,{fields:o=>{let u=(t,e)=>{switch(t){case"serial":return o.int(e,{required:!1});case"int":return o.int(e,{required:!1});case"string":return o.string(e,{required:!1});case"text":return o.string(e,{required:!1});case"boolean":return o.boolean(e,{required:!1});default:throw new m(`Unknown SQL type: ${t} (input). Please open an issue so it can be added.`)}};return {...Object.entries(T.columns).reduce((t,[e,n])=>(t[e]=u(n.getSQLType(),e),t),{})}}}),transformArgumentToQueryCondition:o=>{if(!o)return;let u=t=>{let e=T.columns[t],n=o[t];if(n)return drizzleOrm.eq(e,n)},b=Object.keys(T.columns).map(u);return drizzleOrm.and(...b)}}}}};var z=r=>{if(!r)throw new m("Value not found but required (findFirst)");return r},q=r=>{let l=r.at(0);if(!l)throw new m("Value not found but required (firstEntry)");return l};exports.RumbleError=m;exports.assertFindFirstExists=z;exports.assertFirstEntryExists=q;exports.rumble=U;//# sourceMappingURL=index.cjs.map
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/index.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../lib/abilities/builder.ts","../lib/helpers/rumbleError.ts","../lib/gql/builder.ts","../lib/helpers/helper.ts"],"names":["isSimpleCondition","condition","isSyncFunctionCondition","createAbilityBuilder","db","builder","registeredConditions","createEntityObject","entityKey","action","conditionsPerEntity","actions","conditionsPerEntityAndAction","userContext","simpleConditions","syncFunctionConditions","allConditionObjects","highestLimit","conditionObject","combinedAllowedColumns","accumulatedWhereConditions","o","or","RumbleError","message","rumble","nativeServerOptions","makeUserContext","onlyQuery","abilityBuilder","makeContext","req","nativeBuilder","SchemaBuilder","DrizzlePlugin","createYoga","tableName","name","readAction","schema","t","mapSQLTypeStringToExposedPothosType","sqlType","columnName","fields","acc","key","value","relations","_args","ctx","assertFindFirstExists","assertFirstEntryExists","v"],"mappings":"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","file":"index.cjs","sourcesContent":["import { or } from \"drizzle-orm\";\nimport type {\n\tGenericDrizzleDbTypeConstraints,\n\tQueryConditionObject,\n} from \"../types/genericDrizzleDbType\";\n\nexport type AbilityBuilder = ReturnType<typeof createAbilityBuilder>;\n\ntype Condition<DBParameters, UserContext> =\n\t| SimpleCondition<DBParameters>\n\t| SyncFunctionCondition<DBParameters, UserContext>;\n// | AsyncFunctionCondition<DBParameters, UserContext>;\n\ntype SimpleCondition<DBParameters> = DBParameters;\ntype SyncFunctionCondition<DBParameters, UserContext> = (\n\tcontext: UserContext,\n) => DBParameters;\n// type AsyncFunctionCondition<DBParameters, UserContext> = (\n// \tcontext: UserContext,\n// ) => Promise<DBParameters>;\n\n// type guards for the condition types\nfunction isSimpleCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SimpleCondition<DBParameters> {\n\treturn typeof condition !== \"function\";\n}\n\nfunction isSyncFunctionCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SyncFunctionCondition<DBParameters, UserContext> {\n\treturn (\n\t\ttypeof condition === \"function\" &&\n\t\tcondition.constructor.name !== \"AsyncFunction\"\n\t);\n}\n\n// function isAsyncFunctionCondition<DBParameters, UserContext>(\n// \tcondition: Condition<DBParameters, UserContext>,\n// ): condition is AsyncFunctionCondition<DBParameters, UserContext> {\n// \treturn (\n// \t\ttypeof condition === \"function\" &&\n// \t\tcondition.constructor.name === \"AsyncFunction\"\n// \t);\n// }\n\nexport const createAbilityBuilder = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tAction extends string,\n>({\n\tdb,\n}: {\n\tdb: DB;\n}) => {\n\ttype DBQueryKey = keyof DB[\"query\"];\n\ttype DBParameters = Parameters<DB[\"query\"][DBQueryKey][\"findMany\"]>[0];\n\n\tconst builder: {\n\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t} = {} as any;\n\n\tconst registeredConditions: {\n\t\t[key in DBQueryKey]: {\n\t\t\t[key in Action[number]]: (\n\t\t\t\t| QueryConditionObject\n\t\t\t\t| ((context: UserContext) => QueryConditionObject)\n\t\t\t)[];\n\t\t\t// | ((context: UserContext) => Promise<QueryConditionObject>)\n\t\t};\n\t} = {} as any;\n\n\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\tallow: (action: Action | Action[]) => {\n\t\t\tlet conditionsPerEntity = registeredConditions[entityKey];\n\t\t\tif (!conditionsPerEntity) {\n\t\t\t\tconditionsPerEntity = {} as any;\n\t\t\t\tregisteredConditions[entityKey] = conditionsPerEntity;\n\t\t\t}\n\n\t\t\tconst actions = Array.isArray(action) ? action : [action];\n\t\t\tfor (const action of actions) {\n\t\t\t\tlet conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\tconditionsPerEntityAndAction = [];\n\t\t\t\t\tconditionsPerEntity[action] = conditionsPerEntityAndAction;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\twhen: (condition: Condition<DBParameters, UserContext>) => {\n\t\t\t\t\tfor (const action of actions) {\n\t\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\t\tconditionsPerEntityAndAction.push(condition);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t});\n\n\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t}\n\treturn {\n\t\t...builder,\n\t\tregisteredConditions,\n\t\tbuildWithUserContext: (userContext: UserContext) => {\n\t\t\tconst builder: {\n\t\t\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t\t\t} = {} as any;\n\n\t\t\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\t\t\tfilter: (action: Action) => {\n\t\t\t\t\tconst conditionsPerEntity = registeredConditions[entityKey];\n\t\t\t\t\tif (!conditionsPerEntity) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #1\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #2\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst simpleConditions =\n\t\t\t\t\t\tconditionsPerEntityAndAction.filter(isSimpleCondition);\n\n\t\t\t\t\tconst syncFunctionConditions = conditionsPerEntityAndAction\n\t\t\t\t\t\t.filter(isSyncFunctionCondition)\n\t\t\t\t\t\t.map((condition) => condition(userContext));\n\n\t\t\t\t\t// const asyncFunctionConditions = await Promise.all(\n\t\t\t\t\t// \tconditionsPerEntityAndAction\n\t\t\t\t\t// \t\t.filter(isAsyncFunctionCondition)\n\t\t\t\t\t// \t\t.map((condition) => condition(userContext)),\n\t\t\t\t\t// );\n\n\t\t\t\t\tconst allConditionObjects = [\n\t\t\t\t\t\t...simpleConditions,\n\t\t\t\t\t\t...syncFunctionConditions,\n\t\t\t\t\t\t// ...asyncFunctionConditions,\n\t\t\t\t\t];\n\n\t\t\t\t\tlet highestLimit = undefined;\n\t\t\t\t\tfor (const conditionObject of allConditionObjects) {\n\t\t\t\t\t\tif (conditionObject.limit) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\thighestLimit === undefined ||\n\t\t\t\t\t\t\t\tconditionObject.limit > highestLimit\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\thighestLimit = conditionObject.limit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet combinedAllowedColumns: Record<string, any> | undefined =\n\t\t\t\t\t\tundefined;\n\t\t\t\t\tfor (const conditionObject of allConditionObjects) {\n\t\t\t\t\t\tif (conditionObject.columns) {\n\t\t\t\t\t\t\tif (combinedAllowedColumns === undefined) {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = conditionObject.columns;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = {\n\t\t\t\t\t\t\t\t\t...combinedAllowedColumns,\n\t\t\t\t\t\t\t\t\t...conditionObject.columns,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst accumulatedWhereConditions = allConditionObjects\n\t\t\t\t\t\t.filter((o) => o.where)\n\t\t\t\t\t\t.map((o) => o.where);\n\n\t\t\t\t\tconst combinedWhere =\n\t\t\t\t\t\taccumulatedWhereConditions.length > 0\n\t\t\t\t\t\t\t? or(...accumulatedWhereConditions)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\twhere: combinedWhere,\n\t\t\t\t\t\tcolumns: combinedAllowedColumns,\n\t\t\t\t\t\tlimit: highestLimit,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\t\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t\t\t}\n\n\t\t\treturn builder;\n\t\t},\n\t};\n};\n","export class RumbleError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RumbleError\";\n\t}\n}\n","import SchemaBuilder from \"@pothos/core\";\nimport DrizzlePlugin from \"@pothos/plugin-drizzle\";\nimport { type YogaServerOptions, createYoga } from \"graphql-yoga\";\nimport { createAbilityBuilder } from \"../abilities/builder\";\nimport { RumbleError } from \"../helpers/rumbleError\";\nimport type { GenericDrizzleDbTypeConstraints } from \"../types/genericDrizzleDbType\";\n\nexport const rumble = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tRequestEvent extends Record<string, any>,\n\tAction extends string = \"create\" | \"read\" | \"update\" | \"delete\",\n>({\n\tdb,\n\tnativeServerOptions,\n\tcontext: makeUserContext,\n\tonlyQuery = false,\n\tactions = [\"create\", \"read\", \"update\", \"delete\"] as Action[],\n}: {\n\t/**\n\t * Your drizzle database instance\n\t */\n\tdb: DB;\n\t/**\n\t * Optional options for the native GraphQL Yoga server\n\t */\n\tnativeServerOptions?:\n\t\t| Omit<YogaServerOptions<RequestEvent, any>, \"schema\" | \"context\">\n\t\t| undefined;\n\t/**\n\t * A function for providing context for each request based on the incoming HTTP Request.\n\t * The type of the parameter equals the HTTPRequest type of your chosen server.\n\t */\n\tcontext?:\n\t\t| ((event: RequestEvent) => Promise<UserContext> | UserContext)\n\t\t| undefined;\n\t/**\n\t * If you only want to create queries and do not need mutations, enable this\n\t */\n\tonlyQuery?: boolean;\n\t/**\n\t * The actions that are available\n\t */\n\tactions?: Action[];\n}) => {\n\tconst abilityBuilder = createAbilityBuilder<UserContext, DB, Action>({\n\t\tdb,\n\t});\n\n\tconst makeContext = async (req: RequestEvent) => {\n\t\tconst userContext = makeUserContext\n\t\t\t? await makeUserContext(req)\n\t\t\t: ({} as UserContext);\n\t\treturn {\n\t\t\t...userContext,\n\t\t\tabilities: abilityBuilder.buildWithUserContext(userContext),\n\t\t};\n\t};\n\n\tconst nativeBuilder = new SchemaBuilder<{\n\t\tContext: Awaited<ReturnType<typeof makeContext>>;\n\t\t// Scalars: Scalars<Prisma.Decimal, Prisma.InputJsonValue | null, Prisma.InputJsonValue> & {\n\t\t// \tFile: {\n\t\t// \t\tInput: File;\n\t\t// \t\tOutput: never;\n\t\t// \t};\n\t\t// \tJSONObject: {\n\t\t// \t\tInput: any;\n\t\t// \t\tOutput: any;\n\t\t// \t};\n\t\t// };\n\t\tDrizzleSchema: DB[\"_\"][\"fullSchema\"];\n\t\tDefaultFieldNullability: false;\n\t\tDefaultArgumentNullability: false;\n\t\tDefaultInputFieldRequiredness: true;\n\t}>({\n\t\tplugins: [DrizzlePlugin],\n\t\tdrizzle: {\n\t\t\tclient: db,\n\t\t},\n\t\tdefaultFieldNullability: false,\n\t\tdefaultInputFieldRequiredness: true,\n\t});\n\n\tnativeBuilder.queryType({});\n\n\tif (!onlyQuery) {\n\t\tnativeBuilder.mutationType({});\n\t}\n\n\tconst implementDefaultObject = <\n\t\tExplicitTableName extends Parameters<typeof nativeBuilder.drizzleObject>[0],\n\t\tRefName extends string,\n\t>({\n\t\ttableName,\n\t\tname,\n\t\treadAction = \"read\" as Action,\n\t}: {\n\t\ttableName: ExplicitTableName;\n\t\tname: RefName;\n\t\treadAction?: Action;\n\t}) => {\n\t\tconst schema = db._.schema![tableName];\n\t\treturn nativeBuilder.drizzleObject(tableName, {\n\t\t\tname,\n\t\t\tfields: (t) => {\n\t\t\t\tconst mapSQLTypeStringToExposedPothosType = (\n\t\t\t\t\tsqlType: string,\n\t\t\t\t\tcolumnName: string,\n\t\t\t\t) => {\n\t\t\t\t\tswitch (sqlType) {\n\t\t\t\t\t\tcase \"serial\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeBoolean(columnName);\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new RumbleError(\n\t\t\t\t\t\t\t\t`Unknown SQL type: ${sqlType}. Please open an issue so it can be added.`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst fields = Object.entries(schema.columns).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = mapSQLTypeStringToExposedPothosType(\n\t\t\t\t\t\t\tvalue.getSQLType(),\n\t\t\t\t\t\t\tvalue.name,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\tconst relations = Object.entries(schema.relations).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = t.relation(key, {\n\t\t\t\t\t\t\tquery: (_args: any, ctx: any) =>\n\t\t\t\t\t\t\t\tctx.abilities[tableName].filter(readAction),\n\t\t\t\t\t\t} as any) as any;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\t...fields,\n\t\t\t\t\t...relations,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t};\n\n\treturn {\n\t\t/**\n * The ability builder. Use it to declare whats allowed for each entity in your DB.\n * \n * @example\n * \n * ```ts\n * // users can edit themselves\n abilityBuilder.users\n .allow([\"read\", \"update\", \"delete\"])\n .when(({ userId }) => ({ where: eq(schema.users.id, userId) }));\n \n // everyone can read posts\n abilityBuilder.posts.allow(\"read\");\n * \n * ```\n */\n\t\tabilityBuilder,\n\t\t/**\n\t\t * The pothos schema builder. See https://pothos-graphql.dev/docs/plugins/drizzle\n\t\t */\n\t\tschemaBuilder: nativeBuilder,\n\t\t/**\n * The native yoga instance. Can be used to run an actual HTTP server.\n * \n * @example\n * \n * ```ts\n import { createServer } from \"node:http\";\n * const server = createServer(yoga());\n server.listen(3000, () => {\n console.log(\"Visit http://localhost:3000/graphql\");\n });\n * ```\n */\n\t\tyoga: () =>\n\t\t\tcreateYoga<RequestEvent>({\n\t\t\t\t...nativeServerOptions,\n\t\t\t\tschema: nativeBuilder.toSchema(),\n\t\t\t\tcontext: makeContext,\n\t\t\t}),\n\t\t/**\n\t\t * A function for creating default objects for your schema\n\t\t */\n\t\timplementDefaultObject,\n\t};\n};\n","import { RumbleError } from \"./rumbleError\";\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n * schemaBuilder.queryFields((t) => {\n return {\n findFirstUser: t.drizzleField({\n type: UserRef,\n resolve: (query, root, args, ctx, info) => {\n return (\n db.query.users\n .findFirst({\n ...query,\n where: ctx.abilities.users.filter(\"read\").where,\n })\n // note that we need to manually raise an error if the value is not found\n .then(assertFindFirstExists)\n );\n },\n }),\n };\n });\n * ```\n */\nexport const assertFindFirstExists = <T>(value: T | undefined): T => {\n\tif (!value) throw new RumbleError(\"Value not found but required (findFirst)\");\n\treturn value;\n};\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n schemaBuilder.mutationFields((t) => {\n return {\n updateUsername: t.drizzleField({\n type: UserRef,\n args: {\n userId: t.arg.int({ required: true }),\n newName: t.arg.string({ required: true }),\n },\n resolve: (query, root, args, ctx, info) => {\n return db\n .update(schema.users)\n .set({\n name: args.newName,\n })\n .where(\n and(\n eq(schema.users.id, args.userId),\n ctx.abilities.users.filter(\"update\").where\n )\n )\n .returning({ id: schema.users.id, name: schema.users.name })\n // note that we need to manually raise an error if the value is not found\n .then(assertFirstEntryExists);\n },\n }),\n };\n });\n * ```\n */\nexport const assertFirstEntryExists = <T>(value: T[]): T => {\n\tconst v = value.at(0);\n\tif (!v) throw new RumbleError(\"Value not found but required (firstEntry)\");\n\treturn v;\n};\n"]}
|
1
|
+
{"version":3,"sources":["../lib/abilities/builder.ts","../lib/helpers/rumbleError.ts","../lib/gql/builder.ts","../lib/helpers/helper.ts"],"names":["isSimpleCondition","condition","isSyncFunctionCondition","createAbilityBuilder","db","builder","registeredConditions","createEntityObject","entityKey","action","conditionsPerEntity","actions","conditionsPerEntityAndAction","userContext","options","simpleConditions","syncFunctionConditions","allConditionObjects","highestLimit","conditionObject","combinedAllowedColumns","accumulatedWhereConditions","o","combinedWhere","or","and","RumbleError","message","rumble","nativeServerOptions","makeUserContext","onlyQuery","abilityBuilder","makeContext","req","nativeBuilder","SchemaBuilder","DrizzlePlugin","createYoga","tableName","name","readAction","schema","t","mapSQLTypeStringToExposedPothosType","sqlType","columnName","fields","acc","key","value","relations","_args","ctx","mapSQLTypeStringToInputPothosType","arg","mapColumnToQueryCondition","columnname","column","filterValue","eq","conditions","assertFindFirstExists","assertFirstEntryExists","v"],"mappings":"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","file":"index.cjs","sourcesContent":["import { log } from \"node:console\";\nimport { and, or } from \"drizzle-orm\";\nimport type {\n\tGenericDrizzleDbTypeConstraints,\n\tQueryConditionObject,\n} from \"../types/genericDrizzleDbType\";\n\nexport type AbilityBuilder = ReturnType<typeof createAbilityBuilder>;\n\ntype Condition<DBParameters, UserContext> =\n\t| SimpleCondition<DBParameters>\n\t| SyncFunctionCondition<DBParameters, UserContext>;\n// | AsyncFunctionCondition<DBParameters, UserContext>;\n\ntype SimpleCondition<DBParameters> = DBParameters;\ntype SyncFunctionCondition<DBParameters, UserContext> = (\n\tcontext: UserContext,\n) => DBParameters;\n// type AsyncFunctionCondition<DBParameters, UserContext> = (\n// \tcontext: UserContext,\n// ) => Promise<DBParameters>;\n\n// type guards for the condition types\nfunction isSimpleCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SimpleCondition<DBParameters> {\n\treturn typeof condition !== \"function\";\n}\n\nfunction isSyncFunctionCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SyncFunctionCondition<DBParameters, UserContext> {\n\treturn (\n\t\ttypeof condition === \"function\" &&\n\t\tcondition.constructor.name !== \"AsyncFunction\"\n\t);\n}\n\n// function isAsyncFunctionCondition<DBParameters, UserContext>(\n// \tcondition: Condition<DBParameters, UserContext>,\n// ): condition is AsyncFunctionCondition<DBParameters, UserContext> {\n// \treturn (\n// \t\ttypeof condition === \"function\" &&\n// \t\tcondition.constructor.name === \"AsyncFunction\"\n// \t);\n// }\n\nexport const createAbilityBuilder = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tAction extends string,\n>({\n\tdb,\n}: {\n\tdb: DB;\n}) => {\n\ttype DBQueryKey = keyof DB[\"query\"];\n\ttype DBParameters = Parameters<DB[\"query\"][DBQueryKey][\"findMany\"]>[0];\n\n\tconst builder: {\n\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t} = {} as any;\n\n\tconst registeredConditions: {\n\t\t[key in DBQueryKey]: {\n\t\t\t[key in Action[number]]: (\n\t\t\t\t| QueryConditionObject\n\t\t\t\t| ((context: UserContext) => QueryConditionObject)\n\t\t\t)[];\n\t\t\t// | ((context: UserContext) => Promise<QueryConditionObject>)\n\t\t};\n\t} = {} as any;\n\n\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\tallow: (action: Action | Action[]) => {\n\t\t\tlet conditionsPerEntity = registeredConditions[entityKey];\n\t\t\tif (!conditionsPerEntity) {\n\t\t\t\tconditionsPerEntity = {} as any;\n\t\t\t\tregisteredConditions[entityKey] = conditionsPerEntity;\n\t\t\t}\n\n\t\t\tconst actions = Array.isArray(action) ? action : [action];\n\t\t\tfor (const action of actions) {\n\t\t\t\tlet conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\tconditionsPerEntityAndAction = [];\n\t\t\t\t\tconditionsPerEntity[action] = conditionsPerEntityAndAction;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\twhen: (condition: Condition<DBParameters, UserContext>) => {\n\t\t\t\t\tfor (const action of actions) {\n\t\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\t\tconditionsPerEntityAndAction.push(condition);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t});\n\n\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t}\n\treturn {\n\t\t...builder,\n\t\tregisteredConditions,\n\t\tbuildWithUserContext: (userContext: UserContext) => {\n\t\t\tconst builder: {\n\t\t\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t\t\t} = {} as any;\n\n\t\t\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\t\t\tfilter: (\n\t\t\t\t\taction: Action,\n\t\t\t\t\toptions?: {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Additional conditions applied only for this call. Useful for injecting one time additional filters\n\t\t\t\t\t\t * for e.g. user args in a handler.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tinject?: QueryConditionObject;\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\tconst conditionsPerEntity = registeredConditions[entityKey];\n\t\t\t\t\tif (!conditionsPerEntity) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #1\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #2\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst simpleConditions =\n\t\t\t\t\t\tconditionsPerEntityAndAction.filter(isSimpleCondition);\n\n\t\t\t\t\tconst syncFunctionConditions = conditionsPerEntityAndAction\n\t\t\t\t\t\t.filter(isSyncFunctionCondition)\n\t\t\t\t\t\t.map((condition) => condition(userContext));\n\n\t\t\t\t\t// const asyncFunctionConditions = await Promise.all(\n\t\t\t\t\t// \tconditionsPerEntityAndAction\n\t\t\t\t\t// \t\t.filter(isAsyncFunctionCondition)\n\t\t\t\t\t// \t\t.map((condition) => condition(userContext)),\n\t\t\t\t\t// );\n\n\t\t\t\t\tconst allConditionObjects = [\n\t\t\t\t\t\t...simpleConditions,\n\t\t\t\t\t\t...syncFunctionConditions,\n\t\t\t\t\t\t// ...asyncFunctionConditions,\n\t\t\t\t\t];\n\n\t\t\t\t\tlet highestLimit = undefined;\n\t\t\t\t\tfor (const conditionObject of allConditionObjects) {\n\t\t\t\t\t\tif (conditionObject.limit) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\thighestLimit === undefined ||\n\t\t\t\t\t\t\t\tconditionObject.limit > highestLimit\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\thighestLimit = conditionObject.limit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options?.inject?.limit && highestLimit < options.inject.limit) {\n\t\t\t\t\t\thighestLimit = options.inject.limit;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet combinedAllowedColumns: Record<string, any> | undefined =\n\t\t\t\t\t\tundefined;\n\t\t\t\t\tfor (const conditionObject of [\n\t\t\t\t\t\t...allConditionObjects,\n\t\t\t\t\t\toptions?.inject ?? {},\n\t\t\t\t\t]) {\n\t\t\t\t\t\tif (conditionObject.columns) {\n\t\t\t\t\t\t\tif (combinedAllowedColumns === undefined) {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = conditionObject.columns;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = {\n\t\t\t\t\t\t\t\t\t...combinedAllowedColumns,\n\t\t\t\t\t\t\t\t\t...conditionObject.columns,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst accumulatedWhereConditions = allConditionObjects\n\t\t\t\t\t\t.filter((o) => o.where)\n\t\t\t\t\t\t.map((o) => o.where);\n\n\t\t\t\t\tlet combinedWhere =\n\t\t\t\t\t\taccumulatedWhereConditions.length > 0\n\t\t\t\t\t\t\t? or(...accumulatedWhereConditions)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tif (options?.inject?.where) {\n\t\t\t\t\t\tcombinedWhere = combinedWhere\n\t\t\t\t\t\t\t? and(combinedWhere, options.inject.where)\n\t\t\t\t\t\t\t: options.inject.where;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst ret = {\n\t\t\t\t\t\twhere: combinedWhere,\n\t\t\t\t\t\tcolumns: combinedAllowedColumns,\n\t\t\t\t\t\tlimit: highestLimit,\n\t\t\t\t\t};\n\n\t\t\t\t\t//TODO make this typesafe per actual entity\n\t\t\t\t\treturn ret;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\t\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t\t\t}\n\n\t\t\treturn builder;\n\t\t},\n\t};\n};\n","export class RumbleError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RumbleError\";\n\t}\n}\n","import SchemaBuilder from \"@pothos/core\";\nimport DrizzlePlugin from \"@pothos/plugin-drizzle\";\nimport { and, eq } from \"drizzle-orm\";\nimport { type YogaServerOptions, createYoga } from \"graphql-yoga\";\nimport { createAbilityBuilder } from \"../abilities/builder\";\nimport { RumbleError } from \"../helpers/rumbleError\";\nimport type {\n\tGenericDrizzleDbTypeConstraints,\n\tQueryConditionObject,\n} from \"../types/genericDrizzleDbType\";\n\nexport const rumble = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tRequestEvent extends Record<string, any>,\n\tAction extends string = \"create\" | \"read\" | \"update\" | \"delete\",\n>({\n\tdb,\n\tnativeServerOptions,\n\tcontext: makeUserContext,\n\tonlyQuery = false,\n\tactions = [\"create\", \"read\", \"update\", \"delete\"] as Action[],\n}: {\n\t/**\n\t * Your drizzle database instance\n\t */\n\tdb: DB;\n\t/**\n\t * Optional options for the native GraphQL Yoga server\n\t */\n\tnativeServerOptions?:\n\t\t| Omit<YogaServerOptions<RequestEvent, any>, \"schema\" | \"context\">\n\t\t| undefined;\n\t/**\n\t * A function for providing context for each request based on the incoming HTTP Request.\n\t * The type of the parameter equals the HTTPRequest type of your chosen server.\n\t */\n\tcontext?:\n\t\t| ((event: RequestEvent) => Promise<UserContext> | UserContext)\n\t\t| undefined;\n\t/**\n\t * If you only want to create queries and do not need mutations, enable this\n\t */\n\tonlyQuery?: boolean;\n\t/**\n\t * The actions that are available\n\t */\n\tactions?: Action[];\n}) => {\n\tconst abilityBuilder = createAbilityBuilder<UserContext, DB, Action>({\n\t\tdb,\n\t});\n\n\tconst makeContext = async (req: RequestEvent) => {\n\t\tconst userContext = makeUserContext\n\t\t\t? await makeUserContext(req)\n\t\t\t: ({} as UserContext);\n\t\treturn {\n\t\t\t...userContext,\n\t\t\tabilities: abilityBuilder.buildWithUserContext(userContext),\n\t\t};\n\t};\n\n\tconst nativeBuilder = new SchemaBuilder<{\n\t\tContext: Awaited<ReturnType<typeof makeContext>>;\n\t\t// Scalars: Scalars<Prisma.Decimal, Prisma.InputJsonValue | null, Prisma.InputJsonValue> & {\n\t\t// \tFile: {\n\t\t// \t\tInput: File;\n\t\t// \t\tOutput: never;\n\t\t// \t};\n\t\t// \tJSONObject: {\n\t\t// \t\tInput: any;\n\t\t// \t\tOutput: any;\n\t\t// \t};\n\t\t// };\n\t\tDrizzleSchema: DB[\"_\"][\"fullSchema\"];\n\t}>({\n\t\tplugins: [DrizzlePlugin],\n\t\tdrizzle: {\n\t\t\tclient: db,\n\t\t},\n\t});\n\n\tnativeBuilder.queryType({});\n\n\tif (!onlyQuery) {\n\t\tnativeBuilder.mutationType({});\n\t}\n\n\tconst implementDefaultObject = <\n\t\tExplicitTableName extends keyof NonNullable<DB[\"_\"][\"schema\"]>,\n\t\tRefName extends string,\n\t>({\n\t\ttableName,\n\t\tname,\n\t\treadAction = \"read\" as Action,\n\t}: {\n\t\ttableName: ExplicitTableName;\n\t\tname: RefName;\n\t\treadAction?: Action;\n\t}) => {\n\t\tconst schema = (db._.schema as NonNullable<DB[\"_\"][\"schema\"]>)[tableName];\n\n\t\treturn nativeBuilder.drizzleObject(tableName, {\n\t\t\tname,\n\t\t\tfields: (t) => {\n\t\t\t\tconst mapSQLTypeStringToExposedPothosType = <\n\t\t\t\t\tColumn extends keyof typeof schema.columns,\n\t\t\t\t\tSQLType extends ReturnType<\n\t\t\t\t\t\t(typeof schema.columns)[Column][\"getSQLType\"]\n\t\t\t\t\t>,\n\t\t\t\t>(\n\t\t\t\t\tsqlType: SQLType,\n\t\t\t\t\tcolumnName: Column,\n\t\t\t\t) => {\n\t\t\t\t\tswitch (sqlType) {\n\t\t\t\t\t\tcase \"serial\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeBoolean(columnName);\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new RumbleError(\n\t\t\t\t\t\t\t\t`Unknown SQL type: ${sqlType}. Please open an issue so it can be added.`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst fields = Object.entries(schema.columns).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = mapSQLTypeStringToExposedPothosType(\n\t\t\t\t\t\t\tvalue.getSQLType(),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tkeyof typeof schema.columns,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\tconst relations = Object.entries(schema.relations).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = t.relation(key, {\n\t\t\t\t\t\t\tquery: (_args: any, ctx: any) =>\n\t\t\t\t\t\t\t\tctx.abilities[key].filter(readAction),\n\t\t\t\t\t\t} as any) as any;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tkeyof typeof schema.relations,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\t...fields,\n\t\t\t\t\t...relations,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t};\n\n\tconst implementWhereArgType = <\n\t\tExplicitTableName extends keyof NonNullable<DB[\"_\"][\"schema\"]>,\n\t\tRefName extends string,\n\t>({\n\t\ttableName,\n\t\tname,\n\t}: {\n\t\ttableName: ExplicitTableName;\n\t\tname?: RefName | undefined;\n\t}) => {\n\t\tconst schema = (db._.schema as NonNullable<DB[\"_\"][\"schema\"]>)[tableName];\n\n\t\tconst inputType = nativeBuilder.inputType(\n\t\t\tname ??\n\t\t\t\t`${\n\t\t\t\t\tString(tableName).charAt(0).toUpperCase() + String(tableName).slice(1)\n\t\t\t\t}WhereInputArgument`,\n\t\t\t{\n\t\t\t\tfields: (t) => {\n\t\t\t\t\tconst mapSQLTypeStringToInputPothosType = <\n\t\t\t\t\t\tColumn extends keyof typeof schema.columns,\n\t\t\t\t\t\tSQLType extends ReturnType<\n\t\t\t\t\t\t\t(typeof schema.columns)[Column][\"getSQLType\"]\n\t\t\t\t\t\t>,\n\t\t\t\t\t>(\n\t\t\t\t\t\tsqlType: SQLType,\n\t\t\t\t\t\tcolumnName: Column,\n\t\t\t\t\t) => {\n\t\t\t\t\t\tswitch (sqlType) {\n\t\t\t\t\t\t\tcase \"serial\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.int(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.int(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.string(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.string(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.boolean(columnName, { required: false });\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new RumbleError(\n\t\t\t\t\t\t\t\t\t`Unknown SQL type: ${sqlType} (input). Please open an issue so it can be added.`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tconst fields = Object.entries(schema.columns).reduce(\n\t\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\t\tacc[key] = mapSQLTypeStringToInputPothosType(\n\t\t\t\t\t\t\t\tvalue.getSQLType(),\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{} as Record<\n\t\t\t\t\t\t\tkeyof typeof schema.columns,\n\t\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToInputPothosType>\n\t\t\t\t\t\t>,\n\t\t\t\t\t);\n\n\t\t\t\t\t// const relations = Object.entries(schema.relations).reduce(\n\t\t\t\t\t// (acc, [key, value]) => {\n\t\t\t\t\t// acc[key] = t.relation(key, {\n\t\t\t\t\t// query: (_args: any, ctx: any) =>\n\t\t\t\t\t// ctx.abilities[tableName].filter(readAction),\n\t\t\t\t\t// } as any) as any;\n\t\t\t\t\t// return acc;\n\t\t\t\t\t// },\n\t\t\t\t\t// {} as Record<\n\t\t\t\t\t// keyof typeof schema.relations,\n\t\t\t\t\t// ReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t// >\n\t\t\t\t\t// );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t// ...relations,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\tconst transformArgumentToQueryCondition = <\n\t\t\tT extends typeof inputType.$inferInput,\n\t\t>(\n\t\t\targ: T | null | undefined,\n\t\t) => {\n\t\t\tif (!arg) return undefined;\n\t\t\tconst mapColumnToQueryCondition = <\n\t\t\t\tColumnName extends keyof typeof schema.columns,\n\t\t\t>(\n\t\t\t\tcolumnname: ColumnName,\n\t\t\t) => {\n\t\t\t\tconst column = schema.columns[columnname];\n\t\t\t\tconst filterValue = arg[columnname];\n\t\t\t\tif (!filterValue) return;\n\n\t\t\t\treturn eq(column, filterValue);\n\t\t\t};\n\n\t\t\tconst conditions = Object.keys(schema.columns).map(\n\t\t\t\tmapColumnToQueryCondition,\n\t\t\t);\n\t\t\treturn and(...conditions);\n\t\t};\n\n\t\treturn { inputType, transformArgumentToQueryCondition };\n\t};\n\n\treturn {\n\t\t/**\n * The ability builder. Use it to declare whats allowed for each entity in your DB.\n * \n * @example\n * \n * ```ts\n * // users can edit themselves\n abilityBuilder.users\n .allow([\"read\", \"update\", \"delete\"])\n .when(({ userId }) => ({ where: eq(schema.users.id, userId) }));\n \n // everyone can read posts\n abilityBuilder.posts.allow(\"read\");\n * \n * ```\n */\n\t\tabilityBuilder,\n\t\t/**\n\t\t * The pothos schema builder. See https://pothos-graphql.dev/docs/plugins/drizzle\n\t\t */\n\t\tschemaBuilder: nativeBuilder,\n\t\t/**\n * The native yoga instance. Can be used to run an actual HTTP server.\n * \n * @example\n * \n * ```ts\n import { createServer } from \"node:http\";\n * const server = createServer(yoga());\n server.listen(3000, () => {\n console.log(\"Visit http://localhost:3000/graphql\");\n });\n * ```\n */\n\t\tyoga: () =>\n\t\t\tcreateYoga<RequestEvent>({\n\t\t\t\t...nativeServerOptions,\n\t\t\t\tschema: nativeBuilder.toSchema(),\n\t\t\t\tcontext: makeContext,\n\t\t\t}),\n\t\t/**\n\t\t * A function for creating default objects for your schema\n\t\t */\n\t\timplementDefaultObject,\n\t\t/**\n\t\t * A function for creating where args to filter entities\n\t\t */\n\t\timplementWhereArg: implementWhereArgType,\n\t};\n};\n","import { RumbleError } from \"./rumbleError\";\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n * schemaBuilder.queryFields((t) => {\n return {\n findFirstUser: t.drizzleField({\n type: UserRef,\n resolve: (query, root, args, ctx, info) => {\n return (\n db.query.users\n .findFirst({\n ...query,\n where: ctx.abilities.users.filter(\"read\").where,\n })\n // note that we need to manually raise an error if the value is not found\n .then(assertFindFirstExists)\n );\n },\n }),\n };\n });\n * ```\n */\nexport const assertFindFirstExists = <T>(value: T | undefined): T => {\n\tif (!value) throw new RumbleError(\"Value not found but required (findFirst)\");\n\treturn value;\n};\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n schemaBuilder.mutationFields((t) => {\n return {\n updateUsername: t.drizzleField({\n type: UserRef,\n args: {\n userId: t.arg.int({ required: true }),\n newName: t.arg.string({ required: true }),\n },\n resolve: (query, root, args, ctx, info) => {\n return db\n .update(schema.users)\n .set({\n name: args.newName,\n })\n .where(\n and(\n eq(schema.users.id, args.userId),\n ctx.abilities.users.filter(\"update\").where\n )\n )\n .returning({ id: schema.users.id, name: schema.users.name })\n // note that we need to manually raise an error if the value is not found\n .then(assertFirstEntryExists);\n },\n }),\n };\n });\n * ```\n */\nexport const assertFirstEntryExists = <T>(value: T[]): T => {\n\tconst v = value.at(0);\n\tif (!v) throw new RumbleError(\"Value not found but required (firstEntry)\");\n\treturn v;\n};\n"]}
|
package/index.d.cts
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
import * as _pothos_core from '@pothos/core';
|
2
1
|
import { SchemaTypes, ObjectRef, abstractReturnShapeKey } from '@pothos/core';
|
3
2
|
import { WithBrand } from './types.js';
|
4
|
-
import * as _pothos_plugin_drizzle from '@pothos/plugin-drizzle';
|
5
|
-
import { DrizzleClient } from '@pothos/plugin-drizzle';
|
6
3
|
import * as graphql_yoga from 'graphql-yoga';
|
7
4
|
import { YogaServerOptions } from 'graphql-yoga';
|
8
5
|
import * as drizzle_orm from 'drizzle-orm';
|
6
|
+
import { DrizzleClient } from '@pothos/plugin-drizzle';
|
9
7
|
|
10
8
|
declare const drizzleTableKey: unique symbol;
|
11
9
|
declare class DrizzleObjectRef<Types extends SchemaTypes, Table extends keyof Types["DrizzleRelationSchema"] = keyof Types["DrizzleRelationSchema"], T = {}> extends ObjectRef<Types, T> {
|
@@ -19,11 +17,11 @@ declare class DrizzleObjectRef<Types extends SchemaTypes, Table extends keyof Ty
|
|
19
17
|
hasBrand(value: unknown): boolean;
|
20
18
|
}
|
21
19
|
|
22
|
-
type QueryConditionObject = {
|
20
|
+
type QueryConditionObject = Partial<{
|
23
21
|
where: any;
|
24
22
|
columns: any;
|
25
23
|
limit: any;
|
26
|
-
}
|
24
|
+
}>;
|
27
25
|
type GenericDrizzleDbTypeConstraints = {
|
28
26
|
query: {
|
29
27
|
[key: string]: {
|
@@ -76,9 +74,23 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
76
74
|
when: (condition: Parameters<DB["query"][keyof DB["query"]]["findMany"]>[0] | ((context: UserContext) => Parameters<DB["query"][keyof DB["query"]]["findMany"]>[0])) => void;
|
77
75
|
};
|
78
76
|
}; } : never) & {
|
79
|
-
registeredConditions: keyof DB["query"] extends infer T_1 extends keyof DB["query"] ? { [key_1 in T_1]: { [key_2 in Action[number]]: (
|
77
|
+
registeredConditions: keyof DB["query"] extends infer T_1 extends keyof DB["query"] ? { [key_1 in T_1]: { [key_2 in Action[number]]: (Partial<{
|
78
|
+
where: any;
|
79
|
+
columns: any;
|
80
|
+
limit: any;
|
81
|
+
}> | ((context: UserContext) => Partial<{
|
82
|
+
where: any;
|
83
|
+
columns: any;
|
84
|
+
limit: any;
|
85
|
+
}>))[]; }; } : never;
|
80
86
|
buildWithUserContext: (userContext: UserContext) => keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
81
|
-
filter: (action: Action
|
87
|
+
filter: (action: Action, options?: {
|
88
|
+
inject?: Partial<{
|
89
|
+
where: any;
|
90
|
+
columns: any;
|
91
|
+
limit: any;
|
92
|
+
}> | undefined;
|
93
|
+
} | undefined) => {
|
82
94
|
where: drizzle_orm.SQL<unknown> | undefined;
|
83
95
|
columns: Record<string, any> | undefined;
|
84
96
|
limit: any;
|
@@ -91,7 +103,13 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
91
103
|
schemaBuilder: PothosSchemaTypes.SchemaBuilder<PothosSchemaTypes.ExtendDefaultTypes<{
|
92
104
|
Context: Awaited<ReturnType<(req: RequestEvent) => Promise<UserContext & {
|
93
105
|
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
94
|
-
filter: (action: Action
|
106
|
+
filter: (action: Action, options?: {
|
107
|
+
inject?: Partial<{
|
108
|
+
where: any;
|
109
|
+
columns: any;
|
110
|
+
limit: any;
|
111
|
+
}> | undefined;
|
112
|
+
} | undefined) => {
|
95
113
|
where: drizzle_orm.SQL<unknown> | undefined;
|
96
114
|
columns: Record<string, any> | undefined;
|
97
115
|
limit: any;
|
@@ -99,9 +117,6 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
99
117
|
}; } : never;
|
100
118
|
}>>>;
|
101
119
|
DrizzleSchema: DB["_"]["fullSchema"];
|
102
|
-
DefaultFieldNullability: false;
|
103
|
-
DefaultArgumentNullability: false;
|
104
|
-
DefaultInputFieldRequiredness: true;
|
105
120
|
}>>;
|
106
121
|
/**
|
107
122
|
* The native yoga instance. Can be used to run an actual HTTP server.
|
@@ -120,62 +135,20 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
120
135
|
/**
|
121
136
|
* A function for creating default objects for your schema
|
122
137
|
*/
|
123
|
-
implementDefaultObject: <ExplicitTableName extends
|
124
|
-
Context: Awaited<UserContext & {
|
125
|
-
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
126
|
-
filter: (action: Action) => {
|
127
|
-
where: drizzle_orm.SQL<unknown> | undefined;
|
128
|
-
columns: Record<string, any> | undefined;
|
129
|
-
limit: any;
|
130
|
-
};
|
131
|
-
}; } : never;
|
132
|
-
}>;
|
133
|
-
DrizzleSchema: DB["_"]["fullSchema"];
|
134
|
-
DefaultFieldNullability: false;
|
135
|
-
DefaultArgumentNullability: false;
|
136
|
-
DefaultInputFieldRequiredness: true;
|
137
|
-
}>>[], Table extends keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, Selection extends true | {
|
138
|
-
columns?: { [K in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]]?: boolean | undefined; } | undefined;
|
139
|
-
with?: { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["relations"][K_1] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["relations"][K_1]["referencedTableName"]>> | undefined; } | undefined;
|
140
|
-
extras?: Record<string, drizzle_orm.SQL.Aliased<unknown>> | ((fields: ([drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]] extends [never] ? {} : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]) extends infer T_3 ? { [K_2 in keyof T_3]: ([drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]] extends [never] ? {} : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"])[K_2]; } : never, operators: {
|
141
|
-
sql: drizzle_orm.Operators["sql"];
|
142
|
-
}) => Record<string, drizzle_orm.SQL.Aliased>) | undefined;
|
143
|
-
}, Shape = drizzle_orm.BuildQueryResult<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table], Selection>>(table: Table, options: _pothos_plugin_drizzle.DrizzleObjectOptions<PothosSchemaTypes.ExtendDefaultTypes<{
|
144
|
-
Context: Awaited<UserContext & {
|
145
|
-
abilities: keyof DB["query"] extends infer T_3 extends keyof DB["query"] ? { [key_3 in T_3]: {
|
146
|
-
filter: (action: Action) => {
|
147
|
-
where: drizzle_orm.SQL<unknown> | undefined;
|
148
|
-
columns: Record<string, any> | undefined;
|
149
|
-
limit: any;
|
150
|
-
};
|
151
|
-
}; } : never;
|
152
|
-
}>;
|
153
|
-
DrizzleSchema: DB["_"]["fullSchema"];
|
154
|
-
DefaultFieldNullability: false;
|
155
|
-
DefaultArgumentNullability: false;
|
156
|
-
DefaultInputFieldRequiredness: true;
|
157
|
-
}>, Table, Shape, Selection, Interfaces>) => DrizzleObjectRef<PothosSchemaTypes.ExtendDefaultTypes<{
|
158
|
-
Context: Awaited<UserContext & {
|
159
|
-
abilities: keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: {
|
160
|
-
filter: (action: Action) => {
|
161
|
-
where: drizzle_orm.SQL<unknown> | undefined;
|
162
|
-
columns: Record<string, any> | undefined;
|
163
|
-
limit: any;
|
164
|
-
};
|
165
|
-
}; } : never;
|
166
|
-
}>;
|
167
|
-
DrizzleSchema: DB["_"]["fullSchema"];
|
168
|
-
DefaultFieldNullability: false;
|
169
|
-
DefaultArgumentNullability: false;
|
170
|
-
DefaultInputFieldRequiredness: true;
|
171
|
-
}>, Table, Shape>)>[0], RefName extends string>({ tableName, name, readAction, }: {
|
138
|
+
implementDefaultObject: <ExplicitTableName extends keyof NonNullable<DB["_"]["schema"]>, RefName extends string>({ tableName, name, readAction, }: {
|
172
139
|
tableName: ExplicitTableName;
|
173
140
|
name: RefName;
|
174
141
|
readAction?: Action;
|
175
142
|
}) => DrizzleObjectRef<PothosSchemaTypes.ExtendDefaultTypes<{
|
176
143
|
Context: Awaited<ReturnType<(req: RequestEvent) => Promise<UserContext & {
|
177
144
|
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
178
|
-
filter: (action: Action
|
145
|
+
filter: (action: Action, options?: {
|
146
|
+
inject?: Partial<{
|
147
|
+
where: any;
|
148
|
+
columns: any;
|
149
|
+
limit: any;
|
150
|
+
}> | undefined;
|
151
|
+
} | undefined) => {
|
179
152
|
where: drizzle_orm.SQL<unknown> | undefined;
|
180
153
|
columns: Record<string, any> | undefined;
|
181
154
|
limit: any;
|
@@ -183,10 +156,38 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
183
156
|
}; } : never;
|
184
157
|
}>>>;
|
185
158
|
DrizzleSchema: DB["_"]["fullSchema"];
|
186
|
-
DefaultFieldNullability: false;
|
187
|
-
DefaultArgumentNullability: false;
|
188
|
-
DefaultInputFieldRequiredness: true;
|
189
159
|
}>, ExplicitTableName, ({ [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; } | undefined extends Record<string, unknown> ? { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; } extends infer T_5 ? { [K_2 in keyof T_5]: { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; }[K_2]; } : never : { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; } extends infer T_6 ? { [K_5 in keyof T_6]: { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; }[K_5]; } : never) & {} & ({ [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; } | undefined extends Record<string, unknown> ? drizzle_orm.BuildRelationResult<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, Record<string, unknown> & { [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; }, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]> : {}) extends infer T_2 ? { [K in keyof T_2]: (({ [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; } | undefined extends Record<string, unknown> ? { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; } extends infer T_3 ? { [K_2 in keyof T_3]: { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; }[K_2]; } : never : { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; } extends infer T_4 ? { [K_5 in keyof T_4]: { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; }[K_5]; } : never) & {} & ({ [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; } | undefined extends Record<string, unknown> ? drizzle_orm.BuildRelationResult<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, Record<string, unknown> & { [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; }, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]> : {}))[K]; } : never>;
|
160
|
+
/**
|
161
|
+
* A function for creating where args to filter entities
|
162
|
+
*/
|
163
|
+
implementWhereArg: <ExplicitTableName extends keyof NonNullable<DB["_"]["schema"]>, RefName_1 extends string>({ tableName, name, }: {
|
164
|
+
tableName: ExplicitTableName;
|
165
|
+
name?: RefName_1 | undefined;
|
166
|
+
}) => {
|
167
|
+
inputType: PothosSchemaTypes.InputObjectRef<PothosSchemaTypes.ExtendDefaultTypes<{
|
168
|
+
Context: Awaited<ReturnType<(req: RequestEvent) => Promise<UserContext & {
|
169
|
+
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
170
|
+
filter: (action: Action, options?: {
|
171
|
+
inject?: Partial<{
|
172
|
+
where: any;
|
173
|
+
columns: any;
|
174
|
+
limit: any;
|
175
|
+
}> | undefined;
|
176
|
+
} | undefined) => {
|
177
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
178
|
+
columns: Record<string, any> | undefined;
|
179
|
+
limit: any;
|
180
|
+
};
|
181
|
+
}; } : never;
|
182
|
+
}>>>;
|
183
|
+
DrizzleSchema: DB["_"]["fullSchema"];
|
184
|
+
}>, {
|
185
|
+
[x: string]: string | number | boolean | null | undefined;
|
186
|
+
}>;
|
187
|
+
transformArgumentToQueryCondition: <T_2 extends {
|
188
|
+
[x: string]: string | number | boolean | null | undefined;
|
189
|
+
}>(arg: T_2 | null | undefined) => drizzle_orm.SQL<unknown> | undefined;
|
190
|
+
};
|
190
191
|
};
|
191
192
|
|
192
193
|
/**
|
package/index.d.ts
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
import * as _pothos_core from '@pothos/core';
|
2
1
|
import { SchemaTypes, ObjectRef, abstractReturnShapeKey } from '@pothos/core';
|
3
2
|
import { WithBrand } from './types.js';
|
4
|
-
import * as _pothos_plugin_drizzle from '@pothos/plugin-drizzle';
|
5
|
-
import { DrizzleClient } from '@pothos/plugin-drizzle';
|
6
3
|
import * as graphql_yoga from 'graphql-yoga';
|
7
4
|
import { YogaServerOptions } from 'graphql-yoga';
|
8
5
|
import * as drizzle_orm from 'drizzle-orm';
|
6
|
+
import { DrizzleClient } from '@pothos/plugin-drizzle';
|
9
7
|
|
10
|
-
|
8
|
+
declare const drizzleTableKey: unique symbol;
|
11
9
|
declare class DrizzleObjectRef<Types extends SchemaTypes, Table extends keyof Types["DrizzleRelationSchema"] = keyof Types["DrizzleRelationSchema"], T = {}> extends ObjectRef<Types, T> {
|
12
10
|
[drizzleTableKey]: Types["DrizzleRelationSchema"][Table];
|
13
11
|
[abstractReturnShapeKey]: WithBrand<T>;
|
@@ -19,11 +17,11 @@ declare class DrizzleObjectRef<Types extends SchemaTypes, Table extends keyof Ty
|
|
19
17
|
hasBrand(value: unknown): boolean;
|
20
18
|
}
|
21
19
|
|
22
|
-
type QueryConditionObject = {
|
20
|
+
type QueryConditionObject = Partial<{
|
23
21
|
where: any;
|
24
22
|
columns: any;
|
25
23
|
limit: any;
|
26
|
-
}
|
24
|
+
}>;
|
27
25
|
type GenericDrizzleDbTypeConstraints = {
|
28
26
|
query: {
|
29
27
|
[key: string]: {
|
@@ -76,9 +74,23 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
76
74
|
when: (condition: Parameters<DB["query"][keyof DB["query"]]["findMany"]>[0] | ((context: UserContext) => Parameters<DB["query"][keyof DB["query"]]["findMany"]>[0])) => void;
|
77
75
|
};
|
78
76
|
}; } : never) & {
|
79
|
-
registeredConditions: keyof DB["query"] extends infer T_1 extends keyof DB["query"] ? { [key_1 in T_1]: { [key_2 in Action[number]]: (
|
77
|
+
registeredConditions: keyof DB["query"] extends infer T_1 extends keyof DB["query"] ? { [key_1 in T_1]: { [key_2 in Action[number]]: (Partial<{
|
78
|
+
where: any;
|
79
|
+
columns: any;
|
80
|
+
limit: any;
|
81
|
+
}> | ((context: UserContext) => Partial<{
|
82
|
+
where: any;
|
83
|
+
columns: any;
|
84
|
+
limit: any;
|
85
|
+
}>))[]; }; } : never;
|
80
86
|
buildWithUserContext: (userContext: UserContext) => keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
81
|
-
filter: (action: Action
|
87
|
+
filter: (action: Action, options?: {
|
88
|
+
inject?: Partial<{
|
89
|
+
where: any;
|
90
|
+
columns: any;
|
91
|
+
limit: any;
|
92
|
+
}> | undefined;
|
93
|
+
} | undefined) => {
|
82
94
|
where: drizzle_orm.SQL<unknown> | undefined;
|
83
95
|
columns: Record<string, any> | undefined;
|
84
96
|
limit: any;
|
@@ -91,7 +103,13 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
91
103
|
schemaBuilder: PothosSchemaTypes.SchemaBuilder<PothosSchemaTypes.ExtendDefaultTypes<{
|
92
104
|
Context: Awaited<ReturnType<(req: RequestEvent) => Promise<UserContext & {
|
93
105
|
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
94
|
-
filter: (action: Action
|
106
|
+
filter: (action: Action, options?: {
|
107
|
+
inject?: Partial<{
|
108
|
+
where: any;
|
109
|
+
columns: any;
|
110
|
+
limit: any;
|
111
|
+
}> | undefined;
|
112
|
+
} | undefined) => {
|
95
113
|
where: drizzle_orm.SQL<unknown> | undefined;
|
96
114
|
columns: Record<string, any> | undefined;
|
97
115
|
limit: any;
|
@@ -99,9 +117,6 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
99
117
|
}; } : never;
|
100
118
|
}>>>;
|
101
119
|
DrizzleSchema: DB["_"]["fullSchema"];
|
102
|
-
DefaultFieldNullability: false;
|
103
|
-
DefaultArgumentNullability: false;
|
104
|
-
DefaultInputFieldRequiredness: true;
|
105
120
|
}>>;
|
106
121
|
/**
|
107
122
|
* The native yoga instance. Can be used to run an actual HTTP server.
|
@@ -120,62 +135,20 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
120
135
|
/**
|
121
136
|
* A function for creating default objects for your schema
|
122
137
|
*/
|
123
|
-
implementDefaultObject: <ExplicitTableName extends
|
124
|
-
Context: Awaited<UserContext & {
|
125
|
-
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
126
|
-
filter: (action: Action) => {
|
127
|
-
where: drizzle_orm.SQL<unknown> | undefined;
|
128
|
-
columns: Record<string, any> | undefined;
|
129
|
-
limit: any;
|
130
|
-
};
|
131
|
-
}; } : never;
|
132
|
-
}>;
|
133
|
-
DrizzleSchema: DB["_"]["fullSchema"];
|
134
|
-
DefaultFieldNullability: false;
|
135
|
-
DefaultArgumentNullability: false;
|
136
|
-
DefaultInputFieldRequiredness: true;
|
137
|
-
}>>[], Table extends keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, Selection extends true | {
|
138
|
-
columns?: { [K in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]]?: boolean | undefined; } | undefined;
|
139
|
-
with?: { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["relations"][K_1] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["relations"][K_1]["referencedTableName"]>> | undefined; } | undefined;
|
140
|
-
extras?: Record<string, drizzle_orm.SQL.Aliased<unknown>> | ((fields: ([drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]] extends [never] ? {} : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]) extends infer T_3 ? { [K_2 in keyof T_3]: ([drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"]] extends [never] ? {} : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table]["columns"])[K_2]; } : never, operators: {
|
141
|
-
sql: drizzle_orm.Operators["sql"];
|
142
|
-
}) => Record<string, drizzle_orm.SQL.Aliased>) | undefined;
|
143
|
-
}, Shape = drizzle_orm.BuildQueryResult<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[Table], Selection>>(table: Table, options: _pothos_plugin_drizzle.DrizzleObjectOptions<PothosSchemaTypes.ExtendDefaultTypes<{
|
144
|
-
Context: Awaited<UserContext & {
|
145
|
-
abilities: keyof DB["query"] extends infer T_3 extends keyof DB["query"] ? { [key_3 in T_3]: {
|
146
|
-
filter: (action: Action) => {
|
147
|
-
where: drizzle_orm.SQL<unknown> | undefined;
|
148
|
-
columns: Record<string, any> | undefined;
|
149
|
-
limit: any;
|
150
|
-
};
|
151
|
-
}; } : never;
|
152
|
-
}>;
|
153
|
-
DrizzleSchema: DB["_"]["fullSchema"];
|
154
|
-
DefaultFieldNullability: false;
|
155
|
-
DefaultArgumentNullability: false;
|
156
|
-
DefaultInputFieldRequiredness: true;
|
157
|
-
}>, Table, Shape, Selection, Interfaces>) => DrizzleObjectRef<PothosSchemaTypes.ExtendDefaultTypes<{
|
158
|
-
Context: Awaited<UserContext & {
|
159
|
-
abilities: keyof DB["query"] extends infer T_4 extends keyof DB["query"] ? { [key_3 in T_4]: {
|
160
|
-
filter: (action: Action) => {
|
161
|
-
where: drizzle_orm.SQL<unknown> | undefined;
|
162
|
-
columns: Record<string, any> | undefined;
|
163
|
-
limit: any;
|
164
|
-
};
|
165
|
-
}; } : never;
|
166
|
-
}>;
|
167
|
-
DrizzleSchema: DB["_"]["fullSchema"];
|
168
|
-
DefaultFieldNullability: false;
|
169
|
-
DefaultArgumentNullability: false;
|
170
|
-
DefaultInputFieldRequiredness: true;
|
171
|
-
}>, Table, Shape>)>[0], RefName extends string>({ tableName, name, readAction, }: {
|
138
|
+
implementDefaultObject: <ExplicitTableName extends keyof NonNullable<DB["_"]["schema"]>, RefName extends string>({ tableName, name, readAction, }: {
|
172
139
|
tableName: ExplicitTableName;
|
173
140
|
name: RefName;
|
174
141
|
readAction?: Action;
|
175
142
|
}) => DrizzleObjectRef<PothosSchemaTypes.ExtendDefaultTypes<{
|
176
143
|
Context: Awaited<ReturnType<(req: RequestEvent) => Promise<UserContext & {
|
177
144
|
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
178
|
-
filter: (action: Action
|
145
|
+
filter: (action: Action, options?: {
|
146
|
+
inject?: Partial<{
|
147
|
+
where: any;
|
148
|
+
columns: any;
|
149
|
+
limit: any;
|
150
|
+
}> | undefined;
|
151
|
+
} | undefined) => {
|
179
152
|
where: drizzle_orm.SQL<unknown> | undefined;
|
180
153
|
columns: Record<string, any> | undefined;
|
181
154
|
limit: any;
|
@@ -183,10 +156,38 @@ declare const rumble: <UserContext extends Record<string, any>, DB extends Gener
|
|
183
156
|
}; } : never;
|
184
157
|
}>>>;
|
185
158
|
DrizzleSchema: DB["_"]["fullSchema"];
|
186
|
-
DefaultFieldNullability: false;
|
187
|
-
DefaultArgumentNullability: false;
|
188
|
-
DefaultInputFieldRequiredness: true;
|
189
159
|
}>, ExplicitTableName, ({ [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; } | undefined extends Record<string, unknown> ? { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; } extends infer T_5 ? { [K_2 in keyof T_5]: { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; }[K_2]; } : never : { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; } extends infer T_6 ? { [K_5 in keyof T_6]: { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; }[K_5]; } : never) & {} & ({ [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; } | undefined extends Record<string, unknown> ? drizzle_orm.BuildRelationResult<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, Record<string, unknown> & { [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; }, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]> : {}) extends infer T_2 ? { [K in keyof T_2]: (({ [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; } | undefined extends Record<string, unknown> ? { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; } extends infer T_3 ? { [K_2 in keyof T_3]: { [Key in (drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]) & string as Key]: { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["notNull"] extends true ? { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] : { [K_4 in drizzle_orm.Equal<Exclude<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] | (string & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"])], undefined>, false> extends true ? Exclude<keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"], drizzle_orm.NonUndefinedKeysOnly<Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; }>> : { [K_3 in keyof (Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })]: drizzle_orm.Equal<(Record<string, unknown> & { [K_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]?: boolean | undefined; })[K_3], true> extends true ? K_3 : never; }[string | keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]] & keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"]]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][K_4]; }[Key]["_"]["data"] | null; }[K_2]; } : never : { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; } extends infer T_4 ? { [K_5 in keyof T_4]: { [Key_1 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"] & string as Key_1]: drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["notNull"] extends true ? drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] : drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["columns"][Key_1]["_"]["data"] | null; }[K_5]; } : never) & {} & ({ [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; } | undefined extends Record<string, unknown> ? drizzle_orm.BuildRelationResult<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, Record<string, unknown> & { [K_6 in keyof drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]]?: true | drizzle_orm.DBQueryConfig<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6] extends drizzle_orm.One<string, boolean> ? "one" : "many", false, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.FindTableByDBName<drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"][K_6]["referencedTableName"]>> | undefined; }, drizzle_orm.ExtractTablesWithRelations<DB["_"]["fullSchema"] & {}>[ExplicitTableName]["relations"]> : {}))[K]; } : never>;
|
160
|
+
/**
|
161
|
+
* A function for creating where args to filter entities
|
162
|
+
*/
|
163
|
+
implementWhereArg: <ExplicitTableName extends keyof NonNullable<DB["_"]["schema"]>, RefName_1 extends string>({ tableName, name, }: {
|
164
|
+
tableName: ExplicitTableName;
|
165
|
+
name?: RefName_1 | undefined;
|
166
|
+
}) => {
|
167
|
+
inputType: PothosSchemaTypes.InputObjectRef<PothosSchemaTypes.ExtendDefaultTypes<{
|
168
|
+
Context: Awaited<ReturnType<(req: RequestEvent) => Promise<UserContext & {
|
169
|
+
abilities: keyof DB["query"] extends infer T_2 extends keyof DB["query"] ? { [key_3 in T_2]: {
|
170
|
+
filter: (action: Action, options?: {
|
171
|
+
inject?: Partial<{
|
172
|
+
where: any;
|
173
|
+
columns: any;
|
174
|
+
limit: any;
|
175
|
+
}> | undefined;
|
176
|
+
} | undefined) => {
|
177
|
+
where: drizzle_orm.SQL<unknown> | undefined;
|
178
|
+
columns: Record<string, any> | undefined;
|
179
|
+
limit: any;
|
180
|
+
};
|
181
|
+
}; } : never;
|
182
|
+
}>>>;
|
183
|
+
DrizzleSchema: DB["_"]["fullSchema"];
|
184
|
+
}>, {
|
185
|
+
[x: string]: string | number | boolean | null | undefined;
|
186
|
+
}>;
|
187
|
+
transformArgumentToQueryCondition: <T_2 extends {
|
188
|
+
[x: string]: string | number | boolean | null | undefined;
|
189
|
+
}>(arg: T_2 | null | undefined) => drizzle_orm.SQL<unknown> | undefined;
|
190
|
+
};
|
190
191
|
};
|
191
192
|
|
192
193
|
/**
|
package/index.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
import P from'@pothos/core';import
|
1
|
+
import P from'@pothos/core';import j from'@pothos/plugin-drizzle';import {and,eq,or}from'drizzle-orm';import {createYoga}from'graphql-yoga';function E(r){return typeof r!="function"}function Q(r){return typeof r=="function"&&r.constructor.name!=="AsyncFunction"}var B=({db:r})=>{let l={},x={},D=f=>({allow:p=>{let y=x[f];y||(y={},x[f]=y);let i=Array.isArray(p)?p:[p];for(let C of i){let s=y[C];s||(s=[],y[C]=s);}return {when:C=>{for(let s of i)y[s].push(C);}}}});for(let f of Object.keys(r.query))l[f]=D(f);return {...l,registeredConditions:x,buildWithUserContext:f=>{let p={},y=i=>({filter:(C,s)=>{let c=x[i];if(!c)throw "TODO (No allowed entry found for this condition) #1";let d=c[C];if(!d)throw "TODO (No allowed entry found for this condition) #2";let T=d.filter(E),h=d.filter(Q).map(n=>n(f)),a=[...T,...h],o;for(let n of a)n.limit&&(o===void 0||n.limit>o)&&(o=n.limit);s?.inject?.limit&&o<s.inject.limit&&(o=s.inject.limit);let u;for(let n of [...a,s?.inject??{}])n.columns&&(u===void 0?u=n.columns:u={...u,...n.columns});let b=a.filter(n=>n.where).map(n=>n.where),t=b.length>0?or(...b):void 0;return s?.inject?.where&&(t=t?and(t,s.inject.where):s.inject.where),{where:t,columns:u,limit:o}}});for(let i of Object.keys(r.query))p[i]=y(i);return p}}};var m=class extends Error{constructor(l){super(l),this.name="RumbleError";}};var U=({db:r,nativeServerOptions:l,context:x,onlyQuery:D=!1,actions:f=["create","read","update","delete"]})=>{let p=B({db:r}),y=async c=>{let d=x?await x(c):{};return {...d,abilities:p.buildWithUserContext(d)}},i=new P({plugins:[j],drizzle:{client:r}});return i.queryType({}),D||i.mutationType({}),{abilityBuilder:p,schemaBuilder:i,yoga:()=>createYoga({...l,schema:i.toSchema(),context:y}),implementDefaultObject:({tableName:c,name:d,readAction:T="read"})=>{let h=r._.schema[c];return i.drizzleObject(c,{name:d,fields:a=>{let o=(t,e)=>{switch(t){case"serial":return a.exposeInt(e);case"int":return a.exposeInt(e);case"string":return a.exposeString(e);case"text":return a.exposeString(e);case"boolean":return a.exposeBoolean(e);default:throw new m(`Unknown SQL type: ${t}. Please open an issue so it can be added.`)}},u=Object.entries(h.columns).reduce((t,[e,n])=>(t[e]=o(n.getSQLType(),e),t),{}),b=Object.entries(h.relations).reduce((t,[e,n])=>(t[e]=a.relation(e,{query:(L,g)=>g.abilities[e].filter(T)}),t),{});return {...u,...b}}})},implementWhereArg:({tableName:c,name:d})=>{let T=r._.schema[c];return {inputType:i.inputType(d??`${String(c).charAt(0).toUpperCase()+String(c).slice(1)}WhereInputArgument`,{fields:o=>{let u=(t,e)=>{switch(t){case"serial":return o.int(e,{required:!1});case"int":return o.int(e,{required:!1});case"string":return o.string(e,{required:!1});case"text":return o.string(e,{required:!1});case"boolean":return o.boolean(e,{required:!1});default:throw new m(`Unknown SQL type: ${t} (input). Please open an issue so it can be added.`)}};return {...Object.entries(T.columns).reduce((t,[e,n])=>(t[e]=u(n.getSQLType(),e),t),{})}}}),transformArgumentToQueryCondition:o=>{if(!o)return;let u=t=>{let e=T.columns[t],n=o[t];if(n)return eq(e,n)},b=Object.keys(T.columns).map(u);return and(...b)}}}}};var z=r=>{if(!r)throw new m("Value not found but required (findFirst)");return r},q=r=>{let l=r.at(0);if(!l)throw new m("Value not found but required (firstEntry)");return l};export{m as RumbleError,z as assertFindFirstExists,q as assertFirstEntryExists,U as rumble};//# sourceMappingURL=index.js.map
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../lib/abilities/builder.ts","../lib/helpers/rumbleError.ts","../lib/gql/builder.ts","../lib/helpers/helper.ts"],"names":["isSimpleCondition","condition","isSyncFunctionCondition","createAbilityBuilder","db","builder","registeredConditions","createEntityObject","entityKey","action","conditionsPerEntity","actions","conditionsPerEntityAndAction","userContext","simpleConditions","syncFunctionConditions","allConditionObjects","highestLimit","conditionObject","combinedAllowedColumns","accumulatedWhereConditions","o","or","RumbleError","message","rumble","nativeServerOptions","makeUserContext","onlyQuery","abilityBuilder","makeContext","req","nativeBuilder","SchemaBuilder","DrizzlePlugin","createYoga","tableName","name","readAction","schema","t","mapSQLTypeStringToExposedPothosType","sqlType","columnName","fields","acc","key","value","relations","_args","ctx","assertFindFirstExists","assertFirstEntryExists","v"],"mappings":"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","file":"index.js","sourcesContent":["import { or } from \"drizzle-orm\";\nimport type {\n\tGenericDrizzleDbTypeConstraints,\n\tQueryConditionObject,\n} from \"../types/genericDrizzleDbType\";\n\nexport type AbilityBuilder = ReturnType<typeof createAbilityBuilder>;\n\ntype Condition<DBParameters, UserContext> =\n\t| SimpleCondition<DBParameters>\n\t| SyncFunctionCondition<DBParameters, UserContext>;\n// | AsyncFunctionCondition<DBParameters, UserContext>;\n\ntype SimpleCondition<DBParameters> = DBParameters;\ntype SyncFunctionCondition<DBParameters, UserContext> = (\n\tcontext: UserContext,\n) => DBParameters;\n// type AsyncFunctionCondition<DBParameters, UserContext> = (\n// \tcontext: UserContext,\n// ) => Promise<DBParameters>;\n\n// type guards for the condition types\nfunction isSimpleCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SimpleCondition<DBParameters> {\n\treturn typeof condition !== \"function\";\n}\n\nfunction isSyncFunctionCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SyncFunctionCondition<DBParameters, UserContext> {\n\treturn (\n\t\ttypeof condition === \"function\" &&\n\t\tcondition.constructor.name !== \"AsyncFunction\"\n\t);\n}\n\n// function isAsyncFunctionCondition<DBParameters, UserContext>(\n// \tcondition: Condition<DBParameters, UserContext>,\n// ): condition is AsyncFunctionCondition<DBParameters, UserContext> {\n// \treturn (\n// \t\ttypeof condition === \"function\" &&\n// \t\tcondition.constructor.name === \"AsyncFunction\"\n// \t);\n// }\n\nexport const createAbilityBuilder = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tAction extends string,\n>({\n\tdb,\n}: {\n\tdb: DB;\n}) => {\n\ttype DBQueryKey = keyof DB[\"query\"];\n\ttype DBParameters = Parameters<DB[\"query\"][DBQueryKey][\"findMany\"]>[0];\n\n\tconst builder: {\n\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t} = {} as any;\n\n\tconst registeredConditions: {\n\t\t[key in DBQueryKey]: {\n\t\t\t[key in Action[number]]: (\n\t\t\t\t| QueryConditionObject\n\t\t\t\t| ((context: UserContext) => QueryConditionObject)\n\t\t\t)[];\n\t\t\t// | ((context: UserContext) => Promise<QueryConditionObject>)\n\t\t};\n\t} = {} as any;\n\n\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\tallow: (action: Action | Action[]) => {\n\t\t\tlet conditionsPerEntity = registeredConditions[entityKey];\n\t\t\tif (!conditionsPerEntity) {\n\t\t\t\tconditionsPerEntity = {} as any;\n\t\t\t\tregisteredConditions[entityKey] = conditionsPerEntity;\n\t\t\t}\n\n\t\t\tconst actions = Array.isArray(action) ? action : [action];\n\t\t\tfor (const action of actions) {\n\t\t\t\tlet conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\tconditionsPerEntityAndAction = [];\n\t\t\t\t\tconditionsPerEntity[action] = conditionsPerEntityAndAction;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\twhen: (condition: Condition<DBParameters, UserContext>) => {\n\t\t\t\t\tfor (const action of actions) {\n\t\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\t\tconditionsPerEntityAndAction.push(condition);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t});\n\n\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t}\n\treturn {\n\t\t...builder,\n\t\tregisteredConditions,\n\t\tbuildWithUserContext: (userContext: UserContext) => {\n\t\t\tconst builder: {\n\t\t\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t\t\t} = {} as any;\n\n\t\t\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\t\t\tfilter: (action: Action) => {\n\t\t\t\t\tconst conditionsPerEntity = registeredConditions[entityKey];\n\t\t\t\t\tif (!conditionsPerEntity) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #1\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #2\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst simpleConditions =\n\t\t\t\t\t\tconditionsPerEntityAndAction.filter(isSimpleCondition);\n\n\t\t\t\t\tconst syncFunctionConditions = conditionsPerEntityAndAction\n\t\t\t\t\t\t.filter(isSyncFunctionCondition)\n\t\t\t\t\t\t.map((condition) => condition(userContext));\n\n\t\t\t\t\t// const asyncFunctionConditions = await Promise.all(\n\t\t\t\t\t// \tconditionsPerEntityAndAction\n\t\t\t\t\t// \t\t.filter(isAsyncFunctionCondition)\n\t\t\t\t\t// \t\t.map((condition) => condition(userContext)),\n\t\t\t\t\t// );\n\n\t\t\t\t\tconst allConditionObjects = [\n\t\t\t\t\t\t...simpleConditions,\n\t\t\t\t\t\t...syncFunctionConditions,\n\t\t\t\t\t\t// ...asyncFunctionConditions,\n\t\t\t\t\t];\n\n\t\t\t\t\tlet highestLimit = undefined;\n\t\t\t\t\tfor (const conditionObject of allConditionObjects) {\n\t\t\t\t\t\tif (conditionObject.limit) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\thighestLimit === undefined ||\n\t\t\t\t\t\t\t\tconditionObject.limit > highestLimit\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\thighestLimit = conditionObject.limit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet combinedAllowedColumns: Record<string, any> | undefined =\n\t\t\t\t\t\tundefined;\n\t\t\t\t\tfor (const conditionObject of allConditionObjects) {\n\t\t\t\t\t\tif (conditionObject.columns) {\n\t\t\t\t\t\t\tif (combinedAllowedColumns === undefined) {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = conditionObject.columns;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = {\n\t\t\t\t\t\t\t\t\t...combinedAllowedColumns,\n\t\t\t\t\t\t\t\t\t...conditionObject.columns,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst accumulatedWhereConditions = allConditionObjects\n\t\t\t\t\t\t.filter((o) => o.where)\n\t\t\t\t\t\t.map((o) => o.where);\n\n\t\t\t\t\tconst combinedWhere =\n\t\t\t\t\t\taccumulatedWhereConditions.length > 0\n\t\t\t\t\t\t\t? or(...accumulatedWhereConditions)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\twhere: combinedWhere,\n\t\t\t\t\t\tcolumns: combinedAllowedColumns,\n\t\t\t\t\t\tlimit: highestLimit,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\t\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t\t\t}\n\n\t\t\treturn builder;\n\t\t},\n\t};\n};\n","export class RumbleError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RumbleError\";\n\t}\n}\n","import SchemaBuilder from \"@pothos/core\";\nimport DrizzlePlugin from \"@pothos/plugin-drizzle\";\nimport { type YogaServerOptions, createYoga } from \"graphql-yoga\";\nimport { createAbilityBuilder } from \"../abilities/builder\";\nimport { RumbleError } from \"../helpers/rumbleError\";\nimport type { GenericDrizzleDbTypeConstraints } from \"../types/genericDrizzleDbType\";\n\nexport const rumble = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tRequestEvent extends Record<string, any>,\n\tAction extends string = \"create\" | \"read\" | \"update\" | \"delete\",\n>({\n\tdb,\n\tnativeServerOptions,\n\tcontext: makeUserContext,\n\tonlyQuery = false,\n\tactions = [\"create\", \"read\", \"update\", \"delete\"] as Action[],\n}: {\n\t/**\n\t * Your drizzle database instance\n\t */\n\tdb: DB;\n\t/**\n\t * Optional options for the native GraphQL Yoga server\n\t */\n\tnativeServerOptions?:\n\t\t| Omit<YogaServerOptions<RequestEvent, any>, \"schema\" | \"context\">\n\t\t| undefined;\n\t/**\n\t * A function for providing context for each request based on the incoming HTTP Request.\n\t * The type of the parameter equals the HTTPRequest type of your chosen server.\n\t */\n\tcontext?:\n\t\t| ((event: RequestEvent) => Promise<UserContext> | UserContext)\n\t\t| undefined;\n\t/**\n\t * If you only want to create queries and do not need mutations, enable this\n\t */\n\tonlyQuery?: boolean;\n\t/**\n\t * The actions that are available\n\t */\n\tactions?: Action[];\n}) => {\n\tconst abilityBuilder = createAbilityBuilder<UserContext, DB, Action>({\n\t\tdb,\n\t});\n\n\tconst makeContext = async (req: RequestEvent) => {\n\t\tconst userContext = makeUserContext\n\t\t\t? await makeUserContext(req)\n\t\t\t: ({} as UserContext);\n\t\treturn {\n\t\t\t...userContext,\n\t\t\tabilities: abilityBuilder.buildWithUserContext(userContext),\n\t\t};\n\t};\n\n\tconst nativeBuilder = new SchemaBuilder<{\n\t\tContext: Awaited<ReturnType<typeof makeContext>>;\n\t\t// Scalars: Scalars<Prisma.Decimal, Prisma.InputJsonValue | null, Prisma.InputJsonValue> & {\n\t\t// \tFile: {\n\t\t// \t\tInput: File;\n\t\t// \t\tOutput: never;\n\t\t// \t};\n\t\t// \tJSONObject: {\n\t\t// \t\tInput: any;\n\t\t// \t\tOutput: any;\n\t\t// \t};\n\t\t// };\n\t\tDrizzleSchema: DB[\"_\"][\"fullSchema\"];\n\t\tDefaultFieldNullability: false;\n\t\tDefaultArgumentNullability: false;\n\t\tDefaultInputFieldRequiredness: true;\n\t}>({\n\t\tplugins: [DrizzlePlugin],\n\t\tdrizzle: {\n\t\t\tclient: db,\n\t\t},\n\t\tdefaultFieldNullability: false,\n\t\tdefaultInputFieldRequiredness: true,\n\t});\n\n\tnativeBuilder.queryType({});\n\n\tif (!onlyQuery) {\n\t\tnativeBuilder.mutationType({});\n\t}\n\n\tconst implementDefaultObject = <\n\t\tExplicitTableName extends Parameters<typeof nativeBuilder.drizzleObject>[0],\n\t\tRefName extends string,\n\t>({\n\t\ttableName,\n\t\tname,\n\t\treadAction = \"read\" as Action,\n\t}: {\n\t\ttableName: ExplicitTableName;\n\t\tname: RefName;\n\t\treadAction?: Action;\n\t}) => {\n\t\tconst schema = db._.schema![tableName];\n\t\treturn nativeBuilder.drizzleObject(tableName, {\n\t\t\tname,\n\t\t\tfields: (t) => {\n\t\t\t\tconst mapSQLTypeStringToExposedPothosType = (\n\t\t\t\t\tsqlType: string,\n\t\t\t\t\tcolumnName: string,\n\t\t\t\t) => {\n\t\t\t\t\tswitch (sqlType) {\n\t\t\t\t\t\tcase \"serial\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeBoolean(columnName);\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new RumbleError(\n\t\t\t\t\t\t\t\t`Unknown SQL type: ${sqlType}. Please open an issue so it can be added.`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst fields = Object.entries(schema.columns).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = mapSQLTypeStringToExposedPothosType(\n\t\t\t\t\t\t\tvalue.getSQLType(),\n\t\t\t\t\t\t\tvalue.name,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\tconst relations = Object.entries(schema.relations).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = t.relation(key, {\n\t\t\t\t\t\t\tquery: (_args: any, ctx: any) =>\n\t\t\t\t\t\t\t\tctx.abilities[tableName].filter(readAction),\n\t\t\t\t\t\t} as any) as any;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\t...fields,\n\t\t\t\t\t...relations,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t};\n\n\treturn {\n\t\t/**\n * The ability builder. Use it to declare whats allowed for each entity in your DB.\n * \n * @example\n * \n * ```ts\n * // users can edit themselves\n abilityBuilder.users\n .allow([\"read\", \"update\", \"delete\"])\n .when(({ userId }) => ({ where: eq(schema.users.id, userId) }));\n \n // everyone can read posts\n abilityBuilder.posts.allow(\"read\");\n * \n * ```\n */\n\t\tabilityBuilder,\n\t\t/**\n\t\t * The pothos schema builder. See https://pothos-graphql.dev/docs/plugins/drizzle\n\t\t */\n\t\tschemaBuilder: nativeBuilder,\n\t\t/**\n * The native yoga instance. Can be used to run an actual HTTP server.\n * \n * @example\n * \n * ```ts\n import { createServer } from \"node:http\";\n * const server = createServer(yoga());\n server.listen(3000, () => {\n console.log(\"Visit http://localhost:3000/graphql\");\n });\n * ```\n */\n\t\tyoga: () =>\n\t\t\tcreateYoga<RequestEvent>({\n\t\t\t\t...nativeServerOptions,\n\t\t\t\tschema: nativeBuilder.toSchema(),\n\t\t\t\tcontext: makeContext,\n\t\t\t}),\n\t\t/**\n\t\t * A function for creating default objects for your schema\n\t\t */\n\t\timplementDefaultObject,\n\t};\n};\n","import { RumbleError } from \"./rumbleError\";\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n * schemaBuilder.queryFields((t) => {\n return {\n findFirstUser: t.drizzleField({\n type: UserRef,\n resolve: (query, root, args, ctx, info) => {\n return (\n db.query.users\n .findFirst({\n ...query,\n where: ctx.abilities.users.filter(\"read\").where,\n })\n // note that we need to manually raise an error if the value is not found\n .then(assertFindFirstExists)\n );\n },\n }),\n };\n });\n * ```\n */\nexport const assertFindFirstExists = <T>(value: T | undefined): T => {\n\tif (!value) throw new RumbleError(\"Value not found but required (findFirst)\");\n\treturn value;\n};\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n schemaBuilder.mutationFields((t) => {\n return {\n updateUsername: t.drizzleField({\n type: UserRef,\n args: {\n userId: t.arg.int({ required: true }),\n newName: t.arg.string({ required: true }),\n },\n resolve: (query, root, args, ctx, info) => {\n return db\n .update(schema.users)\n .set({\n name: args.newName,\n })\n .where(\n and(\n eq(schema.users.id, args.userId),\n ctx.abilities.users.filter(\"update\").where\n )\n )\n .returning({ id: schema.users.id, name: schema.users.name })\n // note that we need to manually raise an error if the value is not found\n .then(assertFirstEntryExists);\n },\n }),\n };\n });\n * ```\n */\nexport const assertFirstEntryExists = <T>(value: T[]): T => {\n\tconst v = value.at(0);\n\tif (!v) throw new RumbleError(\"Value not found but required (firstEntry)\");\n\treturn v;\n};\n"]}
|
1
|
+
{"version":3,"sources":["../lib/abilities/builder.ts","../lib/helpers/rumbleError.ts","../lib/gql/builder.ts","../lib/helpers/helper.ts"],"names":["isSimpleCondition","condition","isSyncFunctionCondition","createAbilityBuilder","db","builder","registeredConditions","createEntityObject","entityKey","action","conditionsPerEntity","actions","conditionsPerEntityAndAction","userContext","options","simpleConditions","syncFunctionConditions","allConditionObjects","highestLimit","conditionObject","combinedAllowedColumns","accumulatedWhereConditions","o","combinedWhere","or","and","RumbleError","message","rumble","nativeServerOptions","makeUserContext","onlyQuery","abilityBuilder","makeContext","req","nativeBuilder","SchemaBuilder","DrizzlePlugin","createYoga","tableName","name","readAction","schema","t","mapSQLTypeStringToExposedPothosType","sqlType","columnName","fields","acc","key","value","relations","_args","ctx","mapSQLTypeStringToInputPothosType","arg","mapColumnToQueryCondition","columnname","column","filterValue","eq","conditions","assertFindFirstExists","assertFirstEntryExists","v"],"mappings":"4IAuBA,SAASA,CAAAA,CACRC,EAC6C,CAC7C,OAAO,OAAOA,CAAc,EAAA,UAC7B,CAEA,SAASC,CAAAA,CACRD,CACgE,CAAA,CAChE,OACC,OAAOA,GAAc,UACrBA,EAAAA,CAAAA,CAAU,YAAY,IAAS,GAAA,eAEjC,CAWO,IAAME,CAAAA,CAAuB,CAIlC,CACD,EAAAC,CAAAA,CACD,IAEM,CAIL,IAAMC,EAEF,EAAC,CAECC,EAQF,EAAC,CAECC,CAAsBC,CAAAA,CAAAA,GAA2B,CACtD,KAAA,CAAQC,GAA8B,CACrC,IAAIC,EAAsBJ,CAAqBE,CAAAA,CAAS,EACnDE,CACJA,GAAAA,CAAAA,CAAsB,EAAC,CACvBJ,CAAqBE,CAAAA,CAAS,EAAIE,CAGnC,CAAA,CAAA,IAAMC,EAAU,KAAM,CAAA,OAAA,CAAQF,CAAM,CAAIA,CAAAA,CAAAA,CAAS,CAACA,CAAM,CACxD,CAAA,IAAA,IAAWA,KAAUE,CAAS,CAAA,CAC7B,IAAIC,CAA+BF,CAAAA,CAAAA,CAAoBD,CAAM,CACxDG,CAAAA,CAAAA,GACJA,CAA+B,CAAA,EAC/BF,CAAAA,CAAAA,CAAoBD,CAAM,CAAIG,CAAAA,CAAAA,EAEhC,CAEA,OAAO,CACN,KAAOX,CAAoD,EAAA,CAC1D,QAAWQ,CAAUE,IAAAA,CAAAA,CACiBD,EAAoBD,CAAM,CAAA,CAClC,KAAKR,CAAS,EAE7C,CACD,CACD,CACD,CAEA,CAAA,CAAA,IAAA,IAAWO,CAAa,IAAA,MAAA,CAAO,KAAKJ,CAAG,CAAA,KAAK,EAC3CC,CAAQG,CAAAA,CAAS,EAAID,CAAmBC,CAAAA,CAAS,CAElD,CAAA,OAAO,CACN,GAAGH,EACH,oBAAAC,CAAAA,CAAAA,CACA,qBAAuBO,CAA6B,EAAA,CACnD,IAAMR,CAEF,CAAA,EAEEE,CAAAA,CAAAA,CAAsBC,CAA2B,GAAA,CACtD,OAAQ,CACPC,CAAAA,CACAK,IAOI,CACJ,IAAMJ,EAAsBJ,CAAqBE,CAAAA,CAAS,CAC1D,CAAA,GAAI,CAACE,CAAAA,CACJ,MAAM,qDAGP,CAAA,IAAME,EAA+BF,CAAoBD,CAAAA,CAAM,EAC/D,GAAI,CAACG,CACJ,CAAA,MAAM,qDAGP,CAAA,IAAMG,EACLH,CAA6B,CAAA,MAAA,CAAOZ,CAAiB,CAEhDgB,CAAAA,CAAAA,CAAyBJ,EAC7B,MAAOV,CAAAA,CAAuB,CAC9B,CAAA,GAAA,CAAKD,CAAcA,EAAAA,CAAAA,CAAUY,CAAW,CAAC,CAAA,CAQrCI,EAAsB,CAC3B,GAAGF,EACH,GAAGC,CAEJ,CAEIE,CAAAA,CAAAA,CACJ,IAAWC,IAAAA,CAAAA,IAAmBF,EACzBE,CAAgB,CAAA,KAAA,GAElBD,IAAiB,KACjBC,CAAAA,EAAAA,CAAAA,CAAgB,MAAQD,CAExBA,CAAAA,GAAAA,CAAAA,CAAeC,EAAgB,KAK9BL,CAAAA,CAAAA,CAAAA,EAAS,QAAQ,KAASI,EAAAA,CAAAA,CAAeJ,EAAQ,MAAO,CAAA,KAAA,GAC3DI,EAAeJ,CAAQ,CAAA,MAAA,CAAO,KAG/B,CAAA,CAAA,IAAIM,CAEJ,CAAA,IAAA,IAAWD,KAAmB,CAC7B,GAAGF,EACHH,CAAS,EAAA,MAAA,EAAU,EACpB,CAAA,CACKK,CAAgB,CAAA,OAAA,GACfC,CAA2B,GAAA,KAAA,CAAA,CAC9BA,EAAyBD,CAAgB,CAAA,OAAA,CAEzCC,EAAyB,CACxB,GAAGA,EACH,GAAGD,CAAAA,CAAgB,OACpB,CAAA,CAAA,CAKH,IAAME,CAAAA,CAA6BJ,EACjC,MAAQK,CAAAA,CAAAA,EAAMA,EAAE,KAAK,CAAA,CACrB,IAAKA,CAAMA,EAAAA,CAAAA,CAAE,KAAK,CAAA,CAEhBC,CACHF,CAAAA,CAAAA,CAA2B,OAAS,CACjCG,CAAAA,EAAAA,CAAG,GAAGH,CAA0B,CAAA,CAChC,OAEJ,OAAIP,CAAAA,EAAS,MAAQ,EAAA,KAAA,GACpBS,CAAgBA,CAAAA,CAAAA,CACbE,IAAIF,CAAeT,CAAAA,CAAAA,CAAQ,OAAO,KAAK,CAAA,CACvCA,EAAQ,MAAO,CAAA,KAAA,CAAA,CAGP,CACX,KAAA,CAAOS,CACP,CAAA,OAAA,CAASH,EACT,KAAOF,CAAAA,CACR,CAID,CACD,CAAA,CAAA,CAEA,QAAWV,CAAa,IAAA,MAAA,CAAO,IAAKJ,CAAAA,CAAAA,CAAG,KAAK,CAAA,CAC3CC,EAAQG,CAAS,CAAA,CAAID,EAAmBC,CAAS,CAAA,CAGlD,OAAOH,CACR,CACD,CACD,CC3NO,CAAA,IAAMqB,EAAN,cAA0B,KAAM,CACtC,WAAYC,CAAAA,CAAAA,CAAiB,CAC5B,KAAMA,CAAAA,CAAO,CACb,CAAA,IAAA,CAAK,IAAO,CAAA,cACb,CACD,ECMO,IAAMC,EAAS,CAKpB,CACD,GAAAxB,CACA,CAAA,mBAAA,CAAAyB,CACA,CAAA,OAAA,CAASC,CACT,CAAA,SAAA,CAAAC,EAAY,CACZ,CAAA,CAAA,OAAA,CAAApB,EAAU,CAAC,QAAA,CAAU,OAAQ,QAAU,CAAA,QAAQ,CAChD,CAAA,GA0BM,CACL,IAAMqB,EAAiB7B,CAA8C,CAAA,CACpE,GAAAC,CACD,CAAC,EAEK6B,CAAc,CAAA,MAAOC,CAAsB,EAAA,CAChD,IAAMrB,CAAAA,CAAciB,EACjB,MAAMA,CAAAA,CAAgBI,CAAG,CACxB,CAAA,GACJ,OAAO,CACN,GAAGrB,CAAAA,CACH,SAAWmB,CAAAA,CAAAA,CAAe,qBAAqBnB,CAAW,CAC3D,CACD,CAEMsB,CAAAA,CAAAA,CAAgB,IAAIC,CAavB,CAAA,CACF,OAAS,CAAA,CAACC,CAAa,CAAA,CACvB,QAAS,CACR,MAAA,CAAQjC,CACT,CACD,CAAC,EAED,OAAA+B,CAAAA,CAAc,SAAU,CAAA,EAAE,CAAA,CAErBJ,GACJI,CAAc,CAAA,YAAA,CAAa,EAAE,CAAA,CA0MvB,CAiBN,cAAAH,CAAAA,CAAAA,CAIA,cAAeG,CAcf,CAAA,IAAA,CAAM,IACLG,UAAyB,CAAA,CACxB,GAAGT,CACH,CAAA,MAAA,CAAQM,EAAc,QAAS,EAAA,CAC/B,OAASF,CAAAA,CACV,CAAC,CAAA,CAIF,uBAnP8B,CAG7B,CACD,UAAAM,CACA,CAAA,IAAA,CAAAC,EACA,UAAAC,CAAAA,CAAAA,CAAa,MACd,CAAA,GAIM,CACL,IAAMC,EAAUtC,CAAG,CAAA,CAAA,CAAE,OAA0CmC,CAAS,CAAA,CAExE,OAAOJ,CAAc,CAAA,aAAA,CAAcI,CAAW,CAAA,CAC7C,IAAAC,CAAAA,CAAAA,CACA,OAASG,CAAM,EAAA,CACd,IAAMC,CAAsC,CAAA,CAM3CC,EACAC,CACI,GAAA,CACJ,OAAQD,CAAAA,EACP,IAAK,SAEJ,OAAOF,CAAAA,CAAE,UAAUG,CAAU,CAAA,CAC9B,IAAK,KAEJ,CAAA,OAAOH,CAAE,CAAA,SAAA,CAAUG,CAAU,CAAA,CAC9B,IAAK,QAEJ,CAAA,OAAOH,EAAE,YAAaG,CAAAA,CAAU,EACjC,IAAK,MAAA,CAEJ,OAAOH,CAAAA,CAAE,YAAaG,CAAAA,CAAU,EACjC,IAAK,SAAA,CAEJ,OAAOH,CAAE,CAAA,aAAA,CAAcG,CAAU,CAClC,CAAA,QACC,MAAM,IAAIpB,CACT,CAAA,CAAA,kBAAA,EAAqBmB,CAAO,CAC7B,0CAAA,CAAA,CACF,CACD,CAEME,CAAAA,CAAAA,CAAS,OAAO,OAAQL,CAAAA,CAAAA,CAAO,OAAO,CAAE,CAAA,MAAA,CAC7C,CAACM,CAAK,CAAA,CAACC,EAAKC,CAAK,CAAA,IAChBF,EAAIC,CAAG,CAAA,CAAIL,CACVM,CAAAA,CAAAA,CAAM,UAAW,EAAA,CACjBD,CACD,CACOD,CAAAA,CAAAA,CAAAA,CAER,EAID,CAAA,CAEMG,EAAY,MAAO,CAAA,OAAA,CAAQT,CAAO,CAAA,SAAS,CAAE,CAAA,MAAA,CAClD,CAACM,CAAK,CAAA,CAACC,EAAKC,CAAK,CAAA,IAChBF,EAAIC,CAAG,CAAA,CAAIN,CAAE,CAAA,QAAA,CAASM,CAAK,CAAA,CAC1B,MAAO,CAACG,CAAAA,CAAYC,IACnBA,CAAI,CAAA,SAAA,CAAUJ,CAAG,CAAE,CAAA,MAAA,CAAOR,CAAU,CACtC,CAAQ,CAAA,CACDO,GAER,EAID,EAEA,OAAO,CACN,GAAGD,CACH,CAAA,GAAGI,CACJ,CACD,CACD,CAAC,CACF,CAoKC,CAAA,iBAAA,CAlK6B,CAG5B,CACD,SAAA,CAAAZ,EACA,IAAAC,CAAAA,CACD,CAGM,GAAA,CACL,IAAME,CAAAA,CAAUtC,EAAG,CAAE,CAAA,MAAA,CAA0CmC,CAAS,CAqGxE,CAAA,OAAO,CAAE,SAnGSJ,CAAAA,CAAAA,CAAc,SAC/BK,CAAAA,CAAAA,EACC,CACC,EAAA,MAAA,CAAOD,CAAS,CAAE,CAAA,MAAA,CAAO,CAAC,CAAE,CAAA,WAAA,GAAgB,MAAOA,CAAAA,CAAS,EAAE,KAAM,CAAA,CAAC,CACtE,CACD,kBAAA,CAAA,CAAA,CACC,OAASI,CAAM,EAAA,CACd,IAAMW,CAAoC,CAAA,CAMzCT,CACAC,CAAAA,CAAAA,GACI,CACJ,OAAQD,GACP,IAAK,SAEJ,OAAOF,CAAAA,CAAE,IAAIG,CAAY,CAAA,CAAE,QAAU,CAAA,CAAA,CAAM,CAAC,CAAA,CAC7C,IAAK,KAEJ,CAAA,OAAOH,EAAE,GAAIG,CAAAA,CAAAA,CAAY,CAAE,QAAU,CAAA,CAAA,CAAM,CAAC,CAAA,CAC7C,IAAK,QAAA,CAEJ,OAAOH,CAAE,CAAA,MAAA,CAAOG,EAAY,CAAE,QAAA,CAAU,EAAM,CAAC,CAAA,CAChD,IAAK,MAAA,CAEJ,OAAOH,CAAAA,CAAE,OAAOG,CAAY,CAAA,CAAE,SAAU,CAAM,CAAA,CAAC,EAChD,IAAK,SAAA,CAEJ,OAAOH,CAAAA,CAAE,OAAQG,CAAAA,CAAAA,CAAY,CAAE,QAAU,CAAA,CAAA,CAAM,CAAC,CACjD,CAAA,QACC,MAAM,IAAIpB,CAAAA,CACT,CAAqBmB,kBAAAA,EAAAA,CAAO,CAC7B,kDAAA,CAAA,CACF,CACD,CA8BA,CAAA,OAAO,CACN,GA7Bc,MAAA,CAAO,QAAQH,CAAO,CAAA,OAAO,CAAE,CAAA,MAAA,CAC7C,CAACM,CAAAA,CAAK,CAACC,CAAKC,CAAAA,CAAK,KAChBF,CAAIC,CAAAA,CAAG,EAAIK,CACVJ,CAAAA,CAAAA,CAAM,UAAW,EAAA,CACjBD,CACD,CAAA,CACOD,GAER,EAID,CAmBA,CACD,CACD,CACD,CA0BoB,CAAA,iCAAA,CArBnBO,CACI,EAAA,CACJ,GAAI,CAACA,EAAK,OACV,IAAMC,EAGLC,CACI,EAAA,CACJ,IAAMC,CAAShB,CAAAA,CAAAA,CAAO,OAAQe,CAAAA,CAAU,CAClCE,CAAAA,CAAAA,CAAcJ,EAAIE,CAAU,CAAA,CAClC,GAAKE,CAEL,CAAA,OAAOC,GAAGF,CAAQC,CAAAA,CAAW,CAC9B,CAAA,CAEME,CAAa,CAAA,MAAA,CAAO,KAAKnB,CAAO,CAAA,OAAO,EAAE,GAC9Cc,CAAAA,CACD,EACA,OAAO/B,GAAAA,CAAI,GAAGoC,CAAU,CACzB,CAEsD,CACvD,CAmDA,CACD,EClTaC,IAAAA,CAAAA,CAA4BZ,GAA4B,CACpE,GAAI,CAACA,CAAAA,CAAO,MAAM,IAAIxB,EAAY,0CAA0C,CAAA,CAC5E,OAAOwB,CACR,CAAA,CAyCaa,EAA6Bb,CAAkB,EAAA,CAC3D,IAAMc,CAAAA,CAAId,CAAM,CAAA,EAAA,CAAG,CAAC,CACpB,CAAA,GAAI,CAACc,CAAG,CAAA,MAAM,IAAItC,CAAY,CAAA,2CAA2C,CACzE,CAAA,OAAOsC,CACR","file":"index.js","sourcesContent":["import { log } from \"node:console\";\nimport { and, or } from \"drizzle-orm\";\nimport type {\n\tGenericDrizzleDbTypeConstraints,\n\tQueryConditionObject,\n} from \"../types/genericDrizzleDbType\";\n\nexport type AbilityBuilder = ReturnType<typeof createAbilityBuilder>;\n\ntype Condition<DBParameters, UserContext> =\n\t| SimpleCondition<DBParameters>\n\t| SyncFunctionCondition<DBParameters, UserContext>;\n// | AsyncFunctionCondition<DBParameters, UserContext>;\n\ntype SimpleCondition<DBParameters> = DBParameters;\ntype SyncFunctionCondition<DBParameters, UserContext> = (\n\tcontext: UserContext,\n) => DBParameters;\n// type AsyncFunctionCondition<DBParameters, UserContext> = (\n// \tcontext: UserContext,\n// ) => Promise<DBParameters>;\n\n// type guards for the condition types\nfunction isSimpleCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SimpleCondition<DBParameters> {\n\treturn typeof condition !== \"function\";\n}\n\nfunction isSyncFunctionCondition<DBParameters, UserContext>(\n\tcondition: Condition<DBParameters, UserContext>,\n): condition is SyncFunctionCondition<DBParameters, UserContext> {\n\treturn (\n\t\ttypeof condition === \"function\" &&\n\t\tcondition.constructor.name !== \"AsyncFunction\"\n\t);\n}\n\n// function isAsyncFunctionCondition<DBParameters, UserContext>(\n// \tcondition: Condition<DBParameters, UserContext>,\n// ): condition is AsyncFunctionCondition<DBParameters, UserContext> {\n// \treturn (\n// \t\ttypeof condition === \"function\" &&\n// \t\tcondition.constructor.name === \"AsyncFunction\"\n// \t);\n// }\n\nexport const createAbilityBuilder = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tAction extends string,\n>({\n\tdb,\n}: {\n\tdb: DB;\n}) => {\n\ttype DBQueryKey = keyof DB[\"query\"];\n\ttype DBParameters = Parameters<DB[\"query\"][DBQueryKey][\"findMany\"]>[0];\n\n\tconst builder: {\n\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t} = {} as any;\n\n\tconst registeredConditions: {\n\t\t[key in DBQueryKey]: {\n\t\t\t[key in Action[number]]: (\n\t\t\t\t| QueryConditionObject\n\t\t\t\t| ((context: UserContext) => QueryConditionObject)\n\t\t\t)[];\n\t\t\t// | ((context: UserContext) => Promise<QueryConditionObject>)\n\t\t};\n\t} = {} as any;\n\n\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\tallow: (action: Action | Action[]) => {\n\t\t\tlet conditionsPerEntity = registeredConditions[entityKey];\n\t\t\tif (!conditionsPerEntity) {\n\t\t\t\tconditionsPerEntity = {} as any;\n\t\t\t\tregisteredConditions[entityKey] = conditionsPerEntity;\n\t\t\t}\n\n\t\t\tconst actions = Array.isArray(action) ? action : [action];\n\t\t\tfor (const action of actions) {\n\t\t\t\tlet conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\tconditionsPerEntityAndAction = [];\n\t\t\t\t\tconditionsPerEntity[action] = conditionsPerEntityAndAction;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\twhen: (condition: Condition<DBParameters, UserContext>) => {\n\t\t\t\t\tfor (const action of actions) {\n\t\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\t\tconditionsPerEntityAndAction.push(condition);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t});\n\n\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t}\n\treturn {\n\t\t...builder,\n\t\tregisteredConditions,\n\t\tbuildWithUserContext: (userContext: UserContext) => {\n\t\t\tconst builder: {\n\t\t\t\t[key in DBQueryKey]: ReturnType<typeof createEntityObject>;\n\t\t\t} = {} as any;\n\n\t\t\tconst createEntityObject = (entityKey: DBQueryKey) => ({\n\t\t\t\tfilter: (\n\t\t\t\t\taction: Action,\n\t\t\t\t\toptions?: {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Additional conditions applied only for this call. Useful for injecting one time additional filters\n\t\t\t\t\t\t * for e.g. user args in a handler.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tinject?: QueryConditionObject;\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\tconst conditionsPerEntity = registeredConditions[entityKey];\n\t\t\t\t\tif (!conditionsPerEntity) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #1\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst conditionsPerEntityAndAction = conditionsPerEntity[action];\n\t\t\t\t\tif (!conditionsPerEntityAndAction) {\n\t\t\t\t\t\tthrow \"TODO (No allowed entry found for this condition) #2\";\n\t\t\t\t\t}\n\n\t\t\t\t\tconst simpleConditions =\n\t\t\t\t\t\tconditionsPerEntityAndAction.filter(isSimpleCondition);\n\n\t\t\t\t\tconst syncFunctionConditions = conditionsPerEntityAndAction\n\t\t\t\t\t\t.filter(isSyncFunctionCondition)\n\t\t\t\t\t\t.map((condition) => condition(userContext));\n\n\t\t\t\t\t// const asyncFunctionConditions = await Promise.all(\n\t\t\t\t\t// \tconditionsPerEntityAndAction\n\t\t\t\t\t// \t\t.filter(isAsyncFunctionCondition)\n\t\t\t\t\t// \t\t.map((condition) => condition(userContext)),\n\t\t\t\t\t// );\n\n\t\t\t\t\tconst allConditionObjects = [\n\t\t\t\t\t\t...simpleConditions,\n\t\t\t\t\t\t...syncFunctionConditions,\n\t\t\t\t\t\t// ...asyncFunctionConditions,\n\t\t\t\t\t];\n\n\t\t\t\t\tlet highestLimit = undefined;\n\t\t\t\t\tfor (const conditionObject of allConditionObjects) {\n\t\t\t\t\t\tif (conditionObject.limit) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\thighestLimit === undefined ||\n\t\t\t\t\t\t\t\tconditionObject.limit > highestLimit\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\thighestLimit = conditionObject.limit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (options?.inject?.limit && highestLimit < options.inject.limit) {\n\t\t\t\t\t\thighestLimit = options.inject.limit;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet combinedAllowedColumns: Record<string, any> | undefined =\n\t\t\t\t\t\tundefined;\n\t\t\t\t\tfor (const conditionObject of [\n\t\t\t\t\t\t...allConditionObjects,\n\t\t\t\t\t\toptions?.inject ?? {},\n\t\t\t\t\t]) {\n\t\t\t\t\t\tif (conditionObject.columns) {\n\t\t\t\t\t\t\tif (combinedAllowedColumns === undefined) {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = conditionObject.columns;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedAllowedColumns = {\n\t\t\t\t\t\t\t\t\t...combinedAllowedColumns,\n\t\t\t\t\t\t\t\t\t...conditionObject.columns,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst accumulatedWhereConditions = allConditionObjects\n\t\t\t\t\t\t.filter((o) => o.where)\n\t\t\t\t\t\t.map((o) => o.where);\n\n\t\t\t\t\tlet combinedWhere =\n\t\t\t\t\t\taccumulatedWhereConditions.length > 0\n\t\t\t\t\t\t\t? or(...accumulatedWhereConditions)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tif (options?.inject?.where) {\n\t\t\t\t\t\tcombinedWhere = combinedWhere\n\t\t\t\t\t\t\t? and(combinedWhere, options.inject.where)\n\t\t\t\t\t\t\t: options.inject.where;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst ret = {\n\t\t\t\t\t\twhere: combinedWhere,\n\t\t\t\t\t\tcolumns: combinedAllowedColumns,\n\t\t\t\t\t\tlimit: highestLimit,\n\t\t\t\t\t};\n\n\t\t\t\t\t//TODO make this typesafe per actual entity\n\t\t\t\t\treturn ret;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfor (const entityKey of Object.keys(db.query) as DBQueryKey[]) {\n\t\t\t\tbuilder[entityKey] = createEntityObject(entityKey);\n\t\t\t}\n\n\t\t\treturn builder;\n\t\t},\n\t};\n};\n","export class RumbleError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RumbleError\";\n\t}\n}\n","import SchemaBuilder from \"@pothos/core\";\nimport DrizzlePlugin from \"@pothos/plugin-drizzle\";\nimport { and, eq } from \"drizzle-orm\";\nimport { type YogaServerOptions, createYoga } from \"graphql-yoga\";\nimport { createAbilityBuilder } from \"../abilities/builder\";\nimport { RumbleError } from \"../helpers/rumbleError\";\nimport type {\n\tGenericDrizzleDbTypeConstraints,\n\tQueryConditionObject,\n} from \"../types/genericDrizzleDbType\";\n\nexport const rumble = <\n\tUserContext extends Record<string, any>,\n\tDB extends GenericDrizzleDbTypeConstraints,\n\tRequestEvent extends Record<string, any>,\n\tAction extends string = \"create\" | \"read\" | \"update\" | \"delete\",\n>({\n\tdb,\n\tnativeServerOptions,\n\tcontext: makeUserContext,\n\tonlyQuery = false,\n\tactions = [\"create\", \"read\", \"update\", \"delete\"] as Action[],\n}: {\n\t/**\n\t * Your drizzle database instance\n\t */\n\tdb: DB;\n\t/**\n\t * Optional options for the native GraphQL Yoga server\n\t */\n\tnativeServerOptions?:\n\t\t| Omit<YogaServerOptions<RequestEvent, any>, \"schema\" | \"context\">\n\t\t| undefined;\n\t/**\n\t * A function for providing context for each request based on the incoming HTTP Request.\n\t * The type of the parameter equals the HTTPRequest type of your chosen server.\n\t */\n\tcontext?:\n\t\t| ((event: RequestEvent) => Promise<UserContext> | UserContext)\n\t\t| undefined;\n\t/**\n\t * If you only want to create queries and do not need mutations, enable this\n\t */\n\tonlyQuery?: boolean;\n\t/**\n\t * The actions that are available\n\t */\n\tactions?: Action[];\n}) => {\n\tconst abilityBuilder = createAbilityBuilder<UserContext, DB, Action>({\n\t\tdb,\n\t});\n\n\tconst makeContext = async (req: RequestEvent) => {\n\t\tconst userContext = makeUserContext\n\t\t\t? await makeUserContext(req)\n\t\t\t: ({} as UserContext);\n\t\treturn {\n\t\t\t...userContext,\n\t\t\tabilities: abilityBuilder.buildWithUserContext(userContext),\n\t\t};\n\t};\n\n\tconst nativeBuilder = new SchemaBuilder<{\n\t\tContext: Awaited<ReturnType<typeof makeContext>>;\n\t\t// Scalars: Scalars<Prisma.Decimal, Prisma.InputJsonValue | null, Prisma.InputJsonValue> & {\n\t\t// \tFile: {\n\t\t// \t\tInput: File;\n\t\t// \t\tOutput: never;\n\t\t// \t};\n\t\t// \tJSONObject: {\n\t\t// \t\tInput: any;\n\t\t// \t\tOutput: any;\n\t\t// \t};\n\t\t// };\n\t\tDrizzleSchema: DB[\"_\"][\"fullSchema\"];\n\t}>({\n\t\tplugins: [DrizzlePlugin],\n\t\tdrizzle: {\n\t\t\tclient: db,\n\t\t},\n\t});\n\n\tnativeBuilder.queryType({});\n\n\tif (!onlyQuery) {\n\t\tnativeBuilder.mutationType({});\n\t}\n\n\tconst implementDefaultObject = <\n\t\tExplicitTableName extends keyof NonNullable<DB[\"_\"][\"schema\"]>,\n\t\tRefName extends string,\n\t>({\n\t\ttableName,\n\t\tname,\n\t\treadAction = \"read\" as Action,\n\t}: {\n\t\ttableName: ExplicitTableName;\n\t\tname: RefName;\n\t\treadAction?: Action;\n\t}) => {\n\t\tconst schema = (db._.schema as NonNullable<DB[\"_\"][\"schema\"]>)[tableName];\n\n\t\treturn nativeBuilder.drizzleObject(tableName, {\n\t\t\tname,\n\t\t\tfields: (t) => {\n\t\t\t\tconst mapSQLTypeStringToExposedPothosType = <\n\t\t\t\t\tColumn extends keyof typeof schema.columns,\n\t\t\t\t\tSQLType extends ReturnType<\n\t\t\t\t\t\t(typeof schema.columns)[Column][\"getSQLType\"]\n\t\t\t\t\t>,\n\t\t\t\t>(\n\t\t\t\t\tsqlType: SQLType,\n\t\t\t\t\tcolumnName: Column,\n\t\t\t\t) => {\n\t\t\t\t\tswitch (sqlType) {\n\t\t\t\t\t\tcase \"serial\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeInt(columnName);\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeString(columnName);\n\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn t.exposeBoolean(columnName);\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new RumbleError(\n\t\t\t\t\t\t\t\t`Unknown SQL type: ${sqlType}. Please open an issue so it can be added.`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst fields = Object.entries(schema.columns).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = mapSQLTypeStringToExposedPothosType(\n\t\t\t\t\t\t\tvalue.getSQLType(),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tkeyof typeof schema.columns,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\tconst relations = Object.entries(schema.relations).reduce(\n\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\tacc[key] = t.relation(key, {\n\t\t\t\t\t\t\tquery: (_args: any, ctx: any) =>\n\t\t\t\t\t\t\t\tctx.abilities[key].filter(readAction),\n\t\t\t\t\t\t} as any) as any;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<\n\t\t\t\t\t\tkeyof typeof schema.relations,\n\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t>,\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\t...fields,\n\t\t\t\t\t...relations,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t};\n\n\tconst implementWhereArgType = <\n\t\tExplicitTableName extends keyof NonNullable<DB[\"_\"][\"schema\"]>,\n\t\tRefName extends string,\n\t>({\n\t\ttableName,\n\t\tname,\n\t}: {\n\t\ttableName: ExplicitTableName;\n\t\tname?: RefName | undefined;\n\t}) => {\n\t\tconst schema = (db._.schema as NonNullable<DB[\"_\"][\"schema\"]>)[tableName];\n\n\t\tconst inputType = nativeBuilder.inputType(\n\t\t\tname ??\n\t\t\t\t`${\n\t\t\t\t\tString(tableName).charAt(0).toUpperCase() + String(tableName).slice(1)\n\t\t\t\t}WhereInputArgument`,\n\t\t\t{\n\t\t\t\tfields: (t) => {\n\t\t\t\t\tconst mapSQLTypeStringToInputPothosType = <\n\t\t\t\t\t\tColumn extends keyof typeof schema.columns,\n\t\t\t\t\t\tSQLType extends ReturnType<\n\t\t\t\t\t\t\t(typeof schema.columns)[Column][\"getSQLType\"]\n\t\t\t\t\t\t>,\n\t\t\t\t\t>(\n\t\t\t\t\t\tsqlType: SQLType,\n\t\t\t\t\t\tcolumnName: Column,\n\t\t\t\t\t) => {\n\t\t\t\t\t\tswitch (sqlType) {\n\t\t\t\t\t\t\tcase \"serial\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.int(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.int(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.string(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.string(columnName, { required: false });\n\t\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\treturn t.boolean(columnName, { required: false });\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new RumbleError(\n\t\t\t\t\t\t\t\t\t`Unknown SQL type: ${sqlType} (input). Please open an issue so it can be added.`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tconst fields = Object.entries(schema.columns).reduce(\n\t\t\t\t\t\t(acc, [key, value]) => {\n\t\t\t\t\t\t\tacc[key] = mapSQLTypeStringToInputPothosType(\n\t\t\t\t\t\t\t\tvalue.getSQLType(),\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{} as Record<\n\t\t\t\t\t\t\tkeyof typeof schema.columns,\n\t\t\t\t\t\t\tReturnType<typeof mapSQLTypeStringToInputPothosType>\n\t\t\t\t\t\t>,\n\t\t\t\t\t);\n\n\t\t\t\t\t// const relations = Object.entries(schema.relations).reduce(\n\t\t\t\t\t// (acc, [key, value]) => {\n\t\t\t\t\t// acc[key] = t.relation(key, {\n\t\t\t\t\t// query: (_args: any, ctx: any) =>\n\t\t\t\t\t// ctx.abilities[tableName].filter(readAction),\n\t\t\t\t\t// } as any) as any;\n\t\t\t\t\t// return acc;\n\t\t\t\t\t// },\n\t\t\t\t\t// {} as Record<\n\t\t\t\t\t// keyof typeof schema.relations,\n\t\t\t\t\t// ReturnType<typeof mapSQLTypeStringToExposedPothosType>\n\t\t\t\t\t// >\n\t\t\t\t\t// );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t// ...relations,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\tconst transformArgumentToQueryCondition = <\n\t\t\tT extends typeof inputType.$inferInput,\n\t\t>(\n\t\t\targ: T | null | undefined,\n\t\t) => {\n\t\t\tif (!arg) return undefined;\n\t\t\tconst mapColumnToQueryCondition = <\n\t\t\t\tColumnName extends keyof typeof schema.columns,\n\t\t\t>(\n\t\t\t\tcolumnname: ColumnName,\n\t\t\t) => {\n\t\t\t\tconst column = schema.columns[columnname];\n\t\t\t\tconst filterValue = arg[columnname];\n\t\t\t\tif (!filterValue) return;\n\n\t\t\t\treturn eq(column, filterValue);\n\t\t\t};\n\n\t\t\tconst conditions = Object.keys(schema.columns).map(\n\t\t\t\tmapColumnToQueryCondition,\n\t\t\t);\n\t\t\treturn and(...conditions);\n\t\t};\n\n\t\treturn { inputType, transformArgumentToQueryCondition };\n\t};\n\n\treturn {\n\t\t/**\n * The ability builder. Use it to declare whats allowed for each entity in your DB.\n * \n * @example\n * \n * ```ts\n * // users can edit themselves\n abilityBuilder.users\n .allow([\"read\", \"update\", \"delete\"])\n .when(({ userId }) => ({ where: eq(schema.users.id, userId) }));\n \n // everyone can read posts\n abilityBuilder.posts.allow(\"read\");\n * \n * ```\n */\n\t\tabilityBuilder,\n\t\t/**\n\t\t * The pothos schema builder. See https://pothos-graphql.dev/docs/plugins/drizzle\n\t\t */\n\t\tschemaBuilder: nativeBuilder,\n\t\t/**\n * The native yoga instance. Can be used to run an actual HTTP server.\n * \n * @example\n * \n * ```ts\n import { createServer } from \"node:http\";\n * const server = createServer(yoga());\n server.listen(3000, () => {\n console.log(\"Visit http://localhost:3000/graphql\");\n });\n * ```\n */\n\t\tyoga: () =>\n\t\t\tcreateYoga<RequestEvent>({\n\t\t\t\t...nativeServerOptions,\n\t\t\t\tschema: nativeBuilder.toSchema(),\n\t\t\t\tcontext: makeContext,\n\t\t\t}),\n\t\t/**\n\t\t * A function for creating default objects for your schema\n\t\t */\n\t\timplementDefaultObject,\n\t\t/**\n\t\t * A function for creating where args to filter entities\n\t\t */\n\t\timplementWhereArg: implementWhereArgType,\n\t};\n};\n","import { RumbleError } from \"./rumbleError\";\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n * schemaBuilder.queryFields((t) => {\n return {\n findFirstUser: t.drizzleField({\n type: UserRef,\n resolve: (query, root, args, ctx, info) => {\n return (\n db.query.users\n .findFirst({\n ...query,\n where: ctx.abilities.users.filter(\"read\").where,\n })\n // note that we need to manually raise an error if the value is not found\n .then(assertFindFirstExists)\n );\n },\n }),\n };\n });\n * ```\n */\nexport const assertFindFirstExists = <T>(value: T | undefined): T => {\n\tif (!value) throw new RumbleError(\"Value not found but required (findFirst)\");\n\treturn value;\n};\n\n/**\n * \n * Helper function to map a drizzle findFirst query result,\n * which may be optional, to a correct drizzle type.\n * \n * @throws RumbleError\n * \n * @example\n * \n * ```ts\n schemaBuilder.mutationFields((t) => {\n return {\n updateUsername: t.drizzleField({\n type: UserRef,\n args: {\n userId: t.arg.int({ required: true }),\n newName: t.arg.string({ required: true }),\n },\n resolve: (query, root, args, ctx, info) => {\n return db\n .update(schema.users)\n .set({\n name: args.newName,\n })\n .where(\n and(\n eq(schema.users.id, args.userId),\n ctx.abilities.users.filter(\"update\").where\n )\n )\n .returning({ id: schema.users.id, name: schema.users.name })\n // note that we need to manually raise an error if the value is not found\n .then(assertFirstEntryExists);\n },\n }),\n };\n });\n * ```\n */\nexport const assertFirstEntryExists = <T>(value: T[]): T => {\n\tconst v = value.at(0);\n\tif (!v) throw new RumbleError(\"Value not found but required (firstEntry)\");\n\treturn v;\n};\n"]}
|
package/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"name":"@m1212e/rumble","module":"index.ts","type":"module","peerDependencies":{"typescript":"^5.7.2","drizzle-orm":"^0.38.3"},"dependencies":{"@pothos/plugin-drizzle":"^0.5.3","graphql-yoga":"^5.10.8"
|
1
|
+
{"name":"@m1212e/rumble","module":"index.ts","type":"module","peerDependencies":{"typescript":"^5.7.2","drizzle-orm":"^0.38.3"},"dependencies":{"@pothos/core":"^4.3.0","@pothos/plugin-drizzle":"^0.5.3","graphql-yoga":"^5.10.8"},"version":"0.0.9","exports":{"./package.json":"./package.json",".":{"require":"./index.cjs","import":"./index.js","node":"./index.cjs","default":"./index.cjs"}}}
|