@ekrist1/vulse 0.1.6-alpha.3

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 (481) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/dist/admin/client/active-locale.d.ts +3 -0
  4. package/dist/admin/client/active-locale.d.ts.map +1 -0
  5. package/dist/admin/client/active-locale.js +14 -0
  6. package/dist/admin/client/api.d.ts +14 -0
  7. package/dist/admin/client/api.d.ts.map +1 -0
  8. package/dist/admin/client/api.js +26 -0
  9. package/dist/admin/client/form-from-zod.d.ts +2 -0
  10. package/dist/admin/client/form-from-zod.d.ts.map +1 -0
  11. package/dist/admin/client/form-from-zod.js +1 -0
  12. package/dist/admin/client/live-preview-enabled.d.ts +3 -0
  13. package/dist/admin/client/live-preview-enabled.d.ts.map +1 -0
  14. package/dist/admin/client/live-preview-enabled.js +6 -0
  15. package/dist/cli/collection-scaffold.d.ts +14 -0
  16. package/dist/cli/collection-scaffold.d.ts.map +1 -0
  17. package/dist/cli/collection-scaffold.js +44 -0
  18. package/dist/cli/index.d.ts +3 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +74 -0
  21. package/dist/cli/migrate.d.ts +5 -0
  22. package/dist/cli/migrate.d.ts.map +1 -0
  23. package/dist/cli/migrate.js +10 -0
  24. package/dist/cli/platform.d.ts +12 -0
  25. package/dist/cli/platform.d.ts.map +1 -0
  26. package/dist/cli/platform.js +38 -0
  27. package/dist/cli/seed-admin.d.ts +19 -0
  28. package/dist/cli/seed-admin.d.ts.map +1 -0
  29. package/dist/cli/seed-admin.js +59 -0
  30. package/dist/cli/setup.d.ts +29 -0
  31. package/dist/cli/setup.d.ts.map +1 -0
  32. package/dist/cli/setup.js +254 -0
  33. package/dist/core/access.d.ts +5 -0
  34. package/dist/core/access.d.ts.map +1 -0
  35. package/dist/core/access.js +6 -0
  36. package/dist/core/blocks/schema.d.ts +81 -0
  37. package/dist/core/blocks/schema.d.ts.map +1 -0
  38. package/dist/core/blocks/schema.js +54 -0
  39. package/dist/core/blueprints/code-to-definition.d.ts +6 -0
  40. package/dist/core/blueprints/code-to-definition.d.ts.map +1 -0
  41. package/dist/core/blueprints/code-to-definition.js +147 -0
  42. package/dist/core/blueprints/compile.d.ts +10 -0
  43. package/dist/core/blueprints/compile.d.ts.map +1 -0
  44. package/dist/core/blueprints/compile.js +153 -0
  45. package/dist/core/blueprints/define.d.ts +6 -0
  46. package/dist/core/blueprints/define.d.ts.map +1 -0
  47. package/dist/core/blueprints/define.js +8 -0
  48. package/dist/core/blueprints/definition.d.ts +963 -0
  49. package/dist/core/blueprints/definition.d.ts.map +1 -0
  50. package/dist/core/blueprints/definition.js +151 -0
  51. package/dist/core/blueprints/load.d.ts +11 -0
  52. package/dist/core/blueprints/load.d.ts.map +1 -0
  53. package/dist/core/blueprints/load.js +137 -0
  54. package/dist/core/blueprints/mutations.d.ts +8 -0
  55. package/dist/core/blueprints/mutations.d.ts.map +1 -0
  56. package/dist/core/blueprints/mutations.js +191 -0
  57. package/dist/core/blueprints/preview-path.d.ts +15 -0
  58. package/dist/core/blueprints/preview-path.d.ts.map +1 -0
  59. package/dist/core/blueprints/preview-path.js +25 -0
  60. package/dist/core/blueprints/reflect-fields.d.ts +36 -0
  61. package/dist/core/blueprints/reflect-fields.d.ts.map +1 -0
  62. package/dist/core/blueprints/reflect-fields.js +229 -0
  63. package/dist/core/blueprints/registry.d.ts +9 -0
  64. package/dist/core/blueprints/registry.d.ts.map +1 -0
  65. package/dist/core/blueprints/registry.js +11 -0
  66. package/dist/core/blueprints/seed.d.ts +5 -0
  67. package/dist/core/blueprints/seed.d.ts.map +1 -0
  68. package/dist/core/blueprints/seed.js +17 -0
  69. package/dist/core/blueprints/select-helpers.d.ts +10 -0
  70. package/dist/core/blueprints/select-helpers.d.ts.map +1 -0
  71. package/dist/core/blueprints/select-helpers.js +26 -0
  72. package/dist/core/blueprints/seo.d.ts +41 -0
  73. package/dist/core/blueprints/seo.d.ts.map +1 -0
  74. package/dist/core/blueprints/seo.js +125 -0
  75. package/dist/core/blueprints/types.d.ts +60 -0
  76. package/dist/core/blueprints/types.d.ts.map +1 -0
  77. package/dist/core/blueprints/types.js +1 -0
  78. package/dist/core/blueprints/zod-helpers.d.ts +79 -0
  79. package/dist/core/blueprints/zod-helpers.d.ts.map +1 -0
  80. package/dist/core/blueprints/zod-helpers.js +72 -0
  81. package/dist/core/db.d.ts +7 -0
  82. package/dist/core/db.d.ts.map +1 -0
  83. package/dist/core/db.js +8 -0
  84. package/dist/core/errors.d.ts +21 -0
  85. package/dist/core/errors.d.ts.map +1 -0
  86. package/dist/core/errors.js +29 -0
  87. package/dist/core/forms/compile.d.ts +9 -0
  88. package/dist/core/forms/compile.d.ts.map +1 -0
  89. package/dist/core/forms/compile.js +80 -0
  90. package/dist/core/forms/definition.d.ts +226 -0
  91. package/dist/core/forms/definition.d.ts.map +1 -0
  92. package/dist/core/forms/definition.js +83 -0
  93. package/dist/core/forms/rate-limit.d.ts +10 -0
  94. package/dist/core/forms/rate-limit.d.ts.map +1 -0
  95. package/dist/core/forms/rate-limit.js +31 -0
  96. package/dist/core/forms/unique.d.ts +5 -0
  97. package/dist/core/forms/unique.d.ts.map +1 -0
  98. package/dist/core/forms/unique.js +30 -0
  99. package/dist/core/globals/compile.d.ts +13 -0
  100. package/dist/core/globals/compile.d.ts.map +1 -0
  101. package/dist/core/globals/compile.js +17 -0
  102. package/dist/core/globals/definition.d.ts +161 -0
  103. package/dist/core/globals/definition.d.ts.map +1 -0
  104. package/dist/core/globals/definition.js +23 -0
  105. package/dist/core/locales.d.ts +14 -0
  106. package/dist/core/locales.d.ts.map +1 -0
  107. package/dist/core/locales.js +35 -0
  108. package/dist/core/migrations.d.ts +3 -0
  109. package/dist/core/migrations.d.ts.map +1 -0
  110. package/dist/core/migrations.js +41 -0
  111. package/dist/core/parse-content.d.ts +14 -0
  112. package/dist/core/parse-content.d.ts.map +1 -0
  113. package/dist/core/parse-content.js +68 -0
  114. package/dist/core/plugins/definition.d.ts +99 -0
  115. package/dist/core/plugins/definition.d.ts.map +1 -0
  116. package/dist/core/plugins/definition.js +10 -0
  117. package/dist/core/preview-content.d.ts +16 -0
  118. package/dist/core/preview-content.d.ts.map +1 -0
  119. package/dist/core/preview-content.js +8 -0
  120. package/dist/core/repos/entries.d.ts +102 -0
  121. package/dist/core/repos/entries.d.ts.map +1 -0
  122. package/dist/core/repos/entries.js +393 -0
  123. package/dist/core/repos/forms.d.ts +82 -0
  124. package/dist/core/repos/forms.d.ts.map +1 -0
  125. package/dist/core/repos/forms.js +199 -0
  126. package/dist/core/repos/globals.d.ts +31 -0
  127. package/dist/core/repos/globals.d.ts.map +1 -0
  128. package/dist/core/repos/globals.js +150 -0
  129. package/dist/core/repos/media.d.ts +39 -0
  130. package/dist/core/repos/media.d.ts.map +1 -0
  131. package/dist/core/repos/media.js +81 -0
  132. package/dist/core/repos/preview-sessions.d.ts +35 -0
  133. package/dist/core/repos/preview-sessions.d.ts.map +1 -0
  134. package/dist/core/repos/preview-sessions.js +85 -0
  135. package/dist/core/repos/revisions.d.ts +24 -0
  136. package/dist/core/repos/revisions.d.ts.map +1 -0
  137. package/dist/core/repos/revisions.js +44 -0
  138. package/dist/core/repos/settings.d.ts +9 -0
  139. package/dist/core/repos/settings.d.ts.map +1 -0
  140. package/dist/core/repos/settings.js +21 -0
  141. package/dist/core/schema.d.ts +2717 -0
  142. package/dist/core/schema.d.ts.map +1 -0
  143. package/dist/core/schema.js +220 -0
  144. package/dist/core/sets/compile.d.ts +8 -0
  145. package/dist/core/sets/compile.d.ts.map +1 -0
  146. package/dist/core/sets/compile.js +4 -0
  147. package/dist/core/sets/definition.d.ts +53 -0
  148. package/dist/core/sets/definition.d.ts.map +1 -0
  149. package/dist/core/sets/definition.js +7 -0
  150. package/dist/core/sets/service.d.ts +13 -0
  151. package/dist/core/sets/service.d.ts.map +1 -0
  152. package/dist/core/sets/service.js +68 -0
  153. package/dist/core/sets/validate-tree.d.ts +4 -0
  154. package/dist/core/sets/validate-tree.d.ts.map +1 -0
  155. package/dist/core/sets/validate-tree.js +40 -0
  156. package/dist/core/slug.d.ts +5 -0
  157. package/dist/core/slug.d.ts.map +1 -0
  158. package/dist/core/slug.js +25 -0
  159. package/dist/index.d.ts +16 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +19 -0
  162. package/dist/integration/cron.d.ts +4 -0
  163. package/dist/integration/cron.d.ts.map +1 -0
  164. package/dist/integration/cron.js +2 -0
  165. package/dist/integration/index.d.ts +9 -0
  166. package/dist/integration/index.d.ts.map +1 -0
  167. package/dist/integration/index.js +63 -0
  168. package/dist/integration/inject-admin-routes.d.ts +12 -0
  169. package/dist/integration/inject-admin-routes.d.ts.map +1 -0
  170. package/dist/integration/inject-admin-routes.js +35 -0
  171. package/dist/integration/inject-routes.d.ts +11 -0
  172. package/dist/integration/inject-routes.d.ts.map +1 -0
  173. package/dist/integration/inject-routes.js +51 -0
  174. package/dist/integration/install-hook.d.ts +2 -0
  175. package/dist/integration/install-hook.d.ts.map +1 -0
  176. package/dist/integration/install-hook.js +74 -0
  177. package/dist/integration/live-preview-middleware-helpers.d.ts +29 -0
  178. package/dist/integration/live-preview-middleware-helpers.d.ts.map +1 -0
  179. package/dist/integration/live-preview-middleware-helpers.js +75 -0
  180. package/dist/integration/loader-binding.d.ts +6 -0
  181. package/dist/integration/loader-binding.d.ts.map +1 -0
  182. package/dist/integration/loader-binding.js +15 -0
  183. package/dist/integration/middleware.d.ts +2 -0
  184. package/dist/integration/middleware.d.ts.map +1 -0
  185. package/dist/integration/middleware.js +51 -0
  186. package/dist/integration/type-gen.d.ts +2 -0
  187. package/dist/integration/type-gen.d.ts.map +1 -0
  188. package/dist/integration/type-gen.js +26 -0
  189. package/dist/integration/vite-plugin-blueprints.d.ts +3 -0
  190. package/dist/integration/vite-plugin-blueprints.d.ts.map +1 -0
  191. package/dist/integration/vite-plugin-blueprints.js +33 -0
  192. package/dist/integration/wrangler-patch.d.ts +6 -0
  193. package/dist/integration/wrangler-patch.d.ts.map +1 -0
  194. package/dist/integration/wrangler-patch.js +18 -0
  195. package/dist/integration.d.ts +3 -0
  196. package/dist/integration.d.ts.map +1 -0
  197. package/dist/integration.js +1 -0
  198. package/dist/loader.d.ts +3 -0
  199. package/dist/loader.d.ts.map +1 -0
  200. package/dist/loader.js +1 -0
  201. package/dist/package-name.d.ts +3 -0
  202. package/dist/package-name.d.ts.map +1 -0
  203. package/dist/package-name.js +2 -0
  204. package/dist/scaffold/collection-write.d.ts +14 -0
  205. package/dist/scaffold/collection-write.d.ts.map +1 -0
  206. package/dist/scaffold/collection-write.js +59 -0
  207. package/dist/scaffold/collection.d.ts +36 -0
  208. package/dist/scaffold/collection.d.ts.map +1 -0
  209. package/dist/scaffold/collection.js +231 -0
  210. package/dist/server/assets/live-preview-bridge.content.d.ts +2 -0
  211. package/dist/server/assets/live-preview-bridge.content.d.ts.map +1 -0
  212. package/dist/server/assets/live-preview-bridge.content.js +2 -0
  213. package/dist/server/better-auth.d.ts +71 -0
  214. package/dist/server/better-auth.d.ts.map +1 -0
  215. package/dist/server/better-auth.js +68 -0
  216. package/dist/server/cf-images.d.ts +12 -0
  217. package/dist/server/cf-images.d.ts.map +1 -0
  218. package/dist/server/cf-images.js +27 -0
  219. package/dist/server/cron.d.ts +9 -0
  220. package/dist/server/cron.d.ts.map +1 -0
  221. package/dist/server/cron.js +26 -0
  222. package/dist/server/email.d.ts +10 -0
  223. package/dist/server/email.d.ts.map +1 -0
  224. package/dist/server/email.js +9 -0
  225. package/dist/server/endpoints/api-auth.d.ts +5 -0
  226. package/dist/server/endpoints/api-auth.d.ts.map +1 -0
  227. package/dist/server/endpoints/api-auth.js +7 -0
  228. package/dist/server/endpoints/api-vulse-blueprints.d.ts +6 -0
  229. package/dist/server/endpoints/api-vulse-blueprints.d.ts.map +1 -0
  230. package/dist/server/endpoints/api-vulse-blueprints.js +19 -0
  231. package/dist/server/endpoints/api-vulse-entries-locales.d.ts +4 -0
  232. package/dist/server/endpoints/api-vulse-entries-locales.d.ts.map +1 -0
  233. package/dist/server/endpoints/api-vulse-entries-locales.js +9 -0
  234. package/dist/server/endpoints/api-vulse-entries-move.d.ts +3 -0
  235. package/dist/server/endpoints/api-vulse-entries-move.d.ts.map +1 -0
  236. package/dist/server/endpoints/api-vulse-entries-move.js +5 -0
  237. package/dist/server/endpoints/api-vulse-entries-publish.d.ts +3 -0
  238. package/dist/server/endpoints/api-vulse-entries-publish.d.ts.map +1 -0
  239. package/dist/server/endpoints/api-vulse-entries-publish.js +5 -0
  240. package/dist/server/endpoints/api-vulse-entries-tree.d.ts +3 -0
  241. package/dist/server/endpoints/api-vulse-entries-tree.d.ts.map +1 -0
  242. package/dist/server/endpoints/api-vulse-entries-tree.js +5 -0
  243. package/dist/server/endpoints/api-vulse-entries.d.ts +6 -0
  244. package/dist/server/endpoints/api-vulse-entries.d.ts.map +1 -0
  245. package/dist/server/endpoints/api-vulse-entries.js +19 -0
  246. package/dist/server/endpoints/api-vulse-form-handle.d.ts +6 -0
  247. package/dist/server/endpoints/api-vulse-form-handle.d.ts.map +1 -0
  248. package/dist/server/endpoints/api-vulse-form-handle.js +27 -0
  249. package/dist/server/endpoints/api-vulse-form-public.d.ts +3 -0
  250. package/dist/server/endpoints/api-vulse-form-public.d.ts.map +1 -0
  251. package/dist/server/endpoints/api-vulse-form-public.js +5 -0
  252. package/dist/server/endpoints/api-vulse-form-submit.d.ts +3 -0
  253. package/dist/server/endpoints/api-vulse-form-submit.d.ts.map +1 -0
  254. package/dist/server/endpoints/api-vulse-form-submit.js +5 -0
  255. package/dist/server/endpoints/api-vulse-form-upload.d.ts +3 -0
  256. package/dist/server/endpoints/api-vulse-form-upload.d.ts.map +1 -0
  257. package/dist/server/endpoints/api-vulse-form-upload.js +5 -0
  258. package/dist/server/endpoints/api-vulse-forms.d.ts +4 -0
  259. package/dist/server/endpoints/api-vulse-forms.d.ts.map +1 -0
  260. package/dist/server/endpoints/api-vulse-forms.js +9 -0
  261. package/dist/server/endpoints/api-vulse-globals-handle.d.ts +5 -0
  262. package/dist/server/endpoints/api-vulse-globals-handle.d.ts.map +1 -0
  263. package/dist/server/endpoints/api-vulse-globals-handle.js +19 -0
  264. package/dist/server/endpoints/api-vulse-globals-public-handle.d.ts +3 -0
  265. package/dist/server/endpoints/api-vulse-globals-public-handle.d.ts.map +1 -0
  266. package/dist/server/endpoints/api-vulse-globals-public-handle.js +5 -0
  267. package/dist/server/endpoints/api-vulse-globals-public.d.ts +3 -0
  268. package/dist/server/endpoints/api-vulse-globals-public.d.ts.map +1 -0
  269. package/dist/server/endpoints/api-vulse-globals-public.js +5 -0
  270. package/dist/server/endpoints/api-vulse-globals-value.d.ts +3 -0
  271. package/dist/server/endpoints/api-vulse-globals-value.d.ts.map +1 -0
  272. package/dist/server/endpoints/api-vulse-globals-value.js +7 -0
  273. package/dist/server/endpoints/api-vulse-globals.d.ts +4 -0
  274. package/dist/server/endpoints/api-vulse-globals.d.ts.map +1 -0
  275. package/dist/server/endpoints/api-vulse-globals.js +9 -0
  276. package/dist/server/endpoints/api-vulse-media-file.d.ts +3 -0
  277. package/dist/server/endpoints/api-vulse-media-file.d.ts.map +1 -0
  278. package/dist/server/endpoints/api-vulse-media-file.js +5 -0
  279. package/dist/server/endpoints/api-vulse-media-id.d.ts +4 -0
  280. package/dist/server/endpoints/api-vulse-media-id.d.ts.map +1 -0
  281. package/dist/server/endpoints/api-vulse-media-id.js +9 -0
  282. package/dist/server/endpoints/api-vulse-media.d.ts +4 -0
  283. package/dist/server/endpoints/api-vulse-media.d.ts.map +1 -0
  284. package/dist/server/endpoints/api-vulse-media.js +9 -0
  285. package/dist/server/endpoints/api-vulse-preview-bridge.d.ts +3 -0
  286. package/dist/server/endpoints/api-vulse-preview-bridge.d.ts.map +1 -0
  287. package/dist/server/endpoints/api-vulse-preview-bridge.js +9 -0
  288. package/dist/server/endpoints/api-vulse-preview-sessions-id.d.ts +3 -0
  289. package/dist/server/endpoints/api-vulse-preview-sessions-id.d.ts.map +1 -0
  290. package/dist/server/endpoints/api-vulse-preview-sessions-id.js +10 -0
  291. package/dist/server/endpoints/api-vulse-preview-sessions.d.ts +3 -0
  292. package/dist/server/endpoints/api-vulse-preview-sessions.d.ts.map +1 -0
  293. package/dist/server/endpoints/api-vulse-preview-sessions.js +5 -0
  294. package/dist/server/endpoints/api-vulse-preview-start.d.ts +3 -0
  295. package/dist/server/endpoints/api-vulse-preview-start.d.ts.map +1 -0
  296. package/dist/server/endpoints/api-vulse-preview-start.js +5 -0
  297. package/dist/server/endpoints/api-vulse-preview-stop.d.ts +3 -0
  298. package/dist/server/endpoints/api-vulse-preview-stop.d.ts.map +1 -0
  299. package/dist/server/endpoints/api-vulse-preview-stop.js +5 -0
  300. package/dist/server/endpoints/api-vulse-revisions-restore.d.ts +3 -0
  301. package/dist/server/endpoints/api-vulse-revisions-restore.d.ts.map +1 -0
  302. package/dist/server/endpoints/api-vulse-revisions-restore.js +5 -0
  303. package/dist/server/endpoints/api-vulse-revisions.d.ts +3 -0
  304. package/dist/server/endpoints/api-vulse-revisions.d.ts.map +1 -0
  305. package/dist/server/endpoints/api-vulse-revisions.js +5 -0
  306. package/dist/server/endpoints/api-vulse-search.d.ts +3 -0
  307. package/dist/server/endpoints/api-vulse-search.d.ts.map +1 -0
  308. package/dist/server/endpoints/api-vulse-search.js +5 -0
  309. package/dist/server/endpoints/api-vulse-sets.d.ts +6 -0
  310. package/dist/server/endpoints/api-vulse-sets.d.ts.map +1 -0
  311. package/dist/server/endpoints/api-vulse-sets.js +19 -0
  312. package/dist/server/endpoints/api-vulse-settings.d.ts +4 -0
  313. package/dist/server/endpoints/api-vulse-settings.d.ts.map +1 -0
  314. package/dist/server/endpoints/api-vulse-settings.js +9 -0
  315. package/dist/server/endpoints/api-vulse-users-id.d.ts +4 -0
  316. package/dist/server/endpoints/api-vulse-users-id.d.ts.map +1 -0
  317. package/dist/server/endpoints/api-vulse-users-id.js +9 -0
  318. package/dist/server/endpoints/api-vulse-users-reset-password.d.ts +3 -0
  319. package/dist/server/endpoints/api-vulse-users-reset-password.d.ts.map +1 -0
  320. package/dist/server/endpoints/api-vulse-users-reset-password.js +5 -0
  321. package/dist/server/endpoints/api-vulse-users-role.d.ts +4 -0
  322. package/dist/server/endpoints/api-vulse-users-role.d.ts.map +1 -0
  323. package/dist/server/endpoints/api-vulse-users-role.js +6 -0
  324. package/dist/server/endpoints/api-vulse-users.d.ts +3 -0
  325. package/dist/server/endpoints/api-vulse-users.d.ts.map +1 -0
  326. package/dist/server/endpoints/api-vulse-users.js +5 -0
  327. package/dist/server/endpoints/with-runtime.d.ts +2 -0
  328. package/dist/server/endpoints/with-runtime.d.ts.map +1 -0
  329. package/dist/server/endpoints/with-runtime.js +10 -0
  330. package/dist/server/env.d.ts +16 -0
  331. package/dist/server/env.d.ts.map +1 -0
  332. package/dist/server/env.js +9 -0
  333. package/dist/server/envelope.d.ts +15 -0
  334. package/dist/server/envelope.d.ts.map +1 -0
  335. package/dist/server/envelope.js +16 -0
  336. package/dist/server/forms/email.d.ts +8 -0
  337. package/dist/server/forms/email.d.ts.map +1 -0
  338. package/dist/server/forms/email.js +6 -0
  339. package/dist/server/forms/process-submission.d.ts +8 -0
  340. package/dist/server/forms/process-submission.d.ts.map +1 -0
  341. package/dist/server/forms/process-submission.js +75 -0
  342. package/dist/server/forms/queue.d.ts +8 -0
  343. package/dist/server/forms/queue.d.ts.map +1 -0
  344. package/dist/server/forms/queue.js +17 -0
  345. package/dist/server/forms/templates.d.ts +9 -0
  346. package/dist/server/forms/templates.d.ts.map +1 -0
  347. package/dist/server/forms/templates.js +14 -0
  348. package/dist/server/forms/webhook.d.ts +2 -0
  349. package/dist/server/forms/webhook.d.ts.map +1 -0
  350. package/dist/server/forms/webhook.js +17 -0
  351. package/dist/server/handler.d.ts +17 -0
  352. package/dist/server/handler.d.ts.map +1 -0
  353. package/dist/server/handler.js +45 -0
  354. package/dist/server/image-probe.d.ts +6 -0
  355. package/dist/server/image-probe.d.ts.map +1 -0
  356. package/dist/server/image-probe.js +38 -0
  357. package/dist/server/loader.d.ts +10 -0
  358. package/dist/server/loader.d.ts.map +1 -0
  359. package/dist/server/loader.js +42 -0
  360. package/dist/server/plugins.d.ts +17 -0
  361. package/dist/server/plugins.d.ts.map +1 -0
  362. package/dist/server/plugins.js +134 -0
  363. package/dist/server/preview.d.ts +7 -0
  364. package/dist/server/preview.d.ts.map +1 -0
  365. package/dist/server/preview.js +22 -0
  366. package/dist/server/r2.d.ts +8 -0
  367. package/dist/server/r2.d.ts.map +1 -0
  368. package/dist/server/r2.js +9 -0
  369. package/dist/server/routes/blueprints.d.ts +10 -0
  370. package/dist/server/routes/blueprints.d.ts.map +1 -0
  371. package/dist/server/routes/blueprints.js +46 -0
  372. package/dist/server/routes/entries.d.ts +16 -0
  373. package/dist/server/routes/entries.d.ts.map +1 -0
  374. package/dist/server/routes/entries.js +262 -0
  375. package/dist/server/routes/form-submit.d.ts +10 -0
  376. package/dist/server/routes/form-submit.d.ts.map +1 -0
  377. package/dist/server/routes/form-submit.js +155 -0
  378. package/dist/server/routes/form-upload.d.ts +11 -0
  379. package/dist/server/routes/form-upload.d.ts.map +1 -0
  380. package/dist/server/routes/form-upload.js +87 -0
  381. package/dist/server/routes/forms.d.ts +14 -0
  382. package/dist/server/routes/forms.d.ts.map +1 -0
  383. package/dist/server/routes/forms.js +78 -0
  384. package/dist/server/routes/globals-public.d.ts +6 -0
  385. package/dist/server/routes/globals-public.d.ts.map +1 -0
  386. package/dist/server/routes/globals-public.js +30 -0
  387. package/dist/server/routes/globals.d.ts +11 -0
  388. package/dist/server/routes/globals.d.ts.map +1 -0
  389. package/dist/server/routes/globals.js +84 -0
  390. package/dist/server/routes/media.d.ts +23 -0
  391. package/dist/server/routes/media.d.ts.map +1 -0
  392. package/dist/server/routes/media.js +129 -0
  393. package/dist/server/routes/preview-sessions.d.ts +9 -0
  394. package/dist/server/routes/preview-sessions.d.ts.map +1 -0
  395. package/dist/server/routes/preview-sessions.js +74 -0
  396. package/dist/server/routes/preview.d.ts +6 -0
  397. package/dist/server/routes/preview.d.ts.map +1 -0
  398. package/dist/server/routes/preview.js +37 -0
  399. package/dist/server/routes/revisions.d.ts +7 -0
  400. package/dist/server/routes/revisions.d.ts.map +1 -0
  401. package/dist/server/routes/revisions.js +26 -0
  402. package/dist/server/routes/search.d.ts +6 -0
  403. package/dist/server/routes/search.d.ts.map +1 -0
  404. package/dist/server/routes/search.js +28 -0
  405. package/dist/server/routes/sets.d.ts +10 -0
  406. package/dist/server/routes/sets.d.ts.map +1 -0
  407. package/dist/server/routes/sets.js +33 -0
  408. package/dist/server/routes/settings.d.ts +7 -0
  409. package/dist/server/routes/settings.d.ts.map +1 -0
  410. package/dist/server/routes/settings.js +21 -0
  411. package/dist/server/routes/users.d.ts +10 -0
  412. package/dist/server/routes/users.d.ts.map +1 -0
  413. package/dist/server/routes/users.js +113 -0
  414. package/dist/server/runtime.d.ts +49 -0
  415. package/dist/server/runtime.d.ts.map +1 -0
  416. package/dist/server/runtime.js +69 -0
  417. package/dist/server/sdk/collections.d.ts +25 -0
  418. package/dist/server/sdk/collections.d.ts.map +1 -0
  419. package/dist/server/sdk/collections.js +76 -0
  420. package/dist/server/sdk/index.d.ts +45 -0
  421. package/dist/server/sdk/index.d.ts.map +1 -0
  422. package/dist/server/sdk/index.js +13 -0
  423. package/dist/server/sdk/media.d.ts +7 -0
  424. package/dist/server/sdk/media.d.ts.map +1 -0
  425. package/dist/server/sdk/media.js +9 -0
  426. package/dist/server/sdk/search.d.ts +19 -0
  427. package/dist/server/sdk/search.d.ts.map +1 -0
  428. package/dist/server/sdk/search.js +58 -0
  429. package/dist/server.d.ts +8 -0
  430. package/dist/server.d.ts.map +1 -0
  431. package/dist/server.js +6 -0
  432. package/dist/version.d.ts +2 -0
  433. package/dist/version.d.ts.map +1 -0
  434. package/dist/version.js +2 -0
  435. package/migrations/0000_init.sql +114 -0
  436. package/migrations/0001_collections_sets.sql +21 -0
  437. package/migrations/0003_fts.sql +22 -0
  438. package/migrations/0004_forms.sql +58 -0
  439. package/migrations/0005_globals.sql +16 -0
  440. package/migrations/0006_preview_sessions.sql +16 -0
  441. package/migrations/meta/0000_snapshot.json +672 -0
  442. package/migrations/meta/_journal.json +13 -0
  443. package/package.json +130 -0
  444. package/src/client/BlockRenderer.astro +40 -0
  445. package/src/client/BlockRenderer.vue +42 -0
  446. package/src/client/Node.vue +21 -0
  447. package/src/client/ProseMirrorRenderer.vue +31 -0
  448. package/src/client/auth.ts +28 -0
  449. package/src/client/blocks/Blockquote.vue +12 -0
  450. package/src/client/blocks/BulletList.vue +12 -0
  451. package/src/client/blocks/CodeBlock.vue +12 -0
  452. package/src/client/blocks/Emoji.vue +14 -0
  453. package/src/client/blocks/HardBreak.vue +1 -0
  454. package/src/client/blocks/Heading.vue +17 -0
  455. package/src/client/blocks/ListItem.vue +12 -0
  456. package/src/client/blocks/OrderedList.vue +12 -0
  457. package/src/client/blocks/Paragraph.vue +12 -0
  458. package/src/client/blocks/Text.vue +33 -0
  459. package/src/client/blocks/VulseAccordion.vue +16 -0
  460. package/src/client/blocks/VulseAccordionGroup.vue +12 -0
  461. package/src/client/blocks/VulseCallout.vue +14 -0
  462. package/src/client/blocks/VulseIframe.vue +65 -0
  463. package/src/client/blocks/VulseImage.vue +30 -0
  464. package/src/client/blocks/VulseSet.vue +26 -0
  465. package/src/client/blocks/VulseVideo.vue +18 -0
  466. package/src/client/components/ForgotPasswordForm.astro +71 -0
  467. package/src/client/components/FormRenderer.astro +40 -0
  468. package/src/client/components/ResetPasswordForm.astro +72 -0
  469. package/src/client/components/SessionGuard.astro +27 -0
  470. package/src/client/components/SignInForm.astro +57 -0
  471. package/src/client/components/SignOutButton.astro +22 -0
  472. package/src/client/components/SignUpForm.astro +61 -0
  473. package/src/client/components/VulseImage.vue +25 -0
  474. package/src/client/embed.ts +52 -0
  475. package/src/client/index.ts +2 -0
  476. package/src/client/inject.ts +4 -0
  477. package/src/client/live-preview-bridge.ts +20 -0
  478. package/src/client/pm-defaults.ts +38 -0
  479. package/src/client/pm-types.ts +21 -0
  480. package/src/client/render-pm-html.ts +154 -0
  481. package/src/client/url.ts +35 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-admin-routes.d.ts","sourceRoot":"","sources":["../../src/integration/inject-admin-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAA;AAKnD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACtF,MAAM,EAAE,sBAAsB,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAoB,EAAE,EAAE,eAAe,QAgCpG"}
