@aotter/mantle 0.1.5-alpha.1 → 0.2.0-alpha.10
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/README.md +166 -298
- package/dist/auth/adapter.d.ts +32 -0
- package/dist/auth/adapter.js +288 -0
- package/dist/auth/admin.d.ts +3 -0
- package/dist/auth/admin.js +21 -0
- package/dist/auth/caller.d.ts +86 -0
- package/dist/auth/caller.js +155 -0
- package/dist/auth/hardening.d.ts +24 -0
- package/dist/auth/hardening.js +40 -0
- package/dist/auth/identity.d.ts +121 -0
- package/dist/auth/identity.js +203 -0
- package/dist/auth/oauth.d.ts +63 -0
- package/dist/auth/oauth.js +217 -0
- package/dist/auth/resource-seeds.js +10 -0
- package/dist/auth/routes.d.ts +32 -0
- package/dist/auth/routes.js +226 -0
- package/dist/build/compiler.d.ts +721 -0
- package/dist/build/compiler.js +7029 -0
- package/dist/build/spec/domain/model/ManifestGrammar.d.ts +439 -0
- package/dist/build/spec/domain/model/RuntimePlan.d.ts +168 -0
- package/dist/build/spec/domain/model/SqlIr.d.ts +129 -0
- package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
- package/dist/build/spec/domain/service/PlanFingerprint.d.ts +7 -0
- package/dist/build/spec/kernel/diagnostic.d.ts +108 -0
- package/dist/bun/assets.d.ts +2 -0
- package/dist/bun/assets.js +24 -0
- package/dist/domain/adminOrder.js +24 -0
- package/dist/domain/columns.js +57 -0
- package/dist/domain/describe/chunk-ZVXBGP7Y.js +424 -0
- package/dist/domain/describe/index.d.ts +58 -0
- package/dist/domain/describe/index.js +115 -0
- package/dist/domain/describe/target-hash.d.ts +8 -0
- package/dist/domain/describe/target-hash.js +12 -0
- package/dist/domain/describe/targets.d.ts +40 -0
- package/dist/domain/entry.js +33 -0
- package/dist/domain/generated-tools.js +19 -0
- package/dist/domain/generation.d.ts +16 -0
- package/dist/domain/generation.js +1 -0
- package/dist/domain/input.js +17 -0
- package/dist/domain/model.js +1 -0
- package/dist/domain/paging.js +230 -0
- package/dist/domain/recipes.js +24 -0
- package/dist/domain/userReferences.js +5 -0
- package/dist/domain/wireScalars.js +47 -0
- package/dist/infrastructure/adminEntries.js +153 -0
- package/dist/infrastructure/adminPaging.js +72 -0
- package/dist/infrastructure/artifacts.js +71 -0
- package/dist/infrastructure/authSchema.js +83 -0
- package/dist/infrastructure/bundle.js +188 -0
- package/dist/infrastructure/cli.js +118 -0
- package/dist/infrastructure/generate.d.ts +12 -0
- package/dist/infrastructure/generate.js +189 -0
- package/dist/infrastructure/generateAuth.d.ts +8 -0
- package/dist/infrastructure/generateAuth.js +74 -0
- package/dist/infrastructure/help.js +60 -0
- package/dist/infrastructure/init.js +54 -0
- package/dist/infrastructure/inputs.js +41 -0
- package/dist/infrastructure/mounts.js +25 -0
- package/dist/infrastructure/wrangler.js +109 -0
- package/dist/kernel/authorization.d.ts +4 -0
- package/dist/kernel/authorization.js +16 -0
- package/dist/kernel/binds.d.ts +60 -0
- package/dist/kernel/binds.js +49 -0
- package/dist/kernel/caller-identity.d.ts +24 -0
- package/dist/kernel/caller-identity.js +22 -0
- package/dist/kernel/contract-error.d.ts +12 -0
- package/dist/kernel/contract-error.js +14 -0
- package/dist/kernel/contracts.d.ts +143 -0
- package/dist/kernel/contracts.js +97 -0
- package/dist/kernel/cron.d.ts +1 -0
- package/dist/kernel/cron.js +58 -0
- package/dist/kernel/dialect/common.d.ts +38 -0
- package/dist/kernel/dialect/common.js +6 -0
- package/dist/kernel/dialect/postgres.d.ts +16 -0
- package/dist/kernel/dialect/postgres.js +18 -0
- package/dist/kernel/dialect/sqlite.d.ts +20 -0
- package/dist/kernel/dialect/sqlite.js +34 -0
- package/dist/kernel/drain.d.ts +5 -0
- package/dist/kernel/drain.js +35 -0
- package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
- package/dist/kernel/driver/bun-sqlite.js +77 -0
- package/dist/kernel/driver/d1.d.ts +24 -0
- package/dist/kernel/driver/d1.js +22 -0
- package/dist/kernel/driver/postgres.d.ts +25 -0
- package/dist/kernel/driver/postgres.js +99 -0
- package/dist/kernel/driver/transaction-context.d.ts +10 -0
- package/dist/kernel/driver/transaction-context.js +29 -0
- package/dist/kernel/email.d.ts +28 -0
- package/dist/kernel/email.js +38 -0
- package/dist/kernel/host-access.d.ts +10 -0
- package/dist/kernel/host-access.js +65 -0
- package/dist/kernel/host-caller.d.ts +39 -0
- package/dist/kernel/host-caller.js +56 -0
- package/dist/kernel/json-body.d.ts +4 -0
- package/dist/kernel/json-body.js +44 -0
- package/dist/kernel/mcp-apps.d.ts +69 -0
- package/dist/kernel/mcp-apps.js +40 -0
- package/dist/kernel/mcp-call.d.ts +5 -0
- package/dist/kernel/mcp-call.js +25 -0
- package/dist/kernel/mcp-handler.js +371 -0
- package/dist/kernel/mcp.d.ts +110 -0
- package/dist/kernel/mcp.js +50 -0
- package/dist/kernel/media.d.ts +27 -0
- package/dist/kernel/media.js +216 -0
- package/dist/kernel/paging.d.ts +55 -0
- package/dist/kernel/paging.js +95 -0
- package/dist/kernel/publishing.d.ts +4 -0
- package/dist/kernel/publishing.js +16 -0
- package/dist/kernel/r2-media.d.ts +42 -0
- package/dist/kernel/r2-media.js +78 -0
- package/dist/kernel/rest-dispatch.js +38 -0
- package/dist/kernel/rest-router.js +64 -0
- package/dist/kernel/rest.d.ts +58 -0
- package/dist/kernel/rest.js +41 -0
- package/dist/kernel/scalars.d.ts +6 -0
- package/dist/kernel/scalars.js +44 -0
- package/dist/kernel/search.js +5 -0
- package/dist/kernel/site-types.d.ts +146 -0
- package/dist/kernel/site-types.js +1 -0
- package/dist/kernel/site.d.ts +39 -0
- package/dist/kernel/site.js +32 -0
- package/dist/kernel/store.d.ts +175 -0
- package/dist/kernel/store.js +269 -0
- package/dist/kernel/surface.d.ts +10 -0
- package/dist/kernel/surface.js +19 -0
- package/dist/kernel/sweep.d.ts +17 -0
- package/dist/kernel/sweep.js +27 -0
- package/dist/kernel/translations.d.ts +1 -0
- package/dist/kernel/translations.js +13 -0
- package/dist/kernel/user-caller.d.ts +31 -0
- package/dist/kernel/user-caller.js +67 -0
- package/dist/kernel/user-field-name.js +3 -0
- package/dist/kernel/user-fields.d.ts +35 -0
- package/dist/kernel/user-fields.js +81 -0
- package/dist/kernel/validation.d.ts +15 -0
- package/dist/kernel/validation.js +54 -0
- package/dist/kernel/web-gateway.js +68 -0
- package/dist/kernel/web-head.js +15 -0
- package/dist/kernel/web-index.js +40 -0
- package/dist/kernel/web-response.js +8 -0
- package/dist/kernel/web.d.ts +77 -0
- package/dist/kernel/web.js +124 -0
- package/dist/kernel/where.js +27 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/usecase/adminBindings.js +143 -0
- package/dist/usecase/adminClient.js +87 -0
- package/dist/usecase/adminDescriptors.js +107 -0
- package/dist/usecase/generate.js +166 -0
- package/dist/usecase/handlers.js +21 -0
- package/dist/usecase/mcp-media.js +17 -0
- package/dist/usecase/mcp.js +100 -0
- package/dist/usecase/paging.js +71 -0
- package/dist/usecase/publishing.js +63 -0
- package/dist/usecase/refusals.js +27 -0
- package/dist/usecase/rest.js +54 -0
- package/dist/usecase/search.js +7 -0
- package/dist/usecase/site.js +39 -0
- package/dist/usecase/stores.js +64 -0
- package/dist/usecase/tool-version.js +9 -0
- package/dist/usecase/translations.js +78 -0
- package/dist/usecase/ttl.js +20 -0
- package/dist/usecase/validation.js +241 -0
- package/dist/usecase/web.js +23 -0
- package/docs/examples/README.md +39 -18
- package/docs/examples/app-shell/.dev.vars.example +4 -0
- package/docs/examples/app-shell/README.md +121 -0
- package/docs/examples/app-shell/accept.mjs +91 -0
- package/docs/examples/app-shell/gitignore +7 -0
- package/docs/examples/app-shell/package.json +43 -0
- package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
- package/docs/examples/app-shell/smoke-kit.mjs +168 -0
- package/docs/examples/app-shell/src/auth.ts +58 -0
- package/docs/examples/app-shell/src/handlers.ts +5 -0
- package/docs/examples/app-shell/src/index.ts +4 -0
- package/docs/examples/app-shell/src/routes.ts +14 -0
- package/docs/examples/app-shell/src/schedule.ts +8 -0
- package/docs/examples/app-shell/src/service.ts +70 -0
- package/docs/examples/app-shell/src/sign-in.ts +41 -0
- package/docs/examples/app-shell/src/signup.ts +8 -0
- package/docs/examples/app-shell/tsconfig.json +26 -0
- package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
- package/docs/examples/app-shell/wrangler.jsonc +62 -0
- package/docs/examples/club-events/README.md +65 -0
- package/docs/examples/club-events/manifests/club-events.yaml +247 -0
- package/docs/examples/club-events/smoke.mjs +127 -0
- package/docs/examples/club-events/src/handlers.ts +25 -0
- package/docs/examples/club-events/src/signup.ts +9 -0
- package/docs/examples/generated-web/README.md +78 -0
- package/docs/examples/generated-web/posts.yaml +38 -0
- package/docs/examples/generated-web/seed.sql +6 -0
- package/docs/examples/generated-web/src/worker.ts +43 -0
- package/docs/examples/generated-web/tsconfig.json +8 -0
- package/docs/examples/generated-web/wrangler.jsonc +8 -0
- package/docs/examples/purchasing/.dev.vars.example +6 -0
- package/docs/examples/purchasing/README.md +99 -0
- package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
- package/docs/examples/purchasing/seed.sql +4 -0
- package/docs/examples/purchasing/smoke.mjs +191 -0
- package/docs/examples/purchasing/src/admin.tsx +13 -0
- package/docs/examples/purchasing/src/handlers.ts +33 -0
- package/docs/examples/purchasing/src/notify.ts +29 -0
- package/docs/examples/purchasing/src/requests-page.ts +57 -0
- package/docs/examples/purchasing/src/routes.ts +53 -0
- package/docs/examples/purchasing/src/schedule.ts +31 -0
- package/docs/examples/purchasing/src/signup.ts +5 -0
- package/docs/examples/purchasing/src/supplier.ts +32 -0
- package/docs/examples/purchasing/wrangler.jsonc +69 -0
- package/docs/examples/recipes/README.md +60 -0
- package/docs/examples/recipes/manifests/recipes.yaml +75 -0
- package/docs/examples/recipes/smoke.mjs +102 -0
- package/docs/examples/recipes/src/media.ts +13 -0
- package/docs/examples/recipes/src/pages.ts +99 -0
- package/docs/examples/recipes/src/routes.ts +71 -0
- package/docs/examples/recipes/src/site-config.ts +12 -0
- package/docs/examples/recipes/wrangler.jsonc +74 -0
- package/docs/handbook/cloudflare/authentication.md +180 -322
- package/docs/handbook/cloudflare/chatgpt-sites.md +5 -23
- package/docs/handbook/cloudflare/deploy-and-operate.md +55 -77
- package/docs/handbook/cloudflare/media-r2.md +61 -205
- package/docs/handbook/cloudflare/service-entry.md +239 -0
- package/docs/handbook/concepts/authorization.md +10 -107
- package/docs/handbook/concepts/four-atoms.md +9 -168
- package/docs/handbook/concepts/lifecycle-and-locales.md +9 -132
- package/docs/handbook/concepts/mcp-and-agents.md +24 -121
- package/docs/handbook/concepts/procedures-and-triggers.md +5 -217
- package/docs/handbook/concepts/runtime-and-adapters.md +15 -169
- package/docs/handbook/concepts/views.md +10 -185
- package/docs/handbook/examples/hub.md +3 -8
- package/docs/handbook/guides/adapter-guide.md +11 -0
- package/docs/handbook/guides/admin-ui.md +115 -133
- package/docs/handbook/guides/agent-setup.md +64 -74
- package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
- package/docs/handbook/guides/email.md +86 -0
- package/docs/handbook/guides/local-testing.md +40 -0
- package/docs/handbook/guides/mcp-apps.md +560 -0
- package/docs/handbook/guides/native-admin.md +566 -0
- package/docs/handbook/guides/native-execution.md +133 -0
- package/docs/handbook/guides/oauth.md +219 -0
- package/docs/handbook/guides/postgres-adapters.md +56 -0
- package/docs/handbook/guides/public-pages.md +87 -0
- package/docs/handbook/guides/size-and-startup.md +9 -0
- package/docs/handbook/guides/sql-patterns.md +266 -0
- package/docs/handbook/guides/typed-queries.md +211 -107
- package/docs/handbook/navigation.json +176 -55
- package/docs/handbook/reference/admin-descriptors.md +53 -0
- package/docs/handbook/reference/authorization.md +39 -266
- package/docs/handbook/reference/describe.md +56 -0
- package/docs/handbook/reference/diagnostics.md +19 -186
- package/docs/handbook/reference/features.md +45 -55
- package/docs/handbook/reference/manifest.md +6 -129
- package/docs/handbook/reference/procedure.md +11 -303
- package/docs/handbook/reference/schema.md +64 -240
- package/docs/handbook/reference/site-config.md +5 -218
- package/docs/handbook/reference/sql.md +64 -0
- package/docs/handbook/reference/surface.md +392 -201
- package/docs/handbook/reference/trigger.md +56 -192
- package/docs/handbook/reference/view.md +24 -243
- package/docs/handbook/releases/index.md +244 -77
- package/docs/handbook/start/agents.md +45 -0
- package/docs/handbook/start/overview.md +9 -48
- package/docs/handbook/start/project-and-cli.md +51 -104
- package/docs/handbook/start/quickstart-worker.md +43 -178
- package/docs/skills/develop/SKILL.md +79 -249
- package/docs/skills/integrate/SKILL.md +39 -50
- package/docs/skills/media-gc/SKILL.md +34 -10
- package/docs/skills/provision/SKILL.md +36 -186
- package/docs/skills/update/SKILL.md +23 -38
- package/docs/source/scripts/postgres-adapter.ts +101 -0
- package/docs/upgrade-0.1-to-0.2.md +227 -0
- package/package.json +120 -131
- package/skills/README.md +48 -108
- package/skills/mantle/SKILL.md +76 -0
- package/dist/admin-ui.d.ts +0 -2
- package/dist/admin-ui.d.ts.map +0 -1
- package/dist/admin-ui.js +0 -2
- package/dist/admin-ui.js.map +0 -1
- package/dist/admin.d.ts +0 -2
- package/dist/admin.d.ts.map +0 -1
- package/dist/admin.js +0 -2
- package/dist/admin.js.map +0 -1
- package/dist/auth.d.ts +0 -2
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -2
- package/dist/auth.js.map +0 -1
- package/dist/bun.d.ts +0 -2
- package/dist/bun.d.ts.map +0 -1
- package/dist/bun.js +0 -2
- package/dist/bun.js.map +0 -1
- package/dist/cli/generate-cloudflare.d.ts +0 -7
- package/dist/cli/generate-cloudflare.d.ts.map +0 -1
- package/dist/cli/generate-cloudflare.js +0 -123
- package/dist/cli/generate-cloudflare.js.map +0 -1
- package/dist/cli/generate-project.d.ts +0 -25
- package/dist/cli/generate-project.d.ts.map +0 -1
- package/dist/cli/generate-project.js +0 -282
- package/dist/cli/generate-project.js.map +0 -1
- package/dist/cli/generate-sites.d.ts +0 -8
- package/dist/cli/generate-sites.d.ts.map +0 -1
- package/dist/cli/generate-sites.js +0 -273
- package/dist/cli/generate-sites.js.map +0 -1
- package/dist/cli/generate.d.ts +0 -20
- package/dist/cli/generate.d.ts.map +0 -1
- package/dist/cli/generate.js +0 -299
- package/dist/cli/generate.js.map +0 -1
- package/dist/cli/harness.d.ts +0 -3
- package/dist/cli/harness.d.ts.map +0 -1
- package/dist/cli/harness.js +0 -214
- package/dist/cli/harness.js.map +0 -1
- package/dist/cli/main.d.ts +0 -3
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -77
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/skills.d.ts +0 -3
- package/dist/cli/skills.d.ts.map +0 -1
- package/dist/cli/skills.js +0 -128
- package/dist/cli/skills.js.map +0 -1
- package/dist/cloudflare.d.ts +0 -2
- package/dist/cloudflare.d.ts.map +0 -1
- package/dist/cloudflare.js +0 -2
- package/dist/cloudflare.js.map +0 -1
- package/dist/codegen/emitMantleModule.d.ts +0 -22
- package/dist/codegen/emitMantleModule.d.ts.map +0 -1
- package/dist/codegen/emitMantleModule.js +0 -291
- package/dist/codegen/emitMantleModule.js.map +0 -1
- package/dist/codegen.d.ts +0 -2
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -2
- package/dist/codegen.js.map +0 -1
- package/dist/runtime-testing.d.ts +0 -2
- package/dist/runtime-testing.d.ts.map +0 -1
- package/dist/runtime-testing.js +0 -2
- package/dist/runtime-testing.js.map +0 -1
- package/dist/runtime.d.ts +0 -2
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -2
- package/dist/runtime.js.map +0 -1
- package/dist/spec.d.ts +0 -2
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js +0 -2
- package/dist/spec.js.map +0 -1
- package/dist/vercel-libsql.d.ts +0 -2
- package/dist/vercel-libsql.d.ts.map +0 -1
- package/dist/vercel-libsql.js +0 -2
- package/dist/vercel-libsql.js.map +0 -1
- package/dist/vercel.d.ts +0 -2
- package/dist/vercel.d.ts.map +0 -1
- package/dist/vercel.js +0 -2
- package/dist/vercel.js.map +0 -1
- package/dist/web.d.ts +0 -2
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js +0 -2
- package/dist/web.js.map +0 -1
- package/docs/adapter-guide.md +0 -222
- package/docs/adr/0001-four-atom-manifest-model.md +0 -440
- package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
- package/docs/adr/0007-ai-as-primary-author.md +0 -473
- package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
- package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
- package/docs/adr/0010-locale-and-translates.md +0 -453
- package/docs/adr/0011-adapter-port-spec.md +0 -281
- package/docs/adr/0012-views-as-public-rest.md +0 -161
- package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -900
- package/docs/adr/0016-site-semantic-layer.md +0 -70
- package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
- package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -240
- package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
- package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
- package/docs/adr/0022-caller-observed-version-occ.md +0 -212
- package/docs/adr/0023-port-failure-contract.md +0 -69
- package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
- package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
- package/docs/adr/0026-progressive-generate.md +0 -36
- package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
- package/docs/adr/0028-schema-ttl-expiry.md +0 -33
- package/docs/adr/README.md +0 -81
- package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
- package/docs/adr/adr-lite-808-route-readiness.md +0 -47
- package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
- package/docs/adr/adr-lite-812-native-parity.md +0 -150
- package/docs/adr/adr-lite-823-home-statistics.md +0 -64
- package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
- package/docs/adr/adr-lite-845-frontend-client.md +0 -38
- package/docs/adr/adr-lite-861-admin-webmcp.md +0 -42
- package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
- package/docs/agent-prompts.md +0 -64
- package/docs/api-mcp-authorization.md +0 -5
- package/docs/assets/mantle-admin-developer.png +0 -0
- package/docs/assets/mantle-admin-operations.png +0 -0
- package/docs/assets/mantle-hero.jpg +0 -0
- package/docs/auth-hosting-model.md +0 -166
- package/docs/cloudflare-low-level-composition.md +0 -5
- package/docs/consumer-onboarding-audit.md +0 -65
- package/docs/deferred-lifecycle-queues.md +0 -5
- package/docs/design-atoms.md +0 -16
- package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
- package/docs/direct-authoring.md +0 -5
- package/docs/examples/builtin-commerce.md +0 -269
- package/docs/examples/builtin-intake.md +0 -143
- package/docs/examples/builtin-legal-documents.md +0 -189
- package/docs/examples/builtin-procurement.md +0 -241
- package/docs/examples/builtin-publication.md +0 -241
- package/docs/examples/builtin-reservation.md +0 -149
- package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
- package/docs/examples/cf-primitives-guarded-api.md +0 -429
- package/docs/examples/cf-primitives-intake-hooks.md +0 -319
- package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
- package/docs/examples/host-chatgpt-sites/README.md +0 -70
- package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
- package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
- package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
- package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/0004_mantle.sql +0 -10
- package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
- package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
- package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
- package/docs/examples/host-chatgpt-sites/package.json +0 -1
- package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
- package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
- package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
- package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -43
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
- package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
- package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
- package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
- package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
- package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
- package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
- package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
- package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
- package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
- package/docs/examples/host-local-admin-otp/README.md +0 -80
- package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
- package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
- package/docs/examples/host-local-admin-otp/package.json +0 -29
- package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
- package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
- package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
- package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
- package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
- package/docs/examples/host-minimal-worker/README.md +0 -41
- package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
- package/docs/examples/host-minimal-worker/package.json +0 -26
- package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
- package/docs/examples/host-minimal-worker/src/index.ts +0 -4
- package/docs/examples/host-minimal-worker/tsconfig.json +0 -17
- package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
- package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
- package/docs/handbook/chatgpt-sites/generated-app.md +0 -84
- package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -133
- package/docs/handbook/cloudflare/bindings.md +0 -291
- package/docs/handbook/cloudflare/conventional-worker.md +0 -166
- package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
- package/docs/handbook/cloudflare/low-level-composition.md +0 -169
- package/docs/handbook/cloudflare/public-web.md +0 -144
- package/docs/handbook/cloudflare/site-chrome.md +0 -75
- package/docs/handbook/examples/commerce-transaction.md +0 -11
- package/docs/handbook/examples/commerce.md +0 -11
- package/docs/handbook/examples/guarded-api.md +0 -10
- package/docs/handbook/examples/intake-form.md +0 -12
- package/docs/handbook/examples/intake-hooks.md +0 -11
- package/docs/handbook/examples/legal-documents.md +0 -10
- package/docs/handbook/examples/procurement-approvals.md +0 -10
- package/docs/handbook/examples/publication.md +0 -10
- package/docs/handbook/examples/reservation.md +0 -10
- package/docs/handbook/start/quickstart-admin.md +0 -52
- package/docs/labels.md +0 -71
- package/docs/media-uploads.md +0 -5
- package/docs/migration-0.1.2.md +0 -13
- package/docs/performance-harness.md +0 -228
- package/docs/release-process.md +0 -244
- package/docs/schema-indexes.md +0 -5
- package/docs/sealed-pipeline-ownership.md +0 -101
- package/docs/skills/plugin/SKILL.md +0 -132
- package/docs/skills/theme/SKILL.md +0 -77
- package/docs/spec-only-host-adoption.md +0 -157
- package/docs/transaction-patterns.md +0 -5
- package/skills/develop/SKILL.md +0 -258
- package/skills/install/SKILL.md +0 -112
- package/skills/integrate/SKILL.md +0 -60
- package/skills/media-gc/SKILL.md +0 -85
- package/skills/plugin/SKILL.md +0 -132
- package/skills/provision/SKILL.md +0 -194
- package/skills/theme/SKILL.md +0 -77
- package/skills/update/SKILL.md +0 -51
- package/templates/chatgpt-sites/auth.ts +0 -66
- package/templates/chatgpt-sites/build.mjs +0 -14
- package/templates/chatgpt-sites/env.ts +0 -1
- package/templates/chatgpt-sites/mcp.ts +0 -48
- package/templates/chatgpt-sites/public-mcp.ts +0 -29
- package/templates/chatgpt-sites/smoke-local.mjs +0 -20
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from "node:child_process";
|
|
2
|
-
import { access, readFile, readdir, mkdir, writeFile, appendFile } from "node:fs/promises";
|
|
3
|
-
import { basename, dirname, join, relative, resolve, sep } from "node:path";
|
|
4
|
-
import { buildSqliteMigrationArtifact, fieldColumn, quoteIdent, renderSqliteManagedMigration } from "@aotter/mantle-runtime";
|
|
5
|
-
import { assertInsideProject } from "./generate-project.js";
|
|
6
|
-
export async function prepareSites(root, output, selection, schemas, check, reviewUniqueIndexes = false) {
|
|
7
|
-
const has = (feature) => selection.features.includes(feature);
|
|
8
|
-
const name = basename(root).toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/^-+|-+$/g, "").slice(0, 63).replace(/-+$/, "") || "mantle-site";
|
|
9
|
-
const worker = resolve(root, output, "worker.ts");
|
|
10
|
-
const indexImport = importPath(join(root, "src/index.ts"), worker);
|
|
11
|
-
const files = [
|
|
12
|
-
{ path: worker, content: workerSource(root, worker, selection), owned: true },
|
|
13
|
-
{ path: "src/index.ts", content: `export { default } from "${indexImport}";\n` },
|
|
14
|
-
{ path: "src/handlers.ts", content: 'import type { AnyHandler } from "@aotter/mantle/runtime";\n\nexport const handlers: Record<string, AnyHandler> = {};\n' },
|
|
15
|
-
{ path: "scripts/build.mjs", content: await template("build.mjs") },
|
|
16
|
-
{ path: "tsconfig.json", content: `${JSON.stringify({ compilerOptions: {
|
|
17
|
-
target: "ES2022", module: "ESNext", moduleResolution: "Bundler", strict: true, skipLibCheck: true,
|
|
18
|
-
noEmit: true, types: ["@cloudflare/workers-types"], lib: ["ES2022", "DOM"],
|
|
19
|
-
}, include: ["src/**/*.ts", `${relative(root, resolve(root, output)).split(sep).join("/") || "."}/**/*.ts`] }, null, 2)}\n` },
|
|
20
|
-
{ path: ".dev.vars.example", content: "# Local simulation only. Configure the real owner and origin through Sites before publishing.\nOWNER_EMAIL=you@example.com\nPUBLIC_ORIGIN=http://127.0.0.1:4174\n" },
|
|
21
|
-
];
|
|
22
|
-
if (has("web"))
|
|
23
|
-
files.push({ path: "src/home.ts", content: 'export function home(): Response {\n return new Response(`<!doctype html><html lang="en"><meta charset="utf-8"><title>Mantle</title><body><main></main></body></html>`, { headers: { "content-type": "text/html; charset=utf-8" } });\n}\n' });
|
|
24
|
-
if (has("admin")) {
|
|
25
|
-
files.push({ path: "src/sites-auth.ts", content: await template("auth.ts") });
|
|
26
|
-
files.push({ path: "src/sites-mcp.ts", content: await template("mcp.ts") });
|
|
27
|
-
files.push({ path: "scripts/smoke-local.mjs", content: await template("smoke-local.mjs") });
|
|
28
|
-
}
|
|
29
|
-
else if (has("mcp")) {
|
|
30
|
-
files.push({ path: "src/sites-env.ts", content: await template("env.ts") });
|
|
31
|
-
files.push({ path: "src/sites-mcp.ts", content: await template("public-mcp.ts") });
|
|
32
|
-
}
|
|
33
|
-
const wrangler = await Promise.all(["wrangler.jsonc", "wrangler.json", "wrangler.toml"].map(async (path) => ({ path, content: await optional(join(root, path)) })));
|
|
34
|
-
const existingWrangler = wrangler.filter(file => file.content !== null);
|
|
35
|
-
if (existingWrangler.length > 1)
|
|
36
|
-
throw new Error(`Multiple Wrangler configs found: ${existingWrangler.map(file => file.path).join(", ")}.`);
|
|
37
|
-
let dbName = name;
|
|
38
|
-
if (existingWrangler.length) {
|
|
39
|
-
const config = existingWrangler[0];
|
|
40
|
-
await assertInsideProject(root, join(root, config.path));
|
|
41
|
-
const configuredName = config.content.match(/\bdatabase_name["']?\s*[:=]\s*["']([^"']+)["']/)?.[1];
|
|
42
|
-
if (!configuredName || !/\bmigrations_dir["']?\s*[:=]\s*["']drizzle["']/.test(config.content)) {
|
|
43
|
-
throw new Error(`Existing ${config.path} must name its D1 database and use migrations_dir=drizzle.`);
|
|
44
|
-
}
|
|
45
|
-
if (has("admin") && (!/(?:^|[{,])\s*["']?workers_dev["']?\s*[:=]\s*false\b/m.test(config.content) ||
|
|
46
|
-
/(?:^|[{,])\s*["']?routes?["']?\s*[:=]|^\s*\[\[?routes?\]\]?/m.test(config.content))) {
|
|
47
|
-
throw new Error(`Existing ${config.path} must set workers_dev=false and have no direct Worker route before Sites identity can be trusted.`);
|
|
48
|
-
}
|
|
49
|
-
dbName = configuredName;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
files.push({ path: "wrangler.jsonc", content: `${JSON.stringify({
|
|
53
|
-
name, main: "dist/server/index.js", compatibility_date: "2026-09-08", workers_dev: false,
|
|
54
|
-
compatibility_flags: ["nodejs_compat", "global_fetch_strictly_public"],
|
|
55
|
-
...(has("admin") ? { assets: { directory: "dist/client", binding: "ASSETS", run_worker_first: true } } : {}),
|
|
56
|
-
d1_databases: [{ binding: "DB", database_name: name, database_id: "local", migrations_dir: "drizzle" }],
|
|
57
|
-
}, null, 2)}\n` });
|
|
58
|
-
}
|
|
59
|
-
const hosting = await optional(join(root, ".openai/hosting.json"));
|
|
60
|
-
await assertInsideProject(root, join(root, ".openai/hosting.json"));
|
|
61
|
-
if (hosting !== null) {
|
|
62
|
-
if (JSON.parse(hosting).d1 !== "DB")
|
|
63
|
-
throw new Error("Existing Sites hosting.json must bind D1 as DB; project metadata is preserved.");
|
|
64
|
-
}
|
|
65
|
-
else
|
|
66
|
-
files.push({ path: ".openai/hosting.json", content: '{"d1":"DB"}\n' });
|
|
67
|
-
const writes = [];
|
|
68
|
-
for (const file of files) {
|
|
69
|
-
const path = resolve(root, file.path);
|
|
70
|
-
await assertInsideProject(root, path);
|
|
71
|
-
const current = await optional(path);
|
|
72
|
-
if (current !== null && file.owned && !current.startsWith("// Generated by `mantle generate`")) {
|
|
73
|
-
throw new Error(`Generated output would replace a user-owned file: ${path}`);
|
|
74
|
-
}
|
|
75
|
-
if (current === null || (file.owned && current !== file.content))
|
|
76
|
-
writes.push(file);
|
|
77
|
-
}
|
|
78
|
-
const migration = await prepareMigration(root, dbName, schemas, has("admin"), check, reviewUniqueIndexes);
|
|
79
|
-
const ignorePath = join(root, ".gitignore");
|
|
80
|
-
const ignored = await optional(ignorePath);
|
|
81
|
-
const ignoreMissing = !ignored?.split(/\r?\n/).includes(".dev.vars");
|
|
82
|
-
return {
|
|
83
|
-
stale: writes.length > 0 || migration.stale || ignoreMissing,
|
|
84
|
-
report: migration.report,
|
|
85
|
-
commit: async () => {
|
|
86
|
-
for (const file of writes) {
|
|
87
|
-
const path = resolve(root, file.path);
|
|
88
|
-
await mkdir(dirname(path), { recursive: true });
|
|
89
|
-
await writeFile(path, file.content, { flag: file.owned ? "w" : "wx" });
|
|
90
|
-
}
|
|
91
|
-
if (ignoreMissing) {
|
|
92
|
-
await assertInsideProject(root, ignorePath);
|
|
93
|
-
if (ignored === null)
|
|
94
|
-
await writeFile(ignorePath, "node_modules/\ndist/\n.wrangler/\n.dev.vars\n", { flag: "wx" });
|
|
95
|
-
else
|
|
96
|
-
await appendFile(ignorePath, `${ignored.endsWith("\n") ? "" : "\n"}.dev.vars\n`);
|
|
97
|
-
}
|
|
98
|
-
await migration.commit();
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
async function prepareMigration(root, dbName, schemas, admin, check, reviewUniqueIndexes) {
|
|
103
|
-
const statePath = join(root, "drizzle/meta/mantle-state.json");
|
|
104
|
-
const fingerprintPath = join(root, "src/storage-fingerprint.json");
|
|
105
|
-
const journalPath = join(root, "drizzle/meta/_journal.json");
|
|
106
|
-
for (const path of [statePath, fingerprintPath, journalPath])
|
|
107
|
-
await assertInsideProject(root, path);
|
|
108
|
-
const current = await optional(statePath);
|
|
109
|
-
const state = current ? JSON.parse(current) : null;
|
|
110
|
-
const artifact = await buildSqliteMigrationArtifact(state?.schemas ?? [], schemas, {
|
|
111
|
-
appliedMigrationIds: state?.appliedMigrationIds, reviewUniqueIndexes,
|
|
112
|
-
});
|
|
113
|
-
if (state && artifact.sourceFingerprint !== state.fingerprint)
|
|
114
|
-
throw new Error("Saved migration source fingerprint is invalid.");
|
|
115
|
-
if (artifact.destructive)
|
|
116
|
-
throw new Error("Destructive Schema change requires a reviewed migration; only unique-index tuple replacement supports --review-unique-indexes. No file was written.");
|
|
117
|
-
const fingerprint = await optional(fingerprintPath);
|
|
118
|
-
const fingerprintDrift = Boolean(state && fingerprint !== `${JSON.stringify(state.fingerprint)}\n`);
|
|
119
|
-
const changed = !state || artifact.migrations.length > 0 || artifact.sourceFingerprint !== artifact.targetFingerprint;
|
|
120
|
-
if (!changed)
|
|
121
|
-
return { stale: fingerprintDrift, report: undefined, commit: async () => {
|
|
122
|
-
if (fingerprintDrift && !check)
|
|
123
|
-
await writeFile(fingerprintPath, `${JSON.stringify(state.fingerprint)}\n`);
|
|
124
|
-
} };
|
|
125
|
-
if (fingerprintDrift)
|
|
126
|
-
throw new Error("Generated fingerprint and migration source disagree; finish or restore the pending migration first.");
|
|
127
|
-
const index = (state?.lastIndex ?? -1) + 1;
|
|
128
|
-
const tag = `${String(index).padStart(4, "0")}_mantle`;
|
|
129
|
-
const sqlPath = join(root, "drizzle", `${tag}.sql`);
|
|
130
|
-
const reviewPath = join(root, "drizzle/meta", `${tag}.review.json`);
|
|
131
|
-
const journalText = await optional(journalPath);
|
|
132
|
-
const journal = journalText ? JSON.parse(journalText) : null;
|
|
133
|
-
for (const path of [statePath, fingerprintPath, sqlPath, journalPath, reviewPath])
|
|
134
|
-
await assertInsideProject(root, path);
|
|
135
|
-
const sql = `${!state && admin ? `CREATE TABLE sites_users (id TEXT PRIMARY KEY NOT NULL, email TEXT NOT NULL UNIQUE, name TEXT NOT NULL, role TEXT CHECK (role IN ('owner','editor','contributor') OR role IS NULL), signed_in INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')));\n--> statement-breakpoint\n` : ""}${renderSqliteManagedMigration(artifact, state ? { canonicalVersion: state.canonicalVersion } : undefined)}`;
|
|
136
|
-
const existingSql = await optional(sqlPath);
|
|
137
|
-
if (existingSql !== null && existingSql !== sql)
|
|
138
|
-
throw new Error(`Migration file already exists with different SQL: ${sqlPath}`);
|
|
139
|
-
const reviewContent = artifact.reviewedUniqueIndexes?.length ? `${JSON.stringify({
|
|
140
|
-
sourceFingerprint: artifact.sourceFingerprint, targetFingerprint: artifact.targetFingerprint,
|
|
141
|
-
checksum: artifact.checksum, changes: artifact.reviewedUniqueIndexes,
|
|
142
|
-
steps: artifact.migrations.map(({ id, description, sql }) => ({ id, description, sql })),
|
|
143
|
-
rollback: "Old Worker activation is unsupported after this uniqueness change.",
|
|
144
|
-
}, null, 2)}\n` : null;
|
|
145
|
-
const existingReview = await optional(reviewPath);
|
|
146
|
-
if (existingReview !== null && existingReview !== reviewContent)
|
|
147
|
-
throw new Error(`Reviewed migration report already exists with different content: ${reviewPath}`);
|
|
148
|
-
const last = journal?.entries?.at(-1);
|
|
149
|
-
const journalAhead = last?.idx === index && last.tag === tag && existingSql === sql;
|
|
150
|
-
if (state && !journalAhead && last?.idx !== state.lastIndex)
|
|
151
|
-
throw new Error("Sites migration journal does not match saved state.");
|
|
152
|
-
if (!state && journalText !== null && !journalAhead)
|
|
153
|
-
throw new Error("Existing D1 migration journal conflicts with initial Mantle migration state.");
|
|
154
|
-
const migrationFiles = await readdir(join(root, "drizzle")).catch((error) => {
|
|
155
|
-
if (error.code === "ENOENT")
|
|
156
|
-
return [];
|
|
157
|
-
throw error;
|
|
158
|
-
});
|
|
159
|
-
if (!state && migrationFiles.some(file => file.endsWith(".sql") && file !== `${tag}.sql`))
|
|
160
|
-
throw new Error("Existing D1 migrations conflict with initial Mantle migration state.");
|
|
161
|
-
if (artifact.reviewedUniqueIndexes?.length) {
|
|
162
|
-
if (!state)
|
|
163
|
-
throw new Error("Reviewed unique-index replacement requires an existing managed Schema.");
|
|
164
|
-
await verifyLocalD1(root, dbName, state, existingSql === sql ? {
|
|
165
|
-
...state, fingerprint: artifact.targetFingerprint, canonicalVersion: artifact.targetCanonicalVersion,
|
|
166
|
-
} : undefined);
|
|
167
|
-
for (const change of artifact.reviewedUniqueIndexes) {
|
|
168
|
-
const schema = schemas.find(item => item.metadata.name === change.schema);
|
|
169
|
-
for (const fields of change.added) {
|
|
170
|
-
const columns = fields.map(field => quoteIdent(fieldColumn(schema, field)));
|
|
171
|
-
const group = `SELECT ${columns.join(", ")}, COUNT(*) AS copies FROM ${quoteIdent(change.schema)} WHERE ${columns.map(column => `${column} IS NOT NULL`).join(" AND ")} GROUP BY ${columns.join(", ")} HAVING COUNT(*) > 1`;
|
|
172
|
-
const conflicts = queryLocalD1(root, dbName, `SELECT COUNT(*) AS groups FROM (${group})`)[0];
|
|
173
|
-
if (conflicts?.groups) {
|
|
174
|
-
const sample = queryLocalD1(root, dbName, `${group} LIMIT 3`);
|
|
175
|
-
throw new Error(`UNIQUE_INDEX_CONFLICT: ${change.schema} (${fields.join(", ")}) has ${conflicts.groups} duplicate group(s); sample ${JSON.stringify(sample)}. No migration was written.`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
const nextState = { fingerprint: artifact.targetFingerprint, canonicalVersion: artifact.targetCanonicalVersion, schemas,
|
|
181
|
-
appliedMigrationIds: [...new Set([...(state?.appliedMigrationIds ?? []), ...artifact.migrations.map(({ id }) => id)])], lastIndex: index };
|
|
182
|
-
const nextJournal = { version: "7", dialect: "sqlite", entries: [...(journal?.entries ?? []), {
|
|
183
|
-
idx: index, version: "6", when: Date.now(), tag, breakpoints: true,
|
|
184
|
-
}] };
|
|
185
|
-
return {
|
|
186
|
-
stale: true,
|
|
187
|
-
report: artifact.reviewedUniqueIndexes?.length ? `Reviewed unique-index plan: ${JSON.stringify({ source: artifact.sourceFingerprint, target: artifact.targetFingerprint, checksum: artifact.checksum, changes: artifact.reviewedUniqueIndexes, sql: relative(root, sqlPath), rollback: "Old Worker activation is unsupported after this uniqueness change." })}` : undefined,
|
|
188
|
-
commit: async () => {
|
|
189
|
-
if (check)
|
|
190
|
-
return;
|
|
191
|
-
if (state)
|
|
192
|
-
await verifyLocalD1(root, dbName, state, existingSql === sql ? nextState : undefined);
|
|
193
|
-
await mkdir(dirname(sqlPath), { recursive: true });
|
|
194
|
-
await mkdir(dirname(journalPath), { recursive: true });
|
|
195
|
-
await mkdir(dirname(fingerprintPath), { recursive: true });
|
|
196
|
-
if (existingSql === null)
|
|
197
|
-
await writeFile(sqlPath, sql, { flag: "wx" });
|
|
198
|
-
if (reviewContent !== null && existingReview === null)
|
|
199
|
-
await writeFile(reviewPath, reviewContent, { flag: "wx" });
|
|
200
|
-
if (!journalAhead)
|
|
201
|
-
await writeFile(journalPath, `${JSON.stringify(nextJournal)}\n`, { flag: journalText === null ? "wx" : "w" });
|
|
202
|
-
await writeFile(statePath, `${JSON.stringify(nextState, null, 2)}\n`);
|
|
203
|
-
await writeFile(fingerprintPath, `${JSON.stringify(artifact.targetFingerprint)}\n`);
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
async function verifyLocalD1(root, dbName, state, appliedNext) {
|
|
208
|
-
const wrangler = join(root, "node_modules/wrangler/bin/wrangler.js");
|
|
209
|
-
await access(wrangler).catch(() => { throw new Error("Install the generated project dependencies before verifying local D1 migrations."); });
|
|
210
|
-
const query = (sql) => queryLocalD1(root, dbName, sql);
|
|
211
|
-
const active = query("SELECT fingerprint FROM _mantle_storage_state WHERE id=1")[0];
|
|
212
|
-
const expected = active?.fingerprint === state.fingerprint ? state :
|
|
213
|
-
active?.fingerprint === appliedNext?.fingerprint ? appliedNext : null;
|
|
214
|
-
if (!expected)
|
|
215
|
-
throw new Error("Local D1 has a pending migration. Apply it before generating another migration.");
|
|
216
|
-
const table = query("SELECT name FROM sqlite_schema WHERE type='table' AND name='_mantle_managed_runtime_state'")[0];
|
|
217
|
-
const version = table ? query("SELECT canonical_version FROM _mantle_managed_runtime_state WHERE id=1")[0]?.canonical_version : undefined;
|
|
218
|
-
if (version !== expected.canonicalVersion)
|
|
219
|
-
throw new Error("Local D1 runtime version does not match the applied migration state.");
|
|
220
|
-
}
|
|
221
|
-
function queryLocalD1(root, dbName, sql) {
|
|
222
|
-
const output = execFileSync(process.execPath, [join(root, "node_modules/wrangler/bin/wrangler.js"), "d1", "execute", dbName, "--local", "--command", sql, "--json"], { cwd: root, encoding: "utf8" });
|
|
223
|
-
return JSON.parse(output)[0]?.results ?? [];
|
|
224
|
-
}
|
|
225
|
-
async function optional(path) {
|
|
226
|
-
return readFile(path, "utf8").catch((error) => {
|
|
227
|
-
if (error.code === "ENOENT")
|
|
228
|
-
return null;
|
|
229
|
-
throw error;
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
async function template(name) {
|
|
233
|
-
return readFile(new URL(`../../templates/chatgpt-sites/${name}`, import.meta.url), "utf8");
|
|
234
|
-
}
|
|
235
|
-
function importPath(from, to) {
|
|
236
|
-
const path = relative(dirname(from), to).split(sep).join("/").replace(/\.ts$/, ".js");
|
|
237
|
-
return path.startsWith(".") ? path : `./${path}`;
|
|
238
|
-
}
|
|
239
|
-
function workerSource(root, worker, selection) {
|
|
240
|
-
const has = (feature) => selection.features.includes(feature);
|
|
241
|
-
const from = (path) => importPath(worker, join(root, path));
|
|
242
|
-
const admin = has("admin");
|
|
243
|
-
const mcp = has("mcp");
|
|
244
|
-
return `// Generated by \`mantle generate\`. Edit src/home.ts and src/handlers.ts instead.\n` +
|
|
245
|
-
`import { Hono } from "hono";\n` +
|
|
246
|
-
`import { bootMantleRuntime, SqliteMantleStorageAdapter${has("api") ? ", createMantleRequestHandler" : ""}, type MantleRuntime } from "@aotter/mantle/runtime";\n` +
|
|
247
|
-
`import { D1DatabaseDriver${admin ? ", AssetsAssetServer" : ""} } from "@aotter/mantle/cloudflare";\n` +
|
|
248
|
-
(admin ? `import { mountMantleAdmin, type MantleAdminRuntime } from "@aotter/mantle/admin";\n` : "") +
|
|
249
|
-
`import { plan } from "./mantle.js";\n` +
|
|
250
|
-
`import { handlers } from "${from("src/handlers.ts")}";\n` +
|
|
251
|
-
`import fingerprint from "${from("src/storage-fingerprint.json")}";\n` +
|
|
252
|
-
(has("web") ? `import { home } from "${from("src/home.ts")}";\n` : "") +
|
|
253
|
-
(admin ? `import { createChatGPTAuth, type Env } from "${from("src/sites-auth.ts")}";\n` :
|
|
254
|
-
mcp ? `import type { Env } from "${from("src/sites-env.ts")}";\n` : `interface Env { DB: D1Database; PUBLIC_ORIGIN: string; ASSETS?: Fetcher }\n`) +
|
|
255
|
-
(mcp ? `import { ${admin ? "mountMcp" : "mountPublicMcp"} } from "${from("src/sites-mcp.ts")}";\n` : "") +
|
|
256
|
-
`\nfunction assemble(env: Env) {\n` +
|
|
257
|
-
` if (!env.PUBLIC_ORIGIN) throw new Error("Set PUBLIC_ORIGIN to the exact Sites origin.");\n` +
|
|
258
|
-
(admin ? ` if (!env.ASSETS) throw new Error("Sites Admin requires the ASSETS binding.");\n const auth = createChatGPTAuth(env);\n` : "") +
|
|
259
|
-
` let runtime: Promise<${admin ? "MantleAdminRuntime" : "MantleRuntime"}> | undefined;\n` +
|
|
260
|
-
` const get = () => runtime ??= bootMantleRuntime({\n plan, handlers,\n storage: new SqliteMantleStorageAdapter(new D1DatabaseDriver(env.DB), { brand: "Mantle", title: "Mantle", origin: env.PUBLIC_ORIGIN }, { managedStorageFingerprint: fingerprint }),\n })` +
|
|
261
|
-
(admin ? `.then(value => {\n if (!value.siteConfig || !value.updateSiteSettings) throw new Error("Admin storage unavailable.");\n return value as MantleAdminRuntime;\n })` : "") +
|
|
262
|
-
`.catch(error => { runtime = undefined; throw error; });\n` +
|
|
263
|
-
` const app = new Hono<{ Bindings: Env }>();\n` +
|
|
264
|
-
` app.use("*", async (c, next) => { await next(); if (!c.res.headers.has("Cache-Control")) c.header("Cache-Control", "private, no-store"); c.header("X-Content-Type-Options", "nosniff"); });\n` +
|
|
265
|
-
(has("web") ? ` app.get("/", () => home());\n` : "") +
|
|
266
|
-
` app.get("/health", async () => { await get(); return Response.json({ ok: true, storage: "D1", auth: "ChatGPT Sites" }); });\n` +
|
|
267
|
-
(mcp ? ` ${admin ? "mountMcp(app, get, auth, plan)" : "mountPublicMcp(app, get, plan)"};\n` : "") +
|
|
268
|
-
(admin ? ` app.get("/admin/sign-in", async c => {\n if (c.req.header("cookie")?.split(";").some(value => value.trim() === "mantle-sites-signout=1")) {\n c.header("Set-Cookie", "mantle-sites-signout=; Path=/admin/sign-in; HttpOnly; SameSite=Strict; Max-Age=0" + (env.PUBLIC_ORIGIN.startsWith("https:") ? "; Secure" : ""));\n return c.redirect("/signout-with-chatgpt?return_to=%2F");\n }\n return c.redirect(await auth.getSession(c.req.raw) ? "/admin" : "/signin-with-chatgpt?return_to=%2Fadmin");\n });\n app.use("/admin/*", async (c, next) => {\n if (!c.req.path.startsWith("/admin/api/") && !await auth.getSession(c.req.raw)) return c.redirect("/signin-with-chatgpt?return_to=%2Fadmin");\n await next();\n });\n mountMantleAdmin(app, { plan, auth, get, assets: new AssetsAssetServer(env.ASSETS), mcpEndpoints: { public: "/api/mcp", staff: "/api/mcp/staff" }, requestContext: c => ({ env: c.env, waitUntil: promise => c.executionCtx.waitUntil(promise) }) });\n app.get("/_mantle/*", c => env.ASSETS!.fetch(c.req.raw));\n` : "") +
|
|
269
|
-
(has("api") ? ` const api = createMantleRequestHandler({ plan, getRuntime: get });\n app.use("*", async (c, next) => {\n const response = await api(c.req.raw, { user: null, staff: null, env: c.env, waitUntil: promise => c.executionCtx.waitUntil(promise) });\n if (response) return response;\n await next();\n });\n` : "") +
|
|
270
|
-
` app.onError(error => { console.error("Mantle request failed", error); return Response.json({ error: "internal_error" }, { status: 500, headers: { "Cache-Control": "private, no-store" } }); });\n` +
|
|
271
|
-
` return app;\n}\n\nlet app: ReturnType<typeof assemble> | undefined;\nexport default { fetch(request: Request, env: Env, ctx: ExecutionContext) { return (app ??= assemble(env)).fetch(request, env, ctx); } };\n`;
|
|
272
|
-
}
|
|
273
|
-
//# sourceMappingURL=generate-sites.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-sites.js","sourceRoot":"","sources":["../../src/cli/generate-sites.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/generate.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/** Test seam for Core-only vs Admin-present installs. */
|
|
2
|
-
export interface GenerateDeps {
|
|
3
|
-
readonly resolveAdminUiIndexHtml?: () => string | null;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Locate the optional Admin SPA. A Core-only install does not have
|
|
7
|
-
* `@aotter/mantle-admin-ui`, so resolution failure is not an error.
|
|
8
|
-
*/
|
|
9
|
-
export declare function resolveAdminUiIndexHtml(): string | null;
|
|
10
|
-
export declare function runGenerate(rawArgs: readonly string[], deps?: GenerateDeps): Promise<number>;
|
|
11
|
-
export declare function printGenerateNextSteps(adminUiInstalled: boolean, write?: {
|
|
12
|
-
(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;
|
|
13
|
-
(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean;
|
|
14
|
-
}): void;
|
|
15
|
-
/** Cheap hint: Admin SPA was synced but wrangler has no ASSETS binding. */
|
|
16
|
-
export declare function warnMissingWranglerAssets(root: string, write?: {
|
|
17
|
-
(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;
|
|
18
|
-
(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean;
|
|
19
|
-
}): void;
|
|
20
|
-
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAwBA,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAOvD;AASD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,CA8HjB;AAwDD,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK;2CA3GZ,CAAC;mEAM+D,CAAC;CAqGzB,GAAG,IAAI,CAmBzG;AAiBD,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK;2CAhJF,CAAC;mEAM+D,CAAC;CA0InC,GAAG,IAAI,CAa/F"}
|
package/dist/cli/generate.js
DELETED
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
3
|
-
import { dirname, join, resolve } from "node:path";
|
|
4
|
-
import { createRequire } from "node:module";
|
|
5
|
-
import { cwd, stderr, stdout } from "node:process";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
7
|
-
import { parseArgs } from "node:util";
|
|
8
|
-
import { parseManifestSources, ValidateManifestsUseCase } from "@aotter/mantle-spec";
|
|
9
|
-
import { loadManifestsFromRoot } from "@aotter/mantle-spec/cli";
|
|
10
|
-
import { assertMantleNamespace, emitMantleModule } from "../codegen/emitMantleModule.js";
|
|
11
|
-
import { prepareProject } from "./generate-project.js";
|
|
12
|
-
import { prepareSites } from "./generate-sites.js";
|
|
13
|
-
/**
|
|
14
|
-
* Locate the optional Admin SPA. A Core-only install does not have
|
|
15
|
-
* `@aotter/mantle-admin-ui`, so resolution failure is not an error.
|
|
16
|
-
*/
|
|
17
|
-
export function resolveAdminUiIndexHtml() {
|
|
18
|
-
try {
|
|
19
|
-
const path = fileURLToPath(import.meta.resolve("@aotter/mantle-admin-ui/index.html"));
|
|
20
|
-
return existsSync(path) ? path : null;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function resolveProjectAdminUiIndexHtml(root) {
|
|
27
|
-
try {
|
|
28
|
-
const path = createRequire(join(root, "package.json")).resolve("@aotter/mantle-admin-ui/index.html");
|
|
29
|
-
return existsSync(path) ? path : null;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
export async function runGenerate(rawArgs, deps = {}) {
|
|
36
|
-
let options;
|
|
37
|
-
try {
|
|
38
|
-
const parsed = parseGenerateArgs(rawArgs);
|
|
39
|
-
if (parsed === null) {
|
|
40
|
-
printHelp();
|
|
41
|
-
return 0;
|
|
42
|
-
}
|
|
43
|
-
options = parsed;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
stderr.write(`${message(error)}\n`);
|
|
47
|
-
return 2;
|
|
48
|
-
}
|
|
49
|
-
const root = cwd();
|
|
50
|
-
let loaded = await loadManifestsFromRoot(options.manifests);
|
|
51
|
-
if (loaded.parseErrors.some((diagnostic) => diagnostic.code !== "MANIFEST_ROOT_NOT_FOUND") ||
|
|
52
|
-
(options.manifestsExplicit && loaded.parseErrors.length > 0)) {
|
|
53
|
-
printDiagnostics(loaded.parseErrors);
|
|
54
|
-
return 1;
|
|
55
|
-
}
|
|
56
|
-
let project;
|
|
57
|
-
try {
|
|
58
|
-
project = await prepareProject({
|
|
59
|
-
root, host: options.host, features: options.features, check: options.check, output: options.output,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
stderr.write(`${message(error)}\n`);
|
|
64
|
-
return 2;
|
|
65
|
-
}
|
|
66
|
-
if (project.mode === "project" && !options.manifestsExplicit && loaded.parseErrors.length === 1 &&
|
|
67
|
-
loaded.parseErrors[0]?.code === "MANIFEST_ROOT_NOT_FOUND") {
|
|
68
|
-
let names;
|
|
69
|
-
try {
|
|
70
|
-
names = await readdir(resolve(root, options.manifests));
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
if (error.code !== "ENOENT") {
|
|
74
|
-
printDiagnostics(loaded.parseErrors);
|
|
75
|
-
return 1;
|
|
76
|
-
}
|
|
77
|
-
names = [];
|
|
78
|
-
}
|
|
79
|
-
if (!names.some((name) => /\.ya?ml$/i.test(name))) {
|
|
80
|
-
const empty = parseManifestSources({ sources: [] });
|
|
81
|
-
if (empty.ok)
|
|
82
|
-
loaded = { parsed: empty.value, parseErrors: [], root: loaded.root };
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const validation = loaded.parsed
|
|
86
|
-
? ValidateManifestsUseCase.run({ parsed: loaded.parsed })
|
|
87
|
-
: { diagnostics: [], errorCount: 0, warningCount: 0 };
|
|
88
|
-
const validationErrors = [...loaded.parseErrors, ...validation.diagnostics]
|
|
89
|
-
.filter((diagnostic) => diagnostic.severity === "error");
|
|
90
|
-
if (validationErrors.length > 0 || !validation.linked) {
|
|
91
|
-
printDiagnostics(validationErrors);
|
|
92
|
-
return 1;
|
|
93
|
-
}
|
|
94
|
-
if (project.mode === "project" && project.selection?.host !== "cf") {
|
|
95
|
-
const schedule = loaded.parsed.entries.find((entry) => entry.manifest.kind === "Trigger" && entry.manifest.spec.source.kind === "schedule");
|
|
96
|
-
if (schedule) {
|
|
97
|
-
stderr.write(`RESOURCE_UNAVAILABLE: Trigger '${schedule.manifest.metadata.name}' requires host 'cf'; '${project.selection?.host ?? "none"}' does not register Cron Triggers.\n`);
|
|
98
|
-
return 1;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
const emitted = emitMantleModule({
|
|
102
|
-
linked: validation.linked,
|
|
103
|
-
namespace: options.namespace,
|
|
104
|
-
});
|
|
105
|
-
if (!emitted.ok) {
|
|
106
|
-
printDiagnostics(emitted.diagnostics);
|
|
107
|
-
return 1;
|
|
108
|
-
}
|
|
109
|
-
let sites = null;
|
|
110
|
-
if (options.reviewUniqueIndexes && project.selection?.host !== "chatgpt-sites") {
|
|
111
|
-
stderr.write("--review-unique-indexes requires a managed ChatGPT Sites project.\n");
|
|
112
|
-
return 2;
|
|
113
|
-
}
|
|
114
|
-
if (project.mode === "project" && project.selection?.host === "chatgpt-sites") {
|
|
115
|
-
try {
|
|
116
|
-
sites = await prepareSites(root, project.selection.output ?? options.output, project.selection, loaded.parsed.entries.filter((entry) => entry.manifest.kind === "Schema").map((entry) => entry.manifest), options.check, options.reviewUniqueIndexes);
|
|
117
|
-
if (sites.report)
|
|
118
|
-
stdout.write(`${sites.report}\n`);
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
stderr.write(`${message(error)}\n`);
|
|
122
|
-
return 2;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
const adminIndex = project.mode === "legacy" || project.selection?.features.includes("admin")
|
|
126
|
-
? (deps.resolveAdminUiIndexHtml ?? (project.mode === "legacy" ? resolveAdminUiIndexHtml : () => resolveProjectAdminUiIndexHtml(root)))()
|
|
127
|
-
: null;
|
|
128
|
-
const adminUnavailable = project.selection?.features.includes("admin") && adminIndex === null;
|
|
129
|
-
if (adminUnavailable) {
|
|
130
|
-
stderr.write("Selected Admin UI is not installed or its assets are missing. Install declared packages and rerun mantle generate.\n");
|
|
131
|
-
if (!options.check && !project.incomplete)
|
|
132
|
-
return 1;
|
|
133
|
-
}
|
|
134
|
-
if (!options.check && project.commit) {
|
|
135
|
-
try {
|
|
136
|
-
await project.commit();
|
|
137
|
-
await sites?.commit();
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
stderr.write(`${message(error)}\n`);
|
|
141
|
-
return 2;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (project.incomplete && !options.check)
|
|
145
|
-
return 1;
|
|
146
|
-
const output = resolve(cwd(), project.selection?.output ?? options.output);
|
|
147
|
-
const generatedCurrent = await syncText(join(output, "mantle.ts"), emitted.source, options.check);
|
|
148
|
-
let stale = project.incomplete || adminUnavailable || !generatedCurrent || Boolean(sites?.stale);
|
|
149
|
-
if (adminIndex !== null) {
|
|
150
|
-
const adminSource = dirname(adminIndex);
|
|
151
|
-
const adminTarget = resolve(cwd(), "public/_mantle/admin");
|
|
152
|
-
stale = !(await syncAdminAssets(adminSource, adminTarget, options.check)) || stale;
|
|
153
|
-
if (!options.check)
|
|
154
|
-
warnMissingWranglerAssets(cwd());
|
|
155
|
-
}
|
|
156
|
-
if (stale && options.check) {
|
|
157
|
-
stderr.write("Mantle generated files are stale; run `mantle generate`.\n");
|
|
158
|
-
return 1;
|
|
159
|
-
}
|
|
160
|
-
if (project.mode === "project") {
|
|
161
|
-
if (!options.check)
|
|
162
|
-
stdout.write(project.selection?.host === "cf"
|
|
163
|
-
? "Generated Cloudflare Worker composition and typed bindings.\n"
|
|
164
|
-
: project.selection?.host === "chatgpt-sites"
|
|
165
|
-
? "Generated ChatGPT Sites composition and typed bindings. Apply reviewed local D1 migrations before serving.\n"
|
|
166
|
-
: "Generated host-free Spec bindings.\n");
|
|
167
|
-
return 0;
|
|
168
|
-
}
|
|
169
|
-
if (!options.check)
|
|
170
|
-
printGenerateNextSteps(adminIndex !== null);
|
|
171
|
-
return 0;
|
|
172
|
-
}
|
|
173
|
-
function parseGenerateArgs(rawArgs) {
|
|
174
|
-
const { values } = parseArgs({
|
|
175
|
-
args: [...rawArgs],
|
|
176
|
-
options: {
|
|
177
|
-
manifests: { type: "string" },
|
|
178
|
-
output: { type: "string", short: "o" },
|
|
179
|
-
namespace: { type: "string" },
|
|
180
|
-
host: { type: "string" },
|
|
181
|
-
features: { type: "string" },
|
|
182
|
-
"review-unique-indexes": { type: "boolean" },
|
|
183
|
-
check: { type: "boolean" },
|
|
184
|
-
help: { type: "boolean", short: "h" },
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
if (values.help)
|
|
188
|
-
return null;
|
|
189
|
-
const namespace = values.namespace ?? "Mantle";
|
|
190
|
-
assertMantleNamespace(namespace, "--namespace");
|
|
191
|
-
return {
|
|
192
|
-
manifests: values.manifests ?? "./manifests",
|
|
193
|
-
output: values.output ?? ".mantle/generated",
|
|
194
|
-
namespace,
|
|
195
|
-
check: values.check === true,
|
|
196
|
-
host: values.host,
|
|
197
|
-
features: values.features,
|
|
198
|
-
reviewUniqueIndexes: values["review-unique-indexes"] === true,
|
|
199
|
-
manifestsExplicit: values.manifests !== undefined,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
function printHelp() {
|
|
203
|
-
stdout.write(`mantle generate — compile manifests and assemble selected application features
|
|
204
|
-
|
|
205
|
-
Usage: mantle generate [options]
|
|
206
|
-
|
|
207
|
-
For a new application, the default selects Spec, Runtime, API, MCP, Admin and Web.
|
|
208
|
-
Select a host with --host cf or --host chatgpt-sites. --features replaces the
|
|
209
|
-
default with a positive list; required feature dependencies are added.
|
|
210
|
-
Existing authored applications retain their direct-authoring compile mode.
|
|
211
|
-
|
|
212
|
-
Options:
|
|
213
|
-
--manifests <dir> Manifest directory (default: ./manifests)
|
|
214
|
-
-o, --output <dir> Generated root (default: .mantle/generated)
|
|
215
|
-
--namespace <name> Generated type namespace (default: Mantle)
|
|
216
|
-
--host <name> cf or chatgpt-sites (required for host-dependent features)
|
|
217
|
-
--features <list> Comma-separated: spec,runtime,api,mcp,admin,web
|
|
218
|
-
--review-unique-indexes Plan a reviewed Sites unique-index tuple replacement
|
|
219
|
-
--check Check selection, dependencies and output without writing
|
|
220
|
-
-h, --help This help
|
|
221
|
-
|
|
222
|
-
Documentation:
|
|
223
|
-
Handbook: docs/handbook/start/project-and-cli.md or https://mantle.tools/
|
|
224
|
-
`);
|
|
225
|
-
}
|
|
226
|
-
export function printGenerateNextSteps(adminUiInstalled, write = stdout.write.bind(stdout)) {
|
|
227
|
-
if (adminUiInstalled) {
|
|
228
|
-
write("Synced public/_mantle/admin/ from @aotter/mantle-admin-ui (opt-in, prebuilt; do not vite-build).\n" +
|
|
229
|
-
"Admin / Dev UI next steps:\n" +
|
|
230
|
-
" 1. wrangler assets.directory=./public and binding=ASSETS\n" +
|
|
231
|
-
" 2. pnpm dev → open /admin/sign-in\n" +
|
|
232
|
-
" 3. email OTP via ConsoleEmailSender (code in wrangler logs)\n" +
|
|
233
|
-
"PUBLIC_ORIGIN must equal the origin wrangler prints; a mismatch is INVALID_ORIGIN.\n" +
|
|
234
|
-
"See docs/examples/host-local-admin-otp or node_modules/@aotter/mantle/docs/examples/host-local-admin-otp.\n");
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
write("API-only (Admin is opt-in). A complete service does not require a Dev UI. " +
|
|
238
|
-
"To add Admin later: install @aotter/mantle-admin and @aotter/mantle-admin-ui, " +
|
|
239
|
-
"re-run generate, configure wrangler ASSETS, and wire local email-otp " +
|
|
240
|
-
"(docs/examples/host-local-admin-otp or node_modules/@aotter/mantle/docs/examples/host-local-admin-otp).\n");
|
|
241
|
-
}
|
|
242
|
-
function printDiagnostics(diagnostics) {
|
|
243
|
-
for (const diagnostic of diagnostics) {
|
|
244
|
-
stderr.write(`${diagnostic.code} ${diagnostic.path}: ${diagnostic.message}\n`);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
async function syncText(path, expected, check) {
|
|
248
|
-
const current = await readFile(path, "utf8").catch(() => null);
|
|
249
|
-
if (current === expected)
|
|
250
|
-
return true;
|
|
251
|
-
if (check)
|
|
252
|
-
return false;
|
|
253
|
-
await mkdir(dirname(path), { recursive: true });
|
|
254
|
-
await writeFile(path, expected, "utf8");
|
|
255
|
-
return true;
|
|
256
|
-
}
|
|
257
|
-
/** Cheap hint: Admin SPA was synced but wrangler has no ASSETS binding. */
|
|
258
|
-
export function warnMissingWranglerAssets(root, write = stderr.write.bind(stderr)) {
|
|
259
|
-
const wrangler = ["wrangler.jsonc", "wrangler.json", "wrangler.toml"]
|
|
260
|
-
.map((name) => join(root, name))
|
|
261
|
-
.find((path) => existsSync(path));
|
|
262
|
-
if (!wrangler)
|
|
263
|
-
return;
|
|
264
|
-
const text = readFileSync(wrangler, "utf8");
|
|
265
|
-
if (/["']?binding["']?\s*[:=]\s*["']ASSETS["']/.test(text))
|
|
266
|
-
return;
|
|
267
|
-
write("warning: @aotter/mantle-admin-ui synced public/_mantle/admin, but wrangler has no ASSETS binding. " +
|
|
268
|
-
"/admin can return HTML 200 while /_mantle/admin/assets/* 404s (white screen). " +
|
|
269
|
-
'Add "assets": { "directory": "./public", "binding": "ASSETS" }. ' +
|
|
270
|
-
"Do not put /_mantle in run_worker_first.\n");
|
|
271
|
-
}
|
|
272
|
-
async function syncAdminAssets(source, target, check) {
|
|
273
|
-
const sourceFiles = (await listFiles(source)).filter((path) => !path.startsWith("server."));
|
|
274
|
-
const targetFiles = await listFiles(target).catch(() => []);
|
|
275
|
-
const current = sourceFiles.length === targetFiles.length
|
|
276
|
-
&& sourceFiles.every((path, index) => path === targetFiles[index])
|
|
277
|
-
&& (await Promise.all(sourceFiles.map(async (path) => (await readFile(join(source, path))).equals(await readFile(join(target, path)))))).every(Boolean);
|
|
278
|
-
if (current || check)
|
|
279
|
-
return current;
|
|
280
|
-
await rm(target, { recursive: true, force: true });
|
|
281
|
-
for (const path of sourceFiles) {
|
|
282
|
-
const destination = join(target, path);
|
|
283
|
-
await mkdir(dirname(destination), { recursive: true });
|
|
284
|
-
await writeFile(destination, await readFile(join(source, path)));
|
|
285
|
-
}
|
|
286
|
-
return true;
|
|
287
|
-
}
|
|
288
|
-
async function listFiles(root, prefix = "") {
|
|
289
|
-
const entries = await readdir(join(root, prefix), { withFileTypes: true });
|
|
290
|
-
const files = await Promise.all(entries.map((entry) => {
|
|
291
|
-
const path = join(prefix, entry.name);
|
|
292
|
-
return entry.isDirectory() ? listFiles(root, path) : [path];
|
|
293
|
-
}));
|
|
294
|
-
return files.flat().sort();
|
|
295
|
-
}
|
|
296
|
-
function message(error) {
|
|
297
|
-
return error instanceof Error ? error.message : String(error);
|
|
298
|
-
}
|
|
299
|
-
//# sourceMappingURL=generate.js.map
|