forgeos 0.1.0-alpha.4 → 0.1.0-alpha.41
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/.npmignore +10 -0
- package/AGENTS.md +142 -90
- package/CHANGELOG.md +433 -0
- package/LICENSE +21 -0
- package/README.md +67 -8
- package/adapters/go/README.md +23 -0
- package/adapters/go/go.mod +3 -0
- package/adapters/go/http.go +149 -0
- package/adapters/go/registry.go +234 -0
- package/adapters/go/types.go +136 -0
- package/adapters/java/README.md +68 -0
- package/adapters/java/pom.xml +34 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
- package/adapters/java-spring-boot-starter/README.md +32 -0
- package/adapters/java-spring-boot-starter/pom.xml +36 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
- package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
- package/bin/forge.mjs +18 -0
- package/docs/cair-protocol.md +103 -0
- package/docs/changelog.md +548 -0
- package/docs/forge-protocol.md +189 -0
- package/examples/go-billing/go.mod +7 -0
- package/examples/go-billing/main.go +120 -0
- package/examples/java-billing/pom.xml +52 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
- package/package.json +31 -3
- package/schemas/forge-manifest.schema.json +57 -0
- package/src/forge/_generated/releaseManifest.json +1 -2
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/agent-adapters/index.ts +1584 -125
- package/src/forge/agent-adapters/types.ts +224 -1
- package/src/forge/agent-memory/bridge.ts +1333 -0
- package/src/forge/agent-memory/context-pack.ts +277 -0
- package/src/forge/agent-memory/hook-runner.ts +312 -0
- package/src/forge/agent-memory/mcp.ts +224 -0
- package/src/forge/agent-memory/normalize.ts +498 -0
- package/src/forge/agent-memory/redaction.ts +103 -0
- package/src/forge/agent-memory/sources/claude-code.ts +51 -0
- package/src/forge/agent-memory/sources/codex-hook-runner.mjs +273 -0
- package/src/forge/agent-memory/sources/codex.ts +119 -0
- package/src/forge/agent-memory/sources/cursor.ts +35 -0
- package/src/forge/agent-memory/types.ts +204 -0
- package/src/forge/bench.ts +248 -0
- package/src/forge/brownfield-import/index.ts +801 -0
- package/src/forge/brownfield-import/types.ts +127 -0
- package/src/forge/cair/action-journal.ts +61 -0
- package/src/forge/cair/action-parser.ts +314 -0
- package/src/forge/cair/action-validator.ts +40 -0
- package/src/forge/cair/actions.ts +1818 -0
- package/src/forge/cair/format.ts +77 -0
- package/src/forge/cair/index.ts +106 -0
- package/src/forge/cair/query.ts +478 -0
- package/src/forge/cair/snapshot.ts +315 -0
- package/src/forge/cair/types.ts +248 -0
- package/src/forge/cli/ai.ts +339 -21
- package/src/forge/cli/auth.ts +348 -10
- package/src/forge/cli/authmd.ts +441 -0
- package/src/forge/cli/baseline.ts +112 -0
- package/src/forge/cli/build.ts +20 -4
- package/src/forge/cli/changed.ts +437 -0
- package/src/forge/cli/codex-app-server.ts +877 -0
- package/src/forge/cli/commands.ts +1620 -20
- package/src/forge/cli/db.ts +209 -2
- package/src/forge/cli/deploy.ts +887 -0
- package/src/forge/cli/deps.ts +82 -13
- package/src/forge/cli/dev.ts +961 -46
- package/src/forge/cli/docs.ts +265 -0
- package/src/forge/cli/doctor.ts +297 -0
- package/src/forge/cli/field-test.ts +329 -0
- package/src/forge/cli/handoff.ts +336 -0
- package/src/forge/cli/index.ts +1 -0
- package/src/forge/cli/last-run.ts +84 -0
- package/src/forge/cli/main.ts +107 -3
- package/src/forge/cli/new.ts +152 -13
- package/src/forge/cli/next-actions.ts +23 -0
- package/src/forge/cli/output.ts +389 -6
- package/src/forge/cli/parse.ts +1050 -34
- package/src/forge/cli/progress.ts +51 -0
- package/src/forge/cli/query.ts +32 -0
- package/src/forge/cli/release.ts +35 -11
- package/src/forge/cli/rls.ts +43 -4
- package/src/forge/cli/run.ts +41 -0
- package/src/forge/cli/security.ts +112 -0
- package/src/forge/cli/self-host.ts +56 -14
- package/src/forge/cli/studio.ts +2218 -0
- package/src/forge/cli/verify.ts +1455 -32
- package/src/forge/cli/windows.ts +23 -0
- package/src/forge/cli/workos.ts +1020 -0
- package/src/forge/compiler/agent-contract/build.ts +670 -64
- package/src/forge/compiler/agent-contract/types.ts +45 -2
- package/src/forge/compiler/ai-registry/parse.ts +71 -2
- package/src/forge/compiler/api-surface/build.ts +47 -0
- package/src/forge/compiler/app-graph/build.ts +112 -9
- package/src/forge/compiler/app-graph/extract.ts +107 -0
- package/src/forge/compiler/app-graph/module-graph.ts +73 -78
- package/src/forge/compiler/app-graph/parser.ts +24 -24
- package/src/forge/compiler/app-graph/profile.ts +26 -0
- package/src/forge/compiler/app-graph/versions.ts +1 -1
- package/src/forge/compiler/classifier/capabilities.ts +3 -2
- package/src/forge/compiler/classifier/classify.ts +32 -8
- package/src/forge/compiler/classifier/secrets.ts +3 -2
- package/src/forge/compiler/classifier/signals.ts +91 -1
- package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
- package/src/forge/compiler/client-sdk/render-client.ts +295 -13
- package/src/forge/compiler/data-graph/parse.ts +20 -4
- package/src/forge/compiler/data-graph/sql/ddl.ts +144 -31
- package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
- package/src/forge/compiler/data-graph/sql/types.ts +1 -0
- package/src/forge/compiler/diagnostics/codes.ts +30 -0
- package/src/forge/compiler/diagnostics/create.ts +21 -2
- package/src/forge/compiler/diagnostics/index.ts +2 -0
- package/src/forge/compiler/emitter/barrel.ts +3 -0
- package/src/forge/compiler/emitter/render.ts +9 -0
- package/src/forge/compiler/external-manifest/registry.ts +205 -0
- package/src/forge/compiler/external-manifest/types.ts +91 -0
- package/src/forge/compiler/external-manifest/validate.ts +373 -0
- package/src/forge/compiler/frontend-graph/build.ts +142 -14
- package/src/forge/compiler/integration/add.ts +618 -24
- package/src/forge/compiler/integration/plan.ts +43 -12
- package/src/forge/compiler/integration/render.ts +29 -0
- package/src/forge/compiler/integration/snapshot.ts +2 -0
- package/src/forge/compiler/integration/templates/convex.ts +70 -0
- package/src/forge/compiler/integration/templates/index.ts +1 -0
- package/src/forge/compiler/integration/templates/render.ts +38 -0
- package/src/forge/compiler/integration/templates/types.ts +3 -0
- package/src/forge/compiler/integration/templates/workos.ts +1219 -0
- package/src/forge/compiler/make-registry/build.ts +8 -9
- package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
- package/src/forge/compiler/orchestrator/generate-lock.ts +14 -3
- package/src/forge/compiler/orchestrator/manifest.ts +1 -1
- package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
- package/src/forge/compiler/orchestrator/plan.ts +247 -10
- package/src/forge/compiler/orchestrator/profile.ts +65 -0
- package/src/forge/compiler/orchestrator/run.ts +97 -31
- package/src/forge/compiler/orchestrator/serialize.ts +33 -8
- package/src/forge/compiler/orchestrator/types.ts +1 -1
- package/src/forge/compiler/package-graph/compiler.ts +3 -1
- package/src/forge/compiler/package-graph/constants.ts +1 -1
- package/src/forge/compiler/package-manager/adapter.ts +4 -1
- package/src/forge/compiler/package-manager/commands.ts +4 -0
- package/src/forge/compiler/package-manager/executor.ts +30 -1
- package/src/forge/compiler/package-manager/version.ts +36 -12
- package/src/forge/compiler/package-upgrades/planner.ts +155 -18
- package/src/forge/compiler/package-upgrades/types.ts +2 -0
- package/src/forge/compiler/policy-registry/build.ts +47 -2
- package/src/forge/compiler/policy-registry/parse.ts +32 -2
- package/src/forge/compiler/recipes/definitions.ts +63 -0
- package/src/forge/compiler/recipes/index.ts +2 -0
- package/src/forge/compiler/recipes/registry.ts +6 -0
- package/src/forge/compiler/test-graph/build.ts +11 -3
- package/src/forge/compiler/types/app-graph.ts +8 -2
- package/src/forge/compiler/types/cli.ts +75 -1
- package/src/forge/compiler/types/dev-manifest.ts +4 -0
- package/src/forge/compiler/types/emit.ts +2 -0
- package/src/forge/compiler/types/frontend-graph.ts +2 -2
- package/src/forge/compiler/types/integration.ts +1 -0
- package/src/forge/compiler/types/package-graph.ts +6 -0
- package/src/forge/compiler/types/policy-registry.ts +3 -1
- package/src/forge/delta/classifier.ts +52 -0
- package/src/forge/delta/explain.ts +238 -0
- package/src/forge/delta/git-observer.ts +43 -0
- package/src/forge/delta/ids.ts +44 -0
- package/src/forge/delta/index.ts +25 -0
- package/src/forge/delta/recorder.ts +540 -0
- package/src/forge/delta/redaction.ts +50 -0
- package/src/forge/delta/schema.ts +240 -0
- package/src/forge/delta/session.ts +142 -0
- package/src/forge/delta/status.ts +1202 -0
- package/src/forge/delta/store.ts +3284 -0
- package/src/forge/delta/timeline.ts +178 -0
- package/src/forge/dev/server.ts +808 -17
- package/src/forge/dev/types.ts +15 -1
- package/src/forge/dev/watch.ts +17 -7
- package/src/forge/dev-console/cycle.ts +280 -33
- package/src/forge/dev-console/types.ts +47 -1
- package/src/forge/impact/index.ts +204 -9
- package/src/forge/impact/types.ts +33 -1
- package/src/forge/intent/index.ts +35 -16
- package/src/forge/make/fields.ts +26 -0
- package/src/forge/make/index.ts +40 -6
- package/src/forge/make/templates.ts +155 -2
- package/src/forge/make/types.ts +2 -1
- package/src/forge/policy.ts +1 -1
- package/src/forge/react/index.ts +160 -2
- package/src/forge/refactor/index.ts +1 -0
- package/src/forge/repair/rules/index.ts +2 -2
- package/src/forge/review/index.ts +158 -12
- package/src/forge/review/types.ts +15 -0
- package/src/forge/runtime/auth/config.ts +17 -0
- package/src/forge/runtime/auth/evaluate.ts +15 -2
- package/src/forge/runtime/auth/resolve.ts +61 -6
- package/src/forge/runtime/auth/types.ts +1 -0
- package/src/forge/runtime/db/factory.ts +1 -3
- package/src/forge/runtime/db/generated-client.ts +13 -2
- package/src/forge/runtime/db/memory-adapter.ts +139 -32
- package/src/forge/runtime/db/pglite-adapter.ts +263 -2
- package/src/forge/runtime/db/postgres-adapter.ts +6 -3
- package/src/forge/runtime/executor.ts +129 -16
- package/src/forge/runtime/external/bridge.ts +649 -0
- package/src/forge/runtime/runner/run-entry.ts +16 -7
- package/src/forge/runtime/telemetry/buffer.ts +4 -1
- package/src/forge/runtime/telemetry/scrubber.ts +35 -5
- package/src/forge/runtime/webhooks/security.ts +12 -7
- package/src/forge/server.ts +17 -3
- package/src/forge/ui/index.ts +209 -0
- package/src/forge/ui/types.ts +1 -0
- package/src/forge/version.ts +1 -1
- package/src/forge/vue/index.ts +422 -0
- package/src/forge/workspace/baseline.ts +112 -0
- package/src/forge/workspace/change-summary.ts +250 -0
- package/src/forge/workspace/forge-cli.ts +42 -0
- package/src/forge/workspace/git-summary.ts +391 -0
- package/templates/agent-workroom/AGENTS.md +29 -0
- package/templates/agent-workroom/README.md +34 -0
- package/templates/agent-workroom/forge.config.ts +3 -0
- package/templates/agent-workroom/package.json +33 -0
- package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
- package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
- package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
- package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
- package/templates/agent-workroom/src/forge/schema.ts +54 -0
- package/templates/agent-workroom/src/policies.ts +6 -0
- package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
- package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
- package/templates/agent-workroom/tsconfig.json +16 -0
- package/templates/agent-workroom/web/index.html +12 -0
- package/templates/agent-workroom/web/package.json +21 -0
- package/templates/agent-workroom/web/src/App.tsx +345 -0
- package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
- package/templates/agent-workroom/web/src/main.tsx +13 -0
- package/templates/agent-workroom/web/src/styles.css +545 -0
- package/templates/agent-workroom/web/tsconfig.json +27 -0
- package/templates/b2b-support-web/package.json +1 -0
- package/templates/b2b-support-web/web/package.json +1 -1
- package/templates/minimal-web/package.json +1 -1
- package/templates/minimal-web/web/package.json +2 -2
- package/templates/nuxt-web/.vscode/settings.json +14 -0
- package/templates/nuxt-web/README.md +30 -0
- package/templates/nuxt-web/forge.config.ts +3 -0
- package/templates/nuxt-web/package.json +33 -0
- package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
- package/templates/nuxt-web/src/commands/createNote.ts +26 -0
- package/templates/nuxt-web/src/forge/schema.ts +12 -0
- package/templates/nuxt-web/src/policies.ts +6 -0
- package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
- package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
- package/templates/nuxt-web/tsconfig.json +17 -0
- package/templates/nuxt-web/web/app.vue +67 -0
- package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
- package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
- package/templates/nuxt-web/web/composables/forge.ts +13 -0
- package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
- package/templates/nuxt-web/web/nuxt.config.ts +11 -0
- package/templates/nuxt-web/web/package.json +18 -0
- package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
- package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
- package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
- package/templates/nuxt-web/web/tsconfig.json +6 -0
- package/src/forge/_generated/actionSubscriptions.json +0 -2
- package/src/forge/_generated/actionSubscriptions.ts +0 -10
- package/src/forge/_generated/agentAdapterManifest.json +0 -2
- package/src/forge/_generated/agentAdapterManifest.ts +0 -73
- package/src/forge/_generated/agentContract.json +0 -2
- package/src/forge/_generated/agentContract.ts +0 -7829
- package/src/forge/_generated/agentQuickstart.md +0 -34
- package/src/forge/_generated/agentTools.json +0 -2
- package/src/forge/_generated/agentTools.md +0 -16
- package/src/forge/_generated/agentTools.ts +0 -12
- package/src/forge/_generated/aiContext.ts +0 -125
- package/src/forge/_generated/aiModels.json +0 -2
- package/src/forge/_generated/aiModels.ts +0 -51
- package/src/forge/_generated/aiProviders.json +0 -2
- package/src/forge/_generated/aiProviders.ts +0 -23
- package/src/forge/_generated/aiRegistry.json +0 -2
- package/src/forge/_generated/aiRegistry.ts +0 -31
- package/src/forge/_generated/api.json +0 -2
- package/src/forge/_generated/api.ts +0 -8
- package/src/forge/_generated/appGraph.json +0 -2
- package/src/forge/_generated/appGraph.ts +0 -14919
- package/src/forge/_generated/appMap.md +0 -55
- package/src/forge/_generated/artifactManifest.json +0 -2
- package/src/forge/_generated/artifactManifest.ts +0 -7
- package/src/forge/_generated/authClaims.json +0 -2
- package/src/forge/_generated/authClaims.ts +0 -13
- package/src/forge/_generated/authConfig.json +0 -2
- package/src/forge/_generated/authConfig.ts +0 -17
- package/src/forge/_generated/authContext.ts +0 -23
- package/src/forge/_generated/authRegistry.json +0 -2
- package/src/forge/_generated/authRegistry.ts +0 -25
- package/src/forge/_generated/buildInfo.json +0 -2
- package/src/forge/_generated/buildInfo.ts +0 -9
- package/src/forge/_generated/capabilityMap.json +0 -2
- package/src/forge/_generated/capabilityMap.md +0 -15
- package/src/forge/_generated/capabilityMap.ts +0 -17
- package/src/forge/_generated/client.ts +0 -282
- package/src/forge/_generated/clientApi.ts +0 -9
- package/src/forge/_generated/clientManifest.json +0 -2
- package/src/forge/_generated/clientManifest.ts +0 -39
- package/src/forge/_generated/clientTypes.ts +0 -78
- package/src/forge/_generated/configRegistry.json +0 -2
- package/src/forge/_generated/configRegistry.ts +0 -4
- package/src/forge/_generated/dataGraph.json +0 -2
- package/src/forge/_generated/dataGraph.ts +0 -8
- package/src/forge/_generated/db.json +0 -2
- package/src/forge/_generated/db.ts +0 -2
- package/src/forge/_generated/dbSecurityManifest.json +0 -2
- package/src/forge/_generated/dbSecurityManifest.ts +0 -15
- package/src/forge/_generated/dbSessionContext.json +0 -2
- package/src/forge/_generated/dbSessionContext.ts +0 -39
- package/src/forge/_generated/deployManifest.json +0 -2
- package/src/forge/_generated/deployManifest.ts +0 -14
- package/src/forge/_generated/devManifest.json +0 -2
- package/src/forge/_generated/devManifest.ts +0 -62
- package/src/forge/_generated/envSchema.json +0 -2
- package/src/forge/_generated/envSchema.ts +0 -59
- package/src/forge/_generated/frontendGraph.json +0 -2
- package/src/forge/_generated/frontendGraph.ts +0 -27
- package/src/forge/_generated/importGuards.json +0 -2
- package/src/forge/_generated/importGuards.ts +0 -686
- package/src/forge/_generated/index.ts +0 -68
- package/src/forge/_generated/liveProductionManifest.json +0 -2
- package/src/forge/_generated/liveProductionManifest.ts +0 -23
- package/src/forge/_generated/liveProtocol.json +0 -2
- package/src/forge/_generated/liveProtocol.ts +0 -21
- package/src/forge/_generated/liveQueryRegistry.json +0 -2
- package/src/forge/_generated/liveQueryRegistry.ts +0 -9
- package/src/forge/_generated/liveTransportConfig.json +0 -2
- package/src/forge/_generated/liveTransportConfig.ts +0 -19
- package/src/forge/_generated/makeRegistry.json +0 -2
- package/src/forge/_generated/makeRegistry.ts +0 -177
- package/src/forge/_generated/makeTemplates.json +0 -2
- package/src/forge/_generated/makeTemplates.ts +0 -66
- package/src/forge/_generated/mockMap.json +0 -2
- package/src/forge/_generated/mockMap.ts +0 -7
- package/src/forge/_generated/operationPlaybooks.md +0 -167
- package/src/forge/_generated/packageGraph.json +0 -2
- package/src/forge/_generated/packageGraph.ts +0 -249334
- package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
- package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
- package/src/forge/_generated/permissionMatrix.json +0 -2
- package/src/forge/_generated/permissionMatrix.ts +0 -7
- package/src/forge/_generated/policyRegistry.json +0 -2
- package/src/forge/_generated/policyRegistry.ts +0 -11
- package/src/forge/_generated/queryRegistry.json +0 -2
- package/src/forge/_generated/queryRegistry.ts +0 -9
- package/src/forge/_generated/react.d.ts +0 -22
- package/src/forge/_generated/react.ts +0 -29
- package/src/forge/_generated/reactManifest.json +0 -2
- package/src/forge/_generated/reactManifest.ts +0 -19
- package/src/forge/_generated/rlsPolicies.json +0 -2
- package/src/forge/_generated/rlsPolicies.sql +0 -34
- package/src/forge/_generated/rlsPolicies.ts +0 -6
- package/src/forge/_generated/runtimeGraph.json +0 -2
- package/src/forge/_generated/runtimeGraph.ts +0 -8
- package/src/forge/_generated/runtimeMatrix.json +0 -2
- package/src/forge/_generated/runtimeMatrix.ts +0 -334130
- package/src/forge/_generated/runtimeRegistry.ts +0 -2
- package/src/forge/_generated/runtimeRules.md +0 -91
- package/src/forge/_generated/secretRegistry.json +0 -2
- package/src/forge/_generated/secretRegistry.ts +0 -50
- package/src/forge/_generated/secretsContext.ts +0 -11
- package/src/forge/_generated/serverApi.ts +0 -10
- package/src/forge/_generated/sourceMapManifest.json +0 -2
- package/src/forge/_generated/sourceMapManifest.ts +0 -7
- package/src/forge/_generated/sqlPlan.json +0 -2
- package/src/forge/_generated/sqlPlan.ts +0 -88
- package/src/forge/_generated/subscriptionManifest.json +0 -2
- package/src/forge/_generated/subscriptionManifest.ts +0 -7
- package/src/forge/_generated/symbolicationManifest.json +0 -2
- package/src/forge/_generated/symbolicationManifest.ts +0 -17
- package/src/forge/_generated/telemetryRegistry.json +0 -2
- package/src/forge/_generated/telemetryRegistry.ts +0 -9
- package/src/forge/_generated/telemetrySinks.json +0 -2
- package/src/forge/_generated/telemetrySinks.ts +0 -11
- package/src/forge/_generated/tenantScope.json +0 -2
- package/src/forge/_generated/tenantScope.ts +0 -8
- package/src/forge/_generated/testGraph.json +0 -2
- package/src/forge/_generated/testGraph.ts +0 -3430
- package/src/forge/_generated/testPlanRegistry.json +0 -2
- package/src/forge/_generated/testPlanRegistry.ts +0 -33
- package/src/forge/_generated/uiRoutes.json +0 -2
- package/src/forge/_generated/uiRoutes.ts +0 -16
- package/src/forge/_generated/uiScenarios.json +0 -2
- package/src/forge/_generated/uiScenarios.ts +0 -30
- package/src/forge/_generated/uiTestManifest.json +0 -2
- package/src/forge/_generated/uiTestManifest.ts +0 -27
- package/src/forge/_generated/workflowRegistry.json +0 -2
- package/src/forge/_generated/workflowRegistry.ts +0 -9
- package/src/forge/_generated/workflowSubscriptions.json +0 -2
- package/src/forge/_generated/workflowSubscriptions.ts +0 -10
|
@@ -16,11 +16,17 @@ export interface ClientManifest {
|
|
|
16
16
|
queries: string;
|
|
17
17
|
commands: string;
|
|
18
18
|
liveQueries: string;
|
|
19
|
+
externalQueries: string;
|
|
20
|
+
externalCommands: string;
|
|
19
21
|
};
|
|
20
22
|
react: {
|
|
21
23
|
entrypoint: string;
|
|
22
24
|
hooks: string[];
|
|
23
25
|
};
|
|
26
|
+
vue: {
|
|
27
|
+
entrypoint: string;
|
|
28
|
+
composables: string[];
|
|
29
|
+
};
|
|
24
30
|
excluded: {
|
|
25
31
|
actions: string[];
|
|
26
32
|
workflows: string[];
|
|
@@ -41,6 +47,18 @@ export interface ReactManifest {
|
|
|
41
47
|
clientSafe: true;
|
|
42
48
|
}
|
|
43
49
|
|
|
50
|
+
export interface VueManifest {
|
|
51
|
+
schemaVersion: string;
|
|
52
|
+
generatorVersion: string;
|
|
53
|
+
inputHash: string;
|
|
54
|
+
entrypoint: string;
|
|
55
|
+
composables: string[];
|
|
56
|
+
queries: string[];
|
|
57
|
+
commands: string[];
|
|
58
|
+
liveQueries: string[];
|
|
59
|
+
clientSafe: true;
|
|
60
|
+
}
|
|
61
|
+
|
|
44
62
|
const SERVER_ADAPTER_SUFFIX = ".server.ts";
|
|
45
63
|
|
|
46
64
|
function collectServerAdapters(classified: ClassifiedPackage[]): string[] {
|
|
@@ -101,6 +119,8 @@ export function buildClientManifest(
|
|
|
101
119
|
queries: "POST /queries/:name",
|
|
102
120
|
commands: "POST /commands/:name",
|
|
103
121
|
liveQueries: "GET /live/:name",
|
|
122
|
+
externalQueries: "POST /external/:service/queries/:name",
|
|
123
|
+
externalCommands: "POST /external/:service/commands/:name",
|
|
104
124
|
},
|
|
105
125
|
react: {
|
|
106
126
|
entrypoint: "src/forge/_generated/react.ts",
|
|
@@ -113,6 +133,17 @@ export function buildClientManifest(
|
|
|
113
133
|
"useLiveQuery",
|
|
114
134
|
],
|
|
115
135
|
},
|
|
136
|
+
vue: {
|
|
137
|
+
entrypoint: "src/forge/_generated/vue.ts",
|
|
138
|
+
composables: [
|
|
139
|
+
"provideForge",
|
|
140
|
+
"useForgeClient",
|
|
141
|
+
"useForgeAuth",
|
|
142
|
+
"useForgeQuery",
|
|
143
|
+
"useForgeCommand",
|
|
144
|
+
"useForgeLiveQuery",
|
|
145
|
+
],
|
|
146
|
+
},
|
|
116
147
|
excluded: {
|
|
117
148
|
actions,
|
|
118
149
|
workflows,
|
|
@@ -149,3 +180,31 @@ export function buildReactManifest(clientManifest: ClientManifest): ReactManifes
|
|
|
149
180
|
clientSafe: true,
|
|
150
181
|
};
|
|
151
182
|
}
|
|
183
|
+
|
|
184
|
+
export function buildVueManifest(clientManifest: ClientManifest): VueManifest {
|
|
185
|
+
const composables = [
|
|
186
|
+
"provideForge",
|
|
187
|
+
"useForgeClient",
|
|
188
|
+
"useForgeAuth",
|
|
189
|
+
"useForgeQuery",
|
|
190
|
+
"useForgeCommand",
|
|
191
|
+
"useForgeLiveQuery",
|
|
192
|
+
];
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
schemaVersion: "1.0.0",
|
|
196
|
+
generatorVersion: GENERATOR_VERSION,
|
|
197
|
+
inputHash: hashStable(
|
|
198
|
+
canonicalJson({
|
|
199
|
+
clientInputHash: clientManifest.inputHash,
|
|
200
|
+
composables,
|
|
201
|
+
}),
|
|
202
|
+
),
|
|
203
|
+
entrypoint: "src/forge/_generated/vue.ts",
|
|
204
|
+
composables,
|
|
205
|
+
queries: clientManifest.queries,
|
|
206
|
+
commands: clientManifest.commands,
|
|
207
|
+
liveQueries: clientManifest.liveQueries,
|
|
208
|
+
clientSafe: true,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import type { ClientManifest, ReactManifest } from "./build-manifest.ts";
|
|
1
|
+
import type { ClientManifest, ReactManifest, VueManifest } from "./build-manifest.ts";
|
|
2
2
|
|
|
3
3
|
export function renderClientTypesTs(): string {
|
|
4
4
|
return `export type ForgeStaticAuth = {
|
|
5
5
|
userId?: string;
|
|
6
6
|
tenantId?: string;
|
|
7
|
+
organizationId?: string;
|
|
8
|
+
organizationMembershipId?: string;
|
|
7
9
|
role?: string;
|
|
10
|
+
roles?: string[];
|
|
11
|
+
permissions?: string[];
|
|
12
|
+
claims?: Record<string, unknown>;
|
|
8
13
|
token?: string;
|
|
9
14
|
getToken?: () => string | Promise<string>;
|
|
10
15
|
headers?: Record<string, string>;
|
|
@@ -14,7 +19,12 @@ export function renderClientTypesTs(): string {
|
|
|
14
19
|
export type ForgeResolvedAuth = {
|
|
15
20
|
userId?: string;
|
|
16
21
|
tenantId?: string;
|
|
22
|
+
organizationId?: string;
|
|
23
|
+
organizationMembershipId?: string;
|
|
17
24
|
role?: string;
|
|
25
|
+
roles?: string[];
|
|
26
|
+
permissions?: string[];
|
|
27
|
+
claims?: Record<string, unknown>;
|
|
18
28
|
token?: string;
|
|
19
29
|
getToken?: () => string | Promise<string>;
|
|
20
30
|
headers?: Record<string, string>;
|
|
@@ -52,6 +62,22 @@ export class ForgeError extends Error {
|
|
|
52
62
|
export type QueryName = keyof typeof import("./api.ts").api.queries;
|
|
53
63
|
export type CommandName = keyof typeof import("./api.ts").api.commands;
|
|
54
64
|
export type LiveQueryName = keyof typeof import("./api.ts").api.liveQueries;
|
|
65
|
+
export type ExternalCommandName = string;
|
|
66
|
+
export type ExternalQueryName = string;
|
|
67
|
+
export type ExternalRuntimeRefObject = {
|
|
68
|
+
service: string;
|
|
69
|
+
name: string;
|
|
70
|
+
kind?: "command" | "query";
|
|
71
|
+
language?: string;
|
|
72
|
+
framework?: string;
|
|
73
|
+
transport?: string;
|
|
74
|
+
};
|
|
75
|
+
export type ExternalCommandRef =
|
|
76
|
+
| ExternalCommandName
|
|
77
|
+
| ExternalRuntimeRefObject;
|
|
78
|
+
export type ExternalQueryRef =
|
|
79
|
+
| ExternalQueryName
|
|
80
|
+
| ExternalRuntimeRefObject;
|
|
55
81
|
|
|
56
82
|
export type LiveSnapshot<T> = {
|
|
57
83
|
subscriptionId: string;
|
|
@@ -60,6 +86,22 @@ export type LiveSnapshot<T> = {
|
|
|
60
86
|
traceId?: string;
|
|
61
87
|
};
|
|
62
88
|
|
|
89
|
+
export type ForgeCommandResult<T = unknown> =
|
|
90
|
+
| {
|
|
91
|
+
ok: true;
|
|
92
|
+
result: T;
|
|
93
|
+
status: number;
|
|
94
|
+
traceId?: string;
|
|
95
|
+
diagnostics?: { code: string; message: string }[];
|
|
96
|
+
}
|
|
97
|
+
| {
|
|
98
|
+
ok: false;
|
|
99
|
+
error: { code: string; message: string; details?: unknown };
|
|
100
|
+
status: number;
|
|
101
|
+
traceId?: string;
|
|
102
|
+
diagnostics?: { code: string; message: string }[];
|
|
103
|
+
};
|
|
104
|
+
|
|
63
105
|
export type LiveQueryOptions = {
|
|
64
106
|
signal?: AbortSignal;
|
|
65
107
|
};
|
|
@@ -70,6 +112,9 @@ export type ForgeClient = {
|
|
|
70
112
|
readonly lastTraceId?: string;
|
|
71
113
|
query<Name extends QueryName>(name: Name, args: unknown): Promise<unknown>;
|
|
72
114
|
command<Name extends CommandName>(name: Name, args: unknown): Promise<unknown>;
|
|
115
|
+
commandResult<Name extends CommandName>(name: Name, args: unknown): Promise<ForgeCommandResult<unknown>>;
|
|
116
|
+
externalQuery<Name extends ExternalQueryRef>(name: Name, args: unknown): Promise<unknown>;
|
|
117
|
+
externalCommand<Name extends ExternalCommandRef>(name: Name, args: unknown): Promise<unknown>;
|
|
73
118
|
liveQuery<Name extends LiveQueryName>(
|
|
74
119
|
name: Name,
|
|
75
120
|
args: unknown,
|
|
@@ -85,8 +130,11 @@ export function renderClientTs(): string {
|
|
|
85
130
|
return `import { api } from "./api.ts";
|
|
86
131
|
import type {
|
|
87
132
|
ForgeAuthProvider,
|
|
133
|
+
ForgeCommandResult,
|
|
88
134
|
ForgeClient,
|
|
89
135
|
ForgeClientConfig,
|
|
136
|
+
ExternalCommandRef,
|
|
137
|
+
ExternalQueryRef,
|
|
90
138
|
LiveQueryOptions,
|
|
91
139
|
LiveSnapshot,
|
|
92
140
|
} from "./clientTypes.ts";
|
|
@@ -98,10 +146,16 @@ export type {
|
|
|
98
146
|
ForgeAuthProvider,
|
|
99
147
|
ForgeClient,
|
|
100
148
|
ForgeClientConfig,
|
|
149
|
+
ForgeCommandResult,
|
|
101
150
|
ForgeStaticAuth,
|
|
102
151
|
QueryName,
|
|
103
152
|
CommandName,
|
|
104
153
|
LiveQueryName,
|
|
154
|
+
ExternalCommandName,
|
|
155
|
+
ExternalQueryName,
|
|
156
|
+
ExternalRuntimeRefObject,
|
|
157
|
+
ExternalCommandRef,
|
|
158
|
+
ExternalQueryRef,
|
|
105
159
|
ForgeResolvedAuth,
|
|
106
160
|
LiveQueryOptions,
|
|
107
161
|
LiveSnapshot,
|
|
@@ -134,7 +188,12 @@ async function resolveAuthHeaders(
|
|
|
134
188
|
typeof value === "string" &&
|
|
135
189
|
key !== "userId" &&
|
|
136
190
|
key !== "tenantId" &&
|
|
191
|
+
key !== "organizationId" &&
|
|
192
|
+
key !== "organizationMembershipId" &&
|
|
137
193
|
key !== "role" &&
|
|
194
|
+
key !== "roles" &&
|
|
195
|
+
key !== "permissions" &&
|
|
196
|
+
key !== "claims" &&
|
|
138
197
|
key !== "token"
|
|
139
198
|
) {
|
|
140
199
|
headers[key] = value;
|
|
@@ -147,9 +206,25 @@ async function resolveAuthHeaders(
|
|
|
147
206
|
if (resolved.tenantId) {
|
|
148
207
|
headers["x-forge-tenant-id"] = resolved.tenantId;
|
|
149
208
|
}
|
|
209
|
+
if (resolved.organizationId) {
|
|
210
|
+
headers["x-forge-organization-id"] = resolved.organizationId;
|
|
211
|
+
headers["x-forge-tenant-id"] ??= resolved.organizationId;
|
|
212
|
+
}
|
|
213
|
+
if (resolved.organizationMembershipId) {
|
|
214
|
+
headers["x-forge-organization-membership-id"] = resolved.organizationMembershipId;
|
|
215
|
+
}
|
|
150
216
|
if (resolved.role) {
|
|
151
217
|
headers["x-forge-role"] = resolved.role;
|
|
152
218
|
}
|
|
219
|
+
if (Array.isArray(resolved.roles)) {
|
|
220
|
+
headers["x-forge-roles"] = JSON.stringify(resolved.roles);
|
|
221
|
+
}
|
|
222
|
+
if (Array.isArray(resolved.permissions)) {
|
|
223
|
+
headers["x-forge-permissions"] = JSON.stringify(resolved.permissions);
|
|
224
|
+
}
|
|
225
|
+
if (resolved.claims && typeof resolved.claims === "object") {
|
|
226
|
+
headers["x-forge-claims"] = JSON.stringify(resolved.claims);
|
|
227
|
+
}
|
|
153
228
|
|
|
154
229
|
return headers;
|
|
155
230
|
}
|
|
@@ -179,6 +254,16 @@ function parseJsonPayload(body: unknown): {
|
|
|
179
254
|
};
|
|
180
255
|
}
|
|
181
256
|
|
|
257
|
+
function normalizeExternalRef(
|
|
258
|
+
ref: ExternalCommandRef | ExternalQueryRef,
|
|
259
|
+
): { service: string; name: string } {
|
|
260
|
+
if (typeof ref === "string") {
|
|
261
|
+
const [service, ...entryParts] = ref.split(".");
|
|
262
|
+
return { service: service ?? "", name: entryParts.join(".") };
|
|
263
|
+
}
|
|
264
|
+
return { service: ref.service, name: ref.name };
|
|
265
|
+
}
|
|
266
|
+
|
|
182
267
|
class ForgeHttpClient implements ForgeClient {
|
|
183
268
|
lastTraceId?: string;
|
|
184
269
|
|
|
@@ -192,6 +277,18 @@ class ForgeHttpClient implements ForgeClient {
|
|
|
192
277
|
return this.invoke("commands", name, args);
|
|
193
278
|
}
|
|
194
279
|
|
|
280
|
+
commandResult(name: string, args: unknown): Promise<ForgeCommandResult<unknown>> {
|
|
281
|
+
return this.invokeResult("commands", name, args);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
externalQuery(name: ExternalQueryRef, args: unknown): Promise<unknown> {
|
|
285
|
+
return this.invokeExternal("queries", name, args);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
externalCommand(name: ExternalCommandRef, args: unknown): Promise<unknown> {
|
|
289
|
+
return this.invokeExternal("commands", name, args);
|
|
290
|
+
}
|
|
291
|
+
|
|
195
292
|
liveQuery(
|
|
196
293
|
name: string,
|
|
197
294
|
args: unknown,
|
|
@@ -223,10 +320,117 @@ class ForgeHttpClient implements ForgeClient {
|
|
|
223
320
|
name: string,
|
|
224
321
|
args: unknown,
|
|
225
322
|
): Promise<unknown> {
|
|
323
|
+
const result = await this.invokeResult(kind, name, args);
|
|
324
|
+
if (!result.ok) {
|
|
325
|
+
throw new ForgeError(result.error.message, {
|
|
326
|
+
code: result.error.code,
|
|
327
|
+
traceId: result.traceId,
|
|
328
|
+
status: result.status,
|
|
329
|
+
details: result.error.details ?? result.diagnostics,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return result.result;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
private async invokeResult(
|
|
336
|
+
kind: "queries" | "commands",
|
|
337
|
+
name: string,
|
|
338
|
+
args: unknown,
|
|
339
|
+
): Promise<ForgeCommandResult<unknown>> {
|
|
226
340
|
const baseUrl = this.config.url.replace(/\\/$/, "");
|
|
227
341
|
const url = \`\${baseUrl}/\${kind}/\${encodeURIComponent(name)}\`;
|
|
228
342
|
const authHeaders = await resolveAuthHeaders(this.config.auth);
|
|
229
343
|
|
|
344
|
+
let response: Response;
|
|
345
|
+
try {
|
|
346
|
+
response = await fetch(url, {
|
|
347
|
+
method: "POST",
|
|
348
|
+
headers: {
|
|
349
|
+
"Content-Type": "application/json",
|
|
350
|
+
...authHeaders,
|
|
351
|
+
},
|
|
352
|
+
body: JSON.stringify({ args }),
|
|
353
|
+
});
|
|
354
|
+
} catch (error) {
|
|
355
|
+
return {
|
|
356
|
+
ok: false,
|
|
357
|
+
status: 0,
|
|
358
|
+
error: {
|
|
359
|
+
code: "FORGE_NETWORK_ERROR",
|
|
360
|
+
message: error instanceof Error ? error.message : "network request failed",
|
|
361
|
+
details: error,
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
let body: unknown;
|
|
367
|
+
try {
|
|
368
|
+
body = await response.json();
|
|
369
|
+
} catch {
|
|
370
|
+
return {
|
|
371
|
+
ok: false,
|
|
372
|
+
status: response.status,
|
|
373
|
+
error: {
|
|
374
|
+
code: "FORGE_HTTP_ERROR",
|
|
375
|
+
message: \`HTTP \${response.status}\`,
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
const payload = parseJsonPayload(body);
|
|
381
|
+
this.lastTraceId = payload.traceId;
|
|
382
|
+
|
|
383
|
+
if (!response.ok || payload.ok === false) {
|
|
384
|
+
const diagnostic = payload.diagnostics?.find((entry) => entry.code);
|
|
385
|
+
const code =
|
|
386
|
+
payload.error?.code ?? diagnostic?.code ?? "FORGE_REQUEST_FAILED";
|
|
387
|
+
const message =
|
|
388
|
+
payload.error?.message ??
|
|
389
|
+
diagnostic?.message ??
|
|
390
|
+
\`Request failed with status \${response.status}\`;
|
|
391
|
+
return {
|
|
392
|
+
ok: false,
|
|
393
|
+
status: response.status,
|
|
394
|
+
traceId: payload.traceId,
|
|
395
|
+
diagnostics: payload.diagnostics,
|
|
396
|
+
error: {
|
|
397
|
+
code,
|
|
398
|
+
message,
|
|
399
|
+
details: payload.error?.details ?? payload.diagnostics,
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
return {
|
|
405
|
+
ok: true,
|
|
406
|
+
result: payload.result,
|
|
407
|
+
status: response.status,
|
|
408
|
+
traceId: payload.traceId,
|
|
409
|
+
diagnostics: payload.diagnostics,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
private async invokeExternal(
|
|
414
|
+
kind: "queries" | "commands",
|
|
415
|
+
name: ExternalCommandRef | ExternalQueryRef,
|
|
416
|
+
args: unknown,
|
|
417
|
+
): Promise<unknown> {
|
|
418
|
+
const normalized = normalizeExternalRef(name);
|
|
419
|
+
const serviceName = normalized.service;
|
|
420
|
+
const entryName = normalized.name;
|
|
421
|
+
if (!serviceName || !entryName) {
|
|
422
|
+
throw new ForgeError(\`External runtime name must be service.entry\`, {
|
|
423
|
+
code: "FORGE_EXTERNAL_RUNTIME_NOT_FOUND",
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
const baseUrl = this.config.url.replace(/\\/$/, "");
|
|
427
|
+
const url = \`\${baseUrl}/external/\${encodeURIComponent(serviceName)}/\${kind}/\${encodeURIComponent(entryName)}\`;
|
|
428
|
+
return this.invokeUrl(url, args);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
private async invokeUrl(url: string, args: unknown): Promise<unknown> {
|
|
432
|
+
const authHeaders = await resolveAuthHeaders(this.config.auth);
|
|
433
|
+
|
|
230
434
|
const response = await fetch(url, {
|
|
231
435
|
method: "POST",
|
|
232
436
|
headers: {
|
|
@@ -297,19 +501,24 @@ class ForgeHttpClient implements ForgeClient {
|
|
|
297
501
|
const reader = response.body.getReader();
|
|
298
502
|
let buffer = "";
|
|
299
503
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
504
|
+
try {
|
|
505
|
+
while (!signal.aborted) {
|
|
506
|
+
const { done, value } = await reader.read();
|
|
507
|
+
if (done) {
|
|
508
|
+
break;
|
|
509
|
+
}
|
|
510
|
+
buffer += decoder.decode(value, { stream: true });
|
|
511
|
+
let boundary = buffer.indexOf("\\n\\n");
|
|
512
|
+
while (boundary !== -1) {
|
|
513
|
+
const frame = buffer.slice(0, boundary);
|
|
514
|
+
buffer = buffer.slice(boundary + 2);
|
|
515
|
+
this.handleSseFrame(frame, onSnapshot, onError);
|
|
516
|
+
boundary = buffer.indexOf("\\n\\n");
|
|
517
|
+
}
|
|
312
518
|
}
|
|
519
|
+
} finally {
|
|
520
|
+
await reader.cancel().catch(() => undefined);
|
|
521
|
+
reader.releaseLock();
|
|
313
522
|
}
|
|
314
523
|
}
|
|
315
524
|
|
|
@@ -383,8 +592,11 @@ export type {
|
|
|
383
592
|
ForgeReactAuthProvider,
|
|
384
593
|
ForgeReactClient,
|
|
385
594
|
ForgeReactError,
|
|
595
|
+
ForgeCommandCallResult,
|
|
386
596
|
UseCommandOptions,
|
|
387
597
|
UseCommandResult,
|
|
598
|
+
UseCommandResultHook,
|
|
599
|
+
UseCommandResultOptions,
|
|
388
600
|
UseLiveQueryOptions,
|
|
389
601
|
UseLiveQueryResult,
|
|
390
602
|
UseQueryOptions,
|
|
@@ -398,6 +610,7 @@ export const useForgeClient = forgeReact.useForgeClient;
|
|
|
398
610
|
export const useAuth = forgeReact.useAuth;
|
|
399
611
|
export const useQuery = forgeReact.useQuery;
|
|
400
612
|
export const useCommand = forgeReact.useCommand;
|
|
613
|
+
export const useCommandResult = forgeReact.useCommandResult;
|
|
401
614
|
export const useLiveQuery = forgeReact.useLiveQuery;
|
|
402
615
|
`;
|
|
403
616
|
}
|
|
@@ -410,8 +623,11 @@ export function renderReactDts(): string {
|
|
|
410
623
|
ForgeReactAuthProvider,
|
|
411
624
|
ForgeReactClient,
|
|
412
625
|
ForgeReactError,
|
|
626
|
+
ForgeCommandCallResult,
|
|
413
627
|
UseCommandOptions,
|
|
414
628
|
UseCommandResult,
|
|
629
|
+
UseCommandResultHook,
|
|
630
|
+
UseCommandResultOptions,
|
|
415
631
|
UseLiveQueryOptions,
|
|
416
632
|
UseLiveQueryResult,
|
|
417
633
|
UseQueryOptions,
|
|
@@ -423,6 +639,7 @@ export declare const useForgeClient: import("forge/react").ForgeReactBindings["u
|
|
|
423
639
|
export declare const useAuth: import("forge/react").ForgeReactBindings["useAuth"];
|
|
424
640
|
export declare const useQuery: import("forge/react").ForgeReactBindings["useQuery"];
|
|
425
641
|
export declare const useCommand: import("forge/react").ForgeReactBindings["useCommand"];
|
|
642
|
+
export declare const useCommandResult: import("forge/react").ForgeReactBindings["useCommandResult"];
|
|
426
643
|
export declare const useLiveQuery: import("forge/react").ForgeReactBindings["useLiveQuery"];
|
|
427
644
|
`;
|
|
428
645
|
}
|
|
@@ -430,3 +647,68 @@ export declare const useLiveQuery: import("forge/react").ForgeReactBindings["use
|
|
|
430
647
|
export function renderReactManifestTs(manifest: ReactManifest): string {
|
|
431
648
|
return `export const reactManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
|
|
432
649
|
}
|
|
650
|
+
|
|
651
|
+
export function renderVueTs(): string {
|
|
652
|
+
return `import { createForgeVueBindings } from "forge/vue";
|
|
653
|
+
import { createForgeClient } from "./client.ts";
|
|
654
|
+
|
|
655
|
+
export type {
|
|
656
|
+
ForgeDevAuthConfig,
|
|
657
|
+
ForgeVueAuth,
|
|
658
|
+
ForgeVueAuthProvider,
|
|
659
|
+
ForgeVueBindings,
|
|
660
|
+
ForgeVueClient,
|
|
661
|
+
ForgeVueClientConfig,
|
|
662
|
+
ForgeVueError,
|
|
663
|
+
ForgeVuePluginOptions,
|
|
664
|
+
UseForgeCommandOptions,
|
|
665
|
+
UseForgeCommandResult,
|
|
666
|
+
UseForgeLiveQueryOptions,
|
|
667
|
+
UseForgeLiveQueryResult,
|
|
668
|
+
UseForgeQueryOptions,
|
|
669
|
+
UseForgeQueryResult,
|
|
670
|
+
} from "forge/vue";
|
|
671
|
+
|
|
672
|
+
const forgeVue = createForgeVueBindings(createForgeClient);
|
|
673
|
+
|
|
674
|
+
export const ForgeVuePlugin = forgeVue.ForgeVuePlugin;
|
|
675
|
+
export const provideForge = forgeVue.provideForge;
|
|
676
|
+
export const useForgeClient = forgeVue.useForgeClient;
|
|
677
|
+
export const useForgeAuth = forgeVue.useForgeAuth;
|
|
678
|
+
export const useForgeQuery = forgeVue.useForgeQuery;
|
|
679
|
+
export const useForgeCommand = forgeVue.useForgeCommand;
|
|
680
|
+
export const useForgeLiveQuery = forgeVue.useForgeLiveQuery;
|
|
681
|
+
`;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
export function renderVueDts(): string {
|
|
685
|
+
return `export type {
|
|
686
|
+
ForgeDevAuthConfig,
|
|
687
|
+
ForgeVueAuth,
|
|
688
|
+
ForgeVueAuthProvider,
|
|
689
|
+
ForgeVueBindings,
|
|
690
|
+
ForgeVueClient,
|
|
691
|
+
ForgeVueClientConfig,
|
|
692
|
+
ForgeVueError,
|
|
693
|
+
ForgeVuePluginOptions,
|
|
694
|
+
UseForgeCommandOptions,
|
|
695
|
+
UseForgeCommandResult,
|
|
696
|
+
UseForgeLiveQueryOptions,
|
|
697
|
+
UseForgeLiveQueryResult,
|
|
698
|
+
UseForgeQueryOptions,
|
|
699
|
+
UseForgeQueryResult,
|
|
700
|
+
} from "forge/vue";
|
|
701
|
+
|
|
702
|
+
export declare const ForgeVuePlugin: import("forge/vue").ForgeVueBindings["ForgeVuePlugin"];
|
|
703
|
+
export declare const provideForge: import("forge/vue").ForgeVueBindings["provideForge"];
|
|
704
|
+
export declare const useForgeClient: import("forge/vue").ForgeVueBindings["useForgeClient"];
|
|
705
|
+
export declare const useForgeAuth: import("forge/vue").ForgeVueBindings["useForgeAuth"];
|
|
706
|
+
export declare const useForgeQuery: import("forge/vue").ForgeVueBindings["useForgeQuery"];
|
|
707
|
+
export declare const useForgeCommand: import("forge/vue").ForgeVueBindings["useForgeCommand"];
|
|
708
|
+
export declare const useForgeLiveQuery: import("forge/vue").ForgeVueBindings["useForgeLiveQuery"];
|
|
709
|
+
`;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
export function renderVueManifestTs(manifest: VueManifest): string {
|
|
713
|
+
return `export const vueManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
|
|
714
|
+
}
|
|
@@ -36,7 +36,23 @@ function unwrapStringLiteral(node: SyntaxNode): string | null {
|
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
function
|
|
39
|
+
function unwrapNullableType(node: SyntaxNode): string | null {
|
|
40
|
+
if (node.type !== "call_expression") {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const functionNode = node.childForFieldName("function");
|
|
44
|
+
if (functionNode?.type !== "identifier" || functionNode.text !== "nullable") {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const argsNode = node.childForFieldName("arguments");
|
|
48
|
+
const firstArg = argsNode?.namedChildren.find((child) =>
|
|
49
|
+
child.type !== "," && child.type !== "comment" && child.type !== "(" && child.type !== ")"
|
|
50
|
+
);
|
|
51
|
+
const inner = firstArg ? unwrapStringLiteral(firstArg) : null;
|
|
52
|
+
return inner ? `${inner}?` : null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function extractFieldsFromObject(objectNode: SyntaxNode, options: { skipConfigName?: boolean } = {}): DataField[] {
|
|
40
56
|
const fields: DataField[] = [];
|
|
41
57
|
|
|
42
58
|
for (const child of objectNode.namedChildren) {
|
|
@@ -55,7 +71,7 @@ function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
|
|
|
55
71
|
? keyNode.text
|
|
56
72
|
: unwrapStringLiteral(keyNode);
|
|
57
73
|
|
|
58
|
-
if (!key || key === "name") {
|
|
74
|
+
if (!key || (options.skipConfigName && key === "name")) {
|
|
59
75
|
continue;
|
|
60
76
|
}
|
|
61
77
|
|
|
@@ -64,7 +80,7 @@ function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
|
|
|
64
80
|
continue;
|
|
65
81
|
}
|
|
66
82
|
|
|
67
|
-
const typeValue = unwrapStringLiteral(valueNode);
|
|
83
|
+
const typeValue = unwrapStringLiteral(valueNode) ?? unwrapNullableType(valueNode);
|
|
68
84
|
if (typeValue !== null) {
|
|
69
85
|
fields.push({ name: key, type: typeValue });
|
|
70
86
|
}
|
|
@@ -131,7 +147,7 @@ function parseCallArguments(callNode: SyntaxNode): ParsedDefineTable | null {
|
|
|
131
147
|
|
|
132
148
|
if (first.type === "object") {
|
|
133
149
|
const tableName = extractNameFromObject(first);
|
|
134
|
-
const fields = extractFieldsFromObject(first);
|
|
150
|
+
const fields = extractFieldsFromObject(first, { skipConfigName: true });
|
|
135
151
|
return { tableName, fields };
|
|
136
152
|
}
|
|
137
153
|
|