@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.cjs
CHANGED
|
@@ -40,16 +40,21 @@ __export(index_exports, {
|
|
|
40
40
|
createRelationResolverFactory: () => createRelationResolverFactory,
|
|
41
41
|
defaultErrorMapper: () => defaultErrorMapper,
|
|
42
42
|
drizzleExecutorKey: () => drizzleExecutorKey,
|
|
43
|
+
drizzleExtension: () => drizzleExtension,
|
|
43
44
|
extractFilters: () => extractFilters,
|
|
44
45
|
extractOrderBy: () => extractOrderBy,
|
|
45
46
|
extractRelationJoinColumns: () => extractRelationJoinColumns,
|
|
47
|
+
identifyRows: () => identifyRows,
|
|
48
|
+
isDrizzleFieldExtension: () => isDrizzleFieldExtension,
|
|
49
|
+
resolveSelection: () => resolveSelection,
|
|
50
|
+
selectionToWith: () => selectionToWith,
|
|
46
51
|
singularizeMapper: () => singularizeMapper
|
|
47
52
|
});
|
|
48
53
|
module.exports = __toCommonJS(index_exports);
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
54
|
+
var import_drizzle_orm11 = require("drizzle-orm");
|
|
55
|
+
var import_mysql_core4 = require("drizzle-orm/mysql-core");
|
|
56
|
+
var import_pg_core4 = require("drizzle-orm/pg-core");
|
|
57
|
+
var import_sqlite_core4 = require("drizzle-orm/sqlite-core");
|
|
53
58
|
var import_graphql11 = require("graphql");
|
|
54
59
|
|
|
55
60
|
// src/util/builders/common.ts
|
|
@@ -598,6 +603,123 @@ var remapFromGraphQLArrayInput = (queryInput, table) => {
|
|
|
598
603
|
return queryInput;
|
|
599
604
|
};
|
|
600
605
|
|
|
606
|
+
// src/util/extensions.ts
|
|
607
|
+
var drizzleExtension = (target) => {
|
|
608
|
+
const value = target?.extensions?.drizzle;
|
|
609
|
+
return value && typeof value === "object" ? value : void 0;
|
|
610
|
+
};
|
|
611
|
+
var isDrizzleFieldExtension = (value) => !!value && value.kind !== "type";
|
|
612
|
+
var tableFieldExtensions = (table, primaryKey) => (meta) => ({
|
|
613
|
+
table,
|
|
614
|
+
primaryKey,
|
|
615
|
+
...meta
|
|
616
|
+
});
|
|
617
|
+
var tableTypeExtension = (table, primaryKey) => ({
|
|
618
|
+
table,
|
|
619
|
+
kind: "type",
|
|
620
|
+
primaryKey
|
|
621
|
+
});
|
|
622
|
+
var relationFieldExtension = (params) => ({
|
|
623
|
+
table: params.targetTable,
|
|
624
|
+
kind: params.aggregate ? "aggregate" : "relation",
|
|
625
|
+
operation: params.aggregate ? "relationAggregate" : "relation",
|
|
626
|
+
// An aggregate over a to-many relation still resolves to a single aggregate object.
|
|
627
|
+
single: params.aggregate ? true : params.single,
|
|
628
|
+
targetArg: "where",
|
|
629
|
+
primaryKey: params.primaryKey,
|
|
630
|
+
relation: params.relation,
|
|
631
|
+
parentTable: params.parentTable
|
|
632
|
+
});
|
|
633
|
+
var keyFromValues = (entry, primaryKey) => {
|
|
634
|
+
if (!entry || typeof entry !== "object") {
|
|
635
|
+
return void 0;
|
|
636
|
+
}
|
|
637
|
+
const row = {};
|
|
638
|
+
for (const column of primaryKey) {
|
|
639
|
+
const value = entry[column];
|
|
640
|
+
if (value === void 0 || value === null) {
|
|
641
|
+
return void 0;
|
|
642
|
+
}
|
|
643
|
+
row[column] = value;
|
|
644
|
+
}
|
|
645
|
+
return row;
|
|
646
|
+
};
|
|
647
|
+
var keysFromWhere = (where, primaryKey) => {
|
|
648
|
+
const none = { rows: [], complete: false };
|
|
649
|
+
if (!where || typeof where !== "object" || Array.isArray(where)) {
|
|
650
|
+
return none;
|
|
651
|
+
}
|
|
652
|
+
const filters = where;
|
|
653
|
+
if (filters.OR || filters.AND || filters.NOT) {
|
|
654
|
+
return none;
|
|
655
|
+
}
|
|
656
|
+
if (primaryKey.length > 1) {
|
|
657
|
+
const row = {};
|
|
658
|
+
for (const column2 of primaryKey) {
|
|
659
|
+
const operators2 = filters[column2];
|
|
660
|
+
if (!operators2 || typeof operators2 !== "object" || operators2.eq === void 0) {
|
|
661
|
+
return none;
|
|
662
|
+
}
|
|
663
|
+
row[column2] = operators2.eq;
|
|
664
|
+
}
|
|
665
|
+
return { rows: [row], complete: Object.keys(filters).length === primaryKey.length };
|
|
666
|
+
}
|
|
667
|
+
const column = primaryKey[0];
|
|
668
|
+
if (!column) {
|
|
669
|
+
return none;
|
|
670
|
+
}
|
|
671
|
+
const operators = filters[column];
|
|
672
|
+
if (!operators || typeof operators !== "object") {
|
|
673
|
+
return none;
|
|
674
|
+
}
|
|
675
|
+
const exact = Object.keys(filters).length === 1 && Object.keys(operators).length === 1;
|
|
676
|
+
if (operators.eq !== void 0) {
|
|
677
|
+
return { rows: [{ [column]: operators.eq }], complete: exact };
|
|
678
|
+
}
|
|
679
|
+
if (Array.isArray(operators.inArray)) {
|
|
680
|
+
return { rows: operators.inArray.map((value) => ({ [column]: value })), complete: exact };
|
|
681
|
+
}
|
|
682
|
+
return none;
|
|
683
|
+
};
|
|
684
|
+
var identifyRows = (field, args) => {
|
|
685
|
+
const meta = drizzleExtension(field);
|
|
686
|
+
if (!isDrizzleFieldExtension(meta)) {
|
|
687
|
+
return void 0;
|
|
688
|
+
}
|
|
689
|
+
const { table, primaryKey, targetArg } = meta;
|
|
690
|
+
const empty = { table, primaryKey, rows: [], complete: false };
|
|
691
|
+
if (!primaryKey.length || !targetArg) {
|
|
692
|
+
return empty;
|
|
693
|
+
}
|
|
694
|
+
const target = args?.[targetArg];
|
|
695
|
+
if (targetArg === "values") {
|
|
696
|
+
const entries = Array.isArray(target) ? target : target === void 0 ? [] : [target];
|
|
697
|
+
const rows = entries.map((entry) => keyFromValues(entry, primaryKey));
|
|
698
|
+
return {
|
|
699
|
+
table,
|
|
700
|
+
primaryKey,
|
|
701
|
+
rows: rows.filter((row) => !!row),
|
|
702
|
+
// A row whose key the database generates is not identifiable before the write.
|
|
703
|
+
complete: entries.length > 0 && rows.every(Boolean)
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
if (targetArg === "updates") {
|
|
707
|
+
if (!Array.isArray(target)) {
|
|
708
|
+
return empty;
|
|
709
|
+
}
|
|
710
|
+
const perEntry = target.map(
|
|
711
|
+
(entry) => keysFromWhere(entry?.where, primaryKey)
|
|
712
|
+
);
|
|
713
|
+
return {
|
|
714
|
+
table,
|
|
715
|
+
primaryKey,
|
|
716
|
+
rows: perEntry.flatMap((entry) => entry.rows),
|
|
717
|
+
complete: target.length > 0 && perEntry.every((entry) => entry.complete)
|
|
718
|
+
};
|
|
719
|
+
}
|
|
720
|
+
return { table, primaryKey, ...keysFromWhere(target, primaryKey) };
|
|
721
|
+
};
|
|
722
|
+
|
|
601
723
|
// src/util/builders/field-updates.ts
|
|
602
724
|
var import_drizzle_orm3 = require("drizzle-orm");
|
|
603
725
|
var import_graphql4 = require("graphql");
|
|
@@ -1022,7 +1144,7 @@ var batchedPaginatedRelationQuery = async (db, targetTable, foreignCol, whereCon
|
|
|
1022
1144
|
}
|
|
1023
1145
|
return rows;
|
|
1024
1146
|
};
|
|
1025
|
-
var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits) => ({ tableName, relationName, relEntry, isOne }) => {
|
|
1147
|
+
var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits, scopes) => ({ tableName, relationName, relEntry, isOne }) => {
|
|
1026
1148
|
const parentTable = tables[tableName];
|
|
1027
1149
|
const targetTableName = relEntry.targetTableName;
|
|
1028
1150
|
const targetTable = tables[targetTableName];
|
|
@@ -1083,10 +1205,16 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1083
1205
|
const loader = getOrCreateLoader(context, loaderKey, async (parentIds) => {
|
|
1084
1206
|
const executor = resolveExecutor(db, context);
|
|
1085
1207
|
const uniqueIds = [...new Set(parentIds)];
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1208
|
+
const scope = resolveScope(scopes, context, filterCtx);
|
|
1209
|
+
let whereCondition = withScope(
|
|
1210
|
+
scope,
|
|
1211
|
+
targetTableName,
|
|
1212
|
+
targetTable,
|
|
1213
|
+
(0, import_drizzle_orm4.and)(
|
|
1214
|
+
(0, import_drizzle_orm4.inArray)(foreignCol, uniqueIds),
|
|
1215
|
+
whereArg ? extractFilters(targetTable, targetTableName, whereArg, relationFilterCtx(filterCtx, targetTableName)) : void 0,
|
|
1216
|
+
cursorValues ? buildCursorCondition(targetTable, cursorEntries, cursorValues, nullOrdering) : void 0
|
|
1217
|
+
)
|
|
1090
1218
|
);
|
|
1091
1219
|
if (distinct) {
|
|
1092
1220
|
const keys = await selectDistinctKeys({
|
|
@@ -1144,6 +1272,14 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1144
1272
|
return loader.load(localValue);
|
|
1145
1273
|
};
|
|
1146
1274
|
};
|
|
1275
|
+
var relationExtensionFor = (relEntry, parentTable, relationName, isOne, aggregate) => relationFieldExtension({
|
|
1276
|
+
targetTable: relEntry.targetTableName,
|
|
1277
|
+
parentTable,
|
|
1278
|
+
relation: relationName,
|
|
1279
|
+
single: isOne,
|
|
1280
|
+
primaryKey: relEntry.targetPkNames ?? [],
|
|
1281
|
+
aggregate
|
|
1282
|
+
});
|
|
1147
1283
|
var columnDocs = (docs, column, tableName, columnName) => {
|
|
1148
1284
|
const description = docs.describeColumn?.(column, { tableName, columnName });
|
|
1149
1285
|
const deprecationReason = docs.deprecateColumn?.(column, { tableName, columnName });
|
|
@@ -1823,7 +1959,8 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1823
1959
|
const shell = new import_graphql5.GraphQLObjectType({
|
|
1824
1960
|
name: typeName,
|
|
1825
1961
|
description: cacheCtx.docs.describeTable?.(tableName),
|
|
1826
|
-
fields: () => ({ ...tableFields, ...container.fields })
|
|
1962
|
+
fields: () => ({ ...tableFields, ...container.fields }),
|
|
1963
|
+
extensions: { drizzle: tableTypeExtension(tableName, cacheCtx.primaryKeyOf?.(tableName) ?? []) }
|
|
1827
1964
|
});
|
|
1828
1965
|
cacheCtx.objectTypeCache.set(tableName, shell);
|
|
1829
1966
|
}
|
|
@@ -1865,7 +2002,10 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1865
2002
|
relType = new import_graphql5.GraphQLObjectType({
|
|
1866
2003
|
name: resolveTypeName(targetTableName, typeNameMapper),
|
|
1867
2004
|
description: cacheCtx.docs.describeTable?.(targetTableName),
|
|
1868
|
-
fields: () => ({ ...targetTableFields, ...capturedTargetContainer.fields })
|
|
2005
|
+
fields: () => ({ ...targetTableFields, ...capturedTargetContainer.fields }),
|
|
2006
|
+
extensions: {
|
|
2007
|
+
drizzle: tableTypeExtension(targetTableName, cacheCtx.primaryKeyOf?.(targetTableName) ?? [])
|
|
2008
|
+
}
|
|
1869
2009
|
});
|
|
1870
2010
|
cacheCtx.objectTypeCache.set(targetTableName, relType);
|
|
1871
2011
|
}
|
|
@@ -1882,7 +2022,8 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1882
2022
|
where: { type: relSelectData.filters }
|
|
1883
2023
|
},
|
|
1884
2024
|
resolve,
|
|
1885
|
-
...relationDocs
|
|
2025
|
+
...relationDocs,
|
|
2026
|
+
extensions: { drizzle: relationExtensionFor(relEntry, tableName, relationName, true) }
|
|
1886
2027
|
}
|
|
1887
2028
|
]);
|
|
1888
2029
|
continue;
|
|
@@ -1905,11 +2046,10 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1905
2046
|
},
|
|
1906
2047
|
resolve,
|
|
1907
2048
|
...relationDocs,
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
} : {}
|
|
2049
|
+
extensions: {
|
|
2050
|
+
drizzle: relationExtensionFor(relEntry, tableName, relationName, false),
|
|
2051
|
+
...cacheCtx.complexity ? { complexity: listFieldComplexity(cacheCtx.complexity, cacheCtx.limits?.(targetTableName)) } : {}
|
|
2052
|
+
}
|
|
1913
2053
|
}
|
|
1914
2054
|
]);
|
|
1915
2055
|
const aggregateFieldName = `${relationName}Aggregate`;
|
|
@@ -1928,7 +2068,10 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
1928
2068
|
where: { type: relSelectData.filters }
|
|
1929
2069
|
},
|
|
1930
2070
|
resolve: relationAggregate.resolve,
|
|
1931
|
-
|
|
2071
|
+
extensions: {
|
|
2072
|
+
drizzle: relationExtensionFor(relEntry, tableName, relationName, isOne, true),
|
|
2073
|
+
...cacheCtx.complexity ? { complexity: aggregateFieldComplexity(cacheCtx.complexity) } : {}
|
|
2074
|
+
}
|
|
1932
2075
|
}
|
|
1933
2076
|
]);
|
|
1934
2077
|
}
|
|
@@ -1977,9 +2120,11 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
1977
2120
|
const table = tables[tableName];
|
|
1978
2121
|
const columns = visibleColumns(table);
|
|
1979
2122
|
const columnEntries = Object.entries(columns);
|
|
2123
|
+
const contextColumns = cacheCtx.contextValuesOf?.(tableName);
|
|
2124
|
+
const writableEntries = contextColumns ? columnEntries.filter(([columnName]) => !(columnName in contextColumns)) : columnEntries;
|
|
1980
2125
|
const relaxedColumns = nestedWrites?.relaxedColumns(tableName);
|
|
1981
2126
|
const insertFields = Object.fromEntries(
|
|
1982
|
-
|
|
2127
|
+
writableEntries.map(([columnName, column]) => {
|
|
1983
2128
|
const converted = drizzleColumnToGraphQLType(
|
|
1984
2129
|
column,
|
|
1985
2130
|
columnName,
|
|
@@ -1995,7 +2140,7 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
1995
2140
|
})
|
|
1996
2141
|
);
|
|
1997
2142
|
const updateFields = Object.fromEntries(
|
|
1998
|
-
|
|
2143
|
+
writableEntries.map(([columnName, column]) => {
|
|
1999
2144
|
const converted = drizzleColumnToGraphQLType(column, columnName, tableName, true, false, true);
|
|
2000
2145
|
const operations = cacheCtx.featureOf(tableName).fieldUpdateOperations ? fieldUpdateInputType(column, columnName, tableName) : void 0;
|
|
2001
2146
|
const field = operations ? { ...converted, type: operations } : converted;
|
|
@@ -2014,7 +2159,8 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
2014
2159
|
const selectSingleOutput = cacheCtx.objectTypeCache.get(tableName) ?? new import_graphql5.GraphQLObjectType({
|
|
2015
2160
|
name: resolveTypeName(tableName, typeNameMapper),
|
|
2016
2161
|
description: cacheCtx.docs.describeTable?.(tableName),
|
|
2017
|
-
fields: { ...tableFields, ...relationFields }
|
|
2162
|
+
fields: { ...tableFields, ...relationFields },
|
|
2163
|
+
extensions: { drizzle: tableTypeExtension(tableName, cacheCtx.primaryKeyOf?.(tableName) ?? []) }
|
|
2018
2164
|
});
|
|
2019
2165
|
const selectArrOutput = new import_graphql5.GraphQLNonNull(new import_graphql5.GraphQLList(new import_graphql5.GraphQLNonNull(selectSingleOutput)));
|
|
2020
2166
|
const arrTableItemOutput = withReturning ? (
|
|
@@ -2517,7 +2663,69 @@ var extractFilters = (table, tableName, filters, relationCtx) => {
|
|
|
2517
2663
|
}
|
|
2518
2664
|
return variants.length ? variants.length > 1 ? (0, import_drizzle_orm4.and)(...variants) : variants[0] : void 0;
|
|
2519
2665
|
};
|
|
2520
|
-
var
|
|
2666
|
+
var resolveScope = (scopes, context, filterCtx) => {
|
|
2667
|
+
if (!scopes) {
|
|
2668
|
+
return void 0;
|
|
2669
|
+
}
|
|
2670
|
+
return {
|
|
2671
|
+
has: (tableName) => !!scopes(tableName),
|
|
2672
|
+
on: (tableName, table) => {
|
|
2673
|
+
const hook = scopes(tableName);
|
|
2674
|
+
if (!hook) {
|
|
2675
|
+
return void 0;
|
|
2676
|
+
}
|
|
2677
|
+
const predicate = hook(context, table);
|
|
2678
|
+
if (predicate === void 0 || predicate === null) {
|
|
2679
|
+
return void 0;
|
|
2680
|
+
}
|
|
2681
|
+
if ((0, import_drizzle_orm4.is)(predicate, import_drizzle_orm4.SQL)) {
|
|
2682
|
+
return predicate;
|
|
2683
|
+
}
|
|
2684
|
+
if (typeof predicate !== "object") {
|
|
2685
|
+
throw new import_graphql5.GraphQLError(
|
|
2686
|
+
`Drizzle-GraphQL Error: the scope for '${tableName}' returned a ${typeof predicate}. A scope returns a filter object, a Drizzle SQL expression, or undefined.`
|
|
2687
|
+
);
|
|
2688
|
+
}
|
|
2689
|
+
return extractFilters(table, tableName, predicate, relationFilterCtx(filterCtx, tableName));
|
|
2690
|
+
}
|
|
2691
|
+
};
|
|
2692
|
+
};
|
|
2693
|
+
var withScope = (scope, tableName, table, condition) => {
|
|
2694
|
+
const predicate = scope?.on(tableName, table);
|
|
2695
|
+
return predicate ? (0, import_drizzle_orm4.and)(condition, predicate) : condition;
|
|
2696
|
+
};
|
|
2697
|
+
var bindPolicies = (policies, filterCtx) => policies?.scope || policies?.contextValues ? {
|
|
2698
|
+
scope: policies.scope ? (context) => resolveScope(policies.scope, context, filterCtx) : void 0,
|
|
2699
|
+
contextValues: policies.contextValues
|
|
2700
|
+
} : void 0;
|
|
2701
|
+
var applyContextValues = (values, hooks, context) => {
|
|
2702
|
+
if (!hooks) {
|
|
2703
|
+
return values;
|
|
2704
|
+
}
|
|
2705
|
+
for (const [columnName, hook] of Object.entries(hooks)) {
|
|
2706
|
+
values[columnName] = hook(context);
|
|
2707
|
+
}
|
|
2708
|
+
return values;
|
|
2709
|
+
};
|
|
2710
|
+
var applyContextValuesAll = (rows, hooks, context) => {
|
|
2711
|
+
if (!hooks) {
|
|
2712
|
+
return rows;
|
|
2713
|
+
}
|
|
2714
|
+
for (const row of rows) {
|
|
2715
|
+
applyContextValues(row, hooks, context);
|
|
2716
|
+
}
|
|
2717
|
+
return rows;
|
|
2718
|
+
};
|
|
2719
|
+
var stripContextValues = (values, hooks) => {
|
|
2720
|
+
if (!hooks) {
|
|
2721
|
+
return values;
|
|
2722
|
+
}
|
|
2723
|
+
for (const columnName of Object.keys(hooks)) {
|
|
2724
|
+
delete values[columnName];
|
|
2725
|
+
}
|
|
2726
|
+
return values;
|
|
2727
|
+
};
|
|
2728
|
+
var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, originField, typeNameMapper, _isInitial = false, filterCtx, limits, scope) => {
|
|
2521
2729
|
const relationsForTable = relationMap[tableName];
|
|
2522
2730
|
if (!relationsForTable) {
|
|
2523
2731
|
return void 0;
|
|
@@ -2563,8 +2771,13 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
|
|
|
2563
2771
|
const offset = relationArgs?.offset ?? void 0;
|
|
2564
2772
|
const limit = (0, import_drizzle_orm4.is)(relEntry.relation, import_drizzle_orm4.One) ? relationArgs?.limit ?? void 0 : applyLimitPolicy(relationArgs?.limit, limits?.(targetTableName), `${tableName}.${relName}`);
|
|
2565
2773
|
const relWhere = relationArgs?.where;
|
|
2566
|
-
thisRecord.where = relWhere ? {
|
|
2567
|
-
RAW: (aliasedTable2) =>
|
|
2774
|
+
thisRecord.where = relWhere || scope?.has(targetTableName) ? {
|
|
2775
|
+
RAW: (aliasedTable2) => withScope(
|
|
2776
|
+
scope,
|
|
2777
|
+
targetTableName,
|
|
2778
|
+
aliasedTable2,
|
|
2779
|
+
relWhere ? extractFilters(aliasedTable2, relName, relWhere, relationFilterCtx(filterCtx, targetTableName)) : void 0
|
|
2780
|
+
)
|
|
2568
2781
|
} : void 0;
|
|
2569
2782
|
const hasPagination = offset != null || limit != null;
|
|
2570
2783
|
const pkNames = targetPkNames ?? [];
|
|
@@ -2580,14 +2793,15 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
|
|
|
2580
2793
|
typeNameMapper,
|
|
2581
2794
|
false,
|
|
2582
2795
|
filterCtx,
|
|
2583
|
-
limits
|
|
2796
|
+
limits,
|
|
2797
|
+
scope
|
|
2584
2798
|
) : void 0;
|
|
2585
2799
|
thisRecord.with = relWith;
|
|
2586
2800
|
args[relName] = thisRecord;
|
|
2587
2801
|
}
|
|
2588
2802
|
return args;
|
|
2589
2803
|
};
|
|
2590
|
-
var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits) => {
|
|
2804
|
+
var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits, scope) => {
|
|
2591
2805
|
if (!info) {
|
|
2592
2806
|
return void 0;
|
|
2593
2807
|
}
|
|
@@ -2600,7 +2814,8 @@ var extractRelationsParams = (relationMap, tables, tableName, info, typeName, ty
|
|
|
2600
2814
|
typeNameMapper,
|
|
2601
2815
|
true,
|
|
2602
2816
|
filterCtx,
|
|
2603
|
-
limits
|
|
2817
|
+
limits,
|
|
2818
|
+
scope
|
|
2604
2819
|
);
|
|
2605
2820
|
};
|
|
2606
2821
|
var pruneNonEagerRelations = (relationMap, shouldEagerLoad) => {
|
|
@@ -3010,7 +3225,8 @@ var prepareMutationRelationColumns = (params) => {
|
|
|
3010
3225
|
typeName,
|
|
3011
3226
|
typeNameMapper,
|
|
3012
3227
|
void 0,
|
|
3013
|
-
params.limits
|
|
3228
|
+
params.limits,
|
|
3229
|
+
params.scope
|
|
3014
3230
|
) : void 0;
|
|
3015
3231
|
const hasRelations = !!(withParams && Object.keys(withParams).length);
|
|
3016
3232
|
const baseColumns = extractSelectedColumnsFromTreeSQLFormat(parsedInfo.fieldsByTypeName[typeName], table, {
|
|
@@ -3244,7 +3460,8 @@ var runRelationalSelect = async (opts) => {
|
|
|
3244
3460
|
single,
|
|
3245
3461
|
filterCtx,
|
|
3246
3462
|
pkNames,
|
|
3247
|
-
after
|
|
3463
|
+
after,
|
|
3464
|
+
scope
|
|
3248
3465
|
} = opts;
|
|
3249
3466
|
const distinct = opts.distinct?.length ? opts.distinct : void 0;
|
|
3250
3467
|
const cursorSelected = !single && isCursorFieldSelected(parsedInfo.fieldsByTypeName[typeName], table);
|
|
@@ -3276,7 +3493,12 @@ var runRelationalSelect = async (opts) => {
|
|
|
3276
3493
|
tableName,
|
|
3277
3494
|
distinct,
|
|
3278
3495
|
pkNames: pkNames ?? [],
|
|
3279
|
-
where:
|
|
3496
|
+
where: withScope(
|
|
3497
|
+
scope,
|
|
3498
|
+
tableName,
|
|
3499
|
+
table,
|
|
3500
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
3501
|
+
),
|
|
3280
3502
|
orderBy,
|
|
3281
3503
|
limit: single ? 1 : opts.limit,
|
|
3282
3504
|
offset
|
|
@@ -3303,15 +3525,23 @@ var runRelationalSelect = async (opts) => {
|
|
|
3303
3525
|
// exactly the ordering the cursor encodes and the keyset predicate compares against.
|
|
3304
3526
|
(aliasedTable2) => cursorOrderExprs(aliasedTable2, cursorEntries)
|
|
3305
3527
|
) : orderBy ? (aliasedTable2) => extractOrderBy(aliasedTable2, orderBy, relationFilterCtx(filterCtx, tableName), where) : needsDefaultOrder && pkNames?.length ? (aliasedTable2) => primaryKeyOrderExprs(aliasedTable2, pkNames) : void 0,
|
|
3306
|
-
where: distinctKeys ?
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
)
|
|
3528
|
+
where: distinctKeys ? (
|
|
3529
|
+
// The distinct pass already ran inside the scope, so the keys it picked are in it.
|
|
3530
|
+
{ RAW: (aliasedTable2) => primaryKeyRestriction(aliasedTable2, pkNames, distinctKeys) }
|
|
3531
|
+
) : where || cursorValues || scope?.has(tableName) ? {
|
|
3532
|
+
RAW: (aliasedTable2) => withScope(
|
|
3533
|
+
scope,
|
|
3534
|
+
tableName,
|
|
3535
|
+
aliasedTable2,
|
|
3536
|
+
(0, import_drizzle_orm4.and)(
|
|
3537
|
+
where ? extractFilters(aliasedTable2, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
3538
|
+
cursorValues ? buildCursorCondition(
|
|
3539
|
+
aliasedTable2,
|
|
3540
|
+
cursorEntries,
|
|
3541
|
+
cursorValues,
|
|
3542
|
+
opts.nullOrdering ?? "nulls-smallest"
|
|
3543
|
+
) : void 0
|
|
3544
|
+
)
|
|
3315
3545
|
)
|
|
3316
3546
|
} : void 0,
|
|
3317
3547
|
with: relationMap[tableName] ? extractRelationsParams(
|
|
@@ -3322,7 +3552,8 @@ var runRelationalSelect = async (opts) => {
|
|
|
3322
3552
|
typeName,
|
|
3323
3553
|
typeNameMapper,
|
|
3324
3554
|
filterCtx,
|
|
3325
|
-
opts.limits
|
|
3555
|
+
opts.limits,
|
|
3556
|
+
scope
|
|
3326
3557
|
) : void 0
|
|
3327
3558
|
};
|
|
3328
3559
|
if (single) {
|
|
@@ -3627,7 +3858,7 @@ var assembleAggregateRow = (row, request, target) => {
|
|
|
3627
3858
|
}
|
|
3628
3859
|
return result;
|
|
3629
3860
|
};
|
|
3630
|
-
var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs, filterCtx) => {
|
|
3861
|
+
var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs, filterCtx, scopes) => {
|
|
3631
3862
|
const target = aggregateTarget(table, tableName, typeName);
|
|
3632
3863
|
const queryArgs = {
|
|
3633
3864
|
where: { type: filterArgs }
|
|
@@ -3641,8 +3872,14 @@ var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs,
|
|
|
3641
3872
|
return {};
|
|
3642
3873
|
}
|
|
3643
3874
|
let query = resolveExecutor(db, context).select(request.selection).from(table);
|
|
3644
|
-
|
|
3645
|
-
|
|
3875
|
+
const where = withScope(
|
|
3876
|
+
resolveScope(scopes, context, filterCtx),
|
|
3877
|
+
tableName,
|
|
3878
|
+
table,
|
|
3879
|
+
args.where ? extractFilters(table, tableName, args.where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
3880
|
+
);
|
|
3881
|
+
if (where) {
|
|
3882
|
+
query = query.where(where);
|
|
3646
3883
|
}
|
|
3647
3884
|
const rows = await query;
|
|
3648
3885
|
return assembleAggregateRow(rows[0] ?? {}, request, target);
|
|
@@ -3654,7 +3891,7 @@ var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs,
|
|
|
3654
3891
|
};
|
|
3655
3892
|
};
|
|
3656
3893
|
var GROUP_KEY = "__dgql_group_key";
|
|
3657
|
-
var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filterCtx) => {
|
|
3894
|
+
var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) => {
|
|
3658
3895
|
return ({ tableName, relationName, relEntry }) => {
|
|
3659
3896
|
const parentTable = tables[tableName];
|
|
3660
3897
|
const targetTableName = relEntry.targetTableName;
|
|
@@ -3689,9 +3926,14 @@ var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filt
|
|
|
3689
3926
|
const loader = getOrCreateLoader(context, loaderKey, async (parentIds) => {
|
|
3690
3927
|
const executor = resolveExecutor(db, context);
|
|
3691
3928
|
const uniqueIds = [...new Set(parentIds)];
|
|
3692
|
-
const whereCondition = (
|
|
3693
|
-
(
|
|
3694
|
-
|
|
3929
|
+
const whereCondition = withScope(
|
|
3930
|
+
resolveScope(scopes, context, filterCtx),
|
|
3931
|
+
targetTableName,
|
|
3932
|
+
targetTable,
|
|
3933
|
+
(0, import_drizzle_orm5.and)(
|
|
3934
|
+
(0, import_drizzle_orm5.inArray)(foreignCol, uniqueIds),
|
|
3935
|
+
whereArg ? extractFilters(targetTable, targetTableName, whereArg, relationFilterCtx(filterCtx, targetTableName)) : void 0
|
|
3936
|
+
)
|
|
3695
3937
|
);
|
|
3696
3938
|
const rows = await executor.select({ [GROUP_KEY]: foreignCol, ...request.selection }).from(targetTable).where(whereCondition).groupBy(foreignCol);
|
|
3697
3939
|
const byKey = new Map(rows.map((row) => [row[GROUP_KEY], row]));
|
|
@@ -3824,7 +4066,7 @@ var buildHavingCondition = (having, columns) => {
|
|
|
3824
4066
|
}
|
|
3825
4067
|
return conditions.length ? (0, import_drizzle_orm5.and)(...conditions) : void 0;
|
|
3826
4068
|
};
|
|
3827
|
-
var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, groupByEnum, havingInput, filterCtx) => {
|
|
4069
|
+
var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, groupByEnum, havingInput, filterCtx, scopes) => {
|
|
3828
4070
|
const target = aggregateTarget(table, tableName, typeName);
|
|
3829
4071
|
const groupable = groupableColumns(table, tableName);
|
|
3830
4072
|
const columns = (0, import_drizzle_orm5.getColumns)(table);
|
|
@@ -3858,8 +4100,14 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
3858
4100
|
...request.selection
|
|
3859
4101
|
};
|
|
3860
4102
|
let query = resolveExecutor(db, context).select(selection).from(table);
|
|
3861
|
-
|
|
3862
|
-
|
|
4103
|
+
const where = withScope(
|
|
4104
|
+
resolveScope(scopes, context, filterCtx),
|
|
4105
|
+
tableName,
|
|
4106
|
+
table,
|
|
4107
|
+
args.where ? extractFilters(table, tableName, args.where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
4108
|
+
);
|
|
4109
|
+
if (where) {
|
|
4110
|
+
query = query.where(where);
|
|
3863
4111
|
}
|
|
3864
4112
|
query = query.groupBy(...keyColumns.map(([, column]) => column));
|
|
3865
4113
|
const havingCondition = buildHavingCondition(args.having, columns);
|
|
@@ -3885,7 +4133,7 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
3885
4133
|
};
|
|
3886
4134
|
|
|
3887
4135
|
// src/util/builders/mysql.ts
|
|
3888
|
-
var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
4136
|
+
var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
3889
4137
|
const queryBase = db.query[tableName];
|
|
3890
4138
|
if (!queryBase) {
|
|
3891
4139
|
throw new Error(
|
|
@@ -3920,6 +4168,7 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
3920
4168
|
single: false,
|
|
3921
4169
|
filterCtx,
|
|
3922
4170
|
limits,
|
|
4171
|
+
scope: policies?.scope?.(context),
|
|
3923
4172
|
pkNames,
|
|
3924
4173
|
db: executor,
|
|
3925
4174
|
// MySQL sorts NULLs as the smallest values (first in ASC).
|
|
@@ -3932,7 +4181,7 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
3932
4181
|
args: queryArgs
|
|
3933
4182
|
};
|
|
3934
4183
|
};
|
|
3935
|
-
var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
4184
|
+
var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
3936
4185
|
const queryBase = db.query[tableName];
|
|
3937
4186
|
if (!queryBase) {
|
|
3938
4187
|
throw new Error(
|
|
@@ -3961,6 +4210,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
3961
4210
|
single: true,
|
|
3962
4211
|
filterCtx,
|
|
3963
4212
|
limits,
|
|
4213
|
+
scope: policies?.scope?.(context),
|
|
3964
4214
|
pkNames,
|
|
3965
4215
|
db: executor
|
|
3966
4216
|
});
|
|
@@ -3971,7 +4221,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
3971
4221
|
args: queryArgs
|
|
3972
4222
|
};
|
|
3973
4223
|
};
|
|
3974
|
-
var generateInsertArray = (db,
|
|
4224
|
+
var generateInsertArray = (db, tableName, table, baseType, fieldName, txCtx, policies) => {
|
|
3975
4225
|
const queryArgs = {
|
|
3976
4226
|
values: {
|
|
3977
4227
|
type: new import_graphql7.GraphQLNonNull(new import_graphql7.GraphQLList(new import_graphql7.GraphQLNonNull(baseType)))
|
|
@@ -3982,7 +4232,11 @@ var generateInsertArray = (db, _tableName, table, baseType, fieldName, txCtx) =>
|
|
|
3982
4232
|
resolver: async (_source, args, context, info) => {
|
|
3983
4233
|
try {
|
|
3984
4234
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
3985
|
-
const input =
|
|
4235
|
+
const input = applyContextValuesAll(
|
|
4236
|
+
remapFromGraphQLArrayInput(args.values, table),
|
|
4237
|
+
policies?.contextValues?.(tableName),
|
|
4238
|
+
context
|
|
4239
|
+
);
|
|
3986
4240
|
if (!input.length) {
|
|
3987
4241
|
throw new import_graphql7.GraphQLError("No values were provided!");
|
|
3988
4242
|
}
|
|
@@ -3996,7 +4250,7 @@ var generateInsertArray = (db, _tableName, table, baseType, fieldName, txCtx) =>
|
|
|
3996
4250
|
args: queryArgs
|
|
3997
4251
|
};
|
|
3998
4252
|
};
|
|
3999
|
-
var generateInsertSingle = (db,
|
|
4253
|
+
var generateInsertSingle = (db, tableName, table, baseType, fieldName, txCtx, policies) => {
|
|
4000
4254
|
const queryArgs = {
|
|
4001
4255
|
values: {
|
|
4002
4256
|
type: new import_graphql7.GraphQLNonNull(baseType)
|
|
@@ -4007,7 +4261,11 @@ var generateInsertSingle = (db, _tableName, table, baseType, fieldName, txCtx) =
|
|
|
4007
4261
|
resolver: async (_source, args, context, info) => {
|
|
4008
4262
|
try {
|
|
4009
4263
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4010
|
-
const input =
|
|
4264
|
+
const input = applyContextValues(
|
|
4265
|
+
remapFromGraphQLSingleInput(args.values, table),
|
|
4266
|
+
policies?.contextValues?.(tableName),
|
|
4267
|
+
context
|
|
4268
|
+
);
|
|
4011
4269
|
await executor.insert(table).values(input);
|
|
4012
4270
|
return { isSuccess: true };
|
|
4013
4271
|
});
|
|
@@ -4018,7 +4276,7 @@ var generateInsertSingle = (db, _tableName, table, baseType, fieldName, txCtx) =
|
|
|
4018
4276
|
args: queryArgs
|
|
4019
4277
|
};
|
|
4020
4278
|
};
|
|
4021
|
-
var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, txCtx) => {
|
|
4279
|
+
var generateUpsert = (db, tableName, table, baseType, onConflictType, fieldName, single, txCtx, policies) => {
|
|
4022
4280
|
const queryArgs = {
|
|
4023
4281
|
values: {
|
|
4024
4282
|
type: single ? new import_graphql7.GraphQLNonNull(baseType) : new import_graphql7.GraphQLNonNull(new import_graphql7.GraphQLList(new import_graphql7.GraphQLNonNull(baseType)))
|
|
@@ -4034,7 +4292,11 @@ var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, tx
|
|
|
4034
4292
|
resolver: async (_source, args, context, info) => {
|
|
4035
4293
|
try {
|
|
4036
4294
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4037
|
-
const input =
|
|
4295
|
+
const input = applyContextValuesAll(
|
|
4296
|
+
single ? [remapFromGraphQLSingleInput(args.values, table)] : remapFromGraphQLArrayInput(args.values, table),
|
|
4297
|
+
policies?.contextValues?.(tableName),
|
|
4298
|
+
context
|
|
4299
|
+
);
|
|
4038
4300
|
if (!input.length) {
|
|
4039
4301
|
throw new import_graphql7.GraphQLError("No values were provided!");
|
|
4040
4302
|
}
|
|
@@ -4061,7 +4323,7 @@ var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, tx
|
|
|
4061
4323
|
args: queryArgs
|
|
4062
4324
|
};
|
|
4063
4325
|
};
|
|
4064
|
-
var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx) => {
|
|
4326
|
+
var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx, policies) => {
|
|
4065
4327
|
const queryArgs = {
|
|
4066
4328
|
set: {
|
|
4067
4329
|
type: new import_graphql7.GraphQLNonNull(setArgs)
|
|
@@ -4076,12 +4338,21 @@ var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, sing
|
|
|
4076
4338
|
try {
|
|
4077
4339
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4078
4340
|
const { where, set } = args;
|
|
4079
|
-
const
|
|
4341
|
+
const scope = policies?.scope?.(context);
|
|
4342
|
+
const input = stripContextValues(
|
|
4343
|
+
remapUpdateInput(set, table, tableName),
|
|
4344
|
+
policies?.contextValues?.(tableName)
|
|
4345
|
+
);
|
|
4080
4346
|
if (!Object.keys(input).length) {
|
|
4081
4347
|
throw new import_graphql7.GraphQLError("Unable to update with no values specified!");
|
|
4082
4348
|
}
|
|
4083
4349
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
4084
|
-
const filters =
|
|
4350
|
+
const filters = withScope(
|
|
4351
|
+
scope,
|
|
4352
|
+
tableName,
|
|
4353
|
+
table,
|
|
4354
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
4355
|
+
);
|
|
4085
4356
|
if (single) {
|
|
4086
4357
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
4087
4358
|
}
|
|
@@ -4099,7 +4370,7 @@ var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, sing
|
|
|
4099
4370
|
args: queryArgs
|
|
4100
4371
|
};
|
|
4101
4372
|
};
|
|
4102
|
-
var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filterCtx, txCtx) => {
|
|
4373
|
+
var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filterCtx, txCtx, policies) => {
|
|
4103
4374
|
const queryArgs = {
|
|
4104
4375
|
updates: {
|
|
4105
4376
|
type: new import_graphql7.GraphQLNonNull(new import_graphql7.GraphQLList(new import_graphql7.GraphQLNonNull(updateManyInput)))
|
|
@@ -4114,14 +4385,21 @@ var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filt
|
|
|
4114
4385
|
if (!updates.length) {
|
|
4115
4386
|
throw new import_graphql7.GraphQLError("No updates were provided!");
|
|
4116
4387
|
}
|
|
4388
|
+
const scope = policies?.scope?.(context);
|
|
4389
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
4117
4390
|
const entries = updates.map(({ where, set }) => {
|
|
4118
|
-
const input = remapUpdateInput(set, table, tableName);
|
|
4391
|
+
const input = stripContextValues(remapUpdateInput(set, table, tableName), contextColumns);
|
|
4119
4392
|
if (!Object.keys(input).length) {
|
|
4120
4393
|
throw new import_graphql7.GraphQLError("Unable to update with no values specified!");
|
|
4121
4394
|
}
|
|
4122
4395
|
return {
|
|
4123
4396
|
set: input,
|
|
4124
|
-
filters:
|
|
4397
|
+
filters: withScope(
|
|
4398
|
+
scope,
|
|
4399
|
+
tableName,
|
|
4400
|
+
table,
|
|
4401
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
4402
|
+
)
|
|
4125
4403
|
};
|
|
4126
4404
|
});
|
|
4127
4405
|
await executor.transaction(async (tx) => {
|
|
@@ -4142,7 +4420,7 @@ var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filt
|
|
|
4142
4420
|
args: queryArgs
|
|
4143
4421
|
};
|
|
4144
4422
|
};
|
|
4145
|
-
var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx) => {
|
|
4423
|
+
var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx, policies) => {
|
|
4146
4424
|
const queryArgs = {
|
|
4147
4425
|
where: {
|
|
4148
4426
|
type: single || requireWhere ? new import_graphql7.GraphQLNonNull(filterArgs) : filterArgs
|
|
@@ -4154,8 +4432,14 @@ var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requi
|
|
|
4154
4432
|
try {
|
|
4155
4433
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4156
4434
|
const { where } = args;
|
|
4435
|
+
const scope = policies?.scope?.(context);
|
|
4157
4436
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
4158
|
-
const filters =
|
|
4437
|
+
const filters = withScope(
|
|
4438
|
+
scope,
|
|
4439
|
+
tableName,
|
|
4440
|
+
table,
|
|
4441
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
4442
|
+
);
|
|
4159
4443
|
if (single) {
|
|
4160
4444
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
4161
4445
|
}
|
|
@@ -4203,12 +4487,16 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4203
4487
|
attachTargetPrimaryKeys(namedRelations, tables, mysqlPrimaryKeyPropNames);
|
|
4204
4488
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
4205
4489
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
4490
|
+
const scopes = options.policies?.scope;
|
|
4491
|
+
const contextValuesOf = options.policies?.contextValues;
|
|
4492
|
+
const policies = bindPolicies(options.policies, filterCtx);
|
|
4206
4493
|
const resolverFactory = createRelationResolverFactory(
|
|
4207
4494
|
db,
|
|
4208
4495
|
tables,
|
|
4209
4496
|
"nulls-smallest",
|
|
4210
4497
|
filterCtx,
|
|
4211
|
-
limits
|
|
4498
|
+
limits,
|
|
4499
|
+
scopes
|
|
4212
4500
|
);
|
|
4213
4501
|
const cacheCtx = {
|
|
4214
4502
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -4225,9 +4513,11 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4225
4513
|
complexity,
|
|
4226
4514
|
limits,
|
|
4227
4515
|
docs: options.docs ?? {},
|
|
4516
|
+
primaryKeyOf: (name) => tables[name] ? mysqlPrimaryKeyPropNames(tables[name]) : [],
|
|
4517
|
+
contextValuesOf,
|
|
4228
4518
|
featureOf
|
|
4229
4519
|
};
|
|
4230
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
4520
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) : void 0;
|
|
4231
4521
|
const queries = {};
|
|
4232
4522
|
const mutations = {};
|
|
4233
4523
|
const mutationTxCtx = createMutationTxCtx(options.transactions);
|
|
@@ -4264,6 +4554,7 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4264
4554
|
}
|
|
4265
4555
|
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
4266
4556
|
const tableFeatures = featureOf(tableName);
|
|
4557
|
+
const drizzleMeta = tableFieldExtensions(tableName, mysqlPrimaryKeyPropNames(schema[tableName]));
|
|
4267
4558
|
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
4268
4559
|
const { selectSingleOutput, selectArrOutput } = tableTypes.outputs;
|
|
4269
4560
|
const {
|
|
@@ -4296,7 +4587,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4296
4587
|
typeNameMapper,
|
|
4297
4588
|
filterCtx,
|
|
4298
4589
|
tableFeatures.distinct,
|
|
4299
|
-
limits
|
|
4590
|
+
limits,
|
|
4591
|
+
policies
|
|
4300
4592
|
);
|
|
4301
4593
|
const selectSingleGenerated = generateSelectSingle(
|
|
4302
4594
|
db,
|
|
@@ -4309,7 +4601,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4309
4601
|
typeName,
|
|
4310
4602
|
typeNameMapper,
|
|
4311
4603
|
filterCtx,
|
|
4312
|
-
limits
|
|
4604
|
+
limits,
|
|
4605
|
+
policies
|
|
4313
4606
|
);
|
|
4314
4607
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray(
|
|
4315
4608
|
db,
|
|
@@ -4317,7 +4610,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4317
4610
|
schema[tableName],
|
|
4318
4611
|
insertInput,
|
|
4319
4612
|
createArrayFieldName,
|
|
4320
|
-
mutationTxCtx
|
|
4613
|
+
mutationTxCtx,
|
|
4614
|
+
policies
|
|
4321
4615
|
) : void 0;
|
|
4322
4616
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle(
|
|
4323
4617
|
db,
|
|
@@ -4325,7 +4619,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4325
4619
|
schema[tableName],
|
|
4326
4620
|
insertInput,
|
|
4327
4621
|
createSingleFieldName,
|
|
4328
|
-
mutationTxCtx
|
|
4622
|
+
mutationTxCtx,
|
|
4623
|
+
policies
|
|
4329
4624
|
) : void 0;
|
|
4330
4625
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
4331
4626
|
table: schema[tableName],
|
|
@@ -4336,21 +4631,25 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4336
4631
|
}) : void 0;
|
|
4337
4632
|
const upsertArrGenerated = onConflictInput ? generateUpsert(
|
|
4338
4633
|
db,
|
|
4634
|
+
tableName,
|
|
4339
4635
|
schema[tableName],
|
|
4340
4636
|
insertInput,
|
|
4341
4637
|
onConflictInput,
|
|
4342
4638
|
upsertArrayFieldName,
|
|
4343
4639
|
false,
|
|
4344
|
-
mutationTxCtx
|
|
4640
|
+
mutationTxCtx,
|
|
4641
|
+
policies
|
|
4345
4642
|
) : void 0;
|
|
4346
4643
|
const upsertSingleGenerated = onConflictInput ? generateUpsert(
|
|
4347
4644
|
db,
|
|
4645
|
+
tableName,
|
|
4348
4646
|
schema[tableName],
|
|
4349
4647
|
insertInput,
|
|
4350
4648
|
onConflictInput,
|
|
4351
4649
|
upsertSingleFieldName,
|
|
4352
4650
|
true,
|
|
4353
|
-
mutationTxCtx
|
|
4651
|
+
mutationTxCtx,
|
|
4652
|
+
policies
|
|
4354
4653
|
) : void 0;
|
|
4355
4654
|
const updateGenerated = tableFeatures.update ? generateUpdate(
|
|
4356
4655
|
db,
|
|
@@ -4362,7 +4661,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4362
4661
|
false,
|
|
4363
4662
|
tableFeatures.requireWhere,
|
|
4364
4663
|
filterCtx,
|
|
4365
|
-
mutationTxCtx
|
|
4664
|
+
mutationTxCtx,
|
|
4665
|
+
policies
|
|
4366
4666
|
) : void 0;
|
|
4367
4667
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate(
|
|
4368
4668
|
db,
|
|
@@ -4374,7 +4674,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4374
4674
|
true,
|
|
4375
4675
|
tableFeatures.requireWhere,
|
|
4376
4676
|
filterCtx,
|
|
4377
|
-
mutationTxCtx
|
|
4677
|
+
mutationTxCtx,
|
|
4678
|
+
policies
|
|
4378
4679
|
) : void 0;
|
|
4379
4680
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
4380
4681
|
const updateManyGenerated = updateManyInput ? generateUpdateMany(
|
|
@@ -4384,7 +4685,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4384
4685
|
updateManyInput,
|
|
4385
4686
|
updateManyFieldName,
|
|
4386
4687
|
filterCtx,
|
|
4387
|
-
mutationTxCtx
|
|
4688
|
+
mutationTxCtx,
|
|
4689
|
+
policies
|
|
4388
4690
|
) : void 0;
|
|
4389
4691
|
const deleteGenerated = tableFeatures.delete ? generateDelete(
|
|
4390
4692
|
db,
|
|
@@ -4395,7 +4697,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4395
4697
|
false,
|
|
4396
4698
|
tableFeatures.requireWhere,
|
|
4397
4699
|
filterCtx,
|
|
4398
|
-
mutationTxCtx
|
|
4700
|
+
mutationTxCtx,
|
|
4701
|
+
policies
|
|
4399
4702
|
) : void 0;
|
|
4400
4703
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete(
|
|
4401
4704
|
db,
|
|
@@ -4406,7 +4709,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4406
4709
|
true,
|
|
4407
4710
|
tableFeatures.requireWhere,
|
|
4408
4711
|
filterCtx,
|
|
4409
|
-
mutationTxCtx
|
|
4712
|
+
mutationTxCtx,
|
|
4713
|
+
policies
|
|
4410
4714
|
) : void 0;
|
|
4411
4715
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
4412
4716
|
db,
|
|
@@ -4439,7 +4743,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4439
4743
|
typeName,
|
|
4440
4744
|
aggregateFieldName,
|
|
4441
4745
|
tableFilters,
|
|
4442
|
-
filterCtx
|
|
4746
|
+
filterCtx,
|
|
4747
|
+
scopes
|
|
4443
4748
|
) : void 0;
|
|
4444
4749
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
4445
4750
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -4453,25 +4758,35 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4453
4758
|
tableFilters,
|
|
4454
4759
|
groupByEnum,
|
|
4455
4760
|
havingInput,
|
|
4456
|
-
filterCtx
|
|
4761
|
+
filterCtx,
|
|
4762
|
+
scopes
|
|
4457
4763
|
) : void 0;
|
|
4458
4764
|
queries[selectArrGenerated.name] = {
|
|
4459
4765
|
type: selectArrOutput,
|
|
4460
4766
|
args: selectArrGenerated.args,
|
|
4461
4767
|
resolve: selectArrGenerated.resolver,
|
|
4462
|
-
|
|
4768
|
+
extensions: {
|
|
4769
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: false, targetArg: "where" }),
|
|
4770
|
+
...complexity ? { complexity: listFieldComplexity(complexity, limits?.(tableName)) } : {}
|
|
4771
|
+
}
|
|
4463
4772
|
};
|
|
4464
4773
|
queries[selectSingleGenerated.name] = {
|
|
4465
4774
|
type: selectSingleOutput,
|
|
4466
4775
|
args: selectSingleGenerated.args,
|
|
4467
|
-
resolve: selectSingleGenerated.resolver
|
|
4776
|
+
resolve: selectSingleGenerated.resolver,
|
|
4777
|
+
extensions: {
|
|
4778
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: true, targetArg: "where" })
|
|
4779
|
+
}
|
|
4468
4780
|
};
|
|
4469
4781
|
if (aggregateGenerated && aggregateType) {
|
|
4470
4782
|
queries[aggregateGenerated.name] = {
|
|
4471
4783
|
type: new import_graphql7.GraphQLNonNull(aggregateType),
|
|
4472
4784
|
args: aggregateGenerated.args,
|
|
4473
4785
|
resolve: aggregateGenerated.resolver,
|
|
4474
|
-
|
|
4786
|
+
extensions: {
|
|
4787
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "aggregate", single: true, targetArg: "where" }),
|
|
4788
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
4789
|
+
}
|
|
4475
4790
|
};
|
|
4476
4791
|
}
|
|
4477
4792
|
if (groupByGenerated && groupByType) {
|
|
@@ -4479,25 +4794,30 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4479
4794
|
type: new import_graphql7.GraphQLNonNull(new import_graphql7.GraphQLList(new import_graphql7.GraphQLNonNull(groupByType))),
|
|
4480
4795
|
args: groupByGenerated.args,
|
|
4481
4796
|
resolve: groupByGenerated.resolver,
|
|
4482
|
-
|
|
4797
|
+
extensions: {
|
|
4798
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "groupBy", single: false, targetArg: "where" }),
|
|
4799
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
4800
|
+
}
|
|
4483
4801
|
};
|
|
4484
4802
|
}
|
|
4485
|
-
|
|
4486
|
-
insertArrGenerated,
|
|
4487
|
-
insertSingleGenerated,
|
|
4488
|
-
upsertArrGenerated,
|
|
4489
|
-
upsertSingleGenerated,
|
|
4490
|
-
updateGenerated,
|
|
4491
|
-
updateManyGenerated,
|
|
4492
|
-
updateSingleGenerated,
|
|
4493
|
-
deleteGenerated,
|
|
4494
|
-
deleteSingleGenerated
|
|
4495
|
-
]
|
|
4803
|
+
const generatedMutations = [
|
|
4804
|
+
[insertArrGenerated, { operation: "insert", single: false, targetArg: "values" }],
|
|
4805
|
+
[insertSingleGenerated, { operation: "insert", single: true, targetArg: "values" }],
|
|
4806
|
+
[upsertArrGenerated, { operation: "upsert", single: false, targetArg: "values" }],
|
|
4807
|
+
[upsertSingleGenerated, { operation: "upsert", single: true, targetArg: "values" }],
|
|
4808
|
+
[updateGenerated, { operation: "update", single: false, targetArg: "where" }],
|
|
4809
|
+
[updateManyGenerated, { operation: "updateMany", single: false, targetArg: "updates" }],
|
|
4810
|
+
[updateSingleGenerated, { operation: "update", single: true, targetArg: "where" }],
|
|
4811
|
+
[deleteGenerated, { operation: "delete", single: false, targetArg: "where" }],
|
|
4812
|
+
[deleteSingleGenerated, { operation: "delete", single: true, targetArg: "where" }]
|
|
4813
|
+
];
|
|
4814
|
+
for (const [generated, meta] of generatedMutations) {
|
|
4496
4815
|
if (generated) {
|
|
4497
4816
|
mutations[generated.name] = {
|
|
4498
4817
|
type: mutationReturnType,
|
|
4499
4818
|
args: generated.args,
|
|
4500
|
-
resolve: generated.resolver
|
|
4819
|
+
resolve: generated.resolver,
|
|
4820
|
+
extensions: { drizzle: drizzleMeta({ kind: "mutation", ...meta }) }
|
|
4501
4821
|
};
|
|
4502
4822
|
}
|
|
4503
4823
|
}
|
|
@@ -4667,8 +4987,9 @@ var createNestedWriteTypes = (params) => {
|
|
|
4667
4987
|
return cached;
|
|
4668
4988
|
}
|
|
4669
4989
|
const omitted = plan.fkSide === "child" ? plan.foreignColPropName : void 0;
|
|
4990
|
+
const contextColumns = cacheCtx.contextValuesOf?.(plan.targetTableName);
|
|
4670
4991
|
const fields = Object.fromEntries(
|
|
4671
|
-
Object.entries(visibleColumns(plan.targetTable)).filter(([columnName]) => columnName !== omitted).map(([columnName, column]) => [
|
|
4992
|
+
Object.entries(visibleColumns(plan.targetTable)).filter(([columnName]) => columnName !== omitted && !contextColumns?.[columnName]).map(([columnName, column]) => [
|
|
4672
4993
|
columnName,
|
|
4673
4994
|
drizzleColumnToGraphQLType(column, columnName, plan.targetTableName, false, true, true)
|
|
4674
4995
|
])
|
|
@@ -4767,8 +5088,8 @@ var createNestedWriteTypes = (params) => {
|
|
|
4767
5088
|
var mergedOps = (entries) => Object.assign({}, ...entries.map((entry) => entry.ops));
|
|
4768
5089
|
var asArray = (value) => Array.isArray(value) ? value : value === void 0 ? [] : [value];
|
|
4769
5090
|
var createNestedWriteRuntime = (params) => {
|
|
4770
|
-
const { plans, filterCtx } = params;
|
|
4771
|
-
const conditionOf = (plan, filter, operation) => {
|
|
5091
|
+
const { plans, filterCtx, scopes, contextValues } = params;
|
|
5092
|
+
const conditionOf = (plan, filter, operation, scope) => {
|
|
4772
5093
|
const condition = extractFilters(
|
|
4773
5094
|
plan.targetTable,
|
|
4774
5095
|
plan.targetTableName,
|
|
@@ -4780,7 +5101,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4780
5101
|
`Drizzle-GraphQL Error: '${operation}' on '${plan.relationName}' needs a filter that selects rows \u2014 it was given one that matches everything.`
|
|
4781
5102
|
);
|
|
4782
5103
|
}
|
|
4783
|
-
return condition;
|
|
5104
|
+
return withScope(scope, plan.targetTableName, plan.targetTable, condition);
|
|
4784
5105
|
};
|
|
4785
5106
|
const assertSingleOperation = (plan, op) => {
|
|
4786
5107
|
const supplied = ["create", "connect", "disconnect"].filter((key) => op[key] !== void 0 && op[key] !== null);
|
|
@@ -4790,7 +5111,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4790
5111
|
);
|
|
4791
5112
|
}
|
|
4792
5113
|
};
|
|
4793
|
-
const detachAll = async (executor, plan, key) => executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where((0, import_drizzle_orm7.eq)(plan.foreignCol, key));
|
|
5114
|
+
const detachAll = async (executor, plan, key, scope) => executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(withScope(scope, plan.targetTableName, plan.targetTable, (0, import_drizzle_orm7.eq)(plan.foreignCol, key)));
|
|
4794
5115
|
return {
|
|
4795
5116
|
enabled: (tableName) => !!plans[tableName],
|
|
4796
5117
|
split: (tableName, values) => {
|
|
@@ -4824,12 +5145,13 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4824
5145
|
}
|
|
4825
5146
|
return columns;
|
|
4826
5147
|
},
|
|
4827
|
-
applyParentSide: async (executor, tableName, ops) => {
|
|
5148
|
+
applyParentSide: async (executor, tableName, ops, context) => {
|
|
4828
5149
|
const tablePlans = plans[tableName];
|
|
4829
5150
|
const patch = {};
|
|
4830
5151
|
if (!tablePlans) {
|
|
4831
5152
|
return patch;
|
|
4832
5153
|
}
|
|
5154
|
+
const scope = resolveScope(scopes, context, filterCtx);
|
|
4833
5155
|
for (const [relationName, op] of Object.entries(ops)) {
|
|
4834
5156
|
const plan = tablePlans[relationName];
|
|
4835
5157
|
if (!plan || plan.fkSide !== "parent") {
|
|
@@ -4837,7 +5159,11 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4837
5159
|
}
|
|
4838
5160
|
assertSingleOperation(plan, op);
|
|
4839
5161
|
if (op["create"] !== void 0) {
|
|
4840
|
-
const values =
|
|
5162
|
+
const values = applyContextValues(
|
|
5163
|
+
remapFromGraphQLSingleInput({ ...op["create"] }, plan.targetTable),
|
|
5164
|
+
contextValues?.(plan.targetTableName),
|
|
5165
|
+
context
|
|
5166
|
+
);
|
|
4841
5167
|
const inserted = await executor.insert(plan.targetTable).values(values).returning();
|
|
4842
5168
|
const created = inserted[0];
|
|
4843
5169
|
if (!created) {
|
|
@@ -4847,7 +5173,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4847
5173
|
}
|
|
4848
5174
|
patch[plan.localColPropName] = created[plan.foreignColPropName];
|
|
4849
5175
|
} else if (op["connect"] !== void 0) {
|
|
4850
|
-
const rows = await executor.select().from(plan.targetTable).where(conditionOf(plan, op["connect"], "connect"));
|
|
5176
|
+
const rows = await executor.select().from(plan.targetTable).where(conditionOf(plan, op["connect"], "connect", scope));
|
|
4851
5177
|
if (rows.length !== 1) {
|
|
4852
5178
|
throw new import_graphql8.GraphQLError(
|
|
4853
5179
|
`Drizzle-GraphQL Error: 'connect' on '${relationName}' matched ${rows.length} rows \u2014 it attaches a single row, so its filter must match exactly one.`
|
|
@@ -4860,11 +5186,12 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4860
5186
|
}
|
|
4861
5187
|
return patch;
|
|
4862
5188
|
},
|
|
4863
|
-
applyChildSide: async (executor, tableName, ops, parentRows) => {
|
|
5189
|
+
applyChildSide: async (executor, tableName, ops, parentRows, context) => {
|
|
4864
5190
|
const tablePlans = plans[tableName];
|
|
4865
5191
|
if (!tablePlans) {
|
|
4866
5192
|
return;
|
|
4867
5193
|
}
|
|
5194
|
+
const scope = resolveScope(scopes, context, filterCtx);
|
|
4868
5195
|
for (const [relationName, op] of Object.entries(ops)) {
|
|
4869
5196
|
const plan = tablePlans[relationName];
|
|
4870
5197
|
if (!plan || plan.fkSide !== "child") {
|
|
@@ -4881,34 +5208,38 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4881
5208
|
);
|
|
4882
5209
|
}
|
|
4883
5210
|
if (op["set"] !== void 0) {
|
|
4884
|
-
await detachAll(executor, plan, key);
|
|
5211
|
+
await detachAll(executor, plan, key, scope);
|
|
4885
5212
|
for (const filter of asArray(op["set"])) {
|
|
4886
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "set"));
|
|
5213
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "set", scope));
|
|
4887
5214
|
}
|
|
4888
5215
|
}
|
|
4889
5216
|
if (op["disconnect"] !== void 0) {
|
|
4890
5217
|
if (plan.isOne) {
|
|
4891
5218
|
if (op["disconnect"] === true) {
|
|
4892
|
-
await detachAll(executor, plan, key);
|
|
5219
|
+
await detachAll(executor, plan, key, scope);
|
|
4893
5220
|
}
|
|
4894
5221
|
} else {
|
|
4895
5222
|
for (const filter of asArray(op["disconnect"])) {
|
|
4896
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where((0, import_drizzle_orm7.and)((0, import_drizzle_orm7.eq)(plan.foreignCol, key), conditionOf(plan, filter, "disconnect")));
|
|
5223
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where((0, import_drizzle_orm7.and)((0, import_drizzle_orm7.eq)(plan.foreignCol, key), conditionOf(plan, filter, "disconnect", scope)));
|
|
4897
5224
|
}
|
|
4898
5225
|
}
|
|
4899
5226
|
}
|
|
4900
5227
|
const attaches = op["connect"] !== void 0 || op["create"] !== void 0;
|
|
4901
5228
|
if (plan.isOne && attaches && plan.canDetach && op["set"] === void 0) {
|
|
4902
|
-
await detachAll(executor, plan, key);
|
|
5229
|
+
await detachAll(executor, plan, key, scope);
|
|
4903
5230
|
}
|
|
4904
5231
|
if (op["connect"] !== void 0) {
|
|
4905
5232
|
for (const filter of asArray(op["connect"])) {
|
|
4906
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "connect"));
|
|
5233
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "connect", scope));
|
|
4907
5234
|
}
|
|
4908
5235
|
}
|
|
4909
5236
|
if (op["create"] !== void 0) {
|
|
4910
5237
|
const rows = asArray(op["create"]).map((row) => ({
|
|
4911
|
-
...
|
|
5238
|
+
...applyContextValues(
|
|
5239
|
+
remapFromGraphQLSingleInput({ ...row }, plan.targetTable),
|
|
5240
|
+
contextValues?.(plan.targetTableName),
|
|
5241
|
+
context
|
|
5242
|
+
),
|
|
4912
5243
|
[plan.foreignColPropName]: key
|
|
4913
5244
|
}));
|
|
4914
5245
|
if (rows.length) {
|
|
@@ -4921,30 +5252,30 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4921
5252
|
};
|
|
4922
5253
|
};
|
|
4923
5254
|
var writeWithNestedOps = async (params) => {
|
|
4924
|
-
const { executor, runtime, tableName, entries, remapValues, write } = params;
|
|
5255
|
+
const { executor, runtime, tableName, entries, remapValues, write, context } = params;
|
|
4925
5256
|
return executor.transaction(async (tx) => {
|
|
4926
5257
|
const rows = [];
|
|
4927
5258
|
for (const entry of entries) {
|
|
4928
|
-
const patch = await runtime.applyParentSide(tx, tableName, entry.ops);
|
|
5259
|
+
const patch = await runtime.applyParentSide(tx, tableName, entry.ops, context);
|
|
4929
5260
|
const written = await write(tx, { ...remapValues(entry.columns), ...patch });
|
|
4930
|
-
await runtime.applyChildSide(tx, tableName, entry.ops, written);
|
|
5261
|
+
await runtime.applyChildSide(tx, tableName, entry.ops, written, context);
|
|
4931
5262
|
rows.push(...written);
|
|
4932
5263
|
}
|
|
4933
5264
|
return rows;
|
|
4934
5265
|
});
|
|
4935
5266
|
};
|
|
4936
5267
|
var updateWithNestedOps = async (params) => {
|
|
4937
|
-
const { executor, runtime, tableName, columns, ops, remapValues, write } = params;
|
|
5268
|
+
const { executor, runtime, tableName, columns, ops, remapValues, write, context } = params;
|
|
4938
5269
|
return executor.transaction(async (tx) => {
|
|
4939
|
-
const patch = await runtime.applyParentSide(tx, tableName, ops);
|
|
5270
|
+
const patch = await runtime.applyParentSide(tx, tableName, ops, context);
|
|
4940
5271
|
const rows = await write(tx, { ...remapValues(columns), ...patch });
|
|
4941
|
-
await runtime.applyChildSide(tx, tableName, ops, rows);
|
|
5272
|
+
await runtime.applyChildSide(tx, tableName, ops, rows, context);
|
|
4942
5273
|
return rows;
|
|
4943
5274
|
});
|
|
4944
5275
|
};
|
|
4945
5276
|
|
|
4946
5277
|
// src/util/builders/pg.ts
|
|
4947
|
-
var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
5278
|
+
var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
4948
5279
|
const queryBase = db.query[tableName];
|
|
4949
5280
|
const table = tables[tableName];
|
|
4950
5281
|
const limitPolicy = limits?.(tableName);
|
|
@@ -4960,6 +5291,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
4960
5291
|
try {
|
|
4961
5292
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, { deep: true });
|
|
4962
5293
|
const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
|
|
5294
|
+
const scope = policies?.scope?.(context);
|
|
4963
5295
|
const limit = applyLimitPolicy(args.limit, limitPolicy, fieldName);
|
|
4964
5296
|
if (requestQueryBase) {
|
|
4965
5297
|
return await runRelationalSelect({
|
|
@@ -4978,6 +5310,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
4978
5310
|
limits,
|
|
4979
5311
|
pkNames,
|
|
4980
5312
|
db: executor,
|
|
5313
|
+
scope,
|
|
4981
5314
|
// PostgreSQL sorts NULLs as the largest values (last in ASC).
|
|
4982
5315
|
nullOrdering: "nulls-largest"
|
|
4983
5316
|
});
|
|
@@ -5016,7 +5349,12 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5016
5349
|
}
|
|
5017
5350
|
}
|
|
5018
5351
|
const cursorCondition = after != null && cursorEntries ? buildCursorCondition(table, cursorEntries, decodeCursor(after, cursorEntries), "nulls-largest") : void 0;
|
|
5019
|
-
const baseWhereSql =
|
|
5352
|
+
const baseWhereSql = withScope(
|
|
5353
|
+
scope,
|
|
5354
|
+
tableName,
|
|
5355
|
+
table,
|
|
5356
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
5357
|
+
);
|
|
5020
5358
|
const whereSql = cursorCondition ? (0, import_drizzle_orm8.and)(baseWhereSql, cursorCondition) : baseWhereSql;
|
|
5021
5359
|
let distinctKeys;
|
|
5022
5360
|
if (distinct?.length) {
|
|
@@ -5071,7 +5409,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5071
5409
|
args: queryArgs
|
|
5072
5410
|
};
|
|
5073
5411
|
};
|
|
5074
|
-
var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
5412
|
+
var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
5075
5413
|
const queryBase = db.query[tableName];
|
|
5076
5414
|
const queryArgs = selectSingleArgs(orderArgs, filterArgs);
|
|
5077
5415
|
const table = tables[tableName];
|
|
@@ -5082,6 +5420,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5082
5420
|
try {
|
|
5083
5421
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, { deep: true });
|
|
5084
5422
|
const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
|
|
5423
|
+
const scope = policies?.scope?.(context);
|
|
5085
5424
|
if (requestQueryBase) {
|
|
5086
5425
|
return await runRelationalSelect({
|
|
5087
5426
|
queryBase: requestQueryBase,
|
|
@@ -5097,7 +5436,8 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5097
5436
|
filterCtx,
|
|
5098
5437
|
limits,
|
|
5099
5438
|
pkNames,
|
|
5100
|
-
db: executor
|
|
5439
|
+
db: executor,
|
|
5440
|
+
scope
|
|
5101
5441
|
});
|
|
5102
5442
|
}
|
|
5103
5443
|
const { offset, orderBy, where } = args;
|
|
@@ -5107,8 +5447,14 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5107
5447
|
{ tableName, relationMap, tables }
|
|
5108
5448
|
);
|
|
5109
5449
|
let q = executor.select(selectedColumnsSql).from(table);
|
|
5110
|
-
|
|
5111
|
-
|
|
5450
|
+
const whereSql = withScope(
|
|
5451
|
+
scope,
|
|
5452
|
+
tableName,
|
|
5453
|
+
table,
|
|
5454
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
5455
|
+
);
|
|
5456
|
+
if (whereSql) {
|
|
5457
|
+
q = q.where(whereSql);
|
|
5112
5458
|
}
|
|
5113
5459
|
if (orderBy) {
|
|
5114
5460
|
q = q.orderBy(...extractOrderBy(table, orderBy, relationFilterCtx(filterCtx, tableName), where));
|
|
@@ -5129,7 +5475,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5129
5475
|
};
|
|
5130
5476
|
};
|
|
5131
5477
|
var pgPrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, import_pg_core2.getTableConfig);
|
|
5132
|
-
var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
5478
|
+
var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
5133
5479
|
const queryArgs = {
|
|
5134
5480
|
values: {
|
|
5135
5481
|
type: new import_graphql9.GraphQLNonNull(new import_graphql9.GraphQLList(new import_graphql9.GraphQLNonNull(baseType)))
|
|
@@ -5146,7 +5492,13 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5146
5492
|
}
|
|
5147
5493
|
const entries = nested?.enabled(tableName) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
|
|
5148
5494
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
5149
|
-
const
|
|
5495
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5496
|
+
const scope = policies?.scope?.(context);
|
|
5497
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
5498
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : args.values, table),
|
|
5499
|
+
contextColumns,
|
|
5500
|
+
context
|
|
5501
|
+
);
|
|
5150
5502
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, {
|
|
5151
5503
|
deep: true
|
|
5152
5504
|
});
|
|
@@ -5159,7 +5511,8 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5159
5511
|
table,
|
|
5160
5512
|
pkNames,
|
|
5161
5513
|
parsedInfo,
|
|
5162
|
-
limits
|
|
5514
|
+
limits,
|
|
5515
|
+
scope
|
|
5163
5516
|
});
|
|
5164
5517
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
5165
5518
|
const runInsert = async (target, values) => {
|
|
@@ -5174,8 +5527,9 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5174
5527
|
runtime: nested,
|
|
5175
5528
|
tableName,
|
|
5176
5529
|
entries: nestedEntries,
|
|
5177
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5178
|
-
write: (tx, values) => runInsert(tx, [values])
|
|
5530
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5531
|
+
write: (tx, values) => runInsert(tx, [values]),
|
|
5532
|
+
context
|
|
5179
5533
|
}) : await runInsert(executor, input);
|
|
5180
5534
|
const enriched = hasRelations ? await eagerLoadMutationRelations(executor, tableName, result, pkNames, withParams) : result;
|
|
5181
5535
|
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
@@ -5187,7 +5541,7 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5187
5541
|
args: queryArgs
|
|
5188
5542
|
};
|
|
5189
5543
|
};
|
|
5190
|
-
var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
5544
|
+
var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
5191
5545
|
const queryArgs = {
|
|
5192
5546
|
values: {
|
|
5193
5547
|
type: new import_graphql9.GraphQLNonNull(baseType)
|
|
@@ -5201,7 +5555,13 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5201
5555
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5202
5556
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
5203
5557
|
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
5204
|
-
const
|
|
5558
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5559
|
+
const scope = policies?.scope?.(context);
|
|
5560
|
+
const input = nestedEntry ? {} : applyContextValues(
|
|
5561
|
+
remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table),
|
|
5562
|
+
contextColumns,
|
|
5563
|
+
context
|
|
5564
|
+
);
|
|
5205
5565
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, {
|
|
5206
5566
|
deep: true
|
|
5207
5567
|
});
|
|
@@ -5214,7 +5574,8 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5214
5574
|
table,
|
|
5215
5575
|
pkNames,
|
|
5216
5576
|
parsedInfo,
|
|
5217
|
-
limits
|
|
5577
|
+
limits,
|
|
5578
|
+
scope
|
|
5218
5579
|
});
|
|
5219
5580
|
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
5220
5581
|
const runInsert = async (target, values) => {
|
|
@@ -5229,8 +5590,9 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5229
5590
|
runtime: nested,
|
|
5230
5591
|
tableName,
|
|
5231
5592
|
entries: [nestedEntry],
|
|
5232
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5233
|
-
write: runInsert
|
|
5593
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5594
|
+
write: runInsert,
|
|
5595
|
+
context
|
|
5234
5596
|
}) : await runInsert(executor, input);
|
|
5235
5597
|
if (!result[0]) {
|
|
5236
5598
|
if (!conflictDoNothing) {
|
|
@@ -5248,7 +5610,7 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5248
5610
|
args: queryArgs
|
|
5249
5611
|
};
|
|
5250
5612
|
};
|
|
5251
|
-
var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5613
|
+
var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5252
5614
|
const queryArgs = {
|
|
5253
5615
|
values: {
|
|
5254
5616
|
type: single ? new import_graphql9.GraphQLNonNull(baseType) : new import_graphql9.GraphQLNonNull(new import_graphql9.GraphQLList(new import_graphql9.GraphQLNonNull(baseType)))
|
|
@@ -5270,7 +5632,13 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5270
5632
|
}
|
|
5271
5633
|
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
5272
5634
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
5273
|
-
const
|
|
5635
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5636
|
+
const scope = policies?.scope?.(context);
|
|
5637
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
5638
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table),
|
|
5639
|
+
contextColumns,
|
|
5640
|
+
context
|
|
5641
|
+
);
|
|
5274
5642
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, { deep: true });
|
|
5275
5643
|
const { columns, hasRelations, withParams } = prepareMutationRelationColumns({
|
|
5276
5644
|
relationMap,
|
|
@@ -5281,7 +5649,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5281
5649
|
table,
|
|
5282
5650
|
pkNames,
|
|
5283
5651
|
parsedInfo,
|
|
5284
|
-
limits
|
|
5652
|
+
limits,
|
|
5653
|
+
scope
|
|
5285
5654
|
});
|
|
5286
5655
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
5287
5656
|
const runUpsert = async (target, values) => {
|
|
@@ -5296,7 +5665,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5296
5665
|
buildWhere: (where) => extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName))
|
|
5297
5666
|
});
|
|
5298
5667
|
let query = target.insert(table).values(values).returning(returning);
|
|
5299
|
-
|
|
5668
|
+
const setWhere = withScope(scope, tableName, table, plan.setWhere);
|
|
5669
|
+
query = plan.action === "NOTHING" ? query.onConflictDoNothing(plan.target ? { target: plan.target } : void 0) : query.onConflictDoUpdate({ target: plan.target, set: plan.set, setWhere });
|
|
5300
5670
|
return await query;
|
|
5301
5671
|
};
|
|
5302
5672
|
const result = nestedEntries ? await writeWithNestedOps({
|
|
@@ -5304,8 +5674,9 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5304
5674
|
runtime: nested,
|
|
5305
5675
|
tableName,
|
|
5306
5676
|
entries: nestedEntries,
|
|
5307
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5308
|
-
write: (tx, values) => runUpsert(tx, [values])
|
|
5677
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5678
|
+
write: (tx, values) => runUpsert(tx, [values]),
|
|
5679
|
+
context
|
|
5309
5680
|
}) : await runUpsert(executor, input);
|
|
5310
5681
|
if (single && !result[0]) {
|
|
5311
5682
|
return void 0;
|
|
@@ -5320,7 +5691,7 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5320
5691
|
args: queryArgs
|
|
5321
5692
|
};
|
|
5322
5693
|
};
|
|
5323
|
-
var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5694
|
+
var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5324
5695
|
const queryArgs = {
|
|
5325
5696
|
set: {
|
|
5326
5697
|
type: new import_graphql9.GraphQLNonNull(setArgs)
|
|
@@ -5336,6 +5707,7 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5336
5707
|
try {
|
|
5337
5708
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5338
5709
|
const { where, set } = args;
|
|
5710
|
+
const scope = policies?.scope?.(context);
|
|
5339
5711
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, {
|
|
5340
5712
|
deep: true
|
|
5341
5713
|
});
|
|
@@ -5348,16 +5720,25 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5348
5720
|
table,
|
|
5349
5721
|
pkNames,
|
|
5350
5722
|
parsedInfo,
|
|
5351
|
-
limits
|
|
5723
|
+
limits,
|
|
5724
|
+
scope
|
|
5352
5725
|
});
|
|
5353
5726
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
5354
5727
|
const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
|
|
5355
|
-
const input =
|
|
5728
|
+
const input = stripContextValues(
|
|
5729
|
+
remapUpdateInput(entry ? entry.columns : set, table, tableName),
|
|
5730
|
+
policies?.contextValues?.(tableName)
|
|
5731
|
+
);
|
|
5356
5732
|
if (!Object.keys(input).length && !nestedOps) {
|
|
5357
5733
|
throw new import_graphql9.GraphQLError("Unable to update with no values specified!");
|
|
5358
5734
|
}
|
|
5359
5735
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
5360
|
-
const filters =
|
|
5736
|
+
const filters = withScope(
|
|
5737
|
+
scope,
|
|
5738
|
+
tableName,
|
|
5739
|
+
table,
|
|
5740
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
5741
|
+
);
|
|
5361
5742
|
if (single) {
|
|
5362
5743
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
5363
5744
|
}
|
|
@@ -5377,7 +5758,8 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5377
5758
|
columns: input,
|
|
5378
5759
|
ops: nestedOps,
|
|
5379
5760
|
remapValues: (values) => values,
|
|
5380
|
-
write: runUpdate
|
|
5761
|
+
write: runUpdate,
|
|
5762
|
+
context
|
|
5381
5763
|
}) : await runUpdate(executor, input);
|
|
5382
5764
|
if (single && result.length > 1) {
|
|
5383
5765
|
throw new import_graphql9.GraphQLError(`${fieldName}: 'where' matched more than one row!`);
|
|
@@ -5395,7 +5777,7 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5395
5777
|
args: queryArgs
|
|
5396
5778
|
};
|
|
5397
5779
|
};
|
|
5398
|
-
var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5780
|
+
var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5399
5781
|
const queryArgs = {
|
|
5400
5782
|
updates: {
|
|
5401
5783
|
type: new import_graphql9.GraphQLNonNull(new import_graphql9.GraphQLList(new import_graphql9.GraphQLNonNull(updateManyInput)))
|
|
@@ -5411,6 +5793,8 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5411
5793
|
if (!updates.length) {
|
|
5412
5794
|
throw new import_graphql9.GraphQLError("No updates were provided!");
|
|
5413
5795
|
}
|
|
5796
|
+
const scope = policies?.scope?.(context);
|
|
5797
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5414
5798
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, {
|
|
5415
5799
|
deep: true
|
|
5416
5800
|
});
|
|
@@ -5423,19 +5807,28 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5423
5807
|
table,
|
|
5424
5808
|
pkNames,
|
|
5425
5809
|
parsedInfo,
|
|
5426
|
-
limits
|
|
5810
|
+
limits,
|
|
5811
|
+
scope
|
|
5427
5812
|
});
|
|
5428
5813
|
const entries = updates.map(({ where, set }) => {
|
|
5429
5814
|
const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
5430
5815
|
const ops = split && nested.hasOps(split.ops) ? split.ops : void 0;
|
|
5431
|
-
const input =
|
|
5816
|
+
const input = stripContextValues(
|
|
5817
|
+
remapUpdateInput(split ? split.columns : set, table, tableName),
|
|
5818
|
+
contextColumns
|
|
5819
|
+
);
|
|
5432
5820
|
if (!Object.keys(input).length && !ops) {
|
|
5433
5821
|
throw new import_graphql9.GraphQLError("Unable to update with no values specified!");
|
|
5434
5822
|
}
|
|
5435
5823
|
return {
|
|
5436
5824
|
set: input,
|
|
5437
5825
|
ops,
|
|
5438
|
-
filters:
|
|
5826
|
+
filters: withScope(
|
|
5827
|
+
scope,
|
|
5828
|
+
tableName,
|
|
5829
|
+
table,
|
|
5830
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
5831
|
+
)
|
|
5439
5832
|
};
|
|
5440
5833
|
});
|
|
5441
5834
|
const returning = entries.some((entry) => entry.ops) ? nested.withJoinColumns(
|
|
@@ -5449,7 +5842,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5449
5842
|
const perEntry = await executor.transaction(async (tx) => {
|
|
5450
5843
|
const results = [];
|
|
5451
5844
|
for (const entry of entries) {
|
|
5452
|
-
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops) } : entry.set;
|
|
5845
|
+
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops, context) } : entry.set;
|
|
5453
5846
|
const writes = Object.keys(values).length > 0;
|
|
5454
5847
|
let query = writes ? tx.update(table).set(values) : tx.select(returning).from(table);
|
|
5455
5848
|
if (entry.filters) {
|
|
@@ -5457,7 +5850,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5457
5850
|
}
|
|
5458
5851
|
const rows = await (writes ? query.returning(returning) : query);
|
|
5459
5852
|
if (entry.ops) {
|
|
5460
|
-
await nested.applyChildSide(tx, tableName, entry.ops, rows);
|
|
5853
|
+
await nested.applyChildSide(tx, tableName, entry.ops, rows, context);
|
|
5461
5854
|
}
|
|
5462
5855
|
results.push(rows);
|
|
5463
5856
|
}
|
|
@@ -5486,7 +5879,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5486
5879
|
args: queryArgs
|
|
5487
5880
|
};
|
|
5488
5881
|
};
|
|
5489
|
-
var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx) => {
|
|
5882
|
+
var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies) => {
|
|
5490
5883
|
const queryArgs = {
|
|
5491
5884
|
where: {
|
|
5492
5885
|
type: single || requireWhere ? new import_graphql9.GraphQLNonNull(filterArgs) : filterArgs
|
|
@@ -5498,6 +5891,7 @@ var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
5498
5891
|
try {
|
|
5499
5892
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5500
5893
|
const { where } = args;
|
|
5894
|
+
const scope = policies?.scope?.(context);
|
|
5501
5895
|
const parsedInfo = (0, import_graphql_parse_resolve_info3.parseResolveInfo)(info, {
|
|
5502
5896
|
deep: true
|
|
5503
5897
|
});
|
|
@@ -5507,7 +5901,12 @@ var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
5507
5901
|
selectionCtx
|
|
5508
5902
|
);
|
|
5509
5903
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
5510
|
-
const filters =
|
|
5904
|
+
const filters = withScope(
|
|
5905
|
+
scope,
|
|
5906
|
+
tableName,
|
|
5907
|
+
table,
|
|
5908
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
5909
|
+
);
|
|
5511
5910
|
if (single) {
|
|
5512
5911
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
5513
5912
|
}
|
|
@@ -5565,12 +5964,16 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5565
5964
|
attachTargetPrimaryKeys(namedRelations, tables, pgPrimaryKeyPropNames);
|
|
5566
5965
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
5567
5966
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
5967
|
+
const scopes = options.policies?.scope;
|
|
5968
|
+
const contextValuesOf = options.policies?.contextValues;
|
|
5969
|
+
const policies = bindPolicies(options.policies, filterCtx);
|
|
5568
5970
|
const resolverFactory = createRelationResolverFactory(
|
|
5569
5971
|
db,
|
|
5570
5972
|
tables,
|
|
5571
5973
|
"nulls-largest",
|
|
5572
5974
|
filterCtx,
|
|
5573
|
-
limits
|
|
5975
|
+
limits,
|
|
5976
|
+
scopes
|
|
5574
5977
|
);
|
|
5575
5978
|
const cacheCtx = {
|
|
5576
5979
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -5587,6 +5990,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5587
5990
|
complexity,
|
|
5588
5991
|
limits,
|
|
5589
5992
|
docs: options.docs ?? {},
|
|
5993
|
+
primaryKeyOf: (name) => tables[name] ? pgPrimaryKeyPropNames(tables[name]) : [],
|
|
5994
|
+
contextValuesOf,
|
|
5590
5995
|
featureOf
|
|
5591
5996
|
};
|
|
5592
5997
|
const nestedPlans = features.nestedWrites ? buildNestedWritePlans(
|
|
@@ -5597,8 +6002,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5597
6002
|
extractRelationJoinColumns
|
|
5598
6003
|
) : void 0;
|
|
5599
6004
|
const nestedTypes = nestedPlans ? createNestedWriteTypes({ plans: nestedPlans, cacheCtx, typeNameMapper, insertPrefix: prefixes.insert }) : void 0;
|
|
5600
|
-
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx }) : void 0;
|
|
5601
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
6005
|
+
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx, scopes, contextValues: contextValuesOf }) : void 0;
|
|
6006
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) : void 0;
|
|
5602
6007
|
const queries = {};
|
|
5603
6008
|
const mutations = {};
|
|
5604
6009
|
const mutationTxCtx = createMutationTxCtx(options.transactions);
|
|
@@ -5625,6 +6030,7 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5625
6030
|
const outputs = {};
|
|
5626
6031
|
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
5627
6032
|
const tableFeatures = featureOf(tableName);
|
|
6033
|
+
const drizzleMeta = tableFieldExtensions(tableName, pgPrimaryKeyPropNames(schema[tableName]));
|
|
5628
6034
|
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
5629
6035
|
const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
|
|
5630
6036
|
const {
|
|
@@ -5657,7 +6063,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5657
6063
|
typeNameMapper,
|
|
5658
6064
|
filterCtx,
|
|
5659
6065
|
tableFeatures.distinct,
|
|
5660
|
-
limits
|
|
6066
|
+
limits,
|
|
6067
|
+
policies
|
|
5661
6068
|
);
|
|
5662
6069
|
const selectSingleGenerated = generateSelectSingle2(
|
|
5663
6070
|
db,
|
|
@@ -5670,7 +6077,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5670
6077
|
typeName,
|
|
5671
6078
|
typeNameMapper,
|
|
5672
6079
|
filterCtx,
|
|
5673
|
-
limits
|
|
6080
|
+
limits,
|
|
6081
|
+
policies
|
|
5674
6082
|
);
|
|
5675
6083
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray2(
|
|
5676
6084
|
db,
|
|
@@ -5685,7 +6093,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5685
6093
|
conflictDoNothing,
|
|
5686
6094
|
mutationTxCtx,
|
|
5687
6095
|
nestedRuntime,
|
|
5688
|
-
limits
|
|
6096
|
+
limits,
|
|
6097
|
+
policies
|
|
5689
6098
|
) : void 0;
|
|
5690
6099
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle2(
|
|
5691
6100
|
db,
|
|
@@ -5700,7 +6109,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5700
6109
|
conflictDoNothing,
|
|
5701
6110
|
mutationTxCtx,
|
|
5702
6111
|
nestedRuntime,
|
|
5703
|
-
limits
|
|
6112
|
+
limits,
|
|
6113
|
+
policies
|
|
5704
6114
|
) : void 0;
|
|
5705
6115
|
const uniqueSets = tableFeatures.upsert ? getUniqueColumnSets(schema[tableName], import_pg_core2.getTableConfig) : [];
|
|
5706
6116
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -5726,7 +6136,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5726
6136
|
filterCtx,
|
|
5727
6137
|
mutationTxCtx,
|
|
5728
6138
|
nestedRuntime,
|
|
5729
|
-
limits
|
|
6139
|
+
limits,
|
|
6140
|
+
policies
|
|
5730
6141
|
) : void 0;
|
|
5731
6142
|
const upsertSingleGenerated = onConflictInput ? generateUpsert2(
|
|
5732
6143
|
db,
|
|
@@ -5744,7 +6155,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5744
6155
|
filterCtx,
|
|
5745
6156
|
mutationTxCtx,
|
|
5746
6157
|
nestedRuntime,
|
|
5747
|
-
limits
|
|
6158
|
+
limits,
|
|
6159
|
+
policies
|
|
5748
6160
|
) : void 0;
|
|
5749
6161
|
const updateGenerated = tableFeatures.update ? generateUpdate2(
|
|
5750
6162
|
db,
|
|
@@ -5762,7 +6174,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5762
6174
|
filterCtx,
|
|
5763
6175
|
mutationTxCtx,
|
|
5764
6176
|
nestedRuntime,
|
|
5765
|
-
limits
|
|
6177
|
+
limits,
|
|
6178
|
+
policies
|
|
5766
6179
|
) : void 0;
|
|
5767
6180
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate2(
|
|
5768
6181
|
db,
|
|
@@ -5780,7 +6193,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5780
6193
|
filterCtx,
|
|
5781
6194
|
mutationTxCtx,
|
|
5782
6195
|
nestedRuntime,
|
|
5783
|
-
limits
|
|
6196
|
+
limits,
|
|
6197
|
+
policies
|
|
5784
6198
|
) : void 0;
|
|
5785
6199
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
5786
6200
|
const updateManyGenerated = updateManyInput ? generateUpdateMany2(
|
|
@@ -5796,7 +6210,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5796
6210
|
filterCtx,
|
|
5797
6211
|
mutationTxCtx,
|
|
5798
6212
|
nestedRuntime,
|
|
5799
|
-
limits
|
|
6213
|
+
limits,
|
|
6214
|
+
policies
|
|
5800
6215
|
) : void 0;
|
|
5801
6216
|
const deleteGenerated = tableFeatures.delete ? generateDelete2(
|
|
5802
6217
|
db,
|
|
@@ -5809,7 +6224,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5809
6224
|
tableFeatures.requireWhere,
|
|
5810
6225
|
filterCtx,
|
|
5811
6226
|
{ tableName, relationMap: namedRelations, tables },
|
|
5812
|
-
mutationTxCtx
|
|
6227
|
+
mutationTxCtx,
|
|
6228
|
+
policies
|
|
5813
6229
|
) : void 0;
|
|
5814
6230
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete2(
|
|
5815
6231
|
db,
|
|
@@ -5822,7 +6238,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5822
6238
|
tableFeatures.requireWhere,
|
|
5823
6239
|
filterCtx,
|
|
5824
6240
|
{ tableName, relationMap: namedRelations, tables },
|
|
5825
|
-
mutationTxCtx
|
|
6241
|
+
mutationTxCtx,
|
|
6242
|
+
policies
|
|
5826
6243
|
) : void 0;
|
|
5827
6244
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
5828
6245
|
db,
|
|
@@ -5856,7 +6273,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5856
6273
|
typeName,
|
|
5857
6274
|
aggregateFieldName,
|
|
5858
6275
|
tableFilters,
|
|
5859
|
-
filterCtx
|
|
6276
|
+
filterCtx,
|
|
6277
|
+
scopes
|
|
5860
6278
|
) : void 0;
|
|
5861
6279
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
5862
6280
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -5870,25 +6288,35 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5870
6288
|
tableFilters,
|
|
5871
6289
|
groupByEnum,
|
|
5872
6290
|
havingInput,
|
|
5873
|
-
filterCtx
|
|
6291
|
+
filterCtx,
|
|
6292
|
+
scopes
|
|
5874
6293
|
) : void 0;
|
|
5875
6294
|
queries[selectArrGenerated.name] = {
|
|
5876
6295
|
type: selectArrOutput,
|
|
5877
6296
|
args: selectArrGenerated.args,
|
|
5878
6297
|
resolve: selectArrGenerated.resolver,
|
|
5879
|
-
|
|
6298
|
+
extensions: {
|
|
6299
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: false, targetArg: "where" }),
|
|
6300
|
+
...complexity ? { complexity: listFieldComplexity(complexity, limits?.(tableName)) } : {}
|
|
6301
|
+
}
|
|
5880
6302
|
};
|
|
5881
6303
|
queries[selectSingleGenerated.name] = {
|
|
5882
6304
|
type: selectSingleOutput,
|
|
5883
6305
|
args: selectSingleGenerated.args,
|
|
5884
|
-
resolve: selectSingleGenerated.resolver
|
|
6306
|
+
resolve: selectSingleGenerated.resolver,
|
|
6307
|
+
extensions: {
|
|
6308
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: true, targetArg: "where" })
|
|
6309
|
+
}
|
|
5885
6310
|
};
|
|
5886
6311
|
if (aggregateGenerated && aggregateType) {
|
|
5887
6312
|
queries[aggregateGenerated.name] = {
|
|
5888
6313
|
type: new import_graphql9.GraphQLNonNull(aggregateType),
|
|
5889
6314
|
args: aggregateGenerated.args,
|
|
5890
6315
|
resolve: aggregateGenerated.resolver,
|
|
5891
|
-
|
|
6316
|
+
extensions: {
|
|
6317
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "aggregate", single: true, targetArg: "where" }),
|
|
6318
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
6319
|
+
}
|
|
5892
6320
|
};
|
|
5893
6321
|
}
|
|
5894
6322
|
if (groupByGenerated && groupByType) {
|
|
@@ -5896,14 +6324,20 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5896
6324
|
type: new import_graphql9.GraphQLNonNull(new import_graphql9.GraphQLList(new import_graphql9.GraphQLNonNull(groupByType))),
|
|
5897
6325
|
args: groupByGenerated.args,
|
|
5898
6326
|
resolve: groupByGenerated.resolver,
|
|
5899
|
-
|
|
6327
|
+
extensions: {
|
|
6328
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "groupBy", single: false, targetArg: "where" }),
|
|
6329
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
6330
|
+
}
|
|
5900
6331
|
};
|
|
5901
6332
|
}
|
|
5902
6333
|
if (insertArrGenerated) {
|
|
5903
6334
|
mutations[insertArrGenerated.name] = {
|
|
5904
6335
|
type: arrTableItemOutput,
|
|
5905
6336
|
args: insertArrGenerated.args,
|
|
5906
|
-
resolve: insertArrGenerated.resolver
|
|
6337
|
+
resolve: insertArrGenerated.resolver,
|
|
6338
|
+
extensions: {
|
|
6339
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: false, targetArg: "values" })
|
|
6340
|
+
}
|
|
5907
6341
|
};
|
|
5908
6342
|
}
|
|
5909
6343
|
if (insertSingleGenerated) {
|
|
@@ -5912,28 +6346,40 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5912
6346
|
// `conflictDoNothing` swallowing the insert, so the field is nullable only there.
|
|
5913
6347
|
type: conflictDoNothing ? singleTableItemOutput : new import_graphql9.GraphQLNonNull(singleTableItemOutput),
|
|
5914
6348
|
args: insertSingleGenerated.args,
|
|
5915
|
-
resolve: insertSingleGenerated.resolver
|
|
6349
|
+
resolve: insertSingleGenerated.resolver,
|
|
6350
|
+
extensions: {
|
|
6351
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: true, targetArg: "values" })
|
|
6352
|
+
}
|
|
5916
6353
|
};
|
|
5917
6354
|
}
|
|
5918
6355
|
if (upsertArrGenerated) {
|
|
5919
6356
|
mutations[upsertArrGenerated.name] = {
|
|
5920
6357
|
type: arrTableItemOutput,
|
|
5921
6358
|
args: upsertArrGenerated.args,
|
|
5922
|
-
resolve: upsertArrGenerated.resolver
|
|
6359
|
+
resolve: upsertArrGenerated.resolver,
|
|
6360
|
+
extensions: {
|
|
6361
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: false, targetArg: "values" })
|
|
6362
|
+
}
|
|
5923
6363
|
};
|
|
5924
6364
|
}
|
|
5925
6365
|
if (upsertSingleGenerated) {
|
|
5926
6366
|
mutations[upsertSingleGenerated.name] = {
|
|
5927
6367
|
type: singleTableItemOutput,
|
|
5928
6368
|
args: upsertSingleGenerated.args,
|
|
5929
|
-
resolve: upsertSingleGenerated.resolver
|
|
6369
|
+
resolve: upsertSingleGenerated.resolver,
|
|
6370
|
+
extensions: {
|
|
6371
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: true, targetArg: "values" })
|
|
6372
|
+
}
|
|
5930
6373
|
};
|
|
5931
6374
|
}
|
|
5932
6375
|
if (updateGenerated) {
|
|
5933
6376
|
mutations[updateGenerated.name] = {
|
|
5934
6377
|
type: arrTableItemOutput,
|
|
5935
6378
|
args: updateGenerated.args,
|
|
5936
|
-
resolve: updateGenerated.resolver
|
|
6379
|
+
resolve: updateGenerated.resolver,
|
|
6380
|
+
extensions: {
|
|
6381
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: false, targetArg: "where" })
|
|
6382
|
+
}
|
|
5937
6383
|
};
|
|
5938
6384
|
}
|
|
5939
6385
|
if (updateManyGenerated) {
|
|
@@ -5941,6 +6387,9 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5941
6387
|
type: new import_graphql9.GraphQLNonNull(new import_graphql9.GraphQLList(singleTableItemOutput)),
|
|
5942
6388
|
args: updateManyGenerated.args,
|
|
5943
6389
|
resolve: updateManyGenerated.resolver,
|
|
6390
|
+
extensions: {
|
|
6391
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "updateMany", single: false, targetArg: "updates" })
|
|
6392
|
+
},
|
|
5944
6393
|
// The nullable element is deliberate, and the reason this mutation's return type
|
|
5945
6394
|
// differs from every sibling's: the result is aligned with the input, one slot per
|
|
5946
6395
|
// entry, so an entry that matched nothing has to be able to say so.
|
|
@@ -5951,21 +6400,30 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5951
6400
|
mutations[updateSingleGenerated.name] = {
|
|
5952
6401
|
type: singleTableItemOutput,
|
|
5953
6402
|
args: updateSingleGenerated.args,
|
|
5954
|
-
resolve: updateSingleGenerated.resolver
|
|
6403
|
+
resolve: updateSingleGenerated.resolver,
|
|
6404
|
+
extensions: {
|
|
6405
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: true, targetArg: "where" })
|
|
6406
|
+
}
|
|
5955
6407
|
};
|
|
5956
6408
|
}
|
|
5957
6409
|
if (deleteGenerated) {
|
|
5958
6410
|
mutations[deleteGenerated.name] = {
|
|
5959
6411
|
type: arrTableItemOutput,
|
|
5960
6412
|
args: deleteGenerated.args,
|
|
5961
|
-
resolve: deleteGenerated.resolver
|
|
6413
|
+
resolve: deleteGenerated.resolver,
|
|
6414
|
+
extensions: {
|
|
6415
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: false, targetArg: "where" })
|
|
6416
|
+
}
|
|
5962
6417
|
};
|
|
5963
6418
|
}
|
|
5964
6419
|
if (deleteSingleGenerated) {
|
|
5965
6420
|
mutations[deleteSingleGenerated.name] = {
|
|
5966
6421
|
type: singleTableItemOutput,
|
|
5967
6422
|
args: deleteSingleGenerated.args,
|
|
5968
|
-
resolve: deleteSingleGenerated.resolver
|
|
6423
|
+
resolve: deleteSingleGenerated.resolver,
|
|
6424
|
+
extensions: {
|
|
6425
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: true, targetArg: "where" })
|
|
6426
|
+
}
|
|
5969
6427
|
};
|
|
5970
6428
|
}
|
|
5971
6429
|
if (updateCountGenerated) {
|
|
@@ -6033,7 +6491,7 @@ var import_drizzle_orm9 = require("drizzle-orm");
|
|
|
6033
6491
|
var import_sqlite_core2 = require("drizzle-orm/sqlite-core");
|
|
6034
6492
|
var import_graphql10 = require("graphql");
|
|
6035
6493
|
var import_graphql_parse_resolve_info4 = require("graphql-parse-resolve-info");
|
|
6036
|
-
var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
6494
|
+
var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
6037
6495
|
const queryBase = db.query[tableName];
|
|
6038
6496
|
if (!queryBase) {
|
|
6039
6497
|
throw new Error(
|
|
@@ -6070,6 +6528,7 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6070
6528
|
limits,
|
|
6071
6529
|
pkNames,
|
|
6072
6530
|
db: executor,
|
|
6531
|
+
scope: policies?.scope?.(context),
|
|
6073
6532
|
// SQLite sorts NULLs as the smallest values (first in ASC).
|
|
6074
6533
|
nullOrdering: "nulls-smallest"
|
|
6075
6534
|
});
|
|
@@ -6080,7 +6539,7 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6080
6539
|
args: queryArgs
|
|
6081
6540
|
};
|
|
6082
6541
|
};
|
|
6083
|
-
var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
6542
|
+
var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
6084
6543
|
const queryBase = db.query[tableName];
|
|
6085
6544
|
if (!queryBase) {
|
|
6086
6545
|
throw new Error(
|
|
@@ -6110,7 +6569,8 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
6110
6569
|
filterCtx,
|
|
6111
6570
|
limits,
|
|
6112
6571
|
pkNames,
|
|
6113
|
-
db: executor
|
|
6572
|
+
db: executor,
|
|
6573
|
+
scope: policies?.scope?.(context)
|
|
6114
6574
|
});
|
|
6115
6575
|
} catch (e) {
|
|
6116
6576
|
throw toGraphQLError(e);
|
|
@@ -6120,7 +6580,7 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
6120
6580
|
};
|
|
6121
6581
|
};
|
|
6122
6582
|
var sqlitePrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, import_sqlite_core2.getTableConfig);
|
|
6123
|
-
var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
6583
|
+
var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
6124
6584
|
const queryArgs = {
|
|
6125
6585
|
values: {
|
|
6126
6586
|
type: new import_graphql10.GraphQLNonNull(new import_graphql10.GraphQLList(new import_graphql10.GraphQLNonNull(baseType)))
|
|
@@ -6137,7 +6597,13 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6137
6597
|
}
|
|
6138
6598
|
const entries = nested?.enabled(tableName) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
|
|
6139
6599
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6140
|
-
const
|
|
6600
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6601
|
+
const scope = policies?.scope?.(context);
|
|
6602
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
6603
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : args.values, table),
|
|
6604
|
+
contextColumns,
|
|
6605
|
+
context
|
|
6606
|
+
);
|
|
6141
6607
|
const parsedInfo = (0, import_graphql_parse_resolve_info4.parseResolveInfo)(info, {
|
|
6142
6608
|
deep: true
|
|
6143
6609
|
});
|
|
@@ -6150,7 +6616,8 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6150
6616
|
table,
|
|
6151
6617
|
pkNames,
|
|
6152
6618
|
parsedInfo,
|
|
6153
|
-
limits
|
|
6619
|
+
limits,
|
|
6620
|
+
scope
|
|
6154
6621
|
});
|
|
6155
6622
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
6156
6623
|
const runInsert = async (target, values) => {
|
|
@@ -6165,8 +6632,9 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6165
6632
|
runtime: nested,
|
|
6166
6633
|
tableName,
|
|
6167
6634
|
entries: nestedEntries,
|
|
6168
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6169
|
-
write: (tx, values) => runInsert(tx, [values])
|
|
6635
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6636
|
+
write: (tx, values) => runInsert(tx, [values]),
|
|
6637
|
+
context
|
|
6170
6638
|
}) : await runInsert(executor, input);
|
|
6171
6639
|
const enriched = hasRelations ? await eagerLoadMutationRelations(executor, tableName, result, pkNames, withParams) : result;
|
|
6172
6640
|
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
@@ -6178,7 +6646,7 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6178
6646
|
args: queryArgs
|
|
6179
6647
|
};
|
|
6180
6648
|
};
|
|
6181
|
-
var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
6649
|
+
var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
6182
6650
|
const queryArgs = {
|
|
6183
6651
|
values: {
|
|
6184
6652
|
type: new import_graphql10.GraphQLNonNull(baseType)
|
|
@@ -6192,7 +6660,13 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6192
6660
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6193
6661
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
6194
6662
|
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
6195
|
-
const
|
|
6663
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6664
|
+
const scope = policies?.scope?.(context);
|
|
6665
|
+
const input = nestedEntry ? {} : applyContextValues(
|
|
6666
|
+
remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table),
|
|
6667
|
+
contextColumns,
|
|
6668
|
+
context
|
|
6669
|
+
);
|
|
6196
6670
|
const parsedInfo = (0, import_graphql_parse_resolve_info4.parseResolveInfo)(info, {
|
|
6197
6671
|
deep: true
|
|
6198
6672
|
});
|
|
@@ -6205,7 +6679,8 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6205
6679
|
table,
|
|
6206
6680
|
pkNames,
|
|
6207
6681
|
parsedInfo,
|
|
6208
|
-
limits
|
|
6682
|
+
limits,
|
|
6683
|
+
scope
|
|
6209
6684
|
});
|
|
6210
6685
|
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
6211
6686
|
const runInsert = async (target, values) => {
|
|
@@ -6220,8 +6695,9 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6220
6695
|
runtime: nested,
|
|
6221
6696
|
tableName,
|
|
6222
6697
|
entries: [nestedEntry],
|
|
6223
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6224
|
-
write: runInsert
|
|
6698
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6699
|
+
write: runInsert,
|
|
6700
|
+
context
|
|
6225
6701
|
}) : await runInsert(executor, input);
|
|
6226
6702
|
if (!result[0]) {
|
|
6227
6703
|
if (!conflictDoNothing) {
|
|
@@ -6239,7 +6715,7 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6239
6715
|
args: queryArgs
|
|
6240
6716
|
};
|
|
6241
6717
|
};
|
|
6242
|
-
var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6718
|
+
var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6243
6719
|
const queryArgs = {
|
|
6244
6720
|
values: {
|
|
6245
6721
|
type: single ? new import_graphql10.GraphQLNonNull(baseType) : new import_graphql10.GraphQLNonNull(new import_graphql10.GraphQLList(new import_graphql10.GraphQLNonNull(baseType)))
|
|
@@ -6261,7 +6737,13 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6261
6737
|
}
|
|
6262
6738
|
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
6263
6739
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6264
|
-
const
|
|
6740
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6741
|
+
const scope = policies?.scope?.(context);
|
|
6742
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
6743
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table),
|
|
6744
|
+
contextColumns,
|
|
6745
|
+
context
|
|
6746
|
+
);
|
|
6265
6747
|
const parsedInfo = (0, import_graphql_parse_resolve_info4.parseResolveInfo)(info, { deep: true });
|
|
6266
6748
|
const { columns, hasRelations, withParams } = prepareMutationRelationColumns({
|
|
6267
6749
|
relationMap,
|
|
@@ -6272,7 +6754,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6272
6754
|
table,
|
|
6273
6755
|
pkNames,
|
|
6274
6756
|
parsedInfo,
|
|
6275
|
-
limits
|
|
6757
|
+
limits,
|
|
6758
|
+
scope
|
|
6276
6759
|
});
|
|
6277
6760
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
6278
6761
|
const runUpsert = async (target, values) => {
|
|
@@ -6287,7 +6770,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6287
6770
|
buildWhere: (where) => extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName))
|
|
6288
6771
|
});
|
|
6289
6772
|
let query = target.insert(table).values(values).returning(returning);
|
|
6290
|
-
|
|
6773
|
+
const setWhere = withScope(scope, tableName, table, plan.setWhere);
|
|
6774
|
+
query = plan.action === "NOTHING" ? query.onConflictDoNothing(plan.target ? { target: plan.target } : void 0) : query.onConflictDoUpdate({ target: plan.target, set: plan.set, setWhere });
|
|
6291
6775
|
return await query;
|
|
6292
6776
|
};
|
|
6293
6777
|
const result = nestedEntries ? await writeWithNestedOps({
|
|
@@ -6295,8 +6779,9 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6295
6779
|
runtime: nested,
|
|
6296
6780
|
tableName,
|
|
6297
6781
|
entries: nestedEntries,
|
|
6298
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6299
|
-
write: (tx, values) => runUpsert(tx, [values])
|
|
6782
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6783
|
+
write: (tx, values) => runUpsert(tx, [values]),
|
|
6784
|
+
context
|
|
6300
6785
|
}) : await runUpsert(executor, input);
|
|
6301
6786
|
if (single && !result[0]) {
|
|
6302
6787
|
return void 0;
|
|
@@ -6311,7 +6796,7 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6311
6796
|
args: queryArgs
|
|
6312
6797
|
};
|
|
6313
6798
|
};
|
|
6314
|
-
var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6799
|
+
var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6315
6800
|
const queryArgs = {
|
|
6316
6801
|
set: {
|
|
6317
6802
|
type: new import_graphql10.GraphQLNonNull(setArgs)
|
|
@@ -6327,6 +6812,7 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6327
6812
|
try {
|
|
6328
6813
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6329
6814
|
const { where, set } = args;
|
|
6815
|
+
const scope = policies?.scope?.(context);
|
|
6330
6816
|
const parsedInfo = (0, import_graphql_parse_resolve_info4.parseResolveInfo)(info, {
|
|
6331
6817
|
deep: true
|
|
6332
6818
|
});
|
|
@@ -6339,16 +6825,25 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6339
6825
|
table,
|
|
6340
6826
|
pkNames,
|
|
6341
6827
|
parsedInfo,
|
|
6342
|
-
limits
|
|
6828
|
+
limits,
|
|
6829
|
+
scope
|
|
6343
6830
|
});
|
|
6344
6831
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
6345
6832
|
const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
|
|
6346
|
-
const input =
|
|
6833
|
+
const input = stripContextValues(
|
|
6834
|
+
remapUpdateInput(entry ? entry.columns : set, table, tableName),
|
|
6835
|
+
policies?.contextValues?.(tableName)
|
|
6836
|
+
);
|
|
6347
6837
|
if (!Object.keys(input).length && !nestedOps) {
|
|
6348
6838
|
throw new import_graphql10.GraphQLError("Unable to update with no values specified!");
|
|
6349
6839
|
}
|
|
6350
6840
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
6351
|
-
const filters =
|
|
6841
|
+
const filters = withScope(
|
|
6842
|
+
scope,
|
|
6843
|
+
tableName,
|
|
6844
|
+
table,
|
|
6845
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
6846
|
+
);
|
|
6352
6847
|
if (single) {
|
|
6353
6848
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
6354
6849
|
}
|
|
@@ -6368,7 +6863,8 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6368
6863
|
columns: input,
|
|
6369
6864
|
ops: nestedOps,
|
|
6370
6865
|
remapValues: (values) => values,
|
|
6371
|
-
write: runUpdate
|
|
6866
|
+
write: runUpdate,
|
|
6867
|
+
context
|
|
6372
6868
|
}) : await runUpdate(executor, input);
|
|
6373
6869
|
if (single && result.length > 1) {
|
|
6374
6870
|
throw new import_graphql10.GraphQLError(`${fieldName}: 'where' matched more than one row!`);
|
|
@@ -6386,7 +6882,7 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6386
6882
|
args: queryArgs
|
|
6387
6883
|
};
|
|
6388
6884
|
};
|
|
6389
|
-
var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6885
|
+
var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6390
6886
|
const queryArgs = {
|
|
6391
6887
|
updates: {
|
|
6392
6888
|
type: new import_graphql10.GraphQLNonNull(new import_graphql10.GraphQLList(new import_graphql10.GraphQLNonNull(updateManyInput)))
|
|
@@ -6402,6 +6898,8 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6402
6898
|
if (!updates.length) {
|
|
6403
6899
|
throw new import_graphql10.GraphQLError("No updates were provided!");
|
|
6404
6900
|
}
|
|
6901
|
+
const scope = policies?.scope?.(context);
|
|
6902
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6405
6903
|
const parsedInfo = (0, import_graphql_parse_resolve_info4.parseResolveInfo)(info, {
|
|
6406
6904
|
deep: true
|
|
6407
6905
|
});
|
|
@@ -6414,19 +6912,28 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6414
6912
|
table,
|
|
6415
6913
|
pkNames,
|
|
6416
6914
|
parsedInfo,
|
|
6417
|
-
limits
|
|
6915
|
+
limits,
|
|
6916
|
+
scope
|
|
6418
6917
|
});
|
|
6419
6918
|
const entries = updates.map(({ where, set }) => {
|
|
6420
6919
|
const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
6421
6920
|
const ops = split && nested.hasOps(split.ops) ? split.ops : void 0;
|
|
6422
|
-
const input =
|
|
6921
|
+
const input = stripContextValues(
|
|
6922
|
+
remapUpdateInput(split ? split.columns : set, table, tableName),
|
|
6923
|
+
contextColumns
|
|
6924
|
+
);
|
|
6423
6925
|
if (!Object.keys(input).length && !ops) {
|
|
6424
6926
|
throw new import_graphql10.GraphQLError("Unable to update with no values specified!");
|
|
6425
6927
|
}
|
|
6426
6928
|
return {
|
|
6427
6929
|
set: input,
|
|
6428
6930
|
ops,
|
|
6429
|
-
filters:
|
|
6931
|
+
filters: withScope(
|
|
6932
|
+
scope,
|
|
6933
|
+
tableName,
|
|
6934
|
+
table,
|
|
6935
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
6936
|
+
)
|
|
6430
6937
|
};
|
|
6431
6938
|
});
|
|
6432
6939
|
const anyNested = entries.some((entry) => entry.ops);
|
|
@@ -6444,7 +6951,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6444
6951
|
return query.returning(returning).all();
|
|
6445
6952
|
};
|
|
6446
6953
|
const runNestedEntry = async (tx, entry) => {
|
|
6447
|
-
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops) } : entry.set;
|
|
6954
|
+
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops, context) } : entry.set;
|
|
6448
6955
|
const writes = Object.keys(values).length > 0;
|
|
6449
6956
|
let query = writes ? tx.update(table).set(values) : tx.select(returning).from(table);
|
|
6450
6957
|
if (entry.filters) {
|
|
@@ -6452,7 +6959,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6452
6959
|
}
|
|
6453
6960
|
const rows = await (writes ? query.returning(returning) : query);
|
|
6454
6961
|
if (entry.ops) {
|
|
6455
|
-
await nested.applyChildSide(tx, tableName, entry.ops, rows);
|
|
6962
|
+
await nested.applyChildSide(tx, tableName, entry.ops, rows, context);
|
|
6456
6963
|
}
|
|
6457
6964
|
return rows;
|
|
6458
6965
|
};
|
|
@@ -6505,7 +7012,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6505
7012
|
args: queryArgs
|
|
6506
7013
|
};
|
|
6507
7014
|
};
|
|
6508
|
-
var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx) => {
|
|
7015
|
+
var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies) => {
|
|
6509
7016
|
const queryArgs = {
|
|
6510
7017
|
where: {
|
|
6511
7018
|
type: single || requireWhere ? new import_graphql10.GraphQLNonNull(filterArgs) : filterArgs
|
|
@@ -6517,6 +7024,7 @@ var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
6517
7024
|
try {
|
|
6518
7025
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6519
7026
|
const { where } = args;
|
|
7027
|
+
const scope = policies?.scope?.(context);
|
|
6520
7028
|
const parsedInfo = (0, import_graphql_parse_resolve_info4.parseResolveInfo)(info, {
|
|
6521
7029
|
deep: true
|
|
6522
7030
|
});
|
|
@@ -6526,7 +7034,12 @@ var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
6526
7034
|
selectionCtx
|
|
6527
7035
|
);
|
|
6528
7036
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
6529
|
-
const filters =
|
|
7037
|
+
const filters = withScope(
|
|
7038
|
+
scope,
|
|
7039
|
+
tableName,
|
|
7040
|
+
table,
|
|
7041
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
7042
|
+
);
|
|
6530
7043
|
if (single) {
|
|
6531
7044
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
6532
7045
|
}
|
|
@@ -6585,12 +7098,16 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6585
7098
|
attachTargetPrimaryKeys(namedRelations, tables, sqlitePrimaryKeyPropNames);
|
|
6586
7099
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
6587
7100
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
7101
|
+
const scopes = options.policies?.scope;
|
|
7102
|
+
const contextValuesOf = options.policies?.contextValues;
|
|
7103
|
+
const policies = bindPolicies(options.policies, filterCtx);
|
|
6588
7104
|
const resolverFactory = createRelationResolverFactory(
|
|
6589
7105
|
db,
|
|
6590
7106
|
tables,
|
|
6591
7107
|
"nulls-smallest",
|
|
6592
7108
|
filterCtx,
|
|
6593
|
-
limits
|
|
7109
|
+
limits,
|
|
7110
|
+
scopes
|
|
6594
7111
|
);
|
|
6595
7112
|
const cacheCtx = {
|
|
6596
7113
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -6607,6 +7124,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6607
7124
|
complexity,
|
|
6608
7125
|
limits,
|
|
6609
7126
|
docs: options.docs ?? {},
|
|
7127
|
+
primaryKeyOf: (name) => tables[name] ? sqlitePrimaryKeyPropNames(tables[name]) : [],
|
|
7128
|
+
contextValuesOf,
|
|
6610
7129
|
featureOf
|
|
6611
7130
|
};
|
|
6612
7131
|
if (features.nestedWrites && db.resultKind === "sync") {
|
|
@@ -6622,8 +7141,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6622
7141
|
extractRelationJoinColumns
|
|
6623
7142
|
) : void 0;
|
|
6624
7143
|
const nestedTypes = nestedPlans ? createNestedWriteTypes({ plans: nestedPlans, cacheCtx, typeNameMapper, insertPrefix: prefixes.insert }) : void 0;
|
|
6625
|
-
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx }) : void 0;
|
|
6626
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
7144
|
+
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({ plans: nestedPlans, filterCtx, scopes, contextValues: contextValuesOf }) : void 0;
|
|
7145
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, scopes) : void 0;
|
|
6627
7146
|
const queries = {};
|
|
6628
7147
|
const mutations = {};
|
|
6629
7148
|
if (options.transactions && db.resultKind === "sync") {
|
|
@@ -6655,6 +7174,7 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6655
7174
|
const outputs = {};
|
|
6656
7175
|
for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
|
|
6657
7176
|
const tableFeatures = featureOf(tableName);
|
|
7177
|
+
const drizzleMeta = tableFieldExtensions(tableName, sqlitePrimaryKeyPropNames(schema[tableName]));
|
|
6658
7178
|
const { insertInput, updateInput, tableFilters, tableOrder } = tableTypes.inputs;
|
|
6659
7179
|
const { selectSingleOutput, selectArrOutput, singleTableItemOutput, arrTableItemOutput } = tableTypes.outputs;
|
|
6660
7180
|
const {
|
|
@@ -6687,7 +7207,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6687
7207
|
typeNameMapper,
|
|
6688
7208
|
filterCtx,
|
|
6689
7209
|
tableFeatures.distinct,
|
|
6690
|
-
limits
|
|
7210
|
+
limits,
|
|
7211
|
+
policies
|
|
6691
7212
|
);
|
|
6692
7213
|
const selectSingleGenerated = generateSelectSingle3(
|
|
6693
7214
|
db,
|
|
@@ -6700,7 +7221,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6700
7221
|
typeName,
|
|
6701
7222
|
typeNameMapper,
|
|
6702
7223
|
filterCtx,
|
|
6703
|
-
limits
|
|
7224
|
+
limits,
|
|
7225
|
+
policies
|
|
6704
7226
|
);
|
|
6705
7227
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray3(
|
|
6706
7228
|
db,
|
|
@@ -6715,7 +7237,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6715
7237
|
conflictDoNothing,
|
|
6716
7238
|
mutationTxCtx,
|
|
6717
7239
|
nestedRuntime,
|
|
6718
|
-
limits
|
|
7240
|
+
limits,
|
|
7241
|
+
policies
|
|
6719
7242
|
) : void 0;
|
|
6720
7243
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle3(
|
|
6721
7244
|
db,
|
|
@@ -6730,7 +7253,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6730
7253
|
conflictDoNothing,
|
|
6731
7254
|
mutationTxCtx,
|
|
6732
7255
|
nestedRuntime,
|
|
6733
|
-
limits
|
|
7256
|
+
limits,
|
|
7257
|
+
policies
|
|
6734
7258
|
) : void 0;
|
|
6735
7259
|
const uniqueSets = tableFeatures.upsert ? getUniqueColumnSets(schema[tableName], import_sqlite_core2.getTableConfig) : [];
|
|
6736
7260
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -6756,7 +7280,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6756
7280
|
filterCtx,
|
|
6757
7281
|
mutationTxCtx,
|
|
6758
7282
|
nestedRuntime,
|
|
6759
|
-
limits
|
|
7283
|
+
limits,
|
|
7284
|
+
policies
|
|
6760
7285
|
) : void 0;
|
|
6761
7286
|
const upsertSingleGenerated = onConflictInput ? generateUpsert3(
|
|
6762
7287
|
db,
|
|
@@ -6774,7 +7299,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6774
7299
|
filterCtx,
|
|
6775
7300
|
mutationTxCtx,
|
|
6776
7301
|
nestedRuntime,
|
|
6777
|
-
limits
|
|
7302
|
+
limits,
|
|
7303
|
+
policies
|
|
6778
7304
|
) : void 0;
|
|
6779
7305
|
const updateGenerated = tableFeatures.update ? generateUpdate3(
|
|
6780
7306
|
db,
|
|
@@ -6792,7 +7318,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6792
7318
|
filterCtx,
|
|
6793
7319
|
mutationTxCtx,
|
|
6794
7320
|
nestedRuntime,
|
|
6795
|
-
limits
|
|
7321
|
+
limits,
|
|
7322
|
+
policies
|
|
6796
7323
|
) : void 0;
|
|
6797
7324
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate3(
|
|
6798
7325
|
db,
|
|
@@ -6810,7 +7337,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6810
7337
|
filterCtx,
|
|
6811
7338
|
mutationTxCtx,
|
|
6812
7339
|
nestedRuntime,
|
|
6813
|
-
limits
|
|
7340
|
+
limits,
|
|
7341
|
+
policies
|
|
6814
7342
|
) : void 0;
|
|
6815
7343
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
6816
7344
|
const updateManyGenerated = updateManyInput ? generateUpdateMany3(
|
|
@@ -6826,7 +7354,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6826
7354
|
filterCtx,
|
|
6827
7355
|
mutationTxCtx,
|
|
6828
7356
|
nestedRuntime,
|
|
6829
|
-
limits
|
|
7357
|
+
limits,
|
|
7358
|
+
policies
|
|
6830
7359
|
) : void 0;
|
|
6831
7360
|
const deleteGenerated = tableFeatures.delete ? generateDelete3(
|
|
6832
7361
|
db,
|
|
@@ -6839,7 +7368,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6839
7368
|
tableFeatures.requireWhere,
|
|
6840
7369
|
filterCtx,
|
|
6841
7370
|
{ tableName, relationMap: namedRelations, tables },
|
|
6842
|
-
mutationTxCtx
|
|
7371
|
+
mutationTxCtx,
|
|
7372
|
+
policies
|
|
6843
7373
|
) : void 0;
|
|
6844
7374
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete3(
|
|
6845
7375
|
db,
|
|
@@ -6852,7 +7382,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6852
7382
|
tableFeatures.requireWhere,
|
|
6853
7383
|
filterCtx,
|
|
6854
7384
|
{ tableName, relationMap: namedRelations, tables },
|
|
6855
|
-
mutationTxCtx
|
|
7385
|
+
mutationTxCtx,
|
|
7386
|
+
policies
|
|
6856
7387
|
) : void 0;
|
|
6857
7388
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
6858
7389
|
db,
|
|
@@ -6886,7 +7417,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6886
7417
|
typeName,
|
|
6887
7418
|
aggregateFieldName,
|
|
6888
7419
|
tableFilters,
|
|
6889
|
-
filterCtx
|
|
7420
|
+
filterCtx,
|
|
7421
|
+
scopes
|
|
6890
7422
|
) : void 0;
|
|
6891
7423
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
6892
7424
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -6900,25 +7432,35 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6900
7432
|
tableFilters,
|
|
6901
7433
|
groupByEnum,
|
|
6902
7434
|
havingInput,
|
|
6903
|
-
filterCtx
|
|
7435
|
+
filterCtx,
|
|
7436
|
+
scopes
|
|
6904
7437
|
) : void 0;
|
|
6905
7438
|
queries[selectArrGenerated.name] = {
|
|
6906
7439
|
type: selectArrOutput,
|
|
6907
7440
|
args: selectArrGenerated.args,
|
|
6908
7441
|
resolve: selectArrGenerated.resolver,
|
|
6909
|
-
|
|
7442
|
+
extensions: {
|
|
7443
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: false, targetArg: "where" }),
|
|
7444
|
+
...complexity ? { complexity: listFieldComplexity(complexity, limits?.(tableName)) } : {}
|
|
7445
|
+
}
|
|
6910
7446
|
};
|
|
6911
7447
|
queries[selectSingleGenerated.name] = {
|
|
6912
7448
|
type: selectSingleOutput,
|
|
6913
7449
|
args: selectSingleGenerated.args,
|
|
6914
|
-
resolve: selectSingleGenerated.resolver
|
|
7450
|
+
resolve: selectSingleGenerated.resolver,
|
|
7451
|
+
extensions: {
|
|
7452
|
+
drizzle: drizzleMeta({ kind: "query", operation: "select", single: true, targetArg: "where" })
|
|
7453
|
+
}
|
|
6915
7454
|
};
|
|
6916
7455
|
if (aggregateGenerated && aggregateType) {
|
|
6917
7456
|
queries[aggregateGenerated.name] = {
|
|
6918
7457
|
type: new import_graphql10.GraphQLNonNull(aggregateType),
|
|
6919
7458
|
args: aggregateGenerated.args,
|
|
6920
7459
|
resolve: aggregateGenerated.resolver,
|
|
6921
|
-
|
|
7460
|
+
extensions: {
|
|
7461
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "aggregate", single: true, targetArg: "where" }),
|
|
7462
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
7463
|
+
}
|
|
6922
7464
|
};
|
|
6923
7465
|
}
|
|
6924
7466
|
if (groupByGenerated && groupByType) {
|
|
@@ -6926,14 +7468,20 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6926
7468
|
type: new import_graphql10.GraphQLNonNull(new import_graphql10.GraphQLList(new import_graphql10.GraphQLNonNull(groupByType))),
|
|
6927
7469
|
args: groupByGenerated.args,
|
|
6928
7470
|
resolve: groupByGenerated.resolver,
|
|
6929
|
-
|
|
7471
|
+
extensions: {
|
|
7472
|
+
drizzle: drizzleMeta({ kind: "aggregate", operation: "groupBy", single: false, targetArg: "where" }),
|
|
7473
|
+
...complexity ? { complexity: aggregateFieldComplexity(complexity) } : {}
|
|
7474
|
+
}
|
|
6930
7475
|
};
|
|
6931
7476
|
}
|
|
6932
7477
|
if (insertArrGenerated) {
|
|
6933
7478
|
mutations[insertArrGenerated.name] = {
|
|
6934
7479
|
type: arrTableItemOutput,
|
|
6935
7480
|
args: insertArrGenerated.args,
|
|
6936
|
-
resolve: insertArrGenerated.resolver
|
|
7481
|
+
resolve: insertArrGenerated.resolver,
|
|
7482
|
+
extensions: {
|
|
7483
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: false, targetArg: "values" })
|
|
7484
|
+
}
|
|
6937
7485
|
};
|
|
6938
7486
|
}
|
|
6939
7487
|
if (insertSingleGenerated) {
|
|
@@ -6942,28 +7490,40 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6942
7490
|
// `conflictDoNothing` swallowing the insert, so the field is nullable only there.
|
|
6943
7491
|
type: conflictDoNothing ? singleTableItemOutput : new import_graphql10.GraphQLNonNull(singleTableItemOutput),
|
|
6944
7492
|
args: insertSingleGenerated.args,
|
|
6945
|
-
resolve: insertSingleGenerated.resolver
|
|
7493
|
+
resolve: insertSingleGenerated.resolver,
|
|
7494
|
+
extensions: {
|
|
7495
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "insert", single: true, targetArg: "values" })
|
|
7496
|
+
}
|
|
6946
7497
|
};
|
|
6947
7498
|
}
|
|
6948
7499
|
if (upsertArrGenerated) {
|
|
6949
7500
|
mutations[upsertArrGenerated.name] = {
|
|
6950
7501
|
type: arrTableItemOutput,
|
|
6951
7502
|
args: upsertArrGenerated.args,
|
|
6952
|
-
resolve: upsertArrGenerated.resolver
|
|
7503
|
+
resolve: upsertArrGenerated.resolver,
|
|
7504
|
+
extensions: {
|
|
7505
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: false, targetArg: "values" })
|
|
7506
|
+
}
|
|
6953
7507
|
};
|
|
6954
7508
|
}
|
|
6955
7509
|
if (upsertSingleGenerated) {
|
|
6956
7510
|
mutations[upsertSingleGenerated.name] = {
|
|
6957
7511
|
type: singleTableItemOutput,
|
|
6958
7512
|
args: upsertSingleGenerated.args,
|
|
6959
|
-
resolve: upsertSingleGenerated.resolver
|
|
7513
|
+
resolve: upsertSingleGenerated.resolver,
|
|
7514
|
+
extensions: {
|
|
7515
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "upsert", single: true, targetArg: "values" })
|
|
7516
|
+
}
|
|
6960
7517
|
};
|
|
6961
7518
|
}
|
|
6962
7519
|
if (updateGenerated) {
|
|
6963
7520
|
mutations[updateGenerated.name] = {
|
|
6964
7521
|
type: arrTableItemOutput,
|
|
6965
7522
|
args: updateGenerated.args,
|
|
6966
|
-
resolve: updateGenerated.resolver
|
|
7523
|
+
resolve: updateGenerated.resolver,
|
|
7524
|
+
extensions: {
|
|
7525
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: false, targetArg: "where" })
|
|
7526
|
+
}
|
|
6967
7527
|
};
|
|
6968
7528
|
}
|
|
6969
7529
|
if (updateManyGenerated) {
|
|
@@ -6971,6 +7531,9 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6971
7531
|
type: new import_graphql10.GraphQLNonNull(new import_graphql10.GraphQLList(singleTableItemOutput)),
|
|
6972
7532
|
args: updateManyGenerated.args,
|
|
6973
7533
|
resolve: updateManyGenerated.resolver,
|
|
7534
|
+
extensions: {
|
|
7535
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "updateMany", single: false, targetArg: "updates" })
|
|
7536
|
+
},
|
|
6974
7537
|
// The nullable element is deliberate, and the reason this mutation's return type
|
|
6975
7538
|
// differs from every sibling's: the result is aligned with the input, one slot per
|
|
6976
7539
|
// entry, so an entry that matched nothing has to be able to say so.
|
|
@@ -6981,21 +7544,30 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6981
7544
|
mutations[updateSingleGenerated.name] = {
|
|
6982
7545
|
type: singleTableItemOutput,
|
|
6983
7546
|
args: updateSingleGenerated.args,
|
|
6984
|
-
resolve: updateSingleGenerated.resolver
|
|
7547
|
+
resolve: updateSingleGenerated.resolver,
|
|
7548
|
+
extensions: {
|
|
7549
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "update", single: true, targetArg: "where" })
|
|
7550
|
+
}
|
|
6985
7551
|
};
|
|
6986
7552
|
}
|
|
6987
7553
|
if (deleteGenerated) {
|
|
6988
7554
|
mutations[deleteGenerated.name] = {
|
|
6989
7555
|
type: arrTableItemOutput,
|
|
6990
7556
|
args: deleteGenerated.args,
|
|
6991
|
-
resolve: deleteGenerated.resolver
|
|
7557
|
+
resolve: deleteGenerated.resolver,
|
|
7558
|
+
extensions: {
|
|
7559
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: false, targetArg: "where" })
|
|
7560
|
+
}
|
|
6992
7561
|
};
|
|
6993
7562
|
}
|
|
6994
7563
|
if (deleteSingleGenerated) {
|
|
6995
7564
|
mutations[deleteSingleGenerated.name] = {
|
|
6996
7565
|
type: singleTableItemOutput,
|
|
6997
7566
|
args: deleteSingleGenerated.args,
|
|
6998
|
-
resolve: deleteSingleGenerated.resolver
|
|
7567
|
+
resolve: deleteSingleGenerated.resolver,
|
|
7568
|
+
extensions: {
|
|
7569
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "delete", single: true, targetArg: "where" })
|
|
7570
|
+
}
|
|
6999
7571
|
};
|
|
7000
7572
|
}
|
|
7001
7573
|
if (updateCountGenerated) {
|
|
@@ -7058,6 +7630,141 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7058
7630
|
return { queries, mutations, inputs, types: outputs, fieldResolvers };
|
|
7059
7631
|
};
|
|
7060
7632
|
|
|
7633
|
+
// src/util/selection.ts
|
|
7634
|
+
var import_drizzle_orm10 = require("drizzle-orm");
|
|
7635
|
+
var import_mysql_core3 = require("drizzle-orm/mysql-core");
|
|
7636
|
+
var import_pg_core3 = require("drizzle-orm/pg-core");
|
|
7637
|
+
var import_sqlite_core3 = require("drizzle-orm/sqlite-core");
|
|
7638
|
+
var import_graphql_parse_resolve_info5 = require("graphql-parse-resolve-info");
|
|
7639
|
+
var contextCache = /* @__PURE__ */ new WeakMap();
|
|
7640
|
+
var tableConfigFor = (db) => {
|
|
7641
|
+
if ((0, import_drizzle_orm10.is)(db, import_mysql_core3.MySqlDatabase)) {
|
|
7642
|
+
return import_mysql_core3.getTableConfig;
|
|
7643
|
+
}
|
|
7644
|
+
if ((0, import_drizzle_orm10.is)(db, import_pg_core3.PgAsyncDatabase)) {
|
|
7645
|
+
return import_pg_core3.getTableConfig;
|
|
7646
|
+
}
|
|
7647
|
+
if ((0, import_drizzle_orm10.is)(db, import_sqlite_core3.BaseSQLiteDatabase)) {
|
|
7648
|
+
return import_sqlite_core3.getTableConfig;
|
|
7649
|
+
}
|
|
7650
|
+
throw new Error("Drizzle-GraphQL Error: unsupported database instance \u2014 expected a PostgreSQL, MySQL or SQLite one.");
|
|
7651
|
+
};
|
|
7652
|
+
var contextFor = (db) => {
|
|
7653
|
+
const cached = contextCache.get(db);
|
|
7654
|
+
if (cached) {
|
|
7655
|
+
return cached;
|
|
7656
|
+
}
|
|
7657
|
+
const relations = db._.relations ?? {};
|
|
7658
|
+
const schema = db._.fullSchema ?? Object.fromEntries(
|
|
7659
|
+
Object.entries(relations).filter(([, config]) => config?.table != null).map(([key, config]) => [key, config.table])
|
|
7660
|
+
);
|
|
7661
|
+
const tableEntries = Object.entries(schema).filter(([, value]) => (0, import_drizzle_orm10.is)(value, import_drizzle_orm10.Table));
|
|
7662
|
+
if (!tableEntries.length) {
|
|
7663
|
+
throw new Error(
|
|
7664
|
+
"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."
|
|
7665
|
+
);
|
|
7666
|
+
}
|
|
7667
|
+
const tables = Object.fromEntries(tableEntries);
|
|
7668
|
+
const getTableConfig4 = tableConfigFor(db);
|
|
7669
|
+
const primaryKeyCache = /* @__PURE__ */ new Map();
|
|
7670
|
+
const primaryKeyOf = (tableName) => {
|
|
7671
|
+
let pk = primaryKeyCache.get(tableName);
|
|
7672
|
+
if (!pk) {
|
|
7673
|
+
const table = tables[tableName];
|
|
7674
|
+
pk = table ? getPrimaryKeyPropNamesFromConfig(table, getTableConfig4) : [];
|
|
7675
|
+
primaryKeyCache.set(tableName, pk);
|
|
7676
|
+
}
|
|
7677
|
+
return pk;
|
|
7678
|
+
};
|
|
7679
|
+
const relationMap = buildNamedRelations(relations, tableEntries);
|
|
7680
|
+
attachTargetPrimaryKeys(relationMap, tables, (table) => [...primaryKeyOf(tableNameOf(tables, table))]);
|
|
7681
|
+
const context = {
|
|
7682
|
+
tables,
|
|
7683
|
+
relationMap,
|
|
7684
|
+
filterCtx: { tables, relationMap },
|
|
7685
|
+
primaryKeyOf
|
|
7686
|
+
};
|
|
7687
|
+
contextCache.set(db, context);
|
|
7688
|
+
return context;
|
|
7689
|
+
};
|
|
7690
|
+
var tableNameOf = (tables, table) => Object.keys(tables).find((name) => tables[name] === table) ?? "";
|
|
7691
|
+
var parseInfo = (info) => {
|
|
7692
|
+
if ("fieldsByTypeName" in info) {
|
|
7693
|
+
return info;
|
|
7694
|
+
}
|
|
7695
|
+
return (0, import_graphql_parse_resolve_info5.parseResolveInfo)(info, { deep: true });
|
|
7696
|
+
};
|
|
7697
|
+
var selectionToWith = (info, options) => {
|
|
7698
|
+
const { db, table, typeNameMapper } = options;
|
|
7699
|
+
const { tables, relationMap, filterCtx } = contextFor(db);
|
|
7700
|
+
if (!tables[table]) {
|
|
7701
|
+
throw new Error(`Drizzle-GraphQL Error: '${table}' is not a table in the Drizzle schema.`);
|
|
7702
|
+
}
|
|
7703
|
+
if (!relationMap[table]) {
|
|
7704
|
+
return void 0;
|
|
7705
|
+
}
|
|
7706
|
+
const parsed = parseInfo(info);
|
|
7707
|
+
const params = extractRelationsParams(
|
|
7708
|
+
relationMap,
|
|
7709
|
+
tables,
|
|
7710
|
+
table,
|
|
7711
|
+
parsed,
|
|
7712
|
+
resolveTypeName(table, typeNameMapper),
|
|
7713
|
+
typeNameMapper,
|
|
7714
|
+
filterCtx
|
|
7715
|
+
);
|
|
7716
|
+
return params && Object.keys(params).length ? params : void 0;
|
|
7717
|
+
};
|
|
7718
|
+
var resolveSelection = async (info, options) => {
|
|
7719
|
+
const {
|
|
7720
|
+
db,
|
|
7721
|
+
table: tableName,
|
|
7722
|
+
typeNameMapper,
|
|
7723
|
+
executor,
|
|
7724
|
+
single = false,
|
|
7725
|
+
where,
|
|
7726
|
+
orderBy,
|
|
7727
|
+
limit,
|
|
7728
|
+
offset,
|
|
7729
|
+
after
|
|
7730
|
+
} = options;
|
|
7731
|
+
const { tables, relationMap, filterCtx, primaryKeyOf } = contextFor(db);
|
|
7732
|
+
const table = tables[tableName];
|
|
7733
|
+
if (!table) {
|
|
7734
|
+
throw new Error(`Drizzle-GraphQL Error: '${tableName}' is not a table in the Drizzle schema.`);
|
|
7735
|
+
}
|
|
7736
|
+
const parsedInfo = parseInfo(info);
|
|
7737
|
+
if (!parsedInfo) {
|
|
7738
|
+
throw new Error("Drizzle-GraphQL Error: resolveSelection could not read a selection set from the resolve info.");
|
|
7739
|
+
}
|
|
7740
|
+
const source = executor ?? db;
|
|
7741
|
+
const queryBase = source.query?.[tableName];
|
|
7742
|
+
if (!queryBase) {
|
|
7743
|
+
throw new Error(
|
|
7744
|
+
`Drizzle-GraphQL Error: the executor passed to resolveSelection has no relational query builder for '${tableName}'.`
|
|
7745
|
+
);
|
|
7746
|
+
}
|
|
7747
|
+
return runRelationalSelect({
|
|
7748
|
+
queryBase,
|
|
7749
|
+
tables,
|
|
7750
|
+
tableName,
|
|
7751
|
+
table,
|
|
7752
|
+
relationMap,
|
|
7753
|
+
typeName: resolveTypeName(tableName, typeNameMapper),
|
|
7754
|
+
typeNameMapper,
|
|
7755
|
+
parsedInfo,
|
|
7756
|
+
single,
|
|
7757
|
+
where,
|
|
7758
|
+
orderBy,
|
|
7759
|
+
limit,
|
|
7760
|
+
offset,
|
|
7761
|
+
after,
|
|
7762
|
+
filterCtx,
|
|
7763
|
+
pkNames: primaryKeyOf(tableName),
|
|
7764
|
+
db: source
|
|
7765
|
+
});
|
|
7766
|
+
};
|
|
7767
|
+
|
|
7061
7768
|
// src/index.ts
|
|
7062
7769
|
var buildSchema = (db, config) => {
|
|
7063
7770
|
const relations = db._.relations;
|
|
@@ -7080,7 +7787,7 @@ var buildSchema = (db, config) => {
|
|
|
7080
7787
|
single: config?.suffixes?.single ?? "Single"
|
|
7081
7788
|
};
|
|
7082
7789
|
const typeNameMapper = config?.typeNameMapper === "singularize" ? singularizeMapper : config?.typeNameMapper;
|
|
7083
|
-
const tableKeys = Object.entries(schema).filter(([, value]) => (0,
|
|
7790
|
+
const tableKeys = Object.entries(schema).filter(([, value]) => (0, import_drizzle_orm11.is)(value, import_drizzle_orm11.Table)).map(([key]) => key);
|
|
7084
7791
|
const excludedTableNames = new Set(config?.exclude?.tables ?? []);
|
|
7085
7792
|
const featureTables = tableKeys.filter((key) => !excludedTableNames.has(key));
|
|
7086
7793
|
const forTable = resolveTableFeatures(config?.features);
|
|
@@ -7118,6 +7825,43 @@ var buildSchema = (db, config) => {
|
|
|
7118
7825
|
limitPolicyCache.set(tableName, resolved);
|
|
7119
7826
|
return resolved;
|
|
7120
7827
|
} : void 0;
|
|
7828
|
+
const scopeConfig = config?.scope;
|
|
7829
|
+
const contextValuesConfig = config?.contextValues;
|
|
7830
|
+
if (scopeConfig || contextValuesConfig) {
|
|
7831
|
+
const tableNames = new Set(tableKeys);
|
|
7832
|
+
for (const [tableName, hook] of Object.entries(scopeConfig ?? {})) {
|
|
7833
|
+
if (!tableNames.has(tableName)) {
|
|
7834
|
+
throw new Error(
|
|
7835
|
+
`Drizzle-GraphQL Error: config.scope names '${tableName}', which is not a table in the Drizzle schema.`
|
|
7836
|
+
);
|
|
7837
|
+
}
|
|
7838
|
+
if (typeof hook !== "function") {
|
|
7839
|
+
throw new Error(`Drizzle-GraphQL Error: config.scope.${tableName} must be a function.`);
|
|
7840
|
+
}
|
|
7841
|
+
}
|
|
7842
|
+
for (const [tableName, columnHooks] of Object.entries(contextValuesConfig ?? {})) {
|
|
7843
|
+
if (!tableNames.has(tableName)) {
|
|
7844
|
+
throw new Error(
|
|
7845
|
+
`Drizzle-GraphQL Error: config.contextValues names '${tableName}', which is not a table in the Drizzle schema.`
|
|
7846
|
+
);
|
|
7847
|
+
}
|
|
7848
|
+
const columns = (0, import_drizzle_orm11.getColumns)(schema[tableName]);
|
|
7849
|
+
for (const [columnName, hook] of Object.entries(columnHooks)) {
|
|
7850
|
+
if (!columns[columnName]) {
|
|
7851
|
+
throw new Error(
|
|
7852
|
+
`Drizzle-GraphQL Error: config.contextValues names '${tableName}.${columnName}', which is not a column of that table.`
|
|
7853
|
+
);
|
|
7854
|
+
}
|
|
7855
|
+
if (typeof hook !== "function") {
|
|
7856
|
+
throw new Error(`Drizzle-GraphQL Error: config.contextValues.${tableName}.${columnName} must be a function.`);
|
|
7857
|
+
}
|
|
7858
|
+
}
|
|
7859
|
+
}
|
|
7860
|
+
}
|
|
7861
|
+
const policies = scopeConfig || contextValuesConfig ? {
|
|
7862
|
+
scope: scopeConfig ? (tableName) => scopeConfig[tableName] : void 0,
|
|
7863
|
+
contextValues: contextValuesConfig ? (tableName) => contextValuesConfig[tableName] : void 0
|
|
7864
|
+
} : void 0;
|
|
7121
7865
|
const exclude = config?.exclude;
|
|
7122
7866
|
if (exclude) {
|
|
7123
7867
|
const tableNames = new Set(tableKeys);
|
|
@@ -7143,7 +7887,7 @@ var buildSchema = (db, config) => {
|
|
|
7143
7887
|
if (excludedTables.has(tableName)) {
|
|
7144
7888
|
continue;
|
|
7145
7889
|
}
|
|
7146
|
-
const columns = (0,
|
|
7890
|
+
const columns = (0, import_drizzle_orm11.getColumns)(schema[tableName]);
|
|
7147
7891
|
for (const columnName of columnNames) {
|
|
7148
7892
|
const column = columns[columnName];
|
|
7149
7893
|
if (!column) {
|
|
@@ -7235,6 +7979,7 @@ var buildSchema = (db, config) => {
|
|
|
7235
7979
|
enumNameMapper: config?.enumNameMapper,
|
|
7236
7980
|
transactions,
|
|
7237
7981
|
limits,
|
|
7982
|
+
policies,
|
|
7238
7983
|
exclude,
|
|
7239
7984
|
docs: {
|
|
7240
7985
|
describeColumn: config?.describeColumn,
|
|
@@ -7244,11 +7989,11 @@ var buildSchema = (db, config) => {
|
|
|
7244
7989
|
}
|
|
7245
7990
|
};
|
|
7246
7991
|
let generatorOutput;
|
|
7247
|
-
if ((0,
|
|
7992
|
+
if ((0, import_drizzle_orm11.is)(db, import_mysql_core4.MySqlDatabase)) {
|
|
7248
7993
|
generatorOutput = generateSchemaData(db, schema, relations, generatorOptions);
|
|
7249
|
-
} else if ((0,
|
|
7994
|
+
} else if ((0, import_drizzle_orm11.is)(db, import_pg_core4.PgAsyncDatabase)) {
|
|
7250
7995
|
generatorOutput = generateSchemaData2(db, schema, relations, generatorOptions);
|
|
7251
|
-
} else if ((0,
|
|
7996
|
+
} else if ((0, import_drizzle_orm11.is)(db, import_sqlite_core4.BaseSQLiteDatabase)) {
|
|
7252
7997
|
generatorOutput = generateSchemaData3(db, schema, relations, generatorOptions);
|
|
7253
7998
|
} else {
|
|
7254
7999
|
throw new Error("Drizzle-GraphQL Error: Unknown database instance type");
|
|
@@ -7288,9 +8033,14 @@ var buildSchema = (db, config) => {
|
|
|
7288
8033
|
createRelationResolverFactory,
|
|
7289
8034
|
defaultErrorMapper,
|
|
7290
8035
|
drizzleExecutorKey,
|
|
8036
|
+
drizzleExtension,
|
|
7291
8037
|
extractFilters,
|
|
7292
8038
|
extractOrderBy,
|
|
7293
8039
|
extractRelationJoinColumns,
|
|
8040
|
+
identifyRows,
|
|
8041
|
+
isDrizzleFieldExtension,
|
|
8042
|
+
resolveSelection,
|
|
8043
|
+
selectionToWith,
|
|
7294
8044
|
singularizeMapper
|
|
7295
8045
|
});
|
|
7296
8046
|
//# sourceMappingURL=index.cjs.map
|