domainforge 0.13.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/.cargo/config.toml +6 -0
- package/.claude/settings.local.json +18 -0
- package/.coderabbit.yml +43 -0
- package/.codex/skills/release-management/SKILL.md +151 -0
- package/.codex/skills/release-management/agents/openai.yaml +4 -0
- package/.github/actions/decrypt-secrets/action.yml +121 -0
- package/.github/agents/Coder.agent.md +97 -0
- package/.github/agents/DeepResearch.agent.md +61 -0
- package/.github/chatmodes/tdd.vibepro.chatmode.md +1183 -0
- package/.github/copilot-instructions.md +13 -0
- package/.github/dependabot.yml +68 -0
- package/.github/workflows/README.md +165 -0
- package/.github/workflows/ci.yml +335 -0
- package/.github/workflows/dependabot-automerge.yml +114 -0
- package/.github/workflows/dependency-review.yml +27 -0
- package/.github/workflows/deploy.yml +87 -0
- package/.github/workflows/prepare-release.yml +168 -0
- package/.github/workflows/release-crates.yml +42 -0
- package/.github/workflows/release-npm.yml +137 -0
- package/.github/workflows/release-please.yml +29 -0
- package/.github/workflows/release-pypi.yml +96 -0
- package/.gitkeep +1 -0
- package/.release-please-manifest.json +5 -0
- package/.sea-registry.toml +10 -0
- package/.serena/project.yml +133 -0
- package/.sops.yaml +10 -0
- package/AGENTS.md +216 -0
- package/CHANGELOG.md +400 -0
- package/CLAUDE.md +62 -0
- package/CONTRIBUTING.md +323 -0
- package/Cargo.lock +3612 -0
- package/Cargo.toml +12 -0
- package/LICENSE +201 -0
- package/README.md +660 -0
- package/README_PYTHON.md +256 -0
- package/README_TYPESCRIPT.md +305 -0
- package/README_WASM.md +329 -0
- package/RELEASE_NOTES.md +41 -0
- package/bun.lock +378 -0
- package/bunfig.toml +11 -0
- package/check_output.txt +83 -0
- package/clippy_output.txt +80 -0
- package/commitlint.config.cjs +8 -0
- package/deny.toml +42 -0
- package/devbox.json +14 -0
- package/devbox.lock +76 -0
- package/docs/RELEASE_PROCESS.md +360 -0
- package/docs/diagnostics.md +161 -0
- package/docs/doc_guidelines.md +53 -0
- package/docs/explanations/README.md +21 -0
- package/docs/explanations/architecture-overview.md +109 -0
- package/docs/explanations/cross-language-binding-strategy.md +68 -0
- package/docs/explanations/graph-store-design.md +47 -0
- package/docs/explanations/performance-benchmarks.md +63 -0
- package/docs/explanations/policy-evaluation-logic.md +106 -0
- package/docs/explanations/semantic-modeling-concepts.md +109 -0
- package/docs/explanations/three-valued-logic.md +66 -0
- package/docs/explanations/versioning-strategy.md +45 -0
- package/docs/governance.md +168 -0
- package/docs/how-tos/README.md +46 -0
- package/docs/how-tos/ci-cd-validation.md +93 -0
- package/docs/how-tos/create-custom-units.md +125 -0
- package/docs/how-tos/define-policies.md +119 -0
- package/docs/how-tos/export-to-calm.md +110 -0
- package/docs/how-tos/export-to-protobuf.md +312 -0
- package/docs/how-tos/extend-grammar.md +133 -0
- package/docs/how-tos/generate-rdf-turtle.md +106 -0
- package/docs/how-tos/import-from-calm.md +114 -0
- package/docs/how-tos/import-from-sbvr.md +249 -0
- package/docs/how-tos/install-cli.md +126 -0
- package/docs/how-tos/parse-sea-files.md +132 -0
- package/docs/how-tos/policy-evaluation-modes.md +30 -0
- package/docs/how-tos/run-cross-language-tests.md +115 -0
- package/docs/how-tos/troubleshoot-napi-builds.md +55 -0
- package/docs/how-tos/use-modules-imports.md +285 -0
- package/docs/index.md +13 -0
- package/docs/plans/canonical-normalizer.md +121 -0
- package/docs/plans/cd_improvement.md +112 -0
- package/docs/plans/cli-ast.md +29 -0
- package/docs/plans/expression-bindings-and-normalizer-integration.md +174 -0
- package/docs/plans/protobuf_advanced_features_plan.md +597 -0
- package/docs/plans/protobuf_plan.yml +525 -0
- package/docs/plans/refactor_dsl_architecture.md +131 -0
- package/docs/plans/release-plan.md +163 -0
- package/docs/plans/sea_fmt_implementation_plan.md +516 -0
- package/docs/playbooks/README.md +18 -0
- package/docs/playbooks/adding-new-primitive.md +68 -0
- package/docs/playbooks/debugging-parser-failures.md +42 -0
- package/docs/playbooks/local-release-preparation.md +139 -0
- package/docs/playbooks/migrating-schema-versions.md +43 -0
- package/docs/playbooks/onboarding-contributors.md +64 -0
- package/docs/playbooks/releasing-beta.md +86 -0
- package/docs/playbooks/secret-management.md +64 -0
- package/docs/reference/README.md +199 -0
- package/docs/reference/ast-json-api.md +427 -0
- package/docs/reference/calm-mapping.md +519 -0
- package/docs/reference/cli-commands.md +588 -0
- package/docs/reference/configuration.md +202 -0
- package/docs/reference/error-codes.md +664 -0
- package/docs/reference/generated-artifacts-policy.md +53 -0
- package/docs/reference/grammar-spec.md +255 -0
- package/docs/reference/primitives-api.md +317 -0
- package/docs/reference/protobuf-api.md +426 -0
- package/docs/reference/python-api.md +485 -0
- package/docs/reference/registry.md +50 -0
- package/docs/reference/sea-dsl-ai-cheatsheet.yaml +913 -0
- package/docs/reference/security-model.md +74 -0
- package/docs/reference/typescript-api.md +508 -0
- package/docs/reference/wasm-api.md +420 -0
- package/docs/semantic-pack-review.md +144 -0
- package/docs/semantic-pack-signing.md +234 -0
- package/docs/semantic-packs.md +284 -0
- package/docs/specs/ADR-001-sea-dsl-semantic-source-of-truth.md +33 -0
- package/docs/specs/ADR-002-projection-first-class-construct.md +50 -0
- package/docs/specs/ADR-003-protobuf-projection-target.md +51 -0
- package/docs/specs/ADR-004-projection-compatibility-semantics.md +57 -0
- package/docs/specs/ADR-005-multi-language-support-strategy.md +112 -0
- package/docs/specs/ADR-006-error-handling-strategy.md +115 -0
- package/docs/specs/ADR-007-policy-evaluation-engine.md +95 -0
- package/docs/specs/ADR-008-knowledge-graph-integration.md +90 -0
- package/docs/specs/ADR-009-module-resolution-strategy.md +115 -0
- package/docs/specs/ADR-010-unit-system.md +106 -0
- package/docs/specs/PRD-001-sea-projection-framework.md +155 -0
- package/docs/specs/PRD-002-sea-cli-tooling.md +169 -0
- package/docs/specs/PRD-003-dsl-core-capabilities.md +275 -0
- package/docs/specs/README.md +62 -0
- package/docs/specs/SDS-001-protobuf-projection-engine.md +451 -0
- package/docs/specs/SDS-002-sea-core-architecture.md +268 -0
- package/docs/specs/SDS-003-parser-semantic-graph.md +377 -0
- package/docs/specs/SDS-004-policy-engine-design.md +362 -0
- package/docs/specs/SDS-005-knowledge-graph-module.md +364 -0
- package/docs/specs/SDS-006-calm-integration.md +367 -0
- package/docs/specs/SDS-007-sbvr-import.md +347 -0
- package/docs/templates/template_explanation.md +14 -0
- package/docs/templates/template_howto.md +21 -0
- package/docs/templates/template_playbook.md +21 -0
- package/docs/templates/template_reference.md +17 -0
- package/docs/templates/template_tutorial.md +24 -0
- package/docs/tutorials/README.md +12 -0
- package/docs/tutorials/first-sea-model.md +85 -0
- package/docs/tutorials/getting-started.md +98 -0
- package/docs/tutorials/python-binding-quickstart.md +107 -0
- package/docs/tutorials/typescript-binding-quickstart.md +91 -0
- package/docs/tutorials/wasm-in-browser.md +75 -0
- package/domainforge-core/CHANGELOG.md +138 -0
- package/domainforge-core/Cargo.toml +101 -0
- package/domainforge-core/MIGRATING.md +32 -0
- package/domainforge-core/README.md +197 -0
- package/domainforge-core/benchmark_results.txt +51 -0
- package/domainforge-core/build.rs +6 -0
- package/domainforge-core/deny.toml +31 -0
- package/domainforge-core/docs/specs/projections/sbvr_kg_mapping.md +43 -0
- package/domainforge-core/examples/basic.sea +7 -0
- package/domainforge-core/examples/cli/import_export_workflow.sh +38 -0
- package/domainforge-core/examples/cli/validate_example.sh +30 -0
- package/domainforge-core/examples/evolution_semantics.sea +31 -0
- package/domainforge-core/examples/parser_demo.rs +203 -0
- package/domainforge-core/grammar/sea.pest +408 -0
- package/domainforge-core/schemas/calm-v1.schema.json +170 -0
- package/domainforge-core/schemas/shacl/sea_shapes.ttl +19 -0
- package/domainforge-core/src/authority/compiler.rs +309 -0
- package/domainforge-core/src/authority/environment.rs +203 -0
- package/domainforge-core/src/authority/error.rs +164 -0
- package/domainforge-core/src/authority/fact_resolver.rs +224 -0
- package/domainforge-core/src/authority/mod.rs +25 -0
- package/domainforge-core/src/authority/pack.rs +133 -0
- package/domainforge-core/src/authority/policy.rs +224 -0
- package/domainforge-core/src/authority/resolver.rs +446 -0
- package/domainforge-core/src/authority/trace.rs +217 -0
- package/domainforge-core/src/authority/transform.rs +168 -0
- package/domainforge-core/src/authority/types.rs +617 -0
- package/domainforge-core/src/bin/domainforge.rs +25 -0
- package/domainforge-core/src/calm/export.rs +538 -0
- package/domainforge-core/src/calm/import.rs +1220 -0
- package/domainforge-core/src/calm/mod.rs +9 -0
- package/domainforge-core/src/calm/models.rs +108 -0
- package/domainforge-core/src/calm/sbvr_import.rs +9 -0
- package/domainforge-core/src/cli/authority.rs +149 -0
- package/domainforge-core/src/cli/format.rs +85 -0
- package/domainforge-core/src/cli/import.rs +133 -0
- package/domainforge-core/src/cli/mod.rs +64 -0
- package/domainforge-core/src/cli/normalize.rs +180 -0
- package/domainforge-core/src/cli/pack.rs +904 -0
- package/domainforge-core/src/cli/parse.rs +112 -0
- package/domainforge-core/src/cli/project.rs +294 -0
- package/domainforge-core/src/cli/registry.rs +41 -0
- package/domainforge-core/src/cli/test.rs +12 -0
- package/domainforge-core/src/cli/validate.rs +195 -0
- package/domainforge-core/src/cli/validate_kg.rs +80 -0
- package/domainforge-core/src/concept_id.rs +89 -0
- package/domainforge-core/src/error/diagnostics.rs +426 -0
- package/domainforge-core/src/error/fuzzy.rs +253 -0
- package/domainforge-core/src/error/mod.rs +13 -0
- package/domainforge-core/src/formatter/comments.rs +223 -0
- package/domainforge-core/src/formatter/config.rs +114 -0
- package/domainforge-core/src/formatter/mod.rs +22 -0
- package/domainforge-core/src/formatter/printer.rs +906 -0
- package/domainforge-core/src/graph/mod.rs +858 -0
- package/domainforge-core/src/graph/to_ast.rs +66 -0
- package/domainforge-core/src/kg.rs +1476 -0
- package/domainforge-core/src/kg_import.rs +251 -0
- package/domainforge-core/src/lib.rs +203 -0
- package/domainforge-core/src/module/mod.rs +1 -0
- package/domainforge-core/src/module/resolver.rs +260 -0
- package/domainforge-core/src/parser/ast.rs +2919 -0
- package/domainforge-core/src/parser/ast_convert.rs +494 -0
- package/domainforge-core/src/parser/ast_schema.rs +491 -0
- package/domainforge-core/src/parser/error.rs +291 -0
- package/domainforge-core/src/parser/lint.rs +39 -0
- package/domainforge-core/src/parser/mod.rs +193 -0
- package/domainforge-core/src/parser/printer.rs +702 -0
- package/domainforge-core/src/parser/profiles.rs +71 -0
- package/domainforge-core/src/parser/string_utils.rs +138 -0
- package/domainforge-core/src/patterns.rs +68 -0
- package/domainforge-core/src/policy/core.rs +1148 -0
- package/domainforge-core/src/policy/expression.rs +399 -0
- package/domainforge-core/src/policy/mod.rs +18 -0
- package/domainforge-core/src/policy/normalize.rs +1028 -0
- package/domainforge-core/src/policy/quantifier.rs +940 -0
- package/domainforge-core/src/policy/three_valued.rs +140 -0
- package/domainforge-core/src/policy/three_valued_microbench.rs +104 -0
- package/domainforge-core/src/policy/type_inference.rs +67 -0
- package/domainforge-core/src/policy/violation.rs +36 -0
- package/domainforge-core/src/primitives/concept_change.rs +61 -0
- package/domainforge-core/src/primitives/entity.rs +224 -0
- package/domainforge-core/src/primitives/flow.rs +111 -0
- package/domainforge-core/src/primitives/instance.rs +93 -0
- package/domainforge-core/src/primitives/mapping_contract.rs +50 -0
- package/domainforge-core/src/primitives/metric.rs +79 -0
- package/domainforge-core/src/primitives/mod.rs +25 -0
- package/domainforge-core/src/primitives/projection_contract.rs +50 -0
- package/domainforge-core/src/primitives/quantity.rs +56 -0
- package/domainforge-core/src/primitives/relation.rs +68 -0
- package/domainforge-core/src/primitives/resource.rs +237 -0
- package/domainforge-core/src/primitives/resource_instance.rs +88 -0
- package/domainforge-core/src/primitives/role.rs +49 -0
- package/domainforge-core/src/projection/buf.rs +404 -0
- package/domainforge-core/src/projection/contracts.rs +22 -0
- package/domainforge-core/src/projection/engine.rs +19 -0
- package/domainforge-core/src/projection/mod.rs +16 -0
- package/domainforge-core/src/projection/protobuf.rs +3331 -0
- package/domainforge-core/src/projection/registry.rs +43 -0
- package/domainforge-core/src/python/authority.rs +253 -0
- package/domainforge-core/src/python/error.rs +227 -0
- package/domainforge-core/src/python/formatter.rs +86 -0
- package/domainforge-core/src/python/graph.rs +366 -0
- package/domainforge-core/src/python/mod.rs +9 -0
- package/domainforge-core/src/python/policy.rs +651 -0
- package/domainforge-core/src/python/primitives.rs +796 -0
- package/domainforge-core/src/python/registry.rs +98 -0
- package/domainforge-core/src/python/semantic_pack.rs +619 -0
- package/domainforge-core/src/python/units.rs +96 -0
- package/domainforge-core/src/registry/mod.rs +432 -0
- package/domainforge-core/src/registry/tests.rs +210 -0
- package/domainforge-core/src/sbvr.rs +744 -0
- package/domainforge-core/src/semantic_pack/builder.rs +470 -0
- package/domainforge-core/src/semantic_pack/canonical_json.rs +184 -0
- package/domainforge-core/src/semantic_pack/diagnostics.rs +214 -0
- package/domainforge-core/src/semantic_pack/diff.rs +216 -0
- package/domainforge-core/src/semantic_pack/mod.rs +31 -0
- package/domainforge-core/src/semantic_pack/pack_set.rs +240 -0
- package/domainforge-core/src/semantic_pack/resolver.rs +437 -0
- package/domainforge-core/src/semantic_pack/review.rs +125 -0
- package/domainforge-core/src/semantic_pack/schema.rs +342 -0
- package/domainforge-core/src/semantic_pack/signing.rs +105 -0
- package/domainforge-core/src/semantic_pack/validator.rs +368 -0
- package/domainforge-core/src/semantic_version.rs +140 -0
- package/domainforge-core/src/test_utils.rs +12 -0
- package/domainforge-core/src/typescript/authority.rs +184 -0
- package/domainforge-core/src/typescript/error.rs +146 -0
- package/domainforge-core/src/typescript/formatter.rs +76 -0
- package/domainforge-core/src/typescript/graph.rs +391 -0
- package/domainforge-core/src/typescript/mod.rs +9 -0
- package/domainforge-core/src/typescript/policy.rs +564 -0
- package/domainforge-core/src/typescript/primitives.rs +784 -0
- package/domainforge-core/src/typescript/registry.rs +88 -0
- package/domainforge-core/src/typescript/semantic_pack.rs +470 -0
- package/domainforge-core/src/typescript/units.rs +76 -0
- package/domainforge-core/src/units/mod.rs +462 -0
- package/domainforge-core/src/uuid_module.rs +42 -0
- package/domainforge-core/src/validation_error.rs +818 -0
- package/domainforge-core/src/validation_result.rs +30 -0
- package/domainforge-core/src/wasm/authority.rs +192 -0
- package/domainforge-core/src/wasm/error.rs +145 -0
- package/domainforge-core/src/wasm/formatter.rs +69 -0
- package/domainforge-core/src/wasm/graph.rs +471 -0
- package/domainforge-core/src/wasm/mod.rs +16 -0
- package/domainforge-core/src/wasm/policy.rs +607 -0
- package/domainforge-core/src/wasm/primitives.rs +295 -0
- package/domainforge-core/src/wasm/semantic_pack.rs +471 -0
- package/domainforge-core/src/wasm/units.rs +62 -0
- package/domainforge-core/std/aws.sea +6 -0
- package/domainforge-core/std/core.sea +6 -0
- package/domainforge-core/std/http.sea +27 -0
- package/domainforge-core/tests/aggregation_enhanced_tests.rs +162 -0
- package/domainforge-core/tests/aggregation_eval_tests.rs +248 -0
- package/domainforge-core/tests/aggregation_integration_tests.rs +379 -0
- package/domainforge-core/tests/aggregation_parser_tests.rs +92 -0
- package/domainforge-core/tests/aggregation_tests.rs +102 -0
- package/domainforge-core/tests/authority_conformance_tests.rs +1173 -0
- package/domainforge-core/tests/calm_round_trip_tests.rs +283 -0
- package/domainforge-core/tests/calm_schema_validation_tests.rs +137 -0
- package/domainforge-core/tests/cast_operator_tests.rs +85 -0
- package/domainforge-core/tests/cli_binary_check.rs +37 -0
- package/domainforge-core/tests/cli_import_tests.rs +291 -0
- package/domainforge-core/tests/cli_path_traversal_tests.rs +124 -0
- package/domainforge-core/tests/cli_tests.rs +63 -0
- package/domainforge-core/tests/diagnostics_tests.rs +203 -0
- package/domainforge-core/tests/dimension_unit_tests.rs +80 -0
- package/domainforge-core/tests/entity_tests.rs +69 -0
- package/domainforge-core/tests/evolution_semantics_tests.rs +157 -0
- package/domainforge-core/tests/flow_tests.rs +78 -0
- package/domainforge-core/tests/flow_unit_validation_tests.rs +31 -0
- package/domainforge-core/tests/graph_integration_tests.rs +218 -0
- package/domainforge-core/tests/graph_tests.rs +626 -0
- package/domainforge-core/tests/import_parsing_tests.rs +23 -0
- package/domainforge-core/tests/instance_integration_tests.rs +98 -0
- package/domainforge-core/tests/instance_parsing_tests.rs +58 -0
- package/domainforge-core/tests/instance_tests.rs +61 -0
- package/domainforge-core/tests/kg_uri_encoding_tests.rs +53 -0
- package/domainforge-core/tests/lint_tests.rs +19 -0
- package/domainforge-core/tests/metric_tests.rs +143 -0
- package/domainforge-core/tests/module_resolution_tests.rs +100 -0
- package/domainforge-core/tests/namespace_registry_tests.rs +247 -0
- package/domainforge-core/tests/null_handling_tests.rs +26 -0
- package/domainforge-core/tests/parser_ast_v3.rs +53 -0
- package/domainforge-core/tests/parser_dimension_registry_tests.rs +20 -0
- package/domainforge-core/tests/parser_integration_tests.rs +294 -0
- package/domainforge-core/tests/parser_metadata_tests.rs +97 -0
- package/domainforge-core/tests/parser_resource_domain_only_graph_test.rs +21 -0
- package/domainforge-core/tests/parser_resource_limits_tests.rs +122 -0
- package/domainforge-core/tests/parser_tests.rs +512 -0
- package/domainforge-core/tests/pattern_semantics_tests.rs +87 -0
- package/domainforge-core/tests/phase_14_determinism_tests.rs +166 -0
- package/domainforge-core/tests/phase_15_validation_error_tests.rs +136 -0
- package/domainforge-core/tests/phase_16_unicode_tests.rs +248 -0
- package/domainforge-core/tests/phase_17_export_tests.rs +285 -0
- package/domainforge-core/tests/phase_17_round_trip_tests.rs +264 -0
- package/domainforge-core/tests/policy_tests.rs +635 -0
- package/domainforge-core/tests/primitives_integration_tests.rs +151 -0
- package/domainforge-core/tests/print_rdf_xml.rs +14 -0
- package/domainforge-core/tests/printer_tests.rs +204 -0
- package/domainforge-core/tests/profile_tests.rs +35 -0
- package/domainforge-core/tests/projection_contracts_tests.rs +154 -0
- package/domainforge-core/tests/protobuf_projection_tests.rs +199 -0
- package/domainforge-core/tests/quantity_tests.rs +41 -0
- package/domainforge-core/tests/rdf_xml_typed_literal_tests.rs +105 -0
- package/domainforge-core/tests/registry_schema_tests.rs +33 -0
- package/domainforge-core/tests/resource_tests.rs +50 -0
- package/domainforge-core/tests/resource_unit_tests.rs +24 -0
- package/domainforge-core/tests/roles_relations_tests.rs +61 -0
- package/domainforge-core/tests/round_trip_tests.rs +34 -0
- package/domainforge-core/tests/runtime_toggle_tests.rs +70 -0
- package/domainforge-core/tests/sbvr_fact_schema_tests.rs +60 -0
- package/domainforge-core/tests/sbvr_flow_facts_tests.rs +55 -0
- package/domainforge-core/tests/sbvr_parsing_tests.rs +53 -0
- package/domainforge-core/tests/semantic_pack_alias_resolution.rs +197 -0
- package/domainforge-core/tests/semantic_pack_build.rs +302 -0
- package/domainforge-core/tests/semantic_pack_consumer_smoke.rs +150 -0
- package/domainforge-core/tests/semantic_pack_pack_set.rs +160 -0
- package/domainforge-core/tests/semantic_pack_signing.rs +157 -0
- package/domainforge-core/tests/semantic_pack_three_valued.rs +250 -0
- package/domainforge-core/tests/semantic_pack_validate.rs +196 -0
- package/domainforge-core/tests/std_lib_tests.rs +37 -0
- package/domainforge-core/tests/temporal_evaluation_tests.rs +159 -0
- package/domainforge-core/tests/temporal_semantics_tests.rs +214 -0
- package/domainforge-core/tests/three_valued_quantifiers_tests.rs +164 -0
- package/domainforge-core/tests/turtle_entity_export_tests.rs +38 -0
- package/domainforge-core/tests/turtle_escaping_tests.rs +53 -0
- package/domainforge-core/tests/turtle_resource_export_tests.rs +34 -0
- package/domainforge-core/tests/type_inference_tests.rs +40 -0
- package/domainforge-core/tests/unicode_validation_tests.rs +169 -0
- package/domainforge-core/tests/unit_tests.rs +81 -0
- package/domainforge-core/tests/validate_tests.rs +38 -0
- package/domainforge-core/tests/validation_unit_mismatch_tests.rs +83 -0
- package/domainforge-core/tests/wasm_tests.rs +229 -0
- package/domainforge-python/CHANGELOG-python.md +12 -0
- package/domainforge-python/MIGRATING.md +24 -0
- package/domainforge-python/README.md +256 -0
- package/domainforge-python/domainforge/__init__.py +95 -0
- package/domainforge-python/domainforge/domainforge.pyi +519 -0
- package/domainforge-python/pyproject.toml +36 -0
- package/domainforge-typescript/CHANGELOG-typescript.md +12 -0
- package/domainforge-typescript/LICENSE +201 -0
- package/domainforge-typescript/MIGRATING.md +24 -0
- package/domainforge-typescript/README.md +305 -0
- package/domainforge-typescript/index.d.ts +452 -0
- package/domainforge-typescript/index.js +361 -0
- package/domainforge-typescript/package.json +60 -0
- package/example.js +61 -0
- package/examples/browser.html +366 -0
- package/examples/namespaces/finance/cashflow.sea +5 -0
- package/examples/namespaces/logistics/core.sea +7 -0
- package/examples/observability_metrics.sea +38 -0
- package/fixtures/semantic_packs/acme_procurement/domain/entities.sea +39 -0
- package/fixtures/semantic_packs/acme_procurement/domain/metrics.sea +11 -0
- package/fixtures/semantic_packs/acme_procurement/domain/relations.sea +7 -0
- package/fixtures/semantic_packs/acme_procurement/domain/resources.sea +9 -0
- package/fixtures/semantic_packs/acme_procurement/review/acme.procurement.semantic-review.jsonl +7 -0
- package/fixtures/semantic_packs/acme_procurement/tests/ambiguous_vendor_alias.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/deprecated_vendor_alias.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/invalid_relation.sea +3 -0
- package/fixtures/semantic_packs/acme_procurement/tests/proposed_concept.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/rejected_concept.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/unit_mismatch.sea +7 -0
- package/fixtures/semantic_packs/acme_procurement/tests/unknown_vendor_policy.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/valid_purchase_policy.sea +8 -0
- package/index.d.ts +2 -0
- package/index.js +8 -0
- package/justfile +200 -0
- package/lefthook.yml +13 -0
- package/lib/validate_native_exports.d.ts +4 -0
- package/lib/validate_native_exports.js +12 -0
- package/package.json +22 -0
- package/pytest.ini +5 -0
- package/python/tests/test_registry.py +75 -0
- package/python/tests/test_units.py +18 -0
- package/release-please-config.json +49 -0
- package/requirements-dev.txt +3 -0
- package/requirements.txt +3 -0
- package/rust-toolchain.toml +3 -0
- package/schemas/ast-v1.schema.json +72 -0
- package/schemas/ast-v2.schema.json +1200 -0
- package/schemas/ast-v3.schema.json +1200 -0
- package/schemas/sea-registry.schema.json +45 -0
- package/scripts/build-python.sh +37 -0
- package/scripts/build-release.sh +279 -0
- package/scripts/build-typescript.sh +13 -0
- package/scripts/build-wasm.sh +113 -0
- package/scripts/bump-version.sh +245 -0
- package/scripts/check_unused_test_imports.py +85 -0
- package/scripts/ci_tasks.py +379 -0
- package/scripts/clear_debug_test.sh +10 -0
- package/scripts/create-github-release.sh +262 -0
- package/scripts/create-tag.sh +203 -0
- package/scripts/find_and_link_test_binary.sh +70 -0
- package/scripts/generate-changelog.sh +271 -0
- package/scripts/generate-release-notes.sh +205 -0
- package/scripts/lint_release_security.py +96 -0
- package/scripts/lint_release_workflows.py +82 -0
- package/scripts/lint_workflow_gates.py +113 -0
- package/scripts/optimized-wasm-build.sh +61 -0
- package/scripts/patch_napi_types.py +62 -0
- package/scripts/pre-release-check.sh +289 -0
- package/scripts/prepare_rust_debug.sh +52 -0
- package/scripts/release.sh +373 -0
- package/scripts/resolve_rust_binary.py +230 -0
- package/scripts/run_commitlint.sh +29 -0
- package/scripts/test-all.sh +77 -0
- package/scripts/update_launch_program.py +93 -0
- package/secrets/README.md +27 -0
- package/secrets/secrets.yaml +21 -0
- package/test_integration.py +67 -0
- package/tests/test_authority.py +328 -0
- package/tests/test_ci_tasks.py +143 -0
- package/tests/test_expression.py +256 -0
- package/tests/test_golden_payment_flow.py +42 -0
- package/tests/test_graph.py +127 -0
- package/tests/test_instance.py +136 -0
- package/tests/test_parser.py +82 -0
- package/tests/test_primitives.py +68 -0
- package/tests/test_role_relation_parity.py +56 -0
- package/tests/test_runtime_toggle.py +156 -0
- package/tests/test_semantic_pack.py +639 -0
- package/tests/test_three_valued_eval.py +159 -0
- package/tsconfig.json +30 -0
- package/typescript-tests/advanced.test.ts +165 -0
- package/typescript-tests/authority.test.ts +216 -0
- package/typescript-tests/expression.test.ts +228 -0
- package/typescript-tests/golden-payment-flow.test.ts +51 -0
- package/typescript-tests/graph.test.ts +142 -0
- package/typescript-tests/native-binding.test.ts +20 -0
- package/typescript-tests/primitives.test.ts +88 -0
- package/typescript-tests/registry.test.ts +122 -0
- package/typescript-tests/role_relation.test.ts +63 -0
- package/typescript-tests/runtime_toggle.test.ts +141 -0
- package/typescript-tests/semantic-pack.test.ts +556 -0
- package/typescript-tests/three_valued_eval.test.ts +135 -0
- package/typescript-tests/units.test.ts +36 -0
- package/vitest.config.ts +13 -0
- package/wasm_demo.html +225 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# Protobuf Projection API Reference
|
|
2
|
+
|
|
3
|
+
This reference documents the public API for the Protobuf projection engine in `domainforge-core`.
|
|
4
|
+
|
|
5
|
+
## Module Location
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
domainforge-core/src/projection/protobuf.rs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Core Types
|
|
12
|
+
|
|
13
|
+
### ProtoFile
|
|
14
|
+
|
|
15
|
+
Represents a complete `.proto` file.
|
|
16
|
+
|
|
17
|
+
```rust
|
|
18
|
+
pub struct ProtoFile {
|
|
19
|
+
pub package: String, // Package name (e.g., "sea.example")
|
|
20
|
+
pub syntax: String, // Always "proto3"
|
|
21
|
+
pub imports: Vec<String>, // Import statements
|
|
22
|
+
pub options: ProtoOptions, // File-level options
|
|
23
|
+
pub enums: Vec<ProtoEnum>, // Enum definitions
|
|
24
|
+
pub messages: Vec<ProtoMessage>, // Message definitions
|
|
25
|
+
pub services: Vec<ProtoService>, // gRPC service definitions
|
|
26
|
+
pub metadata: ProtoMetadata, // Projection metadata
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Methods:**
|
|
31
|
+
|
|
32
|
+
| Method | Description |
|
|
33
|
+
| ----------------------------- | --------------------------------------------- |
|
|
34
|
+
| `new(package: &str) -> Self` | Create a new ProtoFile with the given package |
|
|
35
|
+
| `to_proto_string() -> String` | Serialize to `.proto` text format |
|
|
36
|
+
| `add_wkt_imports(&mut self)` | Auto-add Well-Known Type imports |
|
|
37
|
+
|
|
38
|
+
### ProtoMessage
|
|
39
|
+
|
|
40
|
+
Represents a Protobuf message definition.
|
|
41
|
+
|
|
42
|
+
```rust
|
|
43
|
+
pub struct ProtoMessage {
|
|
44
|
+
pub name: String, // Message name (PascalCase)
|
|
45
|
+
pub fields: Vec<ProtoField>, // Field definitions
|
|
46
|
+
pub nested_messages: Vec<ProtoMessage>, // Nested messages
|
|
47
|
+
pub nested_enums: Vec<ProtoEnum>, // Nested enums
|
|
48
|
+
pub reserved_numbers: Vec<u32>, // Reserved field numbers
|
|
49
|
+
pub reserved_names: Vec<String>, // Reserved field names
|
|
50
|
+
pub comments: Vec<String>, // Documentation comments
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Methods:**
|
|
55
|
+
|
|
56
|
+
| Method | Description |
|
|
57
|
+
| ----------------------------- | --------------------------------- |
|
|
58
|
+
| `new(name: &str) -> Self` | Create a new empty message |
|
|
59
|
+
| `to_proto_string() -> String` | Serialize to `.proto` text format |
|
|
60
|
+
|
|
61
|
+
### ProtoField
|
|
62
|
+
|
|
63
|
+
Represents a Protobuf field definition.
|
|
64
|
+
|
|
65
|
+
```rust
|
|
66
|
+
pub struct ProtoField {
|
|
67
|
+
pub name: String, // Field name (snake_case)
|
|
68
|
+
pub number: u32, // Field number (unique within message)
|
|
69
|
+
pub proto_type: ProtoType, // Field type
|
|
70
|
+
pub repeated: bool, // Whether this is a repeated field
|
|
71
|
+
pub optional: bool, // Whether this is optional (proto3)
|
|
72
|
+
pub comments: Vec<String>, // Documentation comments
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### ProtoType
|
|
77
|
+
|
|
78
|
+
Represents a Protobuf type reference.
|
|
79
|
+
|
|
80
|
+
```rust
|
|
81
|
+
pub enum ProtoType {
|
|
82
|
+
Scalar(ScalarType), // Scalar types (int32, string, etc.)
|
|
83
|
+
Message(String), // Reference to another message
|
|
84
|
+
Enum(String), // Reference to an enum
|
|
85
|
+
Map { key: Box<ProtoType>, value: Box<ProtoType> }, // Map type
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### ScalarType
|
|
90
|
+
|
|
91
|
+
Protobuf scalar types.
|
|
92
|
+
|
|
93
|
+
```rust
|
|
94
|
+
pub enum ScalarType {
|
|
95
|
+
Double, Float,
|
|
96
|
+
Int32, Int64, Uint32, Uint64,
|
|
97
|
+
Sint32, Sint64,
|
|
98
|
+
Fixed32, Fixed64, Sfixed32, Sfixed64,
|
|
99
|
+
Bool, String, Bytes,
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### ProtoEnum
|
|
104
|
+
|
|
105
|
+
Represents a Protobuf enum definition.
|
|
106
|
+
|
|
107
|
+
```rust
|
|
108
|
+
pub struct ProtoEnum {
|
|
109
|
+
pub name: String, // Enum name (PascalCase)
|
|
110
|
+
pub values: Vec<ProtoEnumValue>, // Enum values
|
|
111
|
+
pub comments: Vec<String>, // Documentation comments
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Methods:**
|
|
116
|
+
|
|
117
|
+
| Method | Description |
|
|
118
|
+
| ----------------------------- | ------------------------------------------ |
|
|
119
|
+
| `new(name: &str) -> Self` | Create enum with default UNSPECIFIED value |
|
|
120
|
+
| `add_value(name: &str)` | Add a new enum value |
|
|
121
|
+
| `to_proto_string() -> String` | Serialize to `.proto` text format |
|
|
122
|
+
|
|
123
|
+
### ProtoService
|
|
124
|
+
|
|
125
|
+
Represents a gRPC service definition.
|
|
126
|
+
|
|
127
|
+
```rust
|
|
128
|
+
pub struct ProtoService {
|
|
129
|
+
pub name: String, // Service name (e.g., "PaymentService")
|
|
130
|
+
pub methods: Vec<ProtoRpcMethod>, // RPC methods
|
|
131
|
+
pub comments: Vec<String>, // Documentation comments
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### ProtoRpcMethod
|
|
136
|
+
|
|
137
|
+
Represents an RPC method in a gRPC service.
|
|
138
|
+
|
|
139
|
+
```rust
|
|
140
|
+
pub struct ProtoRpcMethod {
|
|
141
|
+
pub name: String, // Method name
|
|
142
|
+
pub request_type: String, // Request message type
|
|
143
|
+
pub response_type: String, // Response message type
|
|
144
|
+
pub streaming: StreamingMode, // Streaming mode
|
|
145
|
+
pub comments: Vec<String>, // Documentation comments
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### StreamingMode
|
|
150
|
+
|
|
151
|
+
gRPC streaming mode for RPC methods.
|
|
152
|
+
|
|
153
|
+
```rust
|
|
154
|
+
pub enum StreamingMode {
|
|
155
|
+
Unary, // Single request, single response (default)
|
|
156
|
+
ServerStreaming, // Single request, stream of responses
|
|
157
|
+
ClientStreaming, // Stream of requests, single response
|
|
158
|
+
Bidirectional, // Stream of requests, stream of responses
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Methods:**
|
|
163
|
+
|
|
164
|
+
| Method | Description |
|
|
165
|
+
| ------------------------ | ------------------------------------------------------ |
|
|
166
|
+
| `parse(s: &str) -> Self` | Parse from string (e.g., "streaming", "bidirectional") |
|
|
167
|
+
|
|
168
|
+
### ProtoOptions
|
|
169
|
+
|
|
170
|
+
File-level Protobuf options.
|
|
171
|
+
|
|
172
|
+
```rust
|
|
173
|
+
pub struct ProtoOptions {
|
|
174
|
+
pub java_package: Option<String>,
|
|
175
|
+
pub java_multiple_files: bool,
|
|
176
|
+
pub go_package: Option<String>,
|
|
177
|
+
pub csharp_namespace: Option<String>,
|
|
178
|
+
pub php_namespace: Option<String>,
|
|
179
|
+
pub ruby_package: Option<String>,
|
|
180
|
+
pub swift_prefix: Option<String>,
|
|
181
|
+
pub objc_class_prefix: Option<String>,
|
|
182
|
+
pub optimize_for: Option<String>, // SPEED, CODE_SIZE, LITE_RUNTIME
|
|
183
|
+
pub deprecated: bool,
|
|
184
|
+
pub custom_options: Vec<ProtoCustomOption>,
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### WellKnownType
|
|
189
|
+
|
|
190
|
+
Google's Protobuf Well-Known Types.
|
|
191
|
+
|
|
192
|
+
```rust
|
|
193
|
+
pub enum WellKnownType {
|
|
194
|
+
Timestamp, Duration, Any, Struct, Value, ListValue,
|
|
195
|
+
Int32Value, Int64Value, UInt32Value, UInt64Value,
|
|
196
|
+
FloatValue, DoubleValue, BoolValue, StringValue, BytesValue,
|
|
197
|
+
FieldMask, Empty,
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Methods:**
|
|
202
|
+
|
|
203
|
+
| Method | Description |
|
|
204
|
+
| -------------------------------------------- | --------------------------------- |
|
|
205
|
+
| `import_path() -> &'static str` | Get the import path for this WKT |
|
|
206
|
+
| `full_name() -> &'static str` | Get the fully qualified type name |
|
|
207
|
+
| `from_type_name(name: &str) -> Option<Self>` | Parse from type name |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## ProtobufEngine
|
|
212
|
+
|
|
213
|
+
The main projection engine for converting SEA graphs to Protobuf.
|
|
214
|
+
|
|
215
|
+
### Basic Projection
|
|
216
|
+
|
|
217
|
+
```rust
|
|
218
|
+
impl ProtobufEngine {
|
|
219
|
+
/// Project a SEA graph to a single ProtoFile.
|
|
220
|
+
pub fn project(
|
|
221
|
+
graph: &Graph,
|
|
222
|
+
namespace_filter: &str,
|
|
223
|
+
package: &str,
|
|
224
|
+
) -> ProtoFile;
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Example:**
|
|
229
|
+
|
|
230
|
+
```rust
|
|
231
|
+
use domainforge_core::projection::protobuf::ProtobufEngine;
|
|
232
|
+
|
|
233
|
+
let proto = ProtobufEngine::project(&graph, "payments", "com.example.payments");
|
|
234
|
+
println!("{}", proto.to_proto_string());
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Multi-File Projection
|
|
238
|
+
|
|
239
|
+
```rust
|
|
240
|
+
impl ProtobufEngine {
|
|
241
|
+
/// Project to multiple files, one per namespace.
|
|
242
|
+
pub fn project_multi_file(
|
|
243
|
+
graph: &Graph,
|
|
244
|
+
base_package: &str,
|
|
245
|
+
) -> BTreeMap<String, ProtoFile>;
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Example:**
|
|
250
|
+
|
|
251
|
+
```rust
|
|
252
|
+
let files = ProtobufEngine::project_multi_file(&graph, "com.example");
|
|
253
|
+
for (namespace, proto) in files {
|
|
254
|
+
let path = format!("{}/{}.proto", namespace, namespace);
|
|
255
|
+
std::fs::write(&path, proto.to_proto_string())?;
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Service Generation
|
|
260
|
+
|
|
261
|
+
```rust
|
|
262
|
+
impl ProtobufEngine {
|
|
263
|
+
/// Generate gRPC services from Flow patterns.
|
|
264
|
+
pub fn flows_to_services(graph: &Graph) -> Vec<ProtoService>;
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Type Mapping
|
|
271
|
+
|
|
272
|
+
### map_sea_type_to_proto
|
|
273
|
+
|
|
274
|
+
Maps SEA types to Protobuf types.
|
|
275
|
+
|
|
276
|
+
```rust
|
|
277
|
+
pub fn map_sea_type_to_proto(sea_type: &str) -> ProtoType;
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
| SEA Type | Protobuf Type |
|
|
281
|
+
| ------------------------------- | --------------------------- |
|
|
282
|
+
| `String` | `string` |
|
|
283
|
+
| `Int` | `int64` |
|
|
284
|
+
| `Float` | `double` |
|
|
285
|
+
| `Bool` | `bool` |
|
|
286
|
+
| `Date`, `DateTime`, `Timestamp` | `google.protobuf.Timestamp` |
|
|
287
|
+
| `Duration` | `google.protobuf.Duration` |
|
|
288
|
+
| `UUID` | `string` |
|
|
289
|
+
| `Bytes`, `Binary` | `bytes` |
|
|
290
|
+
| `Any`, `Dynamic` | `google.protobuf.Any` |
|
|
291
|
+
| Entity name | Message reference |
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Compatibility Checking
|
|
296
|
+
|
|
297
|
+
### CompatibilityChecker
|
|
298
|
+
|
|
299
|
+
Validates schema changes against compatibility rules.
|
|
300
|
+
|
|
301
|
+
```rust
|
|
302
|
+
pub struct CompatibilityChecker;
|
|
303
|
+
|
|
304
|
+
impl CompatibilityChecker {
|
|
305
|
+
/// Check compatibility between old and new schemas.
|
|
306
|
+
pub fn check(
|
|
307
|
+
old: &ProtoFile,
|
|
308
|
+
new: &ProtoFile,
|
|
309
|
+
mode: CompatibilityMode,
|
|
310
|
+
) -> CompatibilityResult;
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### CompatibilityMode
|
|
315
|
+
|
|
316
|
+
```rust
|
|
317
|
+
pub enum CompatibilityMode {
|
|
318
|
+
Additive, // Only additions allowed
|
|
319
|
+
Backward, // Additions + safe removals (with reserved)
|
|
320
|
+
Breaking, // Any changes allowed
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### CompatibilityResult
|
|
325
|
+
|
|
326
|
+
```rust
|
|
327
|
+
pub struct CompatibilityResult {
|
|
328
|
+
pub is_compatible: bool,
|
|
329
|
+
pub violations: Vec<CompatibilityViolation>,
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Compatibility Rules
|
|
334
|
+
|
|
335
|
+
| Change Type | Additive | Backward | Breaking |
|
|
336
|
+
| ------------------- | -------- | ------------- | -------- |
|
|
337
|
+
| Add field | ✅ | ✅ | ✅ |
|
|
338
|
+
| Remove field | ❌ | ✅ (reserved) | ✅ |
|
|
339
|
+
| Rename field | ❌ | ❌ | ✅ |
|
|
340
|
+
| Change field type | ❌ | ❌ | ✅ |
|
|
341
|
+
| Change field number | ❌ | ❌ | ✅ |
|
|
342
|
+
| Add enum value | ✅ | ✅ | ✅ |
|
|
343
|
+
| Remove enum value | ❌ | ✅ (reserved) | ✅ |
|
|
344
|
+
| Add message | ✅ | ✅ | ✅ |
|
|
345
|
+
| Remove message | ❌ | ❌ | ✅ |
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Buf.build Integration
|
|
350
|
+
|
|
351
|
+
### BufIntegration
|
|
352
|
+
|
|
353
|
+
Optional integration with the buf.build CLI.
|
|
354
|
+
|
|
355
|
+
```rust
|
|
356
|
+
pub struct BufIntegration;
|
|
357
|
+
|
|
358
|
+
impl BufIntegration {
|
|
359
|
+
/// Check if buf CLI is available.
|
|
360
|
+
pub fn is_available(&self) -> bool;
|
|
361
|
+
|
|
362
|
+
/// Get buf CLI version.
|
|
363
|
+
pub fn get_version(&self) -> BufResult<String>;
|
|
364
|
+
|
|
365
|
+
/// Lint proto files.
|
|
366
|
+
pub fn lint(&self, proto_dir: &Path) -> BufResult<BufLintResult>;
|
|
367
|
+
|
|
368
|
+
/// Check for breaking changes.
|
|
369
|
+
pub fn breaking_check(
|
|
370
|
+
&self,
|
|
371
|
+
new_dir: &Path,
|
|
372
|
+
old_dir: &Path,
|
|
373
|
+
) -> BufResult<BufBreakingResult>;
|
|
374
|
+
|
|
375
|
+
/// Generate buf.yaml configuration.
|
|
376
|
+
pub fn generate_buf_yaml() -> String;
|
|
377
|
+
|
|
378
|
+
/// Generate buf.gen.yaml for code generation.
|
|
379
|
+
pub fn generate_buf_gen_yaml(languages: &[BufLanguage]) -> String;
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### BufLanguage
|
|
384
|
+
|
|
385
|
+
Supported languages for buf code generation.
|
|
386
|
+
|
|
387
|
+
```rust
|
|
388
|
+
pub enum BufLanguage {
|
|
389
|
+
Go, Rust, Python, TypeScript, Java, CSharp, Cpp, Swift,
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## Error Types
|
|
396
|
+
|
|
397
|
+
### ProjectionError
|
|
398
|
+
|
|
399
|
+
```rust
|
|
400
|
+
pub enum ProjectionError {
|
|
401
|
+
InvalidProjection(String),
|
|
402
|
+
NamespaceNotFound(String),
|
|
403
|
+
CompatibilityViolation(CompatibilityViolation),
|
|
404
|
+
IoError(std::io::Error),
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### BufError
|
|
409
|
+
|
|
410
|
+
```rust
|
|
411
|
+
pub enum BufError {
|
|
412
|
+
NotInstalled,
|
|
413
|
+
CommandFailed { exit_code: i32, stderr: String },
|
|
414
|
+
IoError(String),
|
|
415
|
+
ConfigError(String),
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## See Also
|
|
422
|
+
|
|
423
|
+
- [How-To: Export to Protobuf](../how-tos/export-to-protobuf.md)
|
|
424
|
+
- [SDS-001: Protobuf Projection Engine](../specs/SDS-001-protobuf-projection-engine.md)
|
|
425
|
+
- [ADR-003: Protobuf as Projection Target](../specs/ADR-003-protobuf-projection-target.md)
|
|
426
|
+
- [Protobuf Advanced Features Plan](../plans/protobuf_advanced_features_plan.md)
|