@filelayer/core 0.3.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 (69) hide show
  1. package/CHANGELOG.md +338 -0
  2. package/LICENSE +202 -0
  3. package/MIGRATIONS.md +328 -0
  4. package/NOTICE +37 -0
  5. package/README.md +343 -0
  6. package/SEMANTICS.md +729 -0
  7. package/dist/authz.d.ts +524 -0
  8. package/dist/authz.d.ts.map +1 -0
  9. package/dist/authz.js +889 -0
  10. package/dist/authz.js.map +1 -0
  11. package/dist/db.d.ts +145 -0
  12. package/dist/db.d.ts.map +1 -0
  13. package/dist/db.js +217 -0
  14. package/dist/db.js.map +1 -0
  15. package/dist/delivery.d.ts +293 -0
  16. package/dist/delivery.d.ts.map +1 -0
  17. package/dist/delivery.js +519 -0
  18. package/dist/delivery.js.map +1 -0
  19. package/dist/errors.d.ts +16 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +21 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/filelayer.d.ts +542 -0
  24. package/dist/filelayer.d.ts.map +1 -0
  25. package/dist/filelayer.js +1360 -0
  26. package/dist/filelayer.js.map +1 -0
  27. package/dist/index.d.ts +8 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +8 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/simple.d.ts +297 -0
  32. package/dist/simple.d.ts.map +1 -0
  33. package/dist/simple.js +492 -0
  34. package/dist/simple.js.map +1 -0
  35. package/dist/storage.d.ts +269 -0
  36. package/dist/storage.d.ts.map +1 -0
  37. package/dist/storage.js +700 -0
  38. package/dist/storage.js.map +1 -0
  39. package/dist/store.d.ts +432 -0
  40. package/dist/store.d.ts.map +1 -0
  41. package/dist/store.js +862 -0
  42. package/dist/store.js.map +1 -0
  43. package/package.json +77 -0
  44. package/schema.sql +1190 -0
  45. package/src/authz.ts +1398 -0
  46. package/src/db.ts +271 -0
  47. package/src/delivery.ts +737 -0
  48. package/src/errors.ts +24 -0
  49. package/src/filelayer.ts +1836 -0
  50. package/src/index.ts +7 -0
  51. package/src/simple.ts +666 -0
  52. package/src/storage.ts +917 -0
  53. package/src/store.ts +1072 -0
  54. package/test/delivery.test.ts +0 -0
  55. package/test/group-subjects.test.ts +1072 -0
  56. package/test/helpers.ts +65 -0
  57. package/test/listing.test.ts +689 -0
  58. package/test/local-s3.d.mts +33 -0
  59. package/test/local-s3.mjs +400 -0
  60. package/test/persistence.test.ts +953 -0
  61. package/test/regression.test.ts +619 -0
  62. package/test/s3-live.test.ts +322 -0
  63. package/test/security.test.ts +1652 -0
  64. package/test/semantics.test.ts +888 -0
  65. package/test/storage.test.ts +437 -0
  66. package/test/tiers.test.ts +432 -0
  67. package/test/vault-example.test.ts +302 -0
  68. package/tsconfig.build.json +29 -0
  69. package/tsconfig.json +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authz.js","sourceRoot":"","sources":["../src/authz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAOH,MAAM,CAAC,MAAM,gBAAgB,GAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5F,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7E,MAAM,gBAAgB,GAA8B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACvE,MAAM,UAAU,GAAyB,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAUzE,+EAA+E;AAC/E,MAAM,SAAS,GAA4B;IACzC,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AAYF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAgC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAEtF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,GAAY;IACrD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAwED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAa,EACb,OAAgB,EAChB,UAA0B;IAE1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAa,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,sEAAsE;YACtE,kBAAkB;YAClB,OAAO,OAAO,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,KAAK,QAAQ;YACX,yEAAyE;YACzE,8CAA8C;YAC9C,IAAI,OAAO;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,GAAG,EAAiB,CAAC;QAClC,KAAK,QAAQ;YACX,OAAO,IAAI,GAAG,CAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;QACjD,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,GAAG,CAAgB,CAAC,aAAa,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAgHD;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,CAAW,EAAE,GAAS;IAC7C,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC;IACxC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG;QAAE,OAAO,eAAe,CAAC;IAC9D,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,YAAY;QAAE,OAAO,iBAAiB,CAAC;IAC3F,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,eAAe,CAC5B,IAAe,EACf,SAAoB,EACpB,IAAa,EACb,UAAsB,EACtB,GAAS,EACT,QAAQ,GAAG,KAAK;IAEhB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAc,CAAC;IAC3C,MAAM,GAAG,GAA4E;QACnF,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,2EAA2E;IAC3E,MAAM,IAAI,GAAG,CAAC,IAA0B,EAAE,IAAe,EAAE,CAAkB,EAAW,EAAE;QACxF,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,UAAU;gBAAE,GAAG,GAAG,IAAI,CAAC;QACnC,CAAC;QACD,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;YACf,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,OAAyB,IAAI,EAAY,EAAE,CAAC,CAAC;QAC5D,UAAU,EAAE,YAAY,CAAC,IAAI,GAAG,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY;QACZ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI;KACL,CAAC,CAAC;IAEH,6EAA6E;IAC7E,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7F,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,OAAO,EAAE,CAAC;QAC9D,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,OAAO,EAAE,CAAC;QAC5E,CAAC;QAED,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,2EAA2E;QAC3E,8DAA8D;QAC9D,EAAE;QACF,wEAAwE;QACxE,yEAAyE;QACzE,oDAAoD;QACpD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1E,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAc,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;YAC9E,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,OAAO,EAAE,CAAC;QACnE,CAAC;QAED,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,6EAA6E;IAC7E,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEpD,0EAA0E;QAC1E,uEAAuE;QACvE,uDAAuD;QACvD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,EAAE,GACN,SAAS,CAAC,QAAQ,KAAK,SAAS;oBAChC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC,EAAE;oBAAE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,OAAO,EAAE,CAAC;QACjF,CAAC;aAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,uEAAuE;YACvE,wEAAwE;YACxE,sEAAsE;YACtE,0DAA0D;YAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,2BAA2B;IAC3B,IAAI,UAAU,KAAK,MAAM,IAAI,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,SAAoB,EAAE,IAAoB;IAClE,IAAI,SAAS,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC;IAC3E,IAAI,SAAS,CAAC,UAAU;QAAE,OAAO,iBAAiB,CAAC;IACnD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,IAAa,EAAE,UAAsB,EAAE,GAAS;IACvE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC;IACpD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG;QAAE,OAAO,cAAc,CAAC;IACnE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,gBAAgB,CAAC;IAC/E,IAAI,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;QAC1E,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;GAKG;AACH,KAAK,UAAU,UAAU,CACvB,IAAe,EACf,SAAoB,EACpB,MAAc,EACd,UAAsB,EACtB,QAAQ,GAAG,KAAK;IAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC,6EAA6E;IAC7E,oEAAoE;IACpE,6EAA6E;IAC7E,8EAA8E;IAC9E,8BAA8B;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC;YACjF,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,CAAC,QAAkB,EAAkB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,GAAG,CACR,MAAM,IAAI,CACR,IAAI,EACJ,IAAI,CAAC,KAAK,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,QAAQ,CAAC,IAAI,CAAC,MAAM,EACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CACtB,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,GAAG,CACR,MAAM,IAAI,CACR,IAAI,EACJ,IAAI,CAAC,KAAK,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAC3C,CACF,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,CACR,MAAM,IAAI,CACR,IAAI,EACJ,IAAI,CAAC,KAAK,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,wBAAwB,CAC/D,CACF,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,0BAA0B;IAC1B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,GAAG,CACR,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CACR,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAe,EACf,SAAoB,EACpB,MAAc,EACd,UAAsB;IAEtB,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,CAAC;AAgHD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;gBAC1C,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAoB,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAY;oBACrB,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,KAAK;oBACL,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;oBAChC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;iBACtC,CAAC;gBACF,IAAI,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;oBACrD,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,0EAA0E;IAC1E,4EAA4E;IAC5E,iEAAiE;IACjE,EAAE;IACF,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,qDAAqD;IACrD,OAAO;QACL,UAAU;QACV,SAAS;QACT,cAAc;QACd,eAAe,EAAE,eAAe,EAAE;QAClC,iBAAiB,EAAE,UAAU,KAAK,MAAM;KACzC,CAAC;AACJ,CAAC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAe,EACf,SAAoB,EACpB,KAAa,EACb,IAA+F;IAE/F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GACR,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1F,0EAA0E;IAC1E,6EAA6E;IAC7E,8DAA8D;IAC9D,EAAE;IACF,4EAA4E;IAC5E,yEAAyE;IACzE,qEAAqE;IACrE,EAAE;IACF,gFAAgF;IAChF,2EAA2E;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,qEAAqE;IACrE,wEAAwE;IACxE,+BAA+B;IAC/B,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,wEAAwE;IACxE,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;QAC7C,KAAK;QACL,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QACzC,GAAG;QACH,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE/D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,MAAM,IAAI,CAAC,KAAK,CAAC;QACf,gEAAgE;QAChE,gDAAgD;QAChD,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC5B,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QAClC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,EAAE;YACP,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;YAC3B,OAAO;SACR;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAe,EACf,SAAoB,EACpB,MAAc,EACd,SAAgC,EAChC,OAA2C,EAAE;IAE7C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAExF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAS,CAAC,YAAY,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,KAAK,CAAC;gBACf,KAAK,EAAE,QAAQ,CAAC,IAAK,CAAC,KAAK;gBAC3B,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,uBAAuB;gBAC/B,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,MAAM;gBACN,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;aACxD,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,qEAAqE;IACrE,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,IACE,aAAa,KAAK,IAAI;QACtB,WAAW,KAAK,SAAS;QACzB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9C,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC;YACf,KAAK,EAAE,QAAQ,CAAC,IAAK,CAAC,KAAK;YAC3B,MAAM,EAAE,cAAc;YACtB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,+BAA+B;YACvC,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,MAAM;YACN,OAAO,EAAE,aAAa;YACtB,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE;gBACP,oBAAoB,EAAE,WAAW;gBACjC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG;gBAC1B,qBAAqB,EAAE,CAAC,GAAG,uBAAuB,CAAC;aACpD;SACF,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IACnE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG;QAC1B,oEAAoE;QACpE,mEAAmE;QACnE,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI;QAChD,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;KAChB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAe,EACf,SAAoB,EACpB,KAAoD;IAEpD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAEvD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,CAAC,KAAK,CAAC;QACf,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,cAAc;QACtB,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;KAC7B,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACnD,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAe,EACf,SAAoB,EACpB,KAAa,EACb,UAAyB,EACzB,OAAiD,EAAE;IAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,UAAU,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IAEzC,6EAA6E;IAC7E,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAClF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,CAAC,KAAK,CAAC;YACf,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAe,EACf,SAAoB,EACpB,KAAa,EACb,aAAqB,EACrB,OAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,MAAM,MAAM,GACV,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAElG,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACxE,MAAM;QACN,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,OAAQ,CAAC,CAAE,CAAC;IACzE,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAE7F,MAAM,MAAM,GAAG,KAAK,EAAE,MAAyB,EAAqB,EAAE;QACpE,MAAM,IAAI,CAAC,KAAK,CAAC;YACf,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,OAAO;SACR,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAC1E,CAAC,CAAC;IAEF,IAAI,WAAW,KAAK,IAAI,IAAI,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1E,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,WAAW,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3F,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,gFAAgF;AAChF,8DAA8D;AAC9D,gFAAgF;AAEhF;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,KAAsB;IAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrD,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,YAAY;QAC5B,UAAU,EAAE,KAAK,CAAC,cAAc;QAChC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,KAAK,CAClB,IAAe,EACf,KAAa,EACb,CAAY,EACZ,MAAc,EACd,UAAsB,EACtB,GAAc,EACd,KAAsB;IAEtB,MAAM,IAAI,CAAC,KAAK,CAAC;QACf,KAAK;QACL,MAAM,EAAE,QAAQ,UAAU,EAAE;QAC5B,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM;QACN,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI;QAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE;KAC9C,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,IAAI;QACX,GAAG;QACH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,kBAAkB,EAChB,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa;KAChG,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,IAAe,EACf,KAAoB,EACpB,CAAY,EACZ,MAAc,EACd,UAAsB,EACtB,MAAkB,EAClB,OAAgB;IAEhB,MAAM,IAAI,CAAC,KAAK,CAAC;QACf,KAAK;QACL,MAAM,EAAE,QAAQ,UAAU,EAAE;QAC5B,QAAQ,EAAE,MAAM;QAChB,MAAM;QACN,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM;QACN,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,IAAe,EACf,UAAyB,EACzB,CAAY,EACZ,KAAa,EACb,MAAc,EACd,MAAkB;IAElB,MAAM,IAAI,CAAC,KAAK,CAAC;QACf,KAAK,EAAE,UAAU;QACjB,MAAM;QACN,QAAQ,EAAE,MAAM;QAChB,MAAM;QACN,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;KACtE,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAe,EACf,SAAoB,EACpB,UAAkB;IAElB,MAAM,IAAI,CAAC,KAAK,CAAC;QACf,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;KACxE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,cAAc,GAClB,mLAAmL,CAAC;AAEtL,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QACpD,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACvC,KAAK,gBAAgB;YACnB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QACjD,0EAA0E;QAC1E,yEAAyE;QACzE,uDAAuD;QACvD,KAAK,uBAAuB,CAAC;QAC7B,KAAK,+BAA+B,CAAC;QACrC,KAAK,iBAAiB,CAAC;QACvB,KAAK,iBAAiB,CAAC;QACvB,KAAK,YAAY;YACf,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC5C;YACE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Database bootstrap and the transaction abstraction.
