@metaobjectsdev/runtime-ts 0.5.0-rc.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.
Files changed (118) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +102 -0
  3. package/dist/constants.d.ts +5 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +6 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/drivers/drizzle-driver.d.ts +25 -0
  8. package/dist/drivers/drizzle-driver.d.ts.map +1 -0
  9. package/dist/drivers/drizzle-driver.js +405 -0
  10. package/dist/drivers/drizzle-driver.js.map +1 -0
  11. package/dist/drivers/in-memory-driver.d.ts +11 -0
  12. package/dist/drivers/in-memory-driver.d.ts.map +1 -0
  13. package/dist/drivers/in-memory-driver.js +232 -0
  14. package/dist/drivers/in-memory-driver.js.map +1 -0
  15. package/dist/drivers/index.d.ts +4 -0
  16. package/dist/drivers/index.d.ts.map +1 -0
  17. package/dist/drivers/index.js +4 -0
  18. package/dist/drivers/index.js.map +1 -0
  19. package/dist/drivers/kysely-driver.d.ts +12 -0
  20. package/dist/drivers/kysely-driver.d.ts.map +1 -0
  21. package/dist/drivers/kysely-driver.js +203 -0
  22. package/dist/drivers/kysely-driver.js.map +1 -0
  23. package/dist/drizzle-fastify/filter-allowlist.d.ts +19 -0
  24. package/dist/drizzle-fastify/filter-allowlist.d.ts.map +1 -0
  25. package/dist/drizzle-fastify/filter-allowlist.js +10 -0
  26. package/dist/drizzle-fastify/filter-allowlist.js.map +1 -0
  27. package/dist/drizzle-fastify/filter-parser.d.ts +28 -0
  28. package/dist/drizzle-fastify/filter-parser.d.ts.map +1 -0
  29. package/dist/drizzle-fastify/filter-parser.js +185 -0
  30. package/dist/drizzle-fastify/filter-parser.js.map +1 -0
  31. package/dist/drizzle-fastify/index.d.ts +48 -0
  32. package/dist/drizzle-fastify/index.d.ts.map +1 -0
  33. package/dist/drizzle-fastify/index.js +181 -0
  34. package/dist/drizzle-fastify/index.js.map +1 -0
  35. package/dist/drizzle-fastify/mount-read-only.d.ts +17 -0
  36. package/dist/drizzle-fastify/mount-read-only.d.ts.map +1 -0
  37. package/dist/drizzle-fastify/mount-read-only.js +159 -0
  38. package/dist/drizzle-fastify/mount-read-only.js.map +1 -0
  39. package/dist/drizzle-fastify/util.d.ts +5 -0
  40. package/dist/drizzle-fastify/util.d.ts.map +1 -0
  41. package/dist/drizzle-fastify/util.js +12 -0
  42. package/dist/drizzle-fastify/util.js.map +1 -0
  43. package/dist/errors.d.ts +68 -0
  44. package/dist/errors.d.ts.map +1 -0
  45. package/dist/errors.js +86 -0
  46. package/dist/errors.js.map +1 -0
  47. package/dist/fastify/index.d.ts +65 -0
  48. package/dist/fastify/index.d.ts.map +1 -0
  49. package/dist/fastify/index.js +118 -0
  50. package/dist/fastify/index.js.map +1 -0
  51. package/dist/identity-strategy.d.ts +10 -0
  52. package/dist/identity-strategy.d.ts.map +1 -0
  53. package/dist/identity-strategy.js +67 -0
  54. package/dist/identity-strategy.js.map +1 -0
  55. package/dist/index.d.ts +9 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +3 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/n2m-resolver.d.ts +27 -0
  60. package/dist/n2m-resolver.d.ts.map +1 -0
  61. package/dist/n2m-resolver.js +103 -0
  62. package/dist/n2m-resolver.js.map +1 -0
  63. package/dist/object-manager.d.ts +51 -0
  64. package/dist/object-manager.d.ts.map +1 -0
  65. package/dist/object-manager.js +355 -0
  66. package/dist/object-manager.js.map +1 -0
  67. package/dist/persistence-driver.d.ts +88 -0
  68. package/dist/persistence-driver.d.ts.map +1 -0
  69. package/dist/persistence-driver.js +5 -0
  70. package/dist/persistence-driver.js.map +1 -0
  71. package/dist/query-builder.d.ts +35 -0
  72. package/dist/query-builder.d.ts.map +1 -0
  73. package/dist/query-builder.js +178 -0
  74. package/dist/query-builder.js.map +1 -0
  75. package/dist/ref-codec.d.ts +8 -0
  76. package/dist/ref-codec.d.ts.map +1 -0
  77. package/dist/ref-codec.js +42 -0
  78. package/dist/ref-codec.js.map +1 -0
  79. package/dist/relation-resolver.d.ts +27 -0
  80. package/dist/relation-resolver.d.ts.map +1 -0
  81. package/dist/relation-resolver.js +136 -0
  82. package/dist/relation-resolver.js.map +1 -0
  83. package/dist/type-coercer.d.ts +5 -0
  84. package/dist/type-coercer.d.ts.map +1 -0
  85. package/dist/type-coercer.js +43 -0
  86. package/dist/type-coercer.js.map +1 -0
  87. package/dist/validator-runner.d.ts +14 -0
  88. package/dist/validator-runner.d.ts.map +1 -0
  89. package/dist/validator-runner.js +155 -0
  90. package/dist/validator-runner.js.map +1 -0
  91. package/dist/view.d.ts +19 -0
  92. package/dist/view.d.ts.map +1 -0
  93. package/dist/view.js +60 -0
  94. package/dist/view.js.map +1 -0
  95. package/package.json +87 -0
  96. package/src/constants.ts +7 -0
  97. package/src/drivers/drizzle-driver.ts +474 -0
  98. package/src/drivers/in-memory-driver.ts +256 -0
  99. package/src/drivers/index.ts +3 -0
  100. package/src/drivers/kysely-driver.ts +240 -0
  101. package/src/drizzle-fastify/filter-allowlist.ts +31 -0
  102. package/src/drizzle-fastify/filter-parser.ts +229 -0
  103. package/src/drizzle-fastify/index.ts +225 -0
  104. package/src/drizzle-fastify/mount-read-only.ts +187 -0
  105. package/src/drizzle-fastify/util.ts +10 -0
  106. package/src/errors.ts +114 -0
  107. package/src/fastify/index.ts +181 -0
  108. package/src/identity-strategy.ts +92 -0
  109. package/src/index.ts +24 -0
  110. package/src/n2m-resolver.ts +152 -0
  111. package/src/object-manager.ts +444 -0
  112. package/src/persistence-driver.ts +92 -0
  113. package/src/query-builder.ts +224 -0
  114. package/src/ref-codec.ts +64 -0
  115. package/src/relation-resolver.ts +171 -0
  116. package/src/type-coercer.ts +39 -0
  117. package/src/validator-runner.ts +168 -0
  118. package/src/view.ts +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-driver.js","sourceRoot":"","sources":["../../src/drivers/in-memory-driver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAkBxD,MAAM,UAAU,cAAc,CAAC,OAA8B,EAAE;IAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAAC,IAA2B;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAC;QACnC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,YAAY;gBAAE,YAAY,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,KAAY;IAC9B,MAAM,WAAW,GAAG,CAAC,KAAa,EAAoB,EAAE;QACtD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAY,EAAE;QAC3C,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACZ,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,QAAQ;QAEjB,KAAK,CAAC,SAAS,CAAC,IAAI;YAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI;YACnB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAClB,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC5C,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACpB,MAAM,IAAI,wBAAwB,CAChC,6CAA6C,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CACpG,CAAC;oBACJ,CAAC;oBACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACd,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,wBAAwB,CAChC,uBAAuB,IAAI,CAAC,KAAK,OAAO,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAE,EAAE,CACpG,CAAC;YACJ,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,OAAO,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI;YACnB,MAAM,GAAG,GAAU,EAAE,CAAC;YACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YACrC,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI;YACnB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC7C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI;YACnB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YACjB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACrG,KAAK,MAAM,CAAC,IAAI,YAAY;gBAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,YAAY,CAAC,MAAM,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,EAAE;YAClB,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC9B,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ,EAAE,OAAiB;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,KAAK,CAAC,GAAQ,EAAE,QAAkB;IACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ,EAAE,KAAmB;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,IAAI;YACP,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QAC3C,KAAK,IAAI;YACP,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QAC3C,KAAK,IAAI;YACP,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,KAAK,IAAI;YACP,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;YAC7E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACtC,CAAC;QACD,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,KAAK,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,CAAU,EAAE,CAAU;IAC3C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,sGAAsG;AACtG,SAAS,SAAS,CAAC,KAAc,EAAE,OAAe;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACzH,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO;QACL,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrI,QAAQ,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjC,QAAQ,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAY,EAAE,QAAe;IACjD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { inMemoryDriver, type InMemoryDriverOptions } from "./in-memory-driver.js";
