@mszr/idb-dux 1.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 (453) hide show
  1. package/LICENSE +194 -0
  2. package/README.md +84 -0
  3. package/dist/commonjs/admin/index.d.ts +18 -0
  4. package/dist/commonjs/admin/index.d.ts.map +1 -0
  5. package/dist/commonjs/admin/index.js +31 -0
  6. package/dist/commonjs/admin/index.js.map +1 -0
  7. package/dist/commonjs/admin/init.d.ts +67 -0
  8. package/dist/commonjs/admin/init.d.ts.map +1 -0
  9. package/dist/commonjs/admin/init.js +86 -0
  10. package/dist/commonjs/admin/init.js.map +1 -0
  11. package/dist/commonjs/admin/query.d.ts +21 -0
  12. package/dist/commonjs/admin/query.d.ts.map +1 -0
  13. package/dist/commonjs/admin/query.js +46 -0
  14. package/dist/commonjs/admin/query.js.map +1 -0
  15. package/dist/commonjs/admin/types.d.ts +124 -0
  16. package/dist/commonjs/admin/types.d.ts.map +1 -0
  17. package/dist/commonjs/admin/types.js +3 -0
  18. package/dist/commonjs/admin/types.js.map +1 -0
  19. package/dist/commonjs/admin/webhooks.d.ts +11 -0
  20. package/dist/commonjs/admin/webhooks.d.ts.map +1 -0
  21. package/dist/commonjs/admin/webhooks.js +8 -0
  22. package/dist/commonjs/admin/webhooks.js.map +1 -0
  23. package/dist/commonjs/errors.d.ts +13 -0
  24. package/dist/commonjs/errors.d.ts.map +1 -0
  25. package/dist/commonjs/errors.js +19 -0
  26. package/dist/commonjs/errors.js.map +1 -0
  27. package/dist/commonjs/index.d.ts +13 -0
  28. package/dist/commonjs/index.d.ts.map +1 -0
  29. package/dist/commonjs/index.js +29 -0
  30. package/dist/commonjs/index.js.map +1 -0
  31. package/dist/commonjs/nuxt/defineAuthSyncHandler.d.ts +15 -0
  32. package/dist/commonjs/nuxt/defineAuthSyncHandler.d.ts.map +1 -0
  33. package/dist/commonjs/nuxt/defineAuthSyncHandler.js +44 -0
  34. package/dist/commonjs/nuxt/defineAuthSyncHandler.js.map +1 -0
  35. package/dist/commonjs/nuxt/defineServerKit.d.ts +5 -0
  36. package/dist/commonjs/nuxt/defineServerKit.d.ts.map +1 -0
  37. package/dist/commonjs/nuxt/defineServerKit.js +49 -0
  38. package/dist/commonjs/nuxt/defineServerKit.js.map +1 -0
  39. package/dist/commonjs/nuxt/defineWebhookHandler.d.ts +17 -0
  40. package/dist/commonjs/nuxt/defineWebhookHandler.d.ts.map +1 -0
  41. package/dist/commonjs/nuxt/defineWebhookHandler.js +24 -0
  42. package/dist/commonjs/nuxt/defineWebhookHandler.js.map +1 -0
  43. package/dist/commonjs/nuxt/index.d.ts +15 -0
  44. package/dist/commonjs/nuxt/index.d.ts.map +1 -0
  45. package/dist/commonjs/nuxt/index.js +24 -0
  46. package/dist/commonjs/nuxt/index.js.map +1 -0
  47. package/dist/commonjs/nuxt/types.d.ts +54 -0
  48. package/dist/commonjs/nuxt/types.d.ts.map +1 -0
  49. package/dist/commonjs/nuxt/types.js +3 -0
  50. package/dist/commonjs/nuxt/types.js.map +1 -0
  51. package/dist/commonjs/package.json +3 -0
  52. package/dist/commonjs/perms/ast.d.ts +98 -0
  53. package/dist/commonjs/perms/ast.d.ts.map +1 -0
  54. package/dist/commonjs/perms/ast.js +148 -0
  55. package/dist/commonjs/perms/ast.js.map +1 -0
  56. package/dist/commonjs/perms/builder.d.ts +18 -0
  57. package/dist/commonjs/perms/builder.d.ts.map +1 -0
  58. package/dist/commonjs/perms/builder.js +260 -0
  59. package/dist/commonjs/perms/builder.js.map +1 -0
  60. package/dist/commonjs/perms/context.d.ts +27 -0
  61. package/dist/commonjs/perms/context.d.ts.map +1 -0
  62. package/dist/commonjs/perms/context.js +96 -0
  63. package/dist/commonjs/perms/context.js.map +1 -0
  64. package/dist/commonjs/perms/index.d.ts +13 -0
  65. package/dist/commonjs/perms/index.d.ts.map +1 -0
  66. package/dist/commonjs/perms/index.js +6 -0
  67. package/dist/commonjs/perms/index.js.map +1 -0
  68. package/dist/commonjs/perms/types.d.ts +353 -0
  69. package/dist/commonjs/perms/types.d.ts.map +1 -0
  70. package/dist/commonjs/perms/types.js +3 -0
  71. package/dist/commonjs/perms/types.js.map +1 -0
  72. package/dist/commonjs/perms/validate.d.ts +31 -0
  73. package/dist/commonjs/perms/validate.d.ts.map +1 -0
  74. package/dist/commonjs/perms/validate.js +66 -0
  75. package/dist/commonjs/perms/validate.js.map +1 -0
  76. package/dist/commonjs/query/constants.d.ts +13 -0
  77. package/dist/commonjs/query/constants.d.ts.map +1 -0
  78. package/dist/commonjs/query/constants.js +16 -0
  79. package/dist/commonjs/query/constants.js.map +1 -0
  80. package/dist/commonjs/query/defineQuery.d.ts +33 -0
  81. package/dist/commonjs/query/defineQuery.d.ts.map +1 -0
  82. package/dist/commonjs/query/defineQuery.js +28 -0
  83. package/dist/commonjs/query/defineQuery.js.map +1 -0
  84. package/dist/commonjs/query/index.d.ts +9 -0
  85. package/dist/commonjs/query/index.d.ts.map +1 -0
  86. package/dist/commonjs/query/index.js +16 -0
  87. package/dist/commonjs/query/index.js.map +1 -0
  88. package/dist/commonjs/query/keys.d.ts +33 -0
  89. package/dist/commonjs/query/keys.d.ts.map +1 -0
  90. package/dist/commonjs/query/keys.js +3 -0
  91. package/dist/commonjs/query/keys.js.map +1 -0
  92. package/dist/commonjs/query/shapeResult.d.ts +36 -0
  93. package/dist/commonjs/query/shapeResult.d.ts.map +1 -0
  94. package/dist/commonjs/query/shapeResult.js +173 -0
  95. package/dist/commonjs/query/shapeResult.js.map +1 -0
  96. package/dist/commonjs/query/types.d.ts +187 -0
  97. package/dist/commonjs/query/types.d.ts.map +1 -0
  98. package/dist/commonjs/query/types.js +3 -0
  99. package/dist/commonjs/query/types.js.map +1 -0
  100. package/dist/commonjs/query/validation.d.ts +61 -0
  101. package/dist/commonjs/query/validation.d.ts.map +1 -0
  102. package/dist/commonjs/query/validation.js +3 -0
  103. package/dist/commonjs/query/validation.js.map +1 -0
  104. package/dist/commonjs/query/wire.d.ts +13 -0
  105. package/dist/commonjs/query/wire.d.ts.map +1 -0
  106. package/dist/commonjs/query/wire.js +77 -0
  107. package/dist/commonjs/query/wire.js.map +1 -0
  108. package/dist/commonjs/schema/defineSchema.d.ts +110 -0
  109. package/dist/commonjs/schema/defineSchema.d.ts.map +1 -0
  110. package/dist/commonjs/schema/defineSchema.js +72 -0
  111. package/dist/commonjs/schema/defineSchema.js.map +1 -0
  112. package/dist/commonjs/schema/fields.d.ts +33 -0
  113. package/dist/commonjs/schema/fields.d.ts.map +1 -0
  114. package/dist/commonjs/schema/fields.js +3 -0
  115. package/dist/commonjs/schema/fields.js.map +1 -0
  116. package/dist/commonjs/schema/index.d.ts +9 -0
  117. package/dist/commonjs/schema/index.d.ts.map +1 -0
  118. package/dist/commonjs/schema/index.js +10 -0
  119. package/dist/commonjs/schema/index.js.map +1 -0
  120. package/dist/commonjs/schema/namespace.d.ts +82 -0
  121. package/dist/commonjs/schema/namespace.d.ts.map +1 -0
  122. package/dist/commonjs/schema/namespace.js +37 -0
  123. package/dist/commonjs/schema/namespace.js.map +1 -0
  124. package/dist/commonjs/schema/register.d.ts +37 -0
  125. package/dist/commonjs/schema/register.d.ts.map +1 -0
  126. package/dist/commonjs/schema/register.js +3 -0
  127. package/dist/commonjs/schema/register.js.map +1 -0
  128. package/dist/commonjs/schema/singularize.d.ts +45 -0
  129. package/dist/commonjs/schema/singularize.d.ts.map +1 -0
  130. package/dist/commonjs/schema/singularize.js +47 -0
  131. package/dist/commonjs/schema/singularize.js.map +1 -0
  132. package/dist/commonjs/schema/types.d.ts +39 -0
  133. package/dist/commonjs/schema/types.d.ts.map +1 -0
  134. package/dist/commonjs/schema/types.js +3 -0
  135. package/dist/commonjs/schema/types.js.map +1 -0
  136. package/dist/commonjs/schema/util.d.ts +11 -0
  137. package/dist/commonjs/schema/util.d.ts.map +1 -0
  138. package/dist/commonjs/schema/util.js +3 -0
  139. package/dist/commonjs/schema/util.js.map +1 -0
  140. package/dist/commonjs/tx/index.d.ts +4 -0
  141. package/dist/commonjs/tx/index.d.ts.map +1 -0
  142. package/dist/commonjs/tx/index.js +11 -0
  143. package/dist/commonjs/tx/index.js.map +1 -0
  144. package/dist/commonjs/tx/typedTx.d.ts +15 -0
  145. package/dist/commonjs/tx/typedTx.d.ts.map +1 -0
  146. package/dist/commonjs/tx/typedTx.js +54 -0
  147. package/dist/commonjs/tx/typedTx.js.map +1 -0
  148. package/dist/commonjs/tx/types.d.ts +104 -0
  149. package/dist/commonjs/tx/types.d.ts.map +1 -0
  150. package/dist/commonjs/tx/types.js +3 -0
  151. package/dist/commonjs/tx/types.js.map +1 -0
  152. package/dist/commonjs/vue/baseline/InstantDuxDatabase.d.ts +52 -0
  153. package/dist/commonjs/vue/baseline/InstantDuxDatabase.d.ts.map +1 -0
  154. package/dist/commonjs/vue/baseline/InstantDuxDatabase.js +157 -0
  155. package/dist/commonjs/vue/baseline/InstantDuxDatabase.js.map +1 -0
  156. package/dist/commonjs/vue/baseline/InstantDuxRoom.d.ts +72 -0
  157. package/dist/commonjs/vue/baseline/InstantDuxRoom.d.ts.map +1 -0
  158. package/dist/commonjs/vue/baseline/InstantDuxRoom.js +211 -0
  159. package/dist/commonjs/vue/baseline/InstantDuxRoom.js.map +1 -0
  160. package/dist/commonjs/vue/baseline/components/Cursor.d.ts +15 -0
  161. package/dist/commonjs/vue/baseline/components/Cursor.d.ts.map +1 -0
  162. package/dist/commonjs/vue/baseline/components/Cursor.js +39 -0
  163. package/dist/commonjs/vue/baseline/components/Cursor.js.map +1 -0
  164. package/dist/commonjs/vue/baseline/components/Cursors.d.ts +65 -0
  165. package/dist/commonjs/vue/baseline/components/Cursors.d.ts.map +1 -0
  166. package/dist/commonjs/vue/baseline/components/Cursors.js +113 -0
  167. package/dist/commonjs/vue/baseline/components/Cursors.js.map +1 -0
  168. package/dist/commonjs/vue/baseline/components/auth.d.ts +37 -0
  169. package/dist/commonjs/vue/baseline/components/auth.d.ts.map +1 -0
  170. package/dist/commonjs/vue/baseline/components/auth.js +27 -0
  171. package/dist/commonjs/vue/baseline/components/auth.js.map +1 -0
  172. package/dist/commonjs/vue/baseline/index.d.ts +11 -0
  173. package/dist/commonjs/vue/baseline/index.d.ts.map +1 -0
  174. package/dist/commonjs/vue/baseline/index.js +29 -0
  175. package/dist/commonjs/vue/baseline/index.js.map +1 -0
  176. package/dist/commonjs/vue/baseline/useInfiniteQuery.d.ts +19 -0
  177. package/dist/commonjs/vue/baseline/useInfiniteQuery.d.ts.map +1 -0
  178. package/dist/commonjs/vue/baseline/useInfiniteQuery.js +65 -0
  179. package/dist/commonjs/vue/baseline/useInfiniteQuery.js.map +1 -0
  180. package/dist/commonjs/vue/baseline/utils.d.ts +9 -0
  181. package/dist/commonjs/vue/baseline/utils.d.ts.map +1 -0
  182. package/dist/commonjs/vue/baseline/utils.js +29 -0
  183. package/dist/commonjs/vue/baseline/utils.js.map +1 -0
  184. package/dist/commonjs/vue/baseline/version.d.ts +3 -0
  185. package/dist/commonjs/vue/baseline/version.d.ts.map +1 -0
  186. package/dist/commonjs/vue/baseline/version.js +6 -0
  187. package/dist/commonjs/vue/baseline/version.js.map +1 -0
  188. package/dist/commonjs/vue/index.d.ts +21 -0
  189. package/dist/commonjs/vue/index.d.ts.map +1 -0
  190. package/dist/commonjs/vue/index.js +31 -0
  191. package/dist/commonjs/vue/index.js.map +1 -0
  192. package/dist/commonjs/vue/overlay/db.d.ts +106 -0
  193. package/dist/commonjs/vue/overlay/db.d.ts.map +1 -0
  194. package/dist/commonjs/vue/overlay/db.js +105 -0
  195. package/dist/commonjs/vue/overlay/db.js.map +1 -0
  196. package/dist/commonjs/vue/overlay/defineDb.d.ts +34 -0
  197. package/dist/commonjs/vue/overlay/defineDb.d.ts.map +1 -0
  198. package/dist/commonjs/vue/overlay/defineDb.js +48 -0
  199. package/dist/commonjs/vue/overlay/defineDb.js.map +1 -0
  200. package/dist/commonjs/vue/overlay/result.d.ts +29 -0
  201. package/dist/commonjs/vue/overlay/result.d.ts.map +1 -0
  202. package/dist/commonjs/vue/overlay/result.js +75 -0
  203. package/dist/commonjs/vue/overlay/result.js.map +1 -0
  204. package/dist/commonjs/vue/overlay/rooms/index.d.ts +79 -0
  205. package/dist/commonjs/vue/overlay/rooms/index.d.ts.map +1 -0
  206. package/dist/commonjs/vue/overlay/rooms/index.js +28 -0
  207. package/dist/commonjs/vue/overlay/rooms/index.js.map +1 -0
  208. package/dist/commonjs/vue/overlay/types.d.ts +73 -0
  209. package/dist/commonjs/vue/overlay/types.d.ts.map +1 -0
  210. package/dist/commonjs/vue/overlay/types.js +3 -0
  211. package/dist/commonjs/vue/overlay/types.js.map +1 -0
  212. package/dist/commonjs/webhooks/defineWebhookHandlers.d.ts +27 -0
  213. package/dist/commonjs/webhooks/defineWebhookHandlers.d.ts.map +1 -0
  214. package/dist/commonjs/webhooks/defineWebhookHandlers.js +33 -0
  215. package/dist/commonjs/webhooks/defineWebhookHandlers.js.map +1 -0
  216. package/dist/commonjs/webhooks/index.d.ts +15 -0
  217. package/dist/commonjs/webhooks/index.d.ts.map +1 -0
  218. package/dist/commonjs/webhooks/index.js +21 -0
  219. package/dist/commonjs/webhooks/index.js.map +1 -0
  220. package/dist/commonjs/webhooks/init.d.ts +13 -0
  221. package/dist/commonjs/webhooks/init.d.ts.map +1 -0
  222. package/dist/commonjs/webhooks/init.js +39 -0
  223. package/dist/commonjs/webhooks/init.js.map +1 -0
  224. package/dist/commonjs/webhooks/types.d.ts +136 -0
  225. package/dist/commonjs/webhooks/types.d.ts.map +1 -0
  226. package/dist/commonjs/webhooks/types.js +3 -0
  227. package/dist/commonjs/webhooks/types.js.map +1 -0
  228. package/dist/esm/admin/index.d.ts +18 -0
  229. package/dist/esm/admin/index.d.ts.map +1 -0
  230. package/dist/esm/admin/index.js +21 -0
  231. package/dist/esm/admin/index.js.map +1 -0
  232. package/dist/esm/admin/init.d.ts +67 -0
  233. package/dist/esm/admin/init.d.ts.map +1 -0
  234. package/dist/esm/admin/init.js +81 -0
  235. package/dist/esm/admin/init.js.map +1 -0
  236. package/dist/esm/admin/query.d.ts +21 -0
  237. package/dist/esm/admin/query.d.ts.map +1 -0
  238. package/dist/esm/admin/query.js +42 -0
  239. package/dist/esm/admin/query.js.map +1 -0
  240. package/dist/esm/admin/types.d.ts +124 -0
  241. package/dist/esm/admin/types.d.ts.map +1 -0
  242. package/dist/esm/admin/types.js +2 -0
  243. package/dist/esm/admin/types.js.map +1 -0
  244. package/dist/esm/admin/webhooks.d.ts +11 -0
  245. package/dist/esm/admin/webhooks.d.ts.map +1 -0
  246. package/dist/esm/admin/webhooks.js +5 -0
  247. package/dist/esm/admin/webhooks.js.map +1 -0
  248. package/dist/esm/errors.d.ts +13 -0
  249. package/dist/esm/errors.d.ts.map +1 -0
  250. package/dist/esm/errors.js +16 -0
  251. package/dist/esm/errors.js.map +1 -0
  252. package/dist/esm/index.d.ts +13 -0
  253. package/dist/esm/index.d.ts.map +1 -0
  254. package/dist/esm/index.js +13 -0
  255. package/dist/esm/index.js.map +1 -0
  256. package/dist/esm/nuxt/defineAuthSyncHandler.d.ts +15 -0
  257. package/dist/esm/nuxt/defineAuthSyncHandler.d.ts.map +1 -0
  258. package/dist/esm/nuxt/defineAuthSyncHandler.js +41 -0
  259. package/dist/esm/nuxt/defineAuthSyncHandler.js.map +1 -0
  260. package/dist/esm/nuxt/defineServerKit.d.ts +5 -0
  261. package/dist/esm/nuxt/defineServerKit.d.ts.map +1 -0
  262. package/dist/esm/nuxt/defineServerKit.js +46 -0
  263. package/dist/esm/nuxt/defineServerKit.js.map +1 -0
  264. package/dist/esm/nuxt/defineWebhookHandler.d.ts +17 -0
  265. package/dist/esm/nuxt/defineWebhookHandler.d.ts.map +1 -0
  266. package/dist/esm/nuxt/defineWebhookHandler.js +21 -0
  267. package/dist/esm/nuxt/defineWebhookHandler.js.map +1 -0
  268. package/dist/esm/nuxt/index.d.ts +15 -0
  269. package/dist/esm/nuxt/index.d.ts.map +1 -0
  270. package/dist/esm/nuxt/index.js +17 -0
  271. package/dist/esm/nuxt/index.js.map +1 -0
  272. package/dist/esm/nuxt/types.d.ts +54 -0
  273. package/dist/esm/nuxt/types.d.ts.map +1 -0
  274. package/dist/esm/nuxt/types.js +2 -0
  275. package/dist/esm/nuxt/types.js.map +1 -0
  276. package/dist/esm/package.json +3 -0
  277. package/dist/esm/perms/ast.d.ts +98 -0
  278. package/dist/esm/perms/ast.d.ts.map +1 -0
  279. package/dist/esm/perms/ast.js +140 -0
  280. package/dist/esm/perms/ast.js.map +1 -0
  281. package/dist/esm/perms/builder.d.ts +18 -0
  282. package/dist/esm/perms/builder.d.ts.map +1 -0
  283. package/dist/esm/perms/builder.js +257 -0
  284. package/dist/esm/perms/builder.js.map +1 -0
  285. package/dist/esm/perms/context.d.ts +27 -0
  286. package/dist/esm/perms/context.d.ts.map +1 -0
  287. package/dist/esm/perms/context.js +93 -0
  288. package/dist/esm/perms/context.js.map +1 -0
  289. package/dist/esm/perms/index.d.ts +13 -0
  290. package/dist/esm/perms/index.d.ts.map +1 -0
  291. package/dist/esm/perms/index.js +2 -0
  292. package/dist/esm/perms/index.js.map +1 -0
  293. package/dist/esm/perms/types.d.ts +353 -0
  294. package/dist/esm/perms/types.d.ts.map +1 -0
  295. package/dist/esm/perms/types.js +2 -0
  296. package/dist/esm/perms/types.js.map +1 -0
  297. package/dist/esm/perms/validate.d.ts +31 -0
  298. package/dist/esm/perms/validate.d.ts.map +1 -0
  299. package/dist/esm/perms/validate.js +61 -0
  300. package/dist/esm/perms/validate.js.map +1 -0
  301. package/dist/esm/query/constants.d.ts +13 -0
  302. package/dist/esm/query/constants.d.ts.map +1 -0
  303. package/dist/esm/query/constants.js +13 -0
  304. package/dist/esm/query/constants.js.map +1 -0
  305. package/dist/esm/query/defineQuery.d.ts +33 -0
  306. package/dist/esm/query/defineQuery.d.ts.map +1 -0
  307. package/dist/esm/query/defineQuery.js +24 -0
  308. package/dist/esm/query/defineQuery.js.map +1 -0
  309. package/dist/esm/query/index.d.ts +9 -0
  310. package/dist/esm/query/index.d.ts.map +1 -0
  311. package/dist/esm/query/index.js +5 -0
  312. package/dist/esm/query/index.js.map +1 -0
  313. package/dist/esm/query/keys.d.ts +33 -0
  314. package/dist/esm/query/keys.d.ts.map +1 -0
  315. package/dist/esm/query/keys.js +2 -0
  316. package/dist/esm/query/keys.js.map +1 -0
  317. package/dist/esm/query/shapeResult.d.ts +36 -0
  318. package/dist/esm/query/shapeResult.d.ts.map +1 -0
  319. package/dist/esm/query/shapeResult.js +168 -0
  320. package/dist/esm/query/shapeResult.js.map +1 -0
  321. package/dist/esm/query/types.d.ts +187 -0
  322. package/dist/esm/query/types.d.ts.map +1 -0
  323. package/dist/esm/query/types.js +2 -0
  324. package/dist/esm/query/types.js.map +1 -0
  325. package/dist/esm/query/validation.d.ts +61 -0
  326. package/dist/esm/query/validation.d.ts.map +1 -0
  327. package/dist/esm/query/validation.js +2 -0
  328. package/dist/esm/query/validation.js.map +1 -0
  329. package/dist/esm/query/wire.d.ts +13 -0
  330. package/dist/esm/query/wire.d.ts.map +1 -0
  331. package/dist/esm/query/wire.js +74 -0
  332. package/dist/esm/query/wire.js.map +1 -0
  333. package/dist/esm/schema/defineSchema.d.ts +110 -0
  334. package/dist/esm/schema/defineSchema.d.ts.map +1 -0
  335. package/dist/esm/schema/defineSchema.js +69 -0
  336. package/dist/esm/schema/defineSchema.js.map +1 -0
  337. package/dist/esm/schema/fields.d.ts +33 -0
  338. package/dist/esm/schema/fields.d.ts.map +1 -0
  339. package/dist/esm/schema/fields.js +2 -0
  340. package/dist/esm/schema/fields.js.map +1 -0
  341. package/dist/esm/schema/index.d.ts +9 -0
  342. package/dist/esm/schema/index.d.ts.map +1 -0
  343. package/dist/esm/schema/index.js +4 -0
  344. package/dist/esm/schema/index.js.map +1 -0
  345. package/dist/esm/schema/namespace.d.ts +82 -0
  346. package/dist/esm/schema/namespace.d.ts.map +1 -0
  347. package/dist/esm/schema/namespace.js +34 -0
  348. package/dist/esm/schema/namespace.js.map +1 -0
  349. package/dist/esm/schema/register.d.ts +37 -0
  350. package/dist/esm/schema/register.d.ts.map +1 -0
  351. package/dist/esm/schema/register.js +2 -0
  352. package/dist/esm/schema/register.js.map +1 -0
  353. package/dist/esm/schema/singularize.d.ts +45 -0
  354. package/dist/esm/schema/singularize.d.ts.map +1 -0
  355. package/dist/esm/schema/singularize.js +44 -0
  356. package/dist/esm/schema/singularize.js.map +1 -0
  357. package/dist/esm/schema/types.d.ts +39 -0
  358. package/dist/esm/schema/types.d.ts.map +1 -0
  359. package/dist/esm/schema/types.js +2 -0
  360. package/dist/esm/schema/types.js.map +1 -0
  361. package/dist/esm/schema/util.d.ts +11 -0
  362. package/dist/esm/schema/util.d.ts.map +1 -0
  363. package/dist/esm/schema/util.js +2 -0
  364. package/dist/esm/schema/util.js.map +1 -0
  365. package/dist/esm/tx/index.d.ts +4 -0
  366. package/dist/esm/tx/index.d.ts.map +1 -0
  367. package/dist/esm/tx/index.js +5 -0
  368. package/dist/esm/tx/index.js.map +1 -0
  369. package/dist/esm/tx/typedTx.d.ts +15 -0
  370. package/dist/esm/tx/typedTx.d.ts.map +1 -0
  371. package/dist/esm/tx/typedTx.js +51 -0
  372. package/dist/esm/tx/typedTx.js.map +1 -0
  373. package/dist/esm/tx/types.d.ts +104 -0
  374. package/dist/esm/tx/types.d.ts.map +1 -0
  375. package/dist/esm/tx/types.js +2 -0
  376. package/dist/esm/tx/types.js.map +1 -0
  377. package/dist/esm/vue/baseline/InstantDuxDatabase.d.ts +52 -0
  378. package/dist/esm/vue/baseline/InstantDuxDatabase.d.ts.map +1 -0
  379. package/dist/esm/vue/baseline/InstantDuxDatabase.js +149 -0
  380. package/dist/esm/vue/baseline/InstantDuxDatabase.js.map +1 -0
  381. package/dist/esm/vue/baseline/InstantDuxRoom.d.ts +72 -0
  382. package/dist/esm/vue/baseline/InstantDuxRoom.d.ts.map +1 -0
  383. package/dist/esm/vue/baseline/InstantDuxRoom.js +202 -0
  384. package/dist/esm/vue/baseline/InstantDuxRoom.js.map +1 -0
  385. package/dist/esm/vue/baseline/components/Cursor.d.ts +15 -0
  386. package/dist/esm/vue/baseline/components/Cursor.d.ts.map +1 -0
  387. package/dist/esm/vue/baseline/components/Cursor.js +36 -0
  388. package/dist/esm/vue/baseline/components/Cursor.js.map +1 -0
  389. package/dist/esm/vue/baseline/components/Cursors.d.ts +65 -0
  390. package/dist/esm/vue/baseline/components/Cursors.d.ts.map +1 -0
  391. package/dist/esm/vue/baseline/components/Cursors.js +107 -0
  392. package/dist/esm/vue/baseline/components/Cursors.js.map +1 -0
  393. package/dist/esm/vue/baseline/components/auth.d.ts +37 -0
  394. package/dist/esm/vue/baseline/components/auth.d.ts.map +1 -0
  395. package/dist/esm/vue/baseline/components/auth.js +24 -0
  396. package/dist/esm/vue/baseline/components/auth.js.map +1 -0
  397. package/dist/esm/vue/baseline/index.d.ts +11 -0
  398. package/dist/esm/vue/baseline/index.d.ts.map +1 -0
  399. package/dist/esm/vue/baseline/index.js +10 -0
  400. package/dist/esm/vue/baseline/index.js.map +1 -0
  401. package/dist/esm/vue/baseline/useInfiniteQuery.d.ts +19 -0
  402. package/dist/esm/vue/baseline/useInfiniteQuery.d.ts.map +1 -0
  403. package/dist/esm/vue/baseline/useInfiniteQuery.js +62 -0
  404. package/dist/esm/vue/baseline/useInfiniteQuery.js.map +1 -0
  405. package/dist/esm/vue/baseline/utils.d.ts +9 -0
  406. package/dist/esm/vue/baseline/utils.d.ts.map +1 -0
  407. package/dist/esm/vue/baseline/utils.js +25 -0
  408. package/dist/esm/vue/baseline/utils.js.map +1 -0
  409. package/dist/esm/vue/baseline/version.d.ts +3 -0
  410. package/dist/esm/vue/baseline/version.d.ts.map +1 -0
  411. package/dist/esm/vue/baseline/version.js +4 -0
  412. package/dist/esm/vue/baseline/version.js.map +1 -0
  413. package/dist/esm/vue/index.d.ts +21 -0
  414. package/dist/esm/vue/index.d.ts.map +1 -0
  415. package/dist/esm/vue/index.js +18 -0
  416. package/dist/esm/vue/index.js.map +1 -0
  417. package/dist/esm/vue/overlay/db.d.ts +106 -0
  418. package/dist/esm/vue/overlay/db.d.ts.map +1 -0
  419. package/dist/esm/vue/overlay/db.js +101 -0
  420. package/dist/esm/vue/overlay/db.js.map +1 -0
  421. package/dist/esm/vue/overlay/defineDb.d.ts +34 -0
  422. package/dist/esm/vue/overlay/defineDb.d.ts.map +1 -0
  423. package/dist/esm/vue/overlay/defineDb.js +44 -0
  424. package/dist/esm/vue/overlay/defineDb.js.map +1 -0
  425. package/dist/esm/vue/overlay/result.d.ts +29 -0
  426. package/dist/esm/vue/overlay/result.d.ts.map +1 -0
  427. package/dist/esm/vue/overlay/result.js +71 -0
  428. package/dist/esm/vue/overlay/result.js.map +1 -0
  429. package/dist/esm/vue/overlay/rooms/index.d.ts +79 -0
  430. package/dist/esm/vue/overlay/rooms/index.d.ts.map +1 -0
  431. package/dist/esm/vue/overlay/rooms/index.js +25 -0
  432. package/dist/esm/vue/overlay/rooms/index.js.map +1 -0
  433. package/dist/esm/vue/overlay/types.d.ts +73 -0
  434. package/dist/esm/vue/overlay/types.d.ts.map +1 -0
  435. package/dist/esm/vue/overlay/types.js +2 -0
  436. package/dist/esm/vue/overlay/types.js.map +1 -0
  437. package/dist/esm/webhooks/defineWebhookHandlers.d.ts +27 -0
  438. package/dist/esm/webhooks/defineWebhookHandlers.d.ts.map +1 -0
  439. package/dist/esm/webhooks/defineWebhookHandlers.js +30 -0
  440. package/dist/esm/webhooks/defineWebhookHandlers.js.map +1 -0
  441. package/dist/esm/webhooks/index.d.ts +15 -0
  442. package/dist/esm/webhooks/index.d.ts.map +1 -0
  443. package/dist/esm/webhooks/index.js +14 -0
  444. package/dist/esm/webhooks/index.js.map +1 -0
  445. package/dist/esm/webhooks/init.d.ts +13 -0
  446. package/dist/esm/webhooks/init.d.ts.map +1 -0
  447. package/dist/esm/webhooks/init.js +36 -0
  448. package/dist/esm/webhooks/init.js.map +1 -0
  449. package/dist/esm/webhooks/types.d.ts +136 -0
  450. package/dist/esm/webhooks/types.d.ts.map +1 -0
  451. package/dist/esm/webhooks/types.js +2 -0
  452. package/dist/esm/webhooks/types.js.map +1 -0
  453. package/package.json +149 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `@mszr/idb-dux/perms` — typed CEL authoring.
