@palbase/backend 38.0.15 → 39.0.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.
Files changed (58) hide show
  1. package/dist/bin/palbase-backend.cjs +46 -1
  2. package/dist/bin/palbase-backend.cjs.map +1 -1
  3. package/dist/bin/palbase-backend.js +5 -5
  4. package/dist/{chunk-LFUNRWUE.js → chunk-4J6I4KVQ.js} +67 -3
  5. package/dist/{chunk-LFUNRWUE.js.map → chunk-4J6I4KVQ.js.map} +1 -1
  6. package/dist/{chunk-7WAGQ3VR.js → chunk-AR2I4M7I.js} +497 -17
  7. package/dist/chunk-AR2I4M7I.js.map +1 -0
  8. package/dist/{chunk-YANGWAIM.js → chunk-H7EKL6HC.js} +2 -2
  9. package/dist/{chunk-EHKEMHB4.js → chunk-JJSR4BUX.js} +49 -5
  10. package/dist/chunk-JJSR4BUX.js.map +1 -0
  11. package/dist/{chunk-CS6NQ6PO.js → chunk-JPTFYHP3.js} +2 -2
  12. package/dist/{chunk-CS6NQ6PO.js.map → chunk-JPTFYHP3.js.map} +1 -1
  13. package/dist/{chunk-X7UR3VXA.js → chunk-XZWOMPD3.js} +3 -2
  14. package/dist/chunk-XZWOMPD3.js.map +1 -0
  15. package/dist/{chunk-PDD55QWN.js → chunk-ZNQDL466.js} +2 -2
  16. package/dist/db/index.cjs +378 -14
  17. package/dist/db/index.cjs.map +1 -1
  18. package/dist/db/index.d.cts +1 -1
  19. package/dist/db/index.d.ts +1 -1
  20. package/dist/db/index.js +3 -3
  21. package/dist/engine/index.cjs +46 -1
  22. package/dist/engine/index.cjs.map +1 -1
  23. package/dist/engine/index.d.cts +3 -3
  24. package/dist/engine/index.d.ts +3 -3
  25. package/dist/engine/index.js +5 -5
  26. package/dist/{index-CI7S0Wqv.d.cts → index-B0mjUnxy.d.cts} +25 -2
  27. package/dist/{index-CUy50OLU.d.ts → index-eN4KzGa5.d.ts} +555 -29
  28. package/dist/{index-DRx880KY.d.cts → index-pK2At5Yc.d.cts} +555 -29
  29. package/dist/{index-Ogi30dbt.d.ts → index-yDno9Ju9.d.ts} +25 -2
  30. package/dist/index.cjs +628 -17
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +183 -8
  33. package/dist/index.d.ts +183 -8
  34. package/dist/index.js +74 -6
  35. package/dist/index.js.map +1 -1
  36. package/dist/openapi/index.cjs.map +1 -1
  37. package/dist/openapi/index.d.cts +2 -2
  38. package/dist/openapi/index.d.ts +2 -2
  39. package/dist/openapi/index.js +2 -2
  40. package/dist/{registry-C7UCkQf0.d.cts → registry-9dNeVN5d.d.cts} +1 -1
  41. package/dist/{registry-DJcvbomD.d.ts → registry-B8ddZiMY.d.ts} +1 -1
  42. package/dist/test/index.cjs +19 -0
  43. package/dist/test/index.cjs.map +1 -1
  44. package/dist/test/index.d.cts +1 -1
  45. package/dist/test/index.d.ts +1 -1
  46. package/dist/test/index.js +20 -2
  47. package/dist/test/index.js.map +1 -1
  48. package/docs/README.md +1 -1
  49. package/docs/database.md +79 -0
  50. package/docs/llms-full.txt +462 -33
  51. package/docs/schema.md +382 -32
  52. package/package.json +1 -1
  53. package/template/package.json +1 -1
  54. package/dist/chunk-7WAGQ3VR.js.map +0 -1
  55. package/dist/chunk-EHKEMHB4.js.map +0 -1
  56. package/dist/chunk-X7UR3VXA.js.map +0 -1
  57. /package/dist/{chunk-YANGWAIM.js.map → chunk-H7EKL6HC.js.map} +0 -0
  58. /package/dist/{chunk-PDD55QWN.js.map → chunk-ZNQDL466.js.map} +0 -0
