@vantreeseba/drizzle-graphql 7.8.0 → 7.9.1

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.js CHANGED
@@ -468,6 +468,7 @@ var remapToGraphQLCore = (key, value, tableName, column, relationMap) => {
468
468
  return value;
469
469
  };
470
470
  var remapToGraphQLSingleOutput = (queryOutput, tableName, table, relationMap) => {
471
+ const columns = getTableColumns2(table);
471
472
  for (const [key, value] of Object.entries(queryOutput)) {
472
473
  if (value === void 0 || value === null) {
473
474
  const relEntry = value === null ? relationMap?.[tableName]?.[key] : void 0;
@@ -478,7 +479,7 @@ var remapToGraphQLSingleOutput = (queryOutput, tableName, table, relationMap) =>
478
479
  delete queryOutput[key];
479
480
  continue;
480
481
  }
481
- const column = table[key];
482
+ const column = columns[key];
482
483
  if (value === 0n && column && column.columnType === "SQLiteBigInt" && !column.notNull) {
483
484
  delete queryOutput[key];
484
485
  continue;
@@ -937,6 +938,7 @@ var resolveQueryExecutor = (db, context, tableName, buildTimeQueryBase) => {
937
938
  queryBase: buildTimeQueryBase ? executor?.query?.[tableName] ?? buildTimeQueryBase : buildTimeQueryBase
938
939
  };
939
940
  };
941
+ var DEFAULT_TRANSACTION_TIMEOUT_MS = 3e4;
940
942
  var createMutationTxCtx = (options) => options ? { timeoutMs: options.timeoutMs, fieldNames: /* @__PURE__ */ new Set(), states: /* @__PURE__ */ new WeakMap() } : void 0;
941
943
  var includedByDirectives = (node, variables) => {
942
944
  for (const directive of node.directives ?? []) {
@@ -1195,14 +1197,8 @@ var createRelationResolverFactory = (db, tables, nullOrdering, filterCtx, limits
1195
1197
  if (localValue == null) {
1196
1198
  return isOne ? null : [];
1197
1199
  }
1198
- const {
1199
- where: whereArg,
1200
- orderBy: orderByArg,
1201
- limit: requestedLimit,
1202
- offset,
1203
- after,
1204
- deleted
1205
- } = args ?? {};
1200
+ const { where: whereArg, limit: requestedLimit, offset, after, deleted } = args ?? {};
1201
+ const orderByArg = isOne ? args?.orderBy : withDefaultOrderBy(args ?? {}, targetTableName, policies?.defaultOrderBy).orderBy;
1206
1202
  const limit = applyLimitPolicy(requestedLimit, limitPolicy, `${tableName}.${relationName}`);
1207
1203
  const distinct = (args ?? {}).distinct?.length ? (args ?? {}).distinct : void 0;
1208
1204
  const cursorSelected = !isOne && !!info && selectsCursorField(info, targetTable);
@@ -1334,6 +1330,13 @@ var inputFieldDocs = (docs, column, tableName, columnName, fieldType) => {
1334
1330
  }
1335
1331
  return resolved;
1336
1332
  };
1333
+ var withDefaultOrderBy = (args, tableName, defaults) => {
1334
+ if (!defaults || args?.orderBy != null) {
1335
+ return args;
1336
+ }
1337
+ const fallback = defaults(tableName);
1338
+ return fallback ? { ...args, orderBy: fallback } : args;
1339
+ };
1337
1340
  var applyLimitPolicy = (limit, policy, fieldName) => {
1338
1341
  if (!policy) {
1339
1342
  return limit ?? void 0;
@@ -2800,11 +2803,12 @@ var withScope = (scope, tableName, table, condition, mode) => {
2800
2803
  const predicate = scope?.on(tableName, table, mode);
2801
2804
  return predicate ? and(condition, predicate) : condition;
2802
2805
  };
2803
- var bindPolicies = (policies, filterCtx) => policies?.scope || policies?.contextValues || policies?.softDelete || policies?.onWrite ? {
2806
+ var bindPolicies = (policies, filterCtx) => policies?.scope || policies?.contextValues || policies?.softDelete || policies?.onWrite || policies?.defaultOrderBy ? {
2804
2807
  scope: policies.scope || policies.softDelete ? (context) => resolveScope(policies, context, filterCtx) : void 0,
2805
2808
  contextValues: policies.contextValues,
2806
2809
  softDelete: policies.softDelete,
2807
- onWrite: policies.onWrite
2810
+ onWrite: policies.onWrite,
2811
+ defaultOrderBy: policies.defaultOrderBy
2808
2812
  } : void 0;
2809
2813
  var applyContextValues = (values, hooks, context) => {
2810
2814
  if (!hooks) {
@@ -2833,7 +2837,7 @@ var stripContextValues = (values, hooks) => {
2833
2837
  }
2834
2838
  return values;
2835
2839
  };
2836
- var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, originField, typeNameMapper, _isInitial = false, filterCtx, limits, scope) => {
2840
+ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, originField, typeNameMapper, _isInitial = false, filterCtx, limits, scope, defaultOrderBy) => {
2837
2841
  const relationsForTable = relationMap[tableName];
2838
2842
  if (!relationsForTable) {
2839
2843
  return void 0;
@@ -2875,7 +2879,7 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
2875
2879
  const thisRecord = {};
2876
2880
  thisRecord.columns = columns;
2877
2881
  const relationField = Object.values(baseField).find((e) => e.name === relName);
2878
- const relationArgs = relationField?.args;
2882
+ const relationArgs = is3(relEntry.relation, One2) ? relationField?.args : relationField && withDefaultOrderBy(relationField.args ?? {}, targetTableName, defaultOrderBy);
2879
2883
  const offset = relationArgs?.offset ?? void 0;
2880
2884
  const limit = is3(relEntry.relation, One2) ? relationArgs?.limit ?? void 0 : applyLimitPolicy(relationArgs?.limit, limits?.(targetTableName), `${tableName}.${relName}`);
2881
2885
  const relWhere = relationArgs?.where;
@@ -2904,14 +2908,15 @@ var extractRelationsParamsInner = (relationMap, tables, tableName, typeName, ori
2904
2908
  false,
2905
2909
  filterCtx,
2906
2910
  limits,
2907
- scope
2911
+ scope,
2912
+ defaultOrderBy
2908
2913
  ) : void 0;
2909
2914
  thisRecord.with = relWith;
2910
2915
  args[relName] = thisRecord;
2911
2916
  }
2912
2917
  return args;
2913
2918
  };
2914
- var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits, scope) => {
2919
+ var extractRelationsParams = (relationMap, tables, tableName, info, typeName, typeNameMapper, filterCtx, limits, scope, defaultOrderBy) => {
2915
2920
  if (!info) {
2916
2921
  return void 0;
2917
2922
  }
@@ -2925,7 +2930,8 @@ var extractRelationsParams = (relationMap, tables, tableName, info, typeName, ty
2925
2930
  true,
2926
2931
  filterCtx,
2927
2932
  limits,
2928
- scope
2933
+ scope,
2934
+ defaultOrderBy
2929
2935
  );
2930
2936
  };
2931
2937
  var pruneNonEagerRelations = (relationMap, shouldEagerLoad) => {
@@ -3336,7 +3342,8 @@ var prepareMutationRelationColumns = (params) => {
3336
3342
  typeNameMapper,
3337
3343
  void 0,
3338
3344
  params.limits,
3339
- params.scope
3345
+ params.scope,
3346
+ params.defaultOrderBy
3340
3347
  ) : void 0;
3341
3348
  const hasRelations = !!(withParams && Object.keys(withParams).length);
3342
3349
  const baseColumns = extractSelectedColumnsFromTreeSQLFormat(parsedInfo.fieldsByTypeName[typeName], table, {
@@ -3678,7 +3685,8 @@ var runRelationalSelect = async (opts) => {
3678
3685
  typeNameMapper,
3679
3686
  filterCtx,
3680
3687
  opts.limits,
3681
- scope
3688
+ scope,
3689
+ opts.defaultOrderBy
3682
3690
  ) : void 0
3683
3691
  };
3684
3692
  if (single) {
@@ -3964,7 +3972,7 @@ var parseAggregateRequest = (info, target, rootTypeName = `${target.typeName}Agg
3964
3972
  for (const field of Object.values(selectionTree)) {
3965
3973
  if (field.name === "count") {
3966
3974
  request.count = true;
3967
- request.selection.count = count();
3975
+ request.selection["count"] = count();
3968
3976
  continue;
3969
3977
  }
3970
3978
  if (!AGGREGATE_OPS.includes(field.name)) {
@@ -3990,7 +3998,7 @@ var parseAggregateRequest = (info, target, rootTypeName = `${target.typeName}Agg
3990
3998
  var assembleAggregateRow = (row, request, target) => {
3991
3999
  const result = {};
3992
4000
  if (request.count) {
3993
- result.count = row.count == null ? 0 : Number(row.count);
4001
+ result["count"] = row["count"] == null ? 0 : Number(row["count"]);
3994
4002
  }
3995
4003
  for (const op of AGGREGATE_OPS) {
3996
4004
  if (!request.ops[op].length) {
@@ -4316,7 +4324,8 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
4316
4324
  );
4317
4325
  return {
4318
4326
  name: fieldName,
4319
- resolver: async (_source, args, context, info) => {
4327
+ resolver: async (_source, rawArgs, context, info) => {
4328
+ const args = withDefaultOrderBy(rawArgs, tableName, policies?.defaultOrderBy);
4320
4329
  try {
4321
4330
  const parsedInfo = parseResolveInfo2(info, { deep: true });
4322
4331
  const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
@@ -4334,6 +4343,7 @@ var generateSelectArray = (db, tableName, tables, relationMap, orderArgs, filter
4334
4343
  single: false,
4335
4344
  filterCtx,
4336
4345
  limits,
4346
+ defaultOrderBy: policies?.defaultOrderBy,
4337
4347
  scope: policies?.scope?.(context),
4338
4348
  pkNames,
4339
4349
  db: executor,
@@ -4359,7 +4369,8 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
4359
4369
  const pkNames = mysqlPrimaryKeyPropNames(table);
4360
4370
  return {
4361
4371
  name: fieldName,
4362
- resolver: async (_source, args, context, info) => {
4372
+ resolver: async (_source, rawArgs, context, info) => {
4373
+ const args = withDefaultOrderBy(rawArgs, tableName, policies?.defaultOrderBy);
4363
4374
  try {
4364
4375
  const parsedInfo = parseResolveInfo2(info, { deep: true });
4365
4376
  const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
@@ -4376,6 +4387,7 @@ var generateSelectSingle = (db, tableName, tables, relationMap, orderArgs, filte
4376
4387
  single: true,
4377
4388
  filterCtx,
4378
4389
  limits,
4390
+ defaultOrderBy: policies?.defaultOrderBy,
4379
4391
  scope: policies?.scope?.(context),
4380
4392
  pkNames,
4381
4393
  db: executor
@@ -4883,7 +4895,7 @@ var generateSchemaData = (db, schema, relations, options) => {
4883
4895
  const inputs = {};
4884
4896
  const outputs = {};
4885
4897
  if (["insert", "upsert", "update", "delete"].some((feature) => anyTable(feature))) {
4886
- outputs.MutationReturn = mutationReturnType;
4898
+ outputs["MutationReturn"] = mutationReturnType;
4887
4899
  }
4888
4900
  for (const [tableName, tableTypes] of Object.entries(gqlSchemaTypes)) {
4889
4901
  const tableFeatures = featureOf(tableName);
@@ -5795,7 +5807,8 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
5795
5807
  );
5796
5808
  return {
5797
5809
  name: fieldName,
5798
- resolver: async (_source, args, context, info) => {
5810
+ resolver: async (_source, rawArgs, context, info) => {
5811
+ const args = withDefaultOrderBy(rawArgs, tableName, policies?.defaultOrderBy);
5799
5812
  try {
5800
5813
  const parsedInfo = parseResolveInfo3(info, { deep: true });
5801
5814
  const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
@@ -5816,6 +5829,7 @@ var generateSelectArray2 = (db, tableName, tables, relationMap, orderArgs, filte
5816
5829
  single: false,
5817
5830
  filterCtx,
5818
5831
  limits,
5832
+ defaultOrderBy: policies?.defaultOrderBy,
5819
5833
  pkNames,
5820
5834
  db: executor,
5821
5835
  scope,
@@ -5925,7 +5939,8 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
5925
5939
  const pkNames = pgPrimaryKeyPropNames(table);
5926
5940
  return {
5927
5941
  name: fieldName,
5928
- resolver: async (_source, args, context, info) => {
5942
+ resolver: async (_source, rawArgs, context, info) => {
5943
+ const args = withDefaultOrderBy(rawArgs, tableName, policies?.defaultOrderBy);
5929
5944
  try {
5930
5945
  const parsedInfo = parseResolveInfo3(info, { deep: true });
5931
5946
  const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
@@ -5944,6 +5959,7 @@ var generateSelectSingle2 = (db, tableName, tables, relationMap, orderArgs, filt
5944
5959
  single: true,
5945
5960
  filterCtx,
5946
5961
  limits,
5962
+ defaultOrderBy: policies?.defaultOrderBy,
5947
5963
  pkNames,
5948
5964
  db: executor,
5949
5965
  scope
@@ -6037,7 +6053,8 @@ var generateInsertArray2 = (db, tableName, table, tables, relationMap, baseType,
6037
6053
  pkNames,
6038
6054
  parsedInfo,
6039
6055
  limits,
6040
- scope
6056
+ scope,
6057
+ defaultOrderBy: policies?.defaultOrderBy
6041
6058
  });
6042
6059
  const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
6043
6060
  const runInsert = async (target, values) => {
@@ -6127,7 +6144,8 @@ var generateInsertSingle2 = (db, tableName, table, tables, relationMap, baseType
6127
6144
  pkNames,
6128
6145
  parsedInfo,
6129
6146
  limits,
6130
- scope
6147
+ scope,
6148
+ defaultOrderBy: policies?.defaultOrderBy
6131
6149
  });
6132
6150
  const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
6133
6151
  const runInsert = async (target, values) => {
@@ -6229,7 +6247,8 @@ var generateUpsert2 = (db, tableName, table, tables, relationMap, baseType, onCo
6229
6247
  pkNames,
6230
6248
  parsedInfo,
6231
6249
  limits,
6232
- scope
6250
+ scope,
6251
+ defaultOrderBy: policies?.defaultOrderBy
6233
6252
  });
6234
6253
  const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
6235
6254
  const runUpsert = async (target, values) => {
@@ -6327,7 +6346,8 @@ var generateUpdate2 = (db, tableName, table, tables, relationMap, setArgs, filte
6327
6346
  pkNames,
6328
6347
  parsedInfo,
6329
6348
  limits,
6330
- scope
6349
+ scope,
6350
+ defaultOrderBy: policies?.defaultOrderBy
6331
6351
  });
6332
6352
  const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
6333
6353
  const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
@@ -6441,7 +6461,8 @@ var generateUpdateMany2 = (db, tableName, table, tables, relationMap, updateMany
6441
6461
  pkNames,
6442
6462
  parsedInfo,
6443
6463
  limits,
6444
- scope
6464
+ scope,
6465
+ defaultOrderBy: policies?.defaultOrderBy
6445
6466
  });
6446
6467
  const entries = updates.map(({ where, set }) => {
6447
6468
  const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
@@ -6636,7 +6657,7 @@ function generateSchemaData2(db, schema, relations, options) {
6636
6657
  for (const excluded of excludedTables) {
6637
6658
  delete namedRelations[excluded];
6638
6659
  }
6639
- attachTargetPrimaryKeys(namedRelations, tables, pgPrimaryKeyPropNames);
6660
+ attachTargetPrimaryKeys(namedRelations, tables, (table) => pgPrimaryKeyPropNames(table));
6640
6661
  const eagerRelations = pruneNonEagerRelations(namedRelations, shouldEagerLoad);
6641
6662
  const filterCtx = { tables, relationMap: namedRelations };
6642
6663
  const tablePolicies = options.policies;
@@ -7250,7 +7271,8 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
7250
7271
  );
7251
7272
  return {
7252
7273
  name: fieldName,
7253
- resolver: async (_source, args, context, info) => {
7274
+ resolver: async (_source, rawArgs, context, info) => {
7275
+ const args = withDefaultOrderBy(rawArgs, tableName, policies?.defaultOrderBy);
7254
7276
  try {
7255
7277
  const parsedInfo = parseResolveInfo4(info, { deep: true });
7256
7278
  const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
@@ -7268,6 +7290,7 @@ var generateSelectArray3 = (db, tableName, tables, relationMap, orderArgs, filte
7268
7290
  single: false,
7269
7291
  filterCtx,
7270
7292
  limits,
7293
+ defaultOrderBy: policies?.defaultOrderBy,
7271
7294
  pkNames,
7272
7295
  db: executor,
7273
7296
  scope: policies?.scope?.(context),
@@ -7293,7 +7316,8 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
7293
7316
  const pkNames = sqlitePrimaryKeyPropNames(table);
7294
7317
  return {
7295
7318
  name: fieldName,
7296
- resolver: async (_source, args, context, info) => {
7319
+ resolver: async (_source, rawArgs, context, info) => {
7320
+ const args = withDefaultOrderBy(rawArgs, tableName, policies?.defaultOrderBy);
7297
7321
  try {
7298
7322
  const parsedInfo = parseResolveInfo4(info, { deep: true });
7299
7323
  const { executor, queryBase: requestQueryBase } = resolveQueryExecutor(db, context, tableName, queryBase);
@@ -7310,6 +7334,7 @@ var generateSelectSingle3 = (db, tableName, tables, relationMap, orderArgs, filt
7310
7334
  single: true,
7311
7335
  filterCtx,
7312
7336
  limits,
7337
+ defaultOrderBy: policies?.defaultOrderBy,
7313
7338
  pkNames,
7314
7339
  db: executor,
7315
7340
  scope: policies?.scope?.(context)
@@ -7374,7 +7399,8 @@ var generateInsertArray3 = (db, tableName, table, tables, relationMap, baseType,
7374
7399
  pkNames,
7375
7400
  parsedInfo,
7376
7401
  limits,
7377
- scope
7402
+ scope,
7403
+ defaultOrderBy: policies?.defaultOrderBy
7378
7404
  });
7379
7405
  const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
7380
7406
  const runInsert = async (target, values) => {
@@ -7464,7 +7490,8 @@ var generateInsertSingle3 = (db, tableName, table, tables, relationMap, baseType
7464
7490
  pkNames,
7465
7491
  parsedInfo,
7466
7492
  limits,
7467
- scope
7493
+ scope,
7494
+ defaultOrderBy: policies?.defaultOrderBy
7468
7495
  });
7469
7496
  const returning = nestedEntry ? nested.withJoinColumns(tableName, nestedEntry.ops, { ...columns }, table) : columns;
7470
7497
  const runInsert = async (target, values) => {
@@ -7566,7 +7593,8 @@ var generateUpsert3 = (db, tableName, table, tables, relationMap, baseType, onCo
7566
7593
  pkNames,
7567
7594
  parsedInfo,
7568
7595
  limits,
7569
- scope
7596
+ scope,
7597
+ defaultOrderBy: policies?.defaultOrderBy
7570
7598
  });
7571
7599
  const returning = nestedEntries ? nested.withJoinColumns(tableName, mergedOps(nestedEntries), { ...columns }, table) : columns;
7572
7600
  const runUpsert = async (target, values) => {
@@ -7664,7 +7692,8 @@ var generateUpdate3 = (db, tableName, table, tables, relationMap, setArgs, filte
7664
7692
  pkNames,
7665
7693
  parsedInfo,
7666
7694
  limits,
7667
- scope
7695
+ scope,
7696
+ defaultOrderBy: policies?.defaultOrderBy
7668
7697
  });
7669
7698
  const entry = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
7670
7699
  const nestedOps = entry && nested.hasOps(entry.ops) ? entry.ops : void 0;
@@ -7778,7 +7807,8 @@ var generateUpdateMany3 = (db, tableName, table, tables, relationMap, updateMany
7778
7807
  pkNames,
7779
7808
  parsedInfo,
7780
7809
  limits,
7781
- scope
7810
+ scope,
7811
+ defaultOrderBy: policies?.defaultOrderBy
7782
7812
  });
7783
7813
  const entries = updates.map(({ where, set }) => {
7784
7814
  const split = nested?.enabled(tableName) ? nested.split(tableName, set) : void 0;
@@ -8765,7 +8795,9 @@ var buildSchema = (db, config) => {
8765
8795
  aggregateCost: (complexityConfig === true ? void 0 : complexityConfig.aggregateCost) ?? 10
8766
8796
  };
8767
8797
  const transactionsOpt = config?.transactions;
8768
- const transactions = transactionsOpt === void 0 || transactionsOpt === "none" ? void 0 : { timeoutMs: (transactionsOpt === "auto" ? void 0 : transactionsOpt.timeoutMs) ?? 3e4 };
8798
+ const transactions = transactionsOpt === void 0 || transactionsOpt === "none" ? void 0 : {
8799
+ timeoutMs: (transactionsOpt === "auto" ? void 0 : transactionsOpt.timeoutMs) ?? DEFAULT_TRANSACTION_TIMEOUT_MS
8800
+ };
8769
8801
  const limitsConfig = config?.limits;
8770
8802
  if (limitsConfig) {
8771
8803
  const check = (policy, where) => {
@@ -8793,6 +8825,46 @@ var buildSchema = (db, config) => {
8793
8825
  limitPolicyCache.set(tableName, resolved);
8794
8826
  return resolved;
8795
8827
  } : void 0;
8828
+ const defaultsConfig = config?.defaults;
8829
+ const defaultOrderByByTable = /* @__PURE__ */ new Map();
8830
+ if (defaultsConfig) {
8831
+ const defaultsTableNames = new Set(tableKeys);
8832
+ for (const [tableName, tableDefaults] of Object.entries(defaultsConfig)) {
8833
+ if (!defaultsTableNames.has(tableName)) {
8834
+ throw new Error(
8835
+ `Drizzle-GraphQL Error: config.defaults names '${tableName}', which is not a table in the Drizzle schema.`
8836
+ );
8837
+ }
8838
+ const orderBy = tableDefaults?.orderBy;
8839
+ if (!orderBy || !Object.keys(orderBy).length) {
8840
+ continue;
8841
+ }
8842
+ const columns = getColumns6(schema[tableName]);
8843
+ const normalized = {};
8844
+ for (const [columnName, entry] of Object.entries(orderBy)) {
8845
+ if (!columns[columnName]) {
8846
+ throw new Error(
8847
+ `Drizzle-GraphQL Error: config.defaults.${tableName}.orderBy names '${columnName}', which is not a column of '${tableName}'.`
8848
+ );
8849
+ }
8850
+ const direction = typeof entry === "string" ? entry : entry?.direction;
8851
+ if (direction !== "asc" && direction !== "desc") {
8852
+ throw new Error(
8853
+ `Drizzle-GraphQL Error: config.defaults.${tableName}.orderBy.${columnName} must be 'asc', 'desc', or { direction, priority? }.`
8854
+ );
8855
+ }
8856
+ const priority = typeof entry === "string" ? void 0 : entry?.priority;
8857
+ if (priority !== void 0 && !Number.isInteger(priority)) {
8858
+ throw new Error(
8859
+ `Drizzle-GraphQL Error: config.defaults.${tableName}.orderBy.${columnName}.priority must be an integer.`
8860
+ );
8861
+ }
8862
+ normalized[columnName] = priority === void 0 ? { direction } : { direction, priority };
8863
+ }
8864
+ defaultOrderByByTable.set(tableName, normalized);
8865
+ }
8866
+ }
8867
+ const defaultOrderBy = defaultOrderByByTable.size ? (tableName) => defaultOrderByByTable.get(tableName) : void 0;
8796
8868
  const scopeConfig = config?.scope;
8797
8869
  const contextValuesConfig = config?.contextValues;
8798
8870
  if (scopeConfig || contextValuesConfig) {
@@ -8873,11 +8945,12 @@ var buildSchema = (db, config) => {
8873
8945
  }
8874
8946
  }
8875
8947
  const onWrite = globalWriteHooks || writeHooks.size ? (tableName) => globalWriteHooks ?? writeHooks.get(tableName) : void 0;
8876
- const policies = scopeConfig || contextValuesConfig || softDeleteInfos.size || onWrite ? {
8948
+ const policies = scopeConfig || contextValuesConfig || softDeleteInfos.size || onWrite || defaultOrderBy ? {
8877
8949
  scope: scopeConfig ? (tableName) => scopeConfig[tableName] : void 0,
8878
8950
  contextValues: contextValuesConfig ? (tableName) => contextValuesConfig[tableName] : void 0,
8879
8951
  softDelete: softDeleteInfos.size ? (tableName) => softDeleteInfos.get(tableName) : void 0,
8880
- onWrite
8952
+ onWrite,
8953
+ defaultOrderBy
8881
8954
  } : void 0;
8882
8955
  const exclude = config?.exclude;
8883
8956
  if (exclude) {