@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.
- package/LICENSE +21 -0
- package/README.md +104 -0
- package/dist/admin/client/active-locale.d.ts +3 -0
- package/dist/admin/client/active-locale.d.ts.map +1 -0
- package/dist/admin/client/active-locale.js +14 -0
- package/dist/admin/client/api.d.ts +14 -0
- package/dist/admin/client/api.d.ts.map +1 -0
- package/dist/admin/client/api.js +26 -0
- package/dist/admin/client/form-from-zod.d.ts +2 -0
- package/dist/admin/client/form-from-zod.d.ts.map +1 -0
- package/dist/admin/client/form-from-zod.js +1 -0
- package/dist/admin/client/live-preview-enabled.d.ts +3 -0
- package/dist/admin/client/live-preview-enabled.d.ts.map +1 -0
- package/dist/admin/client/live-preview-enabled.js +6 -0
- package/dist/cli/collection-scaffold.d.ts +14 -0
- package/dist/cli/collection-scaffold.d.ts.map +1 -0
- package/dist/cli/collection-scaffold.js +44 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +74 -0
- package/dist/cli/migrate.d.ts +5 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +10 -0
- package/dist/cli/platform.d.ts +12 -0
- package/dist/cli/platform.d.ts.map +1 -0
- package/dist/cli/platform.js +38 -0
- package/dist/cli/seed-admin.d.ts +19 -0
- package/dist/cli/seed-admin.d.ts.map +1 -0
- package/dist/cli/seed-admin.js +59 -0
- package/dist/cli/setup.d.ts +29 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +254 -0
- package/dist/core/access.d.ts +5 -0
- package/dist/core/access.d.ts.map +1 -0
- package/dist/core/access.js +6 -0
- package/dist/core/blocks/schema.d.ts +81 -0
- package/dist/core/blocks/schema.d.ts.map +1 -0
- package/dist/core/blocks/schema.js +54 -0
- package/dist/core/blueprints/code-to-definition.d.ts +6 -0
- package/dist/core/blueprints/code-to-definition.d.ts.map +1 -0
- package/dist/core/blueprints/code-to-definition.js +147 -0
- package/dist/core/blueprints/compile.d.ts +10 -0
- package/dist/core/blueprints/compile.d.ts.map +1 -0
- package/dist/core/blueprints/compile.js +153 -0
- package/dist/core/blueprints/define.d.ts +6 -0
- package/dist/core/blueprints/define.d.ts.map +1 -0
- package/dist/core/blueprints/define.js +8 -0
- package/dist/core/blueprints/definition.d.ts +963 -0
- package/dist/core/blueprints/definition.d.ts.map +1 -0
- package/dist/core/blueprints/definition.js +151 -0
- package/dist/core/blueprints/load.d.ts +11 -0
- package/dist/core/blueprints/load.d.ts.map +1 -0
- package/dist/core/blueprints/load.js +137 -0
- package/dist/core/blueprints/mutations.d.ts +8 -0
- package/dist/core/blueprints/mutations.d.ts.map +1 -0
- package/dist/core/blueprints/mutations.js +191 -0
- package/dist/core/blueprints/preview-path.d.ts +15 -0
- package/dist/core/blueprints/preview-path.d.ts.map +1 -0
- package/dist/core/blueprints/preview-path.js +25 -0
- package/dist/core/blueprints/reflect-fields.d.ts +36 -0
- package/dist/core/blueprints/reflect-fields.d.ts.map +1 -0
- package/dist/core/blueprints/reflect-fields.js +229 -0
- package/dist/core/blueprints/registry.d.ts +9 -0
- package/dist/core/blueprints/registry.d.ts.map +1 -0
- package/dist/core/blueprints/registry.js +11 -0
- package/dist/core/blueprints/seed.d.ts +5 -0
- package/dist/core/blueprints/seed.d.ts.map +1 -0
- package/dist/core/blueprints/seed.js +17 -0
- package/dist/core/blueprints/select-helpers.d.ts +10 -0
- package/dist/core/blueprints/select-helpers.d.ts.map +1 -0
- package/dist/core/blueprints/select-helpers.js +26 -0
- package/dist/core/blueprints/seo.d.ts +41 -0
- package/dist/core/blueprints/seo.d.ts.map +1 -0
- package/dist/core/blueprints/seo.js +125 -0
- package/dist/core/blueprints/types.d.ts +60 -0
- package/dist/core/blueprints/types.d.ts.map +1 -0
- package/dist/core/blueprints/types.js +1 -0
- package/dist/core/blueprints/zod-helpers.d.ts +79 -0
- package/dist/core/blueprints/zod-helpers.d.ts.map +1 -0
- package/dist/core/blueprints/zod-helpers.js +72 -0
- package/dist/core/db.d.ts +7 -0
- package/dist/core/db.d.ts.map +1 -0
- package/dist/core/db.js +8 -0
- package/dist/core/errors.d.ts +21 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +29 -0
- package/dist/core/forms/compile.d.ts +9 -0
- package/dist/core/forms/compile.d.ts.map +1 -0
- package/dist/core/forms/compile.js +80 -0
- package/dist/core/forms/definition.d.ts +226 -0
- package/dist/core/forms/definition.d.ts.map +1 -0
- package/dist/core/forms/definition.js +83 -0
- package/dist/core/forms/rate-limit.d.ts +10 -0
- package/dist/core/forms/rate-limit.d.ts.map +1 -0
- package/dist/core/forms/rate-limit.js +31 -0
- package/dist/core/forms/unique.d.ts +5 -0
- package/dist/core/forms/unique.d.ts.map +1 -0
- package/dist/core/forms/unique.js +30 -0
- package/dist/core/globals/compile.d.ts +13 -0
- package/dist/core/globals/compile.d.ts.map +1 -0
- package/dist/core/globals/compile.js +17 -0
- package/dist/core/globals/definition.d.ts +161 -0
- package/dist/core/globals/definition.d.ts.map +1 -0
- package/dist/core/globals/definition.js +23 -0
- package/dist/core/locales.d.ts +14 -0
- package/dist/core/locales.d.ts.map +1 -0
- package/dist/core/locales.js +35 -0
- package/dist/core/migrations.d.ts +3 -0
- package/dist/core/migrations.d.ts.map +1 -0
- package/dist/core/migrations.js +41 -0
- package/dist/core/parse-content.d.ts +14 -0
- package/dist/core/parse-content.d.ts.map +1 -0
- package/dist/core/parse-content.js +68 -0
- package/dist/core/plugins/definition.d.ts +99 -0
- package/dist/core/plugins/definition.d.ts.map +1 -0
- package/dist/core/plugins/definition.js +10 -0
- package/dist/core/preview-content.d.ts +16 -0
- package/dist/core/preview-content.d.ts.map +1 -0
- package/dist/core/preview-content.js +8 -0
- package/dist/core/repos/entries.d.ts +102 -0
- package/dist/core/repos/entries.d.ts.map +1 -0
- package/dist/core/repos/entries.js +393 -0
- package/dist/core/repos/forms.d.ts +82 -0
- package/dist/core/repos/forms.d.ts.map +1 -0
- package/dist/core/repos/forms.js +199 -0
- package/dist/core/repos/globals.d.ts +31 -0
- package/dist/core/repos/globals.d.ts.map +1 -0
- package/dist/core/repos/globals.js +150 -0
- package/dist/core/repos/media.d.ts +39 -0
- package/dist/core/repos/media.d.ts.map +1 -0
- package/dist/core/repos/media.js +81 -0
- package/dist/core/repos/preview-sessions.d.ts +35 -0
- package/dist/core/repos/preview-sessions.d.ts.map +1 -0
- package/dist/core/repos/preview-sessions.js +85 -0
- package/dist/core/repos/revisions.d.ts +24 -0
- package/dist/core/repos/revisions.d.ts.map +1 -0
- package/dist/core/repos/revisions.js +44 -0
- package/dist/core/repos/settings.d.ts +9 -0
- package/dist/core/repos/settings.d.ts.map +1 -0
- package/dist/core/repos/settings.js +21 -0
- package/dist/core/schema.d.ts +2717 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +220 -0
- package/dist/core/sets/compile.d.ts +8 -0
- package/dist/core/sets/compile.d.ts.map +1 -0
- package/dist/core/sets/compile.js +4 -0
- package/dist/core/sets/definition.d.ts +53 -0
- package/dist/core/sets/definition.d.ts.map +1 -0
- package/dist/core/sets/definition.js +7 -0
- package/dist/core/sets/service.d.ts +13 -0
- package/dist/core/sets/service.d.ts.map +1 -0
- package/dist/core/sets/service.js +68 -0
- package/dist/core/sets/validate-tree.d.ts +4 -0
- package/dist/core/sets/validate-tree.d.ts.map +1 -0
- package/dist/core/sets/validate-tree.js +40 -0
- package/dist/core/slug.d.ts +5 -0
- package/dist/core/slug.d.ts.map +1 -0
- package/dist/core/slug.js +25 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/integration/cron.d.ts +4 -0
- package/dist/integration/cron.d.ts.map +1 -0
- package/dist/integration/cron.js +2 -0
- package/dist/integration/index.d.ts +9 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +63 -0
- package/dist/integration/inject-admin-routes.d.ts +12 -0
- package/dist/integration/inject-admin-routes.d.ts.map +1 -0
- package/dist/integration/inject-admin-routes.js +35 -0
- package/dist/integration/inject-routes.d.ts +11 -0
- package/dist/integration/inject-routes.d.ts.map +1 -0
- package/dist/integration/inject-routes.js +51 -0
- package/dist/integration/install-hook.d.ts +2 -0
- package/dist/integration/install-hook.d.ts.map +1 -0
- package/dist/integration/install-hook.js +74 -0
- package/dist/integration/live-preview-middleware-helpers.d.ts +29 -0
- package/dist/integration/live-preview-middleware-helpers.d.ts.map +1 -0
- package/dist/integration/live-preview-middleware-helpers.js +75 -0
- package/dist/integration/loader-binding.d.ts +6 -0
- package/dist/integration/loader-binding.d.ts.map +1 -0
- package/dist/integration/loader-binding.js +15 -0
- package/dist/integration/middleware.d.ts +2 -0
- package/dist/integration/middleware.d.ts.map +1 -0
- package/dist/integration/middleware.js +51 -0
- package/dist/integration/type-gen.d.ts +2 -0
- package/dist/integration/type-gen.d.ts.map +1 -0
- package/dist/integration/type-gen.js +26 -0
- package/dist/integration/vite-plugin-blueprints.d.ts +3 -0
- package/dist/integration/vite-plugin-blueprints.d.ts.map +1 -0
- package/dist/integration/vite-plugin-blueprints.js +33 -0
- package/dist/integration/wrangler-patch.d.ts +6 -0
- package/dist/integration/wrangler-patch.d.ts.map +1 -0
- package/dist/integration/wrangler-patch.js +18 -0
- package/dist/integration.d.ts +3 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +1 -0
- package/dist/loader.d.ts +3 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +1 -0
- package/dist/package-name.d.ts +3 -0
- package/dist/package-name.d.ts.map +1 -0
- package/dist/package-name.js +2 -0
- package/dist/scaffold/collection-write.d.ts +14 -0
- package/dist/scaffold/collection-write.d.ts.map +1 -0
- package/dist/scaffold/collection-write.js +59 -0
- package/dist/scaffold/collection.d.ts +36 -0
- package/dist/scaffold/collection.d.ts.map +1 -0
- package/dist/scaffold/collection.js +231 -0
- package/dist/server/assets/live-preview-bridge.content.d.ts +2 -0
- package/dist/server/assets/live-preview-bridge.content.d.ts.map +1 -0
- package/dist/server/assets/live-preview-bridge.content.js +2 -0
- package/dist/server/better-auth.d.ts +71 -0
- package/dist/server/better-auth.d.ts.map +1 -0
- package/dist/server/better-auth.js +68 -0
- package/dist/server/cf-images.d.ts +12 -0
- package/dist/server/cf-images.d.ts.map +1 -0
- package/dist/server/cf-images.js +27 -0
- package/dist/server/cron.d.ts +9 -0
- package/dist/server/cron.d.ts.map +1 -0
- package/dist/server/cron.js +26 -0
- package/dist/server/email.d.ts +10 -0
- package/dist/server/email.d.ts.map +1 -0
- package/dist/server/email.js +9 -0
- package/dist/server/endpoints/api-auth.d.ts +5 -0
- package/dist/server/endpoints/api-auth.d.ts.map +1 -0
- package/dist/server/endpoints/api-auth.js +7 -0
- package/dist/server/endpoints/api-vulse-blueprints.d.ts +6 -0
- package/dist/server/endpoints/api-vulse-blueprints.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-blueprints.js +19 -0
- package/dist/server/endpoints/api-vulse-entries-locales.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-entries-locales.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-entries-locales.js +9 -0
- package/dist/server/endpoints/api-vulse-entries-move.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-entries-move.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-entries-move.js +5 -0
- package/dist/server/endpoints/api-vulse-entries-publish.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-entries-publish.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-entries-publish.js +5 -0
- package/dist/server/endpoints/api-vulse-entries-tree.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-entries-tree.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-entries-tree.js +5 -0
- package/dist/server/endpoints/api-vulse-entries.d.ts +6 -0
- package/dist/server/endpoints/api-vulse-entries.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-entries.js +19 -0
- package/dist/server/endpoints/api-vulse-form-handle.d.ts +6 -0
- package/dist/server/endpoints/api-vulse-form-handle.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-form-handle.js +27 -0
- package/dist/server/endpoints/api-vulse-form-public.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-form-public.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-form-public.js +5 -0
- package/dist/server/endpoints/api-vulse-form-submit.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-form-submit.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-form-submit.js +5 -0
- package/dist/server/endpoints/api-vulse-form-upload.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-form-upload.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-form-upload.js +5 -0
- package/dist/server/endpoints/api-vulse-forms.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-forms.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-forms.js +9 -0
- package/dist/server/endpoints/api-vulse-globals-handle.d.ts +5 -0
- package/dist/server/endpoints/api-vulse-globals-handle.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-globals-handle.js +19 -0
- package/dist/server/endpoints/api-vulse-globals-public-handle.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-globals-public-handle.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-globals-public-handle.js +5 -0
- package/dist/server/endpoints/api-vulse-globals-public.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-globals-public.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-globals-public.js +5 -0
- package/dist/server/endpoints/api-vulse-globals-value.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-globals-value.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-globals-value.js +7 -0
- package/dist/server/endpoints/api-vulse-globals.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-globals.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-globals.js +9 -0
- package/dist/server/endpoints/api-vulse-media-file.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-media-file.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-media-file.js +5 -0
- package/dist/server/endpoints/api-vulse-media-id.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-media-id.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-media-id.js +9 -0
- package/dist/server/endpoints/api-vulse-media.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-media.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-media.js +9 -0
- package/dist/server/endpoints/api-vulse-preview-bridge.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-preview-bridge.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-preview-bridge.js +9 -0
- package/dist/server/endpoints/api-vulse-preview-sessions-id.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-preview-sessions-id.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-preview-sessions-id.js +10 -0
- package/dist/server/endpoints/api-vulse-preview-sessions.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-preview-sessions.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-preview-sessions.js +5 -0
- package/dist/server/endpoints/api-vulse-preview-start.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-preview-start.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-preview-start.js +5 -0
- package/dist/server/endpoints/api-vulse-preview-stop.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-preview-stop.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-preview-stop.js +5 -0
- package/dist/server/endpoints/api-vulse-revisions-restore.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-revisions-restore.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-revisions-restore.js +5 -0
- package/dist/server/endpoints/api-vulse-revisions.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-revisions.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-revisions.js +5 -0
- package/dist/server/endpoints/api-vulse-search.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-search.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-search.js +5 -0
- package/dist/server/endpoints/api-vulse-sets.d.ts +6 -0
- package/dist/server/endpoints/api-vulse-sets.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-sets.js +19 -0
- package/dist/server/endpoints/api-vulse-settings.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-settings.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-settings.js +9 -0
- package/dist/server/endpoints/api-vulse-users-id.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-users-id.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-users-id.js +9 -0
- package/dist/server/endpoints/api-vulse-users-reset-password.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-users-reset-password.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-users-reset-password.js +5 -0
- package/dist/server/endpoints/api-vulse-users-role.d.ts +4 -0
- package/dist/server/endpoints/api-vulse-users-role.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-users-role.js +6 -0
- package/dist/server/endpoints/api-vulse-users.d.ts +3 -0
- package/dist/server/endpoints/api-vulse-users.d.ts.map +1 -0
- package/dist/server/endpoints/api-vulse-users.js +5 -0
- package/dist/server/endpoints/with-runtime.d.ts +2 -0
- package/dist/server/endpoints/with-runtime.d.ts.map +1 -0
- package/dist/server/endpoints/with-runtime.js +10 -0
- package/dist/server/env.d.ts +16 -0
- package/dist/server/env.d.ts.map +1 -0
- package/dist/server/env.js +9 -0
- package/dist/server/envelope.d.ts +15 -0
- package/dist/server/envelope.d.ts.map +1 -0
- package/dist/server/envelope.js +16 -0
- package/dist/server/forms/email.d.ts +8 -0
- package/dist/server/forms/email.d.ts.map +1 -0
- package/dist/server/forms/email.js +6 -0
- package/dist/server/forms/process-submission.d.ts +8 -0
- package/dist/server/forms/process-submission.d.ts.map +1 -0
- package/dist/server/forms/process-submission.js +75 -0
- package/dist/server/forms/queue.d.ts +8 -0
- package/dist/server/forms/queue.d.ts.map +1 -0
- package/dist/server/forms/queue.js +17 -0
- package/dist/server/forms/templates.d.ts +9 -0
- package/dist/server/forms/templates.d.ts.map +1 -0
- package/dist/server/forms/templates.js +14 -0
- package/dist/server/forms/webhook.d.ts +2 -0
- package/dist/server/forms/webhook.d.ts.map +1 -0
- package/dist/server/forms/webhook.js +17 -0
- package/dist/server/handler.d.ts +17 -0
- package/dist/server/handler.d.ts.map +1 -0
- package/dist/server/handler.js +45 -0
- package/dist/server/image-probe.d.ts +6 -0
- package/dist/server/image-probe.d.ts.map +1 -0
- package/dist/server/image-probe.js +38 -0
- package/dist/server/loader.d.ts +10 -0
- package/dist/server/loader.d.ts.map +1 -0
- package/dist/server/loader.js +42 -0
- package/dist/server/plugins.d.ts +17 -0
- package/dist/server/plugins.d.ts.map +1 -0
- package/dist/server/plugins.js +134 -0
- package/dist/server/preview.d.ts +7 -0
- package/dist/server/preview.d.ts.map +1 -0
- package/dist/server/preview.js +22 -0
- package/dist/server/r2.d.ts +8 -0
- package/dist/server/r2.d.ts.map +1 -0
- package/dist/server/r2.js +9 -0
- package/dist/server/routes/blueprints.d.ts +10 -0
- package/dist/server/routes/blueprints.d.ts.map +1 -0
- package/dist/server/routes/blueprints.js +46 -0
- package/dist/server/routes/entries.d.ts +16 -0
- package/dist/server/routes/entries.d.ts.map +1 -0
- package/dist/server/routes/entries.js +262 -0
- package/dist/server/routes/form-submit.d.ts +10 -0
- package/dist/server/routes/form-submit.d.ts.map +1 -0
- package/dist/server/routes/form-submit.js +155 -0
- package/dist/server/routes/form-upload.d.ts +11 -0
- package/dist/server/routes/form-upload.d.ts.map +1 -0
- package/dist/server/routes/form-upload.js +87 -0
- package/dist/server/routes/forms.d.ts +14 -0
- package/dist/server/routes/forms.d.ts.map +1 -0
- package/dist/server/routes/forms.js +78 -0
- package/dist/server/routes/globals-public.d.ts +6 -0
- package/dist/server/routes/globals-public.d.ts.map +1 -0
- package/dist/server/routes/globals-public.js +30 -0
- package/dist/server/routes/globals.d.ts +11 -0
- package/dist/server/routes/globals.d.ts.map +1 -0
- package/dist/server/routes/globals.js +84 -0
- package/dist/server/routes/media.d.ts +23 -0
- package/dist/server/routes/media.d.ts.map +1 -0
- package/dist/server/routes/media.js +129 -0
- package/dist/server/routes/preview-sessions.d.ts +9 -0
- package/dist/server/routes/preview-sessions.d.ts.map +1 -0
- package/dist/server/routes/preview-sessions.js +74 -0
- package/dist/server/routes/preview.d.ts +6 -0
- package/dist/server/routes/preview.d.ts.map +1 -0
- package/dist/server/routes/preview.js +37 -0
- package/dist/server/routes/revisions.d.ts +7 -0
- package/dist/server/routes/revisions.d.ts.map +1 -0
- package/dist/server/routes/revisions.js +26 -0
- package/dist/server/routes/search.d.ts +6 -0
- package/dist/server/routes/search.d.ts.map +1 -0
- package/dist/server/routes/search.js +28 -0
- package/dist/server/routes/sets.d.ts +10 -0
- package/dist/server/routes/sets.d.ts.map +1 -0
- package/dist/server/routes/sets.js +33 -0
- package/dist/server/routes/settings.d.ts +7 -0
- package/dist/server/routes/settings.d.ts.map +1 -0
- package/dist/server/routes/settings.js +21 -0
- package/dist/server/routes/users.d.ts +10 -0
- package/dist/server/routes/users.d.ts.map +1 -0
- package/dist/server/routes/users.js +113 -0
- package/dist/server/runtime.d.ts +49 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +69 -0
- package/dist/server/sdk/collections.d.ts +25 -0
- package/dist/server/sdk/collections.d.ts.map +1 -0
- package/dist/server/sdk/collections.js +76 -0
- package/dist/server/sdk/index.d.ts +45 -0
- package/dist/server/sdk/index.d.ts.map +1 -0
- package/dist/server/sdk/index.js +13 -0
- package/dist/server/sdk/media.d.ts +7 -0
- package/dist/server/sdk/media.d.ts.map +1 -0
- package/dist/server/sdk/media.js +9 -0
- package/dist/server/sdk/search.d.ts +19 -0
- package/dist/server/sdk/search.d.ts.map +1 -0
- package/dist/server/sdk/search.js +58 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +6 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/migrations/0000_init.sql +114 -0
- package/migrations/0001_collections_sets.sql +21 -0
- package/migrations/0003_fts.sql +22 -0
- package/migrations/0004_forms.sql +58 -0
- package/migrations/0005_globals.sql +16 -0
- package/migrations/0006_preview_sessions.sql +16 -0
- package/migrations/meta/0000_snapshot.json +672 -0
- package/migrations/meta/_journal.json +13 -0
- package/package.json +130 -0
- package/src/client/BlockRenderer.astro +40 -0
- package/src/client/BlockRenderer.vue +42 -0
- package/src/client/Node.vue +21 -0
- package/src/client/ProseMirrorRenderer.vue +31 -0
- package/src/client/auth.ts +28 -0
- package/src/client/blocks/Blockquote.vue +12 -0
- package/src/client/blocks/BulletList.vue +12 -0
- package/src/client/blocks/CodeBlock.vue +12 -0
- package/src/client/blocks/Emoji.vue +14 -0
- package/src/client/blocks/HardBreak.vue +1 -0
- package/src/client/blocks/Heading.vue +17 -0
- package/src/client/blocks/ListItem.vue +12 -0
- package/src/client/blocks/OrderedList.vue +12 -0
- package/src/client/blocks/Paragraph.vue +12 -0
- package/src/client/blocks/Text.vue +33 -0
- package/src/client/blocks/VulseAccordion.vue +16 -0
- package/src/client/blocks/VulseAccordionGroup.vue +12 -0
- package/src/client/blocks/VulseCallout.vue +14 -0
- package/src/client/blocks/VulseIframe.vue +65 -0
- package/src/client/blocks/VulseImage.vue +30 -0
- package/src/client/blocks/VulseSet.vue +26 -0
- package/src/client/blocks/VulseVideo.vue +18 -0
- package/src/client/components/ForgotPasswordForm.astro +71 -0
- package/src/client/components/FormRenderer.astro +40 -0
- package/src/client/components/ResetPasswordForm.astro +72 -0
- package/src/client/components/SessionGuard.astro +27 -0
- package/src/client/components/SignInForm.astro +57 -0
- package/src/client/components/SignOutButton.astro +22 -0
- package/src/client/components/SignUpForm.astro +61 -0
- package/src/client/components/VulseImage.vue +25 -0
- package/src/client/embed.ts +52 -0
- package/src/client/index.ts +2 -0
- package/src/client/inject.ts +4 -0
- package/src/client/live-preview-bridge.ts +20 -0
- package/src/client/pm-defaults.ts +38 -0
- package/src/client/pm-types.ts +21 -0
- package/src/client/render-pm-html.ts +154 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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';
|
package/dist/loader.d.ts
ADDED
|
@@ -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 @@
|
|
|
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,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
|
+
}
|