3
+ *
4
+ * `Queryable` is the whole surface the store needs. PGlite satisfies it, and so
5
+ * does `pg.Pool` / `pg.Client`, so the store layer is written once and runs
6
+ * against WASM Postgres in CI and real Postgres in production without a branch.
7
+ *
8
+ * -----------------------------------------------------------------------------
9
+ * WHY THERE IS NOW A TRANSACTION ABSTRACTION
10
+ * -----------------------------------------------------------------------------
11
+ *
12
+ * `Queryable` used to be a bare `query(sql, params)` and nothing else. Every
13
+ * write the library performed was therefore its own autocommit transaction, and
14
+ * on `pg.Pool` each one could land on a DIFFERENT CONNECTION. That produced two
15
+ * defects, one of them in the product's headline claim:
16
+ *
17
+ * 1. `put()` did storage write -> INSERT file -> audit -> recordUsage ->
18
+ * recordFileOwner as five independent statements. A failure after the
19
+ * second one leaves a file with no audit record. For a product whose
20
+ * selling point is a tamper-evident audit trail, the audit write not being
21
+ * in the same transaction as the thing it audits is a hole in the premise:
22
+ * the chain is intact and simply does not mention what happened.
23
+ *
24
+ * 2. `audit_append()` takes `pg_advisory_xact_lock`, which is held until the
25
+ * end of the TRANSACTION. Under autocommit that is the end of the single
26
+ * statement, so the lock did serialize the append itself -- but it could not
27
+ * serialize the append with respect to the mutation it describes, because
28
+ * the mutation was in a different transaction. The lock was doing the small
29
+ * half of its job. It now spans the mutation as well (see `audit_append` in
30
+ * schema.sql and the chain-lock test in test/semantics.test.ts).
31
+ *
32
+ * A consumer could not fix either one themselves, because there was no way to
33
+ * hand the library a transaction.
34
+ *
35
+ * -----------------------------------------------------------------------------
36
+ * WHAT THE STORAGE WRITE DOES ABOUT NOT BEING TRANSACTIONAL
37
+ * -----------------------------------------------------------------------------
38
+ *
39
+ * Object storage does not participate in a Postgres transaction and never will.
40
+ * There are exactly two orderings and one of them is wrong:
41
+ *
42
+ * (a) commit metadata, then write bytes -- a crash in between leaves a `file`
43
+ * row in state 'ready' whose object does not exist. Every read of that
44
+ * file 404s forever, `listFiles` shows it, and the failure is visible to
45
+ * the customer as data loss.
46
+ * (b) write bytes, then commit metadata -- a crash in between leaves an
47
+ * object no `file` row points at. It is unreachable (every read path
48
+ * starts from a `file` row and the key is a fresh UUID that is never
49
+ * reissued), so it costs storage and nothing else.
50
+ *
51
+ * We take (b). An orphan is a garbage-collection problem rather than a
52
+ * correctness one. `Filelayer.collectStorageOrphans()` implements the
53
+ * collection; it is a REQUIRED OPERATIONAL JOB, documented in SEMANTICS.md, not
54
+ * something that happens on its own.
55
+ *
56
+ * Deletion is the mirror image and takes the mirror ordering: commit the
57
+ * metadata delete FIRST, then delete the bytes. A crash in between leaves an
58
+ * orphan (collectable) rather than a live `file` row with no object (data
59
+ * loss).
60
+ */
61
+ export interface QueryResult<R = Record<string, unknown>> {
62
+ rows: R[];
63
+ affectedRows?: number;
64
+ }
65
+ export interface Queryable {
66
+ query<R = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<R>>;
67
+ exec?(sql: string): Promise<unknown>;
68
+ /**
69
+ * Optional. An implementation that provides this is used in preference to
70
+ * everything `withTransaction` would otherwise sniff for, which is the escape
71
+ * hatch for a driver we have never heard of.
72
+ */
73
+ withTransaction?<T>(fn: (tx: Queryable) => Promise<T>): Promise<T>;
74
+ }
75
+ /**
76
+ * A `Queryable` that is known to be inside a transaction.
77
+ *
78
+ * `savepoint()` exists because a statement that RAISES inside a Postgres
79
+ * transaction aborts the whole transaction: every subsequent statement fails
80
+ * with "current transaction is aborted". Any place that expects a constraint to
81
+ * fire and then wants to keep going -- `share()`, where the attenuation trigger
82
+ * is the schema-level backstop and the refusal must still be AUDITED -- has to
83
+ * wrap the failing statement in a savepoint or it cannot write the audit event
84
+ * it exists to write.
85
+ */
86
+ export interface Tx extends Queryable {
87
+ readonly inTransaction: true;
88
+ savepoint<T>(fn: () => Promise<T>): Promise<T>;
89
+ }
90
+ export declare function isTx(db: Queryable): db is Tx;
91
+ /**
92
+ * Commit the transaction, then throw.
93
+ *
94
+ * The audit log records DECISIONS, including the ones that ended in a refusal.
95
+ * A denial writes an audit event and then throws, so if a throw always rolled
96
+ * back we would lose precisely the events P5 exists to keep -- and, worse, we
97
+ * would lose them silently, since the caller still sees their 403.
98
+ *
99
+ * So the rule is explicit and narrow: a `FilelayerError` is a DECIDED outcome
100
+ * (see `Filelayer.transaction()`), and everything else -- a driver error, a
101
+ * constraint we did not anticipate, a bug -- rolls back. Wrapping in this class
102
+ * makes the intent survive a refactor that changes the error type.
103
+ */
104
+ export declare class CommitThenThrow extends Error {
105
+ readonly inner: unknown;
106
+ constructor(inner: unknown);
107
+ }
108
+ /**
109
+ * Run `fn` inside one database transaction, on ONE connection.
110
+ *
111
+ * Supports, in this order of preference:
112
+ *
113
+ * 1. anything exposing `withTransaction` (bring your own);
114
+ * 2. PGlite, via its own `transaction()` -- which is what the test suite uses,
115
+ * and which is a real Postgres transaction, not an emulation;
116
+ * 3. `pg.Pool`, via `connect()` + BEGIN/COMMIT/ROLLBACK on the checked-out
117
+ * client, with `release()` in a finally. Taking a client is the whole
118
+ * point: `pool.query('BEGIN')` starts a transaction on an arbitrary
119
+ * connection and the next statement may not get the same one, which is a
120
+ * classic way to leave a connection wedged in an open transaction;
121
+ * 4. a single `pg.Client` (or anything else), via BEGIN/COMMIT/ROLLBACK
122
+ * directly.
123
+ *
124
+ * Nesting: if `db` is already a `Tx`, the inner call becomes a SAVEPOINT rather
125
+ * than a second BEGIN, so a helper that wants a transaction composes with a
126
+ * caller that already opened one.
127
+ */
128
+ export declare function withTransaction<T>(db: Queryable, fn: (tx: Tx) => Promise<T>): Promise<T>;
129
+ export declare const SCHEMA_PATH: string;
130
+ export declare function loadSchemaSql(): Promise<string>;
131
+ /**
132
+ * Create an in-process Postgres (PGlite) with the Filelayer schema applied.
133
+ *
134
+ * PGlite is PostgreSQL 17 compiled to WASM: real planner, real constraints,
135
+ * real enums, real arrays, real rules, real transactional semantics. The one
136
+ * thing it is NOT is multi-process, which matters for exactly one test; see
137
+ * test/security.test.ts, "atomic download cap", for what that weakens.
138
+ */
139
+ export declare function createTestDb(): Promise<{
140
+ db: Queryable & {
141
+ close(): Promise<void>;
142
+ };
143
+ raw: unknown;
144
+ }>;
145
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAMH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC;;;;OAIG;IACH,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,EAAG,SAAQ,SAAS;IACnC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC;IAC7B,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChD;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,SAAS,GAAG,EAAE,IAAI,EAAE,CAE5C;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBACZ,KAAK,EAAE,OAAO;CAK3B;AAoBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,EAAE,EAAE,SAAS,EACb,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CAqCZ;AA6CD,eAAO,MAAM,WAAW,QAAiC,CAAC;AAE1D,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAErD;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,EAAE,EAAE,SAAS,GAAG;QAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IAC3C,GAAG,EAAE,OAAO,CAAC;CACd,CAAC,CAOD"}
package/dist/db.js ADDED
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Database bootstrap and the transaction abstraction.
3
+ *
4
+ * `Queryable` is the whole surface the store needs. PGlite satisfies it, and so
5
+ * does `pg.Pool` / `pg.Client`, so the store layer is written once and runs
6
+ * against WASM Postgres in CI and real Postgres in production without a branch.
7
+ *
8
+ * -----------------------------------------------------------------------------
9
+ * WHY THERE IS NOW A TRANSACTION ABSTRACTION
10
+ * -----------------------------------------------------------------------------
11
+ *
12
+ * `Queryable` used to be a bare `query(sql, params)` and nothing else. Every
13
+ * write the library performed was therefore its own autocommit transaction, and
14
+ * on `pg.Pool` each one could land on a DIFFERENT CONNECTION. That produced two
15
+ * defects, one of them in the product's headline claim:
16
+ *
17
+ * 1. `put()` did storage write -> INSERT file -> audit -> recordUsage ->
18
+ * recordFileOwner as five independent statements. A failure after the
19
+ * second one leaves a file with no audit record. For a product whose
20
+ * selling point is a tamper-evident audit trail, the audit write not being
21
+ * in the same transaction as the thing it audits is a hole in the premise:
22
+ * the chain is intact and simply does not mention what happened.
23
+ *
24
+ * 2. `audit_append()` takes `pg_advisory_xact_lock`, which is held until the
25
+ * end of the TRANSACTION. Under autocommit that is the end of the single
26
+ * statement, so the lock did serialize the append itself -- but it could not
27
+ * serialize the append with respect to the mutation it describes, because
28
+ * the mutation was in a different transaction. The lock was doing the small
29
+ * half of its job. It now spans the mutation as well (see `audit_append` in
30
+ * schema.sql and the chain-lock test in test/semantics.test.ts).
31
+ *
32
+ * A consumer could not fix either one themselves, because there was no way to
33
+ * hand the library a transaction.
34
+ *
35
+ * -----------------------------------------------------------------------------
36
+ * WHAT THE STORAGE WRITE DOES ABOUT NOT BEING TRANSACTIONAL
37
+ * -----------------------------------------------------------------------------
38
+ *
39
+ * Object storage does not participate in a Postgres transaction and never will.
40
+ * There are exactly two orderings and one of them is wrong:
41
+ *
42
+ * (a) commit metadata, then write bytes -- a crash in between leaves a `file`
43
+ * row in state 'ready' whose object does not exist. Every read of that
44
+ * file 404s forever, `listFiles` shows it, and the failure is visible to
45
+ * the customer as data loss.
46
+ * (b) write bytes, then commit metadata -- a crash in between leaves an
47
+ * object no `file` row points at. It is unreachable (every read path
48
+ * starts from a `file` row and the key is a fresh UUID that is never
49
+ * reissued), so it costs storage and nothing else.
50
+ *
51
+ * We take (b). An orphan is a garbage-collection problem rather than a
52
+ * correctness one. `Filelayer.collectStorageOrphans()` implements the
53
+ * collection; it is a REQUIRED OPERATIONAL JOB, documented in SEMANTICS.md, not
54
+ * something that happens on its own.
55
+ *
56
+ * Deletion is the mirror image and takes the mirror ordering: commit the
57
+ * metadata delete FIRST, then delete the bytes. A crash in between leaves an
58
+ * orphan (collectable) rather than a live `file` row with no object (data
59
+ * loss).
60
+ */
61
+ import { readFile } from 'node:fs/promises';
62
+ import { fileURLToPath } from 'node:url';
63
+ import { dirname, join } from 'node:path';
64
+ export function isTx(db) {
65
+ return db.inTransaction === true;
66
+ }
67
+ /**
68
+ * Commit the transaction, then throw.
69
+ *
70
+ * The audit log records DECISIONS, including the ones that ended in a refusal.
71
+ * A denial writes an audit event and then throws, so if a throw always rolled
72
+ * back we would lose precisely the events P5 exists to keep -- and, worse, we
73
+ * would lose them silently, since the caller still sees their 403.
74
+ *
75
+ * So the rule is explicit and narrow: a `FilelayerError` is a DECIDED outcome
76
+ * (see `Filelayer.transaction()`), and everything else -- a driver error, a
77
+ * constraint we did not anticipate, a bug -- rolls back. Wrapping in this class
78
+ * makes the intent survive a refactor that changes the error type.
79
+ */
80
+ export class CommitThenThrow extends Error {
81
+ inner;
82
+ constructor(inner) {
83
+ super('commit_then_throw');
84
+ this.name = 'CommitThenThrow';
85
+ this.inner = inner;
86
+ }
87
+ }
88
+ function isPool(db) {
89
+ return typeof db.connect === 'function';
90
+ }
91
+ function isPglite(db) {
92
+ return typeof db.transaction === 'function';
93
+ }
94
+ let savepointCounter = 0;
95
+ /**
96
+ * Run `fn` inside one database transaction, on ONE connection.
97
+ *
98
+ * Supports, in this order of preference:
99
+ *
100
+ * 1. anything exposing `withTransaction` (bring your own);
101
+ * 2. PGlite, via its own `transaction()` -- which is what the test suite uses,
102
+ * and which is a real Postgres transaction, not an emulation;
103
+ * 3. `pg.Pool`, via `connect()` + BEGIN/COMMIT/ROLLBACK on the checked-out
104
+ * client, with `release()` in a finally. Taking a client is the whole
105
+ * point: `pool.query('BEGIN')` starts a transaction on an arbitrary
106
+ * connection and the next statement may not get the same one, which is a
107
+ * classic way to leave a connection wedged in an open transaction;
108
+ * 4. a single `pg.Client` (or anything else), via BEGIN/COMMIT/ROLLBACK
109
+ * directly.
110
+ *
111
+ * Nesting: if `db` is already a `Tx`, the inner call becomes a SAVEPOINT rather
112
+ * than a second BEGIN, so a helper that wants a transaction composes with a
113
+ * caller that already opened one.
114
+ */
115
+ export async function withTransaction(db, fn) {
116
+ if (isTx(db))
117
+ return db.savepoint(() => fn(db));
118
+ if (typeof db.withTransaction === 'function') {
119
+ return db.withTransaction((raw) => fn(asTx(raw)));
120
+ }
121
+ if (isPglite(db)) {
122
+ // PGlite's `transaction()` rolls back on throw and commits otherwise, so
123
+ // CommitThenThrow has to be converted into a normal return and re-thrown
124
+ // outside. `settled` carries which of the two happened.
125
+ let settled = null;
126
+ const value = await db.transaction(async (raw) => {
127
+ try {
128
+ return await fn(asTx(raw));
129
+ }
130
+ catch (err) {
131
+ if (err instanceof CommitThenThrow) {
132
+ settled = { commitThenThrow: err.inner };
133
+ return undefined;
134
+ }
135
+ throw err;
136
+ }
137
+ });
138
+ if (settled !== null)
139
+ throw settled.commitThenThrow;
140
+ return value;
141
+ }
142
+ if (isPool(db)) {
143
+ const client = await db.connect();
144
+ try {
145
+ return await runTx(client, fn);
146
+ }
147
+ finally {
148
+ client.release();
149
+ }
150
+ }
151
+ return runTx(db, fn);
152
+ }
153
+ async function runTx(conn, fn) {
154
+ await conn.query('BEGIN');
155
+ let result;
156
+ try {
157
+ result = await fn(asTx(conn));
158
+ }
159
+ catch (err) {
160
+ if (err instanceof CommitThenThrow) {
161
+ await conn.query('COMMIT');
162
+ throw err.inner;
163
+ }
164
+ // A rollback that itself fails must not mask the original error.
165
+ await conn.query('ROLLBACK').catch(() => { });
166
+ throw err;
167
+ }
168
+ await conn.query('COMMIT');
169
+ return result;
170
+ }
171
+ function asTx(conn) {
172
+ const existing = conn;
173
+ if (existing.inTransaction === true)
174
+ return conn;
175
+ const tx = {
176
+ inTransaction: true,
177
+ query: (sql, params) => conn.query(sql, params),
178
+ ...(conn.exec ? { exec: (sql) => conn.exec(sql) } : {}),
179
+ async savepoint(fn) {
180
+ const name = `fl_sp_${++savepointCounter}`;
181
+ await conn.query(`SAVEPOINT ${name}`);
182
+ try {
183
+ const r = await fn();
184
+ await conn.query(`RELEASE SAVEPOINT ${name}`);
185
+ return r;
186
+ }
187
+ catch (err) {
188
+ await conn.query(`ROLLBACK TO SAVEPOINT ${name}`);
189
+ await conn.query(`RELEASE SAVEPOINT ${name}`);
190
+ throw err;
191
+ }
192
+ },
193
+ };
194
+ return tx;
195
+ }
196
+ const HERE = dirname(fileURLToPath(import.meta.url));
197
+ export const SCHEMA_PATH = join(HERE, '..', 'schema.sql');
198
+ export async function loadSchemaSql() {
199
+ return readFile(SCHEMA_PATH, 'utf8');
200
+ }
201
+ /**
202
+ * Create an in-process Postgres (PGlite) with the Filelayer schema applied.
203
+ *
204
+ * PGlite is PostgreSQL 17 compiled to WASM: real planner, real constraints,
205
+ * real enums, real arrays, real rules, real transactional semantics. The one
206
+ * thing it is NOT is multi-process, which matters for exactly one test; see
207
+ * test/security.test.ts, "atomic download cap", for what that weakens.
208
+ */
209
+ export async function createTestDb() {
210
+ const { PGlite } = await import('@electric-sql/pglite');
211
+ const { pgcrypto } = await import('@electric-sql/pglite/contrib/pgcrypto');
212
+ const pg = await PGlite.create({ extensions: { pgcrypto } });
213
+ const sql = await loadSchemaSql();
214
+ await pg.exec(sql);
215
+ return { db: pg, raw: pg };
216
+ }
217
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}