@vantreeseba/drizzle-graphql 7.4.0 → 7.6.0

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