permdock 0.7.0 → 0.9.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 (483) hide show
  1. package/README.md +1 -3
  2. package/dist/a2a/index.d.ts +7 -7
  3. package/dist/a2a/index.js +8 -8
  4. package/dist/action-result-BcudBQOF.d.ts +19 -0
  5. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  6. package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
  7. package/dist/agent/index.d.ts +2 -2
  8. package/dist/agent/index.js +1 -1
  9. package/dist/ai-sdk/index.d.ts +19 -13
  10. package/dist/ai-sdk/index.js +6 -6
  11. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  12. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  13. package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/approvals/index.d.ts +4 -4
  16. package/dist/approvals/index.js +6 -6
  17. package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
  18. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  19. package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
  20. package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
  21. package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
  22. package/dist/astro/index.d.ts +30 -12
  23. package/dist/astro/index.js +2 -2
  24. package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
  25. package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
  26. package/dist/authzen/index.d.ts +34 -28
  27. package/dist/authzen/index.js +23 -20
  28. package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
  29. package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
  30. package/dist/better-auth/index.d.ts +2 -2
  31. package/dist/better-auth/index.js +13 -7
  32. package/dist/better-supabase/index.d.ts +357 -227
  33. package/dist/better-supabase/index.js +219 -140
  34. package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
  35. package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
  36. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  37. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  38. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  39. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  40. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  41. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  42. package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
  43. package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
  44. package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
  45. package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
  46. package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
  47. package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
  48. package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
  49. package/dist/catalog/index.d.ts +51 -30
  50. package/dist/catalog/index.js +18 -15
  51. package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
  52. package/dist/catalog-D3oS2GH3.js +1 -0
  53. package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
  54. package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
  55. package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
  56. package/dist/catalog-operations-DeHTrJSV.js +60 -0
  57. package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
  58. package/dist/chat/index.d.ts +1 -1
  59. package/dist/chat/index.js +13 -10
  60. package/dist/chat-sdk/index.d.ts +44 -26
  61. package/dist/chat-sdk/index.js +17 -17
  62. package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
  63. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  64. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  65. package/dist/claude-agent/index.d.ts +6 -6
  66. package/dist/claude-agent/index.js +6 -3
  67. package/dist/clerk/index.d.ts +11 -7
  68. package/dist/clerk/index.js +6 -6
  69. package/dist/cli/bin.js +4 -4
  70. package/dist/cli/index.d.ts +82 -7
  71. package/dist/cli/index.js +6 -6
  72. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  73. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  74. package/dist/cloud/index.d.ts +84 -52
  75. package/dist/cloud/index.js +53 -39
  76. package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
  77. package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
  78. package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
  79. package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
  80. package/dist/collect-D-eroIfV.js +1 -0
  81. package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
  82. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  83. package/dist/compile/index.d.ts +2 -2
  84. package/dist/compile/index.js +1 -1
  85. package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
  86. package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
  87. package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
  88. package/dist/config-BwPBfN0t.js +108 -0
  89. package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
  90. package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
  91. package/dist/config-shape-ykV0Vm2n.js +134 -0
  92. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  93. package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
  94. package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
  95. package/dist/convex/index.d.ts +13 -7
  96. package/dist/convex/index.js +9 -6
  97. package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
  98. package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
  99. package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
  100. package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
  101. package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
  102. package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
  103. package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
  104. package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
  105. package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
  106. package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
  107. package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
  108. package/dist/delivery/index.d.ts +4 -4
  109. package/dist/delivery/index.js +5 -5
  110. package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
  111. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  112. package/dist/denied-text-DHldhVUv.d.ts +22 -0
  113. package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
  114. package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
  115. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  116. package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
  117. package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
  118. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  119. package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
  120. package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
  121. package/dist/drizzle/index.d.ts +33 -19
  122. package/dist/drizzle/index.js +17 -9
  123. package/dist/elysia/index.d.ts +17 -11
  124. package/dist/elysia/index.js +5 -5
  125. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  126. package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
  127. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  128. package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
  129. package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
  130. package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
  131. package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
  132. package/dist/eve/index.d.ts +9 -6
  133. package/dist/eve/index.js +4 -4
  134. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  135. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  136. package/dist/express/index.d.ts +9 -6
  137. package/dist/express/index.js +9 -6
  138. package/dist/fastify/index.d.ts +16 -10
  139. package/dist/fastify/index.js +8 -5
  140. package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
  141. package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
  142. package/dist/fields-D0vUI6dq.js +498 -0
  143. package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
  144. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  145. package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
  146. package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
  147. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  148. package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
  149. package/dist/gen-BFfzZSLH.js +58 -0
  150. package/dist/gen-BtfFWGbz.js +827 -0
  151. package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
  152. package/dist/generate-CezbCaTI.js +275 -0
  153. package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
  154. package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
  155. package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
  156. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  157. package/dist/h3/index.d.ts +10 -7
  158. package/dist/h3/index.js +3 -3
  159. package/dist/headers-B9jQxjtW.d.ts +10 -0
  160. package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
  161. package/dist/hono/index.d.ts +16 -10
  162. package/dist/hono/index.js +5 -5
  163. package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
  164. package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
  165. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  166. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  167. package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
  168. package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
  169. package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
  170. package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
  171. package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
  172. package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
  173. package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
  174. package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
  175. package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
  176. package/dist/index.d.ts +22 -22
  177. package/dist/index.js +34 -34
  178. package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
  179. package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
  180. package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
  181. package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
  182. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  183. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  184. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  185. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  186. package/dist/jwt/index.d.ts +57 -27
  187. package/dist/jwt/index.js +24 -21
  188. package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
  189. package/dist/kysely/index.d.ts +49 -33
  190. package/dist/kysely/index.js +9 -7
  191. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  192. package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
  193. package/dist/load-Dm0pSYH3.js +1 -0
  194. package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
  195. package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
  196. package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
  197. package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
  198. package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
  199. package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
  200. package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
  201. package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
  202. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  203. package/dist/mcp/index.d.ts +114 -61
  204. package/dist/mcp/index.js +70 -40
  205. package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
  206. package/dist/module-values-BJTBdo6y.js +107 -0
  207. package/dist/nest/index.d.ts +23 -13
  208. package/dist/nest/index.js +18 -11
  209. package/dist/next/client.d.ts +5 -2
  210. package/dist/next/client.js +1 -1
  211. package/dist/next/index.d.ts +79 -26
  212. package/dist/next/index.js +121 -10
  213. package/dist/next/plugin.d.ts +1 -1
  214. package/dist/next/plugin.js +4 -3
  215. package/dist/node/index.d.ts +5 -5
  216. package/dist/node/index.js +3 -3
  217. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  218. package/dist/openai/index.d.ts +13 -7
  219. package/dist/openai/index.js +3 -3
  220. package/dist/openapi/index.d.ts +51 -30
  221. package/dist/openapi/index.js +2 -2
  222. package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
  223. package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
  224. package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
  225. package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
  226. package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  227. package/dist/orpc/index.d.ts +68 -14
  228. package/dist/orpc/index.js +62 -13
  229. package/dist/otel/index.d.ts +7 -4
  230. package/dist/otel/index.js +8 -5
  231. package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
  232. package/dist/output-files-BHOIlrfD.js +1 -0
  233. package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
  234. package/dist/ownership-DA5YdYTm.js +1059 -0
  235. package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
  236. package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
  237. package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
  238. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  239. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  240. package/dist/pdp/index.d.ts +9 -6
  241. package/dist/pdp/index.js +20 -13
  242. package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
  243. package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
  244. package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
  245. package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
  246. package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
  247. package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
  248. package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
  249. package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
  250. package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
  251. package/dist/pg-DQTqRrou.js +60 -0
  252. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  253. package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
  254. package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
  255. package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
  256. package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
  257. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  258. package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
  259. package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
  260. package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
  261. package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
  262. package/dist/powersync-B701tvhE.js +1 -0
  263. package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
  264. package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
  265. package/dist/preset/index.d.ts +38 -28
  266. package/dist/preset/index.js +1 -1
  267. package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
  268. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  269. package/dist/prisma/index.d.ts +69 -41
  270. package/dist/prisma/index.js +21 -17
  271. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  272. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  273. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  274. package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
  275. package/dist/protected-action-D8x73IGm.d.ts +58 -0
  276. package/dist/protected-action-DUYqb-Ma.js +80 -0
  277. package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
  278. package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
  279. package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
  280. package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
  281. package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
  282. package/dist/pull-C3EEGzSw.js +1 -0
  283. package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
  284. package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
  285. package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
  286. package/dist/react/index.d.ts +9 -8
  287. package/dist/react/index.js +7 -6
  288. package/dist/react/provider-client.d.ts +1 -1
  289. package/dist/react/provider-client.js +1 -1
  290. package/dist/react-native/index.d.ts +94 -55
  291. package/dist/react-native/index.js +200 -61
  292. package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
  293. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  294. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  295. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  296. package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
  297. package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
  298. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  299. package/dist/resend/index.d.ts +34 -28
  300. package/dist/resend/index.js +29 -29
  301. package/dist/resolve-names-ConCSj1y.js +201 -0
  302. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  303. package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
  304. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  305. package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
  306. package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
  307. package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
  308. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  309. package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
  310. package/dist/run-Ck22anC2.js +1 -0
  311. package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
  312. package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
  313. package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
  314. package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
  315. package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
  316. package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
  317. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  318. package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
  319. package/dist/scim/index.d.ts +2 -2
  320. package/dist/scim/index.js +2 -2
  321. package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
  322. package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
  323. package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
  324. package/dist/server/index.d.ts +11 -11
  325. package/dist/server/index.js +12 -12
  326. package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
  327. package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
  328. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  329. package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
  330. package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
  331. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  332. package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
  333. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  334. package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
  335. package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
  336. package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
  337. package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
  338. package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  339. package/dist/solid/index.d.ts +55 -16
  340. package/dist/solid/index.js +46 -12
  341. package/dist/solid-start/index.d.ts +30 -12
  342. package/dist/solid-start/index.js +3 -3
  343. package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
  344. package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
  345. package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
  346. package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
  347. package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
  348. package/dist/ssf/index.d.ts +3 -3
  349. package/dist/ssf/index.js +47 -35
  350. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  351. package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
  352. package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
  353. package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
  354. package/dist/stores-DZJvxFIZ.d.ts +59 -0
  355. package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
  356. package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
  357. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  358. package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
  359. package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
  360. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  361. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  362. package/dist/supabase/index.d.ts +48 -38
  363. package/dist/supabase/index.js +5 -5
  364. package/dist/supabase/middleware.d.ts +19 -13
  365. package/dist/supabase/middleware.js +7 -7
  366. package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
  367. package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
  368. package/dist/supabase-hook-C0FyEACZ.js +1 -0
  369. package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
  370. package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
  371. package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
  372. package/dist/svelte/PermissionBoundary.svelte +2 -6
  373. package/dist/svelte/Protected.svelte +2 -8
  374. package/dist/svelte/index.d.ts +9 -8
  375. package/dist/svelte/index.js +10 -9
  376. package/dist/svelte/runtime.d.ts +4 -4
  377. package/dist/svelte/runtime.js +4 -4
  378. package/dist/svelte/source.d.ts +9 -8
  379. package/dist/svelte/source.js +6 -5
  380. package/dist/sveltekit/index.d.ts +30 -12
  381. package/dist/sveltekit/index.js +2 -2
  382. package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
  383. package/dist/tanstack-start/index.d.ts +22 -10
  384. package/dist/tanstack-start/index.js +2 -2
  385. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  386. package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
  387. package/dist/terminal/index.d.ts +23 -14
  388. package/dist/terminal/index.js +17 -20
  389. package/dist/testing/core.d.ts +1 -1
  390. package/dist/testing/core.js +1 -1
  391. package/dist/testing/fixtures/index.d.ts +8 -5
  392. package/dist/testing/fixtures/index.js +78 -17
  393. package/dist/testing/index.d.ts +225 -141
  394. package/dist/testing/index.js +352 -234
  395. package/dist/testing/saas/index.d.ts +43 -27
  396. package/dist/testing/saas/index.js +2 -2
  397. package/dist/testing/saas/permissions.d.ts +1 -1
  398. package/dist/testing/saas/permissions.js +1 -1
  399. package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
  400. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  401. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  402. package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
  403. package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
  404. package/dist/trpc/index.d.ts +11 -8
  405. package/dist/trpc/index.js +15 -9
  406. package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
  407. package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
  408. package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
  409. package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
  410. package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
  411. package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
  412. package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
  413. package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
  414. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  415. package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
  416. package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
  417. package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
  418. package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
  419. package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
  420. package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
  421. package/dist/types-tQB2CEnY.d.ts +262 -0
  422. package/dist/unplugin/index.d.ts +1 -1
  423. package/dist/unplugin/index.js +2 -2
  424. package/dist/usage-0hjZPIRX.js +1 -0
  425. package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
  426. package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
  427. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  428. package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
  429. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  430. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  431. package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
  432. package/dist/version-DMQ0dnN5.js +48 -0
  433. package/dist/version-DizhmD72.js +1 -0
  434. package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
  435. package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
  436. package/dist/vue/index.d.ts +71 -22
  437. package/dist/vue/index.js +50 -13
  438. package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
  439. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  440. package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
  441. package/dist/watch-ClLuO2TL.js +1 -0
  442. package/dist/webmcp/index.d.ts +11 -11
  443. package/dist/webmcp/index.js +8 -5
  444. package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
  445. package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
  446. package/dist/workflow/index.d.ts +3 -3
  447. package/dist/workflow/index.js +13 -13
  448. package/dist/workflow-sdk/index.d.ts +19 -13
  449. package/dist/workflow-sdk/index.js +6 -6
  450. package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
  451. package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
  452. package/package.json +8 -8
  453. package/schemas/catalog-v1.json +3 -0
  454. package/schemas/supabase-manifest-v1.json +33 -1
  455. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  456. package/skills/permdock-data/references/queries-and-rls.md +2 -1
  457. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
  458. package/skills/permdock-wire/references/adapters.md +16 -23
  459. package/dist/catalog-BCCjSAdH.js +0 -1
  460. package/dist/collect-k_Dulxr5.js +0 -1
  461. package/dist/config-CoQHDrDi.js +0 -166
  462. package/dist/denied-text-D4qkEtFz.d.ts +0 -19
  463. package/dist/fields-ClcQLrVc.js +0 -238
  464. package/dist/generate-CNU1pIOo.js +0 -171
  465. package/dist/headers-BIjfMaoC.js +0 -8
  466. package/dist/headers-CIbDTUTK.d.ts +0 -7
  467. package/dist/load-DrMHXzgN.js +0 -1
  468. package/dist/output-files-DPAY7-GX.js +0 -1
  469. package/dist/package-root-Dk_ETdkp.js +0 -31
  470. package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
  471. package/dist/policies-B2lZIurj.js +0 -295
  472. package/dist/powersync-CExtTLyA.js +0 -1
  473. package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
  474. package/dist/protected-BwZYL1X_.d.ts +0 -39
  475. package/dist/pull-Cty6Ovyu.js +0 -1
  476. package/dist/run-Bz7DXGEv.js +0 -1
  477. package/dist/stores-BAZwSYZA.d.ts +0 -31
  478. package/dist/supabase-hook-DJxC4PoP.js +0 -1
  479. package/dist/types-CKV71kKh.d.ts +0 -172
  480. package/dist/usage-y-kBNdqs.js +0 -1
  481. package/dist/version-CEbQ5UeM.js +0 -18
  482. package/dist/version-DXkYUISx.js +0 -1
  483. package/dist/watch-Bd9mx3rd.js +0 -1