2
+ export { kyselyDriver, type KyselyDriverOptions, type KyselyDriverPublic } from "./kysely-driver.js";
3
+ export { drizzleDriver, type DrizzleDriverOptions, type DrizzleDriverPublic } from "./drizzle-driver.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { inMemoryDriver } from "./in-memory-driver.js";
2
+ export { kyselyDriver } from "./kysely-driver.js";
3
+ export { drizzleDriver } from "./drizzle-driver.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAqD,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAuD,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { PersistenceDriver, Row } from "../persistence-driver.js";
3
+ export interface KyselyDriverOptions {
4
+ db: Kysely<Record<string, Row>>;
5
+ dialect: "sqlite" | "postgres";
6
+ }
7
+ export interface KyselyDriverPublic extends PersistenceDriver {
8
+ /** The underlying Kysely instance — power-user escape hatch. */
9
+ readonly db: Kysely<Record<string, Row>>;
10
+ }
11
+ export declare function kyselyDriver(opts: KyselyDriverOptions): KyselyDriverPublic;
12
+ //# sourceMappingURL=kysely-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kysely-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/kysely-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAA8D,MAAM,QAAQ,CAAC;AACjG,OAAO,KAAK,EACV,iBAAiB,EACoD,GAAG,EACzE,MAAM,0BAA0B,CAAC;AAalC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,gEAAgE;IAChE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;CAC1C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,kBAAkB,CAE1E"}
@@ -0,0 +1,203 @@
1
+ import { ConstraintViolationError } from "../errors.js";
2
+ export function kyselyDriver(opts) {
3
+ return makeKyselyDriver(opts.db, opts.dialect);
4
+ }
5
+ function makeKyselyDriver(db, dialect) {
6
+ return {
7
+ db,
8
+ dialect,
9
+ async selectOne(spec) {
10
+ let q = db.selectFrom(spec.table).select(spec.columns);
11
+ q = applyWhere(q, spec.where);
12
+ q = applyOrderLimit(q, spec.orderBy, 1, undefined);
13
+ const rows = await q.execute();
14
+ return rows[0] ?? null;
15
+ },
16
+ async selectMany(spec) {
17
+ let q = db.selectFrom(spec.table).select(spec.columns);
18
+ q = applyWhere(q, spec.where);
19
+ q = applyOrderLimit(q, spec.orderBy, spec.limit, spec.offset);
20
+ return (await q.execute());
21
+ },
22
+ async count(spec) {
23
+ let q = db.selectFrom(spec.table).select((eb) => eb.fn.countAll().as("c"));
24
+ q = applyWhere(q, spec.where);
25
+ const rows = (await q.execute());
26
+ const v = rows[0]?.c;
27
+ return typeof v === "number" ? v : Number(v ?? 0);
28
+ },
29
+ async insert(spec) {
30
+ try {
31
+ const result = await db
32
+ .insertInto(spec.table)
33
+ .values(spec.values)
34
+ .returning(spec.returning)
35
+ .executeTakeFirstOrThrow();
36
+ return result;
37
+ }
38
+ catch (err) {
39
+ throw mapDriverError(err, spec.table, dialect);
40
+ }
41
+ },
42
+ async insertMany(spec) {
43
+ try {
44
+ const rows = await db
45
+ .insertInto(spec.table)
46
+ .values(spec.rows)
47
+ .returning(spec.returning)
48
+ .execute();
49
+ return rows;
50
+ }
51
+ catch (err) {
52
+ throw mapDriverError(err, spec.table, dialect);
53
+ }
54
+ },
55
+ async update(spec) {
56
+ try {
57
+ let q = db.updateTable(spec.table).set(spec.values);
58
+ q = applyWhere(q, spec.where);
59
+ const rows = await q.returning(spec.returning).execute();
60
+ return (rows[0]) ?? null;
61
+ }
62
+ catch (err) {
63
+ throw mapDriverError(err, spec.table, dialect);
64
+ }
65
+ },
66
+ async updateMany(spec) {
67
+ try {
68
+ let q = db.updateTable(spec.table).set(spec.values);
69
+ q = applyWhere(q, spec.where);
70
+ const result = await q.executeTakeFirst();
71
+ return Number(result?.numUpdatedRows ?? 0);
72
+ }
73
+ catch (err) {
74
+ throw mapDriverError(err, spec.table, dialect);
75
+ }
76
+ },
77
+ async delete(spec) {
78
+ try {
79
+ let q = db.deleteFrom(spec.table);
80
+ q = applyWhere(q, spec.where);
81
+ const result = await q.executeTakeFirst();
82
+ return Number(result?.numDeletedRows ?? 0);
83
+ }
84
+ catch (err) {
85
+ throw mapDriverError(err, spec.table, dialect);
86
+ }
87
+ },
88
+ async deleteMany(spec) {
89
+ try {
90
+ let q = db.deleteFrom(spec.table);
91
+ q = applyWhere(q, spec.where);
92
+ const result = await q.executeTakeFirst();
93
+ return Number(result?.numDeletedRows ?? 0);
94
+ }
95
+ catch (err) {
96
+ throw mapDriverError(err, spec.table, dialect);
97
+ }
98
+ },
99
+ async transaction(fn) {
100
+ return await db.transaction().execute(async (trx) => {
101
+ const txDriver = makeKyselyDriver(trx, dialect);
102
+ return await fn(txDriver);
103
+ });
104
+ },
105
+ };
106
+ }
107
+ function applyWhere(q, where) {
108
+ if (!where)
109
+ return q;
110
+ return q.where((eb) => buildExpression(eb, where));
111
+ }
112
+ function buildExpression(eb, w) {
113
+ switch (w.kind) {
114
+ case "eq": return w.value === null ? eb(w.column, "is", null) : eb(w.column, "=", w.value);
115
+ case "ne": return w.value === null ? eb(w.column, "is not", null) : eb(w.column, "<>", w.value);
116
+ case "gt": return eb(w.column, ">", w.value);
117
+ case "gte": return eb(w.column, ">=", w.value);
118
+ case "lt": return eb(w.column, "<", w.value);
119
+ case "lte": return eb(w.column, "<=", w.value);
120
+ case "like": return eb(w.column, "like", w.pattern);
121
+ case "in": return eb(w.column, "in", w.values);
122
+ case "isNull": return w.not ? eb(w.column, "is not", null) : eb(w.column, "is", null);
123
+ case "and": return eb.and(w.clauses.map((c) => buildExpression(eb, c)));
124
+ default: {
125
+ const exhaustive = w;
126
+ throw new Error(`Unhandled WhereClause kind: ${JSON.stringify(exhaustive)}`);
127
+ }
128
+ }
129
+ }
130
+ function applyOrderLimit(q, orderBy, limit, offset) {
131
+ let out = q;
132
+ if (orderBy) {
133
+ for (const ob of orderBy) {
134
+ out = out.orderBy(ob.column, ob.direction);
135
+ }
136
+ }
137
+ if (limit !== undefined)
138
+ out = out.limit(limit);
139
+ if (offset !== undefined)
140
+ out = out.offset(offset);
141
+ return out;
142
+ }
143
+ function mapDriverError(err, table, dialect) {
144
+ if (!(err instanceof Error))
145
+ return err;
146
+ const msg = err.message;
147
+ const code = err.code;
148
+ if (dialect === "sqlite") {
149
+ const kind = sqliteConstraintKind(code, msg);
150
+ if (kind !== null) {
151
+ const field = extractSqliteField(kind, msg);
152
+ return new ConstraintViolationError(msg, {
153
+ kind, table, ...(field !== undefined ? { field } : {}), cause: err,
154
+ });
155
+ }
156
+ return err;
157
+ }
158
+ // Postgres pg driver attaches SQLSTATE on `.code`.
159
+ if (code === "23505")
160
+ return new ConstraintViolationError(msg, { kind: "unique", table, cause: err });
161
+ if (code === "23503")
162
+ return new ConstraintViolationError(msg, { kind: "foreign_key", table, cause: err });
163
+ if (code === "23502")
164
+ return new ConstraintViolationError(msg, { kind: "not_null", table, cause: err });
165
+ if (code === "23514")
166
+ return new ConstraintViolationError(msg, { kind: "check", table, cause: err });
167
+ return err;
168
+ }
169
+ // libsql wraps better-sqlite3, which maps SQLite extended error codes to
170
+ // strings like SQLITE_CONSTRAINT_UNIQUE. Older/server-mode libsql may only
171
+ // surface SQLITE_CONSTRAINT and signal the kind in the message — fall through
172
+ // to message-parse in that case.
173
+ function sqliteConstraintKind(code, msg) {
174
+ if (code === "SQLITE_CONSTRAINT_UNIQUE" || code === "SQLITE_CONSTRAINT_PRIMARYKEY")
175
+ return "unique";
176
+ if (code === "SQLITE_CONSTRAINT_FOREIGNKEY")
177
+ return "foreign_key";
178
+ if (code === "SQLITE_CONSTRAINT_NOTNULL")
179
+ return "not_null";
180
+ if (code === "SQLITE_CONSTRAINT_CHECK")
181
+ return "check";
182
+ if (code === "SQLITE_CONSTRAINT" || code === undefined) {
183
+ if (msg.includes("UNIQUE constraint failed"))
184
+ return "unique";
185
+ if (msg.includes("FOREIGN KEY constraint failed"))
186
+ return "foreign_key";
187
+ if (msg.includes("NOT NULL constraint failed"))
188
+ return "not_null";
189
+ if (msg.includes("CHECK constraint failed"))
190
+ return "check";
191
+ }
192
+ return null;
193
+ }
194
+ function extractSqliteField(kind, msg) {
195
+ const pattern = kind === "unique" ? /UNIQUE constraint failed: ([^\s,]+)/
196
+ : kind === "not_null" ? /NOT NULL constraint failed: ([^\s,]+)/
197
+ : null;
198
+ if (!pattern)
199
+ return undefined;
200
+ const m = msg.match(pattern);
201
+ return m ? m[1]?.split(".")[1] : undefined;
202
+ }
203
+ //# sourceMappingURL=kysely-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kysely-driver.js","sourceRoot":"","sources":["../../src/drivers/kysely-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Per-entity filter+sort allowlist generated by codegen-ts from @filterable/@sortable
3
+ * metadata. Validates incoming HTTP filter params at the route boundary so the
4
+ * Drizzle query layer never sees an unwhitelisted (field, op) combination.
5
+ */
6
+ import { FILTER_OPS, OPS_BY_SUBTYPE, opsForSubType, type FilterOp } from "@metaobjectsdev/metadata";
7
+ export { FILTER_OPS, OPS_BY_SUBTYPE, opsForSubType, type FilterOp };
8
+ export type FilterSubType = "string" | "number" | "boolean" | "datetime";
9
+ export interface FilterFieldRule {
10
+ readonly ops: readonly FilterOp[];
11
+ readonly subType: FilterSubType;
12
+ readonly leadingWildcard: boolean;
13
+ }
14
+ export type FilterAllowlist = Readonly<Record<string, FilterFieldRule>>;
15
+ export interface SortFieldRule {
16
+ readonly defaultOrder?: "asc" | "desc";
17
+ }
18
+ export type SortAllowlist = Readonly<Record<string, SortFieldRule>>;
19
+ //# sourceMappingURL=filter-allowlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-allowlist.d.ts","sourceRoot":"","sources":["../../src/drizzle-fastify/filter-allowlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,SAAS,QAAQ,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Per-entity filter+sort allowlist generated by codegen-ts from @filterable/@sortable
3
+ * metadata. Validates incoming HTTP filter params at the route boundary so the
4
+ * Drizzle query layer never sees an unwhitelisted (field, op) combination.
5
+ */
6
+ // FILTER_OPS, FilterOp, OPS_BY_SUBTYPE, and opsForSubType are canonical in
7
+ // @metaobjectsdev/metadata — import from there and re-export for backwards compat.
8
+ import { FILTER_OPS, OPS_BY_SUBTYPE, opsForSubType, } from "@metaobjectsdev/metadata";
9
+ export { FILTER_OPS, OPS_BY_SUBTYPE, opsForSubType };
10
+ //# sourceMappingURL=filter-allowlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-allowlist.js","sourceRoot":"","sources":["../../src/drizzle-fastify/filter-allowlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2EAA2E;AAC3E,mFAAmF;AACnF,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,GAEd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAiB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type SQL, type SQLWrapper } from "drizzle-orm";
2
+ import type { FilterAllowlist, SortAllowlist } from "./filter-allowlist.js";
3
+ type AnyTable = any;
4
+ export interface ParseFilterOpts {
5
+ query: Record<string, unknown>;
6
+ table: AnyTable;
7
+ allowlist: FilterAllowlist;
8
+ sortAllowlist: SortAllowlist;
9
+ dialect: "sqlite" | "postgres";
10
+ maxNesting?: number;
11
+ maxInListSize?: number;
12
+ }
13
+ export interface ParseFilterResult {
14
+ where?: SQL;
15
+ orderBy?: SQLWrapper[];
16
+ limit?: number;
17
+ offset?: number;
18
+ /** Search predicate — OR(like('%term%')) across @filterable string fields. */
19
+ searchWhere?: SQL;
20
+ }
21
+ export declare class FilterParseError extends Error {
22
+ readonly code: string;
23
+ readonly details?: Record<string, unknown> | undefined;
24
+ constructor(code: string, message: string, details?: Record<string, unknown> | undefined);
25
+ }
26
+ export declare function parseFilterParams(opts: ParseFilterOpts): ParseFilterResult;
27
+ export {};
28
+ //# sourceMappingURL=filter-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-parser.d.ts","sourceRoot":"","sources":["../../src/drizzle-fastify/filter-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EAAE,KAAK,UAAU,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAA6B,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGvG,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,eAAe,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aACb,IAAI,EAAE,MAAM;aAAmC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAAhF,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAkB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAI7G;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAgD1E"}
@@ -0,0 +1,185 @@
1
+ import { eq, ne, gt, gte, lt, lte, inArray, like, ilike, isNull, not, and, or, asc, desc, } from "drizzle-orm";
2
+ export class FilterParseError extends Error {
3
+ code;
4
+ details;
5
+ constructor(code, message, details) {
6
+ super(message);
7
+ this.code = code;
8
+ this.details = details;
9
+ this.name = "FilterParseError";
10
+ }
11
+ }
12
+ const DEFAULT_MAX_NESTING = 5;
13
+ const DEFAULT_MAX_IN_LIST = 100;
14
+ export function parseFilterParams(opts) {
15
+ const result = {};
16
+ const limit = opts.query.limit;
17
+ if (limit !== undefined) {
18
+ const n = Number(limit);
19
+ if (Number.isFinite(n))
20
+ result.limit = n;
21
+ }
22
+ const offset = opts.query.offset;
23
+ if (offset !== undefined) {
24
+ const n = Number(offset);
25
+ if (Number.isFinite(n))
26
+ result.offset = n;
27
+ }
28
+ if (opts.query.filter && typeof opts.query.filter === "object") {
29
+ const where = parseNode(opts.query.filter, opts.table, opts.allowlist, opts.dialect, opts.maxNesting ?? DEFAULT_MAX_NESTING, opts.maxInListSize ?? DEFAULT_MAX_IN_LIST, 0);
30
+ if (where)
31
+ result.where = where;
32
+ }
33
+ if (typeof opts.query.sort === "string") {
34
+ result.orderBy = parseSort(opts.query.sort, opts.table, opts.sortAllowlist);
35
+ }
36
+ if (typeof opts.query.search === "string" && opts.query.search !== "") {
37
+ const term = `%${opts.query.search}%`;
38
+ const stringCols = Object.entries(opts.allowlist)
39
+ .filter(([, rule]) => rule.subType === "string")
40
+ .map(([field]) => opts.table[field]);
41
+ if (stringCols.length > 0) {
42
+ // Case-insensitive on Postgres (ilike), case-sensitive on SQLite (like) —
43
+ // matches the dispatch the existing [like] op uses (parseNode, below).
44
+ const matcher = opts.dialect === "postgres" ? ilike : like;
45
+ const parts = stringCols.map((col) => matcher(col, term));
46
+ // or() is defined as returning SQL | undefined but will always return
47
+ // SQL when given a non-empty array. parts[0] is always defined here
48
+ // because stringCols.length > 0 guarantees at least one element.
49
+ // biome-ignore lint/style/noNonNullAssertion: parts is guaranteed non-empty
50
+ result.searchWhere = (parts.length === 1 ? parts[0] : or(...parts));
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ function parseNode(node, table, allowlist, dialect, maxNesting, maxInList, depth) {
56
+ if (depth > maxNesting) {
57
+ throw new FilterParseError("filter.nesting_too_deep", `Filter nesting depth exceeds limit (${maxNesting}).`, { limit: maxNesting });
58
+ }
59
+ const parts = [];
60
+ for (const [key, value] of Object.entries(node)) {
61
+ if (key === "or") {
62
+ const subs = ensureArray(value, "or").map((sub) => parseNode(sub, table, allowlist, dialect, maxNesting, maxInList, depth + 1)).filter((s) => !!s);
63
+ if (subs.length > 0)
64
+ parts.push(or(...subs));
65
+ }
66
+ else if (key === "and") {
67
+ const subs = ensureArray(value, "and").map((sub) => parseNode(sub, table, allowlist, dialect, maxNesting, maxInList, depth + 1)).filter((s) => !!s);
68
+ if (subs.length > 0)
69
+ parts.push(and(...subs));
70
+ }
71
+ else {
72
+ // key is a field name
73
+ const rule = allowlist[key];
74
+ if (!rule) {
75
+ throw new FilterParseError("filter.unknown_field", `Unknown filter field "${key}".`, { field: key, allowed: Object.keys(allowlist) });
76
+ }
77
+ const col = table[key];
78
+ if (col === undefined) {
79
+ throw new FilterParseError("filter.unknown_field", `Table has no column for field "${key}".`, { field: key });
80
+ }
81
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
82
+ for (const [opKey, opValue] of Object.entries(value)) {
83
+ const expr = compileOp(col, rule, key, opKey, opValue, dialect, maxInList);
84
+ if (expr)
85
+ parts.push(expr);
86
+ }
87
+ }
88
+ else {
89
+ // Bare value = eq sugar
90
+ const expr = compileOp(col, rule, key, "eq", value, dialect, maxInList);
91
+ if (expr)
92
+ parts.push(expr);
93
+ }
94
+ }
95
+ }
96
+ if (parts.length === 0)
97
+ return undefined;
98
+ if (parts.length === 1)
99
+ return parts[0];
100
+ return and(...parts);
101
+ }
102
+ function compileOp(col, rule, field, op, value, dialect, maxInList) {
103
+ if (!rule.ops.includes(op)) {
104
+ throw new FilterParseError("filter.unsupported_op", `Op "${op}" not supported for field "${field}".`, { field, op, allowed: rule.ops });
105
+ }
106
+ switch (op) {
107
+ case "eq": return eq(col, coerce(value, rule.subType, field, op));
108
+ case "ne": return ne(col, coerce(value, rule.subType, field, op));
109
+ case "gt": return gt(col, coerce(value, rule.subType, field, op));
110
+ case "gte": return gte(col, coerce(value, rule.subType, field, op));
111
+ case "lt": return lt(col, coerce(value, rule.subType, field, op));
112
+ case "lte": return lte(col, coerce(value, rule.subType, field, op));
113
+ case "in": {
114
+ const list = String(value).split(",").map((v) => coerce(v.trim(), rule.subType, field, op));
115
+ if (list.length > maxInList) {
116
+ throw new FilterParseError("filter.in_too_large", `In-list size ${list.length} exceeds limit ${maxInList}.`, { field, limit: maxInList });
117
+ }
118
+ return inArray(col, list);
119
+ }
120
+ case "like": {
121
+ const s = String(value);
122
+ if (s.startsWith("%") && !rule.leadingWildcard) {
123
+ throw new FilterParseError("filter.leading_wildcard_disallowed", `Leading wildcard not allowed for field "${field}".`, { field });
124
+ }
125
+ return dialect === "postgres" ? ilike(col, s) : like(col, s);
126
+ }
127
+ case "isNull": {
128
+ // isNull's value is always coerced as boolean (true/false), regardless of the
129
+ // field's declared subType — the operator is "is the value null?", not "is X
130
+ // equal to null?". Field subtype is irrelevant.
131
+ const b = coerce(value, "boolean", field, op);
132
+ return b ? isNull(col) : not(isNull(col));
133
+ }
134
+ }
135
+ }
136
+ function coerce(value, subType, field, op) {
137
+ if (value === null || value === undefined)
138
+ return null;
139
+ const s = typeof value === "string" ? value : String(value);
140
+ switch (subType) {
141
+ case "string": return s;
142
+ case "boolean": {
143
+ if (s === "true" || s === "1")
144
+ return true;
145
+ if (s === "false" || s === "0")
146
+ return false;
147
+ throw new FilterParseError("filter.invalid_value", `Field "${field}" op "${op}" requires boolean, got "${s}".`, { field, op, expected: "boolean" });
148
+ }
149
+ case "number": {
150
+ const n = Number(s);
151
+ if (!Number.isFinite(n)) {
152
+ throw new FilterParseError("filter.invalid_value", `Field "${field}" op "${op}" requires number, got "${s}".`, { field, op, expected: "number" });
153
+ }
154
+ return n;
155
+ }
156
+ case "datetime": return s;
157
+ default: return s;
158
+ }
159
+ }
160
+ function ensureArray(v, key) {
161
+ if (Array.isArray(v))
162
+ return v;
163
+ if (v && typeof v === "object") {
164
+ // qs.parse may produce { "0": ..., "1": ... } shape for filter[or][0]...
165
+ return Object.values(v);
166
+ }
167
+ // Defensive — qs.parse normally produces an object/array; this branch is
168
+ // only reachable if a caller hand-constructs a malformed query object.
169
+ throw new FilterParseError("filter.invalid_value", `Expected array for "${key}".`, { key });
170
+ }
171
+ function parseSort(spec, table, sortAllowlist) {
172
+ const colonIdx = spec.indexOf(":");
173
+ const field = colonIdx === -1 ? spec : spec.slice(0, colonIdx);
174
+ const orderRaw = colonIdx === -1 ? "asc" : spec.slice(colonIdx + 1);
175
+ const order = orderRaw.toLowerCase();
176
+ if (!sortAllowlist[field]) {
177
+ throw new FilterParseError("sort.unknown_field", `Unknown sort field "${field}".`, { field, allowed: Object.keys(sortAllowlist) });
178
+ }
179
+ if (order !== "asc" && order !== "desc") {
180
+ throw new FilterParseError("sort.invalid_order", `Sort order must be asc|desc, got "${orderRaw}".`, { expected: "asc | desc" });
181
+ }
182
+ const col = table[field];
183
+ return [order === "asc" ? asc(col) : desc(col)];
184
+ }
185
+ //# sourceMappingURL=filter-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-parser.js","sourceRoot":"","sources":["../../src/drizzle-fastify/filter-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { FastifyInstance, RouteShorthandOptions } from "fastify";
2
+ import type { ZodTypeAny } from "zod";
3
+ import type { FilterAllowlist, SortAllowlist } from "./filter-allowlist.js";
4
+ export type { FilterAllowlist, SortAllowlist } from "./filter-allowlist.js";
5
+ export { isTruthyFlag } from "./util.js";
6
+ type AnyDrizzle = any;
7
+ type AnyTable = any;
8
+ export type CrudVerb = "list" | "get" | "create" | "update" | "delete";
9
+ export interface CrudRoutesOptions {
10
+ fastify: FastifyInstance;
11
+ /** REST resource path, e.g. "/subscribers". */
12
+ path: string;
13
+ /** User's Drizzle instance. */
14
+ db: AnyDrizzle;
15
+ /** Drizzle table const. The helper requires this to have an `id` column. */
16
+ table: AnyTable;
17
+ /** Zod schema for create payloads (typically `<Entity>InsertSchema`). */
18
+ insertSchema: ZodTypeAny;
19
+ /** Zod schema for update payloads (typically `<Entity>UpdateSchema`). */
20
+ updateSchema: ZodTypeAny;
21
+ /** Limit which verbs are mounted. Defaults to all five. */
22
+ expose?: readonly CrudVerb[];
23
+ /**
24
+ * Fastify route-level hooks applied to every mounted verb (preHandler,
25
+ * onRequest, schema validation, etc.). Most common use is auth:
26
+ * routeOptions: { preHandler: requireAuthHook }
27
+ */
28
+ routeOptions?: RouteShorthandOptions;
29
+ /**
30
+ * HTTP method for the update verb. Defaults to "patch". Set to "put" to
31
+ * preserve a legacy API contract that already uses PUT for updates.
32
+ */
33
+ updateMethod?: "patch" | "put";
34
+ filterAllowlist?: FilterAllowlist;
35
+ sortAllowlist?: SortAllowlist;
36
+ /** Dialect — required if filterAllowlist or sortAllowlist is set (for like/ilike dispatch). */
37
+ dialect?: "sqlite" | "postgres";
38
+ }
39
+ export declare function mountCrudRoutes(opts: CrudRoutesOptions): void;
40
+ type VerbOptions = Omit<CrudRoutesOptions, "expose">;
41
+ export declare function mountListRoute(opts: VerbOptions): void;
42
+ export declare function mountGetRoute(opts: VerbOptions): void;
43
+ export declare function mountCreateRoute(opts: VerbOptions): void;
44
+ export declare function mountUpdateRoute(opts: VerbOptions): void;
45
+ export declare function mountDeleteRoute(opts: VerbOptions): void;
46
+ export declare function parseId(raw: string): number | string;
47
+ export { mountReadOnlyCrudRoutes, type MountReadOnlyOptions } from "./mount-read-only.js";
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drizzle-fastify/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAQzC,KAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,4EAA4E;IAC5E,KAAK,EAAE,QAAQ,CAAC;IAChB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAI,aAAa,CAAC;IAChC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACjC;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAMrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAoDtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAUrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAUxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CA0BxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAaxD;AAcD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGpD;AAED,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}