void 0.1.6 → 0.7.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 (333) hide show
  1. package/AGENT_PROMPT.md +15 -0
  2. package/README.md +62 -123
  3. package/dist/auth-BdsJ0Aff.d.mts +43 -0
  4. package/dist/auth-cmd-Dx8oPKZC.mjs +43 -0
  5. package/dist/auth-migrations-BAtAck2g.mjs +117 -0
  6. package/dist/better-auth-shared-C9_GHSkR.d.mts +71 -0
  7. package/dist/better-auth-shared-CdYmQGry.mjs +163 -0
  8. package/dist/cache-W82I8ihI.mjs +47 -0
  9. package/dist/cancel-deploy-BOBTqqh0.mjs +59 -0
  10. package/dist/cf-access-Dee5cXxL.mjs +22 -0
  11. package/dist/chunk-DJd-R1mw.mjs +34 -0
  12. package/dist/cli/cli.d.mts +1 -0
  13. package/dist/cli/cli.mjs +1807 -0
  14. package/dist/client-snXOjrp1.mjs +565 -0
  15. package/dist/collect-CjeZgz5D.mjs +55 -0
  16. package/dist/config-BIa9HwVX.mjs +573 -0
  17. package/dist/config-BzM9Dy7T.mjs +37 -0
  18. package/dist/config-CvHtTM0q.mjs +30 -0
  19. package/dist/create-project-BIA15W7z.mjs +90 -0
  20. package/dist/db-DsRoMcfN.mjs +895 -0
  21. package/dist/defer-DcxEsVH1.mjs +49 -0
  22. package/dist/delete-DAP6yDc7.mjs +64 -0
  23. package/dist/deploy-BPKblFx6.mjs +2424 -0
  24. package/dist/discover-B7FkXBLB.mjs +40 -0
  25. package/dist/dist-DUyXJLkq.mjs +2667 -0
  26. package/dist/dist-Dayj3gCK.mjs +1287 -0
  27. package/dist/domain-BGofcQ6I.mjs +79 -0
  28. package/dist/dotenv-DwO4ti0Z.mjs +173 -0
  29. package/dist/drizzle-NnudE_UN.mjs +232 -0
  30. package/dist/env-CyG3tvU0.mjs +301 -0
  31. package/dist/env-helpers-Dr9Y7RnE.d.mts +52 -0
  32. package/dist/env-raw-BDL4TvdN.mjs +32 -0
  33. package/dist/env-types-DknSA4SO.mjs +64 -0
  34. package/dist/env-validation-DJKjR_8q.mjs +163 -0
  35. package/dist/fetch-error-BQ8sZ5Nd.mjs +266 -0
  36. package/dist/fetch-error-CVZ5CGA-.d.mts +20 -0
  37. package/dist/gen-U0Ktr4Zd.mjs +761 -0
  38. package/dist/handler-B0ds0OHJ.d.mts +269 -0
  39. package/dist/head-P-egrtFE.d.mts +45 -0
  40. package/dist/headers-DCXc7mDs.mjs +279 -0
  41. package/dist/index.d.mts +32 -0
  42. package/dist/index.mjs +4695 -0
  43. package/dist/init-C7wS5iGP.mjs +2625 -0
  44. package/dist/link-p2R6NbgN.mjs +49 -0
  45. package/dist/list-Bfel-QLc.mjs +113 -0
  46. package/dist/log-DXdqnmhF.mjs +26 -0
  47. package/dist/login-CkcXUiIu.mjs +72 -0
  48. package/dist/logs-DmkrRvx6.mjs +98 -0
  49. package/dist/magic-string.es-D6g9UnIy.mjs +1011 -0
  50. package/dist/mcp-CaQzfeUi.mjs +373 -0
  51. package/dist/node-DDfXj10V.mjs +54 -0
  52. package/dist/output-BwlcIYSR.mjs +139 -0
  53. package/dist/pages/client.d.mts +198 -0
  54. package/dist/pages/client.mjs +980 -0
  55. package/dist/pages/head-client.d.mts +15 -0
  56. package/dist/pages/head-client.mjs +90 -0
  57. package/dist/pages/head.d.mts +2 -0
  58. package/dist/pages/head.mjs +112 -0
  59. package/dist/pages/index.d.mts +38 -0
  60. package/dist/pages/index.mjs +76 -0
  61. package/dist/pages/islands-plugin.d.mts +50 -0
  62. package/dist/pages/islands-plugin.mjs +195 -0
  63. package/dist/pages/prefetch.d.mts +31 -0
  64. package/dist/pages/prefetch.mjs +90 -0
  65. package/dist/pages/protocol.d.mts +3 -0
  66. package/dist/pages/protocol.mjs +193 -0
  67. package/dist/pages/serialize.d.mts +10 -0
  68. package/dist/pages/serialize.mjs +14 -0
  69. package/dist/pathe.M-eThtNZ-D-kmWkCS.mjs +150 -0
  70. package/dist/plugin-inference-oZ6Ybu2_.mjs +2447 -0
  71. package/dist/prepare-BAtWufvm.mjs +99 -0
  72. package/dist/preset-D4I73kT4.mjs +221 -0
  73. package/dist/project-TqORyHn8.mjs +72 -0
  74. package/dist/project-cmd-B7lQp3F3.mjs +67 -0
  75. package/dist/project-slug-CKam8lF9.mjs +11 -0
  76. package/dist/project-tsconfig-DfkESbDL.mjs +63 -0
  77. package/dist/protocol-BWzXs2A2.d.mts +34 -0
  78. package/dist/providers-B3aMxWzP.mjs +67 -0
  79. package/dist/resolve-project-Br5BR03U.mjs +29 -0
  80. package/dist/rollback-gyC59l7U.mjs +92 -0
  81. package/dist/route-types-DReF1gUY.mjs +255 -0
  82. package/dist/routes-stub.d.mts +55 -0
  83. package/dist/routes-stub.mjs +1 -0
  84. package/dist/runner-6Ep3fNQu.mjs +123 -0
  85. package/dist/runner-pg-D0wWHYnr.mjs +57 -0
  86. package/dist/runtime/ai.d.mts +127 -0
  87. package/dist/runtime/ai.mjs +348 -0
  88. package/dist/runtime/auth-client-react.d.mts +8 -0
  89. package/dist/runtime/auth-client-react.mjs +6 -0
  90. package/dist/runtime/auth-client-solid.d.mts +8 -0
  91. package/dist/runtime/auth-client-solid.mjs +6 -0
  92. package/dist/runtime/auth-client-svelte.d.mts +8 -0
  93. package/dist/runtime/auth-client-svelte.mjs +6 -0
  94. package/dist/runtime/auth-client-vue.d.mts +8 -0
  95. package/dist/runtime/auth-client-vue.mjs +6 -0
  96. package/dist/runtime/auth-client.d.mts +8 -0
  97. package/dist/runtime/auth-client.mjs +6 -0
  98. package/dist/runtime/auth.d.mts +2 -0
  99. package/dist/runtime/auth.mjs +22 -0
  100. package/dist/runtime/better-auth-pg.d.mts +11 -0
  101. package/dist/runtime/better-auth-pg.mjs +51 -0
  102. package/dist/runtime/better-auth.d.mts +11 -0
  103. package/dist/runtime/better-auth.mjs +33 -0
  104. package/dist/runtime/client.d.mts +6 -0
  105. package/dist/runtime/client.mjs +5 -0
  106. package/dist/runtime/db-pg.d.mts +2 -0
  107. package/dist/runtime/db-pg.mjs +1 -0
  108. package/dist/runtime/db.d.mts +17 -0
  109. package/dist/runtime/db.mjs +30 -0
  110. package/dist/runtime/drizzle-arktype.d.mts +1 -0
  111. package/dist/runtime/drizzle-arktype.mjs +2 -0
  112. package/dist/runtime/drizzle-valibot.d.mts +1 -0
  113. package/dist/runtime/drizzle-valibot.mjs +2 -0
  114. package/dist/runtime/drizzle-zod.d.mts +1 -0
  115. package/dist/runtime/drizzle-zod.mjs +2 -0
  116. package/dist/runtime/env-helpers.d.mts +2 -0
  117. package/dist/runtime/env-helpers.mjs +173 -0
  118. package/dist/runtime/env-public-client.d.mts +22 -0
  119. package/dist/runtime/env-public-client.mjs +54 -0
  120. package/dist/runtime/env-public.d.mts +143 -0
  121. package/dist/runtime/env-public.mjs +366 -0
  122. package/dist/runtime/env.d.mts +13 -0
  123. package/dist/runtime/env.mjs +51 -0
  124. package/dist/runtime/fetch-stream.d.mts +51 -0
  125. package/dist/runtime/fetch-stream.mjs +81 -0
  126. package/dist/runtime/fetch.d.mts +59 -0
  127. package/dist/runtime/fetch.mjs +18 -0
  128. package/dist/runtime/handler.d.mts +3 -0
  129. package/dist/runtime/handler.mjs +85 -0
  130. package/dist/runtime/isr.d.mts +26 -0
  131. package/dist/runtime/isr.mjs +43 -0
  132. package/dist/runtime/kv.d.mts +48 -0
  133. package/dist/runtime/kv.mjs +106 -0
  134. package/dist/runtime/log.d.mts +24 -0
  135. package/dist/runtime/log.mjs +31 -0
  136. package/dist/runtime/migration-handler-pg.d.mts +6 -0
  137. package/dist/runtime/migration-handler-pg.mjs +85 -0
  138. package/dist/runtime/migration-handler.d.mts +19 -0
  139. package/dist/runtime/migration-handler.mjs +92 -0
  140. package/dist/runtime/queues.d.mts +7 -0
  141. package/dist/runtime/queues.mjs +8 -0
  142. package/dist/runtime/remote/binding-handler.d.mts +15 -0
  143. package/dist/runtime/remote/binding-handler.mjs +208 -0
  144. package/dist/runtime/remote/index.d.mts +8 -0
  145. package/dist/runtime/remote/index.mjs +461 -0
  146. package/dist/runtime/response.d.mts +14 -0
  147. package/dist/runtime/response.mjs +30 -0
  148. package/dist/runtime/sandbox.d.mts +17 -0
  149. package/dist/runtime/sandbox.mjs +19 -0
  150. package/dist/runtime/schema-d1.d.mts +1 -0
  151. package/dist/runtime/schema-d1.mjs +2 -0
  152. package/dist/runtime/schema-pg.d.mts +1 -0
  153. package/dist/runtime/schema-pg.mjs +2 -0
  154. package/dist/runtime/seed.d.mts +30 -0
  155. package/dist/runtime/seed.mjs +6 -0
  156. package/dist/runtime/storage.d.mts +7 -0
  157. package/dist/runtime/storage.mjs +14 -0
  158. package/dist/runtime/validator.d.mts +2 -0
  159. package/dist/runtime/validator.mjs +72 -0
  160. package/dist/runtime/ws-server.d.mts +26 -0
  161. package/dist/runtime/ws-server.mjs +296 -0
  162. package/dist/runtime/ws.d.mts +123 -0
  163. package/dist/runtime/ws.mjs +103 -0
  164. package/dist/scan-Ba4hFwlH.mjs +324 -0
  165. package/dist/scan-C6HMEIdW.mjs +318 -0
  166. package/dist/secret-CeRSukgM.mjs +109 -0
  167. package/dist/skills-ipldjlKE.mjs +62 -0
  168. package/dist/standard-schema-9CRjx-uR.d.mts +42 -0
  169. package/dist/subcommand-prompt-BKjuNAPb.mjs +349 -0
  170. package/dist/sveltekit.d.mts +20 -0
  171. package/dist/sveltekit.mjs +61 -0
  172. package/dist/types-mHOEwpW4.d.mts +57 -0
  173. package/dist/validate-CaMavMxu.mjs +146 -0
  174. package/dist/yarn-pnp-BFqMV_bl.mjs +196 -0
  175. package/getting-started-prompt.txt +26 -0
  176. package/package.json +322 -30
  177. package/schema.json +364 -0
  178. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +175 -0
  179. package/skills/void/SKILL.md +75 -0
  180. package/skills/void/command/void.md +7 -0
  181. package/skills/void/docs/guide/ai.md +235 -0
  182. package/skills/void/docs/guide/app-types.md +103 -0
  183. package/skills/void/docs/guide/auth.md +257 -0
  184. package/skills/void/docs/guide/database/d1.md +106 -0
  185. package/skills/void/docs/guide/database/postgresql.md +106 -0
  186. package/skills/void/docs/guide/database.md +418 -0
  187. package/skills/void/docs/guide/deployment.md +98 -0
  188. package/skills/void/docs/guide/edge/headers.md +79 -0
  189. package/skills/void/docs/guide/edge/prerendering.md +83 -0
  190. package/skills/void/docs/guide/edge/redirects.md +116 -0
  191. package/skills/void/docs/guide/edge/revalidation.md +131 -0
  192. package/skills/void/docs/guide/edge/rewrites.md +354 -0
  193. package/skills/void/docs/guide/edge/static-assets.md +72 -0
  194. package/skills/void/docs/guide/env-vars.md +298 -0
  195. package/skills/void/docs/guide/index.md +80 -0
  196. package/skills/void/docs/guide/jobs.md +91 -0
  197. package/skills/void/docs/guide/kv.md +107 -0
  198. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +419 -0
  199. package/skills/void/docs/guide/pages-routing/head.md +130 -0
  200. package/skills/void/docs/guide/pages-routing/islands.md +405 -0
  201. package/skills/void/docs/guide/pages-routing/layouts.md +362 -0
  202. package/skills/void/docs/guide/pages-routing/loaders.md +267 -0
  203. package/skills/void/docs/guide/pages-routing/markdown.md +625 -0
  204. package/skills/void/docs/guide/pages-routing/overview.md +236 -0
  205. package/skills/void/docs/guide/pages-routing/view-transitions.md +140 -0
  206. package/skills/void/docs/guide/queues.md +140 -0
  207. package/skills/void/docs/guide/quickstart.md +233 -0
  208. package/skills/void/docs/guide/remote-dev.md +67 -0
  209. package/skills/void/docs/guide/sandboxes.md +82 -0
  210. package/skills/void/docs/guide/server-routing.md +246 -0
  211. package/skills/void/docs/guide/ssg.md +74 -0
  212. package/skills/void/docs/guide/ssr.md +105 -0
  213. package/skills/void/docs/guide/storage.md +67 -0
  214. package/skills/void/docs/guide/type-safety.md +179 -0
  215. package/skills/void/docs/guide/typed-fetch.md +113 -0
  216. package/skills/void/docs/guide/websockets.md +190 -0
  217. package/skills/void/docs/index.md +48 -0
  218. package/skills/void/docs/integrations/agents.md +84 -0
  219. package/skills/void/docs/integrations/cloudflare.md +284 -0
  220. package/skills/void/docs/integrations/frameworks/analog.md +182 -0
  221. package/skills/void/docs/integrations/frameworks/astro.md +197 -0
  222. package/skills/void/docs/integrations/frameworks/nuxt.md +164 -0
  223. package/skills/void/docs/integrations/frameworks/overview.md +136 -0
  224. package/skills/void/docs/integrations/frameworks/react-router.md +137 -0
  225. package/skills/void/docs/integrations/frameworks/sveltekit.md +191 -0
  226. package/skills/void/docs/integrations/frameworks/tanstack-start.md +140 -0
  227. package/skills/void/docs/integrations/hono.md +97 -0
  228. package/skills/void/docs/integrations/nodejs-bun-deno.md +210 -0
  229. package/skills/void/docs/node_modules/@iconify/vue/README.md +408 -0
  230. package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +5 -0
  231. package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +103 -0
  232. package/skills/void/docs/node_modules/oxc-minify/README.md +78 -0
  233. package/skills/void/docs/node_modules/reka-ui/README.md +80 -0
  234. package/skills/void/docs/node_modules/vitepress/README.md +28 -0
  235. package/skills/void/docs/node_modules/vitepress/template/api-examples.md +49 -0
  236. package/skills/void/docs/node_modules/vitepress/template/index.md +28 -0
  237. package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +85 -0
  238. package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +101 -0
  239. package/skills/void/docs/node_modules/void/AGENTS.md +204 -0
  240. package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +15 -0
  241. package/skills/void/docs/node_modules/void/README.md +89 -0
  242. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +591 -0
  243. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +375 -0
  244. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +174 -0
  245. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +37 -0
  246. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +135 -0
  247. package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +189 -0
  248. package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +143 -0
  249. package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +1272 -0
  250. package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +19 -0
  251. package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +15 -0
  252. package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +15 -0
  253. package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +15 -0
  254. package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +22 -0
  255. package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +69 -0
  256. package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +152 -0
  257. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +9 -0
  258. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +9 -0
  259. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +15 -0
  260. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +24 -0
  261. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +565 -0
  262. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +124 -0
  263. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +600 -0
  264. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +386 -0
  265. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +95 -0
  266. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +101 -0
  267. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathe/README.md +73 -0
  268. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +15 -0
  269. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +25 -0
  270. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tsdown/README.md +55 -0
  271. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite/LICENSE.md +2230 -0
  272. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite/README.md +20 -0
  273. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +58 -0
  274. package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +165 -0
  275. package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +20 -0
  276. package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +32 -0
  277. package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +99 -0
  278. package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +108 -0
  279. package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +51 -0
  280. package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +79 -0
  281. package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +44 -0
  282. package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +51 -0
  283. package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +65 -0
  284. package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +390 -0
  285. package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +48 -0
  286. package/skills/void/docs/node_modules/void/node_modules/hono/README.md +85 -0
  287. package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +452 -0
  288. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +76 -0
  289. package/{LICENSE → skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md} +21 -21
  290. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +364 -0
  291. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +41 -0
  292. package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +325 -0
  293. package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +398 -0
  294. package/skills/void/docs/node_modules/void/node_modules/pathe/README.md +73 -0
  295. package/skills/void/docs/node_modules/void/node_modules/pg/README.md +95 -0
  296. package/skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md +21 -0
  297. package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +135 -0
  298. package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +21 -0
  299. package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +25 -0
  300. package/skills/void/docs/node_modules/void/node_modules/tsdown/README.md +55 -0
  301. package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +9 -0
  302. package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +94 -0
  303. package/skills/void/docs/node_modules/void/node_modules/vite/LICENSE.md +2230 -0
  304. package/skills/void/docs/node_modules/void/node_modules/vite/README.md +20 -0
  305. package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +63 -0
  306. package/skills/void/docs/node_modules/void/node_modules/zod/README.md +191 -0
  307. package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +175 -0
  308. package/skills/void/docs/node_modules/void/skills/void/SKILL.md +75 -0
  309. package/skills/void/docs/node_modules/void/skills/void/command/void.md +7 -0
  310. package/skills/void/docs/reference/api.md +917 -0
  311. package/skills/void/docs/reference/cli.md +561 -0
  312. package/skills/void/docs/reference/config.md +408 -0
  313. package/skills/void/docs/reference/resource-inference.md +149 -0
  314. package/skills/void/docs/reference/structure.md +176 -0
  315. package/.npmignore +0 -29
  316. package/.travis.yml +0 -9
  317. package/favicon.ico +0 -0
  318. package/index.js +0 -14
  319. package/lib/Job.js +0 -150
  320. package/lib/Void.js +0 -99
  321. package/lib/scan.js +0 -19
  322. package/test/credentials.js +0 -20
  323. package/test/job.js +0 -64
  324. package/test/static/dir1/test6.html +0 -0
  325. package/test/static/dir2/test7.html +0 -0
  326. package/test/static/dir2/test8.html +0 -0
  327. package/test/static/dir2/test9.html +0 -0
  328. package/test/static/test1.html +0 -0
  329. package/test/static/test2.html +0 -0
  330. package/test/static/test3.html +0 -0
  331. package/test/void.js +0 -31
  332. /package/{test/static/dir1/test4.html → skills/void/docs/integrations/auth-providers.md} +0 -0
  333. /package/{test/static/dir1/test5.html → skills/void/docs/integrations/payment-processors.md} +0 -0