@@ -1,166 +0,0 @@
1
- import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { n as CliError } from "./errors-DpP_U6Bf.js";
3
- import { existsSync } from "node:fs";
4
- import { relative, resolve } from "node:path";
5
- //#region src/cli/project/config-schema.ts
6
- const SECTIONS = {
7
- collect: {
8
- srcPath: true,
9
- out: true,
10
- barrel: true
11
- },
12
- catalog: { out: true },
13
- openapi: { doc: true },
14
- rls: {
15
- tables: true,
16
- dialect: true,
17
- memberships: true,
18
- membershipSources: true,
19
- suspension: true,
20
- functions: true,
21
- inlineFunctions: true,
22
- force: true,
23
- fixtures: true,
24
- verify: true,
25
- tenantClaim: true,
26
- tenantType: true,
27
- teamType: true,
28
- scopeTypes: true,
29
- roleClaim: true,
30
- roleValues: true,
31
- gucPrefix: true,
32
- out: true,
33
- drizzle: true,
34
- prisma: true,
35
- schema: true,
36
- authorize: true,
37
- policyPerRole: true,
38
- customRoles: true,
39
- triggers: true,
40
- audit: true,
41
- capabilities: true,
42
- anonymousSignIns: true,
43
- fields: true,
44
- revokeColumns: true,
45
- policyName: true,
46
- rbac: true,
47
- roles: true,
48
- actions: true,
49
- helpersOnly: true,
50
- rowHelpers: true,
51
- seeds: true,
52
- treeValues: true,
53
- trustedReaders: true,
54
- migrate: true,
55
- shims: true,
56
- tenants: true,
57
- customRoleWrites: true,
58
- anonExecute: true,
59
- assignments: true,
60
- approvals: true,
61
- jsonSchema: true,
62
- ownershipTriggers: true,
63
- readOnlyActors: true,
64
- apiKeys: true,
65
- tokenScopes: true,
66
- realtime: true,
67
- storage: true
68
- },
69
- supabase: {
70
- hook: true,
71
- schemas: true
72
- },
73
- powersync: {
74
- out: true,
75
- resources: true,
76
- action: true,
77
- manifest: true
78
- },
79
- doctor: {
80
- sensitiveActions: true,
81
- memberships: true,
82
- credentials: true,
83
- clientEntries: true,
84
- migrations: true,
85
- claims: true,
86
- srcPath: true,
87
- sharedTables: true
88
- }
89
- };
90
- const TOP_LEVEL = /* @__PURE__ */ new Set([
91
- "permissions",
92
- "policy",
93
- "operations",
94
- ...Object.keys(SECTIONS)
95
- ]);
96
- function isSection(key) {
97
- return Object.hasOwn(SECTIONS, key);
98
- }
99
- /**
100
- * Checks the shape a command relies on before it reads the config: module
101
- * paths are strings and each section is an object. A key PermDock does not
102
- * read is a warning, so a config written for a newer version still loads.
103
- */
104
- function parseConfig(value, file) {
105
- if (value === void 0) return {
106
- config: {},
107
- warnings: []
108
- };
109
- if (!isRecord(value)) throw new CliError("usage", `PermDock CLI: ${file} must export a config object as default (use defineConfig)`);
110
- const warnings = [];
111
- const unknown = (path, known) => `${file}: unknown key ${path}; PermDock reads ${[...known].join(", ")}`;
112
- for (const [key, entry] of Object.entries(value)) {
113
- if (key === "permissions" || key === "policy" || key === "operations") {
114
- if (entry !== void 0 && typeof entry !== "string") throw new CliError("usage", `PermDock CLI: ${file}: ${key} must be a module path string`);
115
- continue;
116
- }
117
- if (!isSection(key)) {
118
- warnings.push(unknown(key, TOP_LEVEL));
119
- continue;
120
- }
121
- if (entry === void 0) continue;
122
- if (!isRecord(entry)) throw new CliError("usage", `PermDock CLI: ${file}: ${key} must be an object`);
123
- const known = SECTIONS[key];
124
- for (const child of Object.keys(entry)) if (!Object.hasOwn(known, child)) warnings.push(unknown(`${key}.${child}`, Object.keys(known)));
125
- }
126
- return {
127
- config: value,
128
- warnings
129
- };
130
- }
131
- //#endregion
132
- //#region src/cli/project/config.ts
133
- const CONFIG_FILES = [
134
- "permdock.config.ts",
135
- "permdock.config.mts",
136
- "permdock.config.js",
137
- "permdock.config.mjs"
138
- ];
139
- function defineConfig(config) {
140
- return config;
141
- }
142
- function isConfigFile(name) {
143
- return CONFIG_FILES.some((file) => file === name);
144
- }
145
- async function readConfig(cwd, fromFlag, options) {
146
- const path = fromFlag ? resolve(cwd, fromFlag) : CONFIG_FILES.map((name) => resolve(cwd, name)).find((file) => existsSync(file));
147
- if (path === void 0) return {
148
- config: {},
149
- warnings: [],
150
- file: void 0
151
- };
152
- if (!existsSync(path)) throw new CliError("usage", `PermDock CLI: config file not found: ${path}`, { code: "config_not_found" });
153
- const { loadModule, pickNamed } = await import("./load-DrMHXzgN.js");
154
- return {
155
- ...parseConfig(pickNamed(await loadModule(path, options), ["default"]), relative(cwd, path).replaceAll("\\", "/")),
156
- file: path
157
- };
158
- }
159
- async function loadConfig(cwd, fromFlag, options) {
160
- return (await readConfig(cwd, fromFlag, options)).config;
161
- }
162
- function resolveCwd(cwd, fallback) {
163
- return cwd === void 0 ? fallback : resolve(fallback, cwd);
164
- }
165
- //#endregion
166
- export { resolveCwd as a, readConfig as i, isConfigFile as n, loadConfig as r, defineConfig as t };
@@ -1,19 +0,0 @@
1
- import { Ln as Decision } from "./policy-types-B-F-qAZk.js";
2
- import { u as Permission } from "./permission-types-DhNEmoRG.js";
3
- //#region src/agent/denied-text.d.ts
4
- /** What an agent adapter's `deniedText` receives: the refusal and the text PermDock wrote for it. */
5
- type DeniedTextEvent = {
6
- readonly decision: Exclude<Decision, {
7
- readonly outcome: "granted";
8
- }> | null;
9
- readonly permission: Permission | undefined;
10
- readonly text: string;
11
- };
12
- /**
13
- * Replaces the human-readable text of a refusal, and nothing else: the
14
- * outcome, `isError`, the structured content and the approval token stay.
15
- * `undefined` keeps PermDock's text.
16
- */
17
- type DeniedText = (event: DeniedTextEvent) => string | undefined;
18
- //#endregion
19
- export { DeniedTextEvent as n, DeniedText as t };
@@ -1,238 +0,0 @@
1
- import { i as configError } from "./errors-DpP_U6Bf.js";
2
- import { c as jsonSchemaOf } from "./catalog-doc-CV9s6B1S.js";
3
- import { A as quoteQualified, E as helperSchema, O as quoteIdent, k as quoteLiteral, s as signedIn } from "./shared-fMKOv8hP.js";
4
- import { c as branchClauses, i as orSql, s as andSql, u as wrapSql } from "./policies-B2lZIurj.js";
5
- //#region src/cli/rls/fields.ts
6
- /** Names of the field-view objects. Part of the SQL contract. */
7
- const FIELD_VIEWS = {
8
- /** `<table>_visible`: the `security_invoker` view clients read. */
9
- view: "_visible",
10
- /** `<table>_visible_fields`: the owner-rights companion `--revoke-columns` adds. */
11
- companion: "_visible_fields",
12
- /** The companion's row-key column, joined to the base table's key. */
13
- key: "permdock_key",
14
- /** Marks the companion so doctor PD022 knows it reads as its owner on purpose. */
15
- comment: "permdock:field-companion",
16
- /** `<table>_mask(p_row)`: the row-masking function `fields: 'mask'` adds. */
17
- mask: "_mask"
18
- };
19
- function covers(branch, column) {
20
- return branch.fields === void 0 || branch.fields.includes(column);
21
- }
22
- /**
23
- * A read grant that only shapes columns: a field-limited deny (it never
24
- * denies the row) or an allow with an empty list (it grants nothing). With
25
- * field views it leaves the row policy and lives in the view's masks.
26
- */
27
- function fieldOnly(branch) {
28
- if (branch.command !== "select" || branch.fields === void 0) return false;
29
- return branch.effect === "deny" || branch.fields.length === 0;
30
- }
31
- /** Branches the row policies keep when field views compile. */
32
- function rowBranches(branches) {
33
- return branches.filter((branch) => !fieldOnly(branch));
34
- }
35
- /**
36
- * Whether the reader is signed in, for branches with no helper call: a grant
37
- * to any signed-in user relies on `to authenticated` in its policy, which a
38
- * view does not have.
39
- */
40
- function audience(ctx, branch) {
41
- if (branch.access !== void 0 || branch.roles.length !== 1) return;
42
- if (branch.roles[0] === "authenticated") return signedIn(ctx);
43
- return branch.roles[0] === "anon" ? `not (${signedIn(ctx)})` : void 0;
44
- }
45
- function clause(ctx, branch) {
46
- return andSql(audience(ctx, branch), branchClauses(branch).using) ?? "true";
47
- }
48
- /**
49
- * `can(permission, row, { field })` in SQL: an allow that covers the column
50
- * holds for the row and no covering deny does. Every access term is the
51
- * uncorrelated helper call the row policy uses, so it runs once per statement.
52
- */
53
- function maskSql(ctx, allows, denies, column) {
54
- const allowed = allows.filter((branch) => covers(branch, column)).map((branch) => clause(ctx, branch));
55
- if (allowed.length === 0) return "false";
56
- const denied = denies.filter((branch) => covers(branch, column)).map((branch) => clause(ctx, branch));
57
- const allow = orSql(allowed);
58
- if (denied.length === 0) return allow;
59
- const deny = orSql(denied);
60
- return allow === "true" ? `not ${wrapSql(deny)}` : `${wrapSql(allow)} and not ${wrapSql(deny)}`;
61
- }
62
- function schemaColumns(policy, resource) {
63
- const node = policy.resources.get(resource);
64
- const schema = node === void 0 ? null : jsonSchemaOf(node);
65
- const properties = schema !== null && typeof schema === "object" ? schema.properties : void 0;
66
- return properties !== null && typeof properties === "object" ? Object.keys(properties) : void 0;
67
- }
68
- function viewName(table, suffix) {
69
- return `${table}${suffix}`;
70
- }
71
- /**
72
- * `<helper schema>.<table><suffix>`: outside the Data API's schemas, so the
73
- * companion's owner rights reach clients only through the `_visible` join and
74
- * the mask function is neither an RPC nor a computed field.
75
- */
76
- function helperObjectName(ctx, table, suffix) {
77
- const base = table.startsWith("public.") ? table.slice(7) : table.replaceAll(".", "_");
78
- return `${helperSchema(ctx)}.${viewName(base, suffix)}`;
79
- }
80
- /**
81
- * One view per table whose read grants limit fields. A column is restricted
82
- * when some read allow lists fields without it or some read deny lists it;
83
- * every other column, and the row key, passes through unchanged.
84
- */
85
- function fieldViews(policy, ctx, branches, options, warnings) {
86
- const byTable = /* @__PURE__ */ new Map();
87
- for (const branch of branches) {
88
- if (branch.command !== "select" || branch.coverage === true) continue;
89
- byTable.set(branch.table, [...byTable.get(branch.table) ?? [], branch]);
90
- }
91
- const views = [];
92
- for (const [table, reads] of byTable) {
93
- const allows = reads.filter((branch) => branch.effect === "allow" && branch.fields?.length !== 0);
94
- const denies = reads.filter((branch) => branch.effect === "deny");
95
- const limited = reads.some((branch) => branch.fields !== void 0);
96
- const resource = reads.find((branch) => branch.resource !== void 0)?.resource;
97
- if (!limited || allows.length === 0 || resource === void 0) continue;
98
- const names = schemaColumns(policy, resource);
99
- if (names === void 0) throw configError(`PermDock CLI: --fields ${options.mask === true ? "mask" : "views"} needs the ${resource} schema's JSON Schema (Standard JSON Schema) to list the columns of ${table}`);
100
- const key = policy.resources.get(resource)?.id ?? "id";
101
- const restricted = (column) => column !== key && (allows.some((branch) => branch.fields !== void 0 && !branch.fields.includes(column)) || denies.some((branch) => branch.fields?.includes(column) === true));
102
- const columns = names.map((name) => {
103
- quoteIdent(name);
104
- return restricted(name) ? {
105
- name,
106
- mask: maskSql(ctx, allows, denies, name)
107
- } : { name };
108
- });
109
- if (columns.every((column) => column.mask === void 0)) continue;
110
- const view = viewName(table, FIELD_VIEWS.view);
111
- if (allows.some((branch) => branch.fields !== void 0 && !branch.fields.includes(key))) warnings.push(`field view ${view}: the key ${key} passes through, although a read grant on ${resource} omits it`);
112
- const hidden = columns.filter((column) => column.mask !== void 0).map((column) => column.name);
113
- if (options.helpersOnly === true) warnings.push(`field view ${view}: ${table} still returns ${hidden.join(", ")} to direct reads; revoke select on those columns from client roles in your own grants, or read them through a function`);
114
- else if (!options.revokeColumns) warnings.push(`field view ${view}: ${table} still returns ${hidden.join(", ")} to direct reads; add --revoke-columns so clients read through the view`);
115
- views.push({
116
- resource,
117
- table,
118
- view,
119
- key,
120
- columns,
121
- roles: reads.some((branch) => branch.roles.includes("anon")) ? ["anon", "authenticated"] : ["authenticated"],
122
- ...options.revokeColumns ? { companion: helperObjectName(ctx, table, FIELD_VIEWS.companion) } : {},
123
- ...options.mask === true ? { maskFunction: helperObjectName(ctx, table, FIELD_VIEWS.mask) } : {}
124
- });
125
- }
126
- return views;
127
- }
128
- /** Columns of `view`'s table that `anon` and `authenticated` keep on the base table with `--revoke-columns`. */
129
- function readableColumns(view) {
130
- return view.columns.filter((column) => column.mask === void 0).map((column) => column.name);
131
- }
132
- function restrictedColumns(view) {
133
- return view.columns.filter((column) => column.mask !== void 0).map((column) => column.name);
134
- }
135
- function columnList(names) {
136
- return names.map(quoteIdent).join(", ");
137
- }
138
- function selectList(lines) {
139
- return lines.map((line) => ` ${line}`).join(",\n");
140
- }
141
- function grantView(name, roles) {
142
- return [`revoke all on table ${quoteQualified(name)} from anon, authenticated, public;`, `grant select on table ${quoteQualified(name)} to ${roles.join(", ")};`].join("\n");
143
- }
144
- function inlineViewSql(view) {
145
- const targets = view.columns.map((column) => column.mask === void 0 ? quoteIdent(column.name) : `case when ${column.mask} then ${quoteIdent(column.name)} end as ${quoteIdent(column.name)}`);
146
- return `create or replace view ${quoteQualified(view.view)} with (security_invoker = true) as
147
- select
148
- ${selectList(targets)}
149
- from ${quoteQualified(view.table)};`;
150
- }
151
- function companionSql(view, companion) {
152
- const restricted = view.columns.filter((column) => column.mask !== void 0);
153
- const targets = [`${quoteIdent(view.key)} as ${quoteIdent(FIELD_VIEWS.key)}`, ...restricted.map((column) => `case when ${column.mask} then ${quoteIdent(column.name)} end as ${quoteIdent(column.name)}`)];
154
- const any = orSql(restricted.map((column) => column.mask ?? "false"));
155
- const name = companion.slice(0, companion.indexOf("."));
156
- const schema = quoteIdent(name);
157
- return `${name === "public" ? "" : `create schema if not exists ${schema};
158
- revoke all on schema ${schema} from public;
159
- grant usage on schema ${schema} to ${view.roles.join(", ")};
160
- `}create or replace view ${quoteQualified(companion)} with (security_barrier = true) as
161
- select
162
- ${selectList(targets)}
163
- from ${quoteQualified(view.table)}
164
- where ${any};
165
- comment on view ${quoteQualified(companion)} is ${quoteLiteral(`${FIELD_VIEWS.comment} ${view.view}`)};`;
166
- }
167
- function joinedViewSql(view, companion) {
168
- const targets = view.columns.map((column) => column.mask === void 0 ? `t.${quoteIdent(column.name)}` : `f.${quoteIdent(column.name)}`);
169
- return `create or replace view ${quoteQualified(view.view)} with (security_invoker = true) as
170
- select
171
- ${selectList(targets)}
172
- from ${quoteQualified(view.table)} t
173
- left join ${quoteQualified(companion)} f on f.${quoteIdent(FIELD_VIEWS.key)} = t.${quoteIdent(view.key)};`;
174
- }
175
- /** `select` on only the unrestricted columns (and the key) of the base table, for `--revoke-columns`. */
176
- function columnGrantSql(view, role) {
177
- return `grant select (${columnList(readableColumns(view))}) on table ${quoteQualified(view.table)} to ${role};`;
178
- }
179
- function columnRevokeSql(view) {
180
- return `revoke select (${columnList(restrictedColumns(view))}) on table ${quoteQualified(view.table)} from anon, authenticated;`;
181
- }
182
- /**
183
- * `<table>_mask(p_row)`: the row with each restricted column the caller may
184
- * not read set to null, by the same masks as the view. It reads only the row
185
- * it is given, so its caller decides which rows; `security invoker`, because
186
- * it needs nothing beyond the helpers the masks call. The body names the
187
- * parameter `$1`, since a column called `p_row` would shadow the name.
188
- */
189
- function maskFunctionSql(view, fn) {
190
- const table = quoteQualified(view.table);
191
- const name = quoteQualified(fn);
192
- const nulls = view.columns.flatMap((column) => column.mask === void 0 ? [] : [`case when ${column.mask} then '{}'::jsonb else pg_catalog.jsonb_build_object(${quoteLiteral(column.name)}, null) end`]);
193
- return `-- ${fn}: a row of ${view.table} with ${restrictedColumns(view).join(", ")} null unless a read grant covers the column for the row, for SQL that reads ${view.table} without ${view.view}
194
- create or replace function ${name}(p_row ${table})
195
- returns ${table}
196
- language sql
197
- stable
198
- security invoker
199
- set search_path = ''
200
- as $$
201
- select pg_catalog.jsonb_populate_record(
202
- $1,
203
- ${nulls.join("\n || ")}
204
- )
205
- from (select ($1).*) r
206
- $$;
207
- revoke all on function ${name}(${table}) from public, anon, authenticated;
208
- grant execute on function ${name}(${table}) to ${view.roles.join(", ")};`;
209
- }
210
- /**
211
- * The view SQL: the `security_invoker` view, and with `--revoke-columns` the
212
- * owner-rights companion it joins for the restricted columns. The companion
213
- * masks every column with the full field decision and keeps only rows where
214
- * one is readable, so reading it directly shows nothing `pick` would not.
215
- */
216
- function fieldViewsSql(views) {
217
- return views.map((view) => {
218
- const head = `-- field view over ${view.table}: ${restrictedColumns(view).join(", ")} read as null unless a read grant covers the column for the row`;
219
- const mask = view.maskFunction === void 0 ? [] : [maskFunctionSql(view, view.maskFunction)];
220
- if (view.companion === void 0) return [
221
- head,
222
- inlineViewSql(view),
223
- grantView(view.view, view.roles),
224
- ...mask
225
- ].join("\n");
226
- return [
227
- head,
228
- `-- ${view.companion} reads ${view.table} as its owner; ${view.view} reads the rows as the caller and joins it`,
229
- companionSql(view, view.companion),
230
- grantView(view.companion, view.roles),
231
- joinedViewSql(view, view.companion),
232
- grantView(view.view, view.roles),
233
- ...mask
234
- ].join("\n");
235
- }).join("\n\n");
236
- }
237
- //#endregion
238
- export { fieldViewsSql as a, fieldViews as i, columnGrantSql as n, rowBranches as o, columnRevokeSql as r, viewName as s, FIELD_VIEWS as t };
@@ -1,171 +0,0 @@
1
- import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
3
- //#region src/cli/generate.ts
4
- const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;
5
- const MAX_DEPTH = 6;
6
- function isSchemaKind(value) {
7
- return value === "zod" || value === "valibot" || value === "arktype";
8
- }
9
- function schemaImport(kind) {
10
- switch (kind) {
11
- case "zod": return "import { z } from 'zod'";
12
- case "valibot": return "import * as v from 'valibot'";
13
- case "arktype": return "import { type } from 'arktype'";
14
- default: return kind;
15
- }
16
- }
17
- function emptySchema(kind) {
18
- return schemaExpression(kind, { type: "object" });
19
- }
20
- function propertyKey(name) {
21
- return IDENTIFIER.test(name) ? name : JSON.stringify(name);
22
- }
23
- function literalEnum(schema) {
24
- const values = schema["enum"];
25
- if (!Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string")) return;
26
- return values;
27
- }
28
- function schemaType(schema) {
29
- const type = schema["type"];
30
- if (typeof type === "string") return type;
31
- if (Array.isArray(type)) {
32
- const named = type.filter((item) => item !== "null");
33
- return named.length === 1 && typeof named[0] === "string" ? named[0] : void 0;
34
- }
35
- return isRecord(schema["properties"]) ? "object" : void 0;
36
- }
37
- function zodOf(schema, resolve, depth) {
38
- const node = resolve(schema);
39
- const values = literalEnum(node);
40
- if (values !== void 0) return `z.enum(${JSON.stringify(values)})`;
41
- const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
42
- if (type === void 0) return "z.unknown()";
43
- switch (type) {
44
- case "string": return "z.string()";
45
- case "number": return "z.number()";
46
- case "integer": return "z.number().int()";
47
- case "boolean": return "z.boolean()";
48
- case "array": return `z.array(${isRecord(node["items"]) ? zodOf(node["items"], resolve, depth + 1) : "z.unknown()"})`;
49
- case "object": {
50
- const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
51
- const properties = isRecord(node["properties"]) ? node["properties"] : {};
52
- const fields = Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => {
53
- const expression = zodOf(child, resolve, depth + 1);
54
- return `${propertyKey(name)}: ${required.has(name) ? expression : `${expression}.optional()`}`;
55
- });
56
- return `z.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
57
- }
58
- default: return "z.unknown()";
59
- }
60
- }
61
- function valibotOf(schema, resolve, depth) {
62
- const node = resolve(schema);
63
- const values = literalEnum(node);
64
- if (values !== void 0) return `v.picklist(${JSON.stringify(values)})`;
65
- const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
66
- if (type === void 0) return "v.unknown()";
67
- switch (type) {
68
- case "string": return "v.string()";
69
- case "number": return "v.number()";
70
- case "integer": return "v.pipe(v.number(), v.integer())";
71
- case "boolean": return "v.boolean()";
72
- case "array": return `v.array(${isRecord(node["items"]) ? valibotOf(node["items"], resolve, depth + 1) : "v.unknown()"})`;
73
- case "object": {
74
- const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
75
- const properties = isRecord(node["properties"]) ? node["properties"] : {};
76
- const fields = Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => {
77
- const expression = valibotOf(child, resolve, depth + 1);
78
- return `${propertyKey(name)}: ${required.has(name) ? expression : `v.optional(${expression})`}`;
79
- });
80
- return `v.object({${fields.length === 0 ? "" : ` ${fields.join(", ")} `}})`;
81
- }
82
- default: return "v.unknown()";
83
- }
84
- }
85
- /** An arktype definition: a string keyword or an object literal. */
86
- function arktypeOf(schema, resolve, depth) {
87
- const node = resolve(schema);
88
- const values = literalEnum(node);
89
- if (values !== void 0) return JSON.stringify(values.map((value) => `'${value.replaceAll("'", "\\'")}'`).join(" | "));
90
- const type = depth > MAX_DEPTH ? void 0 : schemaType(node);
91
- if (type === void 0) return "'unknown'";
92
- switch (type) {
93
- case "string": return "'string'";
94
- case "number": return "'number'";
95
- case "integer": return "'number.integer'";
96
- case "boolean": return "'boolean'";
97
- case "array": {
98
- if (!isRecord(node["items"])) return "'unknown[]'";
99
- const item = arktypeOf(node["items"], resolve, depth + 1);
100
- return item.startsWith("'") && !item.includes("|") ? `'${item.slice(1, -1)}[]'` : `[${item}, '[]']`;
101
- }
102
- case "object": {
103
- const required = new Set(Array.isArray(node["required"]) ? node["required"] : []);
104
- const properties = isRecord(node["properties"]) ? node["properties"] : {};
105
- const fields = Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, child]) => `${JSON.stringify(required.has(name) ? name : `${name}?`)}: ${arktypeOf(child, resolve, depth + 1)}`);
106
- return `{${fields.length === 0 ? "" : ` ${fields.join(", ")} `}}`;
107
- }
108
- default: return "'unknown'";
109
- }
110
- }
111
- /**
112
- * A validator expression for a JSON Schema object. Only the portable core
113
- * (primitives, enums of strings, arrays, objects with `required`) is
114
- * translated; anything else becomes the validator's `unknown`.
115
- */
116
- function schemaExpression(kind, schema, resolve = (node) => node) {
117
- switch (kind) {
118
- case "zod": return zodOf(schema, resolve, 0);
119
- case "valibot": return valibotOf(schema, resolve, 0);
120
- case "arktype": return `type(${arktypeOf(schema, resolve, 0)})`;
121
- default: return kind;
122
- }
123
- }
124
- function renderList(value, indent) {
125
- if (Array.isArray(value)) return JSON.stringify(value);
126
- return JSON.stringify(value, null, 2).replaceAll("\n", `\n${indent}`);
127
- }
128
- function renderResource(resource, indent) {
129
- const inner = `${indent} `;
130
- const options = [
131
- `${inner}id: '${(resource.id ?? "id").replaceAll("\\", "\\\\").replaceAll("'", "\\'")}',`,
132
- `${inner}actions: ${renderList(resource.actions, inner)},`,
133
- `${inner}collection: ${renderList(resource.collection, inner)},`
134
- ].join("\n");
135
- return `${resource.schema === void 0 ? "resource({" : `resource(${resource.schema}, {`}\n${options}\n${indent}})`;
136
- }
137
- function insert(trie, resource) {
138
- let node = trie;
139
- for (const [index, segment] of resource.path.entries()) {
140
- if (index === resource.path.length - 1) {
141
- node.set(segment, resource);
142
- return;
143
- }
144
- const next = node.get(segment);
145
- if (next instanceof Map) node = next;
146
- else {
147
- const created = /* @__PURE__ */ new Map();
148
- node.set(segment, created);
149
- node = created;
150
- }
151
- }
152
- }
153
- function renderTrie(trie, indent) {
154
- return [...trie.entries()].toSorted(([a], [b]) => byCodePoint(a, b)).map(([segment, value]) => value instanceof Map ? `${indent}${propertyKey(segment)}: {\n${renderTrie(value, `${indent} `)}\n${indent}},` : `${indent}${propertyKey(segment)}: ${renderResource(value, indent)},`).join("\n");
155
- }
156
- /** A deterministic `definePermissions()` module with a `// @generated` header. */
157
- function emitPermissionsModule(input) {
158
- const trie = /* @__PURE__ */ new Map();
159
- for (const resource of input.resources) insert(trie, resource);
160
- const imports = ["import { definePermissions, resource } from 'permdock'", ...input.schema === void 0 ? [] : [schemaImport(input.schema)]];
161
- const extras = Object.entries(input.exports ?? {}).map(([name, value]) => `export const ${name} = ${JSON.stringify(value, null, 2)} as const\n\n`);
162
- return `// @generated by permdock ${input.generator}
163
- ${imports.join("\n")}
164
-
165
- ${extras.join("")}export const permissions = definePermissions({
166
- ${renderTrie(trie, " ")}
167
- })
168
- `;
169
- }
170
- //#endregion
171
- export { schemaExpression as i, emptySchema as n, isSchemaKind as r, emitPermissionsModule as t };
@@ -1,8 +0,0 @@
1
- import { t as approvalHeaderValue } from "./approval-header-CJACtHkv.js";
2
- //#region src/client/headers.ts
3
- /** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
4
- function approvalHeaders(token) {
5
- return { "PermDock-Approval": approvalHeaderValue(token) };
6
- }
7
- //#endregion
8
- export { approvalHeaders as t };
@@ -1,7 +0,0 @@
1
- //#region src/client/headers.d.ts
2
- /** The `PermDock-Approval` header for a resume; a `TypeError` for a token that is not an RFC 9651 sf-token. */
3
- declare function approvalHeaders(token: string): {
4
- readonly "PermDock-Approval": string;
5
- };
6
- //#endregion
7
- export { approvalHeaders as t };
@@ -1 +0,0 @@
1
- export { a as loadModule, s as pickNamed } from "./load-DxroEzH1.js";
@@ -1 +0,0 @@
1
- export { t as SPLIT_PARTS } from "./output-files-CCMdcFWb.js";
@@ -1,31 +0,0 @@
1
- import { i as readJsonFile } from "./files-D_JIzUrP.js";
2
- import { existsSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- //#region src/cli/project/package-root.ts
6
- let cached;
7
- /**
8
- * The `permdock` package directory. The bundler may place this module in
9
- * `dist/cli/` or in a shared chunk at `dist/`, so walk up instead of
10
- * assuming a depth.
11
- */
12
- function packageRoot() {
13
- cached ??= findPackageRoot(dirname(fileURLToPath(import.meta.url)));
14
- return cached;
15
- }
16
- /** The nearest directory at or above `start` whose `package.json` is named `permdock`. */
17
- function findPackageRoot(start) {
18
- let dir = start;
19
- for (;;) {
20
- const manifest = join(dir, "package.json");
21
- if (existsSync(manifest)) {
22
- const { name } = readJsonFile(manifest);
23
- if (name === "permdock") return dir;
24
- }
25
- const parent = dirname(dir);
26
- if (parent === dir) throw new Error("PermDock CLI: cannot find the permdock package root");
27
- dir = parent;
28
- }
29
- }
30
- //#endregion
31
- export { packageRoot as t };
@@ -1,10 +0,0 @@
1
- import { Ut as LocalSnapshotManifest } from "./policy-types-B-F-qAZk.js";
2
- //#region src/core/parse-local-manifest.d.ts
3
- /**
4
- * Whether `value` has the shape `localSnapshotManifest(policy)` writes, with
5
- * no prototype keys. A JSON import widens `v: 1` to `number`; this narrows it
6
- * back without a cast.
7
- */
8
- declare function parseLocalSnapshotManifest(value: unknown): value is LocalSnapshotManifest;
9
- //#endregion
10
- export { parseLocalSnapshotManifest as t };