@aotter/mantle 0.1.5-alpha.1 → 0.2.0-alpha.1
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 +39 -306
- package/dist/admin/consent.d.ts +17 -0
- package/dist/admin/consent.d.ts.map +1 -0
- package/dist/admin/consent.js +17 -0
- package/dist/admin/consent.js.map +1 -0
- package/dist/admin/createAdminSurface.d.ts +22 -0
- package/dist/admin/createAdminSurface.d.ts.map +1 -0
- package/dist/admin/createAdminSurface.js +589 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +264 -0
- package/dist/admin/developerConsole.d.ts.map +1 -0
- package/dist/admin/developerConsole.js +136 -0
- package/dist/admin/developerConsole.js.map +1 -0
- package/dist/admin/identity.d.ts +62 -0
- package/dist/admin/identity.d.ts.map +1 -0
- package/dist/admin/identity.js +7 -0
- package/dist/admin/identity.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +4 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/procedureFlow.d.ts +25 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +154 -0
- package/dist/admin/procedureFlow.js.map +1 -0
- package/dist/auth/ConsoleEmailSender.d.ts +15 -0
- package/dist/auth/ConsoleEmailSender.d.ts.map +1 -0
- package/dist/auth/ConsoleEmailSender.js +19 -0
- package/dist/auth/ConsoleEmailSender.js.map +1 -0
- package/dist/auth/appleClientSecret.d.ts +75 -0
- package/dist/auth/appleClientSecret.d.ts.map +1 -0
- package/dist/auth/appleClientSecret.js +116 -0
- package/dist/auth/appleClientSecret.js.map +1 -0
- package/dist/auth/buildAuth.d.ts +4565 -0
- package/dist/auth/buildAuth.d.ts.map +1 -0
- package/dist/auth/buildAuth.js +307 -0
- package/dist/auth/buildAuth.js.map +1 -0
- package/dist/auth/callerResolver.d.ts +48 -0
- package/dist/auth/callerResolver.d.ts.map +1 -0
- package/dist/auth/callerResolver.js +49 -0
- package/dist/auth/callerResolver.js.map +1 -0
- package/dist/auth/createAuthRoutes.d.ts +22 -0
- package/dist/auth/createAuthRoutes.d.ts.map +1 -0
- package/dist/auth/createAuthRoutes.js +128 -0
- package/dist/auth/createAuthRoutes.js.map +1 -0
- package/dist/auth/createMantleAuth.d.ts +3 -0
- package/dist/auth/createMantleAuth.d.ts.map +1 -0
- package/dist/auth/createMantleAuth.js +483 -0
- package/dist/auth/createMantleAuth.js.map +1 -0
- package/dist/auth/db.d.ts +17 -0
- package/dist/auth/db.d.ts.map +1 -0
- package/dist/auth/db.js +24 -0
- package/dist/auth/db.js.map +1 -0
- package/dist/auth/emailTemplates.d.ts +7 -0
- package/dist/auth/emailTemplates.d.ts.map +1 -0
- package/dist/auth/emailTemplates.js +27 -0
- package/dist/auth/emailTemplates.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/methods.d.ts +717 -0
- package/dist/auth/methods.d.ts.map +1 -0
- package/dist/auth/methods.js +321 -0
- package/dist/auth/methods.js.map +1 -0
- package/dist/auth/oauthTokens.d.ts +24 -0
- package/dist/auth/oauthTokens.d.ts.map +1 -0
- package/dist/auth/oauthTokens.js +146 -0
- package/dist/auth/oauthTokens.js.map +1 -0
- package/dist/auth/setupIncomplete.d.ts +16 -0
- package/dist/auth/setupIncomplete.d.ts.map +1 -0
- package/dist/auth/setupIncomplete.js +50 -0
- package/dist/auth/setupIncomplete.js.map +1 -0
- package/dist/auth/types.d.ts +440 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/bun/index.d.ts +65 -0
- package/dist/bun/index.d.ts.map +1 -0
- package/dist/bun/index.js +130 -0
- package/dist/bun/index.js.map +1 -0
- package/dist/cli/emitModule.d.ts +7 -0
- package/dist/cli/emitModule.d.ts.map +1 -0
- package/dist/cli/emitModule.js +127 -0
- package/dist/cli/emitModule.js.map +1 -0
- package/dist/cli/generate.d.ts +4 -16
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +318 -262
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +15 -71
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/preset.d.ts +18 -0
- package/dist/cli/preset.d.ts.map +1 -0
- package/dist/cli/preset.js +352 -0
- package/dist/cli/preset.js.map +1 -0
- package/dist/cloudflare/index.d.ts +21 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +14 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/r2Media.d.ts +43 -0
- package/dist/cloudflare/r2Media.d.ts.map +1 -0
- package/dist/cloudflare/r2Media.js +69 -0
- package/dist/cloudflare/r2Media.js.map +1 -0
- package/dist/core/caller.d.ts +35 -0
- package/dist/core/caller.d.ts.map +1 -0
- package/dist/core/caller.js +3 -0
- package/dist/core/caller.js.map +1 -0
- package/dist/core/createMantle.d.ts +22 -0
- package/dist/core/createMantle.d.ts.map +1 -0
- package/dist/core/createMantle.js +117 -0
- package/dist/core/createMantle.js.map +1 -0
- package/dist/core/dialect.d.ts +41 -0
- package/dist/core/dialect.d.ts.map +1 -0
- package/dist/core/dialect.js +7 -0
- package/dist/core/dialect.js.map +1 -0
- package/dist/core/driver.d.ts +17 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +2 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/email.d.ts +17 -0
- package/dist/core/email.d.ts.map +1 -0
- package/dist/core/email.js +2 -0
- package/dist/core/email.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/invocation.d.ts +66 -0
- package/dist/core/invocation.d.ts.map +1 -0
- package/dist/core/invocation.js +3 -0
- package/dist/core/invocation.js.map +1 -0
- package/dist/core/runtime/auth.d.ts +9 -0
- package/dist/core/runtime/auth.d.ts.map +1 -0
- package/dist/core/runtime/auth.js +39 -0
- package/dist/core/runtime/auth.js.map +1 -0
- package/dist/core/runtime/createRuntime.d.ts +23 -0
- package/dist/core/runtime/createRuntime.d.ts.map +1 -0
- package/dist/core/runtime/createRuntime.js +214 -0
- package/dist/core/runtime/createRuntime.js.map +1 -0
- package/dist/core/runtime/verifyPlan.d.ts +34 -0
- package/dist/core/runtime/verifyPlan.d.ts.map +1 -0
- package/dist/core/runtime/verifyPlan.js +301 -0
- package/dist/core/runtime/verifyPlan.js.map +1 -0
- package/dist/core/service.d.ts +45 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +2 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/site.d.ts +117 -0
- package/dist/core/site.d.ts.map +1 -0
- package/dist/core/site.js +2 -0
- package/dist/core/site.js.map +1 -0
- package/dist/core/siteConfig.d.ts +5 -0
- package/dist/core/siteConfig.d.ts.map +1 -0
- package/dist/core/siteConfig.js +24 -0
- package/dist/core/siteConfig.js.map +1 -0
- package/dist/core/sql/allowlist.d.ts +65 -0
- package/dist/core/sql/allowlist.d.ts.map +1 -0
- package/dist/core/sql/allowlist.js +705 -0
- package/dist/core/sql/allowlist.js.map +1 -0
- package/dist/core/sql/ast.d.ts +24 -0
- package/dist/core/sql/ast.d.ts.map +1 -0
- package/dist/core/sql/ast.js +32 -0
- package/dist/core/sql/ast.js.map +1 -0
- package/dist/core/sql/compile.d.ts +50 -0
- package/dist/core/sql/compile.d.ts.map +1 -0
- package/dist/core/sql/compile.js +48 -0
- package/dist/core/sql/compile.js.map +1 -0
- package/dist/core/sql/policy.d.ts +121 -0
- package/dist/core/sql/policy.d.ts.map +1 -0
- package/dist/core/sql/policy.js +379 -0
- package/dist/core/sql/policy.js.map +1 -0
- package/dist/core/sql/positions.d.ts +30 -0
- package/dist/core/sql/positions.d.ts.map +1 -0
- package/dist/core/sql/positions.js +22 -0
- package/dist/core/sql/positions.js.map +1 -0
- package/dist/core/sql/run.d.ts +76 -0
- package/dist/core/sql/run.d.ts.map +1 -0
- package/dist/core/sql/run.js +267 -0
- package/dist/core/sql/run.js.map +1 -0
- package/dist/core/store/createStore.d.ts +49 -0
- package/dist/core/store/createStore.d.ts.map +1 -0
- package/dist/core/store/createStore.js +227 -0
- package/dist/core/store/createStore.js.map +1 -0
- package/dist/core/store/cursor.d.ts +4 -0
- package/dist/core/store/cursor.d.ts.map +1 -0
- package/dist/core/store/cursor.js +22 -0
- package/dist/core/store/cursor.js.map +1 -0
- package/dist/core/store/json.d.ts +80 -0
- package/dist/core/store/json.d.ts.map +1 -0
- package/dist/core/store/json.js +342 -0
- package/dist/core/store/json.js.map +1 -0
- package/dist/core/store.d.ts +160 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +2 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/wire.d.ts +20 -0
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/core/wire.js +84 -0
- package/dist/core/wire.js.map +1 -0
- package/dist/core/withCaller.d.ts +16 -0
- package/dist/core/withCaller.d.ts.map +1 -0
- package/dist/core/withCaller.js +29 -0
- package/dist/core/withCaller.js.map +1 -0
- package/dist/d1/adapter.d.ts +12 -0
- package/dist/d1/adapter.d.ts.map +1 -0
- package/dist/d1/adapter.js +23 -0
- package/dist/d1/adapter.js.map +1 -0
- package/dist/d1/codec.d.ts +14 -0
- package/dist/d1/codec.d.ts.map +1 -0
- package/dist/d1/codec.js +136 -0
- package/dist/d1/codec.js.map +1 -0
- package/dist/d1/compile/index.d.ts +9 -0
- package/dist/d1/compile/index.d.ts.map +1 -0
- package/dist/d1/compile/index.js +9 -0
- package/dist/d1/compile/index.js.map +1 -0
- package/dist/d1/dialect.d.ts +4 -0
- package/dist/d1/dialect.d.ts.map +1 -0
- package/dist/d1/dialect.js +13 -0
- package/dist/d1/dialect.js.map +1 -0
- package/dist/d1/executor.d.ts +13 -0
- package/dist/d1/executor.d.ts.map +1 -0
- package/dist/d1/executor.js +91 -0
- package/dist/d1/executor.js.map +1 -0
- package/dist/d1/index.d.ts +6 -0
- package/dist/d1/index.d.ts.map +1 -0
- package/dist/d1/index.js +6 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/d1/lower.d.ts +8 -0
- package/dist/d1/lower.d.ts.map +1 -0
- package/dist/d1/lower.js +167 -0
- package/dist/d1/lower.js.map +1 -0
- package/dist/d1/media.d.ts +5 -0
- package/dist/d1/media.d.ts.map +1 -0
- package/dist/d1/media.js +157 -0
- package/dist/d1/media.js.map +1 -0
- package/dist/d1/migrations.d.ts +12 -0
- package/dist/d1/migrations.d.ts.map +1 -0
- package/dist/d1/migrations.js +111 -0
- package/dist/d1/migrations.js.map +1 -0
- package/dist/d1/print.d.ts +28 -0
- package/dist/d1/print.d.ts.map +1 -0
- package/dist/d1/print.js +54 -0
- package/dist/d1/print.js.map +1 -0
- package/dist/d1/site.d.ts +17 -0
- package/dist/d1/site.d.ts.map +1 -0
- package/dist/d1/site.js +63 -0
- package/dist/d1/site.js.map +1 -0
- package/dist/d1/storage.d.ts +34 -0
- package/dist/d1/storage.d.ts.map +1 -0
- package/dist/d1/storage.js +288 -0
- package/dist/d1/storage.js.map +1 -0
- package/dist/d1/tz.d.ts +21 -0
- package/dist/d1/tz.d.ts.map +1 -0
- package/dist/d1/tz.js +54 -0
- package/dist/d1/tz.js.map +1 -0
- package/dist/d1/validator.d.ts +10 -0
- package/dist/d1/validator.d.ts.map +1 -0
- package/dist/d1/validator.js +33 -0
- package/dist/d1/validator.js.map +1 -0
- package/dist/mcp/apps.d.ts +43 -0
- package/dist/mcp/apps.d.ts.map +1 -0
- package/dist/mcp/apps.js +57 -0
- package/dist/mcp/apps.js.map +1 -0
- package/dist/mcp/catalog.d.ts +55 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +81 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/createMcpSurface.d.ts +34 -0
- package/dist/mcp/createMcpSurface.d.ts.map +1 -0
- package/dist/mcp/createMcpSurface.js +150 -0
- package/dist/mcp/createMcpSurface.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/postgres/adapter.d.ts +20 -0
- package/dist/postgres/adapter.d.ts.map +1 -0
- package/dist/postgres/adapter.js +44 -0
- package/dist/postgres/adapter.js.map +1 -0
- package/dist/postgres/codec.d.ts +13 -0
- package/dist/postgres/codec.d.ts.map +1 -0
- package/dist/postgres/codec.js +110 -0
- package/dist/postgres/codec.js.map +1 -0
- package/dist/postgres/compile/index.d.ts +9 -0
- package/dist/postgres/compile/index.d.ts.map +1 -0
- package/dist/postgres/compile/index.js +9 -0
- package/dist/postgres/compile/index.js.map +1 -0
- package/dist/postgres/driver.d.ts +92 -0
- package/dist/postgres/driver.d.ts.map +1 -0
- package/dist/postgres/driver.js +110 -0
- package/dist/postgres/driver.js.map +1 -0
- package/dist/postgres/executor.d.ts +20 -0
- package/dist/postgres/executor.d.ts.map +1 -0
- package/dist/postgres/executor.js +69 -0
- package/dist/postgres/executor.js.map +1 -0
- package/dist/postgres/index.d.ts +7 -0
- package/dist/postgres/index.d.ts.map +1 -0
- package/dist/postgres/index.js +7 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/postgres/lower.d.ts +6 -0
- package/dist/postgres/lower.d.ts.map +1 -0
- package/dist/postgres/lower.js +157 -0
- package/dist/postgres/lower.js.map +1 -0
- package/dist/postgres/print.d.ts +11 -0
- package/dist/postgres/print.d.ts.map +1 -0
- package/dist/postgres/print.js +121 -0
- package/dist/postgres/print.js.map +1 -0
- package/dist/postgres/storage.d.ts +19 -0
- package/dist/postgres/storage.d.ts.map +1 -0
- package/dist/postgres/storage.js +201 -0
- package/dist/postgres/storage.js.map +1 -0
- package/dist/postgres/textRows.d.ts +10 -0
- package/dist/postgres/textRows.d.ts.map +1 -0
- package/dist/postgres/textRows.js +44 -0
- package/dist/postgres/textRows.js.map +1 -0
- package/dist/postgres/validator.d.ts +12 -0
- package/dist/postgres/validator.d.ts.map +1 -0
- package/dist/postgres/validator.js +46 -0
- package/dist/postgres/validator.js.map +1 -0
- package/dist/spec/domain/index.d.ts +3 -0
- package/dist/spec/domain/index.d.ts.map +1 -0
- package/dist/spec/domain/index.js +3 -0
- package/dist/spec/domain/index.js.map +1 -0
- package/dist/spec/domain/model/ContentState.d.ts +8 -0
- package/dist/spec/domain/model/ContentState.d.ts.map +1 -0
- package/dist/spec/domain/model/ContentState.js +7 -0
- package/dist/spec/domain/model/ContentState.js.map +1 -0
- package/dist/spec/domain/model/Entry.d.ts +29 -0
- package/dist/spec/domain/model/Entry.d.ts.map +1 -0
- package/dist/spec/domain/model/Entry.js +16 -0
- package/dist/spec/domain/model/Entry.js.map +1 -0
- package/dist/spec/domain/model/Locale.d.ts +30 -0
- package/dist/spec/domain/model/Locale.d.ts.map +1 -0
- package/dist/spec/domain/model/Locale.js +33 -0
- package/dist/spec/domain/model/Locale.js.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts +452 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.js +149 -0
- package/dist/spec/domain/model/ManifestGrammar.js.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts +55 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.js +90 -0
- package/dist/spec/domain/model/MediaMimeAccept.js.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts +94 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.js +4 -0
- package/dist/spec/domain/model/RuntimePlan.js.map +1 -0
- package/dist/spec/domain/model/SiteConfig.d.ts +173 -0
- package/dist/spec/domain/model/SiteConfig.d.ts.map +1 -0
- package/dist/spec/domain/model/SiteConfig.js +13 -0
- package/dist/spec/domain/model/SiteConfig.js.map +1 -0
- package/dist/spec/domain/model/SqlIr.d.ts +96 -0
- package/dist/spec/domain/model/SqlIr.d.ts.map +1 -0
- package/dist/spec/domain/model/SqlIr.js +95 -0
- package/dist/spec/domain/model/SqlIr.js.map +1 -0
- package/dist/spec/domain/model/index.d.ts +14 -0
- package/dist/spec/domain/model/index.d.ts.map +1 -0
- package/dist/spec/domain/model/index.js +14 -0
- package/dist/spec/domain/model/index.js.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts +2 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.js +63 -0
- package/dist/spec/domain/service/CloudflareCron.js.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts +34 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js +114 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts +56 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.js +88 -0
- package/dist/spec/domain/service/EntryDataValidator.js.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts +29 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js +156 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts +75 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js +76 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +29 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js +96 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts +60 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js +116 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts +15 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js +225 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts +45 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.js +92 -0
- package/dist/spec/domain/service/ManifestLinker.js.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +16 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js +76 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +1 -0
- package/dist/spec/domain/service/ManifestParser.d.ts +49 -0
- package/dist/spec/domain/service/ManifestParser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestParser.js +203 -0
- package/dist/spec/domain/service/ManifestParser.js.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts +9 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.js +19 -0
- package/dist/spec/domain/service/ManifestPartition.js.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +33 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js +43 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts +10 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js +76 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts +25 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.js +50 -0
- package/dist/spec/domain/service/McpToolNaming.js.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts +4 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.js +14 -0
- package/dist/spec/domain/service/PlanFingerprint.js.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js +211 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +42 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +289 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts +33 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js +256 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts +11 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js +78 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts +31 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js +445 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +39 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js +194 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js.map +1 -0
- package/dist/spec/domain/service/SqlClassify.d.ts +19 -0
- package/dist/spec/domain/service/SqlClassify.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlClassify.js +42 -0
- package/dist/spec/domain/service/SqlClassify.js.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts +16 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.js +20 -0
- package/dist/spec/domain/service/SqlRefusal.js.map +1 -0
- package/dist/spec/domain/service/SqlTypes.d.ts +40 -0
- package/dist/spec/domain/service/SqlTypes.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlTypes.js +110 -0
- package/dist/spec/domain/service/SqlTypes.js.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +3 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js +19 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts +16 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js +337 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js +89 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +11 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js +26 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +14 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js +53 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/index.d.ts +24 -0
- package/dist/spec/domain/service/index.d.ts.map +1 -0
- package/dist/spec/domain/service/index.js +24 -0
- package/dist/spec/domain/service/index.js.map +1 -0
- package/dist/spec/index.d.ts +10 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +12 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts +16 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js +34 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js.map +1 -0
- package/dist/spec/infrastructure/index.d.ts +2 -0
- package/dist/spec/infrastructure/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/index.js +2 -0
- package/dist/spec/infrastructure/index.js.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +18 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js +17 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts +37 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.js +282 -0
- package/dist/spec/infrastructure/sql/compilePlan.js.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts +35 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.js +92 -0
- package/dist/spec/infrastructure/sql/compileSql.js.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts +8 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.js +100 -0
- package/dist/spec/infrastructure/sql/frontEnd.js.map +1 -0
- package/dist/spec/infrastructure/sql/index.d.ts +4 -0
- package/dist/spec/infrastructure/sql/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/index.js +4 -0
- package/dist/spec/infrastructure/sql/index.js.map +1 -0
- package/dist/spec/kernel/diagnostic.d.ts +137 -0
- package/dist/spec/kernel/diagnostic.d.ts.map +1 -0
- package/dist/spec/kernel/diagnostic.js +296 -0
- package/dist/spec/kernel/diagnostic.js.map +1 -0
- package/dist/spec/kernel/index.d.ts +8 -0
- package/dist/spec/kernel/index.d.ts.map +1 -0
- package/dist/spec/kernel/index.js +8 -0
- package/dist/spec/kernel/index.js.map +1 -0
- package/dist/spec/usecase/EmitTypes.d.ts +22 -0
- package/dist/spec/usecase/EmitTypes.d.ts.map +1 -0
- package/dist/spec/usecase/EmitTypes.js +182 -0
- package/dist/spec/usecase/EmitTypes.js.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +8 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js +101 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +27 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +14 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +1 -0
- package/dist/spec/usecase/dto/index.d.ts +3 -0
- package/dist/spec/usecase/dto/index.d.ts.map +1 -0
- package/dist/spec/usecase/dto/index.js +3 -0
- package/dist/spec/usecase/dto/index.js.map +1 -0
- package/dist/spec/usecase/index.d.ts +10 -0
- package/dist/spec/usecase/index.d.ts.map +1 -0
- package/dist/spec/usecase/index.js +10 -0
- package/dist/spec/usecase/index.js.map +1 -0
- package/dist/testing/cases/before-hook.d.ts +4 -0
- package/dist/testing/cases/before-hook.d.ts.map +1 -0
- package/dist/testing/cases/before-hook.js +71 -0
- package/dist/testing/cases/before-hook.js.map +1 -0
- package/dist/testing/cases/corpus.d.ts +12 -0
- package/dist/testing/cases/corpus.d.ts.map +1 -0
- package/dist/testing/cases/corpus.js +91 -0
- package/dist/testing/cases/corpus.js.map +1 -0
- package/dist/testing/cases/policy.d.ts +74 -0
- package/dist/testing/cases/policy.d.ts.map +1 -0
- package/dist/testing/cases/policy.js +142 -0
- package/dist/testing/cases/policy.js.map +1 -0
- package/dist/testing/cases/printer.d.ts +4 -0
- package/dist/testing/cases/printer.d.ts.map +1 -0
- package/dist/testing/cases/printer.js +32 -0
- package/dist/testing/cases/printer.js.map +1 -0
- package/dist/testing/cases/report-view.d.ts +5 -0
- package/dist/testing/cases/report-view.d.ts.map +1 -0
- package/dist/testing/cases/report-view.js +33 -0
- package/dist/testing/cases/report-view.js.map +1 -0
- package/dist/testing/cases/requisition.d.ts +4 -0
- package/dist/testing/cases/requisition.d.ts.map +1 -0
- package/dist/testing/cases/requisition.js +38 -0
- package/dist/testing/cases/requisition.js.map +1 -0
- package/dist/testing/cases/search-places.d.ts +4 -0
- package/dist/testing/cases/search-places.d.ts.map +1 -0
- package/dist/testing/cases/search-places.js +60 -0
- package/dist/testing/cases/search-places.js.map +1 -0
- package/dist/testing/cases/stock.d.ts +4 -0
- package/dist/testing/cases/stock.d.ts.map +1 -0
- package/dist/testing/cases/stock.js +35 -0
- package/dist/testing/cases/stock.js.map +1 -0
- package/dist/testing/cases/store.d.ts +4 -0
- package/dist/testing/cases/store.d.ts.map +1 -0
- package/dist/testing/cases/store.js +100 -0
- package/dist/testing/cases/store.js.map +1 -0
- package/dist/testing/harness.d.ts +94 -0
- package/dist/testing/harness.d.ts.map +1 -0
- package/dist/testing/harness.js +168 -0
- package/dist/testing/harness.js.map +1 -0
- package/dist/testing/index.d.ts +37 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +43 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/report.d.ts +15 -0
- package/dist/testing/report.d.ts.map +1 -0
- package/dist/testing/report.js +22 -0
- package/dist/testing/report.js.map +1 -0
- package/dist/web/createRestSurface.d.ts +7 -0
- package/dist/web/createRestSurface.d.ts.map +1 -0
- package/dist/web/createRestSurface.js +39 -0
- package/dist/web/createRestSurface.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +2 -0
- package/dist/web/index.js.map +1 -0
- package/docs/adr/0008-structured-diagnostic-shape.md +2 -2
- package/docs/adr/0011-adapter-port-spec.md +2 -2
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +21 -2
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +5 -1
- package/docs/adr/0022-caller-observed-version-occ.md +1 -1
- package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
- package/docs/adr/0027-scheduled-procedure-triggers.md +1 -1
- package/docs/adr/0028-schema-ttl-expiry.md +3 -3
- package/docs/adr/0029-mcp-apps-interaction-contracts.md +324 -0
- package/docs/adr/0030-store.md +40 -0
- package/docs/adr/0031-host-cloud-core-contract.md +25 -0
- package/docs/adr/0032-store-centric-core-and-service-contract.md +361 -0
- package/docs/adr/0033-storage-converges-to-the-plan.md +92 -0
- package/docs/adr/0034-store-is-authored-as-sql.md +192 -0
- package/docs/adr/0035-sql-dialects.md +154 -0
- package/docs/adr/0036-host-and-dialect.md +65 -0
- package/docs/adr/0037-postgresql-is-the-reference-dialect.md +124 -0
- package/docs/adr/0038-bun-native-host.md +63 -0
- package/docs/adr/README.md +23 -8
- package/docs/adr/adr-lite-861-admin-webmcp.md +6 -0
- package/docs/adr/adr-lite-909-admin-ui-kit.md +1 -1
- package/docs/examples/README.md +16 -18
- package/docs/examples/commerce-inventory.md +481 -0
- package/docs/examples/commerce.md +254 -0
- package/docs/examples/guarded-api.md +238 -0
- package/docs/examples/intake-hooks.md +237 -0
- package/docs/examples/intake.md +127 -0
- package/docs/examples/legal-documents.md +218 -0
- package/docs/examples/procurement.md +215 -0
- package/docs/examples/publication.md +211 -0
- package/docs/examples/reference-service/.dev.vars.example +4 -0
- package/docs/examples/reference-service/.mantle/generated/mantle.ts +174 -0
- package/docs/examples/reference-service/.mantle/generated/plan.json +1936 -0
- package/docs/examples/reference-service/README.md +33 -0
- package/docs/examples/reference-service/manifests/catalog.yaml +103 -0
- package/docs/examples/reference-service/manifests/orders.yaml +120 -0
- package/docs/examples/reference-service/mantle.config.json +1 -0
- package/docs/examples/reference-service/package.json +27 -0
- package/docs/examples/reference-service/smoke.mjs +156 -0
- package/docs/examples/reference-service/src/handlers.ts +36 -0
- package/docs/examples/reference-service/src/index.ts +33 -0
- package/docs/examples/reference-service/src/service.ts +78 -0
- package/docs/examples/{host-minimal-worker → reference-service}/tsconfig.json +7 -2
- package/docs/examples/reference-service/wrangler.jsonc +26 -0
- package/docs/examples/reservation.md +142 -0
- package/docs/handbook/cloudflare/authentication.md +96 -316
- package/docs/handbook/cloudflare/chatgpt-sites.md +104 -15
- package/docs/handbook/cloudflare/deploy-and-operate.md +77 -71
- package/docs/handbook/cloudflare/media-r2.md +64 -187
- package/docs/handbook/cloudflare/service-entry.md +138 -0
- package/docs/handbook/concepts/authorization.md +104 -94
- package/docs/handbook/concepts/four-atoms.md +68 -144
- package/docs/handbook/concepts/lifecycle-and-locales.md +62 -114
- package/docs/handbook/concepts/mcp-and-agents.md +112 -117
- package/docs/handbook/concepts/procedures-and-triggers.md +126 -181
- package/docs/handbook/concepts/runtime-and-adapters.md +177 -163
- package/docs/handbook/concepts/views.md +97 -173
- package/docs/handbook/examples/hub.md +17 -6
- package/docs/handbook/guides/admin-ui.md +101 -96
- package/docs/handbook/guides/agent-setup.md +56 -71
- package/docs/handbook/guides/typed-queries.md +105 -111
- package/docs/handbook/navigation.json +8 -33
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -178
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +91 -279
- package/docs/handbook/reference/schema.md +154 -239
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +72 -181
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -77
- package/docs/handbook/start/overview.md +59 -51
- package/docs/handbook/start/project-and-cli.md +132 -105
- package/docs/handbook/start/quickstart-worker.md +102 -160
- package/docs/skills/develop/SKILL.md +114 -240
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +83 -47
- package/docs/skills/media-gc/SKILL.md +21 -10
- package/docs/skills/provision/SKILL.md +68 -162
- package/docs/skills/update/SKILL.md +33 -34
- package/docs/upgrade-0.1-to-0.2.md +211 -0
- package/package.json +87 -106
- 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/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/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/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/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/README.md +0 -127
- 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
package/dist/cli/generate.js
CHANGED
|
@@ -1,299 +1,355 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `mantle generate` and `mantle generate --check` (ADR-0032 decision 12 and amendment "mantle generate"): manifests and
|
|
3
|
+
* `mantle.config.json` in, `.mantle/generated/plan.json` and `.mantle/generated/mantle.ts` out. It never installs a package.
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { existsSync } from "node:fs";
|
|
7
|
+
import { lstat, mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
4
8
|
import { createRequire } from "node:module";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
9
|
+
import { dirname, join, resolve } from "node:path";
|
|
10
|
+
import { pathToFileURL } from "node:url";
|
|
11
|
+
import process, { cwd as processCwd, stderr, stdout } from "node:process";
|
|
7
12
|
import { parseArgs } from "node:util";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
13
|
+
import { planStorageChanges } from "../d1/storage.js";
|
|
14
|
+
import { compileLinkedPlan, parseManifestSources, validateDiagnostic, ValidateManifestsUseCase } from "../spec/index.js";
|
|
15
|
+
import * as d1 from "../d1/compile/index.js";
|
|
16
|
+
import * as pg from "../postgres/compile/index.js";
|
|
17
|
+
import { translateParseArgsError } from "../spec/infrastructure/cli/parseArgsError.js";
|
|
18
|
+
import { emitMantleModule } from "./emitModule.js";
|
|
19
|
+
import { toCloudflareCron } from "../spec/domain/service/CloudflareCron.js";
|
|
20
|
+
import { presetWarnings, writePreset } from "./preset.js";
|
|
21
|
+
const FEATURES = ["mcp", "admin", "web"];
|
|
22
|
+
const IDENTITIES = ["mantle", "custom", "none"];
|
|
23
|
+
/** Where the service runs (ADR-0036). `none` writes no preset: the application wires `createMantle` itself. */
|
|
24
|
+
const HOSTS = ["cloudflare", "bun", "none"];
|
|
25
|
+
/** The built-in dialects by every name a config may give them. The SQLite dialect's plans still record `@aotter/mantle/d1`. */
|
|
26
|
+
const BUILT_IN = { sqlite: "sqlite", d1: "sqlite", [d1.name]: "sqlite", postgres: "postgres", [pg.name]: "postgres" };
|
|
27
|
+
const builtInOf = (dialect) => (dialect === undefined ? "sqlite" : BUILT_IN[dialect]);
|
|
28
|
+
const CONFIG = "mantle.config.json";
|
|
29
|
+
const OUT = ".mantle/generated";
|
|
30
|
+
/** The packages a selection needs in the project; `@aotter/mantle` itself is always one. */
|
|
31
|
+
const PACKAGES = {
|
|
32
|
+
mcp: ["@modelcontextprotocol/server", "@modelcontextprotocol/ext-apps"], admin: ["@aotter/mantle-ui"], web: [],
|
|
33
|
+
mantle: ["better-auth", "@better-auth/oauth-provider", "@better-auth/mcp", "@better-auth/cimd"], custom: [], none: [],
|
|
34
|
+
};
|
|
35
|
+
/** What a Cloudflare preset over PostgreSQL imports (Hyperdrive speaks the PostgreSQL protocol; `pg` is the driver). */
|
|
36
|
+
const POSTGRES_PACKAGES = ["pg"];
|
|
37
|
+
/** compilePlan's key order is already deterministic, and a JSON Schema's `properties` order is what Admin and MCP show. */
|
|
38
|
+
const json = (v) => `${JSON.stringify(v, null, 2)}\n`;
|
|
39
|
+
/** A BOM or CRLF line endings (a Windows checkout) are not a different source. */
|
|
40
|
+
const normalize = (text) => text.replace(/^\uFEFF/, "").replace(/\r\n/g, "\n");
|
|
41
|
+
const readText = (path) => readFile(path, "utf8").then(normalize, () => undefined);
|
|
42
|
+
function findUp(root, rel) {
|
|
43
|
+
for (let dir = root;; dir = dirname(dir)) {
|
|
44
|
+
if (existsSync(join(dir, rel)))
|
|
45
|
+
return join(dir, rel);
|
|
46
|
+
if (dirname(dir) === dir)
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const LOCKFILES = ["pnpm-lock.yaml", "yarn.lock", "bun.lock", "bun.lockb", "package-lock.json"];
|
|
51
|
+
/** The nearest directory with a lockfile decides the package manager. */
|
|
52
|
+
function installCommand(root, packages) {
|
|
53
|
+
let lock;
|
|
54
|
+
for (let dir = root; !lock; dir = dirname(dir)) {
|
|
55
|
+
lock = LOCKFILES.find((f) => existsSync(join(dir, f)));
|
|
56
|
+
if (dirname(dir) === dir)
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
const add = lock === "pnpm-lock.yaml" ? "pnpm add" : lock === "yarn.lock" ? "yarn add" : lock?.startsWith("bun") ? "bun add" : "npm install";
|
|
60
|
+
return `${add} ${packages.join(" ")}`;
|
|
61
|
+
}
|
|
13
62
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
63
|
+
* A `node_modules` walk, the layout bundlers resolve from. Under Yarn PnP there is no `node_modules`, so Node's own resolution
|
|
64
|
+
* decides; elsewhere it is not used, because it also honours `NODE_PATH`, which a bundler does not.
|
|
16
65
|
*/
|
|
17
|
-
|
|
66
|
+
function installed(root, name) {
|
|
67
|
+
if (!process.versions.pnp)
|
|
68
|
+
return !!findUp(root, join("node_modules", name, "package.json"));
|
|
69
|
+
try {
|
|
70
|
+
createRequire(join(root, "package.json")).resolve(`${name}/package.json`);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
return err.code === "ERR_PACKAGE_PATH_NOT_EXPORTED"; // found, it just does not export package.json
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Each selected feature (and the identity) whose packages are not installed, and `admin` without an identity. */
|
|
78
|
+
function featureDiagnostics(root, config) {
|
|
79
|
+
const out = [];
|
|
80
|
+
const need = (what, packages) => {
|
|
81
|
+
const missing = packages.filter((p) => !installed(root, p));
|
|
82
|
+
if (missing.length)
|
|
83
|
+
out.push(validateDiagnostic({ code: "GENERATE_FEATURE_DEPENDENCY_MISSING", severity: "error", path: what, message: `${what} needs ${missing.join(", ")}, which ${missing.length > 1 ? "are" : "is"} not installed. Run \`${installCommand(root, missing)}\`; mantle generate never installs packages.` }));
|
|
84
|
+
};
|
|
85
|
+
need("@aotter/mantle", ["@aotter/mantle"]);
|
|
86
|
+
need(`identity '${config.identity}'`, PACKAGES[config.identity]);
|
|
87
|
+
for (const f of config.features)
|
|
88
|
+
need(`feature '${f}'`, PACKAGES[f]);
|
|
89
|
+
// a preset written now serves the staff MCP App, which @aotter/mantle-ui builds; a service already written is the application's
|
|
90
|
+
const writesPreset = (config.host ?? "cloudflare") !== "none" && !!builtInOf(config.dialect) && !existsSync(join(root, "src/service.ts"));
|
|
91
|
+
if (writesPreset && (config.host ?? "cloudflare") === "cloudflare" && builtInOf(config.dialect) === "postgres")
|
|
92
|
+
need("dialect 'postgres' on Cloudflare", POSTGRES_PACKAGES);
|
|
93
|
+
if (writesPreset && config.host === "bun")
|
|
94
|
+
need("host 'bun' types", ["bun-types"]);
|
|
95
|
+
if (writesPreset && config.features.includes("mcp") && config.identity !== "none" && !config.features.includes("admin"))
|
|
96
|
+
need("the staff MCP App", ["@aotter/mantle-ui"]);
|
|
97
|
+
if (config.features.includes("admin") && config.identity === "none")
|
|
98
|
+
out.push(validateDiagnostic({ code: "GENERATE_FEATURE_DEPENDENCY_MISSING", severity: "error", path: "feature 'admin'", message: "feature 'admin' needs a caller identity, and identity is 'none'. Pass --identity mantle or --identity custom, or leave admin out of --features." }));
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function readConfig(text) {
|
|
102
|
+
let v;
|
|
18
103
|
try {
|
|
19
|
-
|
|
20
|
-
return existsSync(path) ? path : null;
|
|
104
|
+
v = JSON.parse(text);
|
|
21
105
|
}
|
|
22
|
-
catch {
|
|
23
|
-
|
|
106
|
+
catch (err) {
|
|
107
|
+
throw new Error(`${CONFIG} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
24
108
|
}
|
|
109
|
+
if (!v || typeof v !== "object" || Array.isArray(v))
|
|
110
|
+
throw new Error(`${CONFIG} must be a JSON object.`);
|
|
111
|
+
if (v.version === 1)
|
|
112
|
+
throw new Error(`${CONFIG} is a 0.1.x selection (version 1, with a host): move it to version 2 as node_modules/@aotter/mantle/docs/upgrade-0.1-to-0.2.md describes.`);
|
|
113
|
+
const features = v.features;
|
|
114
|
+
if (v.version !== 2 || !IDENTITIES.includes(v.identity) || !Array.isArray(features) || FEATURES.filter((f) => features.includes(f)).join() !== features.join())
|
|
115
|
+
throw new Error(`${CONFIG} must be { "version": 2, "identity": ${IDENTITIES.map((i) => `"${i}"`).join(" | ")}, "features": a subset of ${FEATURES.join(", ")} in that order }.`);
|
|
116
|
+
if ("dialect" in v && (typeof v.dialect !== "string" || !v.dialect))
|
|
117
|
+
throw new Error(`${CONFIG} "dialect" must be a module name: "sqlite", "postgres" or a dialect package.`);
|
|
118
|
+
if ("host" in v && !HOSTS.includes(v.host))
|
|
119
|
+
throw new Error(`${CONFIG} "host" must be one of ${HOSTS.map((h) => `"${h}"`).join(", ")}.`);
|
|
120
|
+
return { config: { version: 2, identity: v.identity, features, ...(typeof v.host === "string" ? { host: v.host } : {}), ...(typeof v.dialect === "string" ? { dialect: v.dialect } : {}) }, raw: v };
|
|
25
121
|
}
|
|
26
|
-
|
|
122
|
+
/** The dialect's compile side: `<dialect>/compile`, resolved from the project as a bundler would, or the built-in D1. */
|
|
123
|
+
async function loadDialect(root, dialect) {
|
|
124
|
+
const builtIn = builtInOf(dialect);
|
|
125
|
+
if (builtIn || dialect === undefined)
|
|
126
|
+
return builtIn === "postgres" ? pg : d1;
|
|
127
|
+
// a package name, never a path: the config must not make generate run a file outside node_modules
|
|
128
|
+
if (!/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*(\/[a-z0-9-._~]+)*$/.test(dialect) || dialect.split("/").some((p) => p === "." || p === ".."))
|
|
129
|
+
throw new Error(`${CONFIG} "dialect" must be a package name (or sqlite, postgres); got ${JSON.stringify(dialect)}.`);
|
|
130
|
+
let path;
|
|
27
131
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
132
|
+
// the package's exports must give <dialect>/compile a `default` (or `require`) condition, which require.resolve reads
|
|
133
|
+
path = createRequire(join(root, "package.json")).resolve(`${dialect}/compile`);
|
|
30
134
|
}
|
|
31
|
-
catch {
|
|
32
|
-
|
|
135
|
+
catch (err) {
|
|
136
|
+
throw new Error(`${CONFIG} names the dialect ${dialect}, and ${dialect}/compile cannot be found (${err.code ?? "error"}). Install it; mantle generate never installs packages.`);
|
|
33
137
|
}
|
|
138
|
+
const mod = await import(pathToFileURL(path).href);
|
|
139
|
+
if (mod.name !== dialect || typeof mod.version !== "string" || typeof mod.accepts !== "function")
|
|
140
|
+
throw new Error(`${dialect}/compile is not a dialect's compile side: it must export name "${dialect}", a version string and accepts().`);
|
|
141
|
+
return mod;
|
|
142
|
+
}
|
|
143
|
+
/** The selection: saved config, then flags. An explicit `--features` without `--identity` means `none` (decision 12). */
|
|
144
|
+
function select(saved, features, identity, host, dialect) {
|
|
145
|
+
if (identity !== undefined && !IDENTITIES.includes(identity))
|
|
146
|
+
throw new Error(`--identity must be one of ${IDENTITIES.join(", ")}; got ${identity}`);
|
|
147
|
+
if (host !== undefined && !HOSTS.includes(host))
|
|
148
|
+
throw new Error(`--host must be one of ${HOSTS.join(", ")}; got ${host}`);
|
|
149
|
+
if (dialect !== undefined && !dialect)
|
|
150
|
+
throw new Error("--dialect must be sqlite, postgres or a dialect package name");
|
|
151
|
+
if (saved && identity !== undefined && identity !== saved.identity)
|
|
152
|
+
throw new Error(`Switching identity from '${saved.identity}' to '${identity}' on a rerun is refused: it never drops tables. Change ${CONFIG} deliberately once the data is moved.`);
|
|
153
|
+
// the axes are chosen once: another host or engine is a new composition and, for the engine, a data move
|
|
154
|
+
if (saved && host !== undefined && host !== (saved.host ?? "cloudflare"))
|
|
155
|
+
throw new Error(`Switching host from '${saved.host ?? "cloudflare"}' to '${host}' on a rerun is refused: src/service.ts is yours. Change ${CONFIG} and the composition deliberately.`);
|
|
156
|
+
if (saved && dialect !== undefined && (builtInOf(dialect) ?? dialect) !== (builtInOf(saved.dialect) ?? saved.dialect))
|
|
157
|
+
throw new Error(`Switching dialect from '${saved.dialect ?? "sqlite"}' to '${dialect}' on a rerun is refused: the data stays where it is. Change ${CONFIG} deliberately once it is moved.`);
|
|
158
|
+
const picked = features === undefined ? saved?.features ?? FEATURES : features.split(",").map((f) => f.trim()).filter(Boolean);
|
|
159
|
+
const unknown = picked.filter((f) => !FEATURES.includes(f));
|
|
160
|
+
if (unknown.length)
|
|
161
|
+
throw new Error(`--features accepts only ${FEATURES.join(", ")}; got ${unknown.join(", ")}`);
|
|
162
|
+
// a flag that restates the saved axis (another spelling was refused above) keeps the saved spelling, so nothing is rewritten
|
|
163
|
+
const h = saved ? saved.host ?? (host === "cloudflare" ? undefined : host) : host;
|
|
164
|
+
const d = saved ? saved.dialect ?? (dialect !== undefined && builtInOf(dialect) === "sqlite" ? undefined : dialect) : dialect ?? (host === "bun" ? "postgres" : undefined);
|
|
165
|
+
return { version: 2, identity: (identity ?? saved?.identity ?? (features === undefined ? "mantle" : "none")), features: FEATURES.filter((f) => picked.includes(f)), ...(h ? { host: h } : {}), ...(d ? { dialect: d } : {}) };
|
|
166
|
+
}
|
|
167
|
+
/** Every `.yaml`/`.yml` file directly in the manifest directory, by name. */
|
|
168
|
+
async function readManifests(dir) {
|
|
169
|
+
const names = (await readdir(dir, { withFileTypes: true })).filter((d) => !d.isDirectory() && /\.ya?ml$/i.test(d.name)).map((d) => d.name).sort();
|
|
170
|
+
return Promise.all(names.map(async (name) => ({ name, text: normalize(await readFile(join(dir, name), "utf8")) })));
|
|
171
|
+
}
|
|
172
|
+
/** `node:sqlite` on Node 22 binds only anonymous `?`, so a numbered `?N` becomes `?` with its value in the order it appears. */
|
|
173
|
+
async function openSqliteFile(path) {
|
|
174
|
+
const { DatabaseSync } = await import("node:sqlite");
|
|
175
|
+
const db = new DatabaseSync(path, { readOnly: true });
|
|
176
|
+
return {
|
|
177
|
+
batch: async (stmts) => stmts.map((s) => {
|
|
178
|
+
const binds = [];
|
|
179
|
+
const sql = s.sql.replace(/\?(\d+)/g, (_, n) => (binds.push(s.binds[Number(n) - 1]), "?"));
|
|
180
|
+
return { rows: db.prepare(sql).all(...binds) };
|
|
181
|
+
}),
|
|
182
|
+
};
|
|
34
183
|
}
|
|
184
|
+
const print = (ds) => ds.forEach((d) => stderr.write(`${d.code} ${d.path}: ${d.message}\n`));
|
|
185
|
+
const HELP = `mantle generate — compile manifests to .mantle/generated/plan.json and mantle.ts, and write the
|
|
186
|
+
service preset (src/service.ts, src/index.ts, wrangler.jsonc, ...) once, when src/service.ts does not exist
|
|
187
|
+
|
|
188
|
+
Usage: mantle generate [options]
|
|
189
|
+
|
|
190
|
+
Options:
|
|
191
|
+
--manifests <dir> Manifest directory (default: ./manifests)
|
|
192
|
+
--features <list> Comma-separated positive list of ${FEATURES.join(", ")} (default: all)
|
|
193
|
+
--identity <kind> ${IDENTITIES.join(", ")} (default: mantle; none with an explicit --features)
|
|
194
|
+
--host <host> ${HOSTS.join(", ")} (default: cloudflare); bun defaults to postgres; none writes no preset
|
|
195
|
+
--dialect <name> sqlite (alias d1), postgres, or a dialect package (default: sqlite)
|
|
196
|
+
--check Write nothing; exit 1 when a generated file or ${CONFIG} is stale
|
|
197
|
+
--database <file> With --check: a SQLite file (e.g. wrangler's local D1 under .wrangler/state/v3/d1/),
|
|
198
|
+
opened read-only; prints the SQL storage convergence would run
|
|
199
|
+
-h, --help This help
|
|
200
|
+
`;
|
|
35
201
|
export async function runGenerate(rawArgs, deps = {}) {
|
|
36
|
-
let
|
|
202
|
+
let values;
|
|
37
203
|
try {
|
|
38
|
-
|
|
39
|
-
if (parsed === null) {
|
|
40
|
-
printHelp();
|
|
41
|
-
return 0;
|
|
42
|
-
}
|
|
43
|
-
options = parsed;
|
|
204
|
+
({ values } = parseArgs({ args: [...rawArgs], options: { manifests: { type: "string" }, features: { type: "string" }, identity: { type: "string" }, host: { type: "string" }, dialect: { type: "string" }, check: { type: "boolean" }, database: { type: "string" }, help: { type: "boolean", short: "h" } } }));
|
|
44
205
|
}
|
|
45
|
-
catch (
|
|
46
|
-
stderr.write(`${
|
|
206
|
+
catch (err) {
|
|
207
|
+
stderr.write(`${translateParseArgsError(err).message}\n`);
|
|
47
208
|
return 2;
|
|
48
209
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
let
|
|
210
|
+
if (values.help)
|
|
211
|
+
return (stdout.write(HELP), 0);
|
|
212
|
+
const root = resolve(deps.cwd ?? processCwd());
|
|
213
|
+
const check = values.check === true;
|
|
214
|
+
if (values.database !== undefined && !check)
|
|
215
|
+
return (stderr.write("--database is read only with --check.\n"), 2);
|
|
216
|
+
let config;
|
|
217
|
+
let saved;
|
|
218
|
+
let dialect;
|
|
57
219
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
220
|
+
const savedText = await readFile(join(root, CONFIG), "utf8").catch((e) => (e.code === "ENOENT" ? undefined : Promise.reject(e)));
|
|
221
|
+
saved = savedText === undefined ? undefined : readConfig(savedText);
|
|
222
|
+
config = select(saved?.config, values.features, values.identity, values.host, values.dialect);
|
|
223
|
+
dialect = await loadDialect(root, config.dialect);
|
|
61
224
|
}
|
|
62
|
-
catch (
|
|
63
|
-
stderr.write(`${message(
|
|
225
|
+
catch (err) {
|
|
226
|
+
stderr.write(`${err instanceof Error ? err.message : String(err)}\n`);
|
|
64
227
|
return 2;
|
|
65
228
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
}
|
|
229
|
+
const manifests = values.manifests ?? "manifests";
|
|
230
|
+
let files;
|
|
231
|
+
try {
|
|
232
|
+
files = await readManifests(resolve(root, manifests));
|
|
84
233
|
}
|
|
85
|
-
|
|
86
|
-
|
|
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;
|
|
234
|
+
catch (err) {
|
|
235
|
+
return (stderr.write(`MANIFEST_ROOT_NOT_FOUND ${manifests}: cannot read the manifest directory (${err.code ?? "error"})\n`), 1);
|
|
93
236
|
}
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
237
|
+
if (!files.length)
|
|
238
|
+
return (stderr.write(`MANIFEST_ROOT_NOT_FOUND ${manifests}: no .yaml or .yml manifest files\n`), 1);
|
|
239
|
+
const parsed = parseManifestSources({ sources: files.map((f) => ({ sourceId: f.name, text: f.text })) });
|
|
240
|
+
if (!parsed.ok)
|
|
241
|
+
return (print(parsed.diagnostics), 1);
|
|
242
|
+
const validation = ValidateManifestsUseCase.run({ parsed: parsed.value });
|
|
243
|
+
const errors = validation.diagnostics.filter((d) => d.severity === "error");
|
|
244
|
+
if (errors.length || !validation.linked)
|
|
245
|
+
return (print(errors), 1);
|
|
246
|
+
// warnings (MCP input shapes, missing tool descriptions) are advice: printed, never a failure
|
|
247
|
+
for (const d of validation.diagnostics)
|
|
248
|
+
if (d.severity === "warning")
|
|
249
|
+
stderr.write(`warning: ${d.code} ${d.path}: ${d.message}\n`);
|
|
250
|
+
const compiled = await compileLinkedPlan(validation.linked, dialect);
|
|
251
|
+
// the storage dry-run is the SQLite dialect's; a preset is written for the built-in dialects on Cloudflare (ADR-0036)
|
|
252
|
+
const builtIn = dialect === d1;
|
|
253
|
+
const host = config.host ?? "cloudflare";
|
|
254
|
+
const preset = host !== "none" ? builtInOf(config.dialect) : undefined;
|
|
255
|
+
if (!builtIn && values.database !== undefined)
|
|
256
|
+
return (stderr.write(`--database is a SQLite file for the sqlite dialect; ${dialect.name} plans its own storage.\n`), 2);
|
|
257
|
+
if (!compiled.ok)
|
|
258
|
+
return (print(compiled.diagnostics), 1);
|
|
259
|
+
const missing = featureDiagnostics(root, config);
|
|
260
|
+
if (missing.length)
|
|
261
|
+
return (print(missing), 1);
|
|
262
|
+
// the grammar has no rule across cron fields, so the Cloudflare preset's refusals come before anything is written
|
|
263
|
+
const unmappable = Object.entries(compiled.plan.triggers).flatMap(([name, t]) => {
|
|
264
|
+
if (host === "bun" && t.source.kind === "schedule" && t.source.enabled !== false)
|
|
265
|
+
return [`Trigger ${name}: Bun has no built-in cron dispatcher. Use host none with an explicit scheduler, or disable this Trigger before generating the Bun preset.\n`];
|
|
266
|
+
if (host !== "cloudflare" || t.source.kind !== "schedule" || t.source.enabled === false)
|
|
267
|
+
return [];
|
|
268
|
+
try {
|
|
269
|
+
return (toCloudflareCron(t.source.cron), []);
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
return [`Trigger ${name}: ${err.message}\n`];
|
|
99
273
|
}
|
|
100
|
-
}
|
|
101
|
-
const emitted = emitMantleModule({
|
|
102
|
-
linked: validation.linked,
|
|
103
|
-
namespace: options.namespace,
|
|
104
274
|
});
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
275
|
+
if (unmappable.length)
|
|
276
|
+
return (unmappable.forEach((m) => stderr.write(m)), 1);
|
|
277
|
+
// the source hash is the manifests as authored, keyed by name so the project's location never enters it
|
|
278
|
+
const sourceHash = createHash("sha256").update(JSON.stringify(files.map((f) => [f.name, f.text]))).digest("hex");
|
|
279
|
+
const outputs = [
|
|
280
|
+
[join(OUT, "plan.json"), json({ sourceHash, plan: compiled.plan })],
|
|
281
|
+
[join(OUT, "mantle.ts"), emitMantleModule(compiled.plan, validation.linked)],
|
|
282
|
+
];
|
|
283
|
+
// the config is rewritten only when the selection changes, and keeps whatever else it holds
|
|
284
|
+
const changed = (a, b) => !a || a.identity !== b.identity || a.features.join() !== b.features.join() || a.host !== b.host || a.dialect !== b.dialect;
|
|
285
|
+
if (changed(saved?.config, config))
|
|
286
|
+
outputs.push([CONFIG, json({ ...saved?.raw, version: 2, identity: config.identity, features: config.features, ...(config.host ? { host: config.host } : {}), ...(config.dialect ? { dialect: config.dialect } : {}) })]);
|
|
287
|
+
if (!check) {
|
|
288
|
+
for (const d of [".mantle", OUT]) {
|
|
289
|
+
const st = await lstat(join(root, d)).catch(() => undefined);
|
|
290
|
+
if (st?.isSymbolicLink())
|
|
291
|
+
return (stderr.write(`Refusing to write through the symlink ${d}; generated files live in a real directory.\n`), 2);
|
|
119
292
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
293
|
+
for (const [path, text] of outputs) {
|
|
294
|
+
if ((await readText(join(root, path))) === text)
|
|
295
|
+
continue;
|
|
296
|
+
await mkdir(dirname(join(root, path)), { recursive: true });
|
|
297
|
+
await writeFile(join(root, path), text, "utf8");
|
|
123
298
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return 1;
|
|
133
|
-
}
|
|
134
|
-
if (!options.check && project.commit) {
|
|
299
|
+
stdout.write(`Generated ${OUT}/plan.json and ${OUT}/mantle.ts (fingerprint ${compiled.plan.fingerprint.slice(0, 12)}; identity ${config.identity}; features ${config.features.join(", ") || "none"}${host === "cloudflare" ? "" : `; host ${host}`}${builtIn ? "" : `; dialect ${dialect.name}`}).\n`);
|
|
300
|
+
if (!preset) {
|
|
301
|
+
if (host === "cloudflare")
|
|
302
|
+
stdout.write(`No preset for the dialect ${dialect.name}: compose src/service.ts with its storage adapter.\n`);
|
|
303
|
+
return 0;
|
|
304
|
+
}
|
|
305
|
+
const selection = { ...config, host, dialect: preset };
|
|
306
|
+
let written;
|
|
135
307
|
try {
|
|
136
|
-
await
|
|
137
|
-
await sites?.commit();
|
|
308
|
+
written = await writePreset(root, selection, compiled.plan);
|
|
138
309
|
}
|
|
139
|
-
catch (
|
|
140
|
-
stderr.write(`${message(
|
|
141
|
-
return 2;
|
|
310
|
+
catch (err) {
|
|
311
|
+
return (stderr.write(`${err instanceof Error ? err.message : String(err)}; rerun mantle generate to finish the preset.\n`), 2);
|
|
142
312
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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");
|
|
313
|
+
// host and dialect cannot change on a rerun (select refuses it), so only the identity and features can drift from src/service.ts
|
|
314
|
+
const selectionChanged = !!saved && (saved.config.identity !== config.identity || saved.config.features.join() !== config.features.join());
|
|
315
|
+
for (const w of await presetWarnings(root, selection, selectionChanged, compiled.plan))
|
|
316
|
+
stderr.write(`warning: ${w}\n`);
|
|
317
|
+
if (written.length)
|
|
318
|
+
stdout.write(`Wrote the service preset, which is yours to edit: ${written.join(", ")}.\n`);
|
|
167
319
|
return 0;
|
|
168
320
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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;
|
|
321
|
+
let code = 0;
|
|
322
|
+
for (const [path, text] of outputs) {
|
|
323
|
+
if ((await readText(join(root, path))) === text)
|
|
324
|
+
continue;
|
|
325
|
+
stderr.write(`stale: ${path}\n`);
|
|
326
|
+
code = 1;
|
|
236
327
|
}
|
|
237
|
-
|
|
238
|
-
"
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
328
|
+
if (code)
|
|
329
|
+
stderr.write("Mantle generated files are stale; run `mantle generate`.\n");
|
|
330
|
+
if (!builtIn || (!deps.driver && values.database === undefined))
|
|
331
|
+
return code;
|
|
332
|
+
try {
|
|
333
|
+
const storage = await planStorageChanges(deps.driver ?? (await openSqliteFile(resolve(root, values.database))), compiled.plan.schemas, { fingerprint: compiled.plan.fingerprint });
|
|
334
|
+
for (const u of storage.undeclared)
|
|
335
|
+
stdout.write(`-- ${u.code} ${u.schema}: ${u.message}\n`);
|
|
336
|
+
if (storage.skipped)
|
|
337
|
+
stdout.write("-- Storage: this database already booted this plan's fingerprint; boot applies nothing.\n");
|
|
338
|
+
else if (storage.blocked.length) {
|
|
339
|
+
for (const b of storage.blocked)
|
|
340
|
+
stderr.write(`${b.code} ${b.schema}: ${b.message}\n`);
|
|
341
|
+
stderr.write("Storage convergence is blocked: boot refuses to serve until the changes above are made.\n");
|
|
342
|
+
code = 1;
|
|
343
|
+
}
|
|
344
|
+
else if (!storage.sql.length)
|
|
345
|
+
stdout.write("-- Storage: nothing to do.\n");
|
|
346
|
+
else
|
|
347
|
+
stdout.write(`-- The SQL storage convergence would run on this database (nothing was applied):\n${storage.sql.map((q) => `${q};\n`).join("")}`);
|
|
245
348
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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)));
|
|
349
|
+
catch (err) {
|
|
350
|
+
// a missing, corrupt, locked or non-file database: say which, without a stack or the absolute path
|
|
351
|
+
return (stderr.write(`--database ${values.database}: ${(err instanceof Error ? err.message : String(err)).replaceAll(root, ".")}\n`), 2);
|
|
285
352
|
}
|
|
286
|
-
return
|
|
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);
|
|
353
|
+
return code;
|
|
298
354
|
}
|
|
299
355
|
//# sourceMappingURL=generate.js.map
|