@@ -0,0 +1,35 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ const ADMIN = (rel) => fileURLToPath(new URL(`../../src/admin/pages/${rel}`, import.meta.url));
3
+ export function injectVulseAdminRoutes({ injectRoute, logger, adminPath = '/admin' }) {
4
+ const prefix = adminPath.replace(/\/$/, '');
5
+ const routes = [
6
+ { pattern: `${prefix}`, file: 'index.astro' },
7
+ { pattern: `${prefix}/login`, file: 'login.astro' },
8
+ { pattern: `${prefix}/collections/[name]`, file: 'collections/[name]/index.astro' },
9
+ { pattern: `${prefix}/collections/[name]/new`, file: 'collections/[name]/new.astro' },
10
+ { pattern: `${prefix}/collections/[name]/[id]`, file: 'collections/[name]/[id].astro' },
11
+ { pattern: `${prefix}/collections/[name]/[id]/revisions`, file: 'collections/[name]/[id]/revisions.astro' },
12
+ { pattern: `${prefix}/users`, file: 'users/index.astro' },
13
+ { pattern: `${prefix}/users/[id]`, file: 'users/[id].astro' },
14
+ { pattern: `${prefix}/settings`, file: 'settings/index.astro' },
15
+ { pattern: `${prefix}/settings/auth`, file: 'settings/auth.astro' },
16
+ { pattern: `${prefix}/media`, file: 'media.astro' },
17
+ { pattern: `${prefix}/forms`, file: 'forms/index.astro' },
18
+ { pattern: `${prefix}/forms/new`, file: 'forms/new.astro' },
19
+ { pattern: `${prefix}/forms/[handle]`, file: 'forms/[handle].astro' },
20
+ { pattern: `${prefix}/forms/[handle]/submissions`, file: 'forms/[handle]/submissions/index.astro' },
21
+ { pattern: `${prefix}/forms/[handle]/submissions/[id]`, file: 'forms/[handle]/submissions/[id].astro' },
22
+ { pattern: `${prefix}/settings/sets`, file: 'settings/sets/index.astro' },
23
+ { pattern: `${prefix}/settings/sets/new`, file: 'settings/sets/new.astro' },
24
+ { pattern: `${prefix}/settings/sets/[handle]`, file: 'settings/sets/[handle].astro' },
25
+ { pattern: `${prefix}/settings/globals`, file: 'settings/globals/index.astro' },
26
+ { pattern: `${prefix}/settings/globals/new`, file: 'settings/globals/new.astro' },
27
+ { pattern: `${prefix}/settings/globals/[handle]`, file: 'settings/globals/[handle].astro' },
28
+ { pattern: `${prefix}/schema/new`, file: 'schema/new.astro' },
29
+ { pattern: `${prefix}/schema/[handle]`, file: 'schema/[handle].astro' },
30
+ ];
31
+ for (const r of routes) {
32
+ injectRoute({ pattern: r.pattern, entrypoint: ADMIN(r.file), prerender: false });
33
+ logger.info(`Vulse: injected admin route ${r.pattern}`);
34
+ }
35
+ }
@@ -0,0 +1,11 @@
1
+ import type { AstroIntegrationLogger } from 'astro';
2
+ export interface InjectArgs {
3
+ injectRoute: (r: {
4
+ pattern: string;
5
+ entrypoint: string;
6
+ prerender?: boolean;
7
+ }) => void;
8
+ logger: AstroIntegrationLogger;
9
+ }
10
+ export declare function injectVulseRoutes({ injectRoute, logger }: InjectArgs): void;
11
+ //# sourceMappingURL=inject-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-routes.d.ts","sourceRoot":"","sources":["../../src/integration/inject-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAA;AAKnD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACtF,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,QAgDpE"}
@@ -0,0 +1,51 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ const HERE = (rel) => fileURLToPath(new URL(`../server/endpoints/${rel}`, import.meta.url));
3
+ export function injectVulseRoutes({ injectRoute, logger }) {
4
+ const routes = [
5
+ { pattern: '/api/vulse/entries/[collection]', file: 'api-vulse-entries.js' },
6
+ { pattern: '/api/vulse/entries/[collection]/tree', file: 'api-vulse-entries-tree.js' },
7
+ { pattern: '/api/vulse/entries/[collection]/[id]', file: 'api-vulse-entries.js' },
8
+ { pattern: '/api/vulse/entries/[collection]/[id]/locales', file: 'api-vulse-entries-locales.js' },
9
+ { pattern: '/api/vulse/entries/[collection]/[id]/move', file: 'api-vulse-entries-move.js' },
10
+ { pattern: '/api/vulse/entries/[collection]/[id]/publish', file: 'api-vulse-entries-publish.js' },
11
+ { pattern: '/api/vulse/entries/[collection]/[id]/revisions', file: 'api-vulse-revisions.js' },
12
+ { pattern: '/api/vulse/entries/[collection]/[id]/revisions/[version]/restore', file: 'api-vulse-revisions-restore.js' },
13
+ { pattern: '/api/vulse/users', file: 'api-vulse-users.js' },
14
+ { pattern: '/api/vulse/users/[id]', file: 'api-vulse-users-id.js' },
15
+ { pattern: '/api/vulse/users/[id]/role', file: 'api-vulse-users-role.js' },
16
+ { pattern: '/api/vulse/users/[id]/reset-password', file: 'api-vulse-users-reset-password.js' },
17
+ { pattern: '/api/vulse/settings', file: 'api-vulse-settings.js' },
18
+ { pattern: '/api/vulse/settings/[key]', file: 'api-vulse-settings.js' },
19
+ { pattern: '/api/vulse/blueprints', file: 'api-vulse-blueprints.js' },
20
+ { pattern: '/api/vulse/blueprints/[handle]', file: 'api-vulse-blueprints.js' },
21
+ { pattern: '/api/vulse/sets', file: 'api-vulse-sets.js' },
22
+ { pattern: '/api/vulse/sets/[handle]', file: 'api-vulse-sets.js' },
23
+ { pattern: '/api/vulse/media', file: 'api-vulse-media.js' },
24
+ { pattern: '/api/vulse/media/[id]', file: 'api-vulse-media-id.js' },
25
+ { pattern: '/api/vulse/media/[id]/file', file: 'api-vulse-media-file.js' },
26
+ { pattern: '/api/vulse/search', file: 'api-vulse-search.js' },
27
+ { pattern: '/api/vulse/preview/start', file: 'api-vulse-preview-start.js' },
28
+ { pattern: '/api/vulse/preview/stop', file: 'api-vulse-preview-stop.js' },
29
+ { pattern: '/api/vulse/preview/sessions', file: 'api-vulse-preview-sessions.js' },
30
+ { pattern: '/api/vulse/preview/sessions/[id]', file: 'api-vulse-preview-sessions-id.js' },
31
+ { pattern: '/api/vulse/preview/bridge.js', file: 'api-vulse-preview-bridge.js' },
32
+ { pattern: '/api/vulse/forms', file: 'api-vulse-forms.js' },
33
+ { pattern: '/api/vulse/forms/[handle]', file: 'api-vulse-form-handle.js' },
34
+ { pattern: '/api/vulse/forms/[handle]/submissions', file: 'api-vulse-form-handle.js' },
35
+ { pattern: '/api/vulse/forms/[handle]/submissions/delete', file: 'api-vulse-form-handle.js' },
36
+ { pattern: '/api/vulse/forms/[handle]/submissions/[id]', file: 'api-vulse-form-handle.js' },
37
+ { pattern: '/api/vulse/forms/[handle]/public', file: 'api-vulse-form-public.js' },
38
+ { pattern: '/api/vulse/forms/[handle]/submit', file: 'api-vulse-form-submit.js' },
39
+ { pattern: '/api/vulse/forms/[handle]/upload', file: 'api-vulse-form-upload.js' },
40
+ { pattern: '/api/vulse/globals', file: 'api-vulse-globals.js' },
41
+ { pattern: '/api/vulse/globals/[handle]', file: 'api-vulse-globals-handle.js' },
42
+ { pattern: '/api/vulse/globals/[handle]/value', file: 'api-vulse-globals-value.js' },
43
+ { pattern: '/api/vulse/public/globals', file: 'api-vulse-globals-public.js' },
44
+ { pattern: '/api/vulse/public/globals/[handle]', file: 'api-vulse-globals-public-handle.js' },
45
+ { pattern: '/api/auth/[...all]', file: 'api-auth.js' },
46
+ ];
47
+ for (const r of routes) {
48
+ injectRoute({ pattern: r.pattern, entrypoint: HERE(r.file), prerender: false });
49
+ logger.info(`Vulse: injected ${r.pattern}`);
50
+ }
51
+ }
@@ -0,0 +1,2 @@
1
+ export declare function runInstallHook(cwd: string): Promise<void>;
2
+ //# sourceMappingURL=install-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hook.d.ts","sourceRoot":"","sources":["../../src/integration/install-hook.ts"],"names":[],"mappings":"AAsCA,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/D"}
@@ -0,0 +1,74 @@
1
+ import { readFile, writeFile, mkdir, access } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { VULSE_PACKAGE } from '../package-name.js';
4
+ import { patchWranglerToml } from './wrangler-patch.js';
5
+ const STARTER_BLUEPRINT = `import { defineCollection, z } from '${VULSE_PACKAGE}'
6
+
7
+ export default defineCollection({
8
+ name: 'page',
9
+ label: 'Page',
10
+ schema: z.object({
11
+ title: z.string().min(1),
12
+ slug: z.string(),
13
+ body: z.string(),
14
+ }),
15
+ admin: { titleField: 'title', listColumns: ['title', 'slug'] },
16
+ })
17
+ `;
18
+ const CONTENT_CONFIG = `import { defineCollection, z } from 'astro:content'
19
+ import { vulseLoader } from '${VULSE_PACKAGE}/loader'
20
+
21
+ export const collections = {
22
+ page: defineCollection({
23
+ loader: vulseLoader({ collection: 'page' }),
24
+ schema: z.object({
25
+ title: z.string(),
26
+ slug: z.string(),
27
+ body: z.any().optional(),
28
+ }),
29
+ }),
30
+ }
31
+ `;
32
+ async function fileExists(path) {
33
+ try {
34
+ await access(path);
35
+ return true;
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ export async function runInstallHook(cwd) {
42
+ const wranglerPath = join(cwd, 'wrangler.toml');
43
+ const existing = (await fileExists(wranglerPath)) ? await readFile(wranglerPath, 'utf8') : '';
44
+ const patched = patchWranglerToml(existing, { d1Name: 'vulse-db', r2Bucket: 'vulse-media' });
45
+ if (patched !== existing)
46
+ await writeFile(wranglerPath, patched, 'utf8');
47
+ const collectionsDir = join(cwd, 'src/vulse/collections');
48
+ await mkdir(collectionsDir, { recursive: true });
49
+ const starter = join(collectionsDir, 'page.ts');
50
+ if (!(await fileExists(starter)))
51
+ await writeFile(starter, STARTER_BLUEPRINT, 'utf8');
52
+ const contentConfig = join(cwd, 'src/content.config.ts');
53
+ if (!(await fileExists(contentConfig))) {
54
+ await writeFile(contentConfig, CONTENT_CONFIG, 'utf8');
55
+ }
56
+ const tsConfigPath = join(cwd, 'tsconfig.json');
57
+ if (await fileExists(tsConfigPath)) {
58
+ const json = JSON.parse(await readFile(tsConfigPath, 'utf8'));
59
+ json.include = [...new Set([...(json.include ?? []), '.vulse/types.d.ts'])];
60
+ await writeFile(tsConfigPath, `${JSON.stringify(json, null, 2)}\n`, 'utf8');
61
+ }
62
+ console.log(`
63
+ ✅ Vulse installed.
64
+
65
+ One-time setup (copy/paste):
66
+ wrangler d1 create vulse-db
67
+ wrangler r2 bucket create vulse-media
68
+ # Paste the returned database_id into wrangler.toml (search for TODO_PASTE_ID).
69
+ npx vulse migrate
70
+ npx vulse seed:admin --email you@example.com
71
+
72
+ Then: astro dev → open /admin to log in.
73
+ `);
74
+ }
@@ -0,0 +1,29 @@
1
+ import type { RuntimeEnv } from '../server/env.js';
2
+ export interface LivePreviewLocals {
3
+ vulsePreview?: boolean;
4
+ vulseUser?: {
5
+ id?: string;
6
+ };
7
+ vulseLivePreview?: {
8
+ entryId: string | null;
9
+ collection: string;
10
+ slug: string;
11
+ content: unknown;
12
+ } | null;
13
+ }
14
+ export interface LivePreviewTokenResult {
15
+ token: string | null;
16
+ tokenFromQuery: boolean;
17
+ }
18
+ export interface InjectBridgeState extends LivePreviewTokenResult {
19
+ hasLivePreview: boolean;
20
+ }
21
+ export interface LoadLivePreviewDeps {
22
+ getSessionUser?: (request: Request, env: RuntimeEnv) => Promise<{
23
+ id?: string;
24
+ } | null>;
25
+ }
26
+ export declare function readLivePreviewToken(request: Request): LivePreviewTokenResult;
27
+ export declare function loadLivePreviewSession(request: Request, locals: LivePreviewLocals, env: RuntimeEnv, deps?: LoadLivePreviewDeps): Promise<LivePreviewTokenResult>;
28
+ export declare function injectLivePreviewBridge(request: Request, path: string, response: Response, state: InjectBridgeState): Promise<Response>;
29
+ //# sourceMappingURL=live-preview-middleware-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-preview-middleware-helpers.d.ts","sourceRoot":"","sources":["../../src/integration/live-preview-middleware-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAIlD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,UAAU,EAAE,MAAM,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,OAAO,CAAA;KACjB,GAAG,IAAI,CAAA;CACT;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;CACxF;AAQD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAK7E;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,UAAU,EACf,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CA+BjC;AAcD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,QAAQ,CAAC,CAsBnB"}
@@ -0,0 +1,75 @@
1
+ import { createDb } from '../core/db.js';
2
+ import { PreviewSessionsRepo } from '../core/repos/preview-sessions.js';
3
+ import { getRuntime } from '../server/runtime.js';
4
+ import { registryForRequest } from '../core/blueprints/load.js';
5
+ function readCookie(request, key) {
6
+ const cookie = request.headers.get('cookie') ?? '';
7
+ const match = cookie.match(new RegExp(`(?:^|;\\s*)${key}=([^;]+)`));
8
+ return match?.[1] ?? null;
9
+ }
10
+ export function readLivePreviewToken(request) {
11
+ const url = new URL(request.url);
12
+ const queryToken = url.searchParams.get('vulse_live_preview');
13
+ if (queryToken)
14
+ return { token: queryToken, tokenFromQuery: true };
15
+ return { token: readCookie(request, 'vulse_live_preview'), tokenFromQuery: false };
16
+ }
17
+ export async function loadLivePreviewSession(request, locals, env, deps = {}) {
18
+ const tokenResult = readLivePreviewToken(request);
19
+ if (!tokenResult.token)
20
+ return tokenResult;
21
+ const db = createDb(env.DB);
22
+ const repo = new PreviewSessionsRepo(db);
23
+ const session = await repo.findById(tokenResult.token);
24
+ if (!session)
25
+ return tokenResult;
26
+ let authorized = !!locals.vulsePreview;
27
+ if (!authorized) {
28
+ let userId = locals.vulseUser?.id;
29
+ if (!userId) {
30
+ const authUser = await (deps.getSessionUser ?? resolveSessionUser)(request, env);
31
+ if (authUser?.id) {
32
+ locals.vulseUser = authUser;
33
+ userId = authUser.id;
34
+ }
35
+ }
36
+ authorized = userId === session.userId;
37
+ }
38
+ if (!authorized)
39
+ return tokenResult;
40
+ locals.vulseLivePreview = {
41
+ entryId: session.entryId,
42
+ collection: session.collection,
43
+ slug: session.slug,
44
+ content: session.content,
45
+ };
46
+ return tokenResult;
47
+ }
48
+ async function resolveSessionUser(request, env) {
49
+ const db = createDb(env.DB);
50
+ const rt = await getRuntime(env, await registryForRequest(db), new URL(request.url).origin);
51
+ const authSession = await rt.auth.api.getSession({ headers: request.headers });
52
+ return authSession?.user ?? null;
53
+ }
54
+ function isHtmlResponse(response) {
55
+ const contentType = response.headers.get('content-type') ?? '';
56
+ return /^text\/html\b/i.test(contentType);
57
+ }
58
+ export async function injectLivePreviewBridge(request, path, response, state) {
59
+ if (!state.hasLivePreview || path.startsWith('/admin') || !isHtmlResponse(response))
60
+ return response;
61
+ const script = '<script type="module" src="/api/vulse/preview/bridge.js"></script>';
62
+ const html = await response.text();
63
+ const injected = html.replace(/<\/body>/i, `${script}</body>`);
64
+ const headers = new Headers(response.headers);
65
+ headers.set('X-Robots-Tag', 'noindex, nofollow');
66
+ if (state.tokenFromQuery && state.token) {
67
+ const secure = new URL(request.url).protocol === 'https:' ? '; Secure' : '';
68
+ headers.append('set-cookie', `vulse_live_preview=${encodeURIComponent(state.token)}; Path=/; HttpOnly; SameSite=Lax; Max-Age=3600${secure}`);
69
+ }
70
+ return new Response(injected, {
71
+ status: response.status,
72
+ statusText: response.statusText,
73
+ headers,
74
+ });
75
+ }
@@ -0,0 +1,6 @@
1
+ declare global {
2
+ var __VULSE_TEST_DB__: D1Database | undefined;
3
+ }
4
+ /** Resolves the local D1 binding via wrangler's platform proxy for content-layer sync. */
5
+ export declare function initLoaderBinding(projectRoot: string): Promise<void>;
6
+ //# sourceMappingURL=loader-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-binding.d.ts","sourceRoot":"","sources":["../../src/integration/loader-binding.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,iBAAiB,EAAE,UAAU,GAAG,SAAS,CAAA;CAC9C;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1E"}
@@ -0,0 +1,15 @@
1
+ import { join } from 'node:path';
2
+ /** Resolves the local D1 binding via wrangler's platform proxy for content-layer sync. */
3
+ export async function initLoaderBinding(projectRoot) {
4
+ if (globalThis.__VULSE_TEST_DB__)
5
+ return;
6
+ try {
7
+ const { getPlatformProxy } = await import('wrangler');
8
+ const { env } = await getPlatformProxy({ configPath: join(projectRoot, 'wrangler.toml') });
9
+ if (env.DB)
10
+ globalThis.__VULSE_TEST_DB__ = env.DB;
11
+ }
12
+ catch {
13
+ // wrangler.toml missing or platform proxy unavailable (e.g. CI without bindings)
14
+ }
15
+ }
@@ -0,0 +1,2 @@
1
+ export declare const onRequest: import("astro").MiddlewareHandler;
2
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/integration/middleware.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS,mCA2CpB,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { defineMiddleware } from 'astro:middleware';
2
+ import { createDb } from '../core/db.js';
3
+ import { getRuntime } from '../server/runtime.js';
4
+ import { getRuntimeEnv } from '../server/env.js';
5
+ import { registryForRequest } from '../core/blueprints/load.js';
6
+ import { previewSecret, verifyPreviewToken } from '../server/preview.js';
7
+ import { injectLivePreviewBridge, loadLivePreviewSession } from './live-preview-middleware-helpers.js';
8
+ export const onRequest = defineMiddleware(async (ctx, next) => {
9
+ const path = new URL(ctx.request.url).pathname;
10
+ const locals = ctx.locals;
11
+ let livePreviewToken = null;
12
+ let livePreviewTokenFromQuery = false;
13
+ try {
14
+ const env = getRuntimeEnv();
15
+ const previewToken = (ctx.request.headers.get('cookie') ?? '').match(/vulse_preview=([^;]+)/)?.[1];
16
+ if (previewToken && await verifyPreviewToken(previewSecret(env), previewToken)) {
17
+ locals.vulsePreview = true;
18
+ }
19
+ const live = await loadLivePreviewSession(ctx.request, locals, env);
20
+ livePreviewToken = live.token;
21
+ livePreviewTokenFromQuery = live.tokenFromQuery;
22
+ }
23
+ catch {
24
+ // env unavailable outside Cloudflare runtime
25
+ }
26
+ if (path.startsWith('/admin') && path !== '/admin/login') {
27
+ try {
28
+ const env = getRuntimeEnv();
29
+ const db = createDb(env.DB);
30
+ const rt = await getRuntime(env, await registryForRequest(db), new URL(ctx.request.url).origin);
31
+ const session = await rt.auth.api.getSession({ headers: ctx.request.headers });
32
+ if (!session)
33
+ return ctx.redirect(`/admin/login?next=${encodeURIComponent(path)}`);
34
+ ctx.locals.vulseUser = session.user;
35
+ const role = session.user.role;
36
+ if (role !== 'admin' && role !== 'editor') {
37
+ return new Response('Forbidden', { status: 403 });
38
+ }
39
+ }
40
+ catch (err) {
41
+ console.error('[vulse] admin middleware error:', err);
42
+ return new Response('Internal Server Error', { status: 500 });
43
+ }
44
+ }
45
+ const response = await next();
46
+ return injectLivePreviewBridge(ctx.request, path, response, {
47
+ hasLivePreview: !!locals.vulseLivePreview,
48
+ token: livePreviewToken,
49
+ tokenFromQuery: livePreviewTokenFromQuery,
50
+ });
51
+ });
@@ -0,0 +1,2 @@
1
+ export declare function generateBlueprintTypes(projectRoot: string): Promise<void>;
2
+ //# sourceMappingURL=type-gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-gen.d.ts","sourceRoot":"","sources":["../../src/integration/type-gen.ts"],"names":[],"mappings":"AAGA,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/E"}
@@ -0,0 +1,26 @@
1
+ import { writeFile, mkdir, readdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ export async function generateBlueprintTypes(projectRoot) {
4
+ const collectionsDir = join(projectRoot, 'src/vulse/collections');
5
+ let files;
6
+ try {
7
+ files = (await readdir(collectionsDir)).filter((f) => f.endsWith('.ts'));
8
+ }
9
+ catch {
10
+ files = [];
11
+ }
12
+ const names = files.map((f) => f.replace(/\.ts$/, ''));
13
+ const out = `// Auto-generated by Vulse. Do not edit.
14
+ declare module 'vulse/server' {
15
+ interface VulseCollections {
16
+ ${names.map((n) => ` ${n}: any // refined post-load`).join('\n')}
17
+ }
18
+ }
19
+
20
+ declare module 'astro:content' {
21
+ type VulseSlugs = ${names.length > 0 ? names.map((n) => `'${n}'`).join(' | ') : 'string'}
22
+ }
23
+ `;
24
+ await mkdir(join(projectRoot, '.vulse'), { recursive: true });
25
+ await writeFile(join(projectRoot, '.vulse/types.d.ts'), out, 'utf8');
26
+ }
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function vulseBlueprintsPlugin(root: string): Plugin;
3
+ //# sourceMappingURL=vite-plugin-blueprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin-blueprints.d.ts","sourceRoot":"","sources":["../../src/integration/vite-plugin-blueprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAOlC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwB1D"}
@@ -0,0 +1,33 @@
1
+ import { readdirSync } from 'node:fs';
2
+ import { resolve, join } from 'node:path';
3
+ const VIRTUAL_ID = 'virtual:vulse-blueprints';
4
+ const RESOLVED_ID = '\0' + VIRTUAL_ID;
5
+ export function vulseBlueprintsPlugin(root) {
6
+ return {
7
+ name: 'vulse-blueprints',
8
+ resolveId(id) {
9
+ if (id === VIRTUAL_ID)
10
+ return RESOLVED_ID;
11
+ },
12
+ load(id) {
13
+ if (id !== RESOLVED_ID)
14
+ return;
15
+ const dir = resolve(root, 'src/vulse/collections');
16
+ let files = [];
17
+ try {
18
+ files = readdirSync(dir)
19
+ .filter((f) => f.endsWith('.ts') || f.endsWith('.js'))
20
+ .map((f) => join(dir, f))
21
+ .sort();
22
+ }
23
+ catch {
24
+ files = [];
25
+ }
26
+ if (!files.length)
27
+ return 'export default []';
28
+ const imports = files.map((f, i) => `import bp${i} from ${JSON.stringify(f)}`).join('\n');
29
+ const items = files.map((_, i) => `bp${i}`).join(', ');
30
+ return `${imports}\nexport default [${items}]\n`;
31
+ },
32
+ };
33
+ }
@@ -0,0 +1,6 @@
1
+ export interface PatchOptions {
2
+ d1Name: string;
3
+ r2Bucket: string;
4
+ }
5
+ export declare function patchWranglerToml(input: string, opts: PatchOptions): string;
6
+ //# sourceMappingURL=wrangler-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrangler-patch.d.ts","sourceRoot":"","sources":["../../src/integration/wrangler-patch.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAe3E"}
@@ -0,0 +1,18 @@
1
+ import { VULSE_PACKAGE } from '../package-name.js';
2
+ const D1_MARKER = '# vulse:d1';
3
+ const R2_MARKER = '# vulse:r2';
4
+ export function patchWranglerToml(input, opts) {
5
+ const hasD1 = input.includes(D1_MARKER);
6
+ const hasR2 = input.includes(R2_MARKER);
7
+ let out = input;
8
+ if (!hasD1) {
9
+ out += `\n${D1_MARKER}\n[[d1_databases]]\nbinding = "DB"\ndatabase_name = "${opts.d1Name}"\ndatabase_id = "TODO_PASTE_ID_FROM_WRANGLER_OUTPUT"\nmigrations_dir = "node_modules/${VULSE_PACKAGE}/migrations"\n`;
10
+ }
11
+ if (!hasR2) {
12
+ out += `\n${R2_MARKER}\n[[r2_buckets]]\nbinding = "BUCKET"\nbucket_name = "${opts.r2Bucket}"\n`;
13
+ }
14
+ if (!out.includes('nodejs_compat')) {
15
+ out = out.replace(/compatibility_date = "[^"]+"/, (m) => `${m}\ncompatibility_flags = ["nodejs_compat"]`);
16
+ }
17
+ return out;
18
+ }
@@ -0,0 +1,3 @@
1
+ export { default } from './integration/index.js';
2
+ export type { VulseOptions } from './integration/index.js';
3
+ //# sourceMappingURL=integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1 @@
1
+ export { default } from './integration/index.js';
@@ -0,0 +1,3 @@
1
+ export { vulseLoader } from './server/loader.js';
2
+ export type { VulseLoaderOptions } from './server/loader.js';
3
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/loader.js ADDED
@@ -0,0 +1 @@
1
+ export { vulseLoader } from './server/loader.js';
@@ -0,0 +1,3 @@
1
+ /** npm package name — used in generated scaffolds and install hooks. */
2
+ export declare const VULSE_PACKAGE = "@ekrist1/vulse";
3
+ //# sourceMappingURL=package-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-name.d.ts","sourceRoot":"","sources":["../src/package-name.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,eAAO,MAAM,aAAa,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ /** npm package name — used in generated scaffolds and install hooks. */
2
+ export const VULSE_PACKAGE = '@ekrist1/vulse';
@@ -0,0 +1,14 @@
1
+ import { type CollectionScaffoldInput } from './collection.js';
2
+ export interface WriteCollectionScaffoldOptions {
3
+ force?: boolean;
4
+ skipBlueprint?: boolean;
5
+ skipPages?: boolean;
6
+ skipContentConfig?: boolean;
7
+ }
8
+ export interface WriteCollectionScaffoldResult {
9
+ written: string[];
10
+ skipped: string[];
11
+ patched: string[];
12
+ }
13
+ export declare function writeCollectionScaffold(cwd: string, input: CollectionScaffoldInput, opts?: WriteCollectionScaffoldOptions): Promise<WriteCollectionScaffoldResult>;
14
+ //# sourceMappingURL=collection-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-write.d.ts","sourceRoot":"","sources":["../../src/scaffold/collection-write.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,8BAA8B;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAWD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,uBAAuB,EAC9B,IAAI,GAAE,8BAAmC,GACxC,OAAO,CAAC,6BAA6B,CAAC,CAgDxC"}
@@ -0,0 +1,59 @@
1
+ import { access, mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import { generateCollectionScaffoldFiles, patchContentConfig, } from './collection.js';
4
+ async function exists(path) {
5
+ try {
6
+ await access(path);
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ export async function writeCollectionScaffold(cwd, input, opts = {}) {
14
+ const written = [];
15
+ const skipped = [];
16
+ const patched = [];
17
+ const files = generateCollectionScaffoldFiles(input, {
18
+ includeBlueprint: !opts.skipBlueprint,
19
+ includeContentConfig: false,
20
+ includeIndex: !opts.skipPages && !!input.indexRoute?.trim(),
21
+ }).filter((file) => !opts.skipPages || !file.path.startsWith('src/pages/'));
22
+ for (const file of files) {
23
+ const abs = join(cwd, file.path);
24
+ if (await exists(abs) && !opts.force) {
25
+ skipped.push(file.path);
26
+ continue;
27
+ }
28
+ await mkdir(dirname(abs), { recursive: true });
29
+ await writeFile(abs, file.content, 'utf8');
30
+ written.push(file.path);
31
+ }
32
+ if (!opts.skipContentConfig) {
33
+ const configPath = join(cwd, 'src/content.config.ts');
34
+ if (await exists(configPath)) {
35
+ const existing = await readFile(configPath, 'utf8');
36
+ const next = patchContentConfig(existing, input);
37
+ if (next !== existing) {
38
+ await writeFile(configPath, next, 'utf8');
39
+ patched.push('src/content.config.ts');
40
+ }
41
+ else if (existing.includes(`${input.handle}:`)) {
42
+ skipped.push('src/content.config.ts (already configured)');
43
+ }
44
+ }
45
+ else {
46
+ const content = generateCollectionScaffoldFiles(input, {
47
+ includeBlueprint: false,
48
+ includeContentConfig: true,
49
+ includeIndex: false,
50
+ })[0];
51
+ if (content) {
52
+ await mkdir(dirname(configPath), { recursive: true });
53
+ await writeFile(configPath, content.content, 'utf8');
54
+ written.push('src/content.config.ts');
55
+ }
56
+ }
57
+ }
58
+ return { written, skipped, patched };
59
+ }