@vantreeseba/drizzle-graphql 7.5.0 → 7.7.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 +167 -1
- package/dist/README.md +167 -1
- package/dist/index.cjs +877 -210
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +219 -3
- package/dist/index.d.ts +219 -3
- package/dist/index.js +878 -210
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
One as One2,
|
|
39
39
|
or,
|
|
40
40
|
relationsFilterToSQL,
|
|
41
|
+
SQL,
|
|
41
42
|
sql as sql2
|
|
42
43
|
} from "drizzle-orm";
|
|
43
44
|
import {
|
|
@@ -1154,7 +1155,7 @@ var batchedPaginatedRelationQuery = async (db, targetTable, foreignCol, whereCon
|
|
|
1154
1155
|
}
|
|
1155
1156
|
return rows;
|
|
1156
1157
|
};
|
|
1157
|
-
var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits) => ({ tableName, relationName, relEntry, isOne }) => {
|
|
1158
|
+
var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits, policies) => ({ tableName, relationName, relEntry, isOne }) => {
|
|
1158
1159
|
const parentTable = tables[tableName];
|
|
1159
1160
|
const targetTableName = relEntry.targetTableName;
|
|
1160
1161
|
const targetTable = tables[targetTableName];
|
|
@@ -1176,7 +1177,14 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1176
1177
|
if (localValue == null) {
|
|
1177
1178
|
return isOne ? null : [];
|
|
1178
1179
|
}
|
|
1179
|
-
const {
|
|
1180
|
+
const {
|
|
1181
|
+
where: whereArg,
|
|
1182
|
+
orderBy: orderByArg,
|
|
1183
|
+
limit: requestedLimit,
|
|
1184
|
+
offset,
|
|
1185
|
+
after,
|
|
1186
|
+
deleted
|
|
1187
|
+
} = args ?? {};
|
|
1180
1188
|
const limit = applyLimitPolicy(requestedLimit, limitPolicy, `${tableName}.${relationName}`);
|
|
1181
1189
|
const distinct = (args ?? {}).distinct?.length ? (args ?? {}).distinct : void 0;
|
|
1182
1190
|
const cursorSelected = !isOne && !!info && selectsCursorField(info, targetTable);
|
|
@@ -1207,6 +1215,7 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1207
1215
|
orderBy: orderByArg ?? null,
|
|
1208
1216
|
limit: limit ?? null,
|
|
1209
1217
|
offset: offset ?? null,
|
|
1218
|
+
deleted: deleted ?? null,
|
|
1210
1219
|
after: after ?? null,
|
|
1211
1220
|
distinct: distinct ?? null,
|
|
1212
1221
|
cursor: cursorEntries ? 1 : 0
|
|
@@ -1215,10 +1224,17 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
|
|
|
1215
1224
|
const loader = getOrCreateLoader(context, loaderKey, async (parentIds) => {
|
|
1216
1225
|
const executor = resolveExecutor(db, context);
|
|
1217
1226
|
const uniqueIds = [...new Set(parentIds)];
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1227
|
+
const scope = resolveScope(policies, context, filterCtx);
|
|
1228
|
+
let whereCondition = withScope(
|
|
1229
|
+
scope,
|
|
1230
|
+
targetTableName,
|
|
1231
|
+
targetTable,
|
|
1232
|
+
and(
|
|
1233
|
+
inArray(foreignCol, uniqueIds),
|
|
1234
|
+
whereArg ? extractFilters(targetTable, targetTableName, whereArg, relationFilterCtx(filterCtx, targetTableName)) : void 0,
|
|
1235
|
+
cursorValues ? buildCursorCondition(targetTable, cursorEntries, cursorValues, nullOrdering) : void 0
|
|
1236
|
+
),
|
|
1237
|
+
deleted
|
|
1222
1238
|
);
|
|
1223
1239
|
if (distinct) {
|
|
1224
1240
|
const keys = await selectDistinctKeys({
|
|
@@ -2023,7 +2039,8 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
2023
2039
|
{
|
|
2024
2040
|
type: isRequired ? new GraphQLNonNull3(relType) : relType,
|
|
2025
2041
|
args: {
|
|
2026
|
-
where: { type: relSelectData.filters }
|
|
2042
|
+
where: { type: relSelectData.filters },
|
|
2043
|
+
...deletedArg(cacheCtx.softDeleteOf, targetTableName)
|
|
2027
2044
|
},
|
|
2028
2045
|
resolve,
|
|
2029
2046
|
...relationDocs,
|
|
@@ -2042,6 +2059,7 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
2042
2059
|
orderBy: { type: relSelectData.order },
|
|
2043
2060
|
offset: { type: GraphQLInt3 },
|
|
2044
2061
|
limit: { type: GraphQLInt3 },
|
|
2062
|
+
...deletedArg(cacheCtx.softDeleteOf, targetTableName),
|
|
2045
2063
|
after: {
|
|
2046
2064
|
type: GraphQLString2,
|
|
2047
2065
|
description: "Keyset pagination: only return related rows strictly after this cursor (a row's `cursor` field from a previous page of this relation, under the same orderBy)."
|
|
@@ -2069,7 +2087,8 @@ var generateSelectFields = (tables, tableName, relationMap, fromTableName, fromR
|
|
|
2069
2087
|
{
|
|
2070
2088
|
type: new GraphQLNonNull3(relationAggregate.type),
|
|
2071
2089
|
args: {
|
|
2072
|
-
where: { type: relSelectData.filters }
|
|
2090
|
+
where: { type: relSelectData.filters },
|
|
2091
|
+
...deletedArg(cacheCtx.softDeleteOf, targetTableName)
|
|
2073
2092
|
},
|
|
2074
2093
|
resolve: relationAggregate.resolve,
|
|
2075
2094
|
extensions: {
|
|
@@ -2124,9 +2143,14 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
2124
2143
|
const table = tables[tableName];
|
|
2125
2144
|
const columns = visibleColumns(table);
|
|
2126
2145
|
const columnEntries = Object.entries(columns);
|
|
2146
|
+
const contextColumns = cacheCtx.contextValuesOf?.(tableName);
|
|
2147
|
+
const markerColumn = cacheCtx.softDeleteOf?.(tableName)?.columnName;
|
|
2148
|
+
const writableEntries = contextColumns || markerColumn ? columnEntries.filter(
|
|
2149
|
+
([columnName]) => !(contextColumns && columnName in contextColumns) && columnName !== markerColumn
|
|
2150
|
+
) : columnEntries;
|
|
2127
2151
|
const relaxedColumns = nestedWrites?.relaxedColumns(tableName);
|
|
2128
2152
|
const insertFields = Object.fromEntries(
|
|
2129
|
-
|
|
2153
|
+
writableEntries.map(([columnName, column]) => {
|
|
2130
2154
|
const converted = drizzleColumnToGraphQLType(
|
|
2131
2155
|
column,
|
|
2132
2156
|
columnName,
|
|
@@ -2142,7 +2166,7 @@ var generateTableTypes = (tableName, tables, relationMap, withReturning, relatio
|
|
|
2142
2166
|
})
|
|
2143
2167
|
);
|
|
2144
2168
|
const updateFields = Object.fromEntries(
|
|
2145
|
-
|
|
2169
|
+
writableEntries.map(([columnName, column]) => {
|
|
2146
2170
|
const converted = drizzleColumnToGraphQLType(column, columnName, tableName, true, false, true);
|
|
2147
2171
|
const operations = cacheCtx.featureOf(tableName).fieldUpdateOperations ? fieldUpdateInputType(column, columnName, tableName) : void 0;
|
|
2148
2172
|
const field = operations ? { ...converted, type: operations } : converted;
|
|
@@ -2665,7 +2689,132 @@ var extractFilters = (table, tableName, filters, relationCtx) => {
|
|
|
2665
2689
|
}
|
|
2666
2690
|
return variants.length ? variants.length > 1 ? and(...variants) : variants[0] : void 0;
|
|
2667
2691
|
};
|
|
2668
|
-
var
|
|
2692
|
+
var deletedFilterEnum = new GraphQLEnumType2({
|
|
2693
|
+
name: "DeletedFilter",
|
|
2694
|
+
description: "Which rows a read over a soft-deleting table returns.",
|
|
2695
|
+
values: {
|
|
2696
|
+
EXCLUDE: { value: "EXCLUDE", description: "Only rows that are not marked deleted. The default." },
|
|
2697
|
+
INCLUDE: { value: "INCLUDE", description: "Marked and unmarked rows alike." },
|
|
2698
|
+
ONLY: { value: "ONLY", description: "Only rows that are marked deleted \u2014 a trash view." }
|
|
2699
|
+
}
|
|
2700
|
+
});
|
|
2701
|
+
var resolveSoftDeleteInfo = (table, tableName, declaration) => {
|
|
2702
|
+
const config = typeof declaration === "string" ? { column: declaration } : declaration;
|
|
2703
|
+
const columnName = config?.column;
|
|
2704
|
+
if (typeof columnName !== "string" || !columnName) {
|
|
2705
|
+
throw new Error(
|
|
2706
|
+
`Drizzle-GraphQL Error: config.softDelete.${tableName} must be a column name or an object with a 'column' property.`
|
|
2707
|
+
);
|
|
2708
|
+
}
|
|
2709
|
+
const column = getColumns2(table)[columnName];
|
|
2710
|
+
if (!column) {
|
|
2711
|
+
throw new Error(
|
|
2712
|
+
`Drizzle-GraphQL Error: config.softDelete names '${tableName}.${columnName}', which is not a column of that table.`
|
|
2713
|
+
);
|
|
2714
|
+
}
|
|
2715
|
+
const nullable = !column.notNull;
|
|
2716
|
+
const { type: baseType, constraint } = extractExtendedColumnType2(column);
|
|
2717
|
+
const hasDeleted = "deletedValue" in config && config.deletedValue !== void 0;
|
|
2718
|
+
const writeDeleted = hasDeleted ? typeof config.deletedValue === "function" ? config.deletedValue : () => config.deletedValue : constraint === "date" && baseType === "object" ? () => /* @__PURE__ */ new Date() : baseType === "string" ? () => (/* @__PURE__ */ new Date()).toISOString() : baseType === "number" ? () => Date.now() : baseType === "bigint" ? () => BigInt(Date.now()) : () => true;
|
|
2719
|
+
let marker;
|
|
2720
|
+
if (!nullable) {
|
|
2721
|
+
if (hasDeleted && typeof config.deletedValue !== "function") {
|
|
2722
|
+
marker = config.deletedValue;
|
|
2723
|
+
} else if (!hasDeleted && baseType === "boolean") {
|
|
2724
|
+
marker = true;
|
|
2725
|
+
} else {
|
|
2726
|
+
throw new Error(
|
|
2727
|
+
`Drizzle-GraphQL Error: config.softDelete.${tableName} marks a NOT NULL column ('${columnName}'), so 'deletedValue' must be a constant that means deleted \u2014 not a function, and not omitted for a non-boolean column.`
|
|
2728
|
+
);
|
|
2729
|
+
}
|
|
2730
|
+
}
|
|
2731
|
+
const hasRestored = "restoredValue" in config;
|
|
2732
|
+
const writeRestored = hasRestored ? config.restoredValue : nullable ? null : baseType === "boolean" ? false : void 0;
|
|
2733
|
+
if (!nullable && writeRestored === void 0) {
|
|
2734
|
+
throw new Error(
|
|
2735
|
+
`Drizzle-GraphQL Error: config.softDelete.${tableName} marks a NOT NULL column ('${columnName}'), so 'restoredValue' must say what restoring writes back.`
|
|
2736
|
+
);
|
|
2737
|
+
}
|
|
2738
|
+
return { columnName, column, nullable, writeDeleted, writeRestored, marker };
|
|
2739
|
+
};
|
|
2740
|
+
var softDeletePredicate = (info, table, mode) => {
|
|
2741
|
+
if (mode === "INCLUDE") {
|
|
2742
|
+
return void 0;
|
|
2743
|
+
}
|
|
2744
|
+
const column = table?.[info.columnName] ?? info.column;
|
|
2745
|
+
if (info.nullable) {
|
|
2746
|
+
return mode === "ONLY" ? isNotNull(column) : isNull(column);
|
|
2747
|
+
}
|
|
2748
|
+
return mode === "ONLY" ? eq(column, info.marker) : ne(column, info.marker);
|
|
2749
|
+
};
|
|
2750
|
+
var resolveScope = (policies, context, filterCtx) => {
|
|
2751
|
+
const scopes = policies?.scope;
|
|
2752
|
+
const softDelete = policies?.softDelete;
|
|
2753
|
+
if (!scopes && !softDelete) {
|
|
2754
|
+
return void 0;
|
|
2755
|
+
}
|
|
2756
|
+
return {
|
|
2757
|
+
has: (tableName, mode) => !!scopes?.(tableName) || !!softDelete?.(tableName) && (mode ?? "EXCLUDE") !== "INCLUDE",
|
|
2758
|
+
on: (tableName, table, mode) => {
|
|
2759
|
+
const marked = softDelete?.(tableName);
|
|
2760
|
+
const deleted = marked ? softDeletePredicate(marked, table, mode ?? "EXCLUDE") : void 0;
|
|
2761
|
+
const hook = scopes?.(tableName);
|
|
2762
|
+
if (!hook) {
|
|
2763
|
+
return deleted;
|
|
2764
|
+
}
|
|
2765
|
+
const predicate = hook(context, table);
|
|
2766
|
+
if (predicate === void 0 || predicate === null) {
|
|
2767
|
+
return deleted;
|
|
2768
|
+
}
|
|
2769
|
+
if (is3(predicate, SQL)) {
|
|
2770
|
+
return and(deleted, predicate);
|
|
2771
|
+
}
|
|
2772
|
+
if (typeof predicate !== "object") {
|
|
2773
|
+
throw new GraphQLError4(
|
|
2774
|
+
`Drizzle-GraphQL Error: the scope for '${tableName}' returned a ${typeof predicate}. A scope returns a filter object, a Drizzle SQL expression, or undefined.`
|
|
2775
|
+
);
|
|
2776
|
+
}
|
|
2777
|
+
return and(deleted, extractFilters(table, tableName, predicate, relationFilterCtx(filterCtx, tableName)));
|
|
2778
|
+
}
|
|
2779
|
+
};
|
|
2780
|
+
};
|
|
2781
|
+
var withScope = (scope, tableName, table, condition, mode) => {
|
|
2782
|
+
const predicate = scope?.on(tableName, table, mode);
|
|
2783
|
+
return predicate ? and(condition, predicate) : condition;
|
|
2784
|
+
};
|
|
2785
|
+
var bindPolicies = (policies, filterCtx) => policies?.scope || policies?.contextValues || policies?.softDelete ? {
|
|
2786
|
+
scope: policies.scope || policies.softDelete ? (context) => resolveScope(policies, context, filterCtx) : void 0,
|
|
2787
|
+
contextValues: policies.contextValues,
|
|
2788
|
+
softDelete: policies.softDelete
|
|
2789
|
+
} : void 0;
|
|
2790
|
+
var applyContextValues = (values, hooks, context) => {
|
|
2791
|
+
if (!hooks) {
|
|
2792
|
+
return values;
|
|
2793
|
+
}
|
|
2794
|
+
for (const [columnName, hook] of Object.entries(hooks)) {
|
|
2795
|
+
values[columnName] = hook(context);
|
|
2796
|
+
}
|
|
2797
|
+
return values;
|
|
2798
|
+
};
|
|
2799
|
+
var applyContextValuesAll = (rows, hooks, context) => {
|
|
2800
|
+
if (!hooks) {
|
|
2801
|
+
return rows;
|
|
2802
|
+
}
|
|
2803
|
+
for (const row of rows) {
|
|
2804
|
+
applyContextValues(row, hooks, context);
|
|
2805
|
+
}
|
|
2806
|
+
return rows;
|
|
2807
|
+
};
|
|
2808
|
+
var stripContextValues = (values, hooks) => {
|
|
2809
|
+
if (!hooks) {
|
|
2810
|
+
return values;
|
|
2811
|
+
}
|
|
2812
|
+
for (const columnName of Object.keys(hooks)) {
|
|
2813
|
+
delete values[columnName];
|
|
2814
|
+
}
|
|
2815
|
+
return values;
|
|
2816
|
+
};
|
|
2817
|
+
var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, originField, typeNameMapper, _isInitial = false, filterCtx, limits, scope) => {
|
|
2669
2818
|
const relationsForTable = relationMap[tableName];
|
|
2670
2819
|
if (!relationsForTable) {
|
|
2671
2820
|
return void 0;
|
|
@@ -2711,8 +2860,15 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
|
|
|
2711
2860
|
const offset = relationArgs?.offset ?? void 0;
|
|
2712
2861
|
const limit = is3(relEntry.relation, One2) ? relationArgs?.limit ?? void 0 : applyLimitPolicy(relationArgs?.limit, limits?.(targetTableName), `${tableName}.${relName}`);
|
|
2713
2862
|
const relWhere = relationArgs?.where;
|
|
2714
|
-
|
|
2715
|
-
|
|
2863
|
+
const relDeleted = relationArgs?.deleted;
|
|
2864
|
+
thisRecord.where = relWhere || scope?.has(targetTableName, relDeleted) ? {
|
|
2865
|
+
RAW: (aliasedTable2) => withScope(
|
|
2866
|
+
scope,
|
|
2867
|
+
targetTableName,
|
|
2868
|
+
aliasedTable2,
|
|
2869
|
+
relWhere ? extractFilters(aliasedTable2, relName, relWhere, relationFilterCtx(filterCtx, targetTableName)) : void 0,
|
|
2870
|
+
relDeleted
|
|
2871
|
+
)
|
|
2716
2872
|
} : void 0;
|
|
2717
2873
|
const hasPagination = offset != null || limit != null;
|
|
2718
2874
|
const pkNames = targetPkNames ?? [];
|
|
@@ -2728,14 +2884,15 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
|
|
|
2728
2884
|
typeNameMapper,
|
|
2729
2885
|
false,
|
|
2730
2886
|
filterCtx,
|
|
2731
|
-
limits
|
|
2887
|
+
limits,
|
|
2888
|
+
scope
|
|
2732
2889
|
) : void 0;
|
|
2733
2890
|
thisRecord.with = relWith;
|
|
2734
2891
|
args[relName] = thisRecord;
|
|
2735
2892
|
}
|
|
2736
2893
|
return args;
|
|
2737
2894
|
};
|
|
2738
|
-
var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits) => {
|
|
2895
|
+
var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits, scope) => {
|
|
2739
2896
|
if (!info) {
|
|
2740
2897
|
return void 0;
|
|
2741
2898
|
}
|
|
@@ -2748,7 +2905,8 @@ var extractRelationsParams = (relationMap, tables, tableName, info, typeName, ty
|
|
|
2748
2905
|
typeNameMapper,
|
|
2749
2906
|
true,
|
|
2750
2907
|
filterCtx,
|
|
2751
|
-
limits
|
|
2908
|
+
limits,
|
|
2909
|
+
scope
|
|
2752
2910
|
);
|
|
2753
2911
|
};
|
|
2754
2912
|
var pruneNonEagerRelations = (relationMap, shouldEagerLoad) => {
|
|
@@ -3158,7 +3316,8 @@ var prepareMutationRelationColumns = (params) => {
|
|
|
3158
3316
|
typeName,
|
|
3159
3317
|
typeNameMapper,
|
|
3160
3318
|
void 0,
|
|
3161
|
-
params.limits
|
|
3319
|
+
params.limits,
|
|
3320
|
+
params.scope
|
|
3162
3321
|
) : void 0;
|
|
3163
3322
|
const hasRelations = !!(withParams && Object.keys(withParams).length);
|
|
3164
3323
|
const baseColumns = extractSelectedColumnsFromTreeSQLFormat(parsedInfo.fieldsByTypeName[typeName], table, {
|
|
@@ -3234,9 +3393,11 @@ var computeResolverFieldNames = (tableName, typeNameMapper, prefixes, suffixes)
|
|
|
3234
3393
|
const updateFieldName = `${prefixes.update}${mapped ? capitalize(mapped.singular) : capitalize(tableName)}`;
|
|
3235
3394
|
const updateManyFieldName = `${prefixes.update}${mapped ? capitalize(mapped.plural) : capitalize(tableName)}Many`;
|
|
3236
3395
|
const deleteFieldName = `${prefixes.delete}${mapped ? capitalize(mapped.singular) : capitalize(tableName)}`;
|
|
3396
|
+
const restoreFieldName = `${prefixes.restore ?? "restore"}${mapped ? capitalize(mapped.singular) : capitalize(tableName)}`;
|
|
3237
3397
|
const writeSingleSuffix = suffixes.single === "" ? "Single" : suffixes.single;
|
|
3238
3398
|
const updateSingleFieldName = `${updateFieldName}${writeSingleSuffix}`;
|
|
3239
3399
|
const deleteSingleFieldName = `${deleteFieldName}${writeSingleSuffix}`;
|
|
3400
|
+
const restoreSingleFieldName = `${restoreFieldName}${writeSingleSuffix}`;
|
|
3240
3401
|
const pluralNoun = mapped ? capitalize(mapped.plural) : capitalize(tableName);
|
|
3241
3402
|
const updateCountFieldName = `${prefixes.update}${pluralNoun}Count`;
|
|
3242
3403
|
const deleteCountFieldName = `${prefixes.delete}${pluralNoun}Count`;
|
|
@@ -3256,6 +3417,8 @@ var computeResolverFieldNames = (tableName, typeNameMapper, prefixes, suffixes)
|
|
|
3256
3417
|
updateCountFieldName,
|
|
3257
3418
|
deleteFieldName,
|
|
3258
3419
|
deleteSingleFieldName,
|
|
3420
|
+
restoreFieldName,
|
|
3421
|
+
restoreSingleFieldName,
|
|
3259
3422
|
deleteCountFieldName
|
|
3260
3423
|
};
|
|
3261
3424
|
};
|
|
@@ -3360,7 +3523,13 @@ var generateWriteCount = ({
|
|
|
3360
3523
|
args: queryArgs
|
|
3361
3524
|
};
|
|
3362
3525
|
};
|
|
3363
|
-
var
|
|
3526
|
+
var deletedArg = (softDelete, tableName) => softDelete?.(tableName) ? {
|
|
3527
|
+
deleted: {
|
|
3528
|
+
type: deletedFilterEnum,
|
|
3529
|
+
description: "Whether rows marked deleted are returned. Defaults to EXCLUDE."
|
|
3530
|
+
}
|
|
3531
|
+
} : {};
|
|
3532
|
+
var selectArrayArgs = (orderArgs, filterArgs, distinctEnum, softDelete, tableName) => ({
|
|
3364
3533
|
offset: { type: GraphQLInt3 },
|
|
3365
3534
|
limit: { type: GraphQLInt3 },
|
|
3366
3535
|
orderBy: { type: orderArgs },
|
|
@@ -3369,12 +3538,14 @@ var selectArrayArgs = (orderArgs, filterArgs, distinctEnum) => ({
|
|
|
3369
3538
|
type: GraphQLString2,
|
|
3370
3539
|
description: "Keyset pagination: only return rows strictly after this cursor (a row's `cursor` field from a previous page, under the same orderBy)."
|
|
3371
3540
|
},
|
|
3372
|
-
...distinctEnum ? { distinct: { type: new GraphQLList3(new GraphQLNonNull3(distinctEnum)) } } : {}
|
|
3541
|
+
...distinctEnum ? { distinct: { type: new GraphQLList3(new GraphQLNonNull3(distinctEnum)) } } : {},
|
|
3542
|
+
...deletedArg(softDelete, tableName)
|
|
3373
3543
|
});
|
|
3374
|
-
var selectSingleArgs = (orderArgs, filterArgs) => ({
|
|
3544
|
+
var selectSingleArgs = (orderArgs, filterArgs, softDelete, tableName) => ({
|
|
3375
3545
|
offset: { type: GraphQLInt3 },
|
|
3376
3546
|
orderBy: { type: orderArgs },
|
|
3377
|
-
where: { type: filterArgs }
|
|
3547
|
+
where: { type: filterArgs },
|
|
3548
|
+
...deletedArg(softDelete, tableName)
|
|
3378
3549
|
});
|
|
3379
3550
|
var runRelationalSelect = async (opts) => {
|
|
3380
3551
|
const {
|
|
@@ -3392,7 +3563,9 @@ var runRelationalSelect = async (opts) => {
|
|
|
3392
3563
|
single,
|
|
3393
3564
|
filterCtx,
|
|
3394
3565
|
pkNames,
|
|
3395
|
-
after
|
|
3566
|
+
after,
|
|
3567
|
+
scope,
|
|
3568
|
+
deleted
|
|
3396
3569
|
} = opts;
|
|
3397
3570
|
const distinct = opts.distinct?.length ? opts.distinct : void 0;
|
|
3398
3571
|
const cursorSelected = !single && isCursorFieldSelected(parsedInfo.fieldsByTypeName[typeName], table);
|
|
@@ -3424,7 +3597,13 @@ var runRelationalSelect = async (opts) => {
|
|
|
3424
3597
|
tableName,
|
|
3425
3598
|
distinct,
|
|
3426
3599
|
pkNames: pkNames ?? [],
|
|
3427
|
-
where:
|
|
3600
|
+
where: withScope(
|
|
3601
|
+
scope,
|
|
3602
|
+
tableName,
|
|
3603
|
+
table,
|
|
3604
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
3605
|
+
deleted
|
|
3606
|
+
),
|
|
3428
3607
|
orderBy,
|
|
3429
3608
|
limit: single ? 1 : opts.limit,
|
|
3430
3609
|
offset
|
|
@@ -3451,15 +3630,24 @@ var runRelationalSelect = async (opts) => {
|
|
|
3451
3630
|
// exactly the ordering the cursor encodes and the keyset predicate compares against.
|
|
3452
3631
|
(aliasedTable2) => cursorOrderExprs(aliasedTable2, cursorEntries)
|
|
3453
3632
|
) : orderBy ? (aliasedTable2) => extractOrderBy(aliasedTable2, orderBy, relationFilterCtx(filterCtx, tableName), where) : needsDefaultOrder && pkNames?.length ? (aliasedTable2) => primaryKeyOrderExprs(aliasedTable2, pkNames) : void 0,
|
|
3454
|
-
where: distinctKeys ?
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3633
|
+
where: distinctKeys ? (
|
|
3634
|
+
// The distinct pass already ran inside the scope, so the keys it picked are in it.
|
|
3635
|
+
{ RAW: (aliasedTable2) => primaryKeyRestriction(aliasedTable2, pkNames, distinctKeys) }
|
|
3636
|
+
) : where || cursorValues || scope?.has(tableName, deleted) ? {
|
|
3637
|
+
RAW: (aliasedTable2) => withScope(
|
|
3638
|
+
scope,
|
|
3639
|
+
tableName,
|
|
3640
|
+
aliasedTable2,
|
|
3641
|
+
and(
|
|
3642
|
+
where ? extractFilters(aliasedTable2, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
3643
|
+
cursorValues ? buildCursorCondition(
|
|
3644
|
+
aliasedTable2,
|
|
3645
|
+
cursorEntries,
|
|
3646
|
+
cursorValues,
|
|
3647
|
+
opts.nullOrdering ?? "nulls-smallest"
|
|
3648
|
+
) : void 0
|
|
3649
|
+
),
|
|
3650
|
+
deleted
|
|
3463
3651
|
)
|
|
3464
3652
|
} : void 0,
|
|
3465
3653
|
with: relationMap[tableName] ? extractRelationsParams(
|
|
@@ -3470,7 +3658,8 @@ var runRelationalSelect = async (opts) => {
|
|
|
3470
3658
|
typeName,
|
|
3471
3659
|
typeNameMapper,
|
|
3472
3660
|
filterCtx,
|
|
3473
|
-
opts.limits
|
|
3661
|
+
opts.limits,
|
|
3662
|
+
scope
|
|
3474
3663
|
) : void 0
|
|
3475
3664
|
};
|
|
3476
3665
|
if (single) {
|
|
@@ -3807,10 +3996,11 @@ var assembleAggregateRow = (row, request, target) => {
|
|
|
3807
3996
|
}
|
|
3808
3997
|
return result;
|
|
3809
3998
|
};
|
|
3810
|
-
var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs, filterCtx) => {
|
|
3999
|
+
var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs, filterCtx, policies) => {
|
|
3811
4000
|
const target = aggregateTarget(table, tableName, typeName);
|
|
3812
4001
|
const queryArgs = {
|
|
3813
|
-
where: { type: filterArgs }
|
|
4002
|
+
where: { type: filterArgs },
|
|
4003
|
+
...deletedArg(policies?.softDelete, tableName)
|
|
3814
4004
|
};
|
|
3815
4005
|
return {
|
|
3816
4006
|
name: fieldName,
|
|
@@ -3821,8 +4011,15 @@ var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs,
|
|
|
3821
4011
|
return {};
|
|
3822
4012
|
}
|
|
3823
4013
|
let query = resolveExecutor(db, context).select(request.selection).from(table);
|
|
3824
|
-
|
|
3825
|
-
|
|
4014
|
+
const where = withScope(
|
|
4015
|
+
resolveScope(policies, context, filterCtx),
|
|
4016
|
+
tableName,
|
|
4017
|
+
table,
|
|
4018
|
+
args.where ? extractFilters(table, tableName, args.where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
4019
|
+
args.deleted
|
|
4020
|
+
);
|
|
4021
|
+
if (where) {
|
|
4022
|
+
query = query.where(where);
|
|
3826
4023
|
}
|
|
3827
4024
|
const rows = await query;
|
|
3828
4025
|
return assembleAggregateRow(rows[0] ?? {}, request, target);
|
|
@@ -3834,7 +4031,7 @@ var generateAggregate = (db, tableName, table, typeName, fieldName, filterArgs,
|
|
|
3834
4031
|
};
|
|
3835
4032
|
};
|
|
3836
4033
|
var GROUP_KEY = "__dgql_group_key";
|
|
3837
|
-
var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filterCtx) => {
|
|
4034
|
+
var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filterCtx, policies) => {
|
|
3838
4035
|
return ({ tableName, relationName, relEntry }) => {
|
|
3839
4036
|
const parentTable = tables[tableName];
|
|
3840
4037
|
const targetTableName = relEntry.targetTableName;
|
|
@@ -3861,17 +4058,25 @@ var createRelationAggregateFactory = (db, tables, cacheCtx, typeNameMapper, filt
|
|
|
3861
4058
|
return assembleAggregateRow({}, request, target);
|
|
3862
4059
|
}
|
|
3863
4060
|
const whereArg = args?.where;
|
|
4061
|
+
const deleted = args?.deleted;
|
|
3864
4062
|
const argsKey = JSON.stringify({
|
|
3865
4063
|
where: whereArg ?? null,
|
|
4064
|
+
deleted: deleted ?? null,
|
|
3866
4065
|
selection: Object.keys(request.selection).sort()
|
|
3867
4066
|
});
|
|
3868
4067
|
const loaderKey = `${tableName}::${relationName}::aggregate::${argsKey}`;
|
|
3869
4068
|
const loader = getOrCreateLoader(context, loaderKey, async (parentIds) => {
|
|
3870
4069
|
const executor = resolveExecutor(db, context);
|
|
3871
4070
|
const uniqueIds = [...new Set(parentIds)];
|
|
3872
|
-
const whereCondition =
|
|
3873
|
-
|
|
3874
|
-
|
|
4071
|
+
const whereCondition = withScope(
|
|
4072
|
+
resolveScope(policies, context, filterCtx),
|
|
4073
|
+
targetTableName,
|
|
4074
|
+
targetTable,
|
|
4075
|
+
and2(
|
|
4076
|
+
inArray2(foreignCol, uniqueIds),
|
|
4077
|
+
whereArg ? extractFilters(targetTable, targetTableName, whereArg, relationFilterCtx(filterCtx, targetTableName)) : void 0
|
|
4078
|
+
),
|
|
4079
|
+
deleted
|
|
3875
4080
|
);
|
|
3876
4081
|
const rows = await executor.select({ [GROUP_KEY]: foreignCol, ...request.selection }).from(targetTable).where(whereCondition).groupBy(foreignCol);
|
|
3877
4082
|
const byKey = new Map(rows.map((row) => [row[GROUP_KEY], row]));
|
|
@@ -4004,7 +4209,7 @@ var buildHavingCondition = (having, columns) => {
|
|
|
4004
4209
|
}
|
|
4005
4210
|
return conditions.length ? and2(...conditions) : void 0;
|
|
4006
4211
|
};
|
|
4007
|
-
var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, groupByEnum, havingInput, filterCtx) => {
|
|
4212
|
+
var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, groupByEnum, havingInput, filterCtx, policies) => {
|
|
4008
4213
|
const target = aggregateTarget(table, tableName, typeName);
|
|
4009
4214
|
const groupable = groupableColumns(table, tableName);
|
|
4010
4215
|
const columns = getColumns3(table);
|
|
@@ -4015,7 +4220,8 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
4015
4220
|
description: "Columns to group by. One result row per distinct combination of their values."
|
|
4016
4221
|
},
|
|
4017
4222
|
where: { type: filterArgs, description: "Filters the rows before they are grouped." },
|
|
4018
|
-
having: { type: havingInput, description: "Filters the groups after they are aggregated." }
|
|
4223
|
+
having: { type: havingInput, description: "Filters the groups after they are aggregated." },
|
|
4224
|
+
...deletedArg(policies?.softDelete, tableName)
|
|
4019
4225
|
};
|
|
4020
4226
|
return {
|
|
4021
4227
|
name: fieldName,
|
|
@@ -4038,8 +4244,15 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
4038
4244
|
...request.selection
|
|
4039
4245
|
};
|
|
4040
4246
|
let query = resolveExecutor(db, context).select(selection).from(table);
|
|
4041
|
-
|
|
4042
|
-
|
|
4247
|
+
const where = withScope(
|
|
4248
|
+
resolveScope(policies, context, filterCtx),
|
|
4249
|
+
tableName,
|
|
4250
|
+
table,
|
|
4251
|
+
args.where ? extractFilters(table, tableName, args.where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
4252
|
+
args.deleted
|
|
4253
|
+
);
|
|
4254
|
+
if (where) {
|
|
4255
|
+
query = query.where(where);
|
|
4043
4256
|
}
|
|
4044
4257
|
query = query.groupBy(...keyColumns.map(([, column]) => column));
|
|
4045
4258
|
const havingCondition = buildHavingCondition(args.having, columns);
|
|
@@ -4065,7 +4278,7 @@ var generateGroupBy = (db, tableName, table, typeName, fieldName, filterArgs, gr
|
|
|
4065
4278
|
};
|
|
4066
4279
|
|
|
4067
4280
|
// src/util/builders/mysql.ts
|
|
4068
|
-
var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
4281
|
+
var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
4069
4282
|
const queryBase = db.query[tableName];
|
|
4070
4283
|
if (!queryBase) {
|
|
4071
4284
|
throw new Error(
|
|
@@ -4078,7 +4291,9 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
4078
4291
|
const queryArgs = selectArrayArgs(
|
|
4079
4292
|
orderArgs,
|
|
4080
4293
|
filterArgs,
|
|
4081
|
-
distinctEnabled ? generateDistinctEnum(table, typeName) : void 0
|
|
4294
|
+
distinctEnabled ? generateDistinctEnum(table, typeName) : void 0,
|
|
4295
|
+
policies?.softDelete,
|
|
4296
|
+
tableName
|
|
4082
4297
|
);
|
|
4083
4298
|
return {
|
|
4084
4299
|
name: fieldName,
|
|
@@ -4100,6 +4315,7 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
4100
4315
|
single: false,
|
|
4101
4316
|
filterCtx,
|
|
4102
4317
|
limits,
|
|
4318
|
+
scope: policies?.scope?.(context),
|
|
4103
4319
|
pkNames,
|
|
4104
4320
|
db: executor,
|
|
4105
4321
|
// MySQL sorts NULLs as the smallest values (first in ASC).
|
|
@@ -4112,14 +4328,14 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
|
|
|
4112
4328
|
args: queryArgs
|
|
4113
4329
|
};
|
|
4114
4330
|
};
|
|
4115
|
-
var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
4331
|
+
var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
4116
4332
|
const queryBase = db.query[tableName];
|
|
4117
4333
|
if (!queryBase) {
|
|
4118
4334
|
throw new Error(
|
|
4119
4335
|
`Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
|
|
4120
4336
|
);
|
|
4121
4337
|
}
|
|
4122
|
-
const queryArgs = selectSingleArgs(orderArgs, filterArgs);
|
|
4338
|
+
const queryArgs = selectSingleArgs(orderArgs, filterArgs, policies?.softDelete, tableName);
|
|
4123
4339
|
const table = tables[tableName];
|
|
4124
4340
|
const pkNames = mysqlPrimaryKeyPropNames(table);
|
|
4125
4341
|
return {
|
|
@@ -4141,6 +4357,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
4141
4357
|
single: true,
|
|
4142
4358
|
filterCtx,
|
|
4143
4359
|
limits,
|
|
4360
|
+
scope: policies?.scope?.(context),
|
|
4144
4361
|
pkNames,
|
|
4145
4362
|
db: executor
|
|
4146
4363
|
});
|
|
@@ -4151,7 +4368,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
4151
4368
|
args: queryArgs
|
|
4152
4369
|
};
|
|
4153
4370
|
};
|
|
4154
|
-
var generateInsertArray = (db,
|
|
4371
|
+
var generateInsertArray = (db, tableName, table, baseType, fieldName, txCtx, policies) => {
|
|
4155
4372
|
const queryArgs = {
|
|
4156
4373
|
values: {
|
|
4157
4374
|
type: new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(baseType)))
|
|
@@ -4162,7 +4379,11 @@ var generateInsertArray = (db, _tableName, table, baseType, fieldName, txCtx) =>
|
|
|
4162
4379
|
resolver: async (_source, args, context, info) => {
|
|
4163
4380
|
try {
|
|
4164
4381
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4165
|
-
const input =
|
|
4382
|
+
const input = applyContextValuesAll(
|
|
4383
|
+
remapFromGraphQLArrayInput(args.values, table),
|
|
4384
|
+
policies?.contextValues?.(tableName),
|
|
4385
|
+
context
|
|
4386
|
+
);
|
|
4166
4387
|
if (!input.length) {
|
|
4167
4388
|
throw new GraphQLError6("No values were provided!");
|
|
4168
4389
|
}
|
|
@@ -4176,7 +4397,7 @@ var generateInsertArray = (db, _tableName, table, baseType, fieldName, txCtx) =>
|
|
|
4176
4397
|
args: queryArgs
|
|
4177
4398
|
};
|
|
4178
4399
|
};
|
|
4179
|
-
var generateInsertSingle = (db,
|
|
4400
|
+
var generateInsertSingle = (db, tableName, table, baseType, fieldName, txCtx, policies) => {
|
|
4180
4401
|
const queryArgs = {
|
|
4181
4402
|
values: {
|
|
4182
4403
|
type: new GraphQLNonNull5(baseType)
|
|
@@ -4187,7 +4408,11 @@ var generateInsertSingle = (db, _tableName, table, baseType, fieldName, txCtx) =
|
|
|
4187
4408
|
resolver: async (_source, args, context, info) => {
|
|
4188
4409
|
try {
|
|
4189
4410
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4190
|
-
const input =
|
|
4411
|
+
const input = applyContextValues(
|
|
4412
|
+
remapFromGraphQLSingleInput(args.values, table),
|
|
4413
|
+
policies?.contextValues?.(tableName),
|
|
4414
|
+
context
|
|
4415
|
+
);
|
|
4191
4416
|
await executor.insert(table).values(input);
|
|
4192
4417
|
return { isSuccess: true };
|
|
4193
4418
|
});
|
|
@@ -4198,7 +4423,7 @@ var generateInsertSingle = (db, _tableName, table, baseType, fieldName, txCtx) =
|
|
|
4198
4423
|
args: queryArgs
|
|
4199
4424
|
};
|
|
4200
4425
|
};
|
|
4201
|
-
var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, txCtx) => {
|
|
4426
|
+
var generateUpsert = (db, tableName, table, baseType, onConflictType, fieldName, single, txCtx, policies) => {
|
|
4202
4427
|
const queryArgs = {
|
|
4203
4428
|
values: {
|
|
4204
4429
|
type: single ? new GraphQLNonNull5(baseType) : new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(baseType)))
|
|
@@ -4214,7 +4439,11 @@ var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, tx
|
|
|
4214
4439
|
resolver: async (_source, args, context, info) => {
|
|
4215
4440
|
try {
|
|
4216
4441
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4217
|
-
const input =
|
|
4442
|
+
const input = applyContextValuesAll(
|
|
4443
|
+
single ? [remapFromGraphQLSingleInput(args.values, table)] : remapFromGraphQLArrayInput(args.values, table),
|
|
4444
|
+
policies?.contextValues?.(tableName),
|
|
4445
|
+
context
|
|
4446
|
+
);
|
|
4218
4447
|
if (!input.length) {
|
|
4219
4448
|
throw new GraphQLError6("No values were provided!");
|
|
4220
4449
|
}
|
|
@@ -4241,7 +4470,7 @@ var generateUpsert = (db, table, baseType, onConflictType, fieldName, single, tx
|
|
|
4241
4470
|
args: queryArgs
|
|
4242
4471
|
};
|
|
4243
4472
|
};
|
|
4244
|
-
var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx) => {
|
|
4473
|
+
var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx, policies) => {
|
|
4245
4474
|
const queryArgs = {
|
|
4246
4475
|
set: {
|
|
4247
4476
|
type: new GraphQLNonNull5(setArgs)
|
|
@@ -4256,12 +4485,21 @@ var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, sing
|
|
|
4256
4485
|
try {
|
|
4257
4486
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4258
4487
|
const { where, set } = args;
|
|
4259
|
-
const
|
|
4488
|
+
const scope = policies?.scope?.(context);
|
|
4489
|
+
const input = stripContextValues(
|
|
4490
|
+
remapUpdateInput(set, table, tableName),
|
|
4491
|
+
policies?.contextValues?.(tableName)
|
|
4492
|
+
);
|
|
4260
4493
|
if (!Object.keys(input).length) {
|
|
4261
4494
|
throw new GraphQLError6("Unable to update with no values specified!");
|
|
4262
4495
|
}
|
|
4263
4496
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
4264
|
-
const filters =
|
|
4497
|
+
const filters = withScope(
|
|
4498
|
+
scope,
|
|
4499
|
+
tableName,
|
|
4500
|
+
table,
|
|
4501
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
4502
|
+
);
|
|
4265
4503
|
if (single) {
|
|
4266
4504
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
4267
4505
|
}
|
|
@@ -4279,7 +4517,7 @@ var generateUpdate = (db, tableName, table, setArgs, filterArgs, fieldName, sing
|
|
|
4279
4517
|
args: queryArgs
|
|
4280
4518
|
};
|
|
4281
4519
|
};
|
|
4282
|
-
var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filterCtx, txCtx) => {
|
|
4520
|
+
var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filterCtx, txCtx, policies) => {
|
|
4283
4521
|
const queryArgs = {
|
|
4284
4522
|
updates: {
|
|
4285
4523
|
type: new GraphQLNonNull5(new GraphQLList5(new GraphQLNonNull5(updateManyInput)))
|
|
@@ -4294,14 +4532,21 @@ var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filt
|
|
|
4294
4532
|
if (!updates.length) {
|
|
4295
4533
|
throw new GraphQLError6("No updates were provided!");
|
|
4296
4534
|
}
|
|
4535
|
+
const scope = policies?.scope?.(context);
|
|
4536
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
4297
4537
|
const entries = updates.map(({ where, set }) => {
|
|
4298
|
-
const input = remapUpdateInput(set, table, tableName);
|
|
4538
|
+
const input = stripContextValues(remapUpdateInput(set, table, tableName), contextColumns);
|
|
4299
4539
|
if (!Object.keys(input).length) {
|
|
4300
4540
|
throw new GraphQLError6("Unable to update with no values specified!");
|
|
4301
4541
|
}
|
|
4302
4542
|
return {
|
|
4303
4543
|
set: input,
|
|
4304
|
-
filters:
|
|
4544
|
+
filters: withScope(
|
|
4545
|
+
scope,
|
|
4546
|
+
tableName,
|
|
4547
|
+
table,
|
|
4548
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
4549
|
+
)
|
|
4305
4550
|
};
|
|
4306
4551
|
});
|
|
4307
4552
|
await executor.transaction(async (tx) => {
|
|
@@ -4322,7 +4567,8 @@ var generateUpdateMany = (db, tableName, table, updateManyInput, fieldName, filt
|
|
|
4322
4567
|
args: queryArgs
|
|
4323
4568
|
};
|
|
4324
4569
|
};
|
|
4325
|
-
var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx) => {
|
|
4570
|
+
var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requireWhere, filterCtx, txCtx, policies, restore = false) => {
|
|
4571
|
+
const softDelete = policies?.softDelete?.(tableName);
|
|
4326
4572
|
const queryArgs = {
|
|
4327
4573
|
where: {
|
|
4328
4574
|
type: single || requireWhere ? new GraphQLNonNull5(filterArgs) : filterArgs
|
|
@@ -4334,12 +4580,19 @@ var generateDelete = (db, tableName, table, filterArgs, fieldName, single, requi
|
|
|
4334
4580
|
try {
|
|
4335
4581
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
4336
4582
|
const { where } = args;
|
|
4583
|
+
const scope = policies?.scope?.(context);
|
|
4337
4584
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
4338
|
-
const filters =
|
|
4585
|
+
const filters = withScope(
|
|
4586
|
+
scope,
|
|
4587
|
+
tableName,
|
|
4588
|
+
table,
|
|
4589
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0,
|
|
4590
|
+
restore ? "ONLY" : void 0
|
|
4591
|
+
);
|
|
4339
4592
|
if (single) {
|
|
4340
4593
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
4341
4594
|
}
|
|
4342
|
-
let query = executor.delete(table);
|
|
4595
|
+
let query = softDelete ? executor.update(table).set({ [softDelete.columnName]: restore ? softDelete.writeRestored : softDelete.writeDeleted() }) : executor.delete(table);
|
|
4343
4596
|
if (filters) {
|
|
4344
4597
|
query = query.where(filters);
|
|
4345
4598
|
}
|
|
@@ -4383,12 +4636,17 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4383
4636
|
attachTargetPrimaryKeys(namedRelations, tables, mysqlPrimaryKeyPropNames);
|
|
4384
4637
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
4385
4638
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
4639
|
+
const tablePolicies = options.policies;
|
|
4640
|
+
const contextValuesOf = tablePolicies?.contextValues;
|
|
4641
|
+
const softDeleteOf = tablePolicies?.softDelete;
|
|
4642
|
+
const policies = bindPolicies(tablePolicies, filterCtx);
|
|
4386
4643
|
const resolverFactory = createRelationResolverFactory(
|
|
4387
4644
|
db,
|
|
4388
4645
|
tables,
|
|
4389
4646
|
"nulls-smallest",
|
|
4390
4647
|
filterCtx,
|
|
4391
|
-
limits
|
|
4648
|
+
limits,
|
|
4649
|
+
tablePolicies
|
|
4392
4650
|
);
|
|
4393
4651
|
const cacheCtx = {
|
|
4394
4652
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -4406,9 +4664,11 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4406
4664
|
limits,
|
|
4407
4665
|
docs: options.docs ?? {},
|
|
4408
4666
|
primaryKeyOf: (name) => tables[name] ? mysqlPrimaryKeyPropNames(tables[name]) : [],
|
|
4667
|
+
contextValuesOf,
|
|
4668
|
+
softDeleteOf,
|
|
4409
4669
|
featureOf
|
|
4410
4670
|
};
|
|
4411
|
-
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx) : void 0;
|
|
4671
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, tablePolicies) : void 0;
|
|
4412
4672
|
const queries = {};
|
|
4413
4673
|
const mutations = {};
|
|
4414
4674
|
const mutationTxCtx = createMutationTxCtx(options.transactions);
|
|
@@ -4464,8 +4724,11 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4464
4724
|
updateCountFieldName,
|
|
4465
4725
|
deleteFieldName,
|
|
4466
4726
|
deleteSingleFieldName,
|
|
4727
|
+
restoreFieldName,
|
|
4728
|
+
restoreSingleFieldName,
|
|
4467
4729
|
deleteCountFieldName
|
|
4468
4730
|
} = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
4731
|
+
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
4469
4732
|
const selectArrGenerated = generateSelectArray(
|
|
4470
4733
|
db,
|
|
4471
4734
|
tableName,
|
|
@@ -4478,7 +4741,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4478
4741
|
typeNameMapper,
|
|
4479
4742
|
filterCtx,
|
|
4480
4743
|
tableFeatures.distinct,
|
|
4481
|
-
limits
|
|
4744
|
+
limits,
|
|
4745
|
+
policies
|
|
4482
4746
|
);
|
|
4483
4747
|
const selectSingleGenerated = generateSelectSingle(
|
|
4484
4748
|
db,
|
|
@@ -4491,7 +4755,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4491
4755
|
typeName,
|
|
4492
4756
|
typeNameMapper,
|
|
4493
4757
|
filterCtx,
|
|
4494
|
-
limits
|
|
4758
|
+
limits,
|
|
4759
|
+
policies
|
|
4495
4760
|
);
|
|
4496
4761
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray(
|
|
4497
4762
|
db,
|
|
@@ -4499,7 +4764,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4499
4764
|
schema[tableName],
|
|
4500
4765
|
insertInput,
|
|
4501
4766
|
createArrayFieldName,
|
|
4502
|
-
mutationTxCtx
|
|
4767
|
+
mutationTxCtx,
|
|
4768
|
+
policies
|
|
4503
4769
|
) : void 0;
|
|
4504
4770
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle(
|
|
4505
4771
|
db,
|
|
@@ -4507,7 +4773,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4507
4773
|
schema[tableName],
|
|
4508
4774
|
insertInput,
|
|
4509
4775
|
createSingleFieldName,
|
|
4510
|
-
mutationTxCtx
|
|
4776
|
+
mutationTxCtx,
|
|
4777
|
+
policies
|
|
4511
4778
|
) : void 0;
|
|
4512
4779
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
4513
4780
|
table: schema[tableName],
|
|
@@ -4518,21 +4785,25 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4518
4785
|
}) : void 0;
|
|
4519
4786
|
const upsertArrGenerated = onConflictInput ? generateUpsert(
|
|
4520
4787
|
db,
|
|
4788
|
+
tableName,
|
|
4521
4789
|
schema[tableName],
|
|
4522
4790
|
insertInput,
|
|
4523
4791
|
onConflictInput,
|
|
4524
4792
|
upsertArrayFieldName,
|
|
4525
4793
|
false,
|
|
4526
|
-
mutationTxCtx
|
|
4794
|
+
mutationTxCtx,
|
|
4795
|
+
policies
|
|
4527
4796
|
) : void 0;
|
|
4528
4797
|
const upsertSingleGenerated = onConflictInput ? generateUpsert(
|
|
4529
4798
|
db,
|
|
4799
|
+
tableName,
|
|
4530
4800
|
schema[tableName],
|
|
4531
4801
|
insertInput,
|
|
4532
4802
|
onConflictInput,
|
|
4533
4803
|
upsertSingleFieldName,
|
|
4534
4804
|
true,
|
|
4535
|
-
mutationTxCtx
|
|
4805
|
+
mutationTxCtx,
|
|
4806
|
+
policies
|
|
4536
4807
|
) : void 0;
|
|
4537
4808
|
const updateGenerated = tableFeatures.update ? generateUpdate(
|
|
4538
4809
|
db,
|
|
@@ -4544,7 +4815,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4544
4815
|
false,
|
|
4545
4816
|
tableFeatures.requireWhere,
|
|
4546
4817
|
filterCtx,
|
|
4547
|
-
mutationTxCtx
|
|
4818
|
+
mutationTxCtx,
|
|
4819
|
+
policies
|
|
4548
4820
|
) : void 0;
|
|
4549
4821
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate(
|
|
4550
4822
|
db,
|
|
@@ -4556,7 +4828,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4556
4828
|
true,
|
|
4557
4829
|
tableFeatures.requireWhere,
|
|
4558
4830
|
filterCtx,
|
|
4559
|
-
mutationTxCtx
|
|
4831
|
+
mutationTxCtx,
|
|
4832
|
+
policies
|
|
4560
4833
|
) : void 0;
|
|
4561
4834
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
4562
4835
|
const updateManyGenerated = updateManyInput ? generateUpdateMany(
|
|
@@ -4566,7 +4839,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4566
4839
|
updateManyInput,
|
|
4567
4840
|
updateManyFieldName,
|
|
4568
4841
|
filterCtx,
|
|
4569
|
-
mutationTxCtx
|
|
4842
|
+
mutationTxCtx,
|
|
4843
|
+
policies
|
|
4570
4844
|
) : void 0;
|
|
4571
4845
|
const deleteGenerated = tableFeatures.delete ? generateDelete(
|
|
4572
4846
|
db,
|
|
@@ -4577,7 +4851,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4577
4851
|
false,
|
|
4578
4852
|
tableFeatures.requireWhere,
|
|
4579
4853
|
filterCtx,
|
|
4580
|
-
mutationTxCtx
|
|
4854
|
+
mutationTxCtx,
|
|
4855
|
+
policies
|
|
4581
4856
|
) : void 0;
|
|
4582
4857
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete(
|
|
4583
4858
|
db,
|
|
@@ -4588,7 +4863,34 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4588
4863
|
true,
|
|
4589
4864
|
tableFeatures.requireWhere,
|
|
4590
4865
|
filterCtx,
|
|
4591
|
-
mutationTxCtx
|
|
4866
|
+
mutationTxCtx,
|
|
4867
|
+
policies
|
|
4868
|
+
) : void 0;
|
|
4869
|
+
const restoreGenerated = softDeleteInfo ? generateDelete(
|
|
4870
|
+
db,
|
|
4871
|
+
tableName,
|
|
4872
|
+
schema[tableName],
|
|
4873
|
+
tableFilters,
|
|
4874
|
+
restoreFieldName,
|
|
4875
|
+
false,
|
|
4876
|
+
tableFeatures.requireWhere,
|
|
4877
|
+
filterCtx,
|
|
4878
|
+
mutationTxCtx,
|
|
4879
|
+
policies,
|
|
4880
|
+
true
|
|
4881
|
+
) : void 0;
|
|
4882
|
+
const restoreSingleGenerated = softDeleteInfo ? generateDelete(
|
|
4883
|
+
db,
|
|
4884
|
+
tableName,
|
|
4885
|
+
schema[tableName],
|
|
4886
|
+
tableFilters,
|
|
4887
|
+
restoreSingleFieldName,
|
|
4888
|
+
true,
|
|
4889
|
+
tableFeatures.requireWhere,
|
|
4890
|
+
filterCtx,
|
|
4891
|
+
mutationTxCtx,
|
|
4892
|
+
policies,
|
|
4893
|
+
true
|
|
4592
4894
|
) : void 0;
|
|
4593
4895
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
4594
4896
|
db,
|
|
@@ -4621,7 +4923,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4621
4923
|
typeName,
|
|
4622
4924
|
aggregateFieldName,
|
|
4623
4925
|
tableFilters,
|
|
4624
|
-
filterCtx
|
|
4926
|
+
filterCtx,
|
|
4927
|
+
tablePolicies
|
|
4625
4928
|
) : void 0;
|
|
4626
4929
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
4627
4930
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -4635,7 +4938,8 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4635
4938
|
tableFilters,
|
|
4636
4939
|
groupByEnum,
|
|
4637
4940
|
havingInput,
|
|
4638
|
-
filterCtx
|
|
4941
|
+
filterCtx,
|
|
4942
|
+
tablePolicies
|
|
4639
4943
|
) : void 0;
|
|
4640
4944
|
queries[selectArrGenerated.name] = {
|
|
4641
4945
|
type: selectArrOutput,
|
|
@@ -4685,7 +4989,9 @@ var generateSchemaData = (db, schema, relations, options) => {
|
|
|
4685
4989
|
[updateManyGenerated, { operation: "updateMany", single: false, targetArg: "updates" }],
|
|
4686
4990
|
[updateSingleGenerated, { operation: "update", single: true, targetArg: "where" }],
|
|
4687
4991
|
[deleteGenerated, { operation: "delete", single: false, targetArg: "where" }],
|
|
4688
|
-
[deleteSingleGenerated, { operation: "delete", single: true, targetArg: "where" }]
|
|
4992
|
+
[deleteSingleGenerated, { operation: "delete", single: true, targetArg: "where" }],
|
|
4993
|
+
[restoreGenerated, { operation: "restore", single: false, targetArg: "where" }],
|
|
4994
|
+
[restoreSingleGenerated, { operation: "restore", single: true, targetArg: "where" }]
|
|
4689
4995
|
];
|
|
4690
4996
|
for (const [generated, meta] of generatedMutations) {
|
|
4691
4997
|
if (generated) {
|
|
@@ -4874,8 +5180,9 @@ var createNestedWriteTypes = (params) => {
|
|
|
4874
5180
|
return cached;
|
|
4875
5181
|
}
|
|
4876
5182
|
const omitted = plan.fkSide === "child" ? plan.foreignColPropName : void 0;
|
|
5183
|
+
const contextColumns = cacheCtx.contextValuesOf?.(plan.targetTableName);
|
|
4877
5184
|
const fields = Object.fromEntries(
|
|
4878
|
-
Object.entries(visibleColumns(plan.targetTable)).filter(([columnName]) => columnName !== omitted).map(([columnName, column]) => [
|
|
5185
|
+
Object.entries(visibleColumns(plan.targetTable)).filter(([columnName]) => columnName !== omitted && !contextColumns?.[columnName]).map(([columnName, column]) => [
|
|
4879
5186
|
columnName,
|
|
4880
5187
|
drizzleColumnToGraphQLType(column, columnName, plan.targetTableName, false, true, true)
|
|
4881
5188
|
])
|
|
@@ -4974,8 +5281,8 @@ var createNestedWriteTypes = (params) => {
|
|
|
4974
5281
|
var mergedOps = (entries) => Object.assign({}, ...entries.map((entry) => entry.ops));
|
|
4975
5282
|
var asArray = (value) => Array.isArray(value) ? value : value === void 0 ? [] : [value];
|
|
4976
5283
|
var createNestedWriteRuntime = (params) => {
|
|
4977
|
-
const { plans, filterCtx } = params;
|
|
4978
|
-
const conditionOf = (plan, filter, operation) => {
|
|
5284
|
+
const { plans, filterCtx, policies, contextValues } = params;
|
|
5285
|
+
const conditionOf = (plan, filter, operation, scope) => {
|
|
4979
5286
|
const condition = extractFilters(
|
|
4980
5287
|
plan.targetTable,
|
|
4981
5288
|
plan.targetTableName,
|
|
@@ -4987,7 +5294,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4987
5294
|
`Drizzle-GraphQL Error: '${operation}' on '${plan.relationName}' needs a filter that selects rows \u2014 it was given one that matches everything.`
|
|
4988
5295
|
);
|
|
4989
5296
|
}
|
|
4990
|
-
return condition;
|
|
5297
|
+
return withScope(scope, plan.targetTableName, plan.targetTable, condition);
|
|
4991
5298
|
};
|
|
4992
5299
|
const assertSingleOperation = (plan, op) => {
|
|
4993
5300
|
const supplied = ["create", "connect", "disconnect"].filter((key) => op[key] !== void 0 && op[key] !== null);
|
|
@@ -4997,7 +5304,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
4997
5304
|
);
|
|
4998
5305
|
}
|
|
4999
5306
|
};
|
|
5000
|
-
const detachAll = async (executor, plan, key) => executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(eq3(plan.foreignCol, key));
|
|
5307
|
+
const detachAll = async (executor, plan, key, scope) => executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(withScope(scope, plan.targetTableName, plan.targetTable, eq3(plan.foreignCol, key)));
|
|
5001
5308
|
return {
|
|
5002
5309
|
enabled: (tableName) => !!plans[tableName],
|
|
5003
5310
|
split: (tableName, values) => {
|
|
@@ -5031,12 +5338,13 @@ var createNestedWriteRuntime = (params) => {
|
|
|
5031
5338
|
}
|
|
5032
5339
|
return columns;
|
|
5033
5340
|
},
|
|
5034
|
-
applyParentSide: async (executor, tableName, ops) => {
|
|
5341
|
+
applyParentSide: async (executor, tableName, ops, context) => {
|
|
5035
5342
|
const tablePlans = plans[tableName];
|
|
5036
5343
|
const patch = {};
|
|
5037
5344
|
if (!tablePlans) {
|
|
5038
5345
|
return patch;
|
|
5039
5346
|
}
|
|
5347
|
+
const scope = resolveScope(policies, context, filterCtx);
|
|
5040
5348
|
for (const [relationName, op] of Object.entries(ops)) {
|
|
5041
5349
|
const plan = tablePlans[relationName];
|
|
5042
5350
|
if (!plan || plan.fkSide !== "parent") {
|
|
@@ -5044,7 +5352,11 @@ var createNestedWriteRuntime = (params) => {
|
|
|
5044
5352
|
}
|
|
5045
5353
|
assertSingleOperation(plan, op);
|
|
5046
5354
|
if (op["create"] !== void 0) {
|
|
5047
|
-
const values =
|
|
5355
|
+
const values = applyContextValues(
|
|
5356
|
+
remapFromGraphQLSingleInput({ ...op["create"] }, plan.targetTable),
|
|
5357
|
+
contextValues?.(plan.targetTableName),
|
|
5358
|
+
context
|
|
5359
|
+
);
|
|
5048
5360
|
const inserted = await executor.insert(plan.targetTable).values(values).returning();
|
|
5049
5361
|
const created = inserted[0];
|
|
5050
5362
|
if (!created) {
|
|
@@ -5054,7 +5366,7 @@ var createNestedWriteRuntime = (params) => {
|
|
|
5054
5366
|
}
|
|
5055
5367
|
patch[plan.localColPropName] = created[plan.foreignColPropName];
|
|
5056
5368
|
} else if (op["connect"] !== void 0) {
|
|
5057
|
-
const rows = await executor.select().from(plan.targetTable).where(conditionOf(plan, op["connect"], "connect"));
|
|
5369
|
+
const rows = await executor.select().from(plan.targetTable).where(conditionOf(plan, op["connect"], "connect", scope));
|
|
5058
5370
|
if (rows.length !== 1) {
|
|
5059
5371
|
throw new GraphQLError7(
|
|
5060
5372
|
`Drizzle-GraphQL Error: 'connect' on '${relationName}' matched ${rows.length} rows \u2014 it attaches a single row, so its filter must match exactly one.`
|
|
@@ -5067,11 +5379,12 @@ var createNestedWriteRuntime = (params) => {
|
|
|
5067
5379
|
}
|
|
5068
5380
|
return patch;
|
|
5069
5381
|
},
|
|
5070
|
-
applyChildSide: async (executor, tableName, ops, parentRows) => {
|
|
5382
|
+
applyChildSide: async (executor, tableName, ops, parentRows, context) => {
|
|
5071
5383
|
const tablePlans = plans[tableName];
|
|
5072
5384
|
if (!tablePlans) {
|
|
5073
5385
|
return;
|
|
5074
5386
|
}
|
|
5387
|
+
const scope = resolveScope(policies, context, filterCtx);
|
|
5075
5388
|
for (const [relationName, op] of Object.entries(ops)) {
|
|
5076
5389
|
const plan = tablePlans[relationName];
|
|
5077
5390
|
if (!plan || plan.fkSide !== "child") {
|
|
@@ -5088,34 +5401,38 @@ var createNestedWriteRuntime = (params) => {
|
|
|
5088
5401
|
);
|
|
5089
5402
|
}
|
|
5090
5403
|
if (op["set"] !== void 0) {
|
|
5091
|
-
await detachAll(executor, plan, key);
|
|
5404
|
+
await detachAll(executor, plan, key, scope);
|
|
5092
5405
|
for (const filter of asArray(op["set"])) {
|
|
5093
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "set"));
|
|
5406
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "set", scope));
|
|
5094
5407
|
}
|
|
5095
5408
|
}
|
|
5096
5409
|
if (op["disconnect"] !== void 0) {
|
|
5097
5410
|
if (plan.isOne) {
|
|
5098
5411
|
if (op["disconnect"] === true) {
|
|
5099
|
-
await detachAll(executor, plan, key);
|
|
5412
|
+
await detachAll(executor, plan, key, scope);
|
|
5100
5413
|
}
|
|
5101
5414
|
} else {
|
|
5102
5415
|
for (const filter of asArray(op["disconnect"])) {
|
|
5103
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(and3(eq3(plan.foreignCol, key), conditionOf(plan, filter, "disconnect")));
|
|
5416
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: null }).where(and3(eq3(plan.foreignCol, key), conditionOf(plan, filter, "disconnect", scope)));
|
|
5104
5417
|
}
|
|
5105
5418
|
}
|
|
5106
5419
|
}
|
|
5107
5420
|
const attaches = op["connect"] !== void 0 || op["create"] !== void 0;
|
|
5108
5421
|
if (plan.isOne && attaches && plan.canDetach && op["set"] === void 0) {
|
|
5109
|
-
await detachAll(executor, plan, key);
|
|
5422
|
+
await detachAll(executor, plan, key, scope);
|
|
5110
5423
|
}
|
|
5111
5424
|
if (op["connect"] !== void 0) {
|
|
5112
5425
|
for (const filter of asArray(op["connect"])) {
|
|
5113
|
-
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "connect"));
|
|
5426
|
+
await executor.update(plan.targetTable).set({ [plan.foreignColPropName]: key }).where(conditionOf(plan, filter, "connect", scope));
|
|
5114
5427
|
}
|
|
5115
5428
|
}
|
|
5116
5429
|
if (op["create"] !== void 0) {
|
|
5117
5430
|
const rows = asArray(op["create"]).map((row) => ({
|
|
5118
|
-
...
|
|
5431
|
+
...applyContextValues(
|
|
5432
|
+
remapFromGraphQLSingleInput({ ...row }, plan.targetTable),
|
|
5433
|
+
contextValues?.(plan.targetTableName),
|
|
5434
|
+
context
|
|
5435
|
+
),
|
|
5119
5436
|
[plan.foreignColPropName]: key
|
|
5120
5437
|
}));
|
|
5121
5438
|
if (rows.length) {
|
|
@@ -5128,30 +5445,30 @@ var createNestedWriteRuntime = (params) => {
|
|
|
5128
5445
|
};
|
|
5129
5446
|
};
|
|
5130
5447
|
var writeWithNestedOps = async (params) => {
|
|
5131
|
-
const { executor, runtime, tableName, entries, remapValues, write } = params;
|
|
5448
|
+
const { executor, runtime, tableName, entries, remapValues, write, context } = params;
|
|
5132
5449
|
return executor.transaction(async (tx) => {
|
|
5133
5450
|
const rows = [];
|
|
5134
5451
|
for (const entry of entries) {
|
|
5135
|
-
const patch = await runtime.applyParentSide(tx, tableName, entry.ops);
|
|
5452
|
+
const patch = await runtime.applyParentSide(tx, tableName, entry.ops, context);
|
|
5136
5453
|
const written = await write(tx, { ...remapValues(entry.columns), ...patch });
|
|
5137
|
-
await runtime.applyChildSide(tx, tableName, entry.ops, written);
|
|
5454
|
+
await runtime.applyChildSide(tx, tableName, entry.ops, written, context);
|
|
5138
5455
|
rows.push(...written);
|
|
5139
5456
|
}
|
|
5140
5457
|
return rows;
|
|
5141
5458
|
});
|
|
5142
5459
|
};
|
|
5143
5460
|
var updateWithNestedOps = async (params) => {
|
|
5144
|
-
const { executor, runtime, tableName, columns, ops, remapValues, write } = params;
|
|
5461
|
+
const { executor, runtime, tableName, columns, ops, remapValues, write, context } = params;
|
|
5145
5462
|
return executor.transaction(async (tx) => {
|
|
5146
|
-
const patch = await runtime.applyParentSide(tx, tableName, ops);
|
|
5463
|
+
const patch = await runtime.applyParentSide(tx, tableName, ops, context);
|
|
5147
5464
|
const rows = await write(tx, { ...remapValues(columns), ...patch });
|
|
5148
|
-
await runtime.applyChildSide(tx, tableName, ops, rows);
|
|
5465
|
+
await runtime.applyChildSide(tx, tableName, ops, rows, context);
|
|
5149
5466
|
return rows;
|
|
5150
5467
|
});
|
|
5151
5468
|
};
|
|
5152
5469
|
|
|
5153
5470
|
// src/util/builders/pg.ts
|
|
5154
|
-
var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
5471
|
+
var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
5155
5472
|
const queryBase = db.query[tableName];
|
|
5156
5473
|
const table = tables[tableName];
|
|
5157
5474
|
const limitPolicy = limits?.(tableName);
|
|
@@ -5159,7 +5476,9 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5159
5476
|
const queryArgs = selectArrayArgs(
|
|
5160
5477
|
orderArgs,
|
|
5161
5478
|
filterArgs,
|
|
5162
|
-
distinctEnabled ? generateDistinctEnum(table, typeName) : void 0
|
|
5479
|
+
distinctEnabled ? generateDistinctEnum(table, typeName) : void 0,
|
|
5480
|
+
policies?.softDelete,
|
|
5481
|
+
tableName
|
|
5163
5482
|
);
|
|
5164
5483
|
return {
|
|
5165
5484
|
name: fieldName,
|
|
@@ -5167,6 +5486,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5167
5486
|
try {
|
|
5168
5487
|
const parsedInfo = parseResolveInfo3(info, { deep: true });
|
|
5169
5488
|
const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
|
|
5489
|
+
const scope = policies?.scope?.(context);
|
|
5170
5490
|
const limit = applyLimitPolicy(args.limit, limitPolicy, fieldName);
|
|
5171
5491
|
if (requestQueryBase) {
|
|
5172
5492
|
return await runRelationalSelect({
|
|
@@ -5185,11 +5505,12 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5185
5505
|
limits,
|
|
5186
5506
|
pkNames,
|
|
5187
5507
|
db: executor,
|
|
5508
|
+
scope,
|
|
5188
5509
|
// PostgreSQL sorts NULLs as the largest values (last in ASC).
|
|
5189
5510
|
nullOrdering: "nulls-largest"
|
|
5190
5511
|
});
|
|
5191
5512
|
}
|
|
5192
|
-
const { offset, orderBy, where, distinct, after } = args;
|
|
5513
|
+
const { offset, orderBy, where, distinct, after, deleted } = args;
|
|
5193
5514
|
const selectedColumnsSql = extractSelectedColumnsFromTreeSQLFormat(
|
|
5194
5515
|
parsedInfo.fieldsByTypeName[typeName],
|
|
5195
5516
|
table,
|
|
@@ -5223,7 +5544,13 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5223
5544
|
}
|
|
5224
5545
|
}
|
|
5225
5546
|
const cursorCondition = after != null && cursorEntries ? buildCursorCondition(table, cursorEntries, decodeCursor(after, cursorEntries), "nulls-largest") : void 0;
|
|
5226
|
-
const baseWhereSql =
|
|
5547
|
+
const baseWhereSql = withScope(
|
|
5548
|
+
scope,
|
|
5549
|
+
tableName,
|
|
5550
|
+
table,
|
|
5551
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
5552
|
+
deleted
|
|
5553
|
+
);
|
|
5227
5554
|
const whereSql = cursorCondition ? and4(baseWhereSql, cursorCondition) : baseWhereSql;
|
|
5228
5555
|
let distinctKeys;
|
|
5229
5556
|
if (distinct?.length) {
|
|
@@ -5278,9 +5605,9 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
5278
5605
|
args: queryArgs
|
|
5279
5606
|
};
|
|
5280
5607
|
};
|
|
5281
|
-
var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
5608
|
+
var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
5282
5609
|
const queryBase = db.query[tableName];
|
|
5283
|
-
const queryArgs = selectSingleArgs(orderArgs, filterArgs);
|
|
5610
|
+
const queryArgs = selectSingleArgs(orderArgs, filterArgs, policies?.softDelete, tableName);
|
|
5284
5611
|
const table = tables[tableName];
|
|
5285
5612
|
const pkNames = pgPrimaryKeyPropNames(table);
|
|
5286
5613
|
return {
|
|
@@ -5289,6 +5616,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5289
5616
|
try {
|
|
5290
5617
|
const parsedInfo = parseResolveInfo3(info, { deep: true });
|
|
5291
5618
|
const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
|
|
5619
|
+
const scope = policies?.scope?.(context);
|
|
5292
5620
|
if (requestQueryBase) {
|
|
5293
5621
|
return await runRelationalSelect({
|
|
5294
5622
|
queryBase: requestQueryBase,
|
|
@@ -5304,18 +5632,26 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5304
5632
|
filterCtx,
|
|
5305
5633
|
limits,
|
|
5306
5634
|
pkNames,
|
|
5307
|
-
db: executor
|
|
5635
|
+
db: executor,
|
|
5636
|
+
scope
|
|
5308
5637
|
});
|
|
5309
5638
|
}
|
|
5310
|
-
const { offset, orderBy, where } = args;
|
|
5639
|
+
const { offset, orderBy, where, deleted } = args;
|
|
5311
5640
|
const selectedColumnsSql = extractSelectedColumnsFromTreeSQLFormat(
|
|
5312
5641
|
parsedInfo.fieldsByTypeName[typeName],
|
|
5313
5642
|
table,
|
|
5314
5643
|
{ tableName, relationMap, tables }
|
|
5315
5644
|
);
|
|
5316
5645
|
let q = executor.select(selectedColumnsSql).from(table);
|
|
5317
|
-
|
|
5318
|
-
|
|
5646
|
+
const whereSql = withScope(
|
|
5647
|
+
scope,
|
|
5648
|
+
tableName,
|
|
5649
|
+
table,
|
|
5650
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0,
|
|
5651
|
+
deleted
|
|
5652
|
+
);
|
|
5653
|
+
if (whereSql) {
|
|
5654
|
+
q = q.where(whereSql);
|
|
5319
5655
|
}
|
|
5320
5656
|
if (orderBy) {
|
|
5321
5657
|
q = q.orderBy(...extractOrderBy(table, orderBy, relationFilterCtx(filterCtx, tableName), where));
|
|
@@ -5336,7 +5672,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
5336
5672
|
};
|
|
5337
5673
|
};
|
|
5338
5674
|
var pgPrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, getTableConfig2);
|
|
5339
|
-
var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
5675
|
+
var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
5340
5676
|
const queryArgs = {
|
|
5341
5677
|
values: {
|
|
5342
5678
|
type: new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(baseType)))
|
|
@@ -5353,7 +5689,13 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5353
5689
|
}
|
|
5354
5690
|
const entries = nested?.enabled(tableName) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
|
|
5355
5691
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
5356
|
-
const
|
|
5692
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5693
|
+
const scope = policies?.scope?.(context);
|
|
5694
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
5695
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : args.values, table),
|
|
5696
|
+
contextColumns,
|
|
5697
|
+
context
|
|
5698
|
+
);
|
|
5357
5699
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5358
5700
|
deep: true
|
|
5359
5701
|
});
|
|
@@ -5366,7 +5708,8 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5366
5708
|
table,
|
|
5367
5709
|
pkNames,
|
|
5368
5710
|
parsedInfo,
|
|
5369
|
-
limits
|
|
5711
|
+
limits,
|
|
5712
|
+
scope
|
|
5370
5713
|
});
|
|
5371
5714
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
5372
5715
|
const runInsert = async (target, values) => {
|
|
@@ -5381,8 +5724,9 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5381
5724
|
runtime: nested,
|
|
5382
5725
|
tableName,
|
|
5383
5726
|
entries: nestedEntries,
|
|
5384
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5385
|
-
write: (tx, values) => runInsert(tx, [values])
|
|
5727
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5728
|
+
write: (tx, values) => runInsert(tx, [values]),
|
|
5729
|
+
context
|
|
5386
5730
|
}) : await runInsert(executor, input);
|
|
5387
5731
|
const enriched = hasRelations ? await eagerLoadMutationRelations(executor, tableName, result, pkNames, withParams) : result;
|
|
5388
5732
|
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
@@ -5394,7 +5738,7 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
5394
5738
|
args: queryArgs
|
|
5395
5739
|
};
|
|
5396
5740
|
};
|
|
5397
|
-
var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
5741
|
+
var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
5398
5742
|
const queryArgs = {
|
|
5399
5743
|
values: {
|
|
5400
5744
|
type: new GraphQLNonNull7(baseType)
|
|
@@ -5408,7 +5752,13 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5408
5752
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5409
5753
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
5410
5754
|
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
5411
|
-
const
|
|
5755
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5756
|
+
const scope = policies?.scope?.(context);
|
|
5757
|
+
const input = nestedEntry ? {} : applyContextValues(
|
|
5758
|
+
remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table),
|
|
5759
|
+
contextColumns,
|
|
5760
|
+
context
|
|
5761
|
+
);
|
|
5412
5762
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5413
5763
|
deep: true
|
|
5414
5764
|
});
|
|
@@ -5421,7 +5771,8 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5421
5771
|
table,
|
|
5422
5772
|
pkNames,
|
|
5423
5773
|
parsedInfo,
|
|
5424
|
-
limits
|
|
5774
|
+
limits,
|
|
5775
|
+
scope
|
|
5425
5776
|
});
|
|
5426
5777
|
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
5427
5778
|
const runInsert = async (target, values) => {
|
|
@@ -5436,8 +5787,9 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5436
5787
|
runtime: nested,
|
|
5437
5788
|
tableName,
|
|
5438
5789
|
entries: [nestedEntry],
|
|
5439
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5440
|
-
write: runInsert
|
|
5790
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5791
|
+
write: runInsert,
|
|
5792
|
+
context
|
|
5441
5793
|
}) : await runInsert(executor, input);
|
|
5442
5794
|
if (!result[0]) {
|
|
5443
5795
|
if (!conflictDoNothing) {
|
|
@@ -5455,7 +5807,7 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
|
|
|
5455
5807
|
args: queryArgs
|
|
5456
5808
|
};
|
|
5457
5809
|
};
|
|
5458
|
-
var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5810
|
+
var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5459
5811
|
const queryArgs = {
|
|
5460
5812
|
values: {
|
|
5461
5813
|
type: single ? new GraphQLNonNull7(baseType) : new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(baseType)))
|
|
@@ -5477,7 +5829,13 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5477
5829
|
}
|
|
5478
5830
|
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
5479
5831
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
5480
|
-
const
|
|
5832
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5833
|
+
const scope = policies?.scope?.(context);
|
|
5834
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
5835
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table),
|
|
5836
|
+
contextColumns,
|
|
5837
|
+
context
|
|
5838
|
+
);
|
|
5481
5839
|
const parsedInfo = parseResolveInfo3(info, { deep: true });
|
|
5482
5840
|
const { columns, hasRelations, withParams } = prepareMutationRelationColumns({
|
|
5483
5841
|
relationMap,
|
|
@@ -5488,7 +5846,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5488
5846
|
table,
|
|
5489
5847
|
pkNames,
|
|
5490
5848
|
parsedInfo,
|
|
5491
|
-
limits
|
|
5849
|
+
limits,
|
|
5850
|
+
scope
|
|
5492
5851
|
});
|
|
5493
5852
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
5494
5853
|
const runUpsert = async (target, values) => {
|
|
@@ -5503,7 +5862,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5503
5862
|
buildWhere: (where) => extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName))
|
|
5504
5863
|
});
|
|
5505
5864
|
let query = target.insert(table).values(values).returning(returning);
|
|
5506
|
-
|
|
5865
|
+
const setWhere = withScope(scope, tableName, table, plan.setWhere);
|
|
5866
|
+
query = plan.action === "NOTHING" ? query.onConflictDoNothing(plan.target ? { target: plan.target } : void 0) : query.onConflictDoUpdate({ target: plan.target, set: plan.set, setWhere });
|
|
5507
5867
|
return await query;
|
|
5508
5868
|
};
|
|
5509
5869
|
const result = nestedEntries ? await writeWithNestedOps({
|
|
@@ -5511,8 +5871,9 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5511
5871
|
runtime: nested,
|
|
5512
5872
|
tableName,
|
|
5513
5873
|
entries: nestedEntries,
|
|
5514
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
5515
|
-
write: (tx, values) => runUpsert(tx, [values])
|
|
5874
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
5875
|
+
write: (tx, values) => runUpsert(tx, [values]),
|
|
5876
|
+
context
|
|
5516
5877
|
}) : await runUpsert(executor, input);
|
|
5517
5878
|
if (single && !result[0]) {
|
|
5518
5879
|
return void 0;
|
|
@@ -5527,7 +5888,7 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
5527
5888
|
args: queryArgs
|
|
5528
5889
|
};
|
|
5529
5890
|
};
|
|
5530
|
-
var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5891
|
+
var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5531
5892
|
const queryArgs = {
|
|
5532
5893
|
set: {
|
|
5533
5894
|
type: new GraphQLNonNull7(setArgs)
|
|
@@ -5543,6 +5904,7 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5543
5904
|
try {
|
|
5544
5905
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5545
5906
|
const { where, set } = args;
|
|
5907
|
+
const scope = policies?.scope?.(context);
|
|
5546
5908
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5547
5909
|
deep: true
|
|
5548
5910
|
});
|
|
@@ -5555,16 +5917,25 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5555
5917
|
table,
|
|
5556
5918
|
pkNames,
|
|
5557
5919
|
parsedInfo,
|
|
5558
|
-
limits
|
|
5920
|
+
limits,
|
|
5921
|
+
scope
|
|
5559
5922
|
});
|
|
5560
5923
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
5561
5924
|
const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
|
|
5562
|
-
const input =
|
|
5925
|
+
const input = stripContextValues(
|
|
5926
|
+
remapUpdateInput(entry ? entry.columns : set, table, tableName),
|
|
5927
|
+
policies?.contextValues?.(tableName)
|
|
5928
|
+
);
|
|
5563
5929
|
if (!Object.keys(input).length && !nestedOps) {
|
|
5564
5930
|
throw new GraphQLError8("Unable to update with no values specified!");
|
|
5565
5931
|
}
|
|
5566
5932
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
5567
|
-
const filters =
|
|
5933
|
+
const filters = withScope(
|
|
5934
|
+
scope,
|
|
5935
|
+
tableName,
|
|
5936
|
+
table,
|
|
5937
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
5938
|
+
);
|
|
5568
5939
|
if (single) {
|
|
5569
5940
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
5570
5941
|
}
|
|
@@ -5584,7 +5955,8 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5584
5955
|
columns: input,
|
|
5585
5956
|
ops: nestedOps,
|
|
5586
5957
|
remapValues: (values) => values,
|
|
5587
|
-
write: runUpdate
|
|
5958
|
+
write: runUpdate,
|
|
5959
|
+
context
|
|
5588
5960
|
}) : await runUpdate(executor, input);
|
|
5589
5961
|
if (single && result.length > 1) {
|
|
5590
5962
|
throw new GraphQLError8(`${fieldName}: 'where' matched more than one row!`);
|
|
@@ -5602,7 +5974,7 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
5602
5974
|
args: queryArgs
|
|
5603
5975
|
};
|
|
5604
5976
|
};
|
|
5605
|
-
var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
5977
|
+
var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
5606
5978
|
const queryArgs = {
|
|
5607
5979
|
updates: {
|
|
5608
5980
|
type: new GraphQLNonNull7(new GraphQLList7(new GraphQLNonNull7(updateManyInput)))
|
|
@@ -5618,6 +5990,8 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5618
5990
|
if (!updates.length) {
|
|
5619
5991
|
throw new GraphQLError8("No updates were provided!");
|
|
5620
5992
|
}
|
|
5993
|
+
const scope = policies?.scope?.(context);
|
|
5994
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
5621
5995
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5622
5996
|
deep: true
|
|
5623
5997
|
});
|
|
@@ -5630,19 +6004,28 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5630
6004
|
table,
|
|
5631
6005
|
pkNames,
|
|
5632
6006
|
parsedInfo,
|
|
5633
|
-
limits
|
|
6007
|
+
limits,
|
|
6008
|
+
scope
|
|
5634
6009
|
});
|
|
5635
6010
|
const entries = updates.map(({ where, set }) => {
|
|
5636
6011
|
const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
5637
6012
|
const ops = split && nested.hasOps(split.ops) ? split.ops : void 0;
|
|
5638
|
-
const input =
|
|
6013
|
+
const input = stripContextValues(
|
|
6014
|
+
remapUpdateInput(split ? split.columns : set, table, tableName),
|
|
6015
|
+
contextColumns
|
|
6016
|
+
);
|
|
5639
6017
|
if (!Object.keys(input).length && !ops) {
|
|
5640
6018
|
throw new GraphQLError8("Unable to update with no values specified!");
|
|
5641
6019
|
}
|
|
5642
6020
|
return {
|
|
5643
6021
|
set: input,
|
|
5644
6022
|
ops,
|
|
5645
|
-
filters:
|
|
6023
|
+
filters: withScope(
|
|
6024
|
+
scope,
|
|
6025
|
+
tableName,
|
|
6026
|
+
table,
|
|
6027
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
6028
|
+
)
|
|
5646
6029
|
};
|
|
5647
6030
|
});
|
|
5648
6031
|
const returning = entries.some((entry) => entry.ops) ? nested.withJoinColumns(
|
|
@@ -5656,7 +6039,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5656
6039
|
const perEntry = await executor.transaction(async (tx) => {
|
|
5657
6040
|
const results = [];
|
|
5658
6041
|
for (const entry of entries) {
|
|
5659
|
-
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops) } : entry.set;
|
|
6042
|
+
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops, context) } : entry.set;
|
|
5660
6043
|
const writes = Object.keys(values).length > 0;
|
|
5661
6044
|
let query = writes ? tx.update(table).set(values) : tx.select(returning).from(table);
|
|
5662
6045
|
if (entry.filters) {
|
|
@@ -5664,7 +6047,7 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5664
6047
|
}
|
|
5665
6048
|
const rows = await (writes ? query.returning(returning) : query);
|
|
5666
6049
|
if (entry.ops) {
|
|
5667
|
-
await nested.applyChildSide(tx, tableName, entry.ops, rows);
|
|
6050
|
+
await nested.applyChildSide(tx, tableName, entry.ops, rows, context);
|
|
5668
6051
|
}
|
|
5669
6052
|
results.push(rows);
|
|
5670
6053
|
}
|
|
@@ -5693,7 +6076,8 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
5693
6076
|
args: queryArgs
|
|
5694
6077
|
};
|
|
5695
6078
|
};
|
|
5696
|
-
var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx) => {
|
|
6079
|
+
var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies, restore = false) => {
|
|
6080
|
+
const softDelete = policies?.softDelete?.(tableName);
|
|
5697
6081
|
const queryArgs = {
|
|
5698
6082
|
where: {
|
|
5699
6083
|
type: single || requireWhere ? new GraphQLNonNull7(filterArgs) : filterArgs
|
|
@@ -5705,6 +6089,7 @@ var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
5705
6089
|
try {
|
|
5706
6090
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
5707
6091
|
const { where } = args;
|
|
6092
|
+
const scope = policies?.scope?.(context);
|
|
5708
6093
|
const parsedInfo = parseResolveInfo3(info, {
|
|
5709
6094
|
deep: true
|
|
5710
6095
|
});
|
|
@@ -5714,11 +6099,17 @@ var generateDelete2 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
5714
6099
|
selectionCtx
|
|
5715
6100
|
);
|
|
5716
6101
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
5717
|
-
const filters =
|
|
6102
|
+
const filters = withScope(
|
|
6103
|
+
scope,
|
|
6104
|
+
tableName,
|
|
6105
|
+
table,
|
|
6106
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0,
|
|
6107
|
+
restore ? "ONLY" : void 0
|
|
6108
|
+
);
|
|
5718
6109
|
if (single) {
|
|
5719
6110
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
5720
6111
|
}
|
|
5721
|
-
let query = executor.delete(table);
|
|
6112
|
+
let query = softDelete ? executor.update(table).set({ [softDelete.columnName]: restore ? softDelete.writeRestored : softDelete.writeDeleted() }) : executor.delete(table);
|
|
5722
6113
|
if (filters) {
|
|
5723
6114
|
query = query.where(filters);
|
|
5724
6115
|
}
|
|
@@ -5772,12 +6163,17 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5772
6163
|
attachTargetPrimaryKeys(namedRelations, tables, pgPrimaryKeyPropNames);
|
|
5773
6164
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
5774
6165
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
6166
|
+
const tablePolicies = options.policies;
|
|
6167
|
+
const contextValuesOf = tablePolicies?.contextValues;
|
|
6168
|
+
const softDeleteOf = tablePolicies?.softDelete;
|
|
6169
|
+
const policies = bindPolicies(tablePolicies, filterCtx);
|
|
5775
6170
|
const resolverFactory = createRelationResolverFactory(
|
|
5776
6171
|
db,
|
|
5777
6172
|
tables,
|
|
5778
6173
|
"nulls-largest",
|
|
5779
6174
|
filterCtx,
|
|
5780
|
-
limits
|
|
6175
|
+
limits,
|
|
6176
|
+
tablePolicies
|
|
5781
6177
|
);
|
|
5782
6178
|
const cacheCtx = {
|
|
5783
6179
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -5795,6 +6191,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5795
6191
|
limits,
|
|
5796
6192
|
docs: options.docs ?? {},
|
|
5797
6193
|
primaryKeyOf: (name) => tables[name] ? pgPrimaryKeyPropNames(tables[name]) : [],
|
|
6194
|
+
contextValuesOf,
|
|
6195
|
+
softDeleteOf,
|
|
5798
6196
|
featureOf
|
|
5799
6197
|
};
|
|
5800
6198
|
const nestedPlans = features.nestedWrites ? buildNestedWritePlans(
|
|
@@ -5805,8 +6203,13 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5805
6203
|
extractRelationJoinColumns
|
|
5806
6204
|
) : void 0;
|
|
5807
6205
|
const nestedTypes = nestedPlans ? createNestedWriteTypes({ plans: nestedPlans, cacheCtx, typeNameMapper, insertPrefix: prefixes.insert }) : void 0;
|
|
5808
|
-
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({
|
|
5809
|
-
|
|
6206
|
+
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({
|
|
6207
|
+
plans: nestedPlans,
|
|
6208
|
+
filterCtx,
|
|
6209
|
+
policies: tablePolicies,
|
|
6210
|
+
contextValues: contextValuesOf
|
|
6211
|
+
}) : void 0;
|
|
6212
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, tablePolicies) : void 0;
|
|
5810
6213
|
const queries = {};
|
|
5811
6214
|
const mutations = {};
|
|
5812
6215
|
const mutationTxCtx = createMutationTxCtx(options.transactions);
|
|
@@ -5852,8 +6255,11 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5852
6255
|
updateCountFieldName,
|
|
5853
6256
|
deleteFieldName,
|
|
5854
6257
|
deleteSingleFieldName,
|
|
6258
|
+
restoreFieldName,
|
|
6259
|
+
restoreSingleFieldName,
|
|
5855
6260
|
deleteCountFieldName
|
|
5856
6261
|
} = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
6262
|
+
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
5857
6263
|
const selectArrGenerated = generateSelectArray2(
|
|
5858
6264
|
db,
|
|
5859
6265
|
tableName,
|
|
@@ -5866,7 +6272,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5866
6272
|
typeNameMapper,
|
|
5867
6273
|
filterCtx,
|
|
5868
6274
|
tableFeatures.distinct,
|
|
5869
|
-
limits
|
|
6275
|
+
limits,
|
|
6276
|
+
policies
|
|
5870
6277
|
);
|
|
5871
6278
|
const selectSingleGenerated = generateSelectSingle2(
|
|
5872
6279
|
db,
|
|
@@ -5879,7 +6286,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5879
6286
|
typeName,
|
|
5880
6287
|
typeNameMapper,
|
|
5881
6288
|
filterCtx,
|
|
5882
|
-
limits
|
|
6289
|
+
limits,
|
|
6290
|
+
policies
|
|
5883
6291
|
);
|
|
5884
6292
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray2(
|
|
5885
6293
|
db,
|
|
@@ -5894,7 +6302,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5894
6302
|
conflictDoNothing,
|
|
5895
6303
|
mutationTxCtx,
|
|
5896
6304
|
nestedRuntime,
|
|
5897
|
-
limits
|
|
6305
|
+
limits,
|
|
6306
|
+
policies
|
|
5898
6307
|
) : void 0;
|
|
5899
6308
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle2(
|
|
5900
6309
|
db,
|
|
@@ -5909,7 +6318,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5909
6318
|
conflictDoNothing,
|
|
5910
6319
|
mutationTxCtx,
|
|
5911
6320
|
nestedRuntime,
|
|
5912
|
-
limits
|
|
6321
|
+
limits,
|
|
6322
|
+
policies
|
|
5913
6323
|
) : void 0;
|
|
5914
6324
|
const uniqueSets = tableFeatures.upsert ? getUniqueColumnSets(schema[tableName], getTableConfig2) : [];
|
|
5915
6325
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -5935,7 +6345,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5935
6345
|
filterCtx,
|
|
5936
6346
|
mutationTxCtx,
|
|
5937
6347
|
nestedRuntime,
|
|
5938
|
-
limits
|
|
6348
|
+
limits,
|
|
6349
|
+
policies
|
|
5939
6350
|
) : void 0;
|
|
5940
6351
|
const upsertSingleGenerated = onConflictInput ? generateUpsert2(
|
|
5941
6352
|
db,
|
|
@@ -5953,7 +6364,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5953
6364
|
filterCtx,
|
|
5954
6365
|
mutationTxCtx,
|
|
5955
6366
|
nestedRuntime,
|
|
5956
|
-
limits
|
|
6367
|
+
limits,
|
|
6368
|
+
policies
|
|
5957
6369
|
) : void 0;
|
|
5958
6370
|
const updateGenerated = tableFeatures.update ? generateUpdate2(
|
|
5959
6371
|
db,
|
|
@@ -5971,7 +6383,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5971
6383
|
filterCtx,
|
|
5972
6384
|
mutationTxCtx,
|
|
5973
6385
|
nestedRuntime,
|
|
5974
|
-
limits
|
|
6386
|
+
limits,
|
|
6387
|
+
policies
|
|
5975
6388
|
) : void 0;
|
|
5976
6389
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate2(
|
|
5977
6390
|
db,
|
|
@@ -5989,7 +6402,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
5989
6402
|
filterCtx,
|
|
5990
6403
|
mutationTxCtx,
|
|
5991
6404
|
nestedRuntime,
|
|
5992
|
-
limits
|
|
6405
|
+
limits,
|
|
6406
|
+
policies
|
|
5993
6407
|
) : void 0;
|
|
5994
6408
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
5995
6409
|
const updateManyGenerated = updateManyInput ? generateUpdateMany2(
|
|
@@ -6005,7 +6419,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6005
6419
|
filterCtx,
|
|
6006
6420
|
mutationTxCtx,
|
|
6007
6421
|
nestedRuntime,
|
|
6008
|
-
limits
|
|
6422
|
+
limits,
|
|
6423
|
+
policies
|
|
6009
6424
|
) : void 0;
|
|
6010
6425
|
const deleteGenerated = tableFeatures.delete ? generateDelete2(
|
|
6011
6426
|
db,
|
|
@@ -6018,7 +6433,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6018
6433
|
tableFeatures.requireWhere,
|
|
6019
6434
|
filterCtx,
|
|
6020
6435
|
{ tableName, relationMap: namedRelations, tables },
|
|
6021
|
-
mutationTxCtx
|
|
6436
|
+
mutationTxCtx,
|
|
6437
|
+
policies
|
|
6022
6438
|
) : void 0;
|
|
6023
6439
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete2(
|
|
6024
6440
|
db,
|
|
@@ -6031,7 +6447,38 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6031
6447
|
tableFeatures.requireWhere,
|
|
6032
6448
|
filterCtx,
|
|
6033
6449
|
{ tableName, relationMap: namedRelations, tables },
|
|
6034
|
-
mutationTxCtx
|
|
6450
|
+
mutationTxCtx,
|
|
6451
|
+
policies
|
|
6452
|
+
) : void 0;
|
|
6453
|
+
const restoreGenerated = softDeleteInfo ? generateDelete2(
|
|
6454
|
+
db,
|
|
6455
|
+
tableName,
|
|
6456
|
+
schema[tableName],
|
|
6457
|
+
tableFilters,
|
|
6458
|
+
restoreFieldName,
|
|
6459
|
+
typeName,
|
|
6460
|
+
false,
|
|
6461
|
+
tableFeatures.requireWhere,
|
|
6462
|
+
filterCtx,
|
|
6463
|
+
{ tableName, relationMap: namedRelations, tables },
|
|
6464
|
+
mutationTxCtx,
|
|
6465
|
+
policies,
|
|
6466
|
+
true
|
|
6467
|
+
) : void 0;
|
|
6468
|
+
const restoreSingleGenerated = softDeleteInfo ? generateDelete2(
|
|
6469
|
+
db,
|
|
6470
|
+
tableName,
|
|
6471
|
+
schema[tableName],
|
|
6472
|
+
tableFilters,
|
|
6473
|
+
restoreSingleFieldName,
|
|
6474
|
+
typeName,
|
|
6475
|
+
true,
|
|
6476
|
+
tableFeatures.requireWhere,
|
|
6477
|
+
filterCtx,
|
|
6478
|
+
{ tableName, relationMap: namedRelations, tables },
|
|
6479
|
+
mutationTxCtx,
|
|
6480
|
+
policies,
|
|
6481
|
+
true
|
|
6035
6482
|
) : void 0;
|
|
6036
6483
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
6037
6484
|
db,
|
|
@@ -6065,7 +6512,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6065
6512
|
typeName,
|
|
6066
6513
|
aggregateFieldName,
|
|
6067
6514
|
tableFilters,
|
|
6068
|
-
filterCtx
|
|
6515
|
+
filterCtx,
|
|
6516
|
+
tablePolicies
|
|
6069
6517
|
) : void 0;
|
|
6070
6518
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
6071
6519
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -6079,7 +6527,8 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6079
6527
|
tableFilters,
|
|
6080
6528
|
groupByEnum,
|
|
6081
6529
|
havingInput,
|
|
6082
|
-
filterCtx
|
|
6530
|
+
filterCtx,
|
|
6531
|
+
tablePolicies
|
|
6083
6532
|
) : void 0;
|
|
6084
6533
|
queries[selectArrGenerated.name] = {
|
|
6085
6534
|
type: selectArrOutput,
|
|
@@ -6216,6 +6665,26 @@ function generateSchemaData2(db, schema, relations, options) {
|
|
|
6216
6665
|
}
|
|
6217
6666
|
};
|
|
6218
6667
|
}
|
|
6668
|
+
if (restoreGenerated) {
|
|
6669
|
+
mutations[restoreGenerated.name] = {
|
|
6670
|
+
type: arrTableItemOutput,
|
|
6671
|
+
args: restoreGenerated.args,
|
|
6672
|
+
resolve: restoreGenerated.resolver,
|
|
6673
|
+
extensions: {
|
|
6674
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "restore", single: false, targetArg: "where" })
|
|
6675
|
+
}
|
|
6676
|
+
};
|
|
6677
|
+
}
|
|
6678
|
+
if (restoreSingleGenerated) {
|
|
6679
|
+
mutations[restoreSingleGenerated.name] = {
|
|
6680
|
+
type: singleTableItemOutput,
|
|
6681
|
+
args: restoreSingleGenerated.args,
|
|
6682
|
+
resolve: restoreSingleGenerated.resolver,
|
|
6683
|
+
extensions: {
|
|
6684
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "restore", single: true, targetArg: "where" })
|
|
6685
|
+
}
|
|
6686
|
+
};
|
|
6687
|
+
}
|
|
6219
6688
|
if (updateCountGenerated) {
|
|
6220
6689
|
mutations[updateCountGenerated.name] = {
|
|
6221
6690
|
type: new GraphQLNonNull7(GraphQLInt6),
|
|
@@ -6286,7 +6755,7 @@ import {
|
|
|
6286
6755
|
GraphQLNonNull as GraphQLNonNull8
|
|
6287
6756
|
} from "graphql";
|
|
6288
6757
|
import { parseResolveInfo as parseResolveInfo4 } from "graphql-parse-resolve-info";
|
|
6289
|
-
var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits) => {
|
|
6758
|
+
var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, distinctEnabled = true, limits, policies) => {
|
|
6290
6759
|
const queryBase = db.query[tableName];
|
|
6291
6760
|
if (!queryBase) {
|
|
6292
6761
|
throw new Error(
|
|
@@ -6299,7 +6768,9 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6299
6768
|
const queryArgs = selectArrayArgs(
|
|
6300
6769
|
orderArgs,
|
|
6301
6770
|
filterArgs,
|
|
6302
|
-
distinctEnabled ? generateDistinctEnum(table, typeName) : void 0
|
|
6771
|
+
distinctEnabled ? generateDistinctEnum(table, typeName) : void 0,
|
|
6772
|
+
policies?.softDelete,
|
|
6773
|
+
tableName
|
|
6303
6774
|
);
|
|
6304
6775
|
return {
|
|
6305
6776
|
name: fieldName,
|
|
@@ -6323,6 +6794,7 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6323
6794
|
limits,
|
|
6324
6795
|
pkNames,
|
|
6325
6796
|
db: executor,
|
|
6797
|
+
scope: policies?.scope?.(context),
|
|
6326
6798
|
// SQLite sorts NULLs as the smallest values (first in ASC).
|
|
6327
6799
|
nullOrdering: "nulls-smallest"
|
|
6328
6800
|
});
|
|
@@ -6333,14 +6805,14 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
|
|
|
6333
6805
|
args: queryArgs
|
|
6334
6806
|
};
|
|
6335
6807
|
};
|
|
6336
|
-
var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits) => {
|
|
6808
|
+
var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filterArgs, fieldName, typeName, typeNameMapper, filterCtx, limits, policies) => {
|
|
6337
6809
|
const queryBase = db.query[tableName];
|
|
6338
6810
|
if (!queryBase) {
|
|
6339
6811
|
throw new Error(
|
|
6340
6812
|
`Drizzle-GraphQL Error: Table ${tableName} not found in drizzle instance. Did you forget to pass schema to drizzle constructor?`
|
|
6341
6813
|
);
|
|
6342
6814
|
}
|
|
6343
|
-
const queryArgs = selectSingleArgs(orderArgs, filterArgs);
|
|
6815
|
+
const queryArgs = selectSingleArgs(orderArgs, filterArgs, policies?.softDelete, tableName);
|
|
6344
6816
|
const table = tables[tableName];
|
|
6345
6817
|
const pkNames = sqlitePrimaryKeyPropNames(table);
|
|
6346
6818
|
return {
|
|
@@ -6363,7 +6835,8 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
6363
6835
|
filterCtx,
|
|
6364
6836
|
limits,
|
|
6365
6837
|
pkNames,
|
|
6366
|
-
db: executor
|
|
6838
|
+
db: executor,
|
|
6839
|
+
scope: policies?.scope?.(context)
|
|
6367
6840
|
});
|
|
6368
6841
|
} catch (e) {
|
|
6369
6842
|
throw toGraphQLError(e);
|
|
@@ -6373,7 +6846,7 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
|
|
|
6373
6846
|
};
|
|
6374
6847
|
};
|
|
6375
6848
|
var sqlitePrimaryKeyPropNames = (table) => getPrimaryKeyPropNamesFromConfig(table, getTableConfig3);
|
|
6376
|
-
var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
6849
|
+
var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
6377
6850
|
const queryArgs = {
|
|
6378
6851
|
values: {
|
|
6379
6852
|
type: new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(baseType)))
|
|
@@ -6390,7 +6863,13 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6390
6863
|
}
|
|
6391
6864
|
const entries = nested?.enabled(tableName) ? args.values.map((values) => nested.split(tableName, values)) : void 0;
|
|
6392
6865
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6393
|
-
const
|
|
6866
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6867
|
+
const scope = policies?.scope?.(context);
|
|
6868
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
6869
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : args.values, table),
|
|
6870
|
+
contextColumns,
|
|
6871
|
+
context
|
|
6872
|
+
);
|
|
6394
6873
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6395
6874
|
deep: true
|
|
6396
6875
|
});
|
|
@@ -6403,7 +6882,8 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6403
6882
|
table,
|
|
6404
6883
|
pkNames,
|
|
6405
6884
|
parsedInfo,
|
|
6406
|
-
limits
|
|
6885
|
+
limits,
|
|
6886
|
+
scope
|
|
6407
6887
|
});
|
|
6408
6888
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
6409
6889
|
const runInsert = async (target, values) => {
|
|
@@ -6418,8 +6898,9 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6418
6898
|
runtime: nested,
|
|
6419
6899
|
tableName,
|
|
6420
6900
|
entries: nestedEntries,
|
|
6421
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6422
|
-
write: (tx, values) => runInsert(tx, [values])
|
|
6901
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6902
|
+
write: (tx, values) => runInsert(tx, [values]),
|
|
6903
|
+
context
|
|
6423
6904
|
}) : await runInsert(executor, input);
|
|
6424
6905
|
const enriched = hasRelations ? await eagerLoadMutationRelations(executor, tableName, result, pkNames, withParams) : result;
|
|
6425
6906
|
return remapToGraphQLArrayOutput(enriched, tableName, table, relationMap);
|
|
@@ -6431,7 +6912,7 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
|
|
|
6431
6912
|
args: queryArgs
|
|
6432
6913
|
};
|
|
6433
6914
|
};
|
|
6434
|
-
var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits) => {
|
|
6915
|
+
var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType, fieldName, typeName, typeNameMapper, conflictDoNothing = false, txCtx, nested, limits, policies) => {
|
|
6435
6916
|
const queryArgs = {
|
|
6436
6917
|
values: {
|
|
6437
6918
|
type: new GraphQLNonNull8(baseType)
|
|
@@ -6445,7 +6926,13 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6445
6926
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6446
6927
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, args.values) : void 0;
|
|
6447
6928
|
const nestedEntry = entry && nested.hasOps(entry.ops) ? entry : void 0;
|
|
6448
|
-
const
|
|
6929
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6930
|
+
const scope = policies?.scope?.(context);
|
|
6931
|
+
const input = nestedEntry ? {} : applyContextValues(
|
|
6932
|
+
remapFromGraphQLSingleInput(entry ? entry.columns : args.values, table),
|
|
6933
|
+
contextColumns,
|
|
6934
|
+
context
|
|
6935
|
+
);
|
|
6449
6936
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6450
6937
|
deep: true
|
|
6451
6938
|
});
|
|
@@ -6458,7 +6945,8 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6458
6945
|
table,
|
|
6459
6946
|
pkNames,
|
|
6460
6947
|
parsedInfo,
|
|
6461
|
-
limits
|
|
6948
|
+
limits,
|
|
6949
|
+
scope
|
|
6462
6950
|
});
|
|
6463
6951
|
const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
|
|
6464
6952
|
const runInsert = async (target, values) => {
|
|
@@ -6473,8 +6961,9 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6473
6961
|
runtime: nested,
|
|
6474
6962
|
tableName,
|
|
6475
6963
|
entries: [nestedEntry],
|
|
6476
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6477
|
-
write: runInsert
|
|
6964
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
6965
|
+
write: runInsert,
|
|
6966
|
+
context
|
|
6478
6967
|
}) : await runInsert(executor, input);
|
|
6479
6968
|
if (!result[0]) {
|
|
6480
6969
|
if (!conflictDoNothing) {
|
|
@@ -6492,7 +6981,7 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
|
|
|
6492
6981
|
args: queryArgs
|
|
6493
6982
|
};
|
|
6494
6983
|
};
|
|
6495
|
-
var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
6984
|
+
var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onConflictType, uniqueSets, fieldName, typeName, single, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6496
6985
|
const queryArgs = {
|
|
6497
6986
|
values: {
|
|
6498
6987
|
type: single ? new GraphQLNonNull8(baseType) : new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(baseType)))
|
|
@@ -6514,7 +7003,13 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6514
7003
|
}
|
|
6515
7004
|
const entries = nested?.enabled(tableName) ? supplied.map((values) => nested.split(tableName, values)) : void 0;
|
|
6516
7005
|
const nestedEntries = entries?.some((entry) => nested.hasOps(entry.ops)) ? entries : void 0;
|
|
6517
|
-
const
|
|
7006
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
7007
|
+
const scope = policies?.scope?.(context);
|
|
7008
|
+
const input = nestedEntries ? [] : applyContextValuesAll(
|
|
7009
|
+
remapFromGraphQLArrayInput(entries ? entries.map((entry) => entry.columns) : supplied, table),
|
|
7010
|
+
contextColumns,
|
|
7011
|
+
context
|
|
7012
|
+
);
|
|
6518
7013
|
const parsedInfo = parseResolveInfo4(info, { deep: true });
|
|
6519
7014
|
const { columns, hasRelations, withParams } = prepareMutationRelationColumns({
|
|
6520
7015
|
relationMap,
|
|
@@ -6525,7 +7020,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6525
7020
|
table,
|
|
6526
7021
|
pkNames,
|
|
6527
7022
|
parsedInfo,
|
|
6528
|
-
limits
|
|
7023
|
+
limits,
|
|
7024
|
+
scope
|
|
6529
7025
|
});
|
|
6530
7026
|
const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
|
|
6531
7027
|
const runUpsert = async (target, values) => {
|
|
@@ -6540,7 +7036,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6540
7036
|
buildWhere: (where) => extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName))
|
|
6541
7037
|
});
|
|
6542
7038
|
let query = target.insert(table).values(values).returning(returning);
|
|
6543
|
-
|
|
7039
|
+
const setWhere = withScope(scope, tableName, table, plan.setWhere);
|
|
7040
|
+
query = plan.action === "NOTHING" ? query.onConflictDoNothing(plan.target ? { target: plan.target } : void 0) : query.onConflictDoUpdate({ target: plan.target, set: plan.set, setWhere });
|
|
6544
7041
|
return await query;
|
|
6545
7042
|
};
|
|
6546
7043
|
const result = nestedEntries ? await writeWithNestedOps({
|
|
@@ -6548,8 +7045,9 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6548
7045
|
runtime: nested,
|
|
6549
7046
|
tableName,
|
|
6550
7047
|
entries: nestedEntries,
|
|
6551
|
-
remapValues: (values) => remapFromGraphQLSingleInput(values, table),
|
|
6552
|
-
write: (tx, values) => runUpsert(tx, [values])
|
|
7048
|
+
remapValues: (values) => applyContextValues(remapFromGraphQLSingleInput(values, table), contextColumns, context),
|
|
7049
|
+
write: (tx, values) => runUpsert(tx, [values]),
|
|
7050
|
+
context
|
|
6553
7051
|
}) : await runUpsert(executor, input);
|
|
6554
7052
|
if (single && !result[0]) {
|
|
6555
7053
|
return void 0;
|
|
@@ -6564,7 +7062,7 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
|
|
|
6564
7062
|
args: queryArgs
|
|
6565
7063
|
};
|
|
6566
7064
|
};
|
|
6567
|
-
var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
7065
|
+
var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filterArgs, fieldName, typeName, single, requireWhere, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6568
7066
|
const queryArgs = {
|
|
6569
7067
|
set: {
|
|
6570
7068
|
type: new GraphQLNonNull8(setArgs)
|
|
@@ -6580,6 +7078,7 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6580
7078
|
try {
|
|
6581
7079
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6582
7080
|
const { where, set } = args;
|
|
7081
|
+
const scope = policies?.scope?.(context);
|
|
6583
7082
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6584
7083
|
deep: true
|
|
6585
7084
|
});
|
|
@@ -6592,16 +7091,25 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6592
7091
|
table,
|
|
6593
7092
|
pkNames,
|
|
6594
7093
|
parsedInfo,
|
|
6595
|
-
limits
|
|
7094
|
+
limits,
|
|
7095
|
+
scope
|
|
6596
7096
|
});
|
|
6597
7097
|
const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
6598
7098
|
const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
|
|
6599
|
-
const input =
|
|
7099
|
+
const input = stripContextValues(
|
|
7100
|
+
remapUpdateInput(entry ? entry.columns : set, table, tableName),
|
|
7101
|
+
policies?.contextValues?.(tableName)
|
|
7102
|
+
);
|
|
6600
7103
|
if (!Object.keys(input).length && !nestedOps) {
|
|
6601
7104
|
throw new GraphQLError9("Unable to update with no values specified!");
|
|
6602
7105
|
}
|
|
6603
7106
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
6604
|
-
const filters =
|
|
7107
|
+
const filters = withScope(
|
|
7108
|
+
scope,
|
|
7109
|
+
tableName,
|
|
7110
|
+
table,
|
|
7111
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0
|
|
7112
|
+
);
|
|
6605
7113
|
if (single) {
|
|
6606
7114
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
6607
7115
|
}
|
|
@@ -6621,7 +7129,8 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6621
7129
|
columns: input,
|
|
6622
7130
|
ops: nestedOps,
|
|
6623
7131
|
remapValues: (values) => values,
|
|
6624
|
-
write: runUpdate
|
|
7132
|
+
write: runUpdate,
|
|
7133
|
+
context
|
|
6625
7134
|
}) : await runUpdate(executor, input);
|
|
6626
7135
|
if (single && result.length > 1) {
|
|
6627
7136
|
throw new GraphQLError9(`${fieldName}: 'where' matched more than one row!`);
|
|
@@ -6639,7 +7148,7 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
|
|
|
6639
7148
|
args: queryArgs
|
|
6640
7149
|
};
|
|
6641
7150
|
};
|
|
6642
|
-
var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits) => {
|
|
7151
|
+
var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateManyInput, fieldName, typeName, typeNameMapper, filterCtx, txCtx, nested, limits, policies) => {
|
|
6643
7152
|
const queryArgs = {
|
|
6644
7153
|
updates: {
|
|
6645
7154
|
type: new GraphQLNonNull8(new GraphQLList8(new GraphQLNonNull8(updateManyInput)))
|
|
@@ -6655,6 +7164,8 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6655
7164
|
if (!updates.length) {
|
|
6656
7165
|
throw new GraphQLError9("No updates were provided!");
|
|
6657
7166
|
}
|
|
7167
|
+
const scope = policies?.scope?.(context);
|
|
7168
|
+
const contextColumns = policies?.contextValues?.(tableName);
|
|
6658
7169
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6659
7170
|
deep: true
|
|
6660
7171
|
});
|
|
@@ -6667,19 +7178,28 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6667
7178
|
table,
|
|
6668
7179
|
pkNames,
|
|
6669
7180
|
parsedInfo,
|
|
6670
|
-
limits
|
|
7181
|
+
limits,
|
|
7182
|
+
scope
|
|
6671
7183
|
});
|
|
6672
7184
|
const entries = updates.map(({ where, set }) => {
|
|
6673
7185
|
const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
|
|
6674
7186
|
const ops = split && nested.hasOps(split.ops) ? split.ops : void 0;
|
|
6675
|
-
const input =
|
|
7187
|
+
const input = stripContextValues(
|
|
7188
|
+
remapUpdateInput(split ? split.columns : set, table, tableName),
|
|
7189
|
+
contextColumns
|
|
7190
|
+
);
|
|
6676
7191
|
if (!Object.keys(input).length && !ops) {
|
|
6677
7192
|
throw new GraphQLError9("Unable to update with no values specified!");
|
|
6678
7193
|
}
|
|
6679
7194
|
return {
|
|
6680
7195
|
set: input,
|
|
6681
7196
|
ops,
|
|
6682
|
-
filters:
|
|
7197
|
+
filters: withScope(
|
|
7198
|
+
scope,
|
|
7199
|
+
tableName,
|
|
7200
|
+
table,
|
|
7201
|
+
where ? extractFilters(table, tableName, where, relationFilterCtx(filterCtx, tableName)) : void 0
|
|
7202
|
+
)
|
|
6683
7203
|
};
|
|
6684
7204
|
});
|
|
6685
7205
|
const anyNested = entries.some((entry) => entry.ops);
|
|
@@ -6697,7 +7217,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6697
7217
|
return query.returning(returning).all();
|
|
6698
7218
|
};
|
|
6699
7219
|
const runNestedEntry = async (tx, entry) => {
|
|
6700
|
-
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops) } : entry.set;
|
|
7220
|
+
const values = entry.ops ? { ...entry.set, ...await nested.applyParentSide(tx, tableName, entry.ops, context) } : entry.set;
|
|
6701
7221
|
const writes = Object.keys(values).length > 0;
|
|
6702
7222
|
let query = writes ? tx.update(table).set(values) : tx.select(returning).from(table);
|
|
6703
7223
|
if (entry.filters) {
|
|
@@ -6705,7 +7225,7 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6705
7225
|
}
|
|
6706
7226
|
const rows = await (writes ? query.returning(returning) : query);
|
|
6707
7227
|
if (entry.ops) {
|
|
6708
|
-
await nested.applyChildSide(tx, tableName, entry.ops, rows);
|
|
7228
|
+
await nested.applyChildSide(tx, tableName, entry.ops, rows, context);
|
|
6709
7229
|
}
|
|
6710
7230
|
return rows;
|
|
6711
7231
|
};
|
|
@@ -6758,7 +7278,8 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
|
|
|
6758
7278
|
args: queryArgs
|
|
6759
7279
|
};
|
|
6760
7280
|
};
|
|
6761
|
-
var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx) => {
|
|
7281
|
+
var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, single, requireWhere, filterCtx, selectionCtx, txCtx, policies, restore = false) => {
|
|
7282
|
+
const softDelete = policies?.softDelete?.(tableName);
|
|
6762
7283
|
const queryArgs = {
|
|
6763
7284
|
where: {
|
|
6764
7285
|
type: single || requireWhere ? new GraphQLNonNull8(filterArgs) : filterArgs
|
|
@@ -6770,6 +7291,7 @@ var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
6770
7291
|
try {
|
|
6771
7292
|
return await runMutation(db, context, info, txCtx, async (executor) => {
|
|
6772
7293
|
const { where } = args;
|
|
7294
|
+
const scope = policies?.scope?.(context);
|
|
6773
7295
|
const parsedInfo = parseResolveInfo4(info, {
|
|
6774
7296
|
deep: true
|
|
6775
7297
|
});
|
|
@@ -6779,11 +7301,17 @@ var generateDelete3 = (db, tableName, table, filterArgs, fieldName, typeName, si
|
|
|
6779
7301
|
selectionCtx
|
|
6780
7302
|
);
|
|
6781
7303
|
const relationCtx = relationFilterCtx(filterCtx, tableName);
|
|
6782
|
-
const filters =
|
|
7304
|
+
const filters = withScope(
|
|
7305
|
+
scope,
|
|
7306
|
+
tableName,
|
|
7307
|
+
table,
|
|
7308
|
+
single || requireWhere ? extractRequiredFilters(table, tableName, where, fieldName, relationCtx) : where ? extractFilters(table, tableName, where, relationCtx) : void 0,
|
|
7309
|
+
restore ? "ONLY" : void 0
|
|
7310
|
+
);
|
|
6783
7311
|
if (single) {
|
|
6784
7312
|
await assertSingleMatch(executor, table, filters, fieldName);
|
|
6785
7313
|
}
|
|
6786
|
-
let query = executor.delete(table);
|
|
7314
|
+
let query = softDelete ? executor.update(table).set({ [softDelete.columnName]: restore ? softDelete.writeRestored : softDelete.writeDeleted() }) : executor.delete(table);
|
|
6787
7315
|
if (filters) {
|
|
6788
7316
|
query = query.where(filters);
|
|
6789
7317
|
}
|
|
@@ -6838,12 +7366,17 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6838
7366
|
attachTargetPrimaryKeys(namedRelations, tables, sqlitePrimaryKeyPropNames);
|
|
6839
7367
|
const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
|
|
6840
7368
|
const filterCtx = { tables, relationMap: namedRelations };
|
|
7369
|
+
const tablePolicies = options.policies;
|
|
7370
|
+
const contextValuesOf = tablePolicies?.contextValues;
|
|
7371
|
+
const softDeleteOf = tablePolicies?.softDelete;
|
|
7372
|
+
const policies = bindPolicies(tablePolicies, filterCtx);
|
|
6841
7373
|
const resolverFactory = createRelationResolverFactory(
|
|
6842
7374
|
db,
|
|
6843
7375
|
tables,
|
|
6844
7376
|
"nulls-smallest",
|
|
6845
7377
|
filterCtx,
|
|
6846
|
-
limits
|
|
7378
|
+
limits,
|
|
7379
|
+
tablePolicies
|
|
6847
7380
|
);
|
|
6848
7381
|
const cacheCtx = {
|
|
6849
7382
|
genericFilterCache: /* @__PURE__ */ new Map(),
|
|
@@ -6861,6 +7394,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6861
7394
|
limits,
|
|
6862
7395
|
docs: options.docs ?? {},
|
|
6863
7396
|
primaryKeyOf: (name) => tables[name] ? sqlitePrimaryKeyPropNames(tables[name]) : [],
|
|
7397
|
+
contextValuesOf,
|
|
7398
|
+
softDeleteOf,
|
|
6864
7399
|
featureOf
|
|
6865
7400
|
};
|
|
6866
7401
|
if (features.nestedWrites && db.resultKind === "sync") {
|
|
@@ -6876,8 +7411,13 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6876
7411
|
extractRelationJoinColumns
|
|
6877
7412
|
) : void 0;
|
|
6878
7413
|
const nestedTypes = nestedPlans ? createNestedWriteTypes({ plans: nestedPlans, cacheCtx, typeNameMapper, insertPrefix: prefixes.insert }) : void 0;
|
|
6879
|
-
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({
|
|
6880
|
-
|
|
7414
|
+
const nestedRuntime = nestedPlans ? createNestedWriteRuntime({
|
|
7415
|
+
plans: nestedPlans,
|
|
7416
|
+
filterCtx,
|
|
7417
|
+
policies: tablePolicies,
|
|
7418
|
+
contextValues: contextValuesOf
|
|
7419
|
+
}) : void 0;
|
|
7420
|
+
const relationAggregateFactory = anyTable("relationAggregates") ? createRelationAggregateFactory(db, tables, cacheCtx, typeNameMapper, filterCtx, tablePolicies) : void 0;
|
|
6881
7421
|
const queries = {};
|
|
6882
7422
|
const mutations = {};
|
|
6883
7423
|
if (options.transactions && db.resultKind === "sync") {
|
|
@@ -6928,8 +7468,11 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6928
7468
|
updateCountFieldName,
|
|
6929
7469
|
deleteFieldName,
|
|
6930
7470
|
deleteSingleFieldName,
|
|
7471
|
+
restoreFieldName,
|
|
7472
|
+
restoreSingleFieldName,
|
|
6931
7473
|
deleteCountFieldName
|
|
6932
7474
|
} = computeResolverFieldNames(tableName, typeNameMapper, prefixes, suffixes);
|
|
7475
|
+
const softDeleteInfo = softDeleteOf?.(tableName);
|
|
6933
7476
|
const selectArrGenerated = generateSelectArray3(
|
|
6934
7477
|
db,
|
|
6935
7478
|
tableName,
|
|
@@ -6942,7 +7485,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6942
7485
|
typeNameMapper,
|
|
6943
7486
|
filterCtx,
|
|
6944
7487
|
tableFeatures.distinct,
|
|
6945
|
-
limits
|
|
7488
|
+
limits,
|
|
7489
|
+
policies
|
|
6946
7490
|
);
|
|
6947
7491
|
const selectSingleGenerated = generateSelectSingle3(
|
|
6948
7492
|
db,
|
|
@@ -6955,7 +7499,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6955
7499
|
typeName,
|
|
6956
7500
|
typeNameMapper,
|
|
6957
7501
|
filterCtx,
|
|
6958
|
-
limits
|
|
7502
|
+
limits,
|
|
7503
|
+
policies
|
|
6959
7504
|
);
|
|
6960
7505
|
const insertArrGenerated = tableFeatures.insert ? generateInsertArray3(
|
|
6961
7506
|
db,
|
|
@@ -6970,7 +7515,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6970
7515
|
conflictDoNothing,
|
|
6971
7516
|
mutationTxCtx,
|
|
6972
7517
|
nestedRuntime,
|
|
6973
|
-
limits
|
|
7518
|
+
limits,
|
|
7519
|
+
policies
|
|
6974
7520
|
) : void 0;
|
|
6975
7521
|
const insertSingleGenerated = tableFeatures.insert ? generateInsertSingle3(
|
|
6976
7522
|
db,
|
|
@@ -6985,7 +7531,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
6985
7531
|
conflictDoNothing,
|
|
6986
7532
|
mutationTxCtx,
|
|
6987
7533
|
nestedRuntime,
|
|
6988
|
-
limits
|
|
7534
|
+
limits,
|
|
7535
|
+
policies
|
|
6989
7536
|
) : void 0;
|
|
6990
7537
|
const uniqueSets = tableFeatures.upsert ? getUniqueColumnSets(schema[tableName], getTableConfig3) : [];
|
|
6991
7538
|
const onConflictInput = tableFeatures.upsert ? generateOnConflictInput({
|
|
@@ -7011,7 +7558,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7011
7558
|
filterCtx,
|
|
7012
7559
|
mutationTxCtx,
|
|
7013
7560
|
nestedRuntime,
|
|
7014
|
-
limits
|
|
7561
|
+
limits,
|
|
7562
|
+
policies
|
|
7015
7563
|
) : void 0;
|
|
7016
7564
|
const upsertSingleGenerated = onConflictInput ? generateUpsert3(
|
|
7017
7565
|
db,
|
|
@@ -7029,7 +7577,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7029
7577
|
filterCtx,
|
|
7030
7578
|
mutationTxCtx,
|
|
7031
7579
|
nestedRuntime,
|
|
7032
|
-
limits
|
|
7580
|
+
limits,
|
|
7581
|
+
policies
|
|
7033
7582
|
) : void 0;
|
|
7034
7583
|
const updateGenerated = tableFeatures.update ? generateUpdate3(
|
|
7035
7584
|
db,
|
|
@@ -7047,7 +7596,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7047
7596
|
filterCtx,
|
|
7048
7597
|
mutationTxCtx,
|
|
7049
7598
|
nestedRuntime,
|
|
7050
|
-
limits
|
|
7599
|
+
limits,
|
|
7600
|
+
policies
|
|
7051
7601
|
) : void 0;
|
|
7052
7602
|
const updateSingleGenerated = tableFeatures.update ? generateUpdate3(
|
|
7053
7603
|
db,
|
|
@@ -7065,7 +7615,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7065
7615
|
filterCtx,
|
|
7066
7616
|
mutationTxCtx,
|
|
7067
7617
|
nestedRuntime,
|
|
7068
|
-
limits
|
|
7618
|
+
limits,
|
|
7619
|
+
policies
|
|
7069
7620
|
) : void 0;
|
|
7070
7621
|
const updateManyInput = tableFeatures.update && tableFeatures.updateMany ? generateUpdateManyInput({ typeName, updatePrefix: prefixes.update, updateInput, tableFilters }) : void 0;
|
|
7071
7622
|
const updateManyGenerated = updateManyInput ? generateUpdateMany3(
|
|
@@ -7081,7 +7632,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7081
7632
|
filterCtx,
|
|
7082
7633
|
mutationTxCtx,
|
|
7083
7634
|
nestedRuntime,
|
|
7084
|
-
limits
|
|
7635
|
+
limits,
|
|
7636
|
+
policies
|
|
7085
7637
|
) : void 0;
|
|
7086
7638
|
const deleteGenerated = tableFeatures.delete ? generateDelete3(
|
|
7087
7639
|
db,
|
|
@@ -7094,7 +7646,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7094
7646
|
tableFeatures.requireWhere,
|
|
7095
7647
|
filterCtx,
|
|
7096
7648
|
{ tableName, relationMap: namedRelations, tables },
|
|
7097
|
-
mutationTxCtx
|
|
7649
|
+
mutationTxCtx,
|
|
7650
|
+
policies
|
|
7098
7651
|
) : void 0;
|
|
7099
7652
|
const deleteSingleGenerated = tableFeatures.delete ? generateDelete3(
|
|
7100
7653
|
db,
|
|
@@ -7107,7 +7660,38 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7107
7660
|
tableFeatures.requireWhere,
|
|
7108
7661
|
filterCtx,
|
|
7109
7662
|
{ tableName, relationMap: namedRelations, tables },
|
|
7110
|
-
mutationTxCtx
|
|
7663
|
+
mutationTxCtx,
|
|
7664
|
+
policies
|
|
7665
|
+
) : void 0;
|
|
7666
|
+
const restoreGenerated = softDeleteInfo ? generateDelete3(
|
|
7667
|
+
db,
|
|
7668
|
+
tableName,
|
|
7669
|
+
schema[tableName],
|
|
7670
|
+
tableFilters,
|
|
7671
|
+
restoreFieldName,
|
|
7672
|
+
typeName,
|
|
7673
|
+
false,
|
|
7674
|
+
tableFeatures.requireWhere,
|
|
7675
|
+
filterCtx,
|
|
7676
|
+
{ tableName, relationMap: namedRelations, tables },
|
|
7677
|
+
mutationTxCtx,
|
|
7678
|
+
policies,
|
|
7679
|
+
true
|
|
7680
|
+
) : void 0;
|
|
7681
|
+
const restoreSingleGenerated = softDeleteInfo ? generateDelete3(
|
|
7682
|
+
db,
|
|
7683
|
+
tableName,
|
|
7684
|
+
schema[tableName],
|
|
7685
|
+
tableFilters,
|
|
7686
|
+
restoreSingleFieldName,
|
|
7687
|
+
typeName,
|
|
7688
|
+
true,
|
|
7689
|
+
tableFeatures.requireWhere,
|
|
7690
|
+
filterCtx,
|
|
7691
|
+
{ tableName, relationMap: namedRelations, tables },
|
|
7692
|
+
mutationTxCtx,
|
|
7693
|
+
policies,
|
|
7694
|
+
true
|
|
7111
7695
|
) : void 0;
|
|
7112
7696
|
const updateCountGenerated = tableFeatures.update && tableFeatures.countMutations ? generateWriteCount({
|
|
7113
7697
|
db,
|
|
@@ -7141,7 +7725,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7141
7725
|
typeName,
|
|
7142
7726
|
aggregateFieldName,
|
|
7143
7727
|
tableFilters,
|
|
7144
|
-
filterCtx
|
|
7728
|
+
filterCtx,
|
|
7729
|
+
tablePolicies
|
|
7145
7730
|
) : void 0;
|
|
7146
7731
|
const groupByType = tableFeatures.aggregates && tableFeatures.groupBy ? generateGroupByType(schema[tableName], tableName, typeName, cacheCtx) : void 0;
|
|
7147
7732
|
const groupByEnum = groupByType ? generateGroupByEnum(schema[tableName], tableName, typeName) : void 0;
|
|
@@ -7155,7 +7740,8 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7155
7740
|
tableFilters,
|
|
7156
7741
|
groupByEnum,
|
|
7157
7742
|
havingInput,
|
|
7158
|
-
filterCtx
|
|
7743
|
+
filterCtx,
|
|
7744
|
+
tablePolicies
|
|
7159
7745
|
) : void 0;
|
|
7160
7746
|
queries[selectArrGenerated.name] = {
|
|
7161
7747
|
type: selectArrOutput,
|
|
@@ -7292,6 +7878,26 @@ var generateSchemaData3 = (db, schema, relations, options) => {
|
|
|
7292
7878
|
}
|
|
7293
7879
|
};
|
|
7294
7880
|
}
|
|
7881
|
+
if (restoreGenerated) {
|
|
7882
|
+
mutations[restoreGenerated.name] = {
|
|
7883
|
+
type: arrTableItemOutput,
|
|
7884
|
+
args: restoreGenerated.args,
|
|
7885
|
+
resolve: restoreGenerated.resolver,
|
|
7886
|
+
extensions: {
|
|
7887
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "restore", single: false, targetArg: "where" })
|
|
7888
|
+
}
|
|
7889
|
+
};
|
|
7890
|
+
}
|
|
7891
|
+
if (restoreSingleGenerated) {
|
|
7892
|
+
mutations[restoreSingleGenerated.name] = {
|
|
7893
|
+
type: singleTableItemOutput,
|
|
7894
|
+
args: restoreSingleGenerated.args,
|
|
7895
|
+
resolve: restoreSingleGenerated.resolver,
|
|
7896
|
+
extensions: {
|
|
7897
|
+
drizzle: drizzleMeta({ kind: "mutation", operation: "restore", single: true, targetArg: "where" })
|
|
7898
|
+
}
|
|
7899
|
+
};
|
|
7900
|
+
}
|
|
7295
7901
|
if (updateCountGenerated) {
|
|
7296
7902
|
mutations[updateCountGenerated.name] = {
|
|
7297
7903
|
type: new GraphQLNonNull8(GraphQLInt7),
|
|
@@ -7502,7 +8108,8 @@ var buildSchema = (db, config) => {
|
|
|
7502
8108
|
insert: config?.prefixes?.insert ?? "create",
|
|
7503
8109
|
delete: config?.prefixes?.delete ?? "delete",
|
|
7504
8110
|
update: config?.prefixes?.update ?? "update",
|
|
7505
|
-
upsert: config?.prefixes?.upsert ?? "upsert"
|
|
8111
|
+
upsert: config?.prefixes?.upsert ?? "upsert",
|
|
8112
|
+
restore: config?.prefixes?.restore ?? "restore"
|
|
7506
8113
|
};
|
|
7507
8114
|
const suffixes = {
|
|
7508
8115
|
list: config?.suffixes?.list ?? "",
|
|
@@ -7547,6 +8154,66 @@ var buildSchema = (db, config) => {
|
|
|
7547
8154
|
limitPolicyCache.set(tableName, resolved);
|
|
7548
8155
|
return resolved;
|
|
7549
8156
|
} : void 0;
|
|
8157
|
+
const scopeConfig = config?.scope;
|
|
8158
|
+
const contextValuesConfig = config?.contextValues;
|
|
8159
|
+
if (scopeConfig || contextValuesConfig) {
|
|
8160
|
+
const tableNames = new Set(tableKeys);
|
|
8161
|
+
for (const [tableName, hook] of Object.entries(scopeConfig ?? {})) {
|
|
8162
|
+
if (!tableNames.has(tableName)) {
|
|
8163
|
+
throw new Error(
|
|
8164
|
+
`Drizzle-GraphQL Error: config.scope names '${tableName}', which is not a table in the Drizzle schema.`
|
|
8165
|
+
);
|
|
8166
|
+
}
|
|
8167
|
+
if (typeof hook !== "function") {
|
|
8168
|
+
throw new Error(`Drizzle-GraphQL Error: config.scope.${tableName} must be a function.`);
|
|
8169
|
+
}
|
|
8170
|
+
}
|
|
8171
|
+
for (const [tableName, columnHooks] of Object.entries(contextValuesConfig ?? {})) {
|
|
8172
|
+
if (!tableNames.has(tableName)) {
|
|
8173
|
+
throw new Error(
|
|
8174
|
+
`Drizzle-GraphQL Error: config.contextValues names '${tableName}', which is not a table in the Drizzle schema.`
|
|
8175
|
+
);
|
|
8176
|
+
}
|
|
8177
|
+
const columns = getColumns6(schema[tableName]);
|
|
8178
|
+
for (const [columnName, hook] of Object.entries(columnHooks)) {
|
|
8179
|
+
if (!columns[columnName]) {
|
|
8180
|
+
throw new Error(
|
|
8181
|
+
`Drizzle-GraphQL Error: config.contextValues names '${tableName}.${columnName}', which is not a column of that table.`
|
|
8182
|
+
);
|
|
8183
|
+
}
|
|
8184
|
+
if (typeof hook !== "function") {
|
|
8185
|
+
throw new Error(`Drizzle-GraphQL Error: config.contextValues.${tableName}.${columnName} must be a function.`);
|
|
8186
|
+
}
|
|
8187
|
+
}
|
|
8188
|
+
}
|
|
8189
|
+
}
|
|
8190
|
+
const softDeleteConfig = config?.softDelete;
|
|
8191
|
+
const softDeleteInfos = /* @__PURE__ */ new Map();
|
|
8192
|
+
if (softDeleteConfig) {
|
|
8193
|
+
if (typeof softDeleteConfig === "function") {
|
|
8194
|
+
for (const tableName of tableKeys) {
|
|
8195
|
+
const declaration = softDeleteConfig(schema[tableName], tableName);
|
|
8196
|
+
if (declaration) {
|
|
8197
|
+
softDeleteInfos.set(tableName, resolveSoftDeleteInfo(schema[tableName], tableName, declaration));
|
|
8198
|
+
}
|
|
8199
|
+
}
|
|
8200
|
+
} else {
|
|
8201
|
+
const tableNames = new Set(tableKeys);
|
|
8202
|
+
for (const [tableName, declaration] of Object.entries(softDeleteConfig)) {
|
|
8203
|
+
if (!tableNames.has(tableName)) {
|
|
8204
|
+
throw new Error(
|
|
8205
|
+
`Drizzle-GraphQL Error: config.softDelete names '${tableName}', which is not a table in the Drizzle schema.`
|
|
8206
|
+
);
|
|
8207
|
+
}
|
|
8208
|
+
softDeleteInfos.set(tableName, resolveSoftDeleteInfo(schema[tableName], tableName, declaration));
|
|
8209
|
+
}
|
|
8210
|
+
}
|
|
8211
|
+
}
|
|
8212
|
+
const policies = scopeConfig || contextValuesConfig || softDeleteInfos.size ? {
|
|
8213
|
+
scope: scopeConfig ? (tableName) => scopeConfig[tableName] : void 0,
|
|
8214
|
+
contextValues: contextValuesConfig ? (tableName) => contextValuesConfig[tableName] : void 0,
|
|
8215
|
+
softDelete: softDeleteInfos.size ? (tableName) => softDeleteInfos.get(tableName) : void 0
|
|
8216
|
+
} : void 0;
|
|
7550
8217
|
const exclude = config?.exclude;
|
|
7551
8218
|
if (exclude) {
|
|
7552
8219
|
const tableNames = new Set(tableKeys);
|
|
@@ -7664,6 +8331,7 @@ var buildSchema = (db, config) => {
|
|
|
7664
8331
|
enumNameMapper: config?.enumNameMapper,
|
|
7665
8332
|
transactions,
|
|
7666
8333
|
limits,
|
|
8334
|
+
policies,
|
|
7667
8335
|
exclude,
|
|
7668
8336
|
docs: {
|
|
7669
8337
|
describeColumn: config?.describeColumn,
|