@@ -0,0 +1,318 @@
1
+ import { a as join, t as basename } from "./pathe.M-eThtNZ-D-kmWkCS.mjs";
2
+ import { n as globSync, t as glob } from "./dist-DUyXJLkq.mjs";
3
+ import { d as isIdentifier, f as isLiteral, m as isObjectExpression, u as isCallExpression } from "./plugin-inference-oZ6Ybu2_.mjs";
4
+ import { o as parseRouteFilename, s as parseWebSocketFilename, t as scanPages } from "./scan-Ba4hFwlH.mjs";
5
+ import { readFileSync } from "node:fs";
6
+ import { parseSync } from "vite";
7
+ //#region src/crons/scan.ts
8
+ const JOB_EXTENSIONS = [
9
+ "ts",
10
+ "mts",
11
+ "js",
12
+ "mjs"
13
+ ];
14
+ function extractJobName(filePath) {
15
+ return filePath.replace(/\.[^.]+$/, "");
16
+ }
17
+ function extractCronExpressions(source, filePath) {
18
+ const singleMatch = source.match(/export\s+const\s+cron\s*=\s*(['"`])([^'"`]+)\1/);
19
+ if (singleMatch) {
20
+ const cron = singleMatch[2].trim();
21
+ if (!cron) throw new Error(`cron: Invalid job file '${filePath}'. Cron expression cannot be empty.`);
22
+ return [cron];
23
+ }
24
+ const arrayMatch = source.match(/export\s+const\s+cron\s*=\s*\[([^\]]+)\]/);
25
+ if (arrayMatch) {
26
+ const items = arrayMatch[1].match(/(['"`])([^'"`]+)\1/g);
27
+ if (!items || items.length === 0) throw new Error(`cron: Invalid job file '${filePath}'. Cron array cannot be empty.`);
28
+ return items.map((item) => {
29
+ return item.match(/['"`]([^'"`]+)['"`]/)[1].trim();
30
+ });
31
+ }
32
+ throw new Error(`cron: Invalid job file '${filePath}'. Add \`export const cron = "<schedule>"\`.`);
33
+ }
34
+ function parseJobFiles(root, jobsDir, files) {
35
+ return files.filter((f) => !f.split("/").some((segment) => segment.startsWith("_"))).sort((a, b) => a.localeCompare(b)).map((filePath) => {
36
+ const source = readFileSync(join(root, jobsDir, filePath), "utf-8");
37
+ return {
38
+ filePath,
39
+ name: extractJobName(filePath),
40
+ crons: extractCronExpressions(source, filePath)
41
+ };
42
+ });
43
+ }
44
+ async function scanJobs(root, jobsDir = "crons") {
45
+ return parseJobFiles(root, jobsDir, await glob(`**/*.{${JOB_EXTENSIONS.join(",")}}`, {
46
+ cwd: `${root}/${jobsDir}`,
47
+ absolute: false
48
+ }).catch(() => []));
49
+ }
50
+ function scanJobsSync(root, jobsDir = "crons") {
51
+ const pattern = `**/*.{${JOB_EXTENSIONS.join(",")}}`;
52
+ let files;
53
+ try {
54
+ files = globSync(pattern, {
55
+ cwd: `${root}/${jobsDir}`,
56
+ absolute: false
57
+ });
58
+ } catch {
59
+ files = [];
60
+ }
61
+ return parseJobFiles(root, jobsDir, files);
62
+ }
63
+ //#endregion
64
+ //#region src/queues/scan.ts
65
+ const QUEUE_EXTENSIONS = [
66
+ "ts",
67
+ "mts",
68
+ "js",
69
+ "mjs"
70
+ ];
71
+ function extractName(filePath) {
72
+ return filePath.replace(/\.[^.]+$/, "");
73
+ }
74
+ function deriveBindingName(name) {
75
+ return "QUEUE_" + name.toUpperCase().replace(/[^A-Z0-9]/g, "_");
76
+ }
77
+ function extractConsumerOption(source, name) {
78
+ const re = new RegExp(`export\\s+const\\s+${name}\\s*=\\s*(\\d+)`);
79
+ const match = source.match(re);
80
+ return match ? Number(match[1]) : void 0;
81
+ }
82
+ function parseQueueFiles(root, queuesDir, files) {
83
+ return files.filter((f) => !f.split("/").some((segment) => segment.startsWith("_"))).sort((a, b) => a.localeCompare(b)).map((filePath) => {
84
+ const source = readFileSync(join(root, queuesDir, filePath), "utf-8");
85
+ const name = extractName(filePath);
86
+ return {
87
+ filePath,
88
+ name,
89
+ bindingName: deriveBindingName(name),
90
+ maxBatchSize: extractConsumerOption(source, "maxBatchSize"),
91
+ maxBatchTimeout: extractConsumerOption(source, "maxBatchTimeout"),
92
+ maxRetries: extractConsumerOption(source, "maxRetries"),
93
+ retryDelay: extractConsumerOption(source, "retryDelay")
94
+ };
95
+ });
96
+ }
97
+ async function scanQueues(root, queuesDir = "queues") {
98
+ return parseQueueFiles(root, queuesDir, await glob(`**/*.{${QUEUE_EXTENSIONS.join(",")}}`, {
99
+ cwd: `${root}/${queuesDir}`,
100
+ absolute: false
101
+ }).catch(() => []));
102
+ }
103
+ function scanQueuesSync(root, queuesDir = "queues") {
104
+ const pattern = `**/*.{${QUEUE_EXTENSIONS.join(",")}}`;
105
+ let files;
106
+ try {
107
+ files = globSync(pattern, {
108
+ cwd: `${root}/${queuesDir}`,
109
+ absolute: false
110
+ });
111
+ } catch {
112
+ files = [];
113
+ }
114
+ return parseQueueFiles(root, queuesDir, files);
115
+ }
116
+ //#endregion
117
+ //#region src/router/detect-exports.ts
118
+ const HTTP_METHODS = new Set([
119
+ "GET",
120
+ "POST",
121
+ "PUT",
122
+ "PATCH",
123
+ "DELETE",
124
+ "OPTIONS",
125
+ "HEAD"
126
+ ]);
127
+ /**
128
+ * Detect which HTTP method names are exported from a route file.
129
+ * Scans top-level named exports for identifiers matching HTTP methods.
130
+ */
131
+ function detectHttpExports(absPath) {
132
+ const code = readFileSync(absPath, "utf-8");
133
+ const filename = basename(absPath);
134
+ let parsed;
135
+ try {
136
+ parsed = parseSync(filename, code);
137
+ } catch {
138
+ return [];
139
+ }
140
+ const methods = [];
141
+ const program = parsed.program;
142
+ for (const node of program.body ?? []) if (node.type === "ExportNamedDeclaration") {
143
+ const declarationNode = node;
144
+ const decl = declarationNode.declaration;
145
+ if (decl) {
146
+ if (decl.type === "VariableDeclaration") {
147
+ for (const declarator of decl.declarations ?? []) if (isIdentifier(declarator.id) && HTTP_METHODS.has(declarator.id.name)) methods.push(declarator.id.name);
148
+ } else if (decl.type === "FunctionDeclaration") {
149
+ const fn = decl;
150
+ if (isIdentifier(fn.id) && HTTP_METHODS.has(fn.id.name)) methods.push(fn.id.name);
151
+ }
152
+ }
153
+ if (declarationNode.specifiers) for (const spec of declarationNode.specifiers) {
154
+ const exported = isIdentifier(spec.exported) ? spec.exported.name : isIdentifier(spec.local) ? spec.local.name : void 0;
155
+ if (exported && HTTP_METHODS.has(exported)) methods.push(exported);
156
+ }
157
+ }
158
+ return methods;
159
+ }
160
+ //#endregion
161
+ //#region src/router/websocket.ts
162
+ const HANDLER_EXTENSIONS$1 = [
163
+ "ts",
164
+ "mts",
165
+ "js",
166
+ "mjs"
167
+ ];
168
+ const WEBSOCKET_ROUTE_RE = /(?:\.(?:dev|prod))?\.ws\.(?:ts|mts|js|mjs)$/;
169
+ function isWebSocketRouteFile(filePath) {
170
+ return WEBSOCKET_ROUTE_RE.test(filePath.replace(/\\/g, "/"));
171
+ }
172
+ function toIdentifierPart(segment) {
173
+ return segment.replace(/^\(\s*|\s*\)$/g, "").replace(/^\[\.\.\.(.+)\]$/, "$1").replace(/^\[(.+)\]$/, "$1").replace(/\.ws$/, "").replace(/\.(dev|prod)$/, "").replace(/[^a-zA-Z0-9]+/g, " ").split(" ").filter(Boolean).map((part) => part[0].toUpperCase() + part.slice(1)).join("");
174
+ }
175
+ function deriveWebSocketClassName(filePath) {
176
+ const parts = filePath.replace(/\\/g, "/").replace(/\.(ts|mts|js|mjs)$/, "").split("/").filter((segment) => segment.length > 0 && !(segment.startsWith("(") && segment.endsWith(")"))).map(toIdentifierPart).filter(Boolean);
177
+ return (parts.length > 0 ? parts.join("") : "WebSocket") + "Ws";
178
+ }
179
+ function getPropertyName(node) {
180
+ if (!node) return null;
181
+ if (isIdentifier(node)) return node.name;
182
+ if (isLiteral(node) && typeof node.value === "string") return node.value;
183
+ return null;
184
+ }
185
+ function extractDefinition(call) {
186
+ if (!isCallExpression(call)) return null;
187
+ if (!isIdentifier(call.callee)) return null;
188
+ const calleeName = call.callee.name;
189
+ if (calleeName !== "defineRoom" && calleeName !== "defineWebSocket") return null;
190
+ let hasAuthGate = false;
191
+ const options = call.arguments?.[0];
192
+ if (isObjectExpression(options)) for (const property of options.properties ?? []) {
193
+ if (property.type !== "Property") continue;
194
+ if (getPropertyName(property.key) === "onBeforeConnect") {
195
+ hasAuthGate = true;
196
+ break;
197
+ }
198
+ }
199
+ return {
200
+ mode: calleeName === "defineRoom" ? "room" : "socket",
201
+ hasAuthGate
202
+ };
203
+ }
204
+ function detectWebSocketDefinition(absPath) {
205
+ const code = readFileSync(absPath, "utf-8");
206
+ const filename = absPath.split("/").pop() ?? absPath;
207
+ let parsed;
208
+ try {
209
+ parsed = parseSync(filename, code);
210
+ } catch {
211
+ return null;
212
+ }
213
+ const program = parsed.program;
214
+ const variableInitializers = /* @__PURE__ */ new Map();
215
+ for (const node of program.body ?? []) if (node.type === "VariableDeclaration") {
216
+ for (const declarator of node.declarations ?? []) if (isIdentifier(declarator.id) && declarator.init) variableInitializers.set(declarator.id.name, declarator.init);
217
+ }
218
+ for (const node of program.body ?? []) {
219
+ if (node.type !== "ExportDefaultDeclaration") continue;
220
+ const declaration = node.declaration;
221
+ if (isIdentifier(declaration)) return extractDefinition(variableInitializers.get(declaration.name));
222
+ return extractDefinition(declaration);
223
+ }
224
+ return null;
225
+ }
226
+ function buildWebSocketRoute(root, filePath) {
227
+ const parsed = parseWebSocketFilename(filePath);
228
+ const info = detectWebSocketDefinition(join(root, "routes", filePath));
229
+ const className = deriveWebSocketClassName(filePath);
230
+ return {
231
+ ...parsed,
232
+ className,
233
+ bindingName: className,
234
+ mode: info?.mode ?? "socket",
235
+ hasAuthGate: info?.hasAuthGate ?? false
236
+ };
237
+ }
238
+ function parseWebSocketFiles(root, files) {
239
+ return files.filter((f) => isWebSocketRouteFile(f)).filter((f) => !f.split("/").some((segment) => segment.startsWith("_"))).map((filePath) => buildWebSocketRoute(root, filePath)).sort((a, b) => {
240
+ if (a.catchAll !== b.catchAll) return a.catchAll ? 1 : -1;
241
+ return a.pattern.localeCompare(b.pattern);
242
+ });
243
+ }
244
+ async function scanWebSocketRoutes(root) {
245
+ return parseWebSocketFiles(root, await glob(`**/*.{${HANDLER_EXTENSIONS$1.join(",")}}`, {
246
+ cwd: `${root}/routes`,
247
+ absolute: false
248
+ }).catch(() => []));
249
+ }
250
+ function scanWebSocketRoutesSync(root) {
251
+ const pattern = `**/*.{${HANDLER_EXTENSIONS$1.join(",")}}`;
252
+ let files;
253
+ try {
254
+ files = globSync(pattern, {
255
+ cwd: `${root}/routes`,
256
+ absolute: false
257
+ });
258
+ } catch {
259
+ files = [];
260
+ }
261
+ return parseWebSocketFiles(root, files);
262
+ }
263
+ function isWebSocketPatternFile(filePath) {
264
+ return isWebSocketRouteFile(filePath);
265
+ }
266
+ //#endregion
267
+ //#region src/router/scan.ts
268
+ const HANDLER_EXTENSIONS = [
269
+ "ts",
270
+ "mts",
271
+ "js",
272
+ "mjs"
273
+ ];
274
+ /**
275
+ * Scan routes/ and middleware/ directories and return a structured manifest.
276
+ * Files starting with _ are ignored.
277
+ */
278
+ async function scanRoutes(root, options) {
279
+ const pattern = `**/*.{${HANDLER_EXTENSIONS.join(",")}}`;
280
+ const [routeFiles, websockets, middlewareFiles, jobs, queues, pages] = await Promise.all([
281
+ glob(pattern, {
282
+ cwd: `${root}/routes`,
283
+ absolute: false
284
+ }),
285
+ scanWebSocketRoutes(root),
286
+ glob(pattern, {
287
+ cwd: `${root}/middleware`,
288
+ absolute: false
289
+ }).catch(() => []),
290
+ scanJobs(root),
291
+ scanQueues(root),
292
+ scanPages(root, { output: options?.output })
293
+ ]);
294
+ const routesDir = `${root}/routes`;
295
+ return {
296
+ routes: routeFiles.filter((f) => !isWebSocketPatternFile(f)).filter((f) => !f.split("/").some((s) => s.startsWith("_"))).map((f) => {
297
+ const route = parseRouteFilename(f);
298
+ route.methods = detectHttpExports(join(routesDir, f));
299
+ return route;
300
+ }).sort((a, b) => {
301
+ if (a.catchAll !== b.catchAll) return a.catchAll ? 1 : -1;
302
+ return a.pattern.localeCompare(b.pattern);
303
+ }),
304
+ websockets,
305
+ middleware: middlewareFiles.filter((f) => !f.startsWith("_")).map((f) => {
306
+ const match = f.split("/").pop().match(/^(\d+)\./);
307
+ return {
308
+ order: match ? parseInt(match[1], 10) : Infinity,
309
+ filePath: f
310
+ };
311
+ }).sort((a, b) => a.order - b.order),
312
+ jobs,
313
+ queues,
314
+ pages
315
+ };
316
+ }
317
+ //#endregion
318
+ export { scanJobsSync as i, scanWebSocketRoutesSync as n, scanQueuesSync as r, scanRoutes as t };
@@ -0,0 +1,109 @@
1
+ import { n as cliTitle } from "./output-BwlcIYSR.mjs";
2
+ import { _ as me, c as R, g as ge, n as Ce, u as Se, v as ue, x as q, y as ye } from "./dist-Dayj3gCK.mjs";
3
+ import { r as readProjectConfig } from "./project-TqORyHn8.mjs";
4
+ import { n as PlatformClient, s as getToken } from "./client-snXOjrp1.mjs";
5
+ import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-Br5BR03U.mjs";
6
+ import { readFileSync } from "node:fs";
7
+ //#region src/cli/secret.ts
8
+ async function runSecretCommand(root, args) {
9
+ console.log();
10
+ ge(cliTitle("secret"));
11
+ const token = getToken(root);
12
+ if (!token) {
13
+ R.error("Not logged in. Run `void auth login` first.");
14
+ process.exit(1);
15
+ }
16
+ const client = new PlatformClient(token, { root });
17
+ const requestedProjectName = getRequestedProjectSlug({ projectSlug: args.projectName });
18
+ let projectId;
19
+ if (requestedProjectName) {
20
+ const config = resolveProjectBySlug(await client.listProjects(), requestedProjectName);
21
+ if (!config) throw new Error(`secret: No project found with slug '${requestedProjectName}'.`);
22
+ projectId = config.projectId;
23
+ } else {
24
+ const config = readProjectConfig(root);
25
+ if (!config) throw new Error("No linked project found. Run `void project link`, `void deploy`, or pass --project <name>.");
26
+ projectId = config.projectId;
27
+ }
28
+ if (args.action === "list") {
29
+ const secrets = await client.listSecrets(projectId);
30
+ if (secrets.length === 0) {
31
+ ye("No secrets set.");
32
+ return;
33
+ }
34
+ Se(secrets.map((s) => ` ${s.name}`).join("\n"), "Secrets");
35
+ ye(`${secrets.length} secret(s)`);
36
+ return;
37
+ }
38
+ if (args.action === "put") {
39
+ const value = args.value ?? await readSecretValue();
40
+ await client.setSecret(projectId, args.name, value);
41
+ ye(`Secret ${args.name} set.`);
42
+ return;
43
+ }
44
+ if (args.action === "sync") {
45
+ const secrets = parseDotenvFile(args.file);
46
+ if (secrets.length === 0) {
47
+ R.warn("No secrets found in file.");
48
+ ye("Nothing to sync.");
49
+ return;
50
+ }
51
+ R.info(`Found ${secrets.length} secret(s):`);
52
+ for (const s of secrets) R.message(` ${s.name}`);
53
+ const proceed = await ue({ message: `This will overwrite ${secrets.length} secret(s) in the remote environment. Continue?` });
54
+ if (q(proceed) || !proceed) {
55
+ me("Secret sync cancelled.");
56
+ process.exit(0);
57
+ }
58
+ for (const s of secrets) {
59
+ await client.setSecret(projectId, s.name, s.value);
60
+ R.success(`Set ${s.name}`);
61
+ }
62
+ ye(`Synced ${secrets.length} secret(s).`);
63
+ return;
64
+ }
65
+ await client.deleteSecret(projectId, args.name);
66
+ ye(`Secret ${args.name} deleted.`);
67
+ }
68
+ const SECRET_KEY_RE = /^[A-Z][A-Z0-9_]*$/;
69
+ function parseDotenvFile(filePath) {
70
+ const content = readFileSync(filePath, "utf-8");
71
+ const secrets = [];
72
+ for (const line of content.split("\n")) {
73
+ const trimmed = line.trim();
74
+ if (!trimmed || trimmed.startsWith("#")) continue;
75
+ const eqIndex = trimmed.indexOf("=");
76
+ if (eqIndex === -1) throw new Error(`secret: Invalid dotenv line '${trimmed}'. Add KEY=value.`);
77
+ const key = trimmed.slice(0, eqIndex).trim();
78
+ let value = trimmed.slice(eqIndex + 1).trim();
79
+ if (value.startsWith("\"") && value.endsWith("\"") || value.startsWith("'") && value.endsWith("'")) value = value.slice(1, -1);
80
+ if (!SECRET_KEY_RE.test(key)) throw new Error(`secret: Invalid secret name '${key}'. Use uppercase letters, digits, and underscores.`);
81
+ secrets.push({
82
+ name: key,
83
+ value
84
+ });
85
+ }
86
+ return secrets;
87
+ }
88
+ async function readSecretValue() {
89
+ if (!process.stdin.isTTY) {
90
+ const chunks = [];
91
+ for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
92
+ const value = Buffer.concat(chunks).toString("utf-8");
93
+ if (value.length === 0) throw new Error("Secret value is required.");
94
+ return value;
95
+ }
96
+ const result = await Ce({
97
+ message: "Enter secret value:",
98
+ mask: "*"
99
+ });
100
+ if (q(result)) {
101
+ me("Secret command cancelled.");
102
+ process.exit(0);
103
+ }
104
+ const value = result ?? "";
105
+ if (value.length === 0) throw new Error("Secret value is required.");
106
+ return value;
107
+ }
108
+ //#endregion
109
+ export { runSecretCommand };
@@ -0,0 +1,62 @@
1
+ import { a as join, o as relative } from "./pathe.M-eThtNZ-D-kmWkCS.mjs";
2
+ import { c as R } from "./dist-Dayj3gCK.mjs";
3
+ import { r as getPackageDir } from "./cli/cli.mjs";
4
+ import { existsSync, mkdirSync, readFileSync, readdirSync, readlinkSync, symlinkSync } from "node:fs";
5
+ //#region src/cli/skills.ts
6
+ function parseSkills(skillsDir) {
7
+ if (!existsSync(skillsDir)) return [];
8
+ const entries = readdirSync(skillsDir, { withFileTypes: true });
9
+ const skills = [];
10
+ for (const entry of entries) {
11
+ if (!entry.isDirectory()) continue;
12
+ const skillMd = join(skillsDir, entry.name, "SKILL.md");
13
+ if (!existsSync(skillMd)) continue;
14
+ const frontmatter = readFileSync(skillMd, "utf-8").match(/^---\n([\s\S]*?)\n---/);
15
+ if (!frontmatter) continue;
16
+ const nameMatch = frontmatter[1].match(/^name:\s*(.+)$/m);
17
+ const descMatch = frontmatter[1].match(/^description:\s*(.+)$/m);
18
+ skills.push({
19
+ dirName: entry.name,
20
+ name: nameMatch ? nameMatch[1].trim() : entry.name,
21
+ description: descMatch ? descMatch[1].trim() : ""
22
+ });
23
+ }
24
+ return skills;
25
+ }
26
+ function linkSkills(root, skillsDir, skills, agentSkillsDir) {
27
+ const targetDir = join(root, agentSkillsDir);
28
+ mkdirSync(targetDir, { recursive: true });
29
+ let linked = 0;
30
+ for (const skill of skills) {
31
+ const linkPath = join(targetDir, skill.dirName);
32
+ const relativeTarget = relative(targetDir, join(skillsDir, skill.dirName));
33
+ if (existsSync(linkPath)) {
34
+ try {
35
+ if (readlinkSync(linkPath) === relativeTarget) {
36
+ R.info(` ${skill.name} — already linked`);
37
+ continue;
38
+ }
39
+ } catch {}
40
+ R.warn(` ${skill.name} — path exists but is not the expected symlink, skipping`);
41
+ continue;
42
+ }
43
+ symlinkSync(relativeTarget, linkPath, process.platform === "win32" ? "junction" : "dir");
44
+ R.success(` ${skill.name} — linked`);
45
+ linked++;
46
+ }
47
+ return linked;
48
+ }
49
+ function linkSkillsForSpecificAgents(root, agents) {
50
+ const skillsDir = join(getPackageDir(), "skills");
51
+ const skills = parseSkills(skillsDir);
52
+ if (skills.length === 0) return 0;
53
+ if (agents.length === 0) return 0;
54
+ let totalLinked = 0;
55
+ for (const agent of agents) {
56
+ R.info(`${agent.displayName} → ${agent.skillsDir}`);
57
+ totalLinked += linkSkills(root, skillsDir, skills, agent.skillsDir);
58
+ }
59
+ return totalLinked;
60
+ }
61
+ //#endregion
62
+ export { linkSkillsForSpecificAgents };
@@ -0,0 +1,42 @@
1
+ //#region src/standard-schema.d.ts
2
+ /**
3
+ * Standard Schema V1 types, inlined from the spec.
4
+ * https://github.com/standard-schema/standard-schema
5
+ *
6
+ * Per the spec's design, libraries may copy these types directly
7
+ * to avoid requiring `@standard-schema/spec` as a dependency.
8
+ */
9
+ interface StandardSchemaV1<Input = unknown, Output = Input> {
10
+ readonly "~standard": StandardSchemaV1.Props<Input, Output>;
11
+ }
12
+ declare namespace StandardSchemaV1 {
13
+ interface Props<Input = unknown, Output = Input> {
14
+ readonly version: 1;
15
+ readonly vendor: string;
16
+ readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
17
+ readonly types?: Types<Input, Output> | undefined;
18
+ }
19
+ type Result<Output> = SuccessResult<Output> | FailureResult;
20
+ interface SuccessResult<Output> {
21
+ readonly value: Output;
22
+ readonly issues?: undefined;
23
+ }
24
+ interface FailureResult {
25
+ readonly issues: ReadonlyArray<Issue>;
26
+ }
27
+ interface Issue {
28
+ readonly message: string;
29
+ readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
30
+ }
31
+ interface PathSegment {
32
+ readonly key: PropertyKey;
33
+ }
34
+ interface Types<Input = unknown, Output = Input> {
35
+ readonly input: Input;
36
+ readonly output: Output;
37
+ }
38
+ type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
39
+ type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
40
+ }
41
+ //#endregion
42
+ export { StandardSchemaV1 as t };