3
+ *
4
+ * `definePerms` and the expression/context machinery that compiles to the
5
+ * plain rules object Instant already accepts. Authoring-only: no client
6
+ * runtime, never bundled into client JS.
7
+ *
8
+ * Spec: `../../../docs/dux-spec-perms.md`.
9
+ */
10
+ export type { Expr, ExprArg, ItemExpr, ListExpr } from './ast.js';
11
+ export { definePerms } from './builder.js';
12
+ export type { ActionCtx, AllowBlock, AttrsBuilder, AuthExpr, CommonCtx, DefaultsBuilder, EntityAction, EntityExpr, Fns, IdbPerms, LinkAction, LinkCtx, NsBuilder, PermsBuilder, RateLimitCtx, RefPath, RefTerminal, RequestExpr, Rule, UpdateCtx, WriteCtx, WriteRequestExpr, } from './types.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/perms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,YAAY,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,GAAG,EACH,QAAQ,EACR,UAAU,EACV,OAAO,EACP,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,WAAW,EACX,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { definePerms } from './builder.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/perms/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA","sourcesContent":["/**\n * `@mszr/idb-dux/perms` — typed CEL authoring.\n *\n * `definePerms` and the expression/context machinery that compiles to the\n * plain rules object Instant already accepts. Authoring-only: no client\n * runtime, never bundled into client JS.\n *\n * Spec: `../../../docs/dux-spec-perms.md`.\n */\nexport type { Expr, ExprArg, ItemExpr, ListExpr } from './ast.js'\nexport { definePerms } from './builder.js'\nexport type {\n ActionCtx,\n AllowBlock,\n AttrsBuilder,\n AuthExpr,\n CommonCtx,\n DefaultsBuilder,\n EntityAction,\n EntityExpr,\n Fns,\n IdbPerms,\n LinkAction,\n LinkCtx,\n NsBuilder,\n PermsBuilder,\n RateLimitCtx,\n RefPath,\n RefTerminal,\n RequestExpr,\n Rule,\n UpdateCtx,\n WriteCtx,\n WriteRequestExpr,\n} from './types.js'\n"]}
@@ -0,0 +1,353 @@
1
+ /**
2
+ * The perms-domain types: the schema-aware context every callback receives,
3
+ * the ref-path machinery, the allow/fields/bind/stage shapes, the chainable
4
+ * builders, and the compiled `IdbPerms` output.
5
+ *
6
+ * The context is **entity-rooted with current unmarked** (conventions §10):
7
+ * `e`/`ef`/`er` read the current entity (`data.*`), `eu`/`euf` the updated one
8
+ * (`newData.*`, update only), `el`/`elf`/`elr` the linked one (`linkedData.*`,
9
+ * link/unlink only). Action-only values exist only in the matching action
10
+ * callback, so misusing one (`eu` in `view`) fails at the cursor.
11
+ */
12
+ import type { DataAttrDef, InstantRules } from '@instantdb/core';
13
+ import type { IdbSchema } from '../schema/defineSchema.js';
14
+ import type { AttrsOf, AttrValue, FieldKeys, LinkLabels, LinkTarget } from '../schema/fields.js';
15
+ import type { IdbRegisteredSchema } from '../schema/register.js';
16
+ import type { IdbNamespaceName } from '../schema/types.js';
17
+ import type { Expand } from '../schema/util.js';
18
+ import type { Expr, ExprArg, ListExpr } from './ast.js';
19
+ /** The authoring value type of a field. */
20
+ export type FieldValue<S extends IdbSchema, NS extends string, K extends string> = K extends 'id' ? string : K extends FieldKeys<S, NS> ? AttrValue<AttrsOf<S, NS>[K]> : never;
21
+ /** Property-access view of an entity: `id` plus every field, each an `Expr`. */
22
+ export type EntityExpr<S extends IdbSchema, NS extends string> = Expand<{
23
+ id: Expr<string>;
24
+ } & {
25
+ [K in FieldKeys<S, NS>]: Expr<FieldValue<S, NS, K>>;
26
+ }>;
27
+ type RefDepth = readonly unknown[];
28
+ /** Ref-path autocomplete spans up to four link hops (spec §7), then `raw`. */
29
+ type RefMaxHops = 4;
30
+ type NextRef<D extends RefDepth> = [...D, unknown];
31
+ type RefAttr<S extends IdbSchema, NS extends string> = FieldKeys<S, NS> | 'id';
32
+ /**
33
+ * Every valid ref path from a namespace: one or more link hops ending in an
34
+ * attribute (`'memberships.user.id'`). Capped at `RefMaxHops` so the union
35
+ * stays tractable; deeper paths use `raw`.
36
+ */
37
+ export type RefPath<S extends IdbSchema, NS extends string, D extends RefDepth = []> = D['length'] extends RefMaxHops ? never : {
38
+ [L in LinkLabels<S, NS>]: `${L}.${RefAttr<S, LinkTarget<S, NS, L>>}` | `${L}.${RefPath<S, LinkTarget<S, NS, L>, NextRef<D>>}`;
39
+ }[LinkLabels<S, NS>];
40
+ /** The value type a ref path terminates in — a list of these is what `er` returns. */
41
+ export type RefTerminal<S extends IdbSchema, NS extends string, P extends string> = P extends `${infer L}.${infer Rest}` ? L extends LinkLabels<S, NS> ? Rest extends RefAttr<S, LinkTarget<S, NS, L>> ? FieldValue<S, LinkTarget<S, NS, L>, Rest> : RefTerminal<S, LinkTarget<S, NS, L>, Rest> : never : never;
42
+ /** Auth refs start from `$users`, spelled `$user.`-prefixed (Instant's form). */
43
+ export type AuthRefPath<S extends IdbSchema> = `$user.${RefPath<S, '$users'>}`;
44
+ type AuthRefTerminal<S extends IdbSchema, P extends string> = P extends `$user.${infer Rest}` ? RefTerminal<S, '$users', Rest> : never;
45
+ type RuleParamDefs<S extends IdbSchema, NS extends string> = NS extends keyof S['$dux']['namespaces'] ? S['$dux']['namespaces'][NS]['ruleParams'] extends infer RP ? RP extends Record<string, DataAttrDef<any, any, any, any>> ? RP : {} : {} : {};
46
+ type RuleParamKeys<S extends IdbSchema, NS extends string> = keyof RuleParamDefs<S, NS> & string;
47
+ type RuleParamValue<S extends IdbSchema, NS extends string, K extends string> = K extends keyof RuleParamDefs<S, NS> ? AttrValue<RuleParamDefs<S, NS>[K]> : never;
48
+ /** The authenticated user — a `$users` entity, plus `id`, read as `auth.*`. */
49
+ export type AuthExpr<S extends IdbSchema> = '$users' extends IdbNamespaceName<S> ? EntityExpr<S, '$users'> : {
50
+ id: Expr<string>;
51
+ };
52
+ /** Request metadata always in scope (`request.*`). */
53
+ export interface RequestExpr {
54
+ time: Expr<Date>;
55
+ ip: Expr<string>;
56
+ origin: Expr<string>;
57
+ }
58
+ /** The create/update request: the common metadata plus the modified-field set. */
59
+ export interface WriteRequestExpr extends RequestExpr {
60
+ modifiedFields: ListExpr<string>;
61
+ }
62
+ /** Functional composition — best for nested or n-ary rules (spec §8). */
63
+ export interface Fns {
64
+ and: (...exprs: ExprArg<boolean>[]) => Expr<boolean>;
65
+ or: (...exprs: ExprArg<boolean>[]) => Expr<boolean>;
66
+ not: (expr: ExprArg<boolean>) => Expr<boolean>;
67
+ eq: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>;
68
+ neq: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>;
69
+ gt: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>;
70
+ gte: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>;
71
+ lt: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>;
72
+ lte: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>;
73
+ in: <T>(item: ExprArg<T>, list: readonly ExprArg<T>[] | ListExpr<T>) => Expr<boolean>;
74
+ contains: <T>(list: readonly ExprArg<T>[] | ListExpr<T>, item: ExprArg<T>) => Expr<boolean>;
75
+ size: (value: ListExpr<any> | ExprArg<string>) => Expr<number>;
76
+ list: <T>(...values: ExprArg<T>[]) => ListExpr<T>;
77
+ str: (value: ExprArg<string>) => Expr<string>;
78
+ num: (value: ExprArg<number>) => Expr<number>;
79
+ bool: (value: ExprArg<boolean>) => Expr<boolean>;
80
+ null: () => Expr<null>;
81
+ }
82
+ /** Configured rate-limit buckets, used as `rl.bucket.limit(key)`. */
83
+ export type RateLimitCtx<RL> = {
84
+ [K in keyof RL]: {
85
+ limit: (key: ExprArg<unknown>) => Expr<boolean>;
86
+ };
87
+ };
88
+ /** How a bucket refills — mirrors Instant's `$rateLimits` refill shape (spec §11). */
89
+ export interface IdbPermsRateLimitRefill {
90
+ amount?: number;
91
+ period?: string;
92
+ type?: 'interval' | 'greedy';
93
+ }
94
+ /** One token-bucket limit. */
95
+ export interface IdbPermsRateLimitLimit {
96
+ capacity: number;
97
+ refill?: IdbPermsRateLimitRefill;
98
+ }
99
+ /** A named rate-limit bucket — used in rules via `rl.<name>.limit(key)`. */
100
+ export interface IdbPermsRateLimit {
101
+ limits: IdbPermsRateLimitLimit[];
102
+ }
103
+ /** The `$rateLimits` configuration map (structurally Instant's shape). */
104
+ export type IdbPermsRateLimits = Record<string, IdbPermsRateLimit>;
105
+ /** The common context — every callback's baseline (spec §6). */
106
+ export interface CommonCtx<S extends IdbSchema, NS extends string, St, Bn, RL> {
107
+ auth: AuthExpr<S>;
108
+ ar: <P extends AuthRefPath<S>>(path: P) => ListExpr<AuthRefTerminal<S, P>>;
109
+ e: EntityExpr<S, NS>;
110
+ ef: <K extends FieldKeys<S, NS>>(key: K) => Expr<FieldValue<S, NS, K>>;
111
+ er: <P extends RefPath<S, NS>>(path: P) => ListExpr<RefTerminal<S, NS, P>>;
112
+ rp: <K extends RuleParamKeys<S, NS>>(key: K) => Expr<RuleParamValue<S, NS, K>>;
113
+ req: RequestExpr;
114
+ f: Fns;
115
+ ops: Fns;
116
+ raw: <T = boolean>(cel: string) => Expr<T>;
117
+ rl: RateLimitCtx<RL>;
118
+ s: St;
119
+ b: Bn;
120
+ }
121
+ /** Create/update context — common plus `request.modifiedFields`. */
122
+ export type WriteCtx<S extends IdbSchema, NS extends string, St, Bn, RL> = Omit<CommonCtx<S, NS, St, Bn, RL>, 'req'> & {
123
+ req: WriteRequestExpr;
124
+ };
125
+ /** Update context — write context plus the updated entity (`newData.*`). */
126
+ export type UpdateCtx<S extends IdbSchema, NS extends string, St, Bn, RL> = WriteCtx<S, NS, St, Bn, RL> & {
127
+ eu: EntityExpr<S, NS>;
128
+ euf: <K extends FieldKeys<S, NS>>(key: K) => Expr<FieldValue<S, NS, K>>;
129
+ };
130
+ /** Link/unlink context — common plus the linked entity, typed per link label. */
131
+ export type LinkCtx<S extends IdbSchema, NS extends string, L extends string, St, Bn, RL> = CommonCtx<S, NS, St, Bn, RL> & {
132
+ el: EntityExpr<S, LinkTarget<S, NS, L>>;
133
+ elf: <K extends FieldKeys<S, LinkTarget<S, NS, L>>>(key: K) => Expr<FieldValue<S, LinkTarget<S, NS, L>, K>>;
134
+ elr: <P extends RefPath<S, LinkTarget<S, NS, L>>>(path: P) => ListExpr<RefTerminal<S, LinkTarget<S, NS, L>, P>>;
135
+ };
136
+ /** The loose context for `.defaults` — no namespace, so reads are string-keyed. */
137
+ export interface DefaultCtx<S extends IdbSchema, St, Bn, RL> {
138
+ auth: AuthExpr<S>;
139
+ ar: <P extends AuthRefPath<S>>(path: P) => ListExpr<AuthRefTerminal<S, P>>;
140
+ ef: (key: string) => Expr<unknown>;
141
+ er: (path: string) => ListExpr<unknown>;
142
+ rp: (key: string) => Expr<unknown>;
143
+ req: RequestExpr;
144
+ f: Fns;
145
+ ops: Fns;
146
+ raw: <T = boolean>(cel: string) => Expr<T>;
147
+ rl: RateLimitCtx<RL>;
148
+ s: St;
149
+ b: Bn;
150
+ }
151
+ /** The narrow context for `.attrs` — no entity, no refs (spec §5). */
152
+ export interface AttrsCtx<S extends IdbSchema, RL> {
153
+ auth: AuthExpr<S>;
154
+ ar: <P extends AuthRefPath<S>>(path: P) => ListExpr<AuthRefTerminal<S, P>>;
155
+ req: RequestExpr;
156
+ f: Fns;
157
+ ops: Fns;
158
+ raw: <T = boolean>(cel: string) => Expr<T>;
159
+ rl: RateLimitCtx<RL>;
160
+ }
161
+ /** The four whole-entity actions a `stageFor`/`bindFor` can target. */
162
+ export type EntityAction = 'view' | 'create' | 'update' | 'delete';
163
+ /** The two link-label actions. */
164
+ export type LinkAction = 'link' | 'unlink';
165
+ /** One action's accumulated action-specific staged (`s`) and bind (`b`) names. */
166
+ export interface Scope {
167
+ s: object;
168
+ b: object;
169
+ }
170
+ interface EmptyScope {
171
+ s: {};
172
+ b: {};
173
+ }
174
+ /**
175
+ * The action-specific names a namespace builder has accumulated — threaded
176
+ * through the builder's type so each appears *only* in its own action's
177
+ * callback. Whole-entity actions hold one scope; link/unlink hold one per label.
178
+ */
179
+ export interface ActionScopes {
180
+ view: Scope;
181
+ create: Scope;
182
+ update: Scope;
183
+ delete: Scope;
184
+ link: Record<string, Scope>;
185
+ unlink: Record<string, Scope>;
186
+ }
187
+ /** The starting scopes — nothing action-specific yet. */
188
+ export interface EmptyScopes {
189
+ view: EmptyScope;
190
+ create: EmptyScope;
191
+ update: EmptyScope;
192
+ delete: EmptyScope;
193
+ link: {};
194
+ unlink: {};
195
+ }
196
+ type LinkScopeOf<AX extends ActionScopes, D extends LinkAction, L extends string> = L extends keyof AX[D] ? AX[D][L] : EmptyScope;
197
+ interface StageScope<Sc extends Scope, O> {
198
+ s: Expand<Sc['s'] & O>;
199
+ b: Sc['b'];
200
+ }
201
+ interface BindScope<Sc extends Scope, O> {
202
+ s: Sc['s'];
203
+ b: Expand<Sc['b'] & O>;
204
+ }
205
+ interface AddStage<AX extends ActionScopes, A extends EntityAction, O> {
206
+ view: A extends 'view' ? StageScope<AX['view'], O> : AX['view'];
207
+ create: A extends 'create' ? StageScope<AX['create'], O> : AX['create'];
208
+ update: A extends 'update' ? StageScope<AX['update'], O> : AX['update'];
209
+ delete: A extends 'delete' ? StageScope<AX['delete'], O> : AX['delete'];
210
+ link: AX['link'];
211
+ unlink: AX['unlink'];
212
+ }
213
+ interface AddBind<AX extends ActionScopes, A extends EntityAction, O> {
214
+ view: A extends 'view' ? BindScope<AX['view'], O> : AX['view'];
215
+ create: A extends 'create' ? BindScope<AX['create'], O> : AX['create'];
216
+ update: A extends 'update' ? BindScope<AX['update'], O> : AX['update'];
217
+ delete: A extends 'delete' ? BindScope<AX['delete'], O> : AX['delete'];
218
+ link: AX['link'];
219
+ unlink: AX['unlink'];
220
+ }
221
+ interface AddLinkStage<AX extends ActionScopes, D extends LinkAction, L extends string, O> {
222
+ view: AX['view'];
223
+ create: AX['create'];
224
+ update: AX['update'];
225
+ delete: AX['delete'];
226
+ link: D extends 'link' ? AX['link'] & {
227
+ [P in L]: StageScope<LinkScopeOf<AX, 'link', L>, O>;
228
+ } : AX['link'];
229
+ unlink: D extends 'unlink' ? AX['unlink'] & {
230
+ [P in L]: StageScope<LinkScopeOf<AX, 'unlink', L>, O>;
231
+ } : AX['unlink'];
232
+ }
233
+ interface AddLinkBind<AX extends ActionScopes, D extends LinkAction, L extends string, O> {
234
+ view: AX['view'];
235
+ create: AX['create'];
236
+ update: AX['update'];
237
+ delete: AX['delete'];
238
+ link: D extends 'link' ? AX['link'] & {
239
+ [P in L]: BindScope<LinkScopeOf<AX, 'link', L>, O>;
240
+ } : AX['link'];
241
+ unlink: D extends 'unlink' ? AX['unlink'] & {
242
+ [P in L]: BindScope<LinkScopeOf<AX, 'unlink', L>, O>;
243
+ } : AX['unlink'];
244
+ }
245
+ /** The context a whole-entity action callback (and its `stageFor`/`bindFor`) sees. */
246
+ export type ActionCtx<S extends IdbSchema, NS extends string, St, Bn, RL, A extends EntityAction> = A extends 'update' ? UpdateCtx<S, NS, St, Bn, RL> : A extends 'create' ? WriteCtx<S, NS, St, Bn, RL> : CommonCtx<S, NS, St, Bn, RL>;
247
+ /** A rule value: a boolean, an expression, or a callback returning one. */
248
+ export type Rule<Ctx> = boolean | Expr<boolean> | ((ctx: Ctx) => boolean | Expr<boolean>);
249
+ /**
250
+ * The allow block for a namespace. Each action's callback sees the common
251
+ * scope plus that action's `stageFor`/`bindFor` names (and, for link/unlink,
252
+ * the per-label ones) — so action-specific aliases resolve only where they
253
+ * make sense.
254
+ */
255
+ export interface AllowBlock<S extends IdbSchema, NS extends string, St, Bn, RL, AX extends ActionScopes = EmptyScopes> {
256
+ view?: Rule<CommonCtx<S, NS, St & AX['view']['s'], Bn & AX['view']['b'], RL>>;
257
+ create?: Rule<WriteCtx<S, NS, St & AX['create']['s'], Bn & AX['create']['b'], RL>>;
258
+ update?: Rule<UpdateCtx<S, NS, St & AX['update']['s'], Bn & AX['update']['b'], RL>>;
259
+ delete?: Rule<CommonCtx<S, NS, St & AX['delete']['s'], Bn & AX['delete']['b'], RL>>;
260
+ link?: {
261
+ [L in LinkLabels<S, NS>]?: Rule<LinkCtx<S, NS, L, St & LinkScopeOf<AX, 'link', L>['s'], Bn & LinkScopeOf<AX, 'link', L>['b'], RL>>;
262
+ };
263
+ unlink?: {
264
+ [L in LinkLabels<S, NS>]?: Rule<LinkCtx<S, NS, L, St & LinkScopeOf<AX, 'unlink', L>['s'], Bn & LinkScopeOf<AX, 'unlink', L>['b'], RL>>;
265
+ };
266
+ }
267
+ export type AllowInput<S extends IdbSchema, NS extends string, St, Bn, RL, AX extends ActionScopes = EmptyScopes> = AllowBlock<S, NS, St, Bn, RL, AX> | ((ctx: CommonCtx<S, NS, St, Bn, RL>) => AllowBlock<S, NS, St, Bn, RL, AX>);
268
+ /** Field-level rules — every field except `id`. */
269
+ export type FieldsBlock<S extends IdbSchema, NS extends string> = {
270
+ [F in Exclude<FieldKeys<S, NS>, 'id'>]?: boolean | Expr<boolean>;
271
+ };
272
+ export type FieldsInput<S extends IdbSchema, NS extends string, St, Bn, RL> = FieldsBlock<S, NS> | ((ctx: CommonCtx<S, NS, St, Bn, RL>) => FieldsBlock<S, NS>);
273
+ /** A stage/bind callback returns named expressions. */
274
+ export type NameObj = Record<string, Expr<any>>;
275
+ /**
276
+ * Maps duplicate names (already in `Existing`) to a diagnostic and leaves
277
+ * valid names untouched (intersection identity), so a clash lands on the
278
+ * offending key with an actionable message.
279
+ */
280
+ export type NoDuplicateNames<O, Existing> = {
281
+ [K in keyof O]: K extends keyof Existing ? `QERR_PERMS_DUPLICATE_NAME: ${K & string} is already defined — use .overrideStage/.overrideBind to replace it` : unknown;
282
+ };
283
+ export interface DefaultAllowBlock<S extends IdbSchema, St, Bn, RL> {
284
+ $default?: Rule<DefaultCtx<S, St, Bn, RL>>;
285
+ view?: Rule<DefaultCtx<S, St, Bn, RL>>;
286
+ create?: Rule<DefaultCtx<S, St, Bn, RL>>;
287
+ update?: Rule<DefaultCtx<S, St, Bn, RL>>;
288
+ delete?: Rule<DefaultCtx<S, St, Bn, RL>>;
289
+ }
290
+ export type DefaultAllowInput<S extends IdbSchema, St, Bn, RL> = DefaultAllowBlock<S, St, Bn, RL> | ((ctx: DefaultCtx<S, St, Bn, RL>) => DefaultAllowBlock<S, St, Bn, RL>);
291
+ /** The namespace builder — `ns` in `.namespaces({})` (spec §4). */
292
+ export interface NsBuilder<S extends IdbSchema, NS extends string, St = {}, Bn = {}, RL = {}, AX extends ActionScopes = EmptyScopes> {
293
+ stage: <O extends NameObj>(fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>) => NsBuilder<S, NS, Expand<St & O>, Bn, RL, AX>;
294
+ overrideStage: <O extends NameObj>(fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O) => NsBuilder<S, NS, Expand<St & O>, Bn, RL, AX>;
295
+ bind: <O extends NameObj>(fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>) => NsBuilder<S, NS, St, Expand<Bn & O>, RL, AX>;
296
+ overrideBind: <O extends NameObj>(fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O) => NsBuilder<S, NS, St, Expand<Bn & O>, RL, AX>;
297
+ /**
298
+ * Action-specific staged values — authoring-only, visible only in the
299
+ * matching action's callback. For link/unlink, pass the label too (spec §9).
300
+ */
301
+ stageFor: {
302
+ <A extends EntityAction, O extends NameObj>(action: A, fn: (ctx: ActionCtx<S, NS, St & AX[A]['s'], Bn & AX[A]['b'], RL, A>) => O & NoDuplicateNames<O, St & Bn>): NsBuilder<S, NS, St, Bn, RL, AddStage<AX, A, O>>;
303
+ <D extends LinkAction, L extends LinkLabels<S, NS>, O extends NameObj>(dir: D, label: L, fn: (ctx: LinkCtx<S, NS, L, St & LinkScopeOf<AX, D, L>['s'], Bn & LinkScopeOf<AX, D, L>['b'], RL>) => O & NoDuplicateNames<O, St & Bn>): NsBuilder<S, NS, St, Bn, RL, AddLinkStage<AX, D, L, O>>;
304
+ };
305
+ /**
306
+ * Action-specific bind aliases — emitted into the namespace `bind` block
307
+ * (the backend evaluates each only where referenced), visible only in the
308
+ * matching action's callback (spec §9).
309
+ */
310
+ bindFor: {
311
+ <A extends EntityAction, O extends NameObj>(action: A, fn: (ctx: ActionCtx<S, NS, St & AX[A]['s'], Bn & AX[A]['b'], RL, A>) => O & NoDuplicateNames<O, St & Bn>): NsBuilder<S, NS, St, Bn, RL, AddBind<AX, A, O>>;
312
+ <D extends LinkAction, L extends LinkLabels<S, NS>, O extends NameObj>(dir: D, label: L, fn: (ctx: LinkCtx<S, NS, L, St & LinkScopeOf<AX, D, L>['s'], Bn & LinkScopeOf<AX, D, L>['b'], RL>) => O & NoDuplicateNames<O, St & Bn>): NsBuilder<S, NS, St, Bn, RL, AddLinkBind<AX, D, L, O>>;
313
+ };
314
+ allow: (input: AllowInput<S, NS, St, Bn, RL, AX>) => NsBuilder<S, NS, St, Bn, RL, AX>;
315
+ fields: (input: FieldsInput<S, NS, St, Bn, RL>) => NsBuilder<S, NS, St, Bn, RL, AX>;
316
+ }
317
+ /** The defaults builder — `d` in `.defaults()` (spec §5). */
318
+ export interface DefaultsBuilder<S extends IdbSchema, St = {}, Bn = {}, RL = {}> {
319
+ stage: <O extends NameObj>(fn: (ctx: DefaultCtx<S, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>) => DefaultsBuilder<S, Expand<St & O>, Bn, RL>;
320
+ bind: <O extends NameObj>(fn: (ctx: DefaultCtx<S, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>) => DefaultsBuilder<S, St, Expand<Bn & O>, RL>;
321
+ allow: (input: DefaultAllowInput<S, St, Bn, RL>) => DefaultsBuilder<S, St, Bn, RL>;
322
+ readonly __binds?: Bn;
323
+ }
324
+ /** The attrs builder — create-only (spec §5). */
325
+ export interface AttrsBuilder<S extends IdbSchema, RL = {}> {
326
+ allow: (input: {
327
+ create?: boolean | Expr<boolean>;
328
+ } | ((ctx: AttrsCtx<S, RL>) => {
329
+ create?: boolean | Expr<boolean>;
330
+ })) => AttrsBuilder<S, RL>;
331
+ }
332
+ type DefaultStagedOf<D> = D extends DefaultsBuilder<any, infer St, any, any> ? St : {};
333
+ type DefaultBindsOf<D> = D extends DefaultsBuilder<any, any, infer Bn, any> ? Bn : {};
334
+ /** The `.namespaces({})` input — keys are schema namespaces, callbacks build each. */
335
+ export type NamespacesInput<S extends IdbSchema, St, Bn, RL> = {
336
+ [NS in IdbNamespaceName<S>]?: (ns: NsBuilder<S, NS, St, Bn, RL>) => NsBuilder<S, NS, any, any, RL, any>;
337
+ };
338
+ /** The top-level builder returned by `definePerms` (spec §3). */
339
+ export interface PermsBuilder<S extends IdbSchema, St = {}, Bn = {}, RL = {}> {
340
+ attrs: (fn: (a: AttrsBuilder<S, RL>) => AttrsBuilder<S, RL>) => PermsBuilder<S, St, Bn, RL>;
341
+ defaults: <D extends DefaultsBuilder<S, any, any, RL>>(fn: (d: DefaultsBuilder<S, {}, {}, RL>) => D) => PermsBuilder<S, DefaultStagedOf<D>, DefaultBindsOf<D>, RL>;
342
+ rateLimits: <R extends IdbPermsRateLimits>(config: R) => PermsBuilder<S, St, Bn, R>;
343
+ namespaces: (map: NamespacesInput<S, St, Bn, RL>) => PermsBuilder<S, St, Bn, RL>;
344
+ compile: () => IdbPerms<S>;
345
+ }
346
+ /**
347
+ * The compiled rules object — plain CEL strings, structurally assignable to
348
+ * the official `InstantRules<S>` (so CLI push and platform `pushPerms` accept
349
+ * it unchanged).
350
+ */
351
+ export type IdbPerms<S extends IdbSchema = IdbRegisteredSchema> = InstantRules<S>;
352
+ export {};
353
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/perms/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/perms/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * The perms-domain types: the schema-aware context every callback receives,\n * the ref-path machinery, the allow/fields/bind/stage shapes, the chainable\n * builders, and the compiled `IdbPerms` output.\n *\n * The context is **entity-rooted with current unmarked** (conventions §10):\n * `e`/`ef`/`er` read the current entity (`data.*`), `eu`/`euf` the updated one\n * (`newData.*`, update only), `el`/`elf`/`elr` the linked one (`linkedData.*`,\n * link/unlink only). Action-only values exist only in the matching action\n * callback, so misusing one (`eu` in `view`) fails at the cursor.\n */\nimport type { DataAttrDef, InstantRules } from '@instantdb/core'\nimport type { IdbSchema } from '../schema/defineSchema.js'\nimport type {\n AttrsOf,\n AttrValue,\n FieldKeys,\n LinkLabels,\n LinkTarget,\n} from '../schema/fields.js'\nimport type { IdbRegisteredSchema } from '../schema/register.js'\nimport type { IdbNamespaceName } from '../schema/types.js'\nimport type { Expand } from '../schema/util.js'\nimport type { Expr, ExprArg, ListExpr } from './ast.js'\n\n// ==========\n// field + ref resolution\n\n/** The authoring value type of a field. */\nexport type FieldValue<S extends IdbSchema, NS extends string, K extends string>\n = K extends 'id' ? string\n : K extends FieldKeys<S, NS> ? AttrValue<AttrsOf<S, NS>[K]> : never\n\n/** Property-access view of an entity: `id` plus every field, each an `Expr`. */\nexport type EntityExpr<S extends IdbSchema, NS extends string> = Expand<\n { id: Expr<string> } & {\n [K in FieldKeys<S, NS>]: Expr<FieldValue<S, NS, K>>\n }\n>\n\ntype RefDepth = readonly unknown[]\n/** Ref-path autocomplete spans up to four link hops (spec §7), then `raw`. */\ntype RefMaxHops = 4\ntype NextRef<D extends RefDepth> = [...D, unknown]\n\ntype RefAttr<S extends IdbSchema, NS extends string> = FieldKeys<S, NS> | 'id'\n\n/**\n * Every valid ref path from a namespace: one or more link hops ending in an\n * attribute (`'memberships.user.id'`). Capped at `RefMaxHops` so the union\n * stays tractable; deeper paths use `raw`.\n */\nexport type RefPath<\n S extends IdbSchema,\n NS extends string,\n D extends RefDepth = [],\n> = D['length'] extends RefMaxHops\n ? never\n : {\n [L in LinkLabels<S, NS>]:\n | `${L}.${RefAttr<S, LinkTarget<S, NS, L>>}`\n | `${L}.${RefPath<S, LinkTarget<S, NS, L>, NextRef<D>>}`\n }[LinkLabels<S, NS>]\n\n/** The value type a ref path terminates in — a list of these is what `er` returns. */\nexport type RefTerminal<\n S extends IdbSchema,\n NS extends string,\n P extends string,\n> = P extends `${infer L}.${infer Rest}`\n ? L extends LinkLabels<S, NS>\n ? Rest extends RefAttr<S, LinkTarget<S, NS, L>>\n ? FieldValue<S, LinkTarget<S, NS, L>, Rest>\n : RefTerminal<S, LinkTarget<S, NS, L>, Rest>\n : never\n : never\n\n/** Auth refs start from `$users`, spelled `$user.`-prefixed (Instant's form). */\nexport type AuthRefPath<S extends IdbSchema> = `$user.${RefPath<S, '$users'>}`\ntype AuthRefTerminal<S extends IdbSchema, P extends string>\n = P extends `$user.${infer Rest}` ? RefTerminal<S, '$users', Rest> : never\n\n// ==========\n// ruleParams resolution\n\ntype RuleParamDefs<S extends IdbSchema, NS extends string>\n = NS extends keyof S['$dux']['namespaces']\n ? S['$dux']['namespaces'][NS]['ruleParams'] extends infer RP\n ? RP extends Record<string, DataAttrDef<any, any, any, any>>\n ? RP\n : {}\n : {}\n : {}\n\ntype RuleParamKeys<S extends IdbSchema, NS extends string> = keyof RuleParamDefs<S, NS> & string\ntype RuleParamValue<S extends IdbSchema, NS extends string, K extends string>\n = K extends keyof RuleParamDefs<S, NS> ? AttrValue<RuleParamDefs<S, NS>[K]> : never\n\n// ==========\n// the fixed CEL globals\n\n/** The authenticated user — a `$users` entity, plus `id`, read as `auth.*`. */\nexport type AuthExpr<S extends IdbSchema>\n = '$users' extends IdbNamespaceName<S>\n ? EntityExpr<S, '$users'>\n : { id: Expr<string> }\n\n/** Request metadata always in scope (`request.*`). */\nexport interface RequestExpr {\n time: Expr<Date>\n ip: Expr<string>\n origin: Expr<string>\n}\n\n/** The create/update request: the common metadata plus the modified-field set. */\nexport interface WriteRequestExpr extends RequestExpr {\n modifiedFields: ListExpr<string>\n}\n\n/** Functional composition — best for nested or n-ary rules (spec §8). */\nexport interface Fns {\n and: (...exprs: ExprArg<boolean>[]) => Expr<boolean>\n or: (...exprs: ExprArg<boolean>[]) => Expr<boolean>\n not: (expr: ExprArg<boolean>) => Expr<boolean>\n eq: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>\n neq: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>\n gt: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>\n gte: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>\n lt: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>\n lte: <T>(a: ExprArg<T>, b: ExprArg<T>) => Expr<boolean>\n in: <T>(item: ExprArg<T>, list: readonly ExprArg<T>[] | ListExpr<T>) => Expr<boolean>\n contains: <T>(list: readonly ExprArg<T>[] | ListExpr<T>, item: ExprArg<T>) => Expr<boolean>\n size: (value: ListExpr<any> | ExprArg<string>) => Expr<number>\n list: <T>(...values: ExprArg<T>[]) => ListExpr<T>\n str: (value: ExprArg<string>) => Expr<string>\n num: (value: ExprArg<number>) => Expr<number>\n bool: (value: ExprArg<boolean>) => Expr<boolean>\n null: () => Expr<null>\n}\n\n/** Configured rate-limit buckets, used as `rl.bucket.limit(key)`. */\nexport type RateLimitCtx<RL> = {\n [K in keyof RL]: { limit: (key: ExprArg<unknown>) => Expr<boolean> }\n}\n\n/** How a bucket refills — mirrors Instant's `$rateLimits` refill shape (spec §11). */\nexport interface IdbPermsRateLimitRefill {\n amount?: number\n period?: string\n type?: 'interval' | 'greedy'\n}\n\n/** One token-bucket limit. */\nexport interface IdbPermsRateLimitLimit {\n capacity: number\n refill?: IdbPermsRateLimitRefill\n}\n\n/** A named rate-limit bucket — used in rules via `rl.<name>.limit(key)`. */\nexport interface IdbPermsRateLimit {\n limits: IdbPermsRateLimitLimit[]\n}\n\n/** The `$rateLimits` configuration map (structurally Instant's shape). */\nexport type IdbPermsRateLimits = Record<string, IdbPermsRateLimit>\n\n// ==========\n// contexts\n\n/** The common context — every callback's baseline (spec §6). */\nexport interface CommonCtx<\n S extends IdbSchema,\n NS extends string,\n St,\n Bn,\n RL,\n> {\n auth: AuthExpr<S>\n ar: <P extends AuthRefPath<S>>(path: P) => ListExpr<AuthRefTerminal<S, P>>\n e: EntityExpr<S, NS>\n ef: <K extends FieldKeys<S, NS>>(key: K) => Expr<FieldValue<S, NS, K>>\n er: <P extends RefPath<S, NS>>(path: P) => ListExpr<RefTerminal<S, NS, P>>\n rp: <K extends RuleParamKeys<S, NS>>(key: K) => Expr<RuleParamValue<S, NS, K>>\n req: RequestExpr\n f: Fns\n ops: Fns\n raw: <T = boolean>(cel: string) => Expr<T>\n rl: RateLimitCtx<RL>\n s: St\n b: Bn\n}\n\n/** Create/update context — common plus `request.modifiedFields`. */\nexport type WriteCtx<S extends IdbSchema, NS extends string, St, Bn, RL>\n = Omit<CommonCtx<S, NS, St, Bn, RL>, 'req'> & { req: WriteRequestExpr }\n\n/** Update context — write context plus the updated entity (`newData.*`). */\nexport type UpdateCtx<S extends IdbSchema, NS extends string, St, Bn, RL>\n = WriteCtx<S, NS, St, Bn, RL> & {\n eu: EntityExpr<S, NS>\n euf: <K extends FieldKeys<S, NS>>(key: K) => Expr<FieldValue<S, NS, K>>\n }\n\n/** Link/unlink context — common plus the linked entity, typed per link label. */\nexport type LinkCtx<S extends IdbSchema, NS extends string, L extends string, St, Bn, RL>\n = CommonCtx<S, NS, St, Bn, RL> & {\n el: EntityExpr<S, LinkTarget<S, NS, L>>\n elf: <K extends FieldKeys<S, LinkTarget<S, NS, L>>>(key: K) => Expr<FieldValue<S, LinkTarget<S, NS, L>, K>>\n elr: <P extends RefPath<S, LinkTarget<S, NS, L>>>(path: P) => ListExpr<RefTerminal<S, LinkTarget<S, NS, L>, P>>\n }\n\n/** The loose context for `.defaults` — no namespace, so reads are string-keyed. */\nexport interface DefaultCtx<S extends IdbSchema, St, Bn, RL> {\n auth: AuthExpr<S>\n ar: <P extends AuthRefPath<S>>(path: P) => ListExpr<AuthRefTerminal<S, P>>\n ef: (key: string) => Expr<unknown>\n er: (path: string) => ListExpr<unknown>\n rp: (key: string) => Expr<unknown>\n req: RequestExpr\n f: Fns\n ops: Fns\n raw: <T = boolean>(cel: string) => Expr<T>\n rl: RateLimitCtx<RL>\n s: St\n b: Bn\n}\n\n/** The narrow context for `.attrs` — no entity, no refs (spec §5). */\nexport interface AttrsCtx<S extends IdbSchema, RL> {\n auth: AuthExpr<S>\n ar: <P extends AuthRefPath<S>>(path: P) => ListExpr<AuthRefTerminal<S, P>>\n req: RequestExpr\n f: Fns\n ops: Fns\n raw: <T = boolean>(cel: string) => Expr<T>\n rl: RateLimitCtx<RL>\n}\n\n// ==========\n// action scopes — what stageFor/bindFor accumulate\n\n/** The four whole-entity actions a `stageFor`/`bindFor` can target. */\nexport type EntityAction = 'view' | 'create' | 'update' | 'delete'\n/** The two link-label actions. */\nexport type LinkAction = 'link' | 'unlink'\n\n/** One action's accumulated action-specific staged (`s`) and bind (`b`) names. */\nexport interface Scope { s: object, b: object }\ninterface EmptyScope { s: {}, b: {} }\n\n/**\n * The action-specific names a namespace builder has accumulated — threaded\n * through the builder's type so each appears *only* in its own action's\n * callback. Whole-entity actions hold one scope; link/unlink hold one per label.\n */\nexport interface ActionScopes {\n view: Scope\n create: Scope\n update: Scope\n delete: Scope\n link: Record<string, Scope>\n unlink: Record<string, Scope>\n}\n\n/** The starting scopes — nothing action-specific yet. */\nexport interface EmptyScopes {\n view: EmptyScope\n create: EmptyScope\n update: EmptyScope\n delete: EmptyScope\n link: {}\n unlink: {}\n}\n\ntype LinkScopeOf<AX extends ActionScopes, D extends LinkAction, L extends string>\n = L extends keyof AX[D] ? AX[D][L] : EmptyScope\n\ninterface StageScope<Sc extends Scope, O> { s: Expand<Sc['s'] & O>, b: Sc['b'] }\ninterface BindScope<Sc extends Scope, O> { s: Sc['s'], b: Expand<Sc['b'] & O> }\n\n// The full ActionScopes is rebuilt explicitly (rather than Omit + re-add) so the\n// result is statically known to keep all six keys, satisfying the constraint\n// even while `A` is still a generic.\ninterface AddStage<AX extends ActionScopes, A extends EntityAction, O> {\n view: A extends 'view' ? StageScope<AX['view'], O> : AX['view']\n create: A extends 'create' ? StageScope<AX['create'], O> : AX['create']\n update: A extends 'update' ? StageScope<AX['update'], O> : AX['update']\n delete: A extends 'delete' ? StageScope<AX['delete'], O> : AX['delete']\n link: AX['link']\n unlink: AX['unlink']\n}\ninterface AddBind<AX extends ActionScopes, A extends EntityAction, O> {\n view: A extends 'view' ? BindScope<AX['view'], O> : AX['view']\n create: A extends 'create' ? BindScope<AX['create'], O> : AX['create']\n update: A extends 'update' ? BindScope<AX['update'], O> : AX['update']\n delete: A extends 'delete' ? BindScope<AX['delete'], O> : AX['delete']\n link: AX['link']\n unlink: AX['unlink']\n}\ninterface AddLinkStage<AX extends ActionScopes, D extends LinkAction, L extends string, O> {\n view: AX['view']\n create: AX['create']\n update: AX['update']\n delete: AX['delete']\n link: D extends 'link' ? AX['link'] & { [P in L]: StageScope<LinkScopeOf<AX, 'link', L>, O> } : AX['link']\n unlink: D extends 'unlink' ? AX['unlink'] & { [P in L]: StageScope<LinkScopeOf<AX, 'unlink', L>, O> } : AX['unlink']\n}\ninterface AddLinkBind<AX extends ActionScopes, D extends LinkAction, L extends string, O> {\n view: AX['view']\n create: AX['create']\n update: AX['update']\n delete: AX['delete']\n link: D extends 'link' ? AX['link'] & { [P in L]: BindScope<LinkScopeOf<AX, 'link', L>, O> } : AX['link']\n unlink: D extends 'unlink' ? AX['unlink'] & { [P in L]: BindScope<LinkScopeOf<AX, 'unlink', L>, O> } : AX['unlink']\n}\n\n/** The context a whole-entity action callback (and its `stageFor`/`bindFor`) sees. */\nexport type ActionCtx<S extends IdbSchema, NS extends string, St, Bn, RL, A extends EntityAction>\n = A extends 'update'\n ? UpdateCtx<S, NS, St, Bn, RL>\n : A extends 'create'\n ? WriteCtx<S, NS, St, Bn, RL>\n : CommonCtx<S, NS, St, Bn, RL>\n\n// ==========\n// allow / fields / bind / stage shapes\n\n/** A rule value: a boolean, an expression, or a callback returning one. */\nexport type Rule<Ctx> = boolean | Expr<boolean> | ((ctx: Ctx) => boolean | Expr<boolean>)\n\n/**\n * The allow block for a namespace. Each action's callback sees the common\n * scope plus that action's `stageFor`/`bindFor` names (and, for link/unlink,\n * the per-label ones) — so action-specific aliases resolve only where they\n * make sense.\n */\nexport interface AllowBlock<S extends IdbSchema, NS extends string, St, Bn, RL, AX extends ActionScopes = EmptyScopes> {\n view?: Rule<CommonCtx<S, NS, St & AX['view']['s'], Bn & AX['view']['b'], RL>>\n create?: Rule<WriteCtx<S, NS, St & AX['create']['s'], Bn & AX['create']['b'], RL>>\n update?: Rule<UpdateCtx<S, NS, St & AX['update']['s'], Bn & AX['update']['b'], RL>>\n delete?: Rule<CommonCtx<S, NS, St & AX['delete']['s'], Bn & AX['delete']['b'], RL>>\n link?: {\n [L in LinkLabels<S, NS>]?: Rule<LinkCtx<S, NS, L, St & LinkScopeOf<AX, 'link', L>['s'], Bn & LinkScopeOf<AX, 'link', L>['b'], RL>>\n }\n unlink?: {\n [L in LinkLabels<S, NS>]?: Rule<LinkCtx<S, NS, L, St & LinkScopeOf<AX, 'unlink', L>['s'], Bn & LinkScopeOf<AX, 'unlink', L>['b'], RL>>\n }\n}\n\nexport type AllowInput<S extends IdbSchema, NS extends string, St, Bn, RL, AX extends ActionScopes = EmptyScopes>\n = AllowBlock<S, NS, St, Bn, RL, AX> | ((ctx: CommonCtx<S, NS, St, Bn, RL>) => AllowBlock<S, NS, St, Bn, RL, AX>)\n\n/** Field-level rules — every field except `id`. */\nexport type FieldsBlock<S extends IdbSchema, NS extends string> = {\n [F in Exclude<FieldKeys<S, NS>, 'id'>]?: boolean | Expr<boolean>\n}\n\nexport type FieldsInput<S extends IdbSchema, NS extends string, St, Bn, RL>\n = FieldsBlock<S, NS> | ((ctx: CommonCtx<S, NS, St, Bn, RL>) => FieldsBlock<S, NS>)\n\n/** A stage/bind callback returns named expressions. */\nexport type NameObj = Record<string, Expr<any>>\n\n/**\n * Maps duplicate names (already in `Existing`) to a diagnostic and leaves\n * valid names untouched (intersection identity), so a clash lands on the\n * offending key with an actionable message.\n */\nexport type NoDuplicateNames<O, Existing> = {\n [K in keyof O]: K extends keyof Existing\n ? `QERR_PERMS_DUPLICATE_NAME: ${K & string} is already defined — use .overrideStage/.overrideBind to replace it`\n : unknown\n}\n\n// ==========\n// the default allow block (loose, with $default)\n\nexport interface DefaultAllowBlock<S extends IdbSchema, St, Bn, RL> {\n $default?: Rule<DefaultCtx<S, St, Bn, RL>>\n view?: Rule<DefaultCtx<S, St, Bn, RL>>\n create?: Rule<DefaultCtx<S, St, Bn, RL>>\n update?: Rule<DefaultCtx<S, St, Bn, RL>>\n delete?: Rule<DefaultCtx<S, St, Bn, RL>>\n}\n\nexport type DefaultAllowInput<S extends IdbSchema, St, Bn, RL>\n = DefaultAllowBlock<S, St, Bn, RL> | ((ctx: DefaultCtx<S, St, Bn, RL>) => DefaultAllowBlock<S, St, Bn, RL>)\n\n// ==========\n// builders\n\n/** The namespace builder — `ns` in `.namespaces({})` (spec §4). */\nexport interface NsBuilder<\n S extends IdbSchema,\n NS extends string,\n St = {},\n Bn = {},\n RL = {},\n AX extends ActionScopes = EmptyScopes,\n> {\n stage: <O extends NameObj>(\n fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>,\n ) => NsBuilder<S, NS, Expand<St & O>, Bn, RL, AX>\n overrideStage: <O extends NameObj>(\n fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O,\n ) => NsBuilder<S, NS, Expand<St & O>, Bn, RL, AX>\n bind: <O extends NameObj>(\n fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>,\n ) => NsBuilder<S, NS, St, Expand<Bn & O>, RL, AX>\n overrideBind: <O extends NameObj>(\n fn: (ctx: CommonCtx<S, NS, St, Bn, RL>) => O,\n ) => NsBuilder<S, NS, St, Expand<Bn & O>, RL, AX>\n /**\n * Action-specific staged values — authoring-only, visible only in the\n * matching action's callback. For link/unlink, pass the label too (spec §9).\n */\n stageFor: {\n <A extends EntityAction, O extends NameObj>(\n action: A,\n fn: (ctx: ActionCtx<S, NS, St & AX[A]['s'], Bn & AX[A]['b'], RL, A>) => O & NoDuplicateNames<O, St & Bn>,\n ): NsBuilder<S, NS, St, Bn, RL, AddStage<AX, A, O>>\n <D extends LinkAction, L extends LinkLabels<S, NS>, O extends NameObj>(\n dir: D,\n label: L,\n fn: (ctx: LinkCtx<S, NS, L, St & LinkScopeOf<AX, D, L>['s'], Bn & LinkScopeOf<AX, D, L>['b'], RL>) => O & NoDuplicateNames<O, St & Bn>,\n ): NsBuilder<S, NS, St, Bn, RL, AddLinkStage<AX, D, L, O>>\n }\n /**\n * Action-specific bind aliases — emitted into the namespace `bind` block\n * (the backend evaluates each only where referenced), visible only in the\n * matching action's callback (spec §9).\n */\n bindFor: {\n <A extends EntityAction, O extends NameObj>(\n action: A,\n fn: (ctx: ActionCtx<S, NS, St & AX[A]['s'], Bn & AX[A]['b'], RL, A>) => O & NoDuplicateNames<O, St & Bn>,\n ): NsBuilder<S, NS, St, Bn, RL, AddBind<AX, A, O>>\n <D extends LinkAction, L extends LinkLabels<S, NS>, O extends NameObj>(\n dir: D,\n label: L,\n fn: (ctx: LinkCtx<S, NS, L, St & LinkScopeOf<AX, D, L>['s'], Bn & LinkScopeOf<AX, D, L>['b'], RL>) => O & NoDuplicateNames<O, St & Bn>,\n ): NsBuilder<S, NS, St, Bn, RL, AddLinkBind<AX, D, L, O>>\n }\n allow: (input: AllowInput<S, NS, St, Bn, RL, AX>) => NsBuilder<S, NS, St, Bn, RL, AX>\n fields: (input: FieldsInput<S, NS, St, Bn, RL>) => NsBuilder<S, NS, St, Bn, RL, AX>\n}\n\n/** The defaults builder — `d` in `.defaults()` (spec §5). */\nexport interface DefaultsBuilder<\n S extends IdbSchema,\n St = {},\n Bn = {},\n RL = {},\n> {\n stage: <O extends NameObj>(\n fn: (ctx: DefaultCtx<S, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>,\n ) => DefaultsBuilder<S, Expand<St & O>, Bn, RL>\n bind: <O extends NameObj>(\n fn: (ctx: DefaultCtx<S, St, Bn, RL>) => O & NoDuplicateNames<O, St & Bn>,\n ) => DefaultsBuilder<S, St, Expand<Bn & O>, RL>\n allow: (input: DefaultAllowInput<S, St, Bn, RL>) => DefaultsBuilder<S, St, Bn, RL>\n /**\n * Phantom carriers so `.defaults` can infer the accumulated maps.\n * @internal\n */\n readonly __staged?: St\n readonly __binds?: Bn\n}\n\n/** The attrs builder — create-only (spec §5). */\nexport interface AttrsBuilder<S extends IdbSchema, RL = {}> {\n allow: (input:\n | { create?: boolean | Expr<boolean> }\n | ((ctx: AttrsCtx<S, RL>) => { create?: boolean | Expr<boolean> })) => AttrsBuilder<S, RL>\n}\n\ntype DefaultStagedOf<D> = D extends DefaultsBuilder<any, infer St, any, any> ? St : {}\ntype DefaultBindsOf<D> = D extends DefaultsBuilder<any, any, infer Bn, any> ? Bn : {}\n\n/** The `.namespaces({})` input — keys are schema namespaces, callbacks build each. */\nexport type NamespacesInput<S extends IdbSchema, St, Bn, RL> = {\n [NS in IdbNamespaceName<S>]?: (\n ns: NsBuilder<S, NS, St, Bn, RL>,\n ) => NsBuilder<S, NS, any, any, RL, any>\n}\n\n/** The top-level builder returned by `definePerms` (spec §3). */\nexport interface PermsBuilder<\n S extends IdbSchema,\n St = {},\n Bn = {},\n RL = {},\n> {\n attrs: (fn: (a: AttrsBuilder<S, RL>) => AttrsBuilder<S, RL>) => PermsBuilder<S, St, Bn, RL>\n defaults: <D extends DefaultsBuilder<S, any, any, RL>>(\n fn: (d: DefaultsBuilder<S, {}, {}, RL>) => D,\n ) => PermsBuilder<S, DefaultStagedOf<D>, DefaultBindsOf<D>, RL>\n rateLimits: <R extends IdbPermsRateLimits>(config: R) => PermsBuilder<S, St, Bn, R>\n namespaces: (map: NamespacesInput<S, St, Bn, RL>) => PermsBuilder<S, St, Bn, RL>\n compile: () => IdbPerms<S>\n}\n\n// ==========\n// output\n\n/**\n * The compiled rules object — plain CEL strings, structurally assignable to\n * the official `InstantRules<S>` (so CLI push and platform `pushPerms` accept\n * it unchanged).\n */\nexport type IdbPerms<S extends IdbSchema = IdbRegisteredSchema> = InstantRules<S>\n"]}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Runtime schema validation — the dev-time assertions `definePerms(schema)`
3
+ * adds on top of the type layer. The types are the primary safety net
4
+ * (principle 3); these catch the cases a dynamically-built rules object can
5
+ * smuggle past the compiler, and turn a silent bad-CEL push into a clear throw
6
+ * at author time.
7
+ *
8
+ * When no schema value is passed (`definePerms()` / `definePerms<S>()`), every
9
+ * check is a no-op — there is nothing to validate against.
10
+ */
11
+ import type { IdbSchema } from '../schema/defineSchema.js';
12
+ /** The per-callback validation hooks the context wires into its helpers. */
13
+ export interface Validator {
14
+ field: (key: string) => void;
15
+ ref: (path: string) => void;
16
+ ruleParam: (key: string) => void;
17
+ authRef: (path: string) => void;
18
+ linkedField: (key: string) => void;
19
+ linkedRef: (path: string) => void;
20
+ }
21
+ /** The inert validator — used in type-only mode. */
22
+ export declare const noValidate: Validator;
23
+ /** Does the schema declare this namespace? */
24
+ export declare function namespaceExists(schema: IdbSchema, ns: string): boolean;
25
+ /**
26
+ * Build the validator for a namespace callback. `linkTarget` is set only when
27
+ * resolving a specific link/unlink rule, so `el`/`elr` validate against the
28
+ * linked namespace.
29
+ */
30
+ export declare function makeValidator(schema: IdbSchema, ns: string, linkTarget?: string): Validator;
31
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/perms/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAE1D,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAED,oDAAoD;AACpD,eAAO,MAAM,UAAU,EAAE,SAOxB,CAAA;AAgCD,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,MAAM,GAClB,SAAS,CAeX"}
@@ -0,0 +1,61 @@
1
+ /** The inert validator — used in type-only mode. */
2
+ export const noValidate = {
3
+ field: () => { },
4
+ ref: () => { },
5
+ ruleParam: () => { },
6
+ authRef: () => { },
7
+ linkedField: () => { },
8
+ linkedRef: () => { },
9
+ };
10
+ function fail(message) {
11
+ throw new Error(`QERR_PERMS_SCHEMA: ${message}`);
12
+ }
13
+ function fieldExists(schema, ns, key) {
14
+ if (key === 'id')
15
+ return true;
16
+ return Boolean(schema.entities[ns]?.attrs?.[key]);
17
+ }
18
+ function ruleParamExists(schema, ns, key) {
19
+ return Boolean(schema.$dux?.namespaces?.[ns]?.ruleParams?.[key]);
20
+ }
21
+ /** Walk a `link(.link)*.attr` path; the terminal must be an attribute. */
22
+ function refValid(schema, ns, path) {
23
+ const parts = path.split('.');
24
+ const terminal = parts.pop();
25
+ if (terminal === undefined)
26
+ return false;
27
+ let current = ns;
28
+ for (const label of parts) {
29
+ const target = schema.entities[current]?.links?.[label]?.entityName;
30
+ if (!target)
31
+ return false;
32
+ current = target;
33
+ }
34
+ return fieldExists(schema, current, terminal);
35
+ }
36
+ /** Does the schema declare this namespace? */
37
+ export function namespaceExists(schema, ns) {
38
+ return Boolean(schema.entities[ns]);
39
+ }
40
+ /**
41
+ * Build the validator for a namespace callback. `linkTarget` is set only when
42
+ * resolving a specific link/unlink rule, so `el`/`elr` validate against the
43
+ * linked namespace.
44
+ */
45
+ export function makeValidator(schema, ns, linkTarget) {
46
+ return {
47
+ field: key => fieldExists(schema, ns, key)
48
+ || fail(`'${key}' is not a field on '${ns}'`),
49
+ ref: path => refValid(schema, ns, path)
50
+ || fail(`'${path}' is not a valid ref path from '${ns}'`),
51
+ ruleParam: key => ruleParamExists(schema, ns, key)
52
+ || fail(`'${key}' is not a declared ruleParam on '${ns}'`),
53
+ authRef: path => refValid(schema, '$users', path.replace(/^\$user\./, ''))
54
+ || fail(`'${path}' is not a valid auth ref path`),
55
+ linkedField: key => (linkTarget && fieldExists(schema, linkTarget, key))
56
+ || fail(`'${key}' is not a field on linked namespace '${linkTarget}'`),
57
+ linkedRef: path => (linkTarget && refValid(schema, linkTarget, path))
58
+ || fail(`'${path}' is not a valid ref path from linked namespace '${linkTarget}'`),
59
+ };
60
+ }
61
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/perms/validate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime schema validation — the dev-time assertions `definePerms(schema)`\n * adds on top of the type layer. The types are the primary safety net\n * (principle 3); these catch the cases a dynamically-built rules object can\n * smuggle past the compiler, and turn a silent bad-CEL push into a clear throw\n * at author time.\n *\n * When no schema value is passed (`definePerms()` / `definePerms<S>()`), every\n * check is a no-op — there is nothing to validate against.\n */\nimport type { IdbSchema } from '../schema/defineSchema.js'\n\n/** The per-callback validation hooks the context wires into its helpers. */\nexport interface Validator {\n field: (key: string) => void\n ref: (path: string) => void\n ruleParam: (key: string) => void\n authRef: (path: string) => void\n linkedField: (key: string) => void\n linkedRef: (path: string) => void\n}\n\n/** The inert validator — used in type-only mode. */\nexport const noValidate: Validator = {\n field: () => {},\n ref: () => {},\n ruleParam: () => {},\n authRef: () => {},\n linkedField: () => {},\n linkedRef: () => {},\n}\n\nfunction fail(message: string): never {\n throw new Error(`QERR_PERMS_SCHEMA: ${message}`)\n}\n\nfunction fieldExists(schema: IdbSchema, ns: string, key: string): boolean {\n if (key === 'id')\n return true\n return Boolean(schema.entities[ns]?.attrs?.[key])\n}\n\nfunction ruleParamExists(schema: IdbSchema, ns: string, key: string): boolean {\n return Boolean(schema.$dux?.namespaces?.[ns]?.ruleParams?.[key])\n}\n\n/** Walk a `link(.link)*.attr` path; the terminal must be an attribute. */\nfunction refValid(schema: IdbSchema, ns: string, path: string): boolean {\n const parts = path.split('.')\n const terminal = parts.pop()\n if (terminal === undefined)\n return false\n let current = ns\n for (const label of parts) {\n const target = schema.entities[current]?.links?.[label]?.entityName\n if (!target)\n return false\n current = target\n }\n return fieldExists(schema, current, terminal)\n}\n\n/** Does the schema declare this namespace? */\nexport function namespaceExists(schema: IdbSchema, ns: string): boolean {\n return Boolean(schema.entities[ns])\n}\n\n/**\n * Build the validator for a namespace callback. `linkTarget` is set only when\n * resolving a specific link/unlink rule, so `el`/`elr` validate against the\n * linked namespace.\n */\nexport function makeValidator(\n schema: IdbSchema,\n ns: string,\n linkTarget?: string,\n): Validator {\n return {\n field: key => fieldExists(schema, ns, key)\n || fail(`'${key}' is not a field on '${ns}'`),\n ref: path => refValid(schema, ns, path)\n || fail(`'${path}' is not a valid ref path from '${ns}'`),\n ruleParam: key => ruleParamExists(schema, ns, key)\n || fail(`'${key}' is not a declared ruleParam on '${ns}'`),\n authRef: path => refValid(schema, '$users', path.replace(/^\\$user\\./, ''))\n || fail(`'${path}' is not a valid auth ref path`),\n linkedField: key => (linkTarget && fieldExists(schema, linkTarget, key))\n || fail(`'${key}' is not a field on linked namespace '${linkTarget}'`),\n linkedRef: path => (linkTarget && refValid(schema, linkTarget, path))\n || fail(`'${path}' is not a valid ref path from linked namespace '${linkTarget}'`),\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `$only` is a `true` constant sharing its name with the `$:` key it enables,
3
+ * so property shorthand reads as the declaration it is:
4
+ * `$: { where: { id }, $only }` ≡ `$: { where: { id }, $only: true }`.
5
+ */
6
+ export declare const $only: true;
7
+ /**
8
+ * `$skip` is an `undefined` constant: an `undefined` value in a `where`
9
+ * clause drops that clause before the query goes on the wire, so
10
+ * `where: { workspace: current?.id ?? $skip }` reads as intended.
11
+ */
12
+ export declare const $skip: undefined;
13
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/query/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,KAAK,EAAG,IAAa,CAAA;AAElC;;;;GAIG;AACH,eAAO,MAAM,KAAK,WAAY,CAAA"}