@prodara/compiler 0.1.0
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 +204 -0
- package/dist/agent/agent.d.ts +10 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +122 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/api-client.d.ts +29 -0
- package/dist/agent/api-client.d.ts.map +1 -0
- package/dist/agent/api-client.js +167 -0
- package/dist/agent/api-client.js.map +1 -0
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +3 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/party.d.ts +48 -0
- package/dist/agent/party.d.ts.map +1 -0
- package/dist/agent/party.js +79 -0
- package/dist/agent/party.js.map +1 -0
- package/dist/agent/types.d.ts +35 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/audit/audit.d.ts +32 -0
- package/dist/audit/audit.d.ts.map +1 -0
- package/dist/audit/audit.js +120 -0
- package/dist/audit/audit.js.map +1 -0
- package/dist/audit/index.d.ts +3 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +2 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/types.d.ts +25 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/binder/binder.d.ts +34 -0
- package/dist/binder/binder.d.ts.map +1 -0
- package/dist/binder/binder.js +202 -0
- package/dist/binder/binder.js.map +1 -0
- package/dist/binder/index.d.ts +3 -0
- package/dist/binder/index.d.ts.map +1 -0
- package/dist/binder/index.js +2 -0
- package/dist/binder/index.js.map +1 -0
- package/dist/build-state/build-state.d.ts +40 -0
- package/dist/build-state/build-state.d.ts.map +1 -0
- package/dist/build-state/build-state.js +180 -0
- package/dist/build-state/build-state.js.map +1 -0
- package/dist/build-state/index.d.ts +3 -0
- package/dist/build-state/index.d.ts.map +1 -0
- package/dist/build-state/index.js +2 -0
- package/dist/build-state/index.js.map +1 -0
- package/dist/checker/index.d.ts +5 -0
- package/dist/checker/index.d.ts.map +1 -0
- package/dist/checker/index.js +3 -0
- package/dist/checker/index.js.map +1 -0
- package/dist/checker/type-checker.d.ts +8 -0
- package/dist/checker/type-checker.d.ts.map +1 -0
- package/dist/checker/type-checker.js +136 -0
- package/dist/checker/type-checker.js.map +1 -0
- package/dist/checker/validator.d.ts +8 -0
- package/dist/checker/validator.d.ts.map +1 -0
- package/dist/checker/validator.js +251 -0
- package/dist/checker/validator.js.map +1 -0
- package/dist/cli/agent-setup.d.ts +27 -0
- package/dist/cli/agent-setup.d.ts.map +1 -0
- package/dist/cli/agent-setup.js +829 -0
- package/dist/cli/agent-setup.js.map +1 -0
- package/dist/cli/analyze.d.ts +28 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +188 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/checklist.d.ts +27 -0
- package/dist/cli/checklist.d.ts.map +1 -0
- package/dist/cli/checklist.js +153 -0
- package/dist/cli/checklist.js.map +1 -0
- package/dist/cli/compile.d.ts +26 -0
- package/dist/cli/compile.d.ts.map +1 -0
- package/dist/cli/compile.js +112 -0
- package/dist/cli/compile.js.map +1 -0
- package/dist/cli/dashboard.d.ts +19 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +73 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/explain.d.ts +23 -0
- package/dist/cli/explain.d.ts.map +1 -0
- package/dist/cli/explain.js +144 -0
- package/dist/cli/explain.js.map +1 -0
- package/dist/cli/git.d.ts +14 -0
- package/dist/cli/git.d.ts.map +1 -0
- package/dist/cli/git.js +44 -0
- package/dist/cli/git.js.map +1 -0
- package/dist/cli/lifecycle.d.ts +28 -0
- package/dist/cli/lifecycle.d.ts.map +1 -0
- package/dist/cli/lifecycle.js +82 -0
- package/dist/cli/lifecycle.js.map +1 -0
- package/dist/cli/main.d.ts +10 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +1072 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/notify.d.ts +13 -0
- package/dist/cli/notify.d.ts.map +1 -0
- package/dist/cli/notify.js +36 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/starters.d.ts +12 -0
- package/dist/cli/starters.d.ts.map +1 -0
- package/dist/cli/starters.js +439 -0
- package/dist/cli/starters.js.map +1 -0
- package/dist/config/config.d.ts +194 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +434 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +44 -0
- package/dist/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/diagnostics/diagnostic.js +44 -0
- package/dist/diagnostics/diagnostic.js.map +1 -0
- package/dist/diagnostics/index.d.ts +4 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +3 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/diagnostics/reporter.d.ts +43 -0
- package/dist/diagnostics/reporter.d.ts.map +1 -0
- package/dist/diagnostics/reporter.js +74 -0
- package/dist/diagnostics/reporter.js.map +1 -0
- package/dist/discovery/discovery.d.ts +6 -0
- package/dist/discovery/discovery.d.ts.map +1 -0
- package/dist/discovery/discovery.js +66 -0
- package/dist/discovery/discovery.js.map +1 -0
- package/dist/discovery/index.d.ts +2 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +2 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/doc-gen/doc-gen-types.d.ts +174 -0
- package/dist/doc-gen/doc-gen-types.d.ts.map +1 -0
- package/dist/doc-gen/doc-gen-types.js +7 -0
- package/dist/doc-gen/doc-gen-types.js.map +1 -0
- package/dist/doc-gen/doc-renderer.d.ts +17 -0
- package/dist/doc-gen/doc-renderer.d.ts.map +1 -0
- package/dist/doc-gen/doc-renderer.js +65 -0
- package/dist/doc-gen/doc-renderer.js.map +1 -0
- package/dist/doc-gen/format-helpers.d.ts +18 -0
- package/dist/doc-gen/format-helpers.d.ts.map +1 -0
- package/dist/doc-gen/format-helpers.js +92 -0
- package/dist/doc-gen/format-helpers.js.map +1 -0
- package/dist/doc-gen/index.d.ts +5 -0
- package/dist/doc-gen/index.d.ts.map +1 -0
- package/dist/doc-gen/index.js +5 -0
- package/dist/doc-gen/index.js.map +1 -0
- package/dist/doc-gen/link-resolver.d.ts +10 -0
- package/dist/doc-gen/link-resolver.d.ts.map +1 -0
- package/dist/doc-gen/link-resolver.js +87 -0
- package/dist/doc-gen/link-resolver.js.map +1 -0
- package/dist/doc-gen/mermaid-renderers.d.ts +12 -0
- package/dist/doc-gen/mermaid-renderers.d.ts.map +1 -0
- package/dist/doc-gen/mermaid-renderers.js +197 -0
- package/dist/doc-gen/mermaid-renderers.js.map +1 -0
- package/dist/doc-gen/module-renderer.d.ts +6 -0
- package/dist/doc-gen/module-renderer.d.ts.map +1 -0
- package/dist/doc-gen/module-renderer.js +54 -0
- package/dist/doc-gen/module-renderer.js.map +1 -0
- package/dist/doc-gen/product-renderer.d.ts +6 -0
- package/dist/doc-gen/product-renderer.d.ts.map +1 -0
- package/dist/doc-gen/product-renderer.js +101 -0
- package/dist/doc-gen/product-renderer.js.map +1 -0
- package/dist/doc-gen/section-renderers.d.ts +20 -0
- package/dist/doc-gen/section-renderers.d.ts.map +1 -0
- package/dist/doc-gen/section-renderers.js +357 -0
- package/dist/doc-gen/section-renderers.js.map +1 -0
- package/dist/doc-gen/string-resolver.d.ts +8 -0
- package/dist/doc-gen/string-resolver.d.ts.map +1 -0
- package/dist/doc-gen/string-resolver.js +47 -0
- package/dist/doc-gen/string-resolver.js.map +1 -0
- package/dist/doc-gen/surface-ascii.d.ts +7 -0
- package/dist/doc-gen/surface-ascii.d.ts.map +1 -0
- package/dist/doc-gen/surface-ascii.js +87 -0
- package/dist/doc-gen/surface-ascii.js.map +1 -0
- package/dist/drift/drift.d.ts +16 -0
- package/dist/drift/drift.d.ts.map +1 -0
- package/dist/drift/drift.js +149 -0
- package/dist/drift/drift.js.map +1 -0
- package/dist/drift/index.d.ts +3 -0
- package/dist/drift/index.d.ts.map +1 -0
- package/dist/drift/index.js +2 -0
- package/dist/drift/index.js.map +1 -0
- package/dist/extensions/index.d.ts +6 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +7 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +21 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +101 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/marketplace.d.ts +22 -0
- package/dist/extensions/marketplace.d.ts.map +1 -0
- package/dist/extensions/marketplace.js +40 -0
- package/dist/extensions/marketplace.js.map +1 -0
- package/dist/extensions/registry.d.ts +45 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +82 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/types.d.ts +41 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +5 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/generator/contracts.d.ts +67 -0
- package/dist/generator/contracts.d.ts.map +1 -0
- package/dist/generator/contracts.js +94 -0
- package/dist/generator/contracts.js.map +1 -0
- package/dist/generator/index.d.ts +3 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +2 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/governance/governance.d.ts +24 -0
- package/dist/governance/governance.d.ts.map +1 -0
- package/dist/governance/governance.js +238 -0
- package/dist/governance/governance.js.map +1 -0
- package/dist/governance/index.d.ts +3 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/types.d.ts +14 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +5 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/graph/builder.d.ts +10 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +573 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/graph-types.d.ts +64 -0
- package/dist/graph/graph-types.d.ts.map +1 -0
- package/dist/graph/graph-types.js +29 -0
- package/dist/graph/graph-types.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +5 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/serializer.d.ts +9 -0
- package/dist/graph/serializer.d.ts.map +1 -0
- package/dist/graph/serializer.js +31 -0
- package/dist/graph/serializer.js.map +1 -0
- package/dist/graph/validator.d.ts +14 -0
- package/dist/graph/validator.d.ts.map +1 -0
- package/dist/graph/validator.js +96 -0
- package/dist/graph/validator.js.map +1 -0
- package/dist/implement/implement.d.ts +30 -0
- package/dist/implement/implement.d.ts.map +1 -0
- package/dist/implement/implement.js +299 -0
- package/dist/implement/implement.js.map +1 -0
- package/dist/implement/index.d.ts +3 -0
- package/dist/implement/index.d.ts.map +1 -0
- package/dist/implement/index.js +2 -0
- package/dist/implement/index.js.map +1 -0
- package/dist/implement/types.d.ts +41 -0
- package/dist/implement/types.d.ts.map +1 -0
- package/dist/implement/types.js +5 -0
- package/dist/implement/types.js.map +1 -0
- package/dist/incremental/incremental-spec.d.ts +12 -0
- package/dist/incremental/incremental-spec.d.ts.map +1 -0
- package/dist/incremental/incremental-spec.js +100 -0
- package/dist/incremental/incremental-spec.js.map +1 -0
- package/dist/incremental/index.d.ts +3 -0
- package/dist/incremental/index.d.ts.map +1 -0
- package/dist/incremental/index.js +5 -0
- package/dist/incremental/index.js.map +1 -0
- package/dist/incremental/types.d.ts +28 -0
- package/dist/incremental/types.d.ts.map +1 -0
- package/dist/incremental/types.js +7 -0
- package/dist/incremental/types.js.map +1 -0
- package/dist/index.d.ts +106 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/index.d.ts +6 -0
- package/dist/lexer/index.d.ts.map +1 -0
- package/dist/lexer/index.js +5 -0
- package/dist/lexer/index.js.map +1 -0
- package/dist/lexer/keywords.d.ts +3 -0
- package/dist/lexer/keywords.d.ts.map +1 -0
- package/dist/lexer/keywords.js +142 -0
- package/dist/lexer/keywords.js.map +1 -0
- package/dist/lexer/lexer.d.ts +19 -0
- package/dist/lexer/lexer.d.ts.map +1 -0
- package/dist/lexer/lexer.js +286 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/lexer/source.d.ts +13 -0
- package/dist/lexer/source.d.ts.map +1 -0
- package/dist/lexer/source.js +59 -0
- package/dist/lexer/source.js.map +1 -0
- package/dist/lexer/tokens.d.ts +157 -0
- package/dist/lexer/tokens.d.ts.map +1 -0
- package/dist/lexer/tokens.js +173 -0
- package/dist/lexer/tokens.js.map +1 -0
- package/dist/orchestrator/index.d.ts +5 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +3 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +14 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +129 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/pipeline.d.ts +31 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -0
- package/dist/orchestrator/pipeline.js +290 -0
- package/dist/orchestrator/pipeline.js.map +1 -0
- package/dist/orchestrator/types.d.ts +60 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +8 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/parser/ast.d.ts +502 -0
- package/dist/parser/ast.d.ts.map +1 -0
- package/dist/parser/ast.js +7 -0
- package/dist/parser/ast.js.map +1 -0
- package/dist/parser/expressions.d.ts +18 -0
- package/dist/parser/expressions.d.ts.map +1 -0
- package/dist/parser/expressions.js +230 -0
- package/dist/parser/expressions.js.map +1 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +2 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parser.d.ts +83 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +2149 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/planner/differ.d.ts +4 -0
- package/dist/planner/differ.d.ts.map +1 -0
- package/dist/planner/differ.js +96 -0
- package/dist/planner/differ.js.map +1 -0
- package/dist/planner/index.d.ts +7 -0
- package/dist/planner/index.d.ts.map +1 -0
- package/dist/planner/index.js +5 -0
- package/dist/planner/index.js.map +1 -0
- package/dist/planner/plan-types.d.ts +26 -0
- package/dist/planner/plan-types.d.ts.map +1 -0
- package/dist/planner/plan-types.js +5 -0
- package/dist/planner/plan-types.js.map +1 -0
- package/dist/planner/planner.d.ts +8 -0
- package/dist/planner/planner.d.ts.map +1 -0
- package/dist/planner/planner.js +83 -0
- package/dist/planner/planner.js.map +1 -0
- package/dist/planner/propagator.d.ts +4 -0
- package/dist/planner/propagator.d.ts.map +1 -0
- package/dist/planner/propagator.js +45 -0
- package/dist/planner/propagator.js.map +1 -0
- package/dist/planner/semantic-diff.d.ts +27 -0
- package/dist/planner/semantic-diff.d.ts.map +1 -0
- package/dist/planner/semantic-diff.js +253 -0
- package/dist/planner/semantic-diff.js.map +1 -0
- package/dist/presets/index.d.ts +3 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +5 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/loader.d.ts +28 -0
- package/dist/presets/loader.d.ts.map +1 -0
- package/dist/presets/loader.js +99 -0
- package/dist/presets/loader.js.map +1 -0
- package/dist/presets/types.d.ts +21 -0
- package/dist/presets/types.d.ts.map +1 -0
- package/dist/presets/types.js +5 -0
- package/dist/presets/types.js.map +1 -0
- package/dist/proposal/index.d.ts +3 -0
- package/dist/proposal/index.d.ts.map +1 -0
- package/dist/proposal/index.js +7 -0
- package/dist/proposal/index.js.map +1 -0
- package/dist/proposal/proposal.d.ts +9 -0
- package/dist/proposal/proposal.d.ts.map +1 -0
- package/dist/proposal/proposal.js +169 -0
- package/dist/proposal/proposal.js.map +1 -0
- package/dist/proposal/types.d.ts +15 -0
- package/dist/proposal/types.d.ts.map +1 -0
- package/dist/proposal/types.js +5 -0
- package/dist/proposal/types.js.map +1 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/resolution.d.ts +39 -0
- package/dist/registry/resolution.d.ts.map +1 -0
- package/dist/registry/resolution.js +70 -0
- package/dist/registry/resolution.js.map +1 -0
- package/dist/reviewers/adversarial.d.ts +3 -0
- package/dist/reviewers/adversarial.d.ts.map +1 -0
- package/dist/reviewers/adversarial.js +111 -0
- package/dist/reviewers/adversarial.js.map +1 -0
- package/dist/reviewers/architecture.d.ts +3 -0
- package/dist/reviewers/architecture.d.ts.map +1 -0
- package/dist/reviewers/architecture.js +71 -0
- package/dist/reviewers/architecture.js.map +1 -0
- package/dist/reviewers/code-quality.d.ts +3 -0
- package/dist/reviewers/code-quality.d.ts.map +1 -0
- package/dist/reviewers/code-quality.js +72 -0
- package/dist/reviewers/code-quality.js.map +1 -0
- package/dist/reviewers/edge-case.d.ts +3 -0
- package/dist/reviewers/edge-case.d.ts.map +1 -0
- package/dist/reviewers/edge-case.js +107 -0
- package/dist/reviewers/edge-case.js.map +1 -0
- package/dist/reviewers/index.d.ts +21 -0
- package/dist/reviewers/index.d.ts.map +1 -0
- package/dist/reviewers/index.js +39 -0
- package/dist/reviewers/index.js.map +1 -0
- package/dist/reviewers/prompt-loader.d.ts +24 -0
- package/dist/reviewers/prompt-loader.d.ts.map +1 -0
- package/dist/reviewers/prompt-loader.js +67 -0
- package/dist/reviewers/prompt-loader.js.map +1 -0
- package/dist/reviewers/quality.d.ts +3 -0
- package/dist/reviewers/quality.d.ts.map +1 -0
- package/dist/reviewers/quality.js +76 -0
- package/dist/reviewers/quality.js.map +1 -0
- package/dist/reviewers/reviewer.d.ts +39 -0
- package/dist/reviewers/reviewer.d.ts.map +1 -0
- package/dist/reviewers/reviewer.js +149 -0
- package/dist/reviewers/reviewer.js.map +1 -0
- package/dist/reviewers/security.d.ts +3 -0
- package/dist/reviewers/security.d.ts.map +1 -0
- package/dist/reviewers/security.js +87 -0
- package/dist/reviewers/security.js.map +1 -0
- package/dist/reviewers/specification.d.ts +3 -0
- package/dist/reviewers/specification.d.ts.map +1 -0
- package/dist/reviewers/specification.js +79 -0
- package/dist/reviewers/specification.js.map +1 -0
- package/dist/reviewers/test-quality.d.ts +3 -0
- package/dist/reviewers/test-quality.d.ts.map +1 -0
- package/dist/reviewers/test-quality.js +88 -0
- package/dist/reviewers/test-quality.js.map +1 -0
- package/dist/reviewers/types.d.ts +32 -0
- package/dist/reviewers/types.d.ts.map +1 -0
- package/dist/reviewers/types.js +5 -0
- package/dist/reviewers/types.js.map +1 -0
- package/dist/reviewers/ux.d.ts +3 -0
- package/dist/reviewers/ux.d.ts.map +1 -0
- package/dist/reviewers/ux.js +94 -0
- package/dist/reviewers/ux.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/resolution.d.ts +30 -0
- package/dist/runtime/resolution.d.ts.map +1 -0
- package/dist/runtime/resolution.js +59 -0
- package/dist/runtime/resolution.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-runner.d.ts +18 -0
- package/dist/testing/test-runner.d.ts.map +1 -0
- package/dist/testing/test-runner.js +131 -0
- package/dist/testing/test-runner.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +127 -0
- package/dist/types.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/types.d.ts +16 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +5 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validation.d.ts +8 -0
- package/dist/validation/validation.d.ts.map +1 -0
- package/dist/validation/validation.js +101 -0
- package/dist/validation/validation.js.map +1 -0
- package/dist/verification/index.d.ts +3 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +5 -0
- package/dist/verification/index.js.map +1 -0
- package/dist/verification/types.d.ts +14 -0
- package/dist/verification/types.d.ts.map +1 -0
- package/dist/verification/types.js +5 -0
- package/dist/verification/types.js.map +1 -0
- package/dist/verification/verify.d.ts +7 -0
- package/dist/verification/verify.d.ts.map +1 -0
- package/dist/verification/verify.js +127 -0
- package/dist/verification/verify.js.map +1 -0
- package/dist/workflow/clarify.d.ts +7 -0
- package/dist/workflow/clarify.d.ts.map +1 -0
- package/dist/workflow/clarify.js +165 -0
- package/dist/workflow/clarify.js.map +1 -0
- package/dist/workflow/engine.d.ts +19 -0
- package/dist/workflow/engine.d.ts.map +1 -0
- package/dist/workflow/engine.js +265 -0
- package/dist/workflow/engine.js.map +1 -0
- package/dist/workflow/index.d.ts +6 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +7 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/types.d.ts +95 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +18 -0
- package/dist/workflow/types.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Doc-Gen Surface ASCII Art
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Renders ASCII art representations of surface and rendering nodes.
|
|
5
|
+
import { humanize } from './format-helpers.js';
|
|
6
|
+
const KIND_ICONS = {
|
|
7
|
+
view: '📋',
|
|
8
|
+
form: '📝',
|
|
9
|
+
dashboard: '📊',
|
|
10
|
+
api: '🔌',
|
|
11
|
+
modal: '💬',
|
|
12
|
+
list: '📃',
|
|
13
|
+
};
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Surface ASCII art
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Render an ASCII art box for a surface, optionally enriched with
|
|
19
|
+
* rendering layout info.
|
|
20
|
+
*/
|
|
21
|
+
export function renderSurfaceAscii(surface, rendering, resolveString, actions) {
|
|
22
|
+
const title = resolveString(surface.title) ?? humanize(surface.name);
|
|
23
|
+
/* v8 ignore next 4 -- fallbacks for uncommon surface kinds */
|
|
24
|
+
const kind = surface.surface_kind ?? 'view';
|
|
25
|
+
const icon = KIND_ICONS[kind] ?? '📋';
|
|
26
|
+
const bindsName = surface.binds
|
|
27
|
+
? surface.binds.split('.').pop() ?? surface.binds
|
|
28
|
+
: null;
|
|
29
|
+
const lines = [];
|
|
30
|
+
lines.push('```');
|
|
31
|
+
if (rendering?.layout === 'grid') {
|
|
32
|
+
lines.push(...renderGridBox(title, rendering, kind, icon, bindsName));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
lines.push(...renderSimpleBox(title, kind, icon, bindsName, actions));
|
|
36
|
+
}
|
|
37
|
+
lines.push('```');
|
|
38
|
+
return lines;
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Simple box (no grid)
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function renderSimpleBox(title, kind, icon, bindsName, actions) {
|
|
44
|
+
const contentLines = [];
|
|
45
|
+
contentLines.push(`${icon} ${title}`);
|
|
46
|
+
const kindBinds = bindsName ? `Kind: ${kind} · Binds: ${bindsName}` : `Kind: ${kind}`;
|
|
47
|
+
contentLines.push(kindBinds);
|
|
48
|
+
if (actions.length > 0) {
|
|
49
|
+
contentLines.push(`Actions: [ ${actions.join(' | ')} ]`);
|
|
50
|
+
}
|
|
51
|
+
return drawBox(contentLines);
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Grid box (with rendering layout info)
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
function renderGridBox(title, rendering, kind, icon, bindsName) {
|
|
57
|
+
const lines = [];
|
|
58
|
+
const platform = rendering.platform ?? 'web';
|
|
59
|
+
const header = `${icon} ${title} (${platform} · grid)`;
|
|
60
|
+
// We don't have column details in the simplified rendering node
|
|
61
|
+
// but we can show the layout type
|
|
62
|
+
const contentLines = [header];
|
|
63
|
+
const kindBinds = bindsName ? `Kind: ${kind} · Binds: ${bindsName}` : `Kind: ${kind}`;
|
|
64
|
+
contentLines.push(kindBinds);
|
|
65
|
+
contentLines.push(`Layout: grid`);
|
|
66
|
+
lines.push(...drawBox(contentLines));
|
|
67
|
+
return lines;
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Box drawing
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
function drawBox(contentLines) {
|
|
73
|
+
const maxLen = Math.max(...contentLines.map(l => l.length), 30);
|
|
74
|
+
const width = maxLen + 4;
|
|
75
|
+
const lines = [];
|
|
76
|
+
lines.push(`┌${'─'.repeat(width)}┐`);
|
|
77
|
+
for (let i = 0; i < contentLines.length; i++) {
|
|
78
|
+
const line = contentLines[i];
|
|
79
|
+
lines.push(`│ ${line.padEnd(maxLen + 2)}│`);
|
|
80
|
+
if (i === 0) {
|
|
81
|
+
lines.push(`│ ${'─'.repeat(maxLen + 2)}│`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
lines.push(`└${'─'.repeat(width)}┘`);
|
|
85
|
+
return lines;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=surface-ascii.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-ascii.js","sourceRoot":"","sources":["../../src/doc-gen/surface-ascii.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type DriftStatus = 'clean' | 'drifted' | 'no-build';
|
|
2
|
+
export interface DriftFile {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly status: 'added' | 'removed' | 'modified';
|
|
5
|
+
}
|
|
6
|
+
export interface DriftResult {
|
|
7
|
+
readonly status: DriftStatus;
|
|
8
|
+
readonly files: readonly DriftFile[];
|
|
9
|
+
readonly currentSourceHash: string;
|
|
10
|
+
readonly previousSourceHash: string | null;
|
|
11
|
+
readonly lastCompiled: string | null;
|
|
12
|
+
readonly summary: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function detectDrift(root: string): DriftResult;
|
|
15
|
+
export declare function formatDriftHuman(result: DriftResult): string;
|
|
16
|
+
//# sourceMappingURL=drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/drift/drift.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;CACnD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAsDrD;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAe5D"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Spec Drift Detection
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Compares current .prd sources against the stored build state to detect
|
|
5
|
+
// whether the specification has drifted from the last successful build.
|
|
6
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
9
|
+
import { discoverFiles } from '../discovery/discovery.js';
|
|
10
|
+
const BUILD_DIR = '.prodara';
|
|
11
|
+
const BUILD_FILE = 'build.json';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Detection
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
export function detectDrift(root) {
|
|
16
|
+
const buildStatePath = join(root, BUILD_DIR, BUILD_FILE);
|
|
17
|
+
// If no build state exists, report as no-build
|
|
18
|
+
if (!existsSync(buildStatePath)) {
|
|
19
|
+
const sourceFiles = discoverFiles(root);
|
|
20
|
+
const currentHash = hashFilePaths(sourceFiles);
|
|
21
|
+
return {
|
|
22
|
+
status: 'no-build',
|
|
23
|
+
files: [],
|
|
24
|
+
currentSourceHash: currentHash,
|
|
25
|
+
previousSourceHash: null,
|
|
26
|
+
lastCompiled: null,
|
|
27
|
+
summary: 'No previous build found. Run `prodara build` first.',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const buildState = JSON.parse(readFileSync(buildStatePath, 'utf-8'));
|
|
31
|
+
const sourceFiles = discoverFiles(root);
|
|
32
|
+
const currentHash = hashFilePaths(sourceFiles);
|
|
33
|
+
if (currentHash === buildState.sourceHash) {
|
|
34
|
+
return {
|
|
35
|
+
status: 'clean',
|
|
36
|
+
files: [],
|
|
37
|
+
currentSourceHash: currentHash,
|
|
38
|
+
previousSourceHash: buildState.sourceHash,
|
|
39
|
+
lastCompiled: buildState.lastCompiled,
|
|
40
|
+
summary: `Specification is clean (last built: ${buildState.lastCompiled}).`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Hash differs — figure out which files changed
|
|
44
|
+
const driftFiles = identifyDriftedFiles(root, sourceFiles);
|
|
45
|
+
const parts = [];
|
|
46
|
+
const added = driftFiles.filter(f => f.status === 'added').length;
|
|
47
|
+
const removed = driftFiles.filter(f => f.status === 'removed').length;
|
|
48
|
+
const modified = driftFiles.filter(f => f.status === 'modified').length;
|
|
49
|
+
if (added > 0)
|
|
50
|
+
parts.push(`${added} added`);
|
|
51
|
+
if (removed > 0)
|
|
52
|
+
parts.push(`${removed} removed`);
|
|
53
|
+
if (modified > 0)
|
|
54
|
+
parts.push(`${modified} modified`);
|
|
55
|
+
return {
|
|
56
|
+
status: 'drifted',
|
|
57
|
+
files: driftFiles,
|
|
58
|
+
currentSourceHash: currentHash,
|
|
59
|
+
previousSourceHash: buildState.sourceHash,
|
|
60
|
+
lastCompiled: buildState.lastCompiled,
|
|
61
|
+
summary: `Specification has drifted since last build (${parts.join(', ')}).`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Human formatting
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
export function formatDriftHuman(result) {
|
|
68
|
+
const lines = [];
|
|
69
|
+
lines.push(`Drift Status: ${result.status}`);
|
|
70
|
+
lines.push(` ${result.summary}`);
|
|
71
|
+
if (result.files.length > 0) {
|
|
72
|
+
lines.push('');
|
|
73
|
+
lines.push('Changed files:');
|
|
74
|
+
for (const f of result.files) {
|
|
75
|
+
const icon = f.status === 'added' ? '+' : f.status === 'removed' ? '-' : '~';
|
|
76
|
+
lines.push(` ${icon} ${f.path}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return lines.join('\n');
|
|
80
|
+
}
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Helpers
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
/**
|
|
85
|
+
* Hash a list of file paths in the same way build-state does.
|
|
86
|
+
* Uses SHA-256 over file contents.
|
|
87
|
+
*/
|
|
88
|
+
function hashFilePaths(paths) {
|
|
89
|
+
const h = createHash('sha256');
|
|
90
|
+
for (const p of [...paths].sort()) {
|
|
91
|
+
try {
|
|
92
|
+
h.update(readFileSync(p, 'utf-8'));
|
|
93
|
+
/* v8 ignore next 3 -- race condition: file removed between discovery and hashing */
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// File disappeared between discovery and hashing — skip
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return h.digest('hex');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Build a per-file hash map and compare with a fresh hashing
|
|
103
|
+
* to identify which files were added, removed, or modified.
|
|
104
|
+
*
|
|
105
|
+
* Since build state currently only stores an aggregate hash,
|
|
106
|
+
* we detect additions/removals by checking file existence and
|
|
107
|
+
* flag everything else as "modified" when the aggregate drifts.
|
|
108
|
+
*/
|
|
109
|
+
function identifyDriftedFiles(root, currentFiles) {
|
|
110
|
+
// Read the recorded source file list if available
|
|
111
|
+
const manifestPath = join(root, BUILD_DIR, 'sources.json');
|
|
112
|
+
let previousFiles = [];
|
|
113
|
+
if (existsSync(manifestPath)) {
|
|
114
|
+
try {
|
|
115
|
+
previousFiles = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
previousFiles = [];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const driftFiles = [];
|
|
122
|
+
const currentSet = new Set(currentFiles);
|
|
123
|
+
const previousSet = new Set(previousFiles);
|
|
124
|
+
// Added files (in current but not in previous)
|
|
125
|
+
for (const f of currentFiles) {
|
|
126
|
+
if (!previousSet.has(f)) {
|
|
127
|
+
driftFiles.push({ path: f, status: 'added' });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Removed files (in previous but not in current)
|
|
131
|
+
for (const f of previousFiles) {
|
|
132
|
+
if (!currentSet.has(f)) {
|
|
133
|
+
driftFiles.push({ path: f, status: 'removed' });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// If we have no manifest but drift was detected, mark all as modified
|
|
137
|
+
if (previousFiles.length === 0 && currentFiles.length > 0) {
|
|
138
|
+
return currentFiles.map(f => ({ path: f, status: 'modified' }));
|
|
139
|
+
}
|
|
140
|
+
// Files present in both — mark as modified (aggregate hash already differs)
|
|
141
|
+
if (driftFiles.length === 0) {
|
|
142
|
+
// All same files but content differs — all are potentially modified
|
|
143
|
+
for (const f of currentFiles) {
|
|
144
|
+
driftFiles.push({ path: f, status: 'modified' });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return driftFiles;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/drift/drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drift/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drift/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ExtensionManifest, ExtensionCapability, InstalledExtension } from './types.js';
|
|
2
|
+
export { ExtensionRegistry } from './registry.js';
|
|
3
|
+
export { loadExtensions, installExtension, removeExtension, listInstalledExtensions, EXTENSIONS_DIR } from './loader.js';
|
|
4
|
+
export type { MarketplaceEntry, MarketplaceCategory } from './marketplace.js';
|
|
5
|
+
export { searchMarketplace, npmInstall, npmRemove } from './marketplace.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzH,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Extensions barrel
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export { ExtensionRegistry } from './registry.js';
|
|
5
|
+
export { loadExtensions, installExtension, removeExtension, listInstalledExtensions, EXTENSIONS_DIR } from './loader.js';
|
|
6
|
+
export { searchMarketplace, npmInstall, npmRemove } from './marketplace.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzH,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ExtensionManifest, InstalledExtension } from './types.js';
|
|
2
|
+
import { ExtensionRegistry } from './registry.js';
|
|
3
|
+
/** Conventional directory for locally-installed extensions. */
|
|
4
|
+
export declare const EXTENSIONS_DIR = ".prodara/extensions";
|
|
5
|
+
/**
|
|
6
|
+
* Load all extensions from `.prodara/extensions/` and populate a registry.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadExtensions(root: string): ExtensionRegistry;
|
|
9
|
+
/**
|
|
10
|
+
* Install an extension from a local directory by copying its manifest.
|
|
11
|
+
*/
|
|
12
|
+
export declare function installExtension(root: string, name: string, manifest: ExtensionManifest): InstalledExtension;
|
|
13
|
+
/**
|
|
14
|
+
* Remove an installed extension.
|
|
15
|
+
*/
|
|
16
|
+
export declare function removeExtension(root: string, name: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* List installed extensions (just metadata, no loading).
|
|
19
|
+
*/
|
|
20
|
+
export declare function listInstalledExtensions(root: string): InstalledExtension[];
|
|
21
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,+DAA+D;AAC/D,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAKpD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAsB9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,CAQ5G;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAkB1E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Extension Loader
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Discovers and validates extensions from `.prodara/extensions/`.
|
|
5
|
+
import { existsSync, readdirSync, readFileSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { ExtensionRegistry } from './registry.js';
|
|
8
|
+
/** Conventional directory for locally-installed extensions. */
|
|
9
|
+
export const EXTENSIONS_DIR = '.prodara/extensions';
|
|
10
|
+
/** Conventional manifest filename. */
|
|
11
|
+
const MANIFEST_FILE = 'prodara-extension.json';
|
|
12
|
+
/**
|
|
13
|
+
* Load all extensions from `.prodara/extensions/` and populate a registry.
|
|
14
|
+
*/
|
|
15
|
+
export function loadExtensions(root) {
|
|
16
|
+
const registry = new ExtensionRegistry();
|
|
17
|
+
const extDir = join(root, EXTENSIONS_DIR);
|
|
18
|
+
/* v8 ignore next -- early return when no extensions dir */
|
|
19
|
+
if (!existsSync(extDir))
|
|
20
|
+
return registry;
|
|
21
|
+
const entries = readdirSync(extDir, { withFileTypes: true });
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
/* v8 ignore next -- skip non-directory entries */
|
|
24
|
+
if (!entry.isDirectory())
|
|
25
|
+
continue;
|
|
26
|
+
const manifestPath = join(extDir, entry.name, MANIFEST_FILE);
|
|
27
|
+
/* v8 ignore next -- skip dirs without manifest */
|
|
28
|
+
if (!existsSync(manifestPath))
|
|
29
|
+
continue;
|
|
30
|
+
const manifest = parseManifest(readFileSync(manifestPath, 'utf-8'), entry.name);
|
|
31
|
+
if (manifest) {
|
|
32
|
+
registry.register(manifest, join(extDir, entry.name));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return registry;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Install an extension from a local directory by copying its manifest.
|
|
39
|
+
*/
|
|
40
|
+
export function installExtension(root, name, manifest) {
|
|
41
|
+
const extDir = join(root, EXTENSIONS_DIR, name);
|
|
42
|
+
if (existsSync(extDir)) {
|
|
43
|
+
throw new Error(`Extension "${name}" is already installed`);
|
|
44
|
+
}
|
|
45
|
+
mkdirSync(extDir, { recursive: true });
|
|
46
|
+
writeFileSync(join(extDir, MANIFEST_FILE), JSON.stringify(manifest, null, 2));
|
|
47
|
+
return { manifest, path: extDir, enabled: true };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Remove an installed extension.
|
|
51
|
+
*/
|
|
52
|
+
export function removeExtension(root, name) {
|
|
53
|
+
const extDir = join(root, EXTENSIONS_DIR, name);
|
|
54
|
+
if (!existsSync(extDir)) {
|
|
55
|
+
throw new Error(`Extension "${name}" is not installed`);
|
|
56
|
+
}
|
|
57
|
+
rmSync(extDir, { recursive: true, force: true });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* List installed extensions (just metadata, no loading).
|
|
61
|
+
*/
|
|
62
|
+
export function listInstalledExtensions(root) {
|
|
63
|
+
const extDir = join(root, EXTENSIONS_DIR);
|
|
64
|
+
if (!existsSync(extDir))
|
|
65
|
+
return [];
|
|
66
|
+
const results = [];
|
|
67
|
+
const entries = readdirSync(extDir, { withFileTypes: true });
|
|
68
|
+
for (const entry of entries) {
|
|
69
|
+
/* v8 ignore next -- skip non-directory entries */
|
|
70
|
+
if (!entry.isDirectory())
|
|
71
|
+
continue;
|
|
72
|
+
const manifestPath = join(extDir, entry.name, MANIFEST_FILE);
|
|
73
|
+
/* v8 ignore next -- skip dirs without manifest */
|
|
74
|
+
if (!existsSync(manifestPath))
|
|
75
|
+
continue;
|
|
76
|
+
const manifest = parseManifest(readFileSync(manifestPath, 'utf-8'), entry.name);
|
|
77
|
+
if (manifest) {
|
|
78
|
+
results.push({ manifest, path: join(extDir, entry.name), enabled: true });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return results;
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// Internal helpers
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
function parseManifest(raw, dirName) {
|
|
87
|
+
try {
|
|
88
|
+
const data = JSON.parse(raw);
|
|
89
|
+
if (typeof data['name'] !== 'string' || typeof data['version'] !== 'string')
|
|
90
|
+
return null;
|
|
91
|
+
/* v8 ignore next -- capabilities is always an array in valid manifests */
|
|
92
|
+
if (!Array.isArray(data['capabilities']))
|
|
93
|
+
return null;
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
console.warn(`Warning: Could not parse manifest for extension "${dirName}"`);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAC9E,kEAAkE;AAElE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAEpD,sCAAsC;AACtC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1C,2DAA2D;IAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEzC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,kDAAkD;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QAEnC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7D,kDAAkD;QAClD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAExC,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAY,EAAE,QAA2B;IACtF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,wBAAwB,CAAC,CAAC;IAC9D,CAAC;IACD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,oBAAoB,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,kDAAkD;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7D,kDAAkD;QAClD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,aAAa,CAAC,GAAW,EAAE,OAAe;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACxD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzF,0EAA0E;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACtD,OAAO,IAAoC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,oDAAoD,OAAO,GAAG,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Search result from npm registry. */
|
|
2
|
+
export interface MarketplaceEntry {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly version: string;
|
|
5
|
+
readonly description: string;
|
|
6
|
+
}
|
|
7
|
+
/** Category of marketplace package. */
|
|
8
|
+
export type MarketplaceCategory = 'extension' | 'preset';
|
|
9
|
+
/**
|
|
10
|
+
* Search npm for packages matching `query` and `category`.
|
|
11
|
+
* Returns parsed results from `npm search --json`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function searchMarketplace(query: string, category: MarketplaceCategory): readonly MarketplaceEntry[];
|
|
14
|
+
/**
|
|
15
|
+
* Install an npm package into the project.
|
|
16
|
+
*/
|
|
17
|
+
export declare function npmInstall(packageName: string, cwd: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Remove an npm package from the project.
|
|
20
|
+
*/
|
|
21
|
+
export declare function npmRemove(packageName: string, cwd: string): void;
|
|
22
|
+
//# sourceMappingURL=marketplace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/extensions/marketplace.ts"],"names":[],"mappings":"AASA,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,uCAAuC;AACvC,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAOzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,mBAAmB,GAC5B,SAAS,gBAAgB,EAAE,CAU7B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Prodara Compiler — Extension & Preset Marketplace
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Wraps npm search/install/remove for extensions and presets.
|
|
5
|
+
// Convention: extensions are `prodara-extension-{name}`, presets are
|
|
6
|
+
// `prodara-preset-{name}`. All operations shell out to npm.
|
|
7
|
+
import * as cp from 'node:child_process';
|
|
8
|
+
/** Build the npm keyword for a category. */
|
|
9
|
+
function keyword(category) {
|
|
10
|
+
return category === 'extension' ? 'prodara-extension' : 'prodara-preset';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Search npm for packages matching `query` and `category`.
|
|
14
|
+
* Returns parsed results from `npm search --json`.
|
|
15
|
+
*/
|
|
16
|
+
export function searchMarketplace(query, category) {
|
|
17
|
+
const kw = keyword(category);
|
|
18
|
+
const cmd = `npm search ${kw} ${query} --json --no-update-notifier`;
|
|
19
|
+
try {
|
|
20
|
+
const stdout = cp.execSync(cmd, { encoding: 'utf-8', timeout: 30_000 });
|
|
21
|
+
const results = JSON.parse(stdout);
|
|
22
|
+
return results.map(r => ({ name: r.name, version: r.version, description: r.description }));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Install an npm package into the project.
|
|
30
|
+
*/
|
|
31
|
+
export function npmInstall(packageName, cwd) {
|
|
32
|
+
cp.execSync(`npm install ${packageName} --no-update-notifier`, { cwd, encoding: 'utf-8', timeout: 60_000 });
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Remove an npm package from the project.
|
|
36
|
+
*/
|
|
37
|
+
export function npmRemove(packageName, cwd) {
|
|
38
|
+
cp.execSync(`npm remove ${packageName} --no-update-notifier`, { cwd, encoding: 'utf-8', timeout: 60_000 });
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/extensions/marketplace.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAC9E,8DAA8D;AAC9D,qEAAqE;AACrE,6DAA6D;AAE7D,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAYzC,4CAA4C;AAC5C,SAAS,OAAO,CAAC,QAA6B;IAC5C,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,QAA6B;IAE7B,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,cAAc,EAAE,IAAI,KAAK,8BAA8B,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAkE,CAAC;QACpG,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,GAAW;IACzD,EAAE,CAAC,QAAQ,CAAC,eAAe,WAAW,uBAAuB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9G,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB,EAAE,GAAW;IACxD,EAAE,CAAC,QAAQ,CAAC,cAAc,WAAW,uBAAuB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7G,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { InstalledExtension, ExtensionManifest, ExtensionCapability } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory registry of loaded extensions. The registry does NOT perform
|
|
4
|
+
* dynamic `import()` — it stays purely data-driven. The pipeline and CLI
|
|
5
|
+
* query it to discover what capabilities are available.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ExtensionRegistry {
|
|
8
|
+
private readonly _extensions;
|
|
9
|
+
/** Register an extension. */
|
|
10
|
+
register(manifest: ExtensionManifest, path: string, enabled?: boolean): void;
|
|
11
|
+
/** Unregister an extension by name. */
|
|
12
|
+
unregister(name: string): boolean;
|
|
13
|
+
/** Get all registered extensions. */
|
|
14
|
+
all(): readonly InstalledExtension[];
|
|
15
|
+
/** Get a single extension by name. */
|
|
16
|
+
get(name: string): InstalledExtension | undefined;
|
|
17
|
+
/** Get extensions that provide a given capability kind. */
|
|
18
|
+
withCapability(kind: ExtensionCapability['kind']): readonly InstalledExtension[];
|
|
19
|
+
/** Get all generator capabilities from enabled extensions. */
|
|
20
|
+
generators(): readonly {
|
|
21
|
+
ext: InstalledExtension;
|
|
22
|
+
cap: Extract<ExtensionCapability, {
|
|
23
|
+
kind: 'generator';
|
|
24
|
+
}>;
|
|
25
|
+
}[];
|
|
26
|
+
/** Get all reviewer capabilities from enabled extensions. */
|
|
27
|
+
reviewers(): readonly {
|
|
28
|
+
ext: InstalledExtension;
|
|
29
|
+
cap: Extract<ExtensionCapability, {
|
|
30
|
+
kind: 'reviewer';
|
|
31
|
+
}>;
|
|
32
|
+
}[];
|
|
33
|
+
/** Get all custom command capabilities from enabled extensions. */
|
|
34
|
+
commands(): readonly {
|
|
35
|
+
ext: InstalledExtension;
|
|
36
|
+
cap: Extract<ExtensionCapability, {
|
|
37
|
+
kind: 'command';
|
|
38
|
+
}>;
|
|
39
|
+
}[];
|
|
40
|
+
/** Number of registered extensions. */
|
|
41
|
+
get size(): number;
|
|
42
|
+
/** Clear all extensions. */
|
|
43
|
+
clear(): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/extensions/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE7F;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;IAErE,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,IAAI;IAOzE,uCAAuC;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,qCAAqC;IACrC,GAAG,IAAI,SAAS,kBAAkB,EAAE;IAIpC,sCAAsC;IACtC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIjD,2DAA2D;IAC3D,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,SAAS,kBAAkB,EAAE;IAMhF,8DAA8D;IAC9D,UAAU,IAAI,SAAS;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,mBAAmB,EAAE;YAAE,IAAI,EAAE,WAAW,CAAA;SAAE,CAAC,CAAA;KAAE,EAAE;IAW9G,6DAA6D;IAC7D,SAAS,IAAI,SAAS;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,mBAAmB,EAAE;YAAE,IAAI,EAAE,UAAU,CAAA;SAAE,CAAC,CAAA;KAAE,EAAE;IAW5G,mEAAmE;IACnE,QAAQ,IAAI,SAAS;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,mBAAmB,EAAE;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,CAAC,CAAA;KAAE,EAAE;IAW1G,uCAAuC;IACvC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,4BAA4B;IAC5B,KAAK,IAAI,IAAI;CAGd"}
|