@m1212e/rumble 0.23.4 → 0.23.7

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/out/index.mjs CHANGED
@@ -180,12 +180,25 @@ function mapNullFieldsToUndefined(obj) {
180
180
  }
181
181
  //#endregion
182
182
  //#region package.json
183
- var version = "0.23.4";
183
+ var version = "0.23.7";
184
184
  //#endregion
185
185
  //#region lib/helpers/mergeFilters.ts
186
+ const EmptyFilter$1 = Symbol.for("drizzle:EmptyFilter");
187
+ /**
188
+ * Normalizes drizzle-orm's `EmptyFilter` sentinel to `undefined` so it's
189
+ * treated as "no filter" rather than a real filter value to combine with
190
+ * AND/OR — otherwise merging an unrestricted (EmptyFilter) base filter with
191
+ * a real `where` would needlessly wrap it as `{ AND: [EmptyFilter, where] }`
192
+ * instead of just `where`.
193
+ */
194
+ function realWhere(where) {
195
+ return where === EmptyFilter$1 ? void 0 : where;
196
+ }
186
197
  function mergeFilters(filterA, filterB, mode = "AND") {
198
+ const filterAWhere = realWhere(filterA?.where);
199
+ const filterBWhere = realWhere(filterB?.where);
187
200
  return {
188
- where: filterA?.where && filterB?.where ? mode === "OR" ? { OR: [filterA.where, filterB.where] } : { AND: [filterA.where, filterB.where] } : filterA?.where ?? filterB?.where,
201
+ where: filterAWhere && filterBWhere ? mode === "OR" ? { OR: [filterAWhere, filterBWhere] } : { AND: [filterAWhere, filterBWhere] } : filterAWhere ?? filterBWhere,
189
202
  columns: filterA?.columns || filterB?.columns ? new Set([Object.entries(filterA?.columns ?? {}), Object.entries(filterB?.columns ?? {})].flat().filter(([, v]) => v === true).map(([k]) => k)).entries().reduce((acc, [key]) => {
190
203
  acc[key] = true;
191
204
  return acc;
@@ -412,6 +425,21 @@ function tableHelper({ db, table }) {
412
425
  }
413
426
  //#endregion
414
427
  //#region lib/abilityBuilder.ts
428
+ /**
429
+ * drizzle-orm's sentinel value for "this filter field is deliberately
430
+ * skipped", as opposed to `undefined`, which some drizzle-orm versions
431
+ * reject when it ends up as an explicit (present but `undefined`) `where`
432
+ * property nested inside a relational `with` query.
433
+ *
434
+ * drizzle-orm defines this via `Symbol.for("drizzle:EmptyFilter")` — a
435
+ * globally registered symbol — so recreating it the same way here yields
436
+ * the exact same value drizzle-orm's relational query engine checks for,
437
+ * without importing it directly: not every drizzle-orm version rumble
438
+ * supports exports it as a named export, and older versions that don't know
439
+ * about it at all still handle it safely (`Object.entries` on a symbol
440
+ * yields no entries, i.e. "no filter").
441
+ */
442
+ const EmptyFilter = Symbol.for("drizzle:EmptyFilter");
415
443
  function isDynamicQueryFilter(filter) {
416
444
  return typeof filter === "function" && filter.constructor.name !== "AsyncFunction";
417
445
  }
@@ -580,7 +608,7 @@ by: (explicitFilter) => {
580
608
  */
581
609
  single: {
582
610
  extras: filters?.extras,
583
- where: filters?.where,
611
+ where: filters?.where ?? EmptyFilter,
584
612
  columns: filters?.columns
585
613
  },
586
614
  /**
@@ -588,7 +616,7 @@ by: (explicitFilter) => {
588
616
  */
589
617
  many: {
590
618
  extras: filters?.extras,
591
- where: filters?.where,
619
+ where: filters?.where ?? EmptyFilter,
592
620
  columns: filters?.columns,
593
621
  get limit() {
594
622
  return limit();
@@ -634,14 +662,14 @@ by: (explicitFilter) => {
634
662
  */
635
663
  single: {
636
664
  extras: filters?.extras,
637
- where: filters?.where
665
+ where: filters?.where ?? EmptyFilter
638
666
  },
639
667
  /**
640
668
  * For find many calls
641
669
  */
642
670
  many: {
643
671
  extras: filters?.extras,
644
- where: filters?.where,
672
+ where: filters?.where ?? EmptyFilter,
645
673
  get limit() {
646
674
  return limit();
647
675
  }
@@ -1834,7 +1862,7 @@ const createPubSubInstance = ({ subscriptions }) => {
1834
1862
  //#region lib/query.ts
1835
1863
  const createQueryImplementer = ({ db, schemaBuilder, search, logger: loggerConfig, whereArgImplementer, orderArgImplementer, makePubSubInstance }) => {
1836
1864
  const registeredQueryFieldNames = /* @__PURE__ */ new Set();
1837
- return ({ table, readAction = "read", listAction = "read" }) => {
1865
+ return ({ table, readAction = "read", listAction = "read", findFirst, findMany }) => {
1838
1866
  const WhereArg = whereArgImplementer({ table });
1839
1867
  const OrderArg = orderArgImplementer({ table });
1840
1868
  const tableSchema = tableHelper({
@@ -1893,8 +1921,13 @@ const createQueryImplementer = ({ db, schemaBuilder, search, logger: loggerConfi
1893
1921
  const filter = ctx.abilities[table].filter(listAction).merge(mappedArgs).query.many;
1894
1922
  if (mappedArgs.offset) filter.offset = mappedArgs.offset;
1895
1923
  if (mappedArgs.orderBy) filter.orderBy = mappedArgs.orderBy;
1896
- const queryInstance = query(filter);
1897
- if (filter.columns) queryInstance.columns = filter.columns;
1924
+ const queryArgs = query(filter);
1925
+ if (filter.columns) queryArgs.columns = filter.columns;
1926
+ const run = findMany ? (tx) => findMany({
1927
+ tx,
1928
+ filter,
1929
+ queryArgs
1930
+ }) : (tx) => tx.query[table].findMany(queryArgs);
1898
1931
  if (search?.enabled && args.search && args.search.length > 0 && search?.cpu_operator_cost) return db.transaction(async (tx) => {
1899
1932
  if (isPostgresDB(tx)) await tx.execute(sql.raw(`SET cpu_operator_cost = ${search.cpu_operator_cost};`));
1900
1933
  else {
@@ -1902,9 +1935,9 @@ const createQueryImplementer = ({ db, schemaBuilder, search, logger: loggerConfi
1902
1935
  const log = loggerConfig?.enabled ? loggerConfig.logger : void 0;
1903
1936
  log ? log.info({}, msg) : console.info(msg);
1904
1937
  }
1905
- return tx.query[table].findMany(queryInstance);
1938
+ return run(tx);
1906
1939
  });
1907
- return db.query[table].findMany(queryInstance);
1940
+ return run(db);
1908
1941
  }
1909
1942
  }),
1910
1943
  [singularName]: t.drizzleField({
@@ -1916,9 +1949,13 @@ const createQueryImplementer = ({ db, schemaBuilder, search, logger: loggerConfi
1916
1949
  resolve: (query, _root, args, ctx, _info) => {
1917
1950
  deepSetProto(args);
1918
1951
  const filter = ctx.abilities[table].filter(readAction).merge({ where: { [primaryKeyField.name]: args.id } }).query.single;
1919
- const q = query(filter);
1920
- if (filter.columns) q.columns = filter.columns;
1921
- return db.query[table].findFirst(q).then(assertFindFirstExists);
1952
+ const queryArgs = query(filter);
1953
+ if (filter.columns) queryArgs.columns = filter.columns;
1954
+ return findFirst ? findFirst({
1955
+ tx: db,
1956
+ filter,
1957
+ queryArgs
1958
+ }) : db.query[table].findFirst(queryArgs).then(assertFindFirstExists);
1922
1959
  }
1923
1960
  })
1924
1961
  };