@vantreeseba/drizzle-graphql 7.4.0 → 7.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +189 -0
- package/dist/README.md +189 -0
- package/dist/index.cjs +997 -247
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +283 -2
- package/dist/index.d.ts +283 -2
- package/dist/index.js +992 -246
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
|
-
import { getColumns as getColumns6, is as
|
|
3
|
-
import { MySqlDatabase } from "drizzle-orm/mysql-core";
|
|
4
|
-
import { PgAsyncDatabase } from "drizzle-orm/pg-core";
|
|
5
|
-
import { BaseSQLiteDatabase } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import { getColumns as getColumns6, is as is9, Table as Table2 } from "drizzle-orm";
|
|
3
|
+
import { MySqlDatabase as MySqlDatabase2 } from "drizzle-orm/mysql-core";
|
|
4
|
+
import { PgAsyncDatabase as PgAsyncDatabase2 } from "drizzle-orm/pg-core";
|
|
5
|
+
import { BaseSQLiteDatabase as BaseSQLiteDatabase2 } from "drizzle-orm/sqlite-core";
|
|
6
6
|
import {
|
|
7
7
|
GraphQLObjectType as GraphQLObjectType5,
|
|
8
8
|
GraphQLSchema
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
One as One2,
|
|
39
39
|
or,
|
|
40
40
|
relationsFilterToSQL,
|
|
41
|
+
SQL,
|
|
41
42
|
sql as sql2
|
|
42
43
|
} from "drizzle-orm";
|
|
43
44
|
import {
|
|
@@ -606,6 +607,123 @@ var remapFromGraphQLArrayInput = (queryInput, table) => {
|
|
|
606
607
|
return queryInput;
|
|
607
608
|
};
|
|
608
609
|
|
|
610
|
+
// src/util/extensions.ts
|
|
611
|
+
var drizzleExtension = (target) => {
|
|
612
|
+
const value = target?.extensions?.drizzle;
|
|
613
|
+
return value && typeof value === "object" ? value : void 0;
|
|
614
|
+
};
|
|
615
|
+
var isDrizzleFieldExtension = (value) => !!value && value.kind !== "type";
|
|
616
|
+
var tableFieldExtensions = (table, primaryKey) => (meta) => ({
|
|
617
|
+
table,
|
|
618
|
+
primaryKey,
|
|
619
|
+
...meta
|
|
620
|
+
});
|
|
621
|
+
var tableTypeExtension = (table, primaryKey) => ({
|
|
622
|
+
table,
|
|
623
|
+
kind: "type",
|
|
624
|
+
primaryKey
|
|
625
|
+
});
|
|
626
|
+
var relationFieldExtension = (params) => ({
|
|
627
|
+
table: params.targetTable,
|
|
628
|
+
kind: params.aggregate ? "aggregate" : "relation",
|
|
629
|
+
operation: params.aggregate ? "relationAggregate" : "relation",
|
|
630
|
+
// An aggregate over a to-many relation still resolves to a single aggregate object.
|
|
631
|
+
single: params.aggregate ? true : params.single,
|
|
632
|
+
targetArg: "where",
|
|
633
|
+
primaryKey: params.primaryKey,
|
|
634
|
+
relation: params.relation,
|
|
635
|
+
parentTable: params.parentTable
|
|
636
|
+
});
|
|
637
|
+
var keyFromValues = (entry, primaryKey) => {
|
|
638
|
+
if (!entry || typeof entry !== "object") {
|
|
639
|
+
return void 0;
|
|
640
|
+
}
|
|
641
|
+
const row = {};
|
|
642
|
+
for (const column of primaryKey) {
|
|
643
|
+
const value = entry[column];
|
|
644
|
+
if (value === void 0 || value === null) {
|
|
645
|
+
return void 0;
|
|
646
|
+
}
|
|
647
|
+
row[column] = value;
|
|
648
|
+
}
|
|
649
|
+
return row;
|
|
650
|
+
};
|
|
651
|
+
var keysFromWhere = (where, primaryKey) => {
|
|
652
|
+
const none = { rows: [], complete: false };
|
|
653
|
+
if (!where || typeof where !== "object" || Array.isArray(where)) {
|
|
654
|
+
return none;
|
|
655
|
+
}
|
|
656
|
+
const filters = where;
|
|
657
|
+
if (filters.OR || filters.AND || filters.NOT) {
|
|
658
|
+
return none;
|
|
659
|
+
}
|
|
660
|
+
if (primaryKey.length > 1) {
|
|
661
|
+
const row = {};
|
|
662
|
+
for (const column2 of primaryKey) {
|
|
663
|
+
const operators2 = filters[column2];
|
|
664
|
+
if (!operators2 || typeof operators2 !== "object" || operators2.eq === void 0) {
|
|
665
|
+
return none;
|
|
666
|
+
}
|
|
667
|
+
row[column2] = operators2.eq;
|
|
668
|
+
}
|
|
669
|
+
return { rows: [row], complete: Object.keys(filters).length === primaryKey.length };
|
|
670
|
+
}
|
|
671
|
+
const column = primaryKey[0];
|
|
672
|
+
if (!column) {
|
|
673
|
+
return none;
|
|
674
|
+
}
|
|
675
|
+
const operators = filters[column];
|
|
676
|
+
if (!operators || typeof operators !== "object") {
|
|
677
|
+
return none;
|
|
678
|
+
}
|
|
679
|
+
const exact = Object.keys(filters).length === 1 && Object.keys(operators).length === 1;
|
|
680
|
+
if (operators.eq !== void 0) {
|
|
681
|
+
return { rows: [{ [column]: operators.eq }], complete: exact };
|
|
682
|
+
}
|
|
683
|
+
if (Array.isArray(operators.inArray)) {
|
|
684
|
+
return { rows: operators.inArray.map((value) => ({ [column]: value })), complete: exact };
|
|
685
|
+
}
|
|
686
|
+
return none;
|
|
687
|
+
};
|
|
688
|
+
var identifyRows = (field, args) => {
|
|
689
|
+
const meta = drizzleExtension(field);
|
|
690
|
+
if (!isDrizzleFieldExtension(meta)) {
|
|
691
|
+
return void 0;
|
|
692
|
+
}
|
|
693
|
+
const { table, primaryKey, targetArg } = meta;
|
|
694
|
+
const empty = { table, primaryKey, rows: [], complete: false };
|
|
695
|
+
if (!primaryKey.length || !targetArg) {
|
|
696
|
+
return empty;
|
|
697
|
+
}
|
|
698
|
+
const target = args?.[targetArg];
|
|
699
|
+
if (targetArg === "values") {
|
|
700
|
+
const entries = Array.isArray(target) ? target : target === void 0 ? [] : [target];
|
|
701
|
+
const rows = entries.map((entry) => keyFromValues(entry, primaryKey));
|
|
702
|
+
return {
|
|
703
|
+
table,
|
|
704
|
+
primaryKey,
|
|
705
|
+
rows: rows.filter((row) => !!row),
|
|
706
|
+
// A row whose key the database generates is not identifiable before the write.
|
|
707
|
+
complete: entries.length > 0 && rows.every(Boolean)
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
if (targetArg === "updates") {
|
|
711
|
+
if (!Array.isArray(target)) {
|
|
712
|
+
return empty;
|
|
713
|
+
}
|
|
714
|
+
const perEntry = target.map(
|
|
715
|
+
(entry) => keysFromWhere(entry?.where, primaryKey)
|
|
716
|
+
);
|
|
717
|
+
return {
|
|
718
|
+
table,
|
|
719
|
+
primaryKey,
|
|
720
|
+
rows: perEntry.flatMap((entry) => entry.rows),
|
|
721
|
+
complete: target.length > 0 && perEntry.every((entry) => entry.complete)
|
|
722
|
+
};
|
|
723
|
+
}
|
|
724
|
+
return { table, primaryKey, ...keysFromWhere(target, primaryKey) };
|
|
725
|
+
};
|
|
726
|
+
|
|
609
727
|
// src/util/builders/field-updates.ts
|
|
610
728
|
import { getColumns, sql } from "drizzle-orm";
|
|
611
729
|
import {
|
|
@@ -1037,7 +1155,7 @@ var batchedPaginatedRelationQuery = async (db, targetTable, foreignCol, whereCon
|
|
|
1037
1155
|
}
|
|
1038
1156
|
return rows;
|
|
1039
1157
|
};
|
|
1040
|
-
var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits) => ({ tableName, relationName, relEntry, isOne }) => {
|
|
1158
|
+
var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits, scopes) => ({ tableName, relationName, relEntry, isOne }) => {
|
|
1041
1159
|
const parentTable = tables[tableName];
|
|
1042
1160
|
const targetTableName = relEntry.targetTableName;
|
|
1043
1161
|
const targetTable = tables[targetTableName];
|
|
@@ -1098,10 +1216,16 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1098
1216
|
const loader = getOrCreateLoader(context, loaderKey, async (parentIds) => {
|
|
1099
1217
|
const executor = resolveExecutor(db, context);
|
|
1100
1218
|
const uniqueIds = [...new Set(parentIds)];
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1219
|
+
const scope = resolveScope(scopes, context, filterCtx);
|
|
1220
|
+
let whereCondition = withScope(
|
|
1221
|
+
scope,
|
|
1222
|
+
targetTableName,
|
|
1223
|
+
targetTable,
|
|
1224
|
+
and(
|
|
1225
|
+
inArray(foreignCol, uniqueIds),
|
|
1226
|
+
whereArg ? extractFilters(targetTable, targetTableName, whereArg, relationFilterCtx(filterCtx, targetTableName)) : void 0,
|
|
1227
|
+
cursorValues ? buildCursorCondition(targetTable, cursorEntries, cursorValues, nullOrdering) : void 0
|
|
1228
|
+
)
|
|
1105
1229
|
);
|
|
1106
1230
|
if (distinct) {
|
|
1107
1231
|
const keys = await selectDistinctKeys({
|
|
@@ -1159,6 +1283,14 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1159
1283
|
return loader.load(localValue);
|
|
1160
1284
|
};
|
|
1161
1285
|
};
|
|
1286
|
+
var relationExtensionFor = (relEntry, parentTable, relationName, isOne, aggregate) => relationFieldExtension({
|
|
1287
|
+
targetTable: relEntry.targetTableName,
|
|
1288
|
+
parentTable,
|
|
1289
|
+
relation: relationName,
|
|
1290
|
+
single: isOne,
|
|
1291
|
+
primaryKey: relEntry.targetPkNames ?? [],
|
|
1292
|
+
aggregate
|
|
1293
|
+
});
|
|
1162
1294
|
var columnDocs = (docs, column, tableName, columnName) => {
|
|
1163
1295
|
const description = docs.describeColumn?.(column, { tableName, columnName });
|
|
1164
1296
|
const deprecationReason = docs.deprecateColumn?.(column, { tableName, columnName });
|
|
@@ -1838,7 +1970,8 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1838
1970
|
const shell = new GraphQLObjectType2({
|
|
1839
1971
|
name: typeName,
|
|
1840
1972
|
description: cacheCtx.docs.describeTable?.(tableName),
|
|
1841
|
-
fields: () => ({ ...tableFields, ...container.fields })
|
|
1973
|
+
fields: () => ({ ...tableFields, ...container.fields }),
|
|
1974
|
+
extensions: { drizzle: tableTypeExtension(tableName, cacheCtx.primaryKeyOf?.(tableName) ?? []) }
|
|
1842
1975
|
});
|
|
1843
1976
|
cacheCtx.objectTypeCache.set(tableName, shell);
|
|
1844
1977
|
}
|
|
@@ -1880,7 +2013,10 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1880
2013
|
relType = new GraphQLObjectType2({
|
|
1881
2014
|
name: resolveTypeName(targetTableName, typeNameMapper),
|
|
1882
2015
|
description: cacheCtx.docs.describeTable?.(targetTableName),
|
|
1883
|
-
fields: () => ({ ...targetTableFields, ...capturedTargetContainer.fields })
|
|
2016
|
+
fields: () => ({ ...targetTableFields, ...capturedTargetContainer.fields }),
|
|
2017
|
+
extensions: {
|
|
2018
|
+
drizzle: tableTypeExtension(targetTableName, cacheCtx.primaryKeyOf?.(targetTableName) ?? [])
|
|
2019
|
+
}
|
|
1884
2020
|
});
|
|
1885
2021
|
cacheCtx.objectTypeCache.set(targetTableName, relType);
|
|
1886
2022
|
}
|
|
@@ -1897,7 +2033,8 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1897
2033
|
where: { type: relSelectData.filters }
|
|
1898
2034
|
},
|
|
1899
2035
|
resolve,
|
|
1900
|
-
...relationDocs
|
|
2036
|
+
...relationDocs,
|
|
2037
|
+
extensions: { drizzle: relationExtensionFor(relEntry, tableName, relationName, true) }
|
|
1901
2038
|
}
|
|
1902
2039
|
]);
|
|
1903
2040
|
continue;
|
|
@@ -1920,11 +2057,10 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1920
2057
|
},
|
|
1921
2058
|
resolve,
|
|
1922
2059
|
...relationDocs,
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
} : {}
|
|
2060
|
+
extensions: {
|
|
2061
|
+
drizzle: relationExtensionFor(relEntry, tableName, relationName, false),
|
|
2062
|
+
...cacheCtx.complexity ? { complexity: listFieldComplexity(cacheCtx.complexity, cacheCtx.limits?.(targetTableName)) } : {}
|
|
2063
|
+
}
|
|
1928
2064
|
}
|
|
1929
2065
|
]);
|
|
1930
2066
|
const aggregateFieldName = `${relationName}Aggregate`;
|
|
@@ -1943,7 +2079,10 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1943
2079
|
where: { type: relSelectData.filters }
|
|
1944
2080
|
},
|
|
1945
2081
|
resolve: relationAggregate.resolve,
|
|
1946
|
-
|
|
2082
|
+
extensions: {
|
|
2083
|
+
drizzle: relationExtensionFor(relEntry, tableName, relationName, isOne, true),
|
|
2084
|
+
...cacheCtx.complexity ? { complexity: aggregateFieldComplexity(cacheCtx.complexity) } : {}
|
|
2085
|
+
}
|
|
1947
2086
|
}
|
|
1948
2087
|
]);
|
|
1949
2088
|
}
|
|
@@ -1992,9 +2131,11 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
1992
2131
|
const table = tables[tableName];
|
|
1993
2132
|
const columns = visibleColumns(table);
|
|
1994
2133
|
const columnEntries = Object.entries(columns);
|
|
2134
|
+
const contextColumns = cacheCtx.contextValuesOf?.(tableName);
|
|
2135
|
+
const writableEntries = contextColumns ? columnEntries.filter(([columnName]) => !(columnName in contextColumns)) : columnEntries;
|
|
1995
2136
|
const relaxedColumns = nestedWrites?.relaxedColumns(tableName);
|
|
1996
2137
|
const insertFields = Object.fromEntries(
|
|
1997
|
-
|
|
2138
|
+
writableEntries.map(([columnName, column]) => {
|
|
1998
2139
|
const converted = drizzleColumnToGraphQLType(
|
|
1999
2140
|
column,
|
|
2000
2141
|
columnName,
|
|
@@ -2010,7 +2151,7 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
2010
2151
|
})
|
|
2011
2152
|
);
|
|
2012
2153
|
const updateFields = Object.fromEntries(
|
|
2013
|
-
|
|
2154
|
+
writableEntries.map(([columnName, column]) => {
|
|
2014
2155
|
const converted = drizzleColumnToGraphQLType(column, columnName, tableName, true, false, true);
|
|
2015
2156
|
const operations = cacheCtx.featureOf(tableName).fieldUpdateOperations ? fieldUpdateInputType(column, columnName, tableName) : void 0;
|
|
2016
2157
|
const field = operations ? { ...converted, type: operations } : converted;
|
|
@@ -2029,7 +2170,8 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
2029
2170
|
const selectSingleOutput = cacheCtx.objectTypeCache.get(tableName) ?? new GraphQLObjectType2({
|
|
2030
2171
|
name: resolveTypeName(tableName, typeNameMapper),
|
|
2031
2172
|
description: cacheCtx.docs.describeTable?.(tableName),
|
|
2032
|
-
fields: { ...tableFields, ...relationFields }
|
|
2173
|
+
fields: { ...tableFields, ...relationFields },
|
|
2174
|
+
extensions: { drizzle: tableTypeExtension(tableName, cacheCtx.primaryKeyOf?.(tableName) ?? []) }
|
|
2033
2175
|
});
|
|
2034
2176
|
const selectArrOutput = new GraphQLNonNull3(new GraphQLList3(new GraphQLNonNull3(selectSingleOutput)));
|
|
2035
2177
|
const arrTableItemOutput = withReturning ? (
|
|
@@ -2532,7 +2674,69 @@ var extractFilters = (table, tableName, filters, relationCtx) => {
|
|
|
2532
2674
|
}
|
|
2533
2675
|
return variants.length ? variants.length > 1 ? and(...variants) : variants[0] : void 0;
|
|
2534
2676
|
};
|
|
2535
|
-
var
|
|
2677
|
+
var resolveScope = (scopes, context, filterCtx) => {
|
|
2678
|
+
if (!scopes) {
|
|
2679
|
+
return void 0;
|
|
2680
|
+
}
|
|
2681
|
+
return {
|
|
2682
|
+
has: (tableName) => !!scopes(tableName),
|
|
2683
|
+
on: (tableName, table) => {
|
|
2684
|
+
const hook = scopes(tableName);
|
|
2685
|
+
if (!hook) {
|
|
2686
|
+
return void 0;
|
|
2687
|
+
}
|
|
2688
|
+
const predicate = hook(context, table);
|
|
2689
|
+
if (predicate === void 0 || predicate === null) {
|
|
2690
|
+
return void 0;
|
|
2691
|
+
}
|
|
2692
|
+
if (is3(predicate, SQL)) {
|
|
2693
|
+
return predicate;
|
|
2694
|
+
}
|
|
2695
|
+
if (typeof predicate !== "object") {
|
|
2696
|
+
throw new GraphQLError4(
|
|
2697
|
+
`Drizzle-GraphQL Error: the scope for '${tableName}' returned a ${typeof predicate}. A scope returns a filter object, a Drizzle SQL expression, or undefined.`
|
|
2698
|
+
);
|
|
2699
|
+
}
|
|
2700
|
+
return extractFilters(table, tableName, predicate, relationFilterCtx(filterCtx, tableName));
|
|
2701
|
+
}
|
|
2702
|
+
};
|
|
2703
|
+
};
|
|
2704
|
+
var withScope = (scope, tableName, table, condition) => {
|
|
2705
|
+
const predicate = scope?.on(tableName, table);
|
|
2706
|
+
return predicate ? and(condition, predicate) : condition;
|
|
2707
|
+
};
|
|
2708
|
+
var bindPolicies = (policies, filterCtx) => policies?.scope || policies?.contextValues ? {
|
|
2709
|
+
scope: policies.scope ? (context) => resolveScope(policies.scope, context, filterCtx) : void 0,
|
|
2710
|
+
contextValues: policies.contextValues
|
|
2711
|
+
} : void 0;
|
|
2712
|
+
var applyContextValues = (values, hooks, context) => {
|
|
2713
|
+
if (!hooks) {
|
|
2714
|
+
return values;
|
|
2715
|
+
}
|
|
2716
|
+
for (const [columnName, hook] of Object.entries(hooks)) {
|
|
2717
|
+
values[columnName] = hook(context);
|
|
2718
|
+
}
|
|
2719
|
+
return values;
|
|
2720
|
+
};
|
|
2721
|
+
var applyContextValuesAll = (rows, hooks, context) => {
|
|
2722
|
+
if (!hooks) {
|
|
2723
|
+
return rows;
|
|
2724
|
+
}
|
|
2725
|
+
for (const row of rows) {
|
|
2726
|
+
applyContextValues(row, hooks, context);
|
|
2727
|
+
}
|
|
2728
|
+
return rows;
|
|
2729
|
+
};
|
|
2730
|
+
var stripContextValues = (values, hooks) => {
|
|
2731
|
+
if (!hooks) {
|
|
2732
|
+
return values;
|
|
2733
|
+
}
|
|
2734
|
+
for (const columnName of Object.keys(hooks)) {
|
|
2735
|
+
delete values[columnName];
|
|
2736
|
+
}
|
|
2737
|
+
return values;
|
|
2738
|
+
};
|
|
2739
|
+
var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, originField, typeNameMapper, _isInitial = false, filterCtx, limits, scope) => {
|
|
2536
2740
|
const relationsForTable = relationMap[tableName];
|
|
2537
2741
|
if (!relationsForTable) {
|
|
2538
2742
|
return void 0;
|
|
@@ -2578,8 +2782,13 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
|
|
|
2578
2782
|
const offset = relationArgs?.offset ?? void 0;
|
|
2579
2783
|
const limit = is3(relEntry.relation, One2) ? relationArgs?.limit ?? void 0 : applyLimitPolicy(relationArgs?.limit, limits?.(targetTableName), `${tableName}.${relName}`);
|
|
2580
2784
|
const relWhere = relationArgs?.where;
|
|
2581
|
-
thisRecord.where = relWhere ? {
|
|
2582
|
-
RAW: (aliasedTable2) =>
|
|
2785
|
+
thisRecord.where = relWhere || scope?.has(targetTableName) ? {
|
|
2786
|
+
RAW: (aliasedTable2) => withScope(
|
|
2787
|
+
scope,
|
|
2788
|
+
targetTableName,
|
|
2789
|
+
aliasedTable2,
|
|
2790
|
+
relWhere ? extractFilters(aliasedTable2, relName, relWhere, relationFilterCtx(filterCtx, targetTableName)) : void 0
|
|
2791
|
+
)
|
|
2583
2792
|
} : void 0;
|
|
2584
2793
|
const hasPagination = offset != null || limit != null;
|
|
2585
2794
|
const pkNames = targetPkNames ?? [];
|
|
@@ -2595,14 +2804,15 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
|
|
|
2595
2804
|
typeNameMapper,
|
|
2596
2805
|
false,
|
|
2597
2806
|
filterCtx,
|
|
2598
|
-
limits
|
|
2807
|
+
limits,
|
|
2808
|
+
scope
|
|
2599
2809
|
) : void 0;
|
|
2600
2810
|
thisRecord.with = relWith;
|
|
2601
2811
|
args[relName] = thisRecord;
|
|
2602
2812
|
}
|
|
2603
2813
|
return args;
|
|
2604
2814
|
};
|
|
2605
|
-
var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits) => {
|
|
2815
|
+
var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits, scope) => {
|
|
2606
2816
|
if (!info) {
|
|
2607
2817
|
return void 0;
|
|
2608
2818
|
}
|
|
@@ -2615,7 +2825,8 @@ var extractRelationsParams = (relationMap, tables, tableName, info, typeName, ty
|
|
|
2615
2825
|
typeNameMapper,
|
|
2616
2826
|
true,
|
|
2617
2827
|
filterCtx,
|
|
2618
|
-
limits
|
|
2828
|
+
limits,
|
|
2829
|
+
scope
|
|
2619
2830
|
);
|
|
2620
2831
|
};
|
|
2621
2832
|
var pruneNonEagerRelations = (relationMap, shouldEagerLoad) => {
|
|
@@ -3025,7 +3236,8 @@ var prepareMutationRelationColumns = (params) => {
|
|
|
3025
3236
|
typeName,
|
|
3026
3237
|
typeNameMapper,
|
|
3027
3238
|
void 0,
|
|
3028
|
-
params.limits
|
|
3239
|
+
params.limits,
|
|
3240
|
+
params.scope
|
|
3029
3241
|
) : void 0;
|
|
3030
3242
|
const hasRelations = !!(withParams && Object.keys(withParams).length);
|
|
3031
3243
|
const baseColumns = extractSelectedColumnsFromTreeSQLFormat(parsedInfo.fieldsByTypeName[typeName], table, {
|
|
@@ -3259,7 +3471,8 @@ var runRelationalSelect = async (opts) => {
|
|
|
3259
3471
|
single,
|
|
3260
3472
|
filterCtx,
|
|
3261
3473
|
pkNames,
|
|
3262
|
-
after
|
|
3474
|
+
after,
|
|
3475
|
+
scope
|
|
3263
3476
|
} = opts;
|
|
3264
3477
|
const distinct = opts.distinct?.length ? opts.distinct : void 0;
|
|
3265
3478
|
const cursorSelected = !single && isCursorFieldSelected(parsedInfo.fieldsByTypeName[typeName], table);
|
|
@@ -3291,7 +3504,12 @@ var runRelationalSelect = async (opts) => {
|
|
|
3291
3504
|
tableName,
|
|
3292
3505
|
distinct,
|
|
3293
3506
|
pkNames: pkNames ?? [],
|
|
3294
|
-
where:
|
|
3507
|
+
where: withScope(
|
|
3508
|
+
scope,
|
|
3509
|
+
tableName,
|
|
3510
|
+
table,
|
|
3511
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
3512
|
+
),
|
|
3295
3513
|
orderBy,
|
|
3296
3514
|
limit: single ? 1 : opts.limit,
|
|
3297
3515
|
offset
|
|
@@ -3318,15 +3536,23 @@ var runRelationalSelect = async (opts) => {
|
|
|
3318
3536
|
// exactly the ordering the cursor encodes and the keyset predicate compares against.
|
|
3319
3537
|
(aliasedTable2) => cursorOrderExprs(aliasedTable2, cursorEntries)
|
|
3320
3538
|
) : orderBy ? (aliasedTable2) => extractOrderBy(aliasedTable2, orderBy, relationFilterCtx(filterCtx, tableName), where) : needsDefaultOrder && pkNames?.length ? (aliasedTable2) => primaryKeyOrderExprs(aliasedTable2, pkNames) : void 0,
|
|
3321
|
-
where: distinctKeys ?
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3539
|
+
where: distinctKeys ? (
|
|
3540
|
+
// The distinct pass already ran inside the scope, so the keys it picked are in it.
|
|
3541
|
+
{ RAW: (aliasedTable2) => primaryKeyRestriction(aliasedTable2, pkNames, distinctKeys) }
|
|
3542
|
+
) : where || cursorValues || scope?.has(tableName) ? {
|
|
3543
|
+
RAW: (aliasedTable2) => withScope(
|
|
3544
|
+
scope,
|
|
3545
|
+
tableName,
|
|
3546
|
+
aliasedTable2,
|
|
3547
|
+
and(
|
|
3548
|
+
where ? extractFilters(aliasedTable2, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
3549
|
+
cursorValues ? buildCursorCondition(
|
|
3550
|
+
aliasedTable2,
|
|
3551
|
+
cursorEntries,
|
|
3552
|
+
cursorValues,
|
|
3553
|
+
opts.nullOrdering ?? "nulls-smallest"
|
|
3554
|
+
) : void 0
|
|
3555
|
+
)
|
|
3330
3556
|
)
|
|
3331
3557
|
} : void 0,
|
|
3332
3558
|
with: relationMap[tableName] ? extractRelationsParams(
|
|
@@ -3337,7 +3563,8 @@ var runRelationalSelect = async (opts) => {
|
|
|
3337
3563
|
typeName,
|
|
3338
3564
|
typeNameMapper,
|
|
3339
3565
|
filterCtx,
|
|
3340
|
-
opts.limits
|
|
3566
|
+
opts.limits,
|
|
3567
|
+
scope
|
|
3341
3568
|
) : void 0
|
|
3342
3569
|
};
|
|
3343
3570
|
if (single) {
|
|
@@ -3674,7 +3901,7 @@ var assembleAggregateRow = (row, request, target) => {
|
|
|
3674
3901
|
}
|
|
3675
3902
|
return result;
|
|
3676
3903
|
};
|
|
3677
|
-
var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs, filterCtx) => {
|
|
3904
|
+
var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs, filterCtx, scopes) => {
|
|
3678
3905
|
const target = aggregateTarget(table, tableName, typeName);
|
|
3679
3906
|
const queryArgs = {
|
|
3680
3907
|
where: { type: filterArgs }
|
|
@@ -3688,8 +3915,14 @@ var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs,
|
|
|
3688
3915
|
return {};
|
|
3689
3916
|
}
|
|
3690
3917
|
let query = resolveExecutor(db, context).select(request.selection).from(table);
|
|
3691
|
-
|
|
3692
|
-
|
|
3918
|
+
const where = withScope(
|
|
3919
|
+
resolveScope(scopes, context, filterCtx),
|
|
3920
|
+
tableName,
|
|
3921
|
+
table,
|
|
3922
|
+
args.where ? extractFilters(table, tableName, args.where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
3923
|
+
);
|
|
3924
|
+
if (where) {
|
|
3925
|
+
query = query.where(where);
|
|
3693
3926
|
}
|
|
3694
3927
|
const rows = await query;
|
|
3695
3928
|
return assembleAggregateRow(rows[0] ?? {}, request, target);
|
|
@@ -3701,7 +3934,7 @@ var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs,
|
|
|
3701
3934
|
};
|
|
3702
3935
|
};
|
|
3703
3936
|
var GROUP_KEY = "__dgql_group_key";
|
|
3704
|
-
var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filterCtx) => {
|
|
3937
|
+
var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) => {
|
|
3705
3938
|
return ({ tableName, relationName, relEntry }) => {
|
|
3706
3939
|
const parentTable = tables[tableName];
|
|
3707
3940
|
const targetTableName = relEntry.targetTableName;
|
|
@@ -3736,9 +3969,14 @@ var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filt
|
|
|
3736
3969
|
const loader = getOrCreateLoader(context, loaderKey, async (parentIds) => {
|
|
3737
3970
|
const executor = resolveExecutor(db, context);
|
|
3738
3971
|
const uniqueIds = [...new Set(parentIds)];
|
|
3739
|
-
const whereCondition =
|
|
3740
|
-
|
|
3741
|
-
|
|
3972
|
+
const whereCondition = withScope(
|
|
3973
|
+
resolveScope(scopes, context, filterCtx),
|
|
3974
|
+
targetTableName,
|
|
3975
|
+
targetTable,
|
|
3976
|
+
and2(
|
|
3977
|
+
inArray2(foreignCol, uniqueIds),
|
|
3978
|
+
whereArg ? extractFilters(targetTable, targetTableName, whereArg, relationFilterCtx(filterCtx, targetTableName)) : void 0
|
|
3979
|
+
)
|
|
3742
3980
|
);
|
|
3743
3981
|
const rows = await executor.select({ [GROUP_KEY]: foreignCol, ...request.selection }).from(targetTable).where(whereCondition).groupBy(foreignCol);
|
|
3744
3982
|
const byKey = new Map(rows.map((row) => [row[GROUP_KEY], row]));
|
|
@@ -3871,7 +4109,7 @@ var buildHavingCondition = (having, columns) => {
|
|
|
3871
4109
|
}
|
|
3872
4110
|
return conditions.length ? and2(...conditions) : void 0;
|
|
3873
4111
|
};
|
|
3874
|
-
var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, groupByEnum, havingInput, filterCtx) => {
|
|
4112
|
+
var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, groupByEnum, havingInput, filterCtx, scopes) => {
|
|
3875
4113
|
const target = aggregateTarget(table, tableName, typeName);
|
|
3876
4114
|
const groupable = groupableColumns(table, tableName);
|
|
3877
4115
|
const columns = getColumns3(table);
|
|
@@ -3905,8 +4143,14 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
3905
4143
|
...request.selection
|
|
3906
4144
|
};
|
|
3907
4145
|
let query = resolveExecutor(db, context).select(selection).from(table);
|
|
3908
|
-
|
|
3909
|
-
|
|
4146
|
+
const where = withScope(
|
|
4147
|
+
resolveScope(scopes, context, filterCtx),
|
|
4148
|
+
tableName,
|
|
4149
|
+
table,
|
|
4150
|
+
args.where ? extractFilters(table, tableName, args.where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
4151
|
+
);
|
|
4152
|
+
if (where) {
|
|
4153
|
+
query = query.where(where);
|
|
3910
4154
|
}
|
|
3911
4155
|
query = query.groupBy(...keyColumns.map(([, column]) => column));
|
|
3912
4156
|
const havingCondition = buildHavingCondition(args.having, columns);
|
|
@@ -3932,7 +4176,7 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
3932
4176
|
};
|
|
3933
4177
|
|
|
3934
4178
|
// src/util/builders/mysql.ts
|
|
3935
|
-
var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
4179
|
+
var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
3936
4180
|
const queryBase = db.query[tableName];
|
|
3937
4181
|
if (!queryBase) {
|
|
3938
4182
|
throw new Error(
|
|
@@ -3967,6 +4211,7 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
3967
4211
|
single: false,
|
|
3968
4212
|
filterCtx,
|
|
3969
4213
|
limits,
|
|
4214
|
+
scope: policies?.scope?.(context),
|
|
3970
4215
|
pkNames,
|
|
3971
4216
|
db: executor,
|
|
3972
4217
|
// MySQL sorts NULLs as the smallest values (first in ASC).
|
|
@@ -3979,7 +4224,7 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
3979
4224
|
args: queryArgs
|
|
3980
4225
|
};
|
|
3981
4226
|
};
|
|
3982
|
-
var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
4227
|
+
var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
3983
4228
|
const queryBase = db.query[tableName];
|
|
3984
4229
|
if (!queryBase) {
|
|
3985
4230
|
throw new Error(
|
|
@@ -4008,6 +4253,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
4008
4253
|
single: true,
|
|
4009
4254
|
filterCtx,
|
|
4010
4255
|
limits,
|
|
4256
|
+
scope: policies?.scope?.(context),
|
|
4011
4257
|
pkNames,
|
|
4012
4258
|
db: executor
|
|
4013
4259
|
});
|
|
@@ -4018,7 +4264,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
4018
4264
|
args: queryArgs
|
|
4019
4265
|
};
|
|
4020
4266
|
};
|
|
4021
|
-
var generateInsertArray = (db,
|
|
4267
|
+
var generateInsertArray = (db, tableName, table, baseType, fieldName, txCtx, policies) => {
|
|
4022
4268
|
const queryArgs = {
|
|
4023
4269
|
values: {
|
|
4024
4270
|
type: new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(baseType)))
|
|
@@ -4029,7 +4275,11 @@ var generateInsertArray = (db, _tableName, table, baseType, fieldName, txCtx) =>
|
|
|
4029
4275
|
resolver: async (_source, args, context, info) => {
|
|
4030
4276
|
try {
|
|
4031
4277
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4032
|
-
const input =
|
|
4278
|
+
const input = applyContextValuesAll(
|
|
4279
|
+
remapFromGraphQLArrayInput(args.values, table),
|
|
4280
|
+
policies?.contextValues?.(tableName),
|
|
4281
|
+
context
|
|
4282
|
+
);
|
|
4033
4283
|
if (!input.length) {
|
|
4034
4284
|
throw new GraphQLError6("No values were provided!");
|
|
4035
4285
|
}
|
|
@@ -4043,7 +4293,7 @@ var generateInsertArray = (db, _tableName, table, baseType, fieldName, txCtx) =>
|
|
|
4043
4293
|
args: queryArgs
|
|
4044
4294
|
};
|
|
4045
4295
|
};
|
|
4046
|
-
var generateInsertSingle = (db,
|
|
4296
|
+
var generateInsertSingle = (db, tableName, table, baseType, fieldName, txCtx, policies) => {
|
|
4047
4297
|
const queryArgs = {
|
|
4048
4298
|
values: {
|
|
4049
4299
|
type: new GraphQLNonNull5(baseType)
|
|
@@ -4054,7 +4304,11 @@ var generateInsertSingle = (db, _tableName, table, baseType, fieldName, txCtx) =
|
|
|
4054
4304
|
resolver: async (_source, args, context, info) => {
|
|
4055
4305
|
try {
|
|
4056
4306
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4057
|
-
const input =
|
|
4307
|
+
const input = applyContextValues(
|
|
4308
|
+
remapFromGraphQLSingleInput(args.values, table),
|
|
4309
|
+
policies?.contextValues?.(tableName),
|
|
4310
|
+
context
|
|
4311
|
+
);
|
|
4058
4312
|
await executor.insert(table).values(input);
|
|
4059
4313
|
return { isSuccess: true };
|
|
4060
4314
|
});
|
|
@@ -4065,7 +4319,7 @@ var generateInsertSingle = (db, _tableName, table, baseType, fieldName, txCtx) =
|
|
|
4065
4319
|
args: queryArgs
|
|
4066
4320
|
};
|
|
4067
4321
|
};
|
|
4068
|
-
var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, txCtx) => {
|
|
4322
|
+
var generateUpsert = (db, tableName, table, baseType, onConflictType, fieldName, single, txCtx, policies) => {
|
|
4069
4323
|
const queryArgs = {
|
|
4070
4324
|
values: {
|
|
4071
4325
|
type: single ? new GraphQLNonNull5(baseType) : new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(baseType)))
|
|
@@ -4081,7 +4335,11 @@ var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, tx
|
|
|
4081
4335
|
resolver: async (_source, args, context, info) => {
|
|
4082
4336
|
try {
|
|
4083
4337
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4084
|
-
const input =
|
|
4338
|
+
const input = applyContextValuesAll(
|
|
4339
|
+
single ? [remapFromGraphQLSingleInput(args.values, table)] : remapFromGraphQLArrayInput(args.values, table),
|
|
4340
|
+
policies?.contextValues?.(tableName),
|
|
4341
|
+
context
|
|
4342
|
+
);
|
|
4085
4343
|
if (!input.length) {
|
|
4086
4344
|
throw new GraphQLError6("No values were provided!");
|
|
4087
4345
|
}
|
|
@@ -4108,7 +4366,7 @@ var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, tx
|
|
|
4108
4366
|
args: queryArgs
|
|
4109
4367
|
};
|
|
4110
4368
|
};
|
|
4111
|
-
var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx) => {
|
|
4369
|
+
var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx, policies) => {
|
|
4112
4370
|
const queryArgs = {
|
|
4113
4371
|
set: {
|
|
4114
4372
|
type: new GraphQLNonNull5(setArgs)
|
|
@@ -4123,12 +4381,21 @@ var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, sing
|
|
|
4123
4381
|
try {
|
|
4124
4382
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4125
4383
|
const { where, set } = args;
|
|
4126
|
-
const
|
|
4384
|
+
const scope = policies?.scope?.(context);
|
|
4385
|
+
const input = stripContextValues(
|
|
4386
|
+
remapUpdateInput(set, table, tableName),
|
|
4387
|
+
policies?.contextValues?.(tableName)
|
|
4388
|
+
);
|
|
4127
4389
|
if (!Object.keys(input).length) {
|
|
4128
4390
|
throw new GraphQLError6("Unable to update with no values specified!");
|
|
4129
4391
|
}
|
|
4130
4392
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
4131
|
-
const filters =
|
|
4393
|
+
const filters = withScope(
|
|
4394
|
+
scope,
|
|
4395
|
+
tableName,
|
|
4396
|
+
table,
|
|
4397
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
4398
|
+
);
|
|
4132
4399
|
if (single) {
|
|
4133
4400
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
4134
4401
|
}
|
|
@@ -4146,7 +4413,7 @@ var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, sing
|
|
|
4146
4413
|
args: queryArgs
|
|
4147
4414
|
};
|
|
4148
4415
|
};
|
|
4149
|
-
var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filterCtx, txCtx) => {
|
|
4416
|
+
var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filterCtx, txCtx, policies) => {
|
|
4150
4417
|
const queryArgs = {
|
|
4151
4418
|
updates: {
|
|
4152
4419
|
type: new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(updateManyInput)))
|
|
@@ -4161,14 +4428,21 @@ var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filt
|
|
|
4161
4428
|
if (!updates.length) {
|
|
4162
4429
|
throw new GraphQLError6("No updates were provided!");
|
|
4163
4430
|
}
|
|
4431
|
+
const scope = policies?.scope?.(context);
|
|
4432
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
4164
4433
|
const entries = updates.map(({ where, set }) => {
|
|
4165
|
-
const input = remapUpdateInput(set, table, tableName);
|
|
4434
|
+
const input = stripContextValues(remapUpdateInput(set, table, tableName), contextColumns);
|
|
4166
4435
|
if (!Object.keys(input).length) {
|
|
4167
4436
|
throw new GraphQLError6("Unable to update with no values specified!");
|
|
4168
4437
|
}
|
|
4169
4438
|
return {
|
|
4170
4439
|
set: input,
|
|
4171
|
-
filters:
|
|
4440
|
+
filters: withScope(
|
|
4441
|
+
scope,
|
|
4442
|
+
tableName,
|
|
4443
|
+
table,
|
|
4444
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
4445
|
+
)
|
|
4172
4446
|
};
|
|
4173
4447
|
});
|
|
4174
4448
|
await executor.transaction(async (tx) => {
|
|
@@ -4189,7 +4463,7 @@ var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filt
|
|
|
4189
4463
|
args: queryArgs
|
|
4190
4464
|
};
|
|
4191
4465
|
};
|
|
4192
|
-
var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx) => {
|
|
4466
|
+
var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx, policies) => {
|
|
4193
4467
|
const queryArgs = {
|
|
4194
4468
|
where: {
|
|
4195
4469
|
type: single || requireWhere ? new GraphQLNonNull5(filterArgs) : filterArgs
|
|
@@ -4201,8 +4475,14 @@ var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requi
|
|
|
4201
4475
|
try {
|
|
4202
4476
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4203
4477
|
const { where } = args;
|
|
4478
|
+
const scope = policies?.scope?.(context);
|
|
4204
4479
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
4205
|
-
const filters =
|
|
4480
|
+
const filters = withScope(
|
|
4481
|
+
scope,
|
|
4482
|
+
tableName,
|
|
4483
|
+
table,
|
|
4484
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
4485
|
+
);
|
|
4206
4486
|
if (single) {
|
|
4207
4487
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
4208
4488
|
}
|
|
@@ -4250,12 +4530,16 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4250
4530
|
attachTargetPrimaryKeys(namedRelations, tables, mysqlPrimaryKeyPropNames);
|
|
4251
4531
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
4252
4532
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
4533
|
+
const scopes = options.policies?.scope;
|
|
4534
|
+
const contextValuesOf = options.policies?.contextValues;
|
|
4535
|
+
const policies = bindPolicies(options.policies, filterCtx);
|
|
4253
4536
|
const resolverFactory = createRelationResolverFactory(
|
|
4254
4537
|
db,
|
|
4255
4538
|
tables,
|
|
4256
4539
|
"nulls-smallest",
|
|
4257
4540
|
filterCtx,
|
|
4258
|
-
limits
|
|
4541
|
+
limits,
|
|
4542
|
+
scopes
|
|
4259
4543
|
);
|
|
4260
4544
|
const cacheCtx = {
|
|
4261
4545
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -4272,9 +4556,11 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4272
4556
|
complexity,
|
|
4273
4557
|
limits,
|
|
4274
4558
|
docs: options.docs ?? {},
|
|
4559
|
+
primaryKeyOf: (name) => tables[name] ? mysqlPrimaryKeyPropNames(tables[name]) : [],
|
|
4560
|
+
contextValuesOf,
|
|
4275
4561
|
featureOf
|
|
4276
4562
|
};
|
|
4277
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
4563
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) : void 0;
|
|
4278
4564
|
const queries = {};
|
|
4279
4565
|
const mutations = {};
|
|
4280
4566
|
const mutationTxCtx = createMutationTxCtx(options.transactions);
|
|
@@ -4311,6 +4597,7 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4311
4597
|
}
|
|
4312
4598
|
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
4313
4599
|
const tableFeatures = featureOf(tableName);
|
|
4600
|
+
const drizzleMeta = tableFieldExtensions(tableName, mysqlPrimaryKeyPropNames(schema[tableName]));
|
|
4314
4601
|
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
4315
4602
|
const { selectSingleOutput, selectArrOutput } = tableTypes.outputs;
|
|
4316
4603
|
const {
|
|
@@ -4343,7 +4630,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4343
4630
|
typeNameMapper,
|
|
4344
4631
|
filterCtx,
|
|
4345
4632
|
tableFeatures.distinct,
|
|
4346
|
-
limits
|
|
4633
|
+
limits,
|
|
4634
|
+
policies
|
|
4347
4635
|
);
|
|
4348
4636
|
const selectSingleGenerated = generateSelectSingle(
|
|
4349
4637
|
db,
|
|
@@ -4356,7 +4644,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4356
4644
|
typeName,
|
|
4357
4645
|
typeNameMapper,
|
|
4358
4646
|
filterCtx,
|
|
4359
|
-
limits
|
|
4647
|
+
limits,
|
|
4648
|
+
policies
|
|
4360
4649
|
);
|
|
4361
4650
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray(
|
|
4362
4651
|
db,
|
|
@@ -4364,7 +4653,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4364
4653
|
schema[tableName],
|
|
4365
4654
|
insertInput,
|
|
4366
4655
|
createArrayFieldName,
|
|
4367
|
-
mutationTxCtx
|
|
4656
|
+
mutationTxCtx,
|
|
4657
|
+
policies
|
|
4368
4658
|
) : void 0;
|
|
4369
4659
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle(
|
|
4370
4660
|
db,
|
|
@@ -4372,7 +4662,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4372
4662
|
schema[tableName],
|
|
4373
4663
|
insertInput,
|
|
4374
4664
|
createSingleFieldName,
|
|
4375
|
-
mutationTxCtx
|
|
4665
|
+
mutationTxCtx,
|
|
4666
|
+
policies
|
|
4376
4667
|
) : void 0;
|
|
4377
4668
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
4378
4669
|
table: schema[tableName],
|
|
@@ -4383,21 +4674,25 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4383
4674
|
}) : void 0;
|
|
4384
4675
|
const upsertArrGenerated = onConflictInput ? generateUpsert(
|
|
4385
4676
|
db,
|
|
4677
|
+
tableName,
|
|
4386
4678
|
schema[tableName],
|
|
4387
4679
|
insertInput,
|
|
4388
4680
|
onConflictInput,
|
|
4389
4681
|
upsertArrayFieldName,
|
|
4390
4682
|
false,
|
|
4391
|
-
mutationTxCtx
|
|
4683
|
+
mutationTxCtx,
|
|
4684
|
+
policies
|
|
4392
4685
|
) : void 0;
|
|
4393
4686
|
const upsertSingleGenerated = onConflictInput ? generateUpsert(
|
|
4394
4687
|
db,
|
|
4688
|
+
tableName,
|
|
4395
4689
|
schema[tableName],
|
|
4396
4690
|
insertInput,
|
|
4397
4691
|
onConflictInput,
|
|
4398
4692
|
upsertSingleFieldName,
|
|
4399
4693
|
true,
|
|
4400
|
-
mutationTxCtx
|
|
4694
|
+
mutationTxCtx,
|
|
4695
|
+
policies
|
|
4401
4696
|
) : void 0;
|
|
4402
4697
|
const updateGenerated = tableFeatures.update ? generateUpdate(
|
|
4403
4698
|
db,
|
|
@@ -4409,7 +4704,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4409
4704
|
false,
|
|
4410
4705
|
tableFeatures.requireWhere,
|
|
4411
4706
|
filterCtx,
|
|
4412
|
-
mutationTxCtx
|
|
4707
|
+
mutationTxCtx,
|
|
4708
|
+
policies
|
|
4413
4709
|
) : void 0;
|
|
4414
4710
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate(
|
|
4415
4711
|
db,
|
|
@@ -4421,7 +4717,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4421
4717
|
true,
|
|
4422
4718
|
tableFeatures.requireWhere,
|
|
4423
4719
|
filterCtx,
|
|
4424
|
-
mutationTxCtx
|
|
4720
|
+
mutationTxCtx,
|
|
4721
|
+
policies
|
|
4425
4722
|
) : void 0;
|
|
4426
4723
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
4427
4724
|
const updateManyGenerated = updateManyInput ? generateUpdateMany(
|
|
@@ -4431,7 +4728,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4431
4728
|
updateManyInput,
|
|
4432
4729
|
updateManyFieldName,
|
|
4433
4730
|
filterCtx,
|
|
4434
|
-
mutationTxCtx
|
|
4731
|
+
mutationTxCtx,
|
|
4732
|
+
policies
|
|
4435
4733
|
) : void 0;
|
|
4436
4734
|
const deleteGenerated = tableFeatures.delete ? generateDelete(
|
|
4437
4735
|
db,
|
|
@@ -4442,7 +4740,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4442
4740
|
false,
|
|
4443
4741
|
tableFeatures.requireWhere,
|
|
4444
4742
|
filterCtx,
|
|
4445
|
-
mutationTxCtx
|
|
4743
|
+
mutationTxCtx,
|
|
4744
|
+
policies
|
|
4446
4745
|
) : void 0;
|
|
4447
4746
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete(
|
|
4448
4747
|
db,
|
|
@@ -4453,7 +4752,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4453
4752
|
true,
|
|
4454
4753
|
tableFeatures.requireWhere,
|
|
4455
4754
|
filterCtx,
|
|
4456
|
-
mutationTxCtx
|
|
4755
|
+
mutationTxCtx,
|
|
4756
|
+
policies
|
|
4457
4757
|
) : void 0;
|
|
4458
4758
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
4459
4759
|
db,
|
|
@@ -4486,7 +4786,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4486
4786
|
typeName,
|
|
4487
4787
|
aggregateFieldName,
|
|
4488
4788
|
tableFilters,
|
|
4489
|
-
filterCtx
|
|
4789
|
+
filterCtx,
|
|
4790
|
+
scopes
|
|
4490
4791
|
) : void 0;
|
|
4491
4792
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
4492
4793
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -4500,25 +4801,35 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4500
4801
|
tableFilters,
|
|
4501
4802
|
groupByEnum,
|
|
4502
4803
|
havingInput,
|
|
4503
|
-
filterCtx
|
|
4804
|
+
filterCtx,
|
|
4805
|
+
scopes
|
|
4504
4806
|
) : void 0;
|
|
4505
4807
|
queries[selectArrGenerated.name] = {
|
|
4506
4808
|
type: selectArrOutput,
|
|
4507
4809
|
args: selectArrGenerated.args,
|
|
4508
4810
|
resolve: selectArrGenerated.resolver,
|
|
4509
|
-
|
|
4811
|
+
extensions: {
|
|
4812
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: false, targetArg: "where" }),
|
|
4813
|
+
...complexity ? { complexity: listFieldComplexity(complexity, limits?.(tableName)) } : {}
|
|
4814
|
+
}
|
|
4510
4815
|
};
|
|
4511
4816
|
queries[selectSingleGenerated.name] = {
|
|
4512
4817
|
type: selectSingleOutput,
|
|
4513
4818
|
args: selectSingleGenerated.args,
|
|
4514
|
-
resolve: selectSingleGenerated.resolver
|
|
4819
|
+
resolve: selectSingleGenerated.resolver,
|
|
4820
|
+
extensions: {
|
|
4821
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: true, targetArg: "where" })
|
|
4822
|
+
}
|
|
4515
4823
|
};
|
|
4516
4824
|
if (aggregateGenerated && aggregateType) {
|
|
4517
4825
|
queries[aggregateGenerated.name] = {
|
|
4518
4826
|
type: new GraphQLNonNull5(aggregateType),
|
|
4519
4827
|
args: aggregateGenerated.args,
|
|
4520
4828
|
resolve: aggregateGenerated.resolver,
|
|
4521
|
-
|
|
4829
|
+
extensions: {
|
|
4830
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "aggregate", single: true, targetArg: "where" }),
|
|
4831
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
4832
|
+
}
|
|
4522
4833
|
};
|
|
4523
4834
|
}
|
|
4524
4835
|
if (groupByGenerated && groupByType) {
|
|
@@ -4526,25 +4837,30 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4526
4837
|
type: new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(groupByType))),
|
|
4527
4838
|
args: groupByGenerated.args,
|
|
4528
4839
|
resolve: groupByGenerated.resolver,
|
|
4529
|
-
|
|
4840
|
+
extensions: {
|
|
4841
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "groupBy", single: false, targetArg: "where" }),
|
|
4842
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
4843
|
+
}
|
|
4530
4844
|
};
|
|
4531
4845
|
}
|
|
4532
|
-
|
|
4533
|
-
insertArrGenerated,
|
|
4534
|
-
insertSingleGenerated,
|
|
4535
|
-
upsertArrGenerated,
|
|
4536
|
-
upsertSingleGenerated,
|
|
4537
|
-
updateGenerated,
|
|
4538
|
-
updateManyGenerated,
|
|
4539
|
-
updateSingleGenerated,
|
|
4540
|
-
deleteGenerated,
|
|
4541
|
-
deleteSingleGenerated
|
|
4542
|
-
]
|
|
4846
|
+
const generatedMutations = [
|
|
4847
|
+
[insertArrGenerated, { operation: "insert", single: false, targetArg: "values" }],
|
|
4848
|
+
[insertSingleGenerated, { operation: "insert", single: true, targetArg: "values" }],
|
|
4849
|
+
[upsertArrGenerated, { operation: "upsert", single: false, targetArg: "values" }],
|
|
4850
|
+
[upsertSingleGenerated, { operation: "upsert", single: true, targetArg: "values" }],
|
|
4851
|
+
[updateGenerated, { operation: "update", single: false, targetArg: "where" }],
|
|
4852
|
+
[updateManyGenerated, { operation: "updateMany", single: false, targetArg: "updates" }],
|
|
4853
|
+
[updateSingleGenerated, { operation: "update", single: true, targetArg: "where" }],
|
|
4854
|
+
[deleteGenerated, { operation: "delete", single: false, targetArg: "where" }],
|
|
4855
|
+
[deleteSingleGenerated, { operation: "delete", single: true, targetArg: "where" }]
|
|
4856
|
+
];
|
|
4857
|
+
for (const [generated, meta] of generatedMutations) {
|
|
4543
4858
|
if (generated) {
|
|
4544
4859
|
mutations[generated.name] = {
|
|
4545
4860
|
type: mutationReturnType,
|
|
4546
4861
|
args: generated.args,
|
|
4547
|
-
resolve: generated.resolver
|
|
4862
|
+
resolve: generated.resolver,
|
|
4863
|
+
extensions: { drizzle: drizzleMeta({ kind: "mutation", ...meta }) }
|
|
4548
4864
|
};
|
|
4549
4865
|
}
|
|
4550
4866
|
}
|
|
@@ -4725,8 +5041,9 @@ var createNestedWriteTypes = (params) => {
|
|
|
4725
5041
|
return cached;
|
|
4726
5042
|
}
|
|
4727
5043
|
const omitted = plan.fkSide === "child" ? plan.foreignColPropName : void 0;
|
|
5044
|
+
const contextColumns = cacheCtx.contextValuesOf?.(plan.targetTableName);
|
|
4728
5045
|
const fields = Object.fromEntries(
|
|
4729
|
-
Object.entries(visibleColumns(plan.targetTable)).filter(([columnName]) => columnName !== omitted).map(([columnName, column]) => [
|
|
5046
|
+
Object.entries(visibleColumns(plan.targetTable)).filter(([columnName]) => columnName !== omitted && !contextColumns?.[columnName]).map(([columnName, column]) => [
|
|
4730
5047
|
columnName,
|
|
4731
5048
|
drizzleColumnToGraphQLType(column, columnName, plan.targetTableName, false, true, true)
|
|
4732
5049
|
])
|
|
@@ -4825,8 +5142,8 @@ var createNestedWriteTypes = (params) => {
|
|
|
4825
5142
|
var mergedOps = (entries) => Object.assign({}, ...entries.map((entry) => entry.ops));
|
|
4826
5143
|
var asArray = (value) => Array.isArray(value) ? value : value === void 0 ? [] : [value];
|
|
4827
5144
|
var createNestedWriteRuntime = (params) => {
|
|
4828
|
-
const { plans, filterCtx } = params;
|
|
4829
|
-
const conditionOf = (plan, filter, operation) => {
|
|
5145
|
+
const { plans, filterCtx, scopes, contextValues } = params;
|
|
5146
|
+
const conditionOf = (plan, filter, operation, scope) => {
|
|
4830
5147
|
const condition = extractFilters(
|
|
4831
5148
|
plan.targetTable,
|
|
4832
5149
|
plan.targetTableName,
|
|
@@ -4838,7 +5155,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4838
5155
|
`Drizzle-GraphQL Error: '${operation}' on '${plan.relationName}' needs a filter that selects rows \u2014 it was given one that matches everything.`
|
|
4839
5156
|
);
|
|
4840
5157
|
}
|
|
4841
|
-
return condition;
|
|
5158
|
+
return withScope(scope, plan.targetTableName, plan.targetTable, condition);
|
|
4842
5159
|
};
|
|
4843
5160
|
const assertSingleOperation = (plan, op) => {
|
|
4844
5161
|
const supplied = ["create", "connect", "disconnect"].filter((key) => op[key] !== void 0 && op[key] !== null);
|
|
@@ -4848,7 +5165,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4848
5165
|
);
|
|
4849
5166
|
}
|
|
4850
5167
|
};
|
|
4851
|
-
const detachAll = async (executor, plan, key) => executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(eq3(plan.foreignCol, key));
|
|
5168
|
+
const detachAll = async (executor, plan, key, scope) => executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(withScope(scope, plan.targetTableName, plan.targetTable, eq3(plan.foreignCol, key)));
|
|
4852
5169
|
return {
|
|
4853
5170
|
enabled: (tableName) => !!plans[tableName],
|
|
4854
5171
|
split: (tableName, values) => {
|
|
@@ -4882,12 +5199,13 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4882
5199
|
}
|
|
4883
5200
|
return columns;
|
|
4884
5201
|
},
|
|
4885
|
-
applyParentSide: async (executor, tableName, ops) => {
|
|
5202
|
+
applyParentSide: async (executor, tableName, ops, context) => {
|
|
4886
5203
|
const tablePlans = plans[tableName];
|
|
4887
5204
|
const patch = {};
|
|
4888
5205
|
if (!tablePlans) {
|
|
4889
5206
|
return patch;
|
|
4890
5207
|
}
|
|
5208
|
+
const scope = resolveScope(scopes, context, filterCtx);
|
|
4891
5209
|
for (const [relationName, op] of Object.entries(ops)) {
|
|
4892
5210
|
const plan = tablePlans[relationName];
|
|
4893
5211
|
if (!plan || plan.fkSide !== "parent") {
|
|
@@ -4895,7 +5213,11 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4895
5213
|
}
|
|
4896
5214
|
assertSingleOperation(plan, op);
|
|
4897
5215
|
if (op["create"] !== void 0) {
|
|
4898
|
-
const values =
|
|
5216
|
+
const values = applyContextValues(
|
|
5217
|
+
remapFromGraphQLSingleInput({ ...op["create"] }, plan.targetTable),
|
|
5218
|
+
contextValues?.(plan.targetTableName),
|
|
5219
|
+
context
|
|
5220
|
+
);
|
|
4899
5221
|
const inserted = await executor.insert(plan.targetTable).values(values).returning();
|
|
4900
5222
|
const created = inserted[0];
|
|
4901
5223
|
if (!created) {
|
|
@@ -4905,7 +5227,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4905
5227
|
}
|
|
4906
5228
|
patch[plan.localColPropName] = created[plan.foreignColPropName];
|
|
4907
5229
|
} else if (op["connect"] !== void 0) {
|
|
4908
|
-
const rows = await executor.select().from(plan.targetTable).where(conditionOf(plan, op["connect"], "connect"));
|
|
5230
|
+
const rows = await executor.select().from(plan.targetTable).where(conditionOf(plan, op["connect"], "connect", scope));
|
|
4909
5231
|
if (rows.length !== 1) {
|
|
4910
5232
|
throw new GraphQLError7(
|
|
4911
5233
|
`Drizzle-GraphQL Error: 'connect' on '${relationName}' matched ${rows.length} rows \u2014 it attaches a single row, so its filter must match exactly one.`
|
|
@@ -4918,11 +5240,12 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4918
5240
|
}
|
|
4919
5241
|
return patch;
|
|
4920
5242
|
},
|
|
4921
|
-
applyChildSide: async (executor, tableName, ops, parentRows) => {
|
|
5243
|
+
applyChildSide: async (executor, tableName, ops, parentRows, context) => {
|
|
4922
5244
|
const tablePlans = plans[tableName];
|
|
4923
5245
|
if (!tablePlans) {
|
|
4924
5246
|
return;
|
|
4925
5247
|
}
|
|
5248
|
+
const scope = resolveScope(scopes, context, filterCtx);
|
|
4926
5249
|
for (const [relationName, op] of Object.entries(ops)) {
|
|
4927
5250
|
const plan = tablePlans[relationName];
|
|
4928
5251
|
if (!plan || plan.fkSide !== "child") {
|
|
@@ -4939,34 +5262,38 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4939
5262
|
);
|
|
4940
5263
|
}
|
|
4941
5264
|
if (op["set"] !== void 0) {
|
|
4942
|
-
await detachAll(executor, plan, key);
|
|
5265
|
+
await detachAll(executor, plan, key, scope);
|
|
4943
5266
|
for (const filter of asArray(op["set"])) {
|
|
4944
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "set"));
|
|
5267
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "set", scope));
|
|
4945
5268
|
}
|
|
4946
5269
|
}
|
|
4947
5270
|
if (op["disconnect"] !== void 0) {
|
|
4948
5271
|
if (plan.isOne) {
|
|
4949
5272
|
if (op["disconnect"] === true) {
|
|
4950
|
-
await detachAll(executor, plan, key);
|
|
5273
|
+
await detachAll(executor, plan, key, scope);
|
|
4951
5274
|
}
|
|
4952
5275
|
} else {
|
|
4953
5276
|
for (const filter of asArray(op["disconnect"])) {
|
|
4954
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(and3(eq3(plan.foreignCol, key), conditionOf(plan, filter, "disconnect")));
|
|
5277
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(and3(eq3(plan.foreignCol, key), conditionOf(plan, filter, "disconnect", scope)));
|
|
4955
5278
|
}
|
|
4956
5279
|
}
|
|
4957
5280
|
}
|
|
4958
5281
|
const attaches = op["connect"] !== void 0 || op["create"] !== void 0;
|
|
4959
5282
|
if (plan.isOne && attaches && plan.canDetach && op["set"] === void 0) {
|
|
4960
|
-
await detachAll(executor, plan, key);
|
|
5283
|
+
await detachAll(executor, plan, key, scope);
|
|
4961
5284
|
}
|
|
4962
5285
|
if (op["connect"] !== void 0) {
|
|
4963
5286
|
for (const filter of asArray(op["connect"])) {
|
|
4964
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "connect"));
|
|
5287
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "connect", scope));
|
|
4965
5288
|
}
|
|
4966
5289
|
}
|
|
4967
5290
|
if (op["create"] !== void 0) {
|
|
4968
5291
|
const rows = asArray(op["create"]).map((row) => ({
|
|
4969
|
-
...
|
|
5292
|
+
...applyContextValues(
|
|
5293
|
+
remapFromGraphQLSingleInput({ ...row }, plan.targetTable),
|
|
5294
|
+
contextValues?.(plan.targetTableName),
|
|
5295
|
+
context
|
|
5296
|
+
),
|
|
4970
5297
|
[plan.foreignColPropName]: key
|
|
4971
5298
|
}));
|
|
4972
5299
|
if (rows.length) {
|
|
@@ -4979,30 +5306,30 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4979
5306
|
};
|
|
4980
5307
|
};
|
|
4981
5308
|
var writeWithNestedOps = async (params) => {
|
|
4982
|
-
const { executor, runtime, tableName, entries, remapValues, write } = params;
|
|
5309
|
+
const { executor, runtime, tableName, entries, remapValues, write, context } = params;
|
|
4983
5310
|
return executor.transaction(async (tx) => {
|
|
4984
5311
|
const rows = [];
|
|
4985
5312
|
for (const entry of entries) {
|
|
4986
|
-
const patch = await runtime.applyParentSide(tx, tableName, entry.ops);
|
|
5313
|
+
const patch = await runtime.applyParentSide(tx, tableName, entry.ops, context);
|
|
4987
5314
|
const written = await write(tx, { ...remapValues(entry.columns), ...patch });
|
|
4988
|
-
await runtime.applyChildSide(tx, tableName, entry.ops, written);
|
|
5315
|
+
await runtime.applyChildSide(tx, tableName, entry.ops, written, context);
|
|
4989
5316
|
rows.push(...written);
|
|
4990
5317
|
}
|
|
4991
5318
|
return rows;
|
|
4992
5319
|
});
|
|
4993
5320
|
};
|
|
4994
5321
|
var updateWithNestedOps = async (params) => {
|
|
4995
|
-
const { executor, runtime, tableName, columns, ops, remapValues, write } = params;
|
|
5322
|
+
const { executor, runtime, tableName, columns, ops, remapValues, write, context } = params;
|
|
4996
5323
|
return executor.transaction(async (tx) => {
|
|
4997
|
-
const patch = await runtime.applyParentSide(tx, tableName, ops);
|
|
5324
|
+
const patch = await runtime.applyParentSide(tx, tableName, ops, context);
|
|
4998
5325
|
const rows = await write(tx, { ...remapValues(columns), ...patch });
|
|
4999
|
-
await runtime.applyChildSide(tx, tableName, ops, rows);
|
|
5326
|
+
await runtime.applyChildSide(tx, tableName, ops, rows, context);
|
|
5000
5327
|
return rows;
|
|
5001
5328
|
});
|
|
5002
5329
|
};
|
|
5003
5330
|
|
|
5004
5331
|
// src/util/builders/pg.ts
|
|
5005
|
-
var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
5332
|
+
var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
5006
5333
|
const queryBase = db.query[tableName];
|
|
5007
5334
|
const table = tables[tableName];
|
|
5008
5335
|
const limitPolicy = limits?.(tableName);
|
|
@@ -5018,6 +5345,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5018
5345
|
try {
|
|
5019
5346
|
const parsedInfo = parseResolveInfo3(info, { deep: true });
|
|
5020
5347
|
const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
|
|
5348
|
+
const scope = policies?.scope?.(context);
|
|
5021
5349
|
const limit = applyLimitPolicy(args.limit, limitPolicy, fieldName);
|
|
5022
5350
|
if (requestQueryBase) {
|
|
5023
5351
|
return await runRelationalSelect({
|
|
@@ -5036,6 +5364,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5036
5364
|
limits,
|
|
5037
5365
|
pkNames,
|
|
5038
5366
|
db: executor,
|
|
5367
|
+
scope,
|
|
5039
5368
|
// PostgreSQL sorts NULLs as the largest values (last in ASC).
|
|
5040
5369
|
nullOrdering: "nulls-largest"
|
|
5041
5370
|
});
|
|
@@ -5074,7 +5403,12 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5074
5403
|
}
|
|
5075
5404
|
}
|
|
5076
5405
|
const cursorCondition = after != null && cursorEntries ? buildCursorCondition(table, cursorEntries, decodeCursor(after, cursorEntries), "nulls-largest") : void 0;
|
|
5077
|
-
const baseWhereSql =
|
|
5406
|
+
const baseWhereSql = withScope(
|
|
5407
|
+
scope,
|
|
5408
|
+
tableName,
|
|
5409
|
+
table,
|
|
5410
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
5411
|
+
);
|
|
5078
5412
|
const whereSql = cursorCondition ? and4(baseWhereSql, cursorCondition) : baseWhereSql;
|
|
5079
5413
|
let distinctKeys;
|
|
5080
5414
|
if (distinct?.length) {
|
|
@@ -5129,7 +5463,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5129
5463
|
args: queryArgs
|
|
5130
5464
|
};
|
|
5131
5465
|
};
|
|
5132
|
-
var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
5466
|
+
var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
5133
5467
|
const queryBase = db.query[tableName];
|
|
5134
5468
|
const queryArgs = selectSingleArgs(orderArgs, filterArgs);
|
|
5135
5469
|
const table = tables[tableName];
|
|
@@ -5140,6 +5474,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5140
5474
|
try {
|
|
5141
5475
|
const parsedInfo = parseResolveInfo3(info, { deep: true });
|
|
5142
5476
|
const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
|
|
5477
|
+
const scope = policies?.scope?.(context);
|
|
5143
5478
|
if (requestQueryBase) {
|
|
5144
5479
|
return await runRelationalSelect({
|
|
5145
5480
|
queryBase: requestQueryBase,
|
|
@@ -5155,7 +5490,8 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5155
5490
|
filterCtx,
|
|
5156
5491
|
limits,
|
|
5157
5492
|
pkNames,
|
|
5158
|
-
db: executor
|
|
5493
|
+
db: executor,
|
|
5494
|
+
scope
|
|
5159
5495
|
});
|
|
5160
5496
|
}
|
|
5161
5497
|
const { offset, orderBy, where } = args;
|
|
@@ -5165,8 +5501,14 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5165
5501
|
{ tableName, relationMap, tables }
|
|
5166
5502
|
);
|
|
5167
5503
|
let q = executor.select(selectedColumnsSql).from(table);
|
|
5168
|
-
|
|
5169
|
-
|
|
5504
|
+
const whereSql = withScope(
|
|
5505
|
+
scope,
|
|
5506
|
+
tableName,
|
|
5507
|
+
table,
|
|
5508
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
5509
|
+
);
|
|
5510
|
+
if (whereSql) {
|
|
5511
|
+
q = q.where(whereSql);
|
|
5170
5512
|
}
|
|
5171
5513
|
if (orderBy) {
|
|
5172
5514
|
q = q.orderBy(...extractOrderBy(table, orderBy, relationFilterCtx(filterCtx, tableName), where));
|
|
@@ -5187,7 +5529,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5187
5529
|
};
|
|
5188
5530
|
};
|
|
5189
5531
|
var pgPrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, getTableConfig2);
|
|
5190
|
-
var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
5532
|
+
var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
5191
5533
|
const queryArgs = {
|
|
5192
5534
|
values: {
|
|
5193
5535
|
type: new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(baseType)))
|
|
@@ -5204,7 +5546,13 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5204
5546
|
}
|
|
5205
5547
|
const entries = nested?.enabled(tableName) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
|
|
5206
5548
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
5207
|
-
const
|
|
5549
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5550
|
+
const scope = policies?.scope?.(context);
|
|
5551
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
5552
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : args.values, table),
|
|
5553
|
+
contextColumns,
|
|
5554
|
+
context
|
|
5555
|
+
);
|
|
5208
5556
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5209
5557
|
deep: true
|
|
5210
5558
|
});
|
|
@@ -5217,7 +5565,8 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5217
5565
|
table,
|
|
5218
5566
|
pkNames,
|
|
5219
5567
|
parsedInfo,
|
|
5220
|
-
limits
|
|
5568
|
+
limits,
|
|
5569
|
+
scope
|
|
5221
5570
|
});
|
|
5222
5571
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
5223
5572
|
const runInsert = async (target, values) => {
|
|
@@ -5232,8 +5581,9 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5232
5581
|
runtime: nested,
|
|
5233
5582
|
tableName,
|
|
5234
5583
|
entries: nestedEntries,
|
|
5235
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5236
|
-
write: (tx, values) => runInsert(tx, [values])
|
|
5584
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5585
|
+
write: (tx, values) => runInsert(tx, [values]),
|
|
5586
|
+
context
|
|
5237
5587
|
}) : await runInsert(executor, input);
|
|
5238
5588
|
const enriched = hasRelations ? await eagerLoadMutationRelations(executor, tableName, result, pkNames, withParams) : result;
|
|
5239
5589
|
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
@@ -5245,7 +5595,7 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5245
5595
|
args: queryArgs
|
|
5246
5596
|
};
|
|
5247
5597
|
};
|
|
5248
|
-
var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
5598
|
+
var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
5249
5599
|
const queryArgs = {
|
|
5250
5600
|
values: {
|
|
5251
5601
|
type: new GraphQLNonNull7(baseType)
|
|
@@ -5259,7 +5609,13 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5259
5609
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5260
5610
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
5261
5611
|
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
5262
|
-
const
|
|
5612
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5613
|
+
const scope = policies?.scope?.(context);
|
|
5614
|
+
const input = nestedEntry ? {} : applyContextValues(
|
|
5615
|
+
remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table),
|
|
5616
|
+
contextColumns,
|
|
5617
|
+
context
|
|
5618
|
+
);
|
|
5263
5619
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5264
5620
|
deep: true
|
|
5265
5621
|
});
|
|
@@ -5272,7 +5628,8 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5272
5628
|
table,
|
|
5273
5629
|
pkNames,
|
|
5274
5630
|
parsedInfo,
|
|
5275
|
-
limits
|
|
5631
|
+
limits,
|
|
5632
|
+
scope
|
|
5276
5633
|
});
|
|
5277
5634
|
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
5278
5635
|
const runInsert = async (target, values) => {
|
|
@@ -5287,8 +5644,9 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5287
5644
|
runtime: nested,
|
|
5288
5645
|
tableName,
|
|
5289
5646
|
entries: [nestedEntry],
|
|
5290
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5291
|
-
write: runInsert
|
|
5647
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5648
|
+
write: runInsert,
|
|
5649
|
+
context
|
|
5292
5650
|
}) : await runInsert(executor, input);
|
|
5293
5651
|
if (!result[0]) {
|
|
5294
5652
|
if (!conflictDoNothing) {
|
|
@@ -5306,7 +5664,7 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5306
5664
|
args: queryArgs
|
|
5307
5665
|
};
|
|
5308
5666
|
};
|
|
5309
|
-
var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5667
|
+
var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5310
5668
|
const queryArgs = {
|
|
5311
5669
|
values: {
|
|
5312
5670
|
type: single ? new GraphQLNonNull7(baseType) : new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(baseType)))
|
|
@@ -5328,7 +5686,13 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5328
5686
|
}
|
|
5329
5687
|
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
5330
5688
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
5331
|
-
const
|
|
5689
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5690
|
+
const scope = policies?.scope?.(context);
|
|
5691
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
5692
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table),
|
|
5693
|
+
contextColumns,
|
|
5694
|
+
context
|
|
5695
|
+
);
|
|
5332
5696
|
const parsedInfo = parseResolveInfo3(info, { deep: true });
|
|
5333
5697
|
const { columns, hasRelations, withParams } = prepareMutationRelationColumns({
|
|
5334
5698
|
relationMap,
|
|
@@ -5339,7 +5703,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5339
5703
|
table,
|
|
5340
5704
|
pkNames,
|
|
5341
5705
|
parsedInfo,
|
|
5342
|
-
limits
|
|
5706
|
+
limits,
|
|
5707
|
+
scope
|
|
5343
5708
|
});
|
|
5344
5709
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
5345
5710
|
const runUpsert = async (target, values) => {
|
|
@@ -5354,7 +5719,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5354
5719
|
buildWhere: (where) => extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName))
|
|
5355
5720
|
});
|
|
5356
5721
|
let query = target.insert(table).values(values).returning(returning);
|
|
5357
|
-
|
|
5722
|
+
const setWhere = withScope(scope, tableName, table, plan.setWhere);
|
|
5723
|
+
query = plan.action === "NOTHING" ? query.onConflictDoNothing(plan.target ? { target: plan.target } : void 0) : query.onConflictDoUpdate({ target: plan.target, set: plan.set, setWhere });
|
|
5358
5724
|
return await query;
|
|
5359
5725
|
};
|
|
5360
5726
|
const result = nestedEntries ? await writeWithNestedOps({
|
|
@@ -5362,8 +5728,9 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5362
5728
|
runtime: nested,
|
|
5363
5729
|
tableName,
|
|
5364
5730
|
entries: nestedEntries,
|
|
5365
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5366
|
-
write: (tx, values) => runUpsert(tx, [values])
|
|
5731
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5732
|
+
write: (tx, values) => runUpsert(tx, [values]),
|
|
5733
|
+
context
|
|
5367
5734
|
}) : await runUpsert(executor, input);
|
|
5368
5735
|
if (single && !result[0]) {
|
|
5369
5736
|
return void 0;
|
|
@@ -5378,7 +5745,7 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5378
5745
|
args: queryArgs
|
|
5379
5746
|
};
|
|
5380
5747
|
};
|
|
5381
|
-
var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5748
|
+
var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5382
5749
|
const queryArgs = {
|
|
5383
5750
|
set: {
|
|
5384
5751
|
type: new GraphQLNonNull7(setArgs)
|
|
@@ -5394,6 +5761,7 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5394
5761
|
try {
|
|
5395
5762
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5396
5763
|
const { where, set } = args;
|
|
5764
|
+
const scope = policies?.scope?.(context);
|
|
5397
5765
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5398
5766
|
deep: true
|
|
5399
5767
|
});
|
|
@@ -5406,16 +5774,25 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5406
5774
|
table,
|
|
5407
5775
|
pkNames,
|
|
5408
5776
|
parsedInfo,
|
|
5409
|
-
limits
|
|
5777
|
+
limits,
|
|
5778
|
+
scope
|
|
5410
5779
|
});
|
|
5411
5780
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
5412
5781
|
const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
|
|
5413
|
-
const input =
|
|
5782
|
+
const input = stripContextValues(
|
|
5783
|
+
remapUpdateInput(entry ? entry.columns : set, table, tableName),
|
|
5784
|
+
policies?.contextValues?.(tableName)
|
|
5785
|
+
);
|
|
5414
5786
|
if (!Object.keys(input).length && !nestedOps) {
|
|
5415
5787
|
throw new GraphQLError8("Unable to update with no values specified!");
|
|
5416
5788
|
}
|
|
5417
5789
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
5418
|
-
const filters =
|
|
5790
|
+
const filters = withScope(
|
|
5791
|
+
scope,
|
|
5792
|
+
tableName,
|
|
5793
|
+
table,
|
|
5794
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
5795
|
+
);
|
|
5419
5796
|
if (single) {
|
|
5420
5797
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
5421
5798
|
}
|
|
@@ -5435,7 +5812,8 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5435
5812
|
columns: input,
|
|
5436
5813
|
ops: nestedOps,
|
|
5437
5814
|
remapValues: (values) => values,
|
|
5438
|
-
write: runUpdate
|
|
5815
|
+
write: runUpdate,
|
|
5816
|
+
context
|
|
5439
5817
|
}) : await runUpdate(executor, input);
|
|
5440
5818
|
if (single && result.length > 1) {
|
|
5441
5819
|
throw new GraphQLError8(`${fieldName}: 'where' matched more than one row!`);
|
|
@@ -5453,7 +5831,7 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5453
5831
|
args: queryArgs
|
|
5454
5832
|
};
|
|
5455
5833
|
};
|
|
5456
|
-
var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5834
|
+
var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5457
5835
|
const queryArgs = {
|
|
5458
5836
|
updates: {
|
|
5459
5837
|
type: new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(updateManyInput)))
|
|
@@ -5469,6 +5847,8 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5469
5847
|
if (!updates.length) {
|
|
5470
5848
|
throw new GraphQLError8("No updates were provided!");
|
|
5471
5849
|
}
|
|
5850
|
+
const scope = policies?.scope?.(context);
|
|
5851
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5472
5852
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5473
5853
|
deep: true
|
|
5474
5854
|
});
|
|
@@ -5481,19 +5861,28 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5481
5861
|
table,
|
|
5482
5862
|
pkNames,
|
|
5483
5863
|
parsedInfo,
|
|
5484
|
-
limits
|
|
5864
|
+
limits,
|
|
5865
|
+
scope
|
|
5485
5866
|
});
|
|
5486
5867
|
const entries = updates.map(({ where, set }) => {
|
|
5487
5868
|
const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
5488
5869
|
const ops = split && nested.hasOps(split.ops) ? split.ops : void 0;
|
|
5489
|
-
const input =
|
|
5870
|
+
const input = stripContextValues(
|
|
5871
|
+
remapUpdateInput(split ? split.columns : set, table, tableName),
|
|
5872
|
+
contextColumns
|
|
5873
|
+
);
|
|
5490
5874
|
if (!Object.keys(input).length && !ops) {
|
|
5491
5875
|
throw new GraphQLError8("Unable to update with no values specified!");
|
|
5492
5876
|
}
|
|
5493
5877
|
return {
|
|
5494
5878
|
set: input,
|
|
5495
5879
|
ops,
|
|
5496
|
-
filters:
|
|
5880
|
+
filters: withScope(
|
|
5881
|
+
scope,
|
|
5882
|
+
tableName,
|
|
5883
|
+
table,
|
|
5884
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
5885
|
+
)
|
|
5497
5886
|
};
|
|
5498
5887
|
});
|
|
5499
5888
|
const returning = entries.some((entry) => entry.ops) ? nested.withJoinColumns(
|
|
@@ -5507,7 +5896,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5507
5896
|
const perEntry = await executor.transaction(async (tx) => {
|
|
5508
5897
|
const results = [];
|
|
5509
5898
|
for (const entry of entries) {
|
|
5510
|
-
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops) } : entry.set;
|
|
5899
|
+
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops, context) } : entry.set;
|
|
5511
5900
|
const writes = Object.keys(values).length > 0;
|
|
5512
5901
|
let query = writes ? tx.update(table).set(values) : tx.select(returning).from(table);
|
|
5513
5902
|
if (entry.filters) {
|
|
@@ -5515,7 +5904,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5515
5904
|
}
|
|
5516
5905
|
const rows = await (writes ? query.returning(returning) : query);
|
|
5517
5906
|
if (entry.ops) {
|
|
5518
|
-
await nested.applyChildSide(tx, tableName, entry.ops, rows);
|
|
5907
|
+
await nested.applyChildSide(tx, tableName, entry.ops, rows, context);
|
|
5519
5908
|
}
|
|
5520
5909
|
results.push(rows);
|
|
5521
5910
|
}
|
|
@@ -5544,7 +5933,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5544
5933
|
args: queryArgs
|
|
5545
5934
|
};
|
|
5546
5935
|
};
|
|
5547
|
-
var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx) => {
|
|
5936
|
+
var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies) => {
|
|
5548
5937
|
const queryArgs = {
|
|
5549
5938
|
where: {
|
|
5550
5939
|
type: single || requireWhere ? new GraphQLNonNull7(filterArgs) : filterArgs
|
|
@@ -5556,6 +5945,7 @@ var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
5556
5945
|
try {
|
|
5557
5946
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5558
5947
|
const { where } = args;
|
|
5948
|
+
const scope = policies?.scope?.(context);
|
|
5559
5949
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5560
5950
|
deep: true
|
|
5561
5951
|
});
|
|
@@ -5565,7 +5955,12 @@ var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
5565
5955
|
selectionCtx
|
|
5566
5956
|
);
|
|
5567
5957
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
5568
|
-
const filters =
|
|
5958
|
+
const filters = withScope(
|
|
5959
|
+
scope,
|
|
5960
|
+
tableName,
|
|
5961
|
+
table,
|
|
5962
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
5963
|
+
);
|
|
5569
5964
|
if (single) {
|
|
5570
5965
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
5571
5966
|
}
|
|
@@ -5623,12 +6018,16 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5623
6018
|
attachTargetPrimaryKeys(namedRelations, tables, pgPrimaryKeyPropNames);
|
|
5624
6019
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
5625
6020
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
6021
|
+
const scopes = options.policies?.scope;
|
|
6022
|
+
const contextValuesOf = options.policies?.contextValues;
|
|
6023
|
+
const policies = bindPolicies(options.policies, filterCtx);
|
|
5626
6024
|
const resolverFactory = createRelationResolverFactory(
|
|
5627
6025
|
db,
|
|
5628
6026
|
tables,
|
|
5629
6027
|
"nulls-largest",
|
|
5630
6028
|
filterCtx,
|
|
5631
|
-
limits
|
|
6029
|
+
limits,
|
|
6030
|
+
scopes
|
|
5632
6031
|
);
|
|
5633
6032
|
const cacheCtx = {
|
|
5634
6033
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -5645,6 +6044,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5645
6044
|
complexity,
|
|
5646
6045
|
limits,
|
|
5647
6046
|
docs: options.docs ?? {},
|
|
6047
|
+
primaryKeyOf: (name) => tables[name] ? pgPrimaryKeyPropNames(tables[name]) : [],
|
|
6048
|
+
contextValuesOf,
|
|
5648
6049
|
featureOf
|
|
5649
6050
|
};
|
|
5650
6051
|
const nestedPlans = features.nestedWrites ? buildNestedWritePlans(
|
|
@@ -5655,8 +6056,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5655
6056
|
extractRelationJoinColumns
|
|
5656
6057
|
) : void 0;
|
|
5657
6058
|
const nestedTypes = nestedPlans ? createNestedWriteTypes({ plans: nestedPlans, cacheCtx, typeNameMapper, insertPrefix: prefixes.insert }) : void 0;
|
|
5658
|
-
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx }) : void 0;
|
|
5659
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
6059
|
+
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx, scopes, contextValues: contextValuesOf }) : void 0;
|
|
6060
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) : void 0;
|
|
5660
6061
|
const queries = {};
|
|
5661
6062
|
const mutations = {};
|
|
5662
6063
|
const mutationTxCtx = createMutationTxCtx(options.transactions);
|
|
@@ -5683,6 +6084,7 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5683
6084
|
const outputs = {};
|
|
5684
6085
|
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
5685
6086
|
const tableFeatures = featureOf(tableName);
|
|
6087
|
+
const drizzleMeta = tableFieldExtensions(tableName, pgPrimaryKeyPropNames(schema[tableName]));
|
|
5686
6088
|
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
5687
6089
|
const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
|
|
5688
6090
|
const {
|
|
@@ -5715,7 +6117,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5715
6117
|
typeNameMapper,
|
|
5716
6118
|
filterCtx,
|
|
5717
6119
|
tableFeatures.distinct,
|
|
5718
|
-
limits
|
|
6120
|
+
limits,
|
|
6121
|
+
policies
|
|
5719
6122
|
);
|
|
5720
6123
|
const selectSingleGenerated = generateSelectSingle2(
|
|
5721
6124
|
db,
|
|
@@ -5728,7 +6131,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5728
6131
|
typeName,
|
|
5729
6132
|
typeNameMapper,
|
|
5730
6133
|
filterCtx,
|
|
5731
|
-
limits
|
|
6134
|
+
limits,
|
|
6135
|
+
policies
|
|
5732
6136
|
);
|
|
5733
6137
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray2(
|
|
5734
6138
|
db,
|
|
@@ -5743,7 +6147,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5743
6147
|
conflictDoNothing,
|
|
5744
6148
|
mutationTxCtx,
|
|
5745
6149
|
nestedRuntime,
|
|
5746
|
-
limits
|
|
6150
|
+
limits,
|
|
6151
|
+
policies
|
|
5747
6152
|
) : void 0;
|
|
5748
6153
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle2(
|
|
5749
6154
|
db,
|
|
@@ -5758,7 +6163,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5758
6163
|
conflictDoNothing,
|
|
5759
6164
|
mutationTxCtx,
|
|
5760
6165
|
nestedRuntime,
|
|
5761
|
-
limits
|
|
6166
|
+
limits,
|
|
6167
|
+
policies
|
|
5762
6168
|
) : void 0;
|
|
5763
6169
|
const uniqueSets = tableFeatures.upsert ? getUniqueColumnSets(schema[tableName], getTableConfig2) : [];
|
|
5764
6170
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -5784,7 +6190,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5784
6190
|
filterCtx,
|
|
5785
6191
|
mutationTxCtx,
|
|
5786
6192
|
nestedRuntime,
|
|
5787
|
-
limits
|
|
6193
|
+
limits,
|
|
6194
|
+
policies
|
|
5788
6195
|
) : void 0;
|
|
5789
6196
|
const upsertSingleGenerated = onConflictInput ? generateUpsert2(
|
|
5790
6197
|
db,
|
|
@@ -5802,7 +6209,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5802
6209
|
filterCtx,
|
|
5803
6210
|
mutationTxCtx,
|
|
5804
6211
|
nestedRuntime,
|
|
5805
|
-
limits
|
|
6212
|
+
limits,
|
|
6213
|
+
policies
|
|
5806
6214
|
) : void 0;
|
|
5807
6215
|
const updateGenerated = tableFeatures.update ? generateUpdate2(
|
|
5808
6216
|
db,
|
|
@@ -5820,7 +6228,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5820
6228
|
filterCtx,
|
|
5821
6229
|
mutationTxCtx,
|
|
5822
6230
|
nestedRuntime,
|
|
5823
|
-
limits
|
|
6231
|
+
limits,
|
|
6232
|
+
policies
|
|
5824
6233
|
) : void 0;
|
|
5825
6234
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate2(
|
|
5826
6235
|
db,
|
|
@@ -5838,7 +6247,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5838
6247
|
filterCtx,
|
|
5839
6248
|
mutationTxCtx,
|
|
5840
6249
|
nestedRuntime,
|
|
5841
|
-
limits
|
|
6250
|
+
limits,
|
|
6251
|
+
policies
|
|
5842
6252
|
) : void 0;
|
|
5843
6253
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
5844
6254
|
const updateManyGenerated = updateManyInput ? generateUpdateMany2(
|
|
@@ -5854,7 +6264,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5854
6264
|
filterCtx,
|
|
5855
6265
|
mutationTxCtx,
|
|
5856
6266
|
nestedRuntime,
|
|
5857
|
-
limits
|
|
6267
|
+
limits,
|
|
6268
|
+
policies
|
|
5858
6269
|
) : void 0;
|
|
5859
6270
|
const deleteGenerated = tableFeatures.delete ? generateDelete2(
|
|
5860
6271
|
db,
|
|
@@ -5867,7 +6278,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5867
6278
|
tableFeatures.requireWhere,
|
|
5868
6279
|
filterCtx,
|
|
5869
6280
|
{ tableName, relationMap: namedRelations, tables },
|
|
5870
|
-
mutationTxCtx
|
|
6281
|
+
mutationTxCtx,
|
|
6282
|
+
policies
|
|
5871
6283
|
) : void 0;
|
|
5872
6284
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete2(
|
|
5873
6285
|
db,
|
|
@@ -5880,7 +6292,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5880
6292
|
tableFeatures.requireWhere,
|
|
5881
6293
|
filterCtx,
|
|
5882
6294
|
{ tableName, relationMap: namedRelations, tables },
|
|
5883
|
-
mutationTxCtx
|
|
6295
|
+
mutationTxCtx,
|
|
6296
|
+
policies
|
|
5884
6297
|
) : void 0;
|
|
5885
6298
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
5886
6299
|
db,
|
|
@@ -5914,7 +6327,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5914
6327
|
typeName,
|
|
5915
6328
|
aggregateFieldName,
|
|
5916
6329
|
tableFilters,
|
|
5917
|
-
filterCtx
|
|
6330
|
+
filterCtx,
|
|
6331
|
+
scopes
|
|
5918
6332
|
) : void 0;
|
|
5919
6333
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
5920
6334
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -5928,25 +6342,35 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5928
6342
|
tableFilters,
|
|
5929
6343
|
groupByEnum,
|
|
5930
6344
|
havingInput,
|
|
5931
|
-
filterCtx
|
|
6345
|
+
filterCtx,
|
|
6346
|
+
scopes
|
|
5932
6347
|
) : void 0;
|
|
5933
6348
|
queries[selectArrGenerated.name] = {
|
|
5934
6349
|
type: selectArrOutput,
|
|
5935
6350
|
args: selectArrGenerated.args,
|
|
5936
6351
|
resolve: selectArrGenerated.resolver,
|
|
5937
|
-
|
|
6352
|
+
extensions: {
|
|
6353
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: false, targetArg: "where" }),
|
|
6354
|
+
...complexity ? { complexity: listFieldComplexity(complexity, limits?.(tableName)) } : {}
|
|
6355
|
+
}
|
|
5938
6356
|
};
|
|
5939
6357
|
queries[selectSingleGenerated.name] = {
|
|
5940
6358
|
type: selectSingleOutput,
|
|
5941
6359
|
args: selectSingleGenerated.args,
|
|
5942
|
-
resolve: selectSingleGenerated.resolver
|
|
6360
|
+
resolve: selectSingleGenerated.resolver,
|
|
6361
|
+
extensions: {
|
|
6362
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: true, targetArg: "where" })
|
|
6363
|
+
}
|
|
5943
6364
|
};
|
|
5944
6365
|
if (aggregateGenerated && aggregateType) {
|
|
5945
6366
|
queries[aggregateGenerated.name] = {
|
|
5946
6367
|
type: new GraphQLNonNull7(aggregateType),
|
|
5947
6368
|
args: aggregateGenerated.args,
|
|
5948
6369
|
resolve: aggregateGenerated.resolver,
|
|
5949
|
-
|
|
6370
|
+
extensions: {
|
|
6371
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "aggregate", single: true, targetArg: "where" }),
|
|
6372
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
6373
|
+
}
|
|
5950
6374
|
};
|
|
5951
6375
|
}
|
|
5952
6376
|
if (groupByGenerated && groupByType) {
|
|
@@ -5954,14 +6378,20 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5954
6378
|
type: new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(groupByType))),
|
|
5955
6379
|
args: groupByGenerated.args,
|
|
5956
6380
|
resolve: groupByGenerated.resolver,
|
|
5957
|
-
|
|
6381
|
+
extensions: {
|
|
6382
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "groupBy", single: false, targetArg: "where" }),
|
|
6383
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
6384
|
+
}
|
|
5958
6385
|
};
|
|
5959
6386
|
}
|
|
5960
6387
|
if (insertArrGenerated) {
|
|
5961
6388
|
mutations[insertArrGenerated.name] = {
|
|
5962
6389
|
type: arrTableItemOutput,
|
|
5963
6390
|
args: insertArrGenerated.args,
|
|
5964
|
-
resolve: insertArrGenerated.resolver
|
|
6391
|
+
resolve: insertArrGenerated.resolver,
|
|
6392
|
+
extensions: {
|
|
6393
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: false, targetArg: "values" })
|
|
6394
|
+
}
|
|
5965
6395
|
};
|
|
5966
6396
|
}
|
|
5967
6397
|
if (insertSingleGenerated) {
|
|
@@ -5970,28 +6400,40 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5970
6400
|
// `conflictDoNothing` swallowing the insert, so the field is nullable only there.
|
|
5971
6401
|
type: conflictDoNothing ? singleTableItemOutput : new GraphQLNonNull7(singleTableItemOutput),
|
|
5972
6402
|
args: insertSingleGenerated.args,
|
|
5973
|
-
resolve: insertSingleGenerated.resolver
|
|
6403
|
+
resolve: insertSingleGenerated.resolver,
|
|
6404
|
+
extensions: {
|
|
6405
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: true, targetArg: "values" })
|
|
6406
|
+
}
|
|
5974
6407
|
};
|
|
5975
6408
|
}
|
|
5976
6409
|
if (upsertArrGenerated) {
|
|
5977
6410
|
mutations[upsertArrGenerated.name] = {
|
|
5978
6411
|
type: arrTableItemOutput,
|
|
5979
6412
|
args: upsertArrGenerated.args,
|
|
5980
|
-
resolve: upsertArrGenerated.resolver
|
|
6413
|
+
resolve: upsertArrGenerated.resolver,
|
|
6414
|
+
extensions: {
|
|
6415
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: false, targetArg: "values" })
|
|
6416
|
+
}
|
|
5981
6417
|
};
|
|
5982
6418
|
}
|
|
5983
6419
|
if (upsertSingleGenerated) {
|
|
5984
6420
|
mutations[upsertSingleGenerated.name] = {
|
|
5985
6421
|
type: singleTableItemOutput,
|
|
5986
6422
|
args: upsertSingleGenerated.args,
|
|
5987
|
-
resolve: upsertSingleGenerated.resolver
|
|
6423
|
+
resolve: upsertSingleGenerated.resolver,
|
|
6424
|
+
extensions: {
|
|
6425
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: true, targetArg: "values" })
|
|
6426
|
+
}
|
|
5988
6427
|
};
|
|
5989
6428
|
}
|
|
5990
6429
|
if (updateGenerated) {
|
|
5991
6430
|
mutations[updateGenerated.name] = {
|
|
5992
6431
|
type: arrTableItemOutput,
|
|
5993
6432
|
args: updateGenerated.args,
|
|
5994
|
-
resolve: updateGenerated.resolver
|
|
6433
|
+
resolve: updateGenerated.resolver,
|
|
6434
|
+
extensions: {
|
|
6435
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: false, targetArg: "where" })
|
|
6436
|
+
}
|
|
5995
6437
|
};
|
|
5996
6438
|
}
|
|
5997
6439
|
if (updateManyGenerated) {
|
|
@@ -5999,6 +6441,9 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5999
6441
|
type: new GraphQLNonNull7(new GraphQLList7(singleTableItemOutput)),
|
|
6000
6442
|
args: updateManyGenerated.args,
|
|
6001
6443
|
resolve: updateManyGenerated.resolver,
|
|
6444
|
+
extensions: {
|
|
6445
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "updateMany", single: false, targetArg: "updates" })
|
|
6446
|
+
},
|
|
6002
6447
|
// The nullable element is deliberate, and the reason this mutation's return type
|
|
6003
6448
|
// differs from every sibling's: the result is aligned with the input, one slot per
|
|
6004
6449
|
// entry, so an entry that matched nothing has to be able to say so.
|
|
@@ -6009,21 +6454,30 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6009
6454
|
mutations[updateSingleGenerated.name] = {
|
|
6010
6455
|
type: singleTableItemOutput,
|
|
6011
6456
|
args: updateSingleGenerated.args,
|
|
6012
|
-
resolve: updateSingleGenerated.resolver
|
|
6457
|
+
resolve: updateSingleGenerated.resolver,
|
|
6458
|
+
extensions: {
|
|
6459
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: true, targetArg: "where" })
|
|
6460
|
+
}
|
|
6013
6461
|
};
|
|
6014
6462
|
}
|
|
6015
6463
|
if (deleteGenerated) {
|
|
6016
6464
|
mutations[deleteGenerated.name] = {
|
|
6017
6465
|
type: arrTableItemOutput,
|
|
6018
6466
|
args: deleteGenerated.args,
|
|
6019
|
-
resolve: deleteGenerated.resolver
|
|
6467
|
+
resolve: deleteGenerated.resolver,
|
|
6468
|
+
extensions: {
|
|
6469
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: false, targetArg: "where" })
|
|
6470
|
+
}
|
|
6020
6471
|
};
|
|
6021
6472
|
}
|
|
6022
6473
|
if (deleteSingleGenerated) {
|
|
6023
6474
|
mutations[deleteSingleGenerated.name] = {
|
|
6024
6475
|
type: singleTableItemOutput,
|
|
6025
6476
|
args: deleteSingleGenerated.args,
|
|
6026
|
-
resolve: deleteSingleGenerated.resolver
|
|
6477
|
+
resolve: deleteSingleGenerated.resolver,
|
|
6478
|
+
extensions: {
|
|
6479
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: true, targetArg: "where" })
|
|
6480
|
+
}
|
|
6027
6481
|
};
|
|
6028
6482
|
}
|
|
6029
6483
|
if (updateCountGenerated) {
|
|
@@ -6096,7 +6550,7 @@ import {
|
|
|
6096
6550
|
GraphQLNonNull as GraphQLNonNull8
|
|
6097
6551
|
} from "graphql";
|
|
6098
6552
|
import { parseResolveInfo as parseResolveInfo4 } from "graphql-parse-resolve-info";
|
|
6099
|
-
var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
6553
|
+
var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
6100
6554
|
const queryBase = db.query[tableName];
|
|
6101
6555
|
if (!queryBase) {
|
|
6102
6556
|
throw new Error(
|
|
@@ -6133,6 +6587,7 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6133
6587
|
limits,
|
|
6134
6588
|
pkNames,
|
|
6135
6589
|
db: executor,
|
|
6590
|
+
scope: policies?.scope?.(context),
|
|
6136
6591
|
// SQLite sorts NULLs as the smallest values (first in ASC).
|
|
6137
6592
|
nullOrdering: "nulls-smallest"
|
|
6138
6593
|
});
|
|
@@ -6143,7 +6598,7 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6143
6598
|
args: queryArgs
|
|
6144
6599
|
};
|
|
6145
6600
|
};
|
|
6146
|
-
var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
6601
|
+
var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
6147
6602
|
const queryBase = db.query[tableName];
|
|
6148
6603
|
if (!queryBase) {
|
|
6149
6604
|
throw new Error(
|
|
@@ -6173,7 +6628,8 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
6173
6628
|
filterCtx,
|
|
6174
6629
|
limits,
|
|
6175
6630
|
pkNames,
|
|
6176
|
-
db: executor
|
|
6631
|
+
db: executor,
|
|
6632
|
+
scope: policies?.scope?.(context)
|
|
6177
6633
|
});
|
|
6178
6634
|
} catch (e) {
|
|
6179
6635
|
throw toGraphQLError(e);
|
|
@@ -6183,7 +6639,7 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
6183
6639
|
};
|
|
6184
6640
|
};
|
|
6185
6641
|
var sqlitePrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, getTableConfig3);
|
|
6186
|
-
var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
6642
|
+
var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
6187
6643
|
const queryArgs = {
|
|
6188
6644
|
values: {
|
|
6189
6645
|
type: new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(baseType)))
|
|
@@ -6200,7 +6656,13 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6200
6656
|
}
|
|
6201
6657
|
const entries = nested?.enabled(tableName) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
|
|
6202
6658
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6203
|
-
const
|
|
6659
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6660
|
+
const scope = policies?.scope?.(context);
|
|
6661
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
6662
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : args.values, table),
|
|
6663
|
+
contextColumns,
|
|
6664
|
+
context
|
|
6665
|
+
);
|
|
6204
6666
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6205
6667
|
deep: true
|
|
6206
6668
|
});
|
|
@@ -6213,7 +6675,8 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6213
6675
|
table,
|
|
6214
6676
|
pkNames,
|
|
6215
6677
|
parsedInfo,
|
|
6216
|
-
limits
|
|
6678
|
+
limits,
|
|
6679
|
+
scope
|
|
6217
6680
|
});
|
|
6218
6681
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
6219
6682
|
const runInsert = async (target, values) => {
|
|
@@ -6228,8 +6691,9 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6228
6691
|
runtime: nested,
|
|
6229
6692
|
tableName,
|
|
6230
6693
|
entries: nestedEntries,
|
|
6231
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6232
|
-
write: (tx, values) => runInsert(tx, [values])
|
|
6694
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6695
|
+
write: (tx, values) => runInsert(tx, [values]),
|
|
6696
|
+
context
|
|
6233
6697
|
}) : await runInsert(executor, input);
|
|
6234
6698
|
const enriched = hasRelations ? await eagerLoadMutationRelations(executor, tableName, result, pkNames, withParams) : result;
|
|
6235
6699
|
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
@@ -6241,7 +6705,7 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6241
6705
|
args: queryArgs
|
|
6242
6706
|
};
|
|
6243
6707
|
};
|
|
6244
|
-
var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
6708
|
+
var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
6245
6709
|
const queryArgs = {
|
|
6246
6710
|
values: {
|
|
6247
6711
|
type: new GraphQLNonNull8(baseType)
|
|
@@ -6255,7 +6719,13 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6255
6719
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6256
6720
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
6257
6721
|
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
6258
|
-
const
|
|
6722
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6723
|
+
const scope = policies?.scope?.(context);
|
|
6724
|
+
const input = nestedEntry ? {} : applyContextValues(
|
|
6725
|
+
remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table),
|
|
6726
|
+
contextColumns,
|
|
6727
|
+
context
|
|
6728
|
+
);
|
|
6259
6729
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6260
6730
|
deep: true
|
|
6261
6731
|
});
|
|
@@ -6268,7 +6738,8 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6268
6738
|
table,
|
|
6269
6739
|
pkNames,
|
|
6270
6740
|
parsedInfo,
|
|
6271
|
-
limits
|
|
6741
|
+
limits,
|
|
6742
|
+
scope
|
|
6272
6743
|
});
|
|
6273
6744
|
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
6274
6745
|
const runInsert = async (target, values) => {
|
|
@@ -6283,8 +6754,9 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6283
6754
|
runtime: nested,
|
|
6284
6755
|
tableName,
|
|
6285
6756
|
entries: [nestedEntry],
|
|
6286
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6287
|
-
write: runInsert
|
|
6757
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6758
|
+
write: runInsert,
|
|
6759
|
+
context
|
|
6288
6760
|
}) : await runInsert(executor, input);
|
|
6289
6761
|
if (!result[0]) {
|
|
6290
6762
|
if (!conflictDoNothing) {
|
|
@@ -6302,7 +6774,7 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6302
6774
|
args: queryArgs
|
|
6303
6775
|
};
|
|
6304
6776
|
};
|
|
6305
|
-
var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6777
|
+
var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6306
6778
|
const queryArgs = {
|
|
6307
6779
|
values: {
|
|
6308
6780
|
type: single ? new GraphQLNonNull8(baseType) : new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(baseType)))
|
|
@@ -6324,7 +6796,13 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6324
6796
|
}
|
|
6325
6797
|
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
6326
6798
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6327
|
-
const
|
|
6799
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6800
|
+
const scope = policies?.scope?.(context);
|
|
6801
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
6802
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table),
|
|
6803
|
+
contextColumns,
|
|
6804
|
+
context
|
|
6805
|
+
);
|
|
6328
6806
|
const parsedInfo = parseResolveInfo4(info, { deep: true });
|
|
6329
6807
|
const { columns, hasRelations, withParams } = prepareMutationRelationColumns({
|
|
6330
6808
|
relationMap,
|
|
@@ -6335,7 +6813,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6335
6813
|
table,
|
|
6336
6814
|
pkNames,
|
|
6337
6815
|
parsedInfo,
|
|
6338
|
-
limits
|
|
6816
|
+
limits,
|
|
6817
|
+
scope
|
|
6339
6818
|
});
|
|
6340
6819
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
6341
6820
|
const runUpsert = async (target, values) => {
|
|
@@ -6350,7 +6829,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6350
6829
|
buildWhere: (where) => extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName))
|
|
6351
6830
|
});
|
|
6352
6831
|
let query = target.insert(table).values(values).returning(returning);
|
|
6353
|
-
|
|
6832
|
+
const setWhere = withScope(scope, tableName, table, plan.setWhere);
|
|
6833
|
+
query = plan.action === "NOTHING" ? query.onConflictDoNothing(plan.target ? { target: plan.target } : void 0) : query.onConflictDoUpdate({ target: plan.target, set: plan.set, setWhere });
|
|
6354
6834
|
return await query;
|
|
6355
6835
|
};
|
|
6356
6836
|
const result = nestedEntries ? await writeWithNestedOps({
|
|
@@ -6358,8 +6838,9 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6358
6838
|
runtime: nested,
|
|
6359
6839
|
tableName,
|
|
6360
6840
|
entries: nestedEntries,
|
|
6361
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6362
|
-
write: (tx, values) => runUpsert(tx, [values])
|
|
6841
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6842
|
+
write: (tx, values) => runUpsert(tx, [values]),
|
|
6843
|
+
context
|
|
6363
6844
|
}) : await runUpsert(executor, input);
|
|
6364
6845
|
if (single && !result[0]) {
|
|
6365
6846
|
return void 0;
|
|
@@ -6374,7 +6855,7 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6374
6855
|
args: queryArgs
|
|
6375
6856
|
};
|
|
6376
6857
|
};
|
|
6377
|
-
var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6858
|
+
var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6378
6859
|
const queryArgs = {
|
|
6379
6860
|
set: {
|
|
6380
6861
|
type: new GraphQLNonNull8(setArgs)
|
|
@@ -6390,6 +6871,7 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6390
6871
|
try {
|
|
6391
6872
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6392
6873
|
const { where, set } = args;
|
|
6874
|
+
const scope = policies?.scope?.(context);
|
|
6393
6875
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6394
6876
|
deep: true
|
|
6395
6877
|
});
|
|
@@ -6402,16 +6884,25 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6402
6884
|
table,
|
|
6403
6885
|
pkNames,
|
|
6404
6886
|
parsedInfo,
|
|
6405
|
-
limits
|
|
6887
|
+
limits,
|
|
6888
|
+
scope
|
|
6406
6889
|
});
|
|
6407
6890
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
6408
6891
|
const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
|
|
6409
|
-
const input =
|
|
6892
|
+
const input = stripContextValues(
|
|
6893
|
+
remapUpdateInput(entry ? entry.columns : set, table, tableName),
|
|
6894
|
+
policies?.contextValues?.(tableName)
|
|
6895
|
+
);
|
|
6410
6896
|
if (!Object.keys(input).length && !nestedOps) {
|
|
6411
6897
|
throw new GraphQLError9("Unable to update with no values specified!");
|
|
6412
6898
|
}
|
|
6413
6899
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
6414
|
-
const filters =
|
|
6900
|
+
const filters = withScope(
|
|
6901
|
+
scope,
|
|
6902
|
+
tableName,
|
|
6903
|
+
table,
|
|
6904
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
6905
|
+
);
|
|
6415
6906
|
if (single) {
|
|
6416
6907
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
6417
6908
|
}
|
|
@@ -6431,7 +6922,8 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6431
6922
|
columns: input,
|
|
6432
6923
|
ops: nestedOps,
|
|
6433
6924
|
remapValues: (values) => values,
|
|
6434
|
-
write: runUpdate
|
|
6925
|
+
write: runUpdate,
|
|
6926
|
+
context
|
|
6435
6927
|
}) : await runUpdate(executor, input);
|
|
6436
6928
|
if (single && result.length > 1) {
|
|
6437
6929
|
throw new GraphQLError9(`${fieldName}: 'where' matched more than one row!`);
|
|
@@ -6449,7 +6941,7 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6449
6941
|
args: queryArgs
|
|
6450
6942
|
};
|
|
6451
6943
|
};
|
|
6452
|
-
var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6944
|
+
var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6453
6945
|
const queryArgs = {
|
|
6454
6946
|
updates: {
|
|
6455
6947
|
type: new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(updateManyInput)))
|
|
@@ -6465,6 +6957,8 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6465
6957
|
if (!updates.length) {
|
|
6466
6958
|
throw new GraphQLError9("No updates were provided!");
|
|
6467
6959
|
}
|
|
6960
|
+
const scope = policies?.scope?.(context);
|
|
6961
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6468
6962
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6469
6963
|
deep: true
|
|
6470
6964
|
});
|
|
@@ -6477,19 +6971,28 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6477
6971
|
table,
|
|
6478
6972
|
pkNames,
|
|
6479
6973
|
parsedInfo,
|
|
6480
|
-
limits
|
|
6974
|
+
limits,
|
|
6975
|
+
scope
|
|
6481
6976
|
});
|
|
6482
6977
|
const entries = updates.map(({ where, set }) => {
|
|
6483
6978
|
const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
6484
6979
|
const ops = split && nested.hasOps(split.ops) ? split.ops : void 0;
|
|
6485
|
-
const input =
|
|
6980
|
+
const input = stripContextValues(
|
|
6981
|
+
remapUpdateInput(split ? split.columns : set, table, tableName),
|
|
6982
|
+
contextColumns
|
|
6983
|
+
);
|
|
6486
6984
|
if (!Object.keys(input).length && !ops) {
|
|
6487
6985
|
throw new GraphQLError9("Unable to update with no values specified!");
|
|
6488
6986
|
}
|
|
6489
6987
|
return {
|
|
6490
6988
|
set: input,
|
|
6491
6989
|
ops,
|
|
6492
|
-
filters:
|
|
6990
|
+
filters: withScope(
|
|
6991
|
+
scope,
|
|
6992
|
+
tableName,
|
|
6993
|
+
table,
|
|
6994
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
6995
|
+
)
|
|
6493
6996
|
};
|
|
6494
6997
|
});
|
|
6495
6998
|
const anyNested = entries.some((entry) => entry.ops);
|
|
@@ -6507,7 +7010,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6507
7010
|
return query.returning(returning).all();
|
|
6508
7011
|
};
|
|
6509
7012
|
const runNestedEntry = async (tx, entry) => {
|
|
6510
|
-
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops) } : entry.set;
|
|
7013
|
+
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops, context) } : entry.set;
|
|
6511
7014
|
const writes = Object.keys(values).length > 0;
|
|
6512
7015
|
let query = writes ? tx.update(table).set(values) : tx.select(returning).from(table);
|
|
6513
7016
|
if (entry.filters) {
|
|
@@ -6515,7 +7018,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6515
7018
|
}
|
|
6516
7019
|
const rows = await (writes ? query.returning(returning) : query);
|
|
6517
7020
|
if (entry.ops) {
|
|
6518
|
-
await nested.applyChildSide(tx, tableName, entry.ops, rows);
|
|
7021
|
+
await nested.applyChildSide(tx, tableName, entry.ops, rows, context);
|
|
6519
7022
|
}
|
|
6520
7023
|
return rows;
|
|
6521
7024
|
};
|
|
@@ -6568,7 +7071,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6568
7071
|
args: queryArgs
|
|
6569
7072
|
};
|
|
6570
7073
|
};
|
|
6571
|
-
var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx) => {
|
|
7074
|
+
var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies) => {
|
|
6572
7075
|
const queryArgs = {
|
|
6573
7076
|
where: {
|
|
6574
7077
|
type: single || requireWhere ? new GraphQLNonNull8(filterArgs) : filterArgs
|
|
@@ -6580,6 +7083,7 @@ var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
6580
7083
|
try {
|
|
6581
7084
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6582
7085
|
const { where } = args;
|
|
7086
|
+
const scope = policies?.scope?.(context);
|
|
6583
7087
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6584
7088
|
deep: true
|
|
6585
7089
|
});
|
|
@@ -6589,7 +7093,12 @@ var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
6589
7093
|
selectionCtx
|
|
6590
7094
|
);
|
|
6591
7095
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
6592
|
-
const filters =
|
|
7096
|
+
const filters = withScope(
|
|
7097
|
+
scope,
|
|
7098
|
+
tableName,
|
|
7099
|
+
table,
|
|
7100
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
7101
|
+
);
|
|
6593
7102
|
if (single) {
|
|
6594
7103
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
6595
7104
|
}
|
|
@@ -6648,12 +7157,16 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6648
7157
|
attachTargetPrimaryKeys(namedRelations, tables, sqlitePrimaryKeyPropNames);
|
|
6649
7158
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
6650
7159
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
7160
|
+
const scopes = options.policies?.scope;
|
|
7161
|
+
const contextValuesOf = options.policies?.contextValues;
|
|
7162
|
+
const policies = bindPolicies(options.policies, filterCtx);
|
|
6651
7163
|
const resolverFactory = createRelationResolverFactory(
|
|
6652
7164
|
db,
|
|
6653
7165
|
tables,
|
|
6654
7166
|
"nulls-smallest",
|
|
6655
7167
|
filterCtx,
|
|
6656
|
-
limits
|
|
7168
|
+
limits,
|
|
7169
|
+
scopes
|
|
6657
7170
|
);
|
|
6658
7171
|
const cacheCtx = {
|
|
6659
7172
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -6670,6 +7183,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6670
7183
|
complexity,
|
|
6671
7184
|
limits,
|
|
6672
7185
|
docs: options.docs ?? {},
|
|
7186
|
+
primaryKeyOf: (name) => tables[name] ? sqlitePrimaryKeyPropNames(tables[name]) : [],
|
|
7187
|
+
contextValuesOf,
|
|
6673
7188
|
featureOf
|
|
6674
7189
|
};
|
|
6675
7190
|
if (features.nestedWrites && db.resultKind === "sync") {
|
|
@@ -6685,8 +7200,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6685
7200
|
extractRelationJoinColumns
|
|
6686
7201
|
) : void 0;
|
|
6687
7202
|
const nestedTypes = nestedPlans ? createNestedWriteTypes({ plans: nestedPlans, cacheCtx, typeNameMapper, insertPrefix: prefixes.insert }) : void 0;
|
|
6688
|
-
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx }) : void 0;
|
|
6689
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
7203
|
+
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx, scopes, contextValues: contextValuesOf }) : void 0;
|
|
7204
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) : void 0;
|
|
6690
7205
|
const queries = {};
|
|
6691
7206
|
const mutations = {};
|
|
6692
7207
|
if (options.transactions && db.resultKind === "sync") {
|
|
@@ -6718,6 +7233,7 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6718
7233
|
const outputs = {};
|
|
6719
7234
|
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
6720
7235
|
const tableFeatures = featureOf(tableName);
|
|
7236
|
+
const drizzleMeta = tableFieldExtensions(tableName, sqlitePrimaryKeyPropNames(schema[tableName]));
|
|
6721
7237
|
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
6722
7238
|
const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
|
|
6723
7239
|
const {
|
|
@@ -6750,7 +7266,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6750
7266
|
typeNameMapper,
|
|
6751
7267
|
filterCtx,
|
|
6752
7268
|
tableFeatures.distinct,
|
|
6753
|
-
limits
|
|
7269
|
+
limits,
|
|
7270
|
+
policies
|
|
6754
7271
|
);
|
|
6755
7272
|
const selectSingleGenerated = generateSelectSingle3(
|
|
6756
7273
|
db,
|
|
@@ -6763,7 +7280,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6763
7280
|
typeName,
|
|
6764
7281
|
typeNameMapper,
|
|
6765
7282
|
filterCtx,
|
|
6766
|
-
limits
|
|
7283
|
+
limits,
|
|
7284
|
+
policies
|
|
6767
7285
|
);
|
|
6768
7286
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray3(
|
|
6769
7287
|
db,
|
|
@@ -6778,7 +7296,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6778
7296
|
conflictDoNothing,
|
|
6779
7297
|
mutationTxCtx,
|
|
6780
7298
|
nestedRuntime,
|
|
6781
|
-
limits
|
|
7299
|
+
limits,
|
|
7300
|
+
policies
|
|
6782
7301
|
) : void 0;
|
|
6783
7302
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle3(
|
|
6784
7303
|
db,
|
|
@@ -6793,7 +7312,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6793
7312
|
conflictDoNothing,
|
|
6794
7313
|
mutationTxCtx,
|
|
6795
7314
|
nestedRuntime,
|
|
6796
|
-
limits
|
|
7315
|
+
limits,
|
|
7316
|
+
policies
|
|
6797
7317
|
) : void 0;
|
|
6798
7318
|
const uniqueSets = tableFeatures.upsert ? getUniqueColumnSets(schema[tableName], getTableConfig3) : [];
|
|
6799
7319
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -6819,7 +7339,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6819
7339
|
filterCtx,
|
|
6820
7340
|
mutationTxCtx,
|
|
6821
7341
|
nestedRuntime,
|
|
6822
|
-
limits
|
|
7342
|
+
limits,
|
|
7343
|
+
policies
|
|
6823
7344
|
) : void 0;
|
|
6824
7345
|
const upsertSingleGenerated = onConflictInput ? generateUpsert3(
|
|
6825
7346
|
db,
|
|
@@ -6837,7 +7358,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6837
7358
|
filterCtx,
|
|
6838
7359
|
mutationTxCtx,
|
|
6839
7360
|
nestedRuntime,
|
|
6840
|
-
limits
|
|
7361
|
+
limits,
|
|
7362
|
+
policies
|
|
6841
7363
|
) : void 0;
|
|
6842
7364
|
const updateGenerated = tableFeatures.update ? generateUpdate3(
|
|
6843
7365
|
db,
|
|
@@ -6855,7 +7377,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6855
7377
|
filterCtx,
|
|
6856
7378
|
mutationTxCtx,
|
|
6857
7379
|
nestedRuntime,
|
|
6858
|
-
limits
|
|
7380
|
+
limits,
|
|
7381
|
+
policies
|
|
6859
7382
|
) : void 0;
|
|
6860
7383
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate3(
|
|
6861
7384
|
db,
|
|
@@ -6873,7 +7396,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6873
7396
|
filterCtx,
|
|
6874
7397
|
mutationTxCtx,
|
|
6875
7398
|
nestedRuntime,
|
|
6876
|
-
limits
|
|
7399
|
+
limits,
|
|
7400
|
+
policies
|
|
6877
7401
|
) : void 0;
|
|
6878
7402
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
6879
7403
|
const updateManyGenerated = updateManyInput ? generateUpdateMany3(
|
|
@@ -6889,7 +7413,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6889
7413
|
filterCtx,
|
|
6890
7414
|
mutationTxCtx,
|
|
6891
7415
|
nestedRuntime,
|
|
6892
|
-
limits
|
|
7416
|
+
limits,
|
|
7417
|
+
policies
|
|
6893
7418
|
) : void 0;
|
|
6894
7419
|
const deleteGenerated = tableFeatures.delete ? generateDelete3(
|
|
6895
7420
|
db,
|
|
@@ -6902,7 +7427,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6902
7427
|
tableFeatures.requireWhere,
|
|
6903
7428
|
filterCtx,
|
|
6904
7429
|
{ tableName, relationMap: namedRelations, tables },
|
|
6905
|
-
mutationTxCtx
|
|
7430
|
+
mutationTxCtx,
|
|
7431
|
+
policies
|
|
6906
7432
|
) : void 0;
|
|
6907
7433
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete3(
|
|
6908
7434
|
db,
|
|
@@ -6915,7 +7441,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6915
7441
|
tableFeatures.requireWhere,
|
|
6916
7442
|
filterCtx,
|
|
6917
7443
|
{ tableName, relationMap: namedRelations, tables },
|
|
6918
|
-
mutationTxCtx
|
|
7444
|
+
mutationTxCtx,
|
|
7445
|
+
policies
|
|
6919
7446
|
) : void 0;
|
|
6920
7447
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
6921
7448
|
db,
|
|
@@ -6949,7 +7476,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6949
7476
|
typeName,
|
|
6950
7477
|
aggregateFieldName,
|
|
6951
7478
|
tableFilters,
|
|
6952
|
-
filterCtx
|
|
7479
|
+
filterCtx,
|
|
7480
|
+
scopes
|
|
6953
7481
|
) : void 0;
|
|
6954
7482
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
6955
7483
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -6963,25 +7491,35 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6963
7491
|
tableFilters,
|
|
6964
7492
|
groupByEnum,
|
|
6965
7493
|
havingInput,
|
|
6966
|
-
filterCtx
|
|
7494
|
+
filterCtx,
|
|
7495
|
+
scopes
|
|
6967
7496
|
) : void 0;
|
|
6968
7497
|
queries[selectArrGenerated.name] = {
|
|
6969
7498
|
type: selectArrOutput,
|
|
6970
7499
|
args: selectArrGenerated.args,
|
|
6971
7500
|
resolve: selectArrGenerated.resolver,
|
|
6972
|
-
|
|
7501
|
+
extensions: {
|
|
7502
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: false, targetArg: "where" }),
|
|
7503
|
+
...complexity ? { complexity: listFieldComplexity(complexity, limits?.(tableName)) } : {}
|
|
7504
|
+
}
|
|
6973
7505
|
};
|
|
6974
7506
|
queries[selectSingleGenerated.name] = {
|
|
6975
7507
|
type: selectSingleOutput,
|
|
6976
7508
|
args: selectSingleGenerated.args,
|
|
6977
|
-
resolve: selectSingleGenerated.resolver
|
|
7509
|
+
resolve: selectSingleGenerated.resolver,
|
|
7510
|
+
extensions: {
|
|
7511
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: true, targetArg: "where" })
|
|
7512
|
+
}
|
|
6978
7513
|
};
|
|
6979
7514
|
if (aggregateGenerated && aggregateType) {
|
|
6980
7515
|
queries[aggregateGenerated.name] = {
|
|
6981
7516
|
type: new GraphQLNonNull8(aggregateType),
|
|
6982
7517
|
args: aggregateGenerated.args,
|
|
6983
7518
|
resolve: aggregateGenerated.resolver,
|
|
6984
|
-
|
|
7519
|
+
extensions: {
|
|
7520
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "aggregate", single: true, targetArg: "where" }),
|
|
7521
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
7522
|
+
}
|
|
6985
7523
|
};
|
|
6986
7524
|
}
|
|
6987
7525
|
if (groupByGenerated && groupByType) {
|
|
@@ -6989,14 +7527,20 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6989
7527
|
type: new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(groupByType))),
|
|
6990
7528
|
args: groupByGenerated.args,
|
|
6991
7529
|
resolve: groupByGenerated.resolver,
|
|
6992
|
-
|
|
7530
|
+
extensions: {
|
|
7531
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "groupBy", single: false, targetArg: "where" }),
|
|
7532
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
7533
|
+
}
|
|
6993
7534
|
};
|
|
6994
7535
|
}
|
|
6995
7536
|
if (insertArrGenerated) {
|
|
6996
7537
|
mutations[insertArrGenerated.name] = {
|
|
6997
7538
|
type: arrTableItemOutput,
|
|
6998
7539
|
args: insertArrGenerated.args,
|
|
6999
|
-
resolve: insertArrGenerated.resolver
|
|
7540
|
+
resolve: insertArrGenerated.resolver,
|
|
7541
|
+
extensions: {
|
|
7542
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: false, targetArg: "values" })
|
|
7543
|
+
}
|
|
7000
7544
|
};
|
|
7001
7545
|
}
|
|
7002
7546
|
if (insertSingleGenerated) {
|
|
@@ -7005,28 +7549,40 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7005
7549
|
// `conflictDoNothing` swallowing the insert, so the field is nullable only there.
|
|
7006
7550
|
type: conflictDoNothing ? singleTableItemOutput : new GraphQLNonNull8(singleTableItemOutput),
|
|
7007
7551
|
args: insertSingleGenerated.args,
|
|
7008
|
-
resolve: insertSingleGenerated.resolver
|
|
7552
|
+
resolve: insertSingleGenerated.resolver,
|
|
7553
|
+
extensions: {
|
|
7554
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: true, targetArg: "values" })
|
|
7555
|
+
}
|
|
7009
7556
|
};
|
|
7010
7557
|
}
|
|
7011
7558
|
if (upsertArrGenerated) {
|
|
7012
7559
|
mutations[upsertArrGenerated.name] = {
|
|
7013
7560
|
type: arrTableItemOutput,
|
|
7014
7561
|
args: upsertArrGenerated.args,
|
|
7015
|
-
resolve: upsertArrGenerated.resolver
|
|
7562
|
+
resolve: upsertArrGenerated.resolver,
|
|
7563
|
+
extensions: {
|
|
7564
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: false, targetArg: "values" })
|
|
7565
|
+
}
|
|
7016
7566
|
};
|
|
7017
7567
|
}
|
|
7018
7568
|
if (upsertSingleGenerated) {
|
|
7019
7569
|
mutations[upsertSingleGenerated.name] = {
|
|
7020
7570
|
type: singleTableItemOutput,
|
|
7021
7571
|
args: upsertSingleGenerated.args,
|
|
7022
|
-
resolve: upsertSingleGenerated.resolver
|
|
7572
|
+
resolve: upsertSingleGenerated.resolver,
|
|
7573
|
+
extensions: {
|
|
7574
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: true, targetArg: "values" })
|
|
7575
|
+
}
|
|
7023
7576
|
};
|
|
7024
7577
|
}
|
|
7025
7578
|
if (updateGenerated) {
|
|
7026
7579
|
mutations[updateGenerated.name] = {
|
|
7027
7580
|
type: arrTableItemOutput,
|
|
7028
7581
|
args: updateGenerated.args,
|
|
7029
|
-
resolve: updateGenerated.resolver
|
|
7582
|
+
resolve: updateGenerated.resolver,
|
|
7583
|
+
extensions: {
|
|
7584
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: false, targetArg: "where" })
|
|
7585
|
+
}
|
|
7030
7586
|
};
|
|
7031
7587
|
}
|
|
7032
7588
|
if (updateManyGenerated) {
|
|
@@ -7034,6 +7590,9 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7034
7590
|
type: new GraphQLNonNull8(new GraphQLList8(singleTableItemOutput)),
|
|
7035
7591
|
args: updateManyGenerated.args,
|
|
7036
7592
|
resolve: updateManyGenerated.resolver,
|
|
7593
|
+
extensions: {
|
|
7594
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "updateMany", single: false, targetArg: "updates" })
|
|
7595
|
+
},
|
|
7037
7596
|
// The nullable element is deliberate, and the reason this mutation's return type
|
|
7038
7597
|
// differs from every sibling's: the result is aligned with the input, one slot per
|
|
7039
7598
|
// entry, so an entry that matched nothing has to be able to say so.
|
|
@@ -7044,21 +7603,30 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7044
7603
|
mutations[updateSingleGenerated.name] = {
|
|
7045
7604
|
type: singleTableItemOutput,
|
|
7046
7605
|
args: updateSingleGenerated.args,
|
|
7047
|
-
resolve: updateSingleGenerated.resolver
|
|
7606
|
+
resolve: updateSingleGenerated.resolver,
|
|
7607
|
+
extensions: {
|
|
7608
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: true, targetArg: "where" })
|
|
7609
|
+
}
|
|
7048
7610
|
};
|
|
7049
7611
|
}
|
|
7050
7612
|
if (deleteGenerated) {
|
|
7051
7613
|
mutations[deleteGenerated.name] = {
|
|
7052
7614
|
type: arrTableItemOutput,
|
|
7053
7615
|
args: deleteGenerated.args,
|
|
7054
|
-
resolve: deleteGenerated.resolver
|
|
7616
|
+
resolve: deleteGenerated.resolver,
|
|
7617
|
+
extensions: {
|
|
7618
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: false, targetArg: "where" })
|
|
7619
|
+
}
|
|
7055
7620
|
};
|
|
7056
7621
|
}
|
|
7057
7622
|
if (deleteSingleGenerated) {
|
|
7058
7623
|
mutations[deleteSingleGenerated.name] = {
|
|
7059
7624
|
type: singleTableItemOutput,
|
|
7060
7625
|
args: deleteSingleGenerated.args,
|
|
7061
|
-
resolve: deleteSingleGenerated.resolver
|
|
7626
|
+
resolve: deleteSingleGenerated.resolver,
|
|
7627
|
+
extensions: {
|
|
7628
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: true, targetArg: "where" })
|
|
7629
|
+
}
|
|
7062
7630
|
};
|
|
7063
7631
|
}
|
|
7064
7632
|
if (updateCountGenerated) {
|
|
@@ -7121,6 +7689,141 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7121
7689
|
return { queries, mutations, inputs, types: outputs, fieldResolvers };
|
|
7122
7690
|
};
|
|
7123
7691
|
|
|
7692
|
+
// src/util/selection.ts
|
|
7693
|
+
import { is as is8, Table } from "drizzle-orm";
|
|
7694
|
+
import { getTableConfig as getMySqlTableConfig, MySqlDatabase } from "drizzle-orm/mysql-core";
|
|
7695
|
+
import { getTableConfig as getPgTableConfig, PgAsyncDatabase } from "drizzle-orm/pg-core";
|
|
7696
|
+
import { BaseSQLiteDatabase, getTableConfig as getSQLiteTableConfig } from "drizzle-orm/sqlite-core";
|
|
7697
|
+
import { parseResolveInfo as parseResolveInfo5 } from "graphql-parse-resolve-info";
|
|
7698
|
+
var contextCache = /* @__PURE__ */ new WeakMap();
|
|
7699
|
+
var tableConfigFor = (db) => {
|
|
7700
|
+
if (is8(db, MySqlDatabase)) {
|
|
7701
|
+
return getMySqlTableConfig;
|
|
7702
|
+
}
|
|
7703
|
+
if (is8(db, PgAsyncDatabase)) {
|
|
7704
|
+
return getPgTableConfig;
|
|
7705
|
+
}
|
|
7706
|
+
if (is8(db, BaseSQLiteDatabase)) {
|
|
7707
|
+
return getSQLiteTableConfig;
|
|
7708
|
+
}
|
|
7709
|
+
throw new Error("Drizzle-GraphQL Error: unsupported database instance \u2014 expected a PostgreSQL, MySQL or SQLite one.");
|
|
7710
|
+
};
|
|
7711
|
+
var contextFor = (db) => {
|
|
7712
|
+
const cached = contextCache.get(db);
|
|
7713
|
+
if (cached) {
|
|
7714
|
+
return cached;
|
|
7715
|
+
}
|
|
7716
|
+
const relations = db._.relations ?? {};
|
|
7717
|
+
const schema = db._.fullSchema ?? Object.fromEntries(
|
|
7718
|
+
Object.entries(relations).filter(([, config]) => config?.table != null).map(([key, config]) => [key, config.table])
|
|
7719
|
+
);
|
|
7720
|
+
const tableEntries = Object.entries(schema).filter(([, value]) => is8(value, Table));
|
|
7721
|
+
if (!tableEntries.length) {
|
|
7722
|
+
throw new Error(
|
|
7723
|
+
"Drizzle-GraphQL Error: Schema not found in drizzle instance. Pass relations (from buildRelations/defineRelations) to the drizzle constructor so drizzle-graphql can read your tables."
|
|
7724
|
+
);
|
|
7725
|
+
}
|
|
7726
|
+
const tables = Object.fromEntries(tableEntries);
|
|
7727
|
+
const getTableConfig4 = tableConfigFor(db);
|
|
7728
|
+
const primaryKeyCache = /* @__PURE__ */ new Map();
|
|
7729
|
+
const primaryKeyOf = (tableName) => {
|
|
7730
|
+
let pk = primaryKeyCache.get(tableName);
|
|
7731
|
+
if (!pk) {
|
|
7732
|
+
const table = tables[tableName];
|
|
7733
|
+
pk = table ? getPrimaryKeyPropNamesFromConfig(table, getTableConfig4) : [];
|
|
7734
|
+
primaryKeyCache.set(tableName, pk);
|
|
7735
|
+
}
|
|
7736
|
+
return pk;
|
|
7737
|
+
};
|
|
7738
|
+
const relationMap = buildNamedRelations(relations, tableEntries);
|
|
7739
|
+
attachTargetPrimaryKeys(relationMap, tables, (table) => [...primaryKeyOf(tableNameOf(tables, table))]);
|
|
7740
|
+
const context = {
|
|
7741
|
+
tables,
|
|
7742
|
+
relationMap,
|
|
7743
|
+
filterCtx: { tables, relationMap },
|
|
7744
|
+
primaryKeyOf
|
|
7745
|
+
};
|
|
7746
|
+
contextCache.set(db, context);
|
|
7747
|
+
return context;
|
|
7748
|
+
};
|
|
7749
|
+
var tableNameOf = (tables, table) => Object.keys(tables).find((name) => tables[name] === table) ?? "";
|
|
7750
|
+
var parseInfo = (info) => {
|
|
7751
|
+
if ("fieldsByTypeName" in info) {
|
|
7752
|
+
return info;
|
|
7753
|
+
}
|
|
7754
|
+
return parseResolveInfo5(info, { deep: true });
|
|
7755
|
+
};
|
|
7756
|
+
var selectionToWith = (info, options) => {
|
|
7757
|
+
const { db, table, typeNameMapper } = options;
|
|
7758
|
+
const { tables, relationMap, filterCtx } = contextFor(db);
|
|
7759
|
+
if (!tables[table]) {
|
|
7760
|
+
throw new Error(`Drizzle-GraphQL Error: '${table}' is not a table in the Drizzle schema.`);
|
|
7761
|
+
}
|
|
7762
|
+
if (!relationMap[table]) {
|
|
7763
|
+
return void 0;
|
|
7764
|
+
}
|
|
7765
|
+
const parsed = parseInfo(info);
|
|
7766
|
+
const params = extractRelationsParams(
|
|
7767
|
+
relationMap,
|
|
7768
|
+
tables,
|
|
7769
|
+
table,
|
|
7770
|
+
parsed,
|
|
7771
|
+
resolveTypeName(table, typeNameMapper),
|
|
7772
|
+
typeNameMapper,
|
|
7773
|
+
filterCtx
|
|
7774
|
+
);
|
|
7775
|
+
return params && Object.keys(params).length ? params : void 0;
|
|
7776
|
+
};
|
|
7777
|
+
var resolveSelection = async (info, options) => {
|
|
7778
|
+
const {
|
|
7779
|
+
db,
|
|
7780
|
+
table: tableName,
|
|
7781
|
+
typeNameMapper,
|
|
7782
|
+
executor,
|
|
7783
|
+
single = false,
|
|
7784
|
+
where,
|
|
7785
|
+
orderBy,
|
|
7786
|
+
limit,
|
|
7787
|
+
offset,
|
|
7788
|
+
after
|
|
7789
|
+
} = options;
|
|
7790
|
+
const { tables, relationMap, filterCtx, primaryKeyOf } = contextFor(db);
|
|
7791
|
+
const table = tables[tableName];
|
|
7792
|
+
if (!table) {
|
|
7793
|
+
throw new Error(`Drizzle-GraphQL Error: '${tableName}' is not a table in the Drizzle schema.`);
|
|
7794
|
+
}
|
|
7795
|
+
const parsedInfo = parseInfo(info);
|
|
7796
|
+
if (!parsedInfo) {
|
|
7797
|
+
throw new Error("Drizzle-GraphQL Error: resolveSelection could not read a selection set from the resolve info.");
|
|
7798
|
+
}
|
|
7799
|
+
const source = executor ?? db;
|
|
7800
|
+
const queryBase = source.query?.[tableName];
|
|
7801
|
+
if (!queryBase) {
|
|
7802
|
+
throw new Error(
|
|
7803
|
+
`Drizzle-GraphQL Error: the executor passed to resolveSelection has no relational query builder for '${tableName}'.`
|
|
7804
|
+
);
|
|
7805
|
+
}
|
|
7806
|
+
return runRelationalSelect({
|
|
7807
|
+
queryBase,
|
|
7808
|
+
tables,
|
|
7809
|
+
tableName,
|
|
7810
|
+
table,
|
|
7811
|
+
relationMap,
|
|
7812
|
+
typeName: resolveTypeName(tableName, typeNameMapper),
|
|
7813
|
+
typeNameMapper,
|
|
7814
|
+
parsedInfo,
|
|
7815
|
+
single,
|
|
7816
|
+
where,
|
|
7817
|
+
orderBy,
|
|
7818
|
+
limit,
|
|
7819
|
+
offset,
|
|
7820
|
+
after,
|
|
7821
|
+
filterCtx,
|
|
7822
|
+
pkNames: primaryKeyOf(tableName),
|
|
7823
|
+
db: source
|
|
7824
|
+
});
|
|
7825
|
+
};
|
|
7826
|
+
|
|
7124
7827
|
// src/index.ts
|
|
7125
7828
|
var buildSchema = (db, config) => {
|
|
7126
7829
|
const relations = db._.relations;
|
|
@@ -7143,7 +7846,7 @@ var buildSchema = (db, config) => {
|
|
|
7143
7846
|
single: config?.suffixes?.single ?? "Single"
|
|
7144
7847
|
};
|
|
7145
7848
|
const typeNameMapper = config?.typeNameMapper === "singularize" ? singularizeMapper : config?.typeNameMapper;
|
|
7146
|
-
const tableKeys = Object.entries(schema).filter(([, value]) =>
|
|
7849
|
+
const tableKeys = Object.entries(schema).filter(([, value]) => is9(value, Table2)).map(([key]) => key);
|
|
7147
7850
|
const excludedTableNames = new Set(config?.exclude?.tables ?? []);
|
|
7148
7851
|
const featureTables = tableKeys.filter((key) => !excludedTableNames.has(key));
|
|
7149
7852
|
const forTable = resolveTableFeatures(config?.features);
|
|
@@ -7181,6 +7884,43 @@ var buildSchema = (db, config) => {
|
|
|
7181
7884
|
limitPolicyCache.set(tableName, resolved);
|
|
7182
7885
|
return resolved;
|
|
7183
7886
|
} : void 0;
|
|
7887
|
+
const scopeConfig = config?.scope;
|
|
7888
|
+
const contextValuesConfig = config?.contextValues;
|
|
7889
|
+
if (scopeConfig || contextValuesConfig) {
|
|
7890
|
+
const tableNames = new Set(tableKeys);
|
|
7891
|
+
for (const [tableName, hook] of Object.entries(scopeConfig ?? {})) {
|
|
7892
|
+
if (!tableNames.has(tableName)) {
|
|
7893
|
+
throw new Error(
|
|
7894
|
+
`Drizzle-GraphQL Error: config.scope names '${tableName}', which is not a table in the Drizzle schema.`
|
|
7895
|
+
);
|
|
7896
|
+
}
|
|
7897
|
+
if (typeof hook !== "function") {
|
|
7898
|
+
throw new Error(`Drizzle-GraphQL Error: config.scope.${tableName} must be a function.`);
|
|
7899
|
+
}
|
|
7900
|
+
}
|
|
7901
|
+
for (const [tableName, columnHooks] of Object.entries(contextValuesConfig ?? {})) {
|
|
7902
|
+
if (!tableNames.has(tableName)) {
|
|
7903
|
+
throw new Error(
|
|
7904
|
+
`Drizzle-GraphQL Error: config.contextValues names '${tableName}', which is not a table in the Drizzle schema.`
|
|
7905
|
+
);
|
|
7906
|
+
}
|
|
7907
|
+
const columns = getColumns6(schema[tableName]);
|
|
7908
|
+
for (const [columnName, hook] of Object.entries(columnHooks)) {
|
|
7909
|
+
if (!columns[columnName]) {
|
|
7910
|
+
throw new Error(
|
|
7911
|
+
`Drizzle-GraphQL Error: config.contextValues names '${tableName}.${columnName}', which is not a column of that table.`
|
|
7912
|
+
);
|
|
7913
|
+
}
|
|
7914
|
+
if (typeof hook !== "function") {
|
|
7915
|
+
throw new Error(`Drizzle-GraphQL Error: config.contextValues.${tableName}.${columnName} must be a function.`);
|
|
7916
|
+
}
|
|
7917
|
+
}
|
|
7918
|
+
}
|
|
7919
|
+
}
|
|
7920
|
+
const policies = scopeConfig || contextValuesConfig ? {
|
|
7921
|
+
scope: scopeConfig ? (tableName) => scopeConfig[tableName] : void 0,
|
|
7922
|
+
contextValues: contextValuesConfig ? (tableName) => contextValuesConfig[tableName] : void 0
|
|
7923
|
+
} : void 0;
|
|
7184
7924
|
const exclude = config?.exclude;
|
|
7185
7925
|
if (exclude) {
|
|
7186
7926
|
const tableNames = new Set(tableKeys);
|
|
@@ -7298,6 +8038,7 @@ var buildSchema = (db, config) => {
|
|
|
7298
8038
|
enumNameMapper: config?.enumNameMapper,
|
|
7299
8039
|
transactions,
|
|
7300
8040
|
limits,
|
|
8041
|
+
policies,
|
|
7301
8042
|
exclude,
|
|
7302
8043
|
docs: {
|
|
7303
8044
|
describeColumn: config?.describeColumn,
|
|
@@ -7307,11 +8048,11 @@ var buildSchema = (db, config) => {
|
|
|
7307
8048
|
}
|
|
7308
8049
|
};
|
|
7309
8050
|
let generatorOutput;
|
|
7310
|
-
if (
|
|
8051
|
+
if (is9(db, MySqlDatabase2)) {
|
|
7311
8052
|
generatorOutput = generateSchemaData(db, schema, relations, generatorOptions);
|
|
7312
|
-
} else if (
|
|
8053
|
+
} else if (is9(db, PgAsyncDatabase2)) {
|
|
7313
8054
|
generatorOutput = generateSchemaData2(db, schema, relations, generatorOptions);
|
|
7314
|
-
} else if (
|
|
8055
|
+
} else if (is9(db, BaseSQLiteDatabase2)) {
|
|
7315
8056
|
generatorOutput = generateSchemaData3(db, schema, relations, generatorOptions);
|
|
7316
8057
|
} else {
|
|
7317
8058
|
throw new Error("Drizzle-GraphQL Error: Unknown database instance type");
|
|
@@ -7350,9 +8091,14 @@ export {
|
|
|
7350
8091
|
createRelationResolverFactory,
|
|
7351
8092
|
defaultErrorMapper,
|
|
7352
8093
|
drizzleExecutorKey,
|
|
8094
|
+
drizzleExtension,
|
|
7353
8095
|
extractFilters,
|
|
7354
8096
|
extractOrderBy,
|
|
7355
8097
|
extractRelationJoinColumns,
|
|
8098
|
+
identifyRows,
|
|
8099
|
+
isDrizzleFieldExtension,
|
|
8100
|
+
resolveSelection,
|
|
8101
|
+
selectionToWith,
|
|
7356
8102
|
singularizeMapper
|
|
7357
8103
|
};
|
|
7358
8104
|
//# sourceMappingURL=index.js.map
|