@@ -897,6 +897,7 @@ function makeTypedSurface(raw) {
897
897
  $facets: /* @__PURE__ */ __name((table, params) => reco.facets(table, params), "$facets"),
898
898
  $claim: /* @__PURE__ */ __name((table, unique, extra) => reco.claim(table, unique, extra), "$claim"),
899
899
  $lockRows: /* @__PURE__ */ __name((table, ids) => reco.lockRows(table, ids), "$lockRows"),
900
+ $lockRowsWhere: /* @__PURE__ */ __name((table, where, opts) => reco.lockRowsWhere(table, where, opts), "$lockRowsWhere"),
900
901
  $advisoryXactLock: /* @__PURE__ */ __name((key2) => reco.advisoryXactLock(key2), "$advisoryXactLock"),
901
902
  $aggregate: /* @__PURE__ */ __name((table, q) => raw.aggregate(table, q), "$aggregate"),
902
903
  $insertMany: /* @__PURE__ */ __name((table, rows, opts) => raw.insertMany(table, rows, opts), "$insertMany"),
@@ -1231,7 +1232,7 @@ var DeadlockDetected = class extends Conflict {
1231
1232
  return typeof e === "object" && e !== null && e.name === "DeadlockDetected";
1232
1233
  }
1233
1234
  constructor(sqlstate = SQLSTATE.deadlockDetected, message, data) {
1234
- super(message ?? "deadlock: iki i\u015Flem birbirinin kilidini bekledi ve bu i\u015Flem iptal edildi \u2014 kilit s\u0131ras\u0131n\u0131 sabitlemek i\xE7in Database.$lockRows(tablo, id'ler) kullan\u0131n", "deadlock_detected", data);
1235
+ super(message ?? "deadlock: iki i\u015Flem birbirinin kilidini bekledi ve bu i\u015Flem iptal edildi \u2014 kilit s\u0131ras\u0131n\u0131 sabitleyin: id'ler elinizdeyse Database.$lockRows(tablo, id'ler), elinizde bir filtre varsa Database.$lockRowsWhere(tablo, filtre) kullan\u0131n", "deadlock_detected", data);
1235
1236
  this.name = "DeadlockDetected";
1236
1237
  this.sqlstate = sqlstate;
1237
1238
  }
@@ -3016,6 +3017,11 @@ var WHERE_OPS = {
3016
3017
  lte: "<=",
3017
3018
  neq: "<>"
3018
3019
  };
3020
+ var LOCK_MODES = {
3021
+ update: "FOR UPDATE",
3022
+ share: "FOR SHARE",
3023
+ noKeyUpdate: "FOR NO KEY UPDATE"
3024
+ };
3019
3025
  function ftsExprOf(ftsCols) {
3020
3026
  return [
3021
3027
  ...ftsCols
@@ -4009,6 +4015,45 @@ function createOps(tx, context = {}) {
4009
4015
  await (await at()).unsafe(`SELECT t.${quoteIdent(pk)} FROM ${quoteTable(table)} t WHERE t.${quoteIdent(pk)} IN (${list}) ORDER BY t.${quoteIdent(pk)} FOR NO KEY UPDATE`, params);
4010
4016
  },
4011
4017
  /**
4018
+ * Bir FİLTRENİN eşleştiği satırları kilitle — sırayı yine KATMAN koyar
4019
+ * (FR-037).
4020
+ *
4021
+ * `lockRows` kilitlenecek kümeyi çağıranın SAYMASINI istiyor. "Bu hesabın
4022
+ * bekleyen bütün hareketlerini kilitle" bunu yapamaz: id listesi ancak bir
4023
+ * sorguyla çıkar, ve SORGU İLE KİLİT ARASINDAKİ BOŞLUK tam olarak kilidin
4024
+ * kapatması gereken yarıştır — araya giren bir INSERT o listede yoktur ve
4025
+ * kilitlenmez. Burada küme TEK statement'ta hem seçiliyor hem kilitleniyor.
4026
+ *
4027
+ * `ORDER BY <pk>`: `updateMany`'nin kilit CTE'siyle AYNI sıra (FR-037b).
4028
+ * Sırayı iki yolun da katmandan alması, aynı satır kümesine giren iki
4029
+ * transaction'ın ters sırada kilitlemesini imkânsız kılıyor — deadlock'un
4030
+ * bedeli ucuz değil, `deadlock_timeout` varsayılanı 1 SANİYE.
4031
+ *
4032
+ * KİLİT MODU EŞİTLENMEZ (FR-037b): `updateMany` işi UPDATE olduğu için
4033
+ * `FOR NO KEY UPDATE` kullanıyor, ama burada mod ÇAĞIRANIN seçimi. Herkesi
4034
+ * o moda zorlamak, yalnız okuma kilidi isteyeni ihtiyacından fazlasını
4035
+ * almaya zorlardı. Deadlock'u önleyen SIRADIR, mod değil.
4036
+ */
4037
+ async lockRowsWhere(table, where, opts) {
4038
+ const mode = opts?.mode ?? "update";
4039
+ const clause = LOCK_MODES[mode];
4040
+ if (clause === void 0) {
4041
+ throw new Error(`lockRowsWhere(${table}): bilinmeyen mode "${String(mode)}" \u2014 "update" (FOR UPDATE), "share" (FOR SHARE) ya da "noKeyUpdate" (FOR NO KEY UPDATE).`);
4042
+ }
4043
+ const pk = primaryKeyOf(table);
4044
+ if (pk === null) {
4045
+ throw new Error(`lockRowsWhere(${table}): tek-kolon primary key bulunamad\u0131 \u2014 kilit s\u0131ras\u0131 bir anahtar ister (FR-037).`);
4046
+ }
4047
+ const params = [];
4048
+ const add = /* @__PURE__ */ __name((v) => {
4049
+ params.push(v);
4050
+ return `$${params.length}`;
4051
+ }, "add");
4052
+ const whereSql = compileWhere(table, schemaColumns(table), where, add, "lockRowsWhere");
4053
+ assertHasPredicate(whereSql, "lockRowsWhere", table);
4054
+ await (await at()).unsafe(`SELECT t.${quoteIdent(pk)} FROM ${quoteTable(table)} t WHERE true${whereSql} ORDER BY t.${quoteIdent(pk)} ${clause}`, params);
4055
+ },
4056
+ /**
4012
4057
  * Bir idempotency anahtarını SAHİPLEN (FR-033).
4013
4058
  *
4014
4059
  * `{ inserted: true, row }` → bu çağrı yazdı.