@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":"definition.d.ts","sourceRoot":"","sources":["../../../src/core/blueprints/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,WAAW,CAAA;AAG7B,eAAO,MAAM,kBAAkB;;;mBAG7B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;2BAQ1B,CAAA;AAkDF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAA4D,CAAA;AAEnG,eAAO,MAAM,qBAAqB;;;kBAKrB,CAAA;AAEb,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOtC,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI9B,CAAA;AAsBF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAA+C,CAAA;AAEzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOhC,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;;iBAQlC,CAAA;AAmCF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBACkC,CAAA;AAExE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AACvD,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE1C,CAAA;AACF,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAER,CAAA;AACzC,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AACvF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAA"}
@@ -0,0 +1,151 @@
1
+ import { z } from 'astro/zod';
2
+ import { SeoFieldMappingSchema } from './seo.js';
3
+ export const SelectOptionSchema = z.union([
4
+ z.string().min(1),
5
+ z.object({ key: z.string().min(1), label: z.string().min(1) }),
6
+ ]);
7
+ export const LinkValueSchema = z.discriminatedUnion('type', [
8
+ z.object({ type: z.literal('url'), url: z.string().min(1) }),
9
+ z.object({
10
+ type: z.literal('entry'),
11
+ entryId: z.string().min(1),
12
+ collection: z.string().min(1),
13
+ }),
14
+ z.object({ type: z.literal('first-child') }),
15
+ ]);
16
+ const textFieldUiSchema = z.object({ kind: z.literal('text') });
17
+ const textareaFieldUiSchema = z.object({ kind: z.literal('textarea') });
18
+ const blocksFieldUiSchema = z.object({
19
+ kind: z.literal('blocks'),
20
+ sets: z.array(z.string().regex(/^[a-z][a-z0-9_-]*$/)).optional(),
21
+ });
22
+ const dateFieldUiSchema = z.object({ kind: z.literal('date') });
23
+ const booleanFieldUiSchema = z.object({ kind: z.literal('boolean') });
24
+ const selectFieldUiSchema = z.object({
25
+ kind: z.literal('select'),
26
+ options: z.array(SelectOptionSchema).min(1),
27
+ multiple: z.boolean().optional(),
28
+ placeholder: z.string().optional(),
29
+ clearable: z.boolean().optional(),
30
+ });
31
+ const relationshipFieldUiSchema = z.object({
32
+ kind: z.literal('relationship'),
33
+ to: z.string().min(1),
34
+ });
35
+ const entryFieldUiSchema = z.object({
36
+ kind: z.literal('entry'),
37
+ collections: z.array(z.string().min(1)).min(1),
38
+ });
39
+ const entriesFieldUiSchema = z.object({
40
+ kind: z.literal('entries'),
41
+ collections: z.array(z.string().min(1)).min(1),
42
+ max: z.number().int().positive().optional(),
43
+ });
44
+ const linkFieldUiSchema = z.object({
45
+ kind: z.literal('link'),
46
+ collections: z.array(z.string().min(1)).optional(),
47
+ });
48
+ const assetFieldUiSchema = z.object({ kind: z.literal('asset') });
49
+ const nonReplicatorFieldUiSchemas = [
50
+ textFieldUiSchema,
51
+ textareaFieldUiSchema,
52
+ blocksFieldUiSchema,
53
+ dateFieldUiSchema,
54
+ booleanFieldUiSchema,
55
+ selectFieldUiSchema,
56
+ relationshipFieldUiSchema,
57
+ entryFieldUiSchema,
58
+ entriesFieldUiSchema,
59
+ linkFieldUiSchema,
60
+ assetFieldUiSchema,
61
+ ];
62
+ export const NonReplicatorFieldUiSchema = z.discriminatedUnion('kind', nonReplicatorFieldUiSchemas);
63
+ export const FieldValidationSchema = z
64
+ .object({
65
+ min: z.number().int().nonnegative().optional(),
66
+ max: z.number().int().positive().optional(),
67
+ })
68
+ .optional();
69
+ export const NestedFieldDefinitionSchema = z.object({
70
+ name: z.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/),
71
+ label: z.string().optional(),
72
+ ui: NonReplicatorFieldUiSchema,
73
+ optional: z.boolean(),
74
+ default: z.unknown().optional(),
75
+ validation: FieldValidationSchema,
76
+ });
77
+ export const ReplicatorSetSchema = z.object({
78
+ name: z.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/),
79
+ label: z.string().optional(),
80
+ fields: z.array(NestedFieldDefinitionSchema).min(1),
81
+ });
82
+ const replicatorFieldUiSchema = z.object({
83
+ kind: z.literal('replicator'),
84
+ sets: z.array(ReplicatorSetSchema).min(1),
85
+ });
86
+ const gridFieldUiSchema = z.object({
87
+ kind: z.literal('grid'),
88
+ fields: z.array(NestedFieldDefinitionSchema).min(1),
89
+ minRows: z.number().int().nonnegative().optional(),
90
+ maxRows: z.number().int().positive().optional(),
91
+ mode: z.enum(['table', 'stacked']).optional(),
92
+ addLabel: z.string().optional(),
93
+ });
94
+ const fieldUiSchemas = [
95
+ ...nonReplicatorFieldUiSchemas,
96
+ replicatorFieldUiSchema,
97
+ gridFieldUiSchema,
98
+ ];
99
+ export const FieldUiSchema = z.discriminatedUnion('kind', fieldUiSchemas);
100
+ export const FieldDefinitionSchema = z.object({
101
+ name: z.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/),
102
+ label: z.string().optional(),
103
+ ui: FieldUiSchema,
104
+ optional: z.boolean(),
105
+ default: z.unknown().optional(),
106
+ validation: FieldValidationSchema,
107
+ });
108
+ export const PreviewDefinitionSchema = z.object({
109
+ path: z
110
+ .string()
111
+ .min(1)
112
+ .refine((p) => p.startsWith('/'), 'path must start with /')
113
+ .refine((p) => p.includes('{slug}'), 'path must include {slug}'),
114
+ rootSelector: z.string().min(1).optional(),
115
+ live: z.boolean().optional(),
116
+ });
117
+ const BlueprintDefinitionObjectSchema = z.object({
118
+ handle: z.string().regex(/^[a-z][a-z0-9_-]*$/),
119
+ label: z.string().min(1),
120
+ singleton: z.boolean(),
121
+ tree: z.boolean().optional(),
122
+ maxDepth: z.number().int().positive().optional(),
123
+ drafts: z.boolean().optional(),
124
+ seo: z.boolean().optional(),
125
+ seoMapping: SeoFieldMappingSchema.optional(),
126
+ preview: PreviewDefinitionSchema.optional(),
127
+ fields: z.array(FieldDefinitionSchema).min(1),
128
+ });
129
+ function checkBlueprintConstraints(d, ctx) {
130
+ if (d.singleton && d.tree) {
131
+ ctx.addIssue({
132
+ code: 'custom',
133
+ message: 'A blueprint cannot be both singleton and tree-structured.',
134
+ path: ['tree'],
135
+ });
136
+ }
137
+ if (d.maxDepth !== undefined && !d.tree) {
138
+ ctx.addIssue({
139
+ code: 'custom',
140
+ message: 'maxDepth requires tree: true.',
141
+ path: ['maxDepth'],
142
+ });
143
+ }
144
+ }
145
+ export const BlueprintDefinitionSchema = BlueprintDefinitionObjectSchema.superRefine(checkBlueprintConstraints);
146
+ export const FieldDefinitionWithRenameSchema = FieldDefinitionSchema.extend({
147
+ previousName: z.string().optional(),
148
+ });
149
+ export const BlueprintDefinitionWithRenamesSchema = BlueprintDefinitionObjectSchema.extend({
150
+ fields: z.array(FieldDefinitionWithRenameSchema).min(1),
151
+ }).superRefine(checkBlueprintConstraints);
@@ -0,0 +1,11 @@
1
+ import { BlueprintRegistry } from './registry.js';
2
+ import type { Blueprint } from './types.js';
3
+ import type { VulseDb } from '../db.js';
4
+ export declare function registryFromDb(db: VulseDb): Promise<BlueprintRegistry>;
5
+ /** Load registry from D1 when available, otherwise code-only blueprints. */
6
+ export declare function registryForRequest(db?: VulseDb): Promise<BlueprintRegistry>;
7
+ export declare function registryFromUserCollections(db?: VulseDb): Promise<BlueprintRegistry>;
8
+ /** For tests: bypass blueprint loading with explicit blueprints. */
9
+ export declare function _seedRegistry(blueprints: Blueprint[]): void;
10
+ export declare function _resetRegistry(): void;
11
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/core/blueprints/load.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAoEvC,wBAAsB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiC5E;AAED,4EAA4E;AAC5E,wBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAcjF;AAED,wBAAsB,2BAA2B,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAS1F;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAG3D;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
@@ -0,0 +1,137 @@
1
+ import { BlueprintRegistry } from './registry.js';
2
+ import { createDb } from '../db.js';
3
+ import { compileBlueprintSchema } from './compile.js';
4
+ import { listBlueprintDefinitions } from './mutations.js';
5
+ import { seedCodeBlueprints } from './seed.js';
6
+ import { loadCompiledSets } from '../sets/service.js';
7
+ import { toPreviewConfig } from './preview-path.js';
8
+ import { applySeoToSchema } from './seo.js';
9
+ let registryCache = null;
10
+ let seededBlueprints = null;
11
+ async function loadBlueprintModules() {
12
+ if (seededBlueprints)
13
+ return seededBlueprints;
14
+ try {
15
+ const mod = await import('virtual:vulse-blueprints');
16
+ return mod.default;
17
+ }
18
+ catch {
19
+ return [];
20
+ }
21
+ }
22
+ function finalizeBlueprint(bp) {
23
+ const seo = bp.seo === true;
24
+ if (!seo)
25
+ return bp;
26
+ return {
27
+ ...bp,
28
+ seo: true,
29
+ schema: applySeoToSchema(bp.schema),
30
+ };
31
+ }
32
+ function normalizeSeoMapping(mapping) {
33
+ if (!mapping)
34
+ return undefined;
35
+ const out = {};
36
+ if (mapping.metaTitle !== undefined)
37
+ out.metaTitle = mapping.metaTitle;
38
+ if (mapping.metaDescription !== undefined)
39
+ out.metaDescription = mapping.metaDescription;
40
+ if (mapping.ogImage !== undefined)
41
+ out.ogImage = mapping.ogImage;
42
+ return Object.keys(out).length ? out : undefined;
43
+ }
44
+ function mergeAdmin(compiled, code) {
45
+ const admin = code?.admin ?? compiled.admin;
46
+ const seoMapping = normalizeSeoMapping(code?.admin?.seoMapping ?? compiled.definition?.seoMapping);
47
+ if (!seoMapping)
48
+ return admin;
49
+ return { ...admin, seoMapping };
50
+ }
51
+ function mergeBlueprint(compiled, code) {
52
+ const rawPreview = code?.preview ?? compiled.preview;
53
+ const preview = rawPreview ? toPreviewConfig(rawPreview) : undefined;
54
+ const seo = code?.seo ?? compiled.seo;
55
+ return finalizeBlueprint({
56
+ ...compiled,
57
+ admin: mergeAdmin(compiled, code),
58
+ ...(code?.access ? { access: code.access } : {}),
59
+ ...(preview ? { preview } : {}),
60
+ ...(seo ? { seo: true } : {}),
61
+ });
62
+ }
63
+ function inferAdmin(def) {
64
+ const titleField = def?.fields.find((f) => f.ui.kind === 'text')?.name ?? def?.fields[0]?.name ?? 'id';
65
+ return { titleField, listColumns: [titleField] };
66
+ }
67
+ export async function registryFromDb(db) {
68
+ const codeBlueprints = await loadBlueprintModules();
69
+ await seedCodeBlueprints(db, codeBlueprints);
70
+ const sets = await loadCompiledSets(db);
71
+ const codeByName = new Map(codeBlueprints.map((bp) => [bp.name, bp]));
72
+ const reg = new BlueprintRegistry();
73
+ const definitions = await listBlueprintDefinitions(db);
74
+ for (const def of definitions) {
75
+ const schema = compileBlueprintSchema(def, { sets });
76
+ const code = codeByName.get(def.handle);
77
+ const bp = mergeBlueprint({
78
+ name: def.handle,
79
+ label: def.label,
80
+ schema,
81
+ admin: code?.admin ?? inferAdmin(def),
82
+ singleton: def.singleton,
83
+ fields: def.fields,
84
+ definition: def,
85
+ ...(def.tree !== undefined ? { tree: def.tree } : {}),
86
+ ...(def.maxDepth !== undefined ? { maxDepth: def.maxDepth } : {}),
87
+ ...(def.drafts !== undefined ? { drafts: def.drafts } : {}),
88
+ ...(def.seo !== undefined ? { seo: def.seo } : {}),
89
+ ...(def.preview ? { preview: toPreviewConfig(def.preview) } : {}),
90
+ }, code);
91
+ reg.register(bp);
92
+ }
93
+ for (const code of codeBlueprints) {
94
+ if (!reg.has(code.name))
95
+ reg.register(finalizeBlueprint(code));
96
+ }
97
+ return reg;
98
+ }
99
+ /** Load registry from D1 when available, otherwise code-only blueprints. */
100
+ export async function registryForRequest(db) {
101
+ if (db) {
102
+ return registryFromDb(db);
103
+ }
104
+ if (registryCache)
105
+ return registryCache;
106
+ try {
107
+ const { getRuntimeEnv } = await import('../../server/env.js');
108
+ const env = getRuntimeEnv();
109
+ const conn = createDb(env.DB);
110
+ registryCache = await registryFromDb(conn);
111
+ return registryCache;
112
+ }
113
+ catch {
114
+ return registryFromUserCollections();
115
+ }
116
+ }
117
+ export async function registryFromUserCollections(db) {
118
+ if (db)
119
+ return registryFromDb(db);
120
+ if (registryCache)
121
+ return registryCache;
122
+ const reg = new BlueprintRegistry();
123
+ for (const bp of await loadBlueprintModules()) {
124
+ reg.register(finalizeBlueprint(bp));
125
+ }
126
+ registryCache = reg;
127
+ return reg;
128
+ }
129
+ /** For tests: bypass blueprint loading with explicit blueprints. */
130
+ export function _seedRegistry(blueprints) {
131
+ seededBlueprints = blueprints;
132
+ registryCache = null;
133
+ }
134
+ export function _resetRegistry() {
135
+ registryCache = null;
136
+ seededBlueprints = null;
137
+ }
@@ -0,0 +1,8 @@
1
+ import type { VulseDb } from '../db.js';
2
+ import { type BlueprintDefinition, type BlueprintDefinitionWithRenames } from './definition.js';
3
+ export declare function createBlueprint(db: VulseDb, input: BlueprintDefinition): Promise<BlueprintDefinition>;
4
+ export declare function updateBlueprint(db: VulseDb, handle: string, input: BlueprintDefinitionWithRenames): Promise<BlueprintDefinition>;
5
+ export declare function deleteBlueprint(db: VulseDb, handle: string): Promise<void>;
6
+ export declare function listBlueprintDefinitions(db: VulseDb): Promise<BlueprintDefinition[]>;
7
+ export declare function getBlueprintDefinition(db: VulseDb, handle: string): Promise<BlueprintDefinition | null>;
8
+ //# sourceMappingURL=mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../../../src/core/blueprints/mutations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAIvC,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,8BAA8B,EAKpC,MAAM,iBAAiB,CAAA;AAExB,wBAAsB,eAAe,CACnC,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAe9B;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAyD9B;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAED,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAK1F;AAED,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAO7G"}
@@ -0,0 +1,191 @@
1
+ import { asc, eq, sql } from 'drizzle-orm';
2
+ import { vulseCollections } from '../schema.js';
3
+ import { NotFoundError, ValidationError } from '../errors.js';
4
+ import { hashDefinition } from './compile.js';
5
+ import { BlueprintDefinitionSchema, BlueprintDefinitionWithRenamesSchema, } from './definition.js';
6
+ export async function createBlueprint(db, input) {
7
+ const def = await validateNew(db, input);
8
+ const now = Date.now();
9
+ await db.insert(vulseCollections).values({
10
+ handle: def.handle,
11
+ label: def.label,
12
+ definition: def,
13
+ blueprintHash: hashDefinition(def),
14
+ singleton: def.singleton,
15
+ tree: def.tree === true,
16
+ drafts: def.drafts === true,
17
+ createdAt: new Date(now),
18
+ updatedAt: new Date(now),
19
+ });
20
+ return def;
21
+ }
22
+ export async function updateBlueprint(db, handle, input) {
23
+ const existing = await loadDefinition(db, handle);
24
+ if (!existing)
25
+ throw new NotFoundError(`blueprint not found: ${handle}`);
26
+ const incoming = { ...input, handle };
27
+ const parsed = parseOrThrow(BlueprintDefinitionWithRenamesSchema, incoming);
28
+ const oldNames = new Set(existing.fields.map((f) => f.name));
29
+ for (const f of parsed.fields) {
30
+ if (f.previousName !== undefined && !oldNames.has(f.previousName)) {
31
+ throw new ValidationError(`previousName '${f.previousName}' was not in the prior definition`, {
32
+ issues: [{ path: ['fields', parsed.fields.indexOf(f), 'previousName'] }],
33
+ });
34
+ }
35
+ }
36
+ await ensureValidCrossField(db, parsed, handle);
37
+ const renames = computeRenames(parsed.fields);
38
+ const canonical = stripRenames(parsed);
39
+ for (const [oldName, newName] of renames) {
40
+ // Per-locale content lives in `vulse_entry_locales`. Rename keys in both
41
+ // the live `content` and the in-flight `draft_content` when present.
42
+ await db.run(sql `
43
+ UPDATE vulse_entry_locales
44
+ SET content = json_set(
45
+ json_remove(content, '$.' || ${oldName}),
46
+ '$.' || ${newName},
47
+ json_extract(content, '$.' || ${oldName})
48
+ )
49
+ WHERE collection = ${handle}
50
+ AND json_extract(content, '$.' || ${oldName}) IS NOT NULL
51
+ `);
52
+ await db.run(sql `
53
+ UPDATE vulse_entry_locales
54
+ SET draft_content = json_set(
55
+ json_remove(draft_content, '$.' || ${oldName}),
56
+ '$.' || ${newName},
57
+ json_extract(draft_content, '$.' || ${oldName})
58
+ )
59
+ WHERE collection = ${handle}
60
+ AND draft_content IS NOT NULL
61
+ AND json_extract(draft_content, '$.' || ${oldName}) IS NOT NULL
62
+ `);
63
+ }
64
+ await db.update(vulseCollections).set({
65
+ label: canonical.label,
66
+ definition: canonical,
67
+ blueprintHash: hashDefinition(canonical),
68
+ singleton: canonical.singleton,
69
+ tree: canonical.tree === true,
70
+ drafts: canonical.drafts === true,
71
+ updatedAt: new Date(),
72
+ }).where(eq(vulseCollections.handle, handle));
73
+ return canonical;
74
+ }
75
+ export async function deleteBlueprint(db, handle) {
76
+ const existing = await db.select({ handle: vulseCollections.handle })
77
+ .from(vulseCollections)
78
+ .where(eq(vulseCollections.handle, handle))
79
+ .get();
80
+ if (!existing)
81
+ throw new NotFoundError(`blueprint not found: ${handle}`);
82
+ await db.delete(vulseCollections).where(eq(vulseCollections.handle, handle));
83
+ }
84
+ export async function listBlueprintDefinitions(db) {
85
+ const rows = await db.select({ definition: vulseCollections.definition })
86
+ .from(vulseCollections)
87
+ .orderBy(asc(vulseCollections.createdAt));
88
+ return rows.map((r) => BlueprintDefinitionSchema.parse(r.definition));
89
+ }
90
+ export async function getBlueprintDefinition(db, handle) {
91
+ const row = await db.select({ definition: vulseCollections.definition })
92
+ .from(vulseCollections)
93
+ .where(eq(vulseCollections.handle, handle))
94
+ .get();
95
+ if (!row)
96
+ return null;
97
+ return BlueprintDefinitionSchema.parse(row.definition);
98
+ }
99
+ async function validateNew(db, input) {
100
+ const def = parseOrThrow(BlueprintDefinitionSchema, input);
101
+ const dup = await db.select({ handle: vulseCollections.handle })
102
+ .from(vulseCollections)
103
+ .where(eq(vulseCollections.handle, def.handle))
104
+ .get();
105
+ if (dup) {
106
+ throw new ValidationError(`handle '${def.handle}' already exists`, { issues: [{ path: ['handle'] }] });
107
+ }
108
+ await ensureValidCrossField(db, def, null);
109
+ return def;
110
+ }
111
+ async function ensureValidCrossField(db, def, selfHandle) {
112
+ await ensureValidFieldList(db, def.fields, ['fields'], selfHandle ?? def.handle);
113
+ }
114
+ async function ensureValidFieldList(db, fields, path, currentHandle) {
115
+ const seen = new Set();
116
+ for (let i = 0; i < fields.length; i++) {
117
+ const f = fields[i];
118
+ if (seen.has(f.name)) {
119
+ throw new ValidationError(`duplicate field name '${f.name}'`, { issues: [{ path: [...path, i, 'name'] }] });
120
+ }
121
+ seen.add(f.name);
122
+ }
123
+ for (let i = 0; i < fields.length; i++) {
124
+ const f = fields[i];
125
+ if (f.ui.kind === 'relationship' && 'to' in f.ui) {
126
+ if (f.ui.to === currentHandle)
127
+ continue;
128
+ const target = await db.select({ handle: vulseCollections.handle })
129
+ .from(vulseCollections)
130
+ .where(eq(vulseCollections.handle, f.ui.to))
131
+ .get();
132
+ if (!target) {
133
+ throw new ValidationError(`relationship target '${f.ui.to}' does not exist`, {
134
+ issues: [{ path: [...path, i, 'ui', 'to'] }],
135
+ });
136
+ }
137
+ }
138
+ if (f.ui.kind === 'replicator' && 'sets' in f.ui) {
139
+ const seenSets = new Set();
140
+ for (let j = 0; j < f.ui.sets.length; j++) {
141
+ const set = f.ui.sets[j];
142
+ if (seenSets.has(set.name)) {
143
+ throw new ValidationError(`duplicate set name '${set.name}'`, {
144
+ issues: [{ path: [...path, i, 'ui', 'sets', j, 'name'] }],
145
+ });
146
+ }
147
+ seenSets.add(set.name);
148
+ await ensureValidFieldList(db, set.fields, [...path, i, 'ui', 'sets', j, 'fields'], currentHandle);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ function computeRenames(fields) {
154
+ const out = [];
155
+ for (const f of fields) {
156
+ if (f.previousName !== undefined && f.previousName !== f.name) {
157
+ out.push([f.previousName, f.name]);
158
+ }
159
+ }
160
+ return out;
161
+ }
162
+ function stripRenames(def) {
163
+ return {
164
+ handle: def.handle,
165
+ label: def.label,
166
+ singleton: def.singleton,
167
+ ...(def.tree !== undefined ? { tree: def.tree } : {}),
168
+ ...(def.maxDepth !== undefined ? { maxDepth: def.maxDepth } : {}),
169
+ ...(def.drafts !== undefined ? { drafts: def.drafts } : {}),
170
+ ...(def.seo !== undefined ? { seo: def.seo } : {}),
171
+ ...(def.seoMapping !== undefined ? { seoMapping: def.seoMapping } : {}),
172
+ ...(def.preview !== undefined ? { preview: def.preview } : {}),
173
+ fields: def.fields.map(({ previousName: _previousName, ...rest }) => rest),
174
+ };
175
+ }
176
+ async function loadDefinition(db, handle) {
177
+ const row = await db.select({ definition: vulseCollections.definition })
178
+ .from(vulseCollections)
179
+ .where(eq(vulseCollections.handle, handle))
180
+ .get();
181
+ if (!row)
182
+ return null;
183
+ return BlueprintDefinitionSchema.parse(row.definition);
184
+ }
185
+ function parseOrThrow(schema, value) {
186
+ const result = schema.safeParse(value);
187
+ if (!result.success) {
188
+ throw new ValidationError('Validation failed', { issues: result.error.issues });
189
+ }
190
+ return result.data;
191
+ }
@@ -0,0 +1,15 @@
1
+ import type { PreviewDefinition } from './definition.js';
2
+ import type { PreviewConfig } from './types.js';
3
+ /** Normalize preview config for Blueprint types (`exactOptionalPropertyTypes`). */
4
+ export declare function toPreviewConfig(preview: PreviewDefinition | PreviewConfig): PreviewConfig;
5
+ /** Default public URL template for a collection's entry pages. */
6
+ export declare function defaultPreviewPath(collectionHandle: string): string;
7
+ export declare function resolvePreviewPath(bp: {
8
+ name: string;
9
+ preview?: PreviewConfig | null;
10
+ }): string;
11
+ export declare function resolvePreviewConfig(bp: {
12
+ name: string;
13
+ preview?: PreviewConfig | null;
14
+ }): PreviewConfig;
15
+ //# sourceMappingURL=preview-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-path.d.ts","sourceRoot":"","sources":["../../../src/core/blueprints/preview-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAMzF;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAE/F;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAC/B,GAAG,aAAa,CAOhB"}
@@ -0,0 +1,25 @@
1
+ /** Normalize preview config for Blueprint types (`exactOptionalPropertyTypes`). */
2
+ export function toPreviewConfig(preview) {
3
+ return {
4
+ path: preview.path,
5
+ ...(preview.rootSelector !== undefined ? { rootSelector: preview.rootSelector } : {}),
6
+ ...(preview.live !== undefined ? { live: preview.live } : {}),
7
+ };
8
+ }
9
+ /** Default public URL template for a collection's entry pages. */
10
+ export function defaultPreviewPath(collectionHandle) {
11
+ if (!collectionHandle || collectionHandle === 'page')
12
+ return '/{slug}';
13
+ return `/${collectionHandle}/{slug}`;
14
+ }
15
+ export function resolvePreviewPath(bp) {
16
+ return bp.preview?.path ?? defaultPreviewPath(bp.name);
17
+ }
18
+ export function resolvePreviewConfig(bp) {
19
+ const path = resolvePreviewPath(bp);
20
+ return {
21
+ path,
22
+ ...(bp.preview?.rootSelector ? { rootSelector: bp.preview.rootSelector } : {}),
23
+ ...(bp.preview?.live === false ? { live: false } : {}),
24
+ };
25
+ }
@@ -0,0 +1,36 @@
1
+ import { z } from 'astro/zod';
2
+ import type { Blueprint } from './types.js';
3
+ import type { FieldDefinition, ReplicatorSetDefinition } from './definition.js';
4
+ export type Widget = 'text' | 'textarea' | 'number' | 'bool' | 'date' | 'enum' | 'ref' | 'entry' | 'entries' | 'link' | 'media' | 'blocks' | 'object' | 'repeater' | 'grid' | 'replicator';
5
+ export interface FieldDescriptor {
6
+ path: string;
7
+ widget: Widget;
8
+ required: boolean;
9
+ description?: string;
10
+ blocksSets?: string[];
11
+ replicatorSets?: ReplicatorSetDefinition[];
12
+ label?: string;
13
+ options?: string[];
14
+ selectOptions?: {
15
+ key: string;
16
+ label: string;
17
+ }[];
18
+ selectMultiple?: boolean;
19
+ selectPlaceholder?: string;
20
+ selectClearable?: boolean;
21
+ refTarget?: string;
22
+ entryCollections?: string[];
23
+ entriesCollections?: string[];
24
+ entriesMax?: number;
25
+ linkCollections?: string[];
26
+ gridMinRows?: number;
27
+ gridMaxRows?: number;
28
+ gridMode?: 'table' | 'stacked';
29
+ gridAddLabel?: string;
30
+ children?: FieldDescriptor[];
31
+ itemFields?: FieldDescriptor[];
32
+ }
33
+ export declare function reflectFields(schema: z.ZodObject<any>): FieldDescriptor[];
34
+ export declare function fieldDescriptorsFromDefinitions(fields: FieldDefinition[]): FieldDescriptor[];
35
+ export declare function fieldDescriptorsFromBlueprint(bp: Blueprint): FieldDescriptor[];
36
+ //# sourceMappingURL=reflect-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect-fields.d.ts","sourceRoot":"","sources":["../../../src/core/blueprints/reflect-fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAmB,MAAM,WAAW,CAAA;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EACV,eAAe,EAGf,uBAAuB,EAExB,MAAM,iBAAiB,CAAA;AAIxB,MAAM,MAAM,MAAM,GACd,MAAM,GACN,UAAU,GACV,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,GACN,YAAY,CAAA;AAEhB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,CAAC,EAAE,uBAAuB,EAAE,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAChD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IAC5B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;CAC/B;AAgDD,wBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,eAAe,EAAE,CAGzE;AAmGD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAE5F;AAED,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,SAAS,GAAG,eAAe,EAAE,CAK9E"}