@shortlink-org/portolan 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/LICENSE +21 -0
- package/README.md +387 -0
- package/catalog/enum_test.go +46 -0
- package/catalog/model.go +932 -0
- package/catalog/roundtrip_test.go +185 -0
- package/catalog/via_test.go +38 -0
- package/cli/portolan.mjs +368 -0
- package/go.mod +14 -0
- package/go.sum +14 -0
- package/index.html +13 -0
- package/internal/commands/cargo.go +154 -0
- package/internal/commands/commands.go +143 -0
- package/internal/commands/commands_test.go +323 -0
- package/internal/commands/gradle.go +77 -0
- package/internal/commands/justfile.go +82 -0
- package/internal/commands/makefile.go +106 -0
- package/internal/commands/maven.go +93 -0
- package/internal/commands/packagejson.go +159 -0
- package/internal/commands/pyproject.go +169 -0
- package/internal/commands/taskfile.go +101 -0
- package/internal/commands/testdata/estate/.cargo/config.toml +7 -0
- package/internal/commands/testdata/estate/Makefile +33 -0
- package/internal/commands/testdata/estate/Taskfile.yml +21 -0
- package/internal/commands/testdata/estate/build.gradle.kts +21 -0
- package/internal/commands/testdata/estate/justfile +20 -0
- package/internal/commands/testdata/estate/package.json +13 -0
- package/internal/commands/testdata/estate/pom.xml +29 -0
- package/internal/commands/testdata/estate/pyproject.toml +27 -0
- package/internal/commands/testdata/estate/xtask/src/main.rs +27 -0
- package/internal/commands/testdata/golden/commands.json +305 -0
- package/internal/gohttp/analyze.go +2500 -0
- package/internal/gohttp/endpoints.go +1067 -0
- package/internal/gohttp/roots.go +320 -0
- package/internal/gohttp/typed.go +143 -0
- package/internal/goscan/constants.go +85 -0
- package/internal/goscan/goscan_test.go +227 -0
- package/internal/goscan/names.go +52 -0
- package/internal/goscan/parse_test.go +11 -0
- package/internal/goscan/source.go +36 -0
- package/internal/goscan/tree.go +155 -0
- package/internal/goscan/types.go +99 -0
- package/internal/wsdl/ids.go +127 -0
- package/internal/wsdl/ids_test.go +21 -0
- package/internal/wsdl/model.go +62 -0
- package/internal/wsdl/parse.go +920 -0
- package/internal/wsdl/parse_test.go +133 -0
- package/package.json +117 -0
- package/plugin/describe.go +107 -0
- package/plugin/describe_test.go +114 -0
- package/plugin/protocol.go +117 -0
- package/plugin/schematest/schematest.go +126 -0
- package/plugins/README.md +1160 -0
- package/plugins/extract-adr/describe.go +19 -0
- package/plugins/extract-adr/describe_test.go +11 -0
- package/plugins/extract-adr/extract.go +153 -0
- package/plugins/extract-adr/extract_test.go +350 -0
- package/plugins/extract-adr/history.go +99 -0
- package/plugins/extract-adr/main.go +65 -0
- package/plugins/extract-adr/options.schema.json +26 -0
- package/plugins/extract-adr/parse.go +642 -0
- package/plugins/extract-adr/parse_test.go +405 -0
- package/plugins/extract-asyncapi/describe.go +19 -0
- package/plugins/extract-asyncapi/describe_test.go +11 -0
- package/plugins/extract-asyncapi/extract.go +315 -0
- package/plugins/extract-asyncapi/extract_test.go +197 -0
- package/plugins/extract-asyncapi/main.go +48 -0
- package/plugins/extract-asyncapi/options.schema.json +26 -0
- package/plugins/extract-asyncapi/spec.go +151 -0
- package/plugins/extract-celery/README.md +169 -0
- package/plugins/extract-celery/extract.py +346 -0
- package/plugins/extract-celery/extract_test.py +192 -0
- package/plugins/extract-celery/main.py +66 -0
- package/plugins/extract-celery/options.py +31 -0
- package/plugins/extract-celery/options.schema.json +31 -0
- package/plugins/extract-celery/producers.py +156 -0
- package/plugins/extract-celery/routes_test.py +106 -0
- package/plugins/extract-commands/describe.go +19 -0
- package/plugins/extract-commands/describe_test.go +11 -0
- package/plugins/extract-commands/extract.go +79 -0
- package/plugins/extract-commands/extract_test.go +92 -0
- package/plugins/extract-commands/main.go +55 -0
- package/plugins/extract-commands/options.schema.json +20 -0
- package/plugins/extract-csr/avro.go +258 -0
- package/plugins/extract-csr/describe.go +19 -0
- package/plugins/extract-csr/describe_test.go +11 -0
- package/plugins/extract-csr/extract.go +338 -0
- package/plugins/extract-csr/extract_test.go +374 -0
- package/plugins/extract-csr/jsonschema.go +343 -0
- package/plugins/extract-csr/lock.go +25 -0
- package/plugins/extract-csr/main.go +84 -0
- package/plugins/extract-csr/options.schema.json +43 -0
- package/plugins/extract-csr/subject.go +102 -0
- package/plugins/extract-django/README.md +386 -0
- package/plugins/extract-django/apps.py +100 -0
- package/plugins/extract-django/auth.py +302 -0
- package/plugins/extract-django/auth_test.py +188 -0
- package/plugins/extract-django/clients.py +121 -0
- package/plugins/extract-django/contracts.py +458 -0
- package/plugins/extract-django/database.py +119 -0
- package/plugins/extract-django/domain.py +318 -0
- package/plugins/extract-django/events.py +86 -0
- package/plugins/extract-django/extract.py +601 -0
- package/plugins/extract-django/extract_test.py +397 -0
- package/plugins/extract-django/flows.py +1278 -0
- package/plugins/extract-django/flows_test.py +338 -0
- package/plugins/extract-django/ids.py +42 -0
- package/plugins/extract-django/ids_test.py +30 -0
- package/plugins/extract-django/lifecycle.py +222 -0
- package/plugins/extract-django/lifecycle_test.py +76 -0
- package/plugins/extract-django/main.py +66 -0
- package/plugins/extract-django/openapi.py +229 -0
- package/plugins/extract-django/openapi_test.py +60 -0
- package/plugins/extract-django/operations.py +96 -0
- package/plugins/extract-django/options.py +61 -0
- package/plugins/extract-django/options.schema.json +126 -0
- package/plugins/extract-django/routing.py +214 -0
- package/plugins/extract-django/routing_test.py +198 -0
- package/plugins/extract-django/serializers.py +558 -0
- package/plugins/extract-django/store.py +434 -0
- package/plugins/extract-django/transport.py +242 -0
- package/plugins/extract-flows/describe.go +19 -0
- package/plugins/extract-flows/describe_test.go +11 -0
- package/plugins/extract-flows/extract.go +91 -0
- package/plugins/extract-flows/main.go +45 -0
- package/plugins/extract-flows/options.schema.json +16 -0
- package/plugins/extract-flows/parse.go +593 -0
- package/plugins/extract-flows/parse_test.go +204 -0
- package/plugins/extract-glossary/describe.go +19 -0
- package/plugins/extract-glossary/describe_test.go +11 -0
- package/plugins/extract-glossary/extract.go +115 -0
- package/plugins/extract-glossary/extract_test.go +220 -0
- package/plugins/extract-glossary/main.go +59 -0
- package/plugins/extract-glossary/options.schema.json +21 -0
- package/plugins/extract-glossary/parse.go +214 -0
- package/plugins/extract-glossary/parse_test.go +203 -0
- package/plugins/extract-go/aggregate.go +214 -0
- package/plugins/extract-go/client.go +409 -0
- package/plugins/extract-go/client_test.go +266 -0
- package/plugins/extract-go/describe.go +19 -0
- package/plugins/extract-go/describe_test.go +11 -0
- package/plugins/extract-go/enum.go +195 -0
- package/plugins/extract-go/enum_test.go +82 -0
- package/plugins/extract-go/event.go +99 -0
- package/plugins/extract-go/extract.go +191 -0
- package/plugins/extract-go/extract_test.go +261 -0
- package/plugins/extract-go/flow.go +1441 -0
- package/plugins/extract-go/flow_test.go +609 -0
- package/plugins/extract-go/httpclient.go +174 -0
- package/plugins/extract-go/httpclient_test.go +296 -0
- package/plugins/extract-go/ids.go +92 -0
- package/plugins/extract-go/layout.go +225 -0
- package/plugins/extract-go/layout_test.go +125 -0
- package/plugins/extract-go/lifecycle.go +324 -0
- package/plugins/extract-go/lifecycle_test.go +108 -0
- package/plugins/extract-go/main.go +79 -0
- package/plugins/extract-go/operation.go +157 -0
- package/plugins/extract-go/options.schema.json +66 -0
- package/plugins/extract-go/source.go +316 -0
- package/plugins/extract-go/transport.go +321 -0
- package/plugins/extract-go/transport_test.go +145 -0
- package/plugins/extract-go/wiring.go +434 -0
- package/plugins/extract-go-nats/describe.go +19 -0
- package/plugins/extract-go-nats/describe_test.go +11 -0
- package/plugins/extract-go-nats/extract.go +177 -0
- package/plugins/extract-go-nats/extract_test.go +389 -0
- package/plugins/extract-go-nats/index.go +379 -0
- package/plugins/extract-go-nats/main.go +42 -0
- package/plugins/extract-go-nats/options.schema.json +21 -0
- package/plugins/extract-go-nats/resolve.go +161 -0
- package/plugins/extract-go-nats/sites.go +224 -0
- package/plugins/extract-graphql/describe.go +19 -0
- package/plugins/extract-graphql/describe_test.go +11 -0
- package/plugins/extract-graphql/extract.go +433 -0
- package/plugins/extract-graphql/extract_test.go +256 -0
- package/plugins/extract-graphql/ids.go +49 -0
- package/plugins/extract-graphql/lex.go +237 -0
- package/plugins/extract-graphql/main.go +51 -0
- package/plugins/extract-graphql/options.schema.json +31 -0
- package/plugins/extract-graphql/parse.go +621 -0
- package/plugins/extract-graphql/parse_test.go +122 -0
- package/plugins/extract-http-clients/describe.go +19 -0
- package/plugins/extract-http-clients/describe_test.go +11 -0
- package/plugins/extract-http-clients/extract.go +705 -0
- package/plugins/extract-http-clients/extract_test.go +1263 -0
- package/plugins/extract-http-clients/main.go +42 -0
- package/plugins/extract-http-clients/options.schema.json +33 -0
- package/plugins/extract-java/README.md +190 -0
- package/plugins/extract-java/build/org/portolan/extract/Catalog.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Clients$1.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Clients$2.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Clients$Call.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Clients$Client.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Clients$Route.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Clients.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Domain$Aggregate.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Domain.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Events$Found.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Events.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Extract.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Flows$1.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Flows$Binding.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Flows$Draft.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Flows$Frame.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Flows$Options.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Flows.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Ids.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Json$Reader.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Json.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Lifecycle$1.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Lifecycle$Move.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Lifecycle.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Main.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/OpenApi$Operation.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/OpenApi$Spec.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/OpenApi.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Operations$1.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Operations$UseCase.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Operations.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Proto$Rpc.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Proto$Service.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Proto.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Protocol$Builder.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Protocol$Input.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Protocol$Options.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Protocol.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Source$Project.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Source$Unit.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Source.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Transport$Endpoint.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Transport.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Yaml$Line.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Yaml$Reader.class +0 -0
- package/plugins/extract-java/build/org/portolan/extract/Yaml.class +0 -0
- package/plugins/extract-java/options.schema.json +70 -0
- package/plugins/extract-openapi/describe.go +19 -0
- package/plugins/extract-openapi/describe_test.go +11 -0
- package/plugins/extract-openapi/discover.go +243 -0
- package/plugins/extract-openapi/extract.go +526 -0
- package/plugins/extract-openapi/extract_test.go +545 -0
- package/plugins/extract-openapi/main.go +75 -0
- package/plugins/extract-openapi/options.schema.json +62 -0
- package/plugins/extract-openapi/spec.go +350 -0
- package/plugins/extract-project/README.md +22 -0
- package/plugins/extract-project/describe.go +19 -0
- package/plugins/extract-project/describe_test.go +11 -0
- package/plugins/extract-project/extract.go +221 -0
- package/plugins/extract-project/extract_test.go +109 -0
- package/plugins/extract-project/main.go +41 -0
- package/plugins/extract-project/options.schema.json +48 -0
- package/plugins/extract-proto/ast.go +125 -0
- package/plugins/extract-proto/consumes.go +77 -0
- package/plugins/extract-proto/describe.go +19 -0
- package/plugins/extract-proto/extract.go +293 -0
- package/plugins/extract-proto/extract_test.go +459 -0
- package/plugins/extract-proto/ids.go +89 -0
- package/plugins/extract-proto/ids_test.go +57 -0
- package/plugins/extract-proto/lex.go +285 -0
- package/plugins/extract-proto/main.go +100 -0
- package/plugins/extract-proto/module.go +120 -0
- package/plugins/extract-proto/options.schema.json +51 -0
- package/plugins/extract-proto/parse.go +720 -0
- package/plugins/extract-proto/parse_test.go +307 -0
- package/plugins/extract-proto/provides.go +236 -0
- package/plugins/extract-proto/resolve.go +222 -0
- package/plugins/extract-proto/resolve_test.go +119 -0
- package/plugins/extract-python-kafka/README.md +36 -0
- package/plugins/extract-python-kafka/extract.py +211 -0
- package/plugins/extract-python-kafka/extract_test.py +68 -0
- package/plugins/extract-python-kafka/main.py +59 -0
- package/plugins/extract-python-kafka/options.py +29 -0
- package/plugins/extract-python-kafka/options.schema.json +31 -0
- package/plugins/extract-redis/README.md +11 -0
- package/plugins/extract-redis/describe.go +19 -0
- package/plugins/extract-redis/describe_test.go +11 -0
- package/plugins/extract-redis/extract.go +183 -0
- package/plugins/extract-redis/extract_test.go +168 -0
- package/plugins/extract-redis/keyspaces.go +469 -0
- package/plugins/extract-redis/main.go +44 -0
- package/plugins/extract-redis/options.schema.json +30 -0
- package/plugins/extract-river/describe.go +19 -0
- package/plugins/extract-river/describe_test.go +11 -0
- package/plugins/extract-river/extract.go +507 -0
- package/plugins/extract-river/extract_test.go +132 -0
- package/plugins/extract-river/main.go +42 -0
- package/plugins/extract-river/options.schema.json +21 -0
- package/plugins/extract-rust/Cargo.lock +133 -0
- package/plugins/extract-rust/Cargo.toml +23 -0
- package/plugins/extract-rust/README.md +204 -0
- package/plugins/extract-rust/options.schema.json +65 -0
- package/plugins/extract-rust/rustfmt.toml +1 -0
- package/plugins/extract-sql/ddl.go +893 -0
- package/plugins/extract-sql/ddl_test.go +401 -0
- package/plugins/extract-sql/describe.go +19 -0
- package/plugins/extract-sql/describe_test.go +11 -0
- package/plugins/extract-sql/layout.go +221 -0
- package/plugins/extract-sql/layout_test.go +55 -0
- package/plugins/extract-sql/lineage.go +107 -0
- package/plugins/extract-sql/main.go +141 -0
- package/plugins/extract-sql/maps.go +564 -0
- package/plugins/extract-sql/maps_java.go +117 -0
- package/plugins/extract-sql/maps_rust.go +333 -0
- package/plugins/extract-sql/maps_rust_test.go +70 -0
- package/plugins/extract-sql/maps_test.go +204 -0
- package/plugins/extract-sql/maps_ts.go +398 -0
- package/plugins/extract-sql/maps_ts_test.go +136 -0
- package/plugins/extract-sql/options.schema.json +53 -0
- package/plugins/extract-sql/projection.go +70 -0
- package/plugins/extract-sql/projection_test.go +50 -0
- package/plugins/extract-sql/store.go +420 -0
- package/plugins/extract-sql/store_test.go +233 -0
- package/plugins/extract-sql/view.go +295 -0
- package/plugins/extract-ts/README.md +306 -0
- package/plugins/extract-ts/ast.test.ts +178 -0
- package/plugins/extract-ts/ast.ts +648 -0
- package/plugins/extract-ts/clients.ts +185 -0
- package/plugins/extract-ts/domain.ts +164 -0
- package/plugins/extract-ts/extract.test.ts +208 -0
- package/plugins/extract-ts/extract.ts +200 -0
- package/plugins/extract-ts/flows.ts +783 -0
- package/plugins/extract-ts/graphql.test.ts +73 -0
- package/plugins/extract-ts/graphql.ts +181 -0
- package/plugins/extract-ts/ids.test.ts +21 -0
- package/plugins/extract-ts/ids.ts +52 -0
- package/plugins/extract-ts/lifecycle.ts +138 -0
- package/plugins/extract-ts/main.ts +48 -0
- package/plugins/extract-ts/openapi.test.ts +64 -0
- package/plugins/extract-ts/openapi.ts +99 -0
- package/plugins/extract-ts/operations.ts +93 -0
- package/plugins/extract-ts/options.schema.json +96 -0
- package/plugins/extract-ts/source.test.ts +174 -0
- package/plugins/extract-ts/source.ts +465 -0
- package/plugins/extract-ts/transport.ts +147 -0
- package/plugins/extract-ts/tsconfig.json +13 -0
- package/plugins/extract-ts/wiring.ts +190 -0
- package/plugins/extract-watermill/describe.go +19 -0
- package/plugins/extract-watermill/describe_test.go +11 -0
- package/plugins/extract-watermill/extract.go +1228 -0
- package/plugins/extract-watermill/extract_test.go +234 -0
- package/plugins/extract-watermill/main.go +41 -0
- package/plugins/extract-watermill/options.schema.json +21 -0
- package/plugins/extract-wsdl/describe.go +19 -0
- package/plugins/extract-wsdl/describe_test.go +11 -0
- package/plugins/extract-wsdl/extract.go +148 -0
- package/plugins/extract-wsdl/extract_test.go +45 -0
- package/plugins/extract-wsdl/main.go +53 -0
- package/plugins/extract-wsdl/options.schema.json +59 -0
- package/plugins/fetch-bsr/auth.go +114 -0
- package/plugins/fetch-bsr/bsr.go +240 -0
- package/plugins/fetch-bsr/cache.go +66 -0
- package/plugins/fetch-bsr/describe.go +19 -0
- package/plugins/fetch-bsr/fetch.go +192 -0
- package/plugins/fetch-bsr/fetch_test.go +465 -0
- package/plugins/fetch-bsr/lock.go +71 -0
- package/plugins/fetch-bsr/main.go +117 -0
- package/plugins/fetch-bsr/options.schema.json +42 -0
- package/plugins/fetch-csr/auth.go +95 -0
- package/plugins/fetch-csr/cache.go +69 -0
- package/plugins/fetch-csr/describe.go +19 -0
- package/plugins/fetch-csr/describe_test.go +11 -0
- package/plugins/fetch-csr/fetch.go +254 -0
- package/plugins/fetch-csr/fetch_test.go +494 -0
- package/plugins/fetch-csr/lock.go +95 -0
- package/plugins/fetch-csr/main.go +122 -0
- package/plugins/fetch-csr/options.schema.json +42 -0
- package/plugins/fetch-csr/registry.go +209 -0
- package/plugins/fetch-git/cache.go +65 -0
- package/plugins/fetch-git/describe.go +19 -0
- package/plugins/fetch-git/describe_test.go +11 -0
- package/plugins/fetch-git/fetch.go +181 -0
- package/plugins/fetch-git/fetch_test.go +332 -0
- package/plugins/fetch-git/git.go +169 -0
- package/plugins/fetch-git/lock.go +72 -0
- package/plugins/fetch-git/main.go +127 -0
- package/plugins/fetch-git/offline.go +39 -0
- package/plugins/fetch-git/options.schema.json +42 -0
- package/plugins/fetch-git/pin.go +90 -0
- package/plugins/fetch-git/pin_test.go +74 -0
- package/plugins/gen-backstage/describe.go +17 -0
- package/plugins/gen-backstage/main.go +22 -0
- package/plugins/gen-backstage/options.schema.json +30 -0
- package/plugins/gen-backstage/plugin.go +473 -0
- package/plugins/gen-backstage/plugin_test.go +145 -0
- package/plugins/gen-backstage.wasm +0 -0
- package/plugins/gen-markdown/adr.go +162 -0
- package/plugins/gen-markdown/aggregate.go +362 -0
- package/plugins/gen-markdown/canonical.go +93 -0
- package/plugins/gen-markdown/context.go +90 -0
- package/plugins/gen-markdown/coverage_test.go +89 -0
- package/plugins/gen-markdown/describe.go +19 -0
- package/plugins/gen-markdown/describe_test.go +11 -0
- package/plugins/gen-markdown/external.go +71 -0
- package/plugins/gen-markdown/flow.go +277 -0
- package/plugins/gen-markdown/glossary.go +76 -0
- package/plugins/gen-markdown/glossary_test.go +148 -0
- package/plugins/gen-markdown/llms.go +302 -0
- package/plugins/gen-markdown/main.go +22 -0
- package/plugins/gen-markdown/markdown.go +254 -0
- package/plugins/gen-markdown/markdown_test.go +100 -0
- package/plugins/gen-markdown/module.go +107 -0
- package/plugins/gen-markdown/options.schema.json +16 -0
- package/plugins/gen-markdown/plugin.go +39 -0
- package/plugins/gen-markdown/quality_test.go +176 -0
- package/plugins/gen-markdown/redis_test.go +38 -0
- package/plugins/gen-markdown/render.go +344 -0
- package/plugins/gen-markdown/render_test.go +186 -0
- package/plugins/gen-markdown/service.go +456 -0
- package/plugins/gen-markdown/source.go +177 -0
- package/plugins/gen-markdown/store.go +201 -0
- package/plugins/gen-markdown.wasm +0 -0
- package/plugins/gen-mermaid/describe.go +17 -0
- package/plugins/gen-mermaid/main.go +22 -0
- package/plugins/gen-mermaid/options.schema.json +10 -0
- package/plugins/gen-mermaid/plugin.go +104 -0
- package/plugins/gen-mermaid/plugin_test.go +33 -0
- package/plugins/gen-mermaid.wasm +0 -0
- package/plugins/openapi/ids.go +261 -0
- package/plugins/openapi/ids_test.go +98 -0
- package/plugins/pyplugin/catalog.py +209 -0
- package/plugins/pyplugin/celery_conf.py +436 -0
- package/plugins/pyplugin/celery_tasks.py +76 -0
- package/plugins/pyplugin/kafka.py +570 -0
- package/plugins/pyplugin/names.py +38 -0
- package/plugins/pyplugin/protocol.py +79 -0
- package/plugins/pyplugin/source.py +285 -0
- package/plugins/verify-codeowners/describe.go +19 -0
- package/plugins/verify-codeowners/describe_test.go +11 -0
- package/plugins/verify-codeowners/main.go +75 -0
- package/plugins/verify-codeowners/match.go +85 -0
- package/plugins/verify-codeowners/match_test.go +47 -0
- package/plugins/verify-codeowners/options.schema.json +15 -0
- package/plugins/verify-codeowners/owners.go +164 -0
- package/plugins/verify-codeowners/owners_test.go +225 -0
- package/plugins/verify-codeowners/parse.go +90 -0
- package/plugins/verify-codeowners/parse_test.go +62 -0
- package/plugins/verify-otel/describe.go +19 -0
- package/plugins/verify-otel/describe_test.go +11 -0
- package/plugins/verify-otel/main.go +53 -0
- package/plugins/verify-otel/match.go +336 -0
- package/plugins/verify-otel/options.schema.json +30 -0
- package/plugins/verify-otel/otlp.go +200 -0
- package/plugins/verify-otel/verify.go +734 -0
- package/plugins/verify-otel/verify_test.go +460 -0
- package/portolan.json +1073 -0
- package/public/favicon.svg +12 -0
- package/schema/portolan.schema.json +2558 -0
- package/scripts/README.md +53 -0
- package/scripts/build-report.mjs +60 -0
- package/scripts/build-report.test.mjs +44 -0
- package/scripts/builtin-plugins.mjs +49 -0
- package/scripts/catalog-sources.mjs +67 -0
- package/scripts/diff.mjs +315 -0
- package/scripts/diff.test.mjs +151 -0
- package/scripts/forge-comment.mjs +144 -0
- package/scripts/forge-comment.test.mjs +151 -0
- package/scripts/forge-release.mjs +138 -0
- package/scripts/forge-release.test.mjs +106 -0
- package/scripts/forge.mjs +61 -0
- package/scripts/gen-likec4.mjs +854 -0
- package/scripts/gen-likec4.test.mjs +258 -0
- package/scripts/gen.mjs +603 -0
- package/scripts/generated-docs.test.mjs +66 -0
- package/scripts/local-api.mjs +1192 -0
- package/scripts/local-api.test.mjs +387 -0
- package/scripts/manifest.mjs +214 -0
- package/scripts/manifest.test.mjs +148 -0
- package/scripts/output-path.mjs +79 -0
- package/scripts/output-path.test.mjs +45 -0
- package/scripts/package-smoke.mjs +37 -0
- package/scripts/plugin-host.mjs +419 -0
- package/scripts/plugin-host.test.mjs +109 -0
- package/scripts/plugin-wasm-worker.mjs +34 -0
- package/scripts/run-builtin.mjs +81 -0
- package/scripts/schema.mjs +357 -0
- package/scripts/site-docs.mjs +295 -0
- package/scripts/site-docs.test.mjs +181 -0
- package/scripts/vendor-lock.mjs +58 -0
- package/scripts/vendor-lock.test.mjs +69 -0
- package/src/README.md +38 -0
- package/src/app/App.tsx +448 -0
- package/src/app/BranchPicker.test.ts +46 -0
- package/src/app/BranchPicker.tsx +153 -0
- package/src/app/Breadcrumbs.test.ts +38 -0
- package/src/app/Breadcrumbs.tsx +223 -0
- package/src/app/BuildStamp.tsx +146 -0
- package/src/app/CommandPalette.tsx +292 -0
- package/src/app/HashScroll.tsx +45 -0
- package/src/app/Sidebar.tsx +1742 -0
- package/src/app/TopBar.tsx +393 -0
- package/src/app/density.tsx +64 -0
- package/src/app/forge-access.test.ts +27 -0
- package/src/app/forge-access.tsx +80 -0
- package/src/app/panels.tsx +141 -0
- package/src/app/pins.tsx +242 -0
- package/src/app/query-client.ts +24 -0
- package/src/app/responsive.ts +55 -0
- package/src/app/shortcuts.test.ts +39 -0
- package/src/app/shortcuts.tsx +282 -0
- package/src/app/theme.tsx +51 -0
- package/src/app/title.test.ts +14 -0
- package/src/app/title.ts +30 -0
- package/src/app/toast.tsx +59 -0
- package/src/app/tree-keys.test.ts +80 -0
- package/src/app/tree-keys.ts +87 -0
- package/src/app/ui-store.ts +52 -0
- package/src/catalog-error.test.ts +105 -0
- package/src/catalog-profile.test.ts +59 -0
- package/src/catalog-profile.ts +101 -0
- package/src/catalog-stores.test.ts +431 -0
- package/src/catalog.test.ts +1215 -0
- package/src/catalog.ts +3125 -0
- package/src/chat/Cards.tsx +408 -0
- package/src/chat/ChatPanel.tsx +79 -0
- package/src/chat/ChatSettings.tsx +219 -0
- package/src/chat/Composer.tsx +99 -0
- package/src/chat/Conversation.tsx +281 -0
- package/src/chat/Header.tsx +46 -0
- package/src/chat/Message.tsx +49 -0
- package/src/chat/Notice.tsx +195 -0
- package/src/chat/Starter.tsx +67 -0
- package/src/chat/Steps.tsx +45 -0
- package/src/chat/Waiting.tsx +87 -0
- package/src/chat/flags.test.ts +59 -0
- package/src/chat/flags.ts +155 -0
- package/src/chat/linkify.test.ts +30 -0
- package/src/chat/linkify.ts +45 -0
- package/src/chat/prefs.ts +56 -0
- package/src/chat/prompt.test.ts +43 -0
- package/src/chat/prompt.ts +157 -0
- package/src/chat/store.ts +35 -0
- package/src/chat/tools.ts +58 -0
- package/src/chat/transport.ts +70 -0
- package/src/components/AdrRow.tsx +29 -0
- package/src/components/AnchorLink.tsx +67 -0
- package/src/components/ApiReference.tsx +134 -0
- package/src/components/AsyncApiReference.tsx +120 -0
- package/src/components/CatalogStamp.tsx +155 -0
- package/src/components/ChannelRows.tsx +132 -0
- package/src/components/CommandRows.tsx +139 -0
- package/src/components/DiagramSkeleton.tsx +71 -0
- package/src/components/EditorLink.tsx +85 -0
- package/src/components/FieldTree.tsx +305 -0
- package/src/components/FlowTrigger.tsx +34 -0
- package/src/components/Ident.tsx +89 -0
- package/src/components/Integrations.tsx +243 -0
- package/src/components/LifecycleDiagram.tsx +110 -0
- package/src/components/MachineDocs.tsx +42 -0
- package/src/components/Markdown.tsx +173 -0
- package/src/components/MarkdownTable.tsx +206 -0
- package/src/components/Mermaid.tsx +211 -0
- package/src/components/MethodRows.tsx +309 -0
- package/src/components/Overlay.tsx +125 -0
- package/src/components/PageHeader.tsx +189 -0
- package/src/components/RowActions.tsx +97 -0
- package/src/components/SchemaDocument.tsx +89 -0
- package/src/components/Select.tsx +126 -0
- package/src/components/ShapeRows.tsx +118 -0
- package/src/components/SourceDoc.tsx +82 -0
- package/src/components/SourcePreview.tsx +441 -0
- package/src/components/TabRow.tsx +182 -0
- package/src/components/TechIcon.tsx +34 -0
- package/src/components/Toc.tsx +132 -0
- package/src/components/WhatLinksHere.tsx +273 -0
- package/src/components/WsdlReference.tsx +84 -0
- package/src/components/ddd-icons.tsx +107 -0
- package/src/components/kind.tsx +157 -0
- package/src/components/logo.tsx +61 -0
- package/src/components/primitives.tsx +264 -0
- package/src/data.test.ts +18 -0
- package/src/data.ts +202 -0
- package/src/enrich.test.ts +1150 -0
- package/src/enrich.ts +672 -0
- package/src/er/ErCanvas.tsx +533 -0
- package/src/er/RedisSchema.tsx +74 -0
- package/src/er/RelationCard.tsx +267 -0
- package/src/er/StoreHeader.tsx +155 -0
- package/src/er/TableNode.tsx +84 -0
- package/src/er/ViewNode.tsx +83 -0
- package/src/er/layout.test.ts +115 -0
- package/src/er/layout.ts +77 -0
- package/src/er/lineage.test.ts +140 -0
- package/src/er/lineage.ts +107 -0
- package/src/er/markers.tsx +79 -0
- package/src/er/spec.test.ts +344 -0
- package/src/er/spec.ts +426 -0
- package/src/flow/ChainList.tsx +162 -0
- package/src/flow/FlowTable.tsx +123 -0
- package/src/flow/FlowToolbar.tsx +372 -0
- package/src/flow/StepDetail.tsx +380 -0
- package/src/flow/StepRail.tsx +428 -0
- package/src/flow/answers.test.ts +50 -0
- package/src/flow/answers.ts +58 -0
- package/src/flow/chain.test.ts +383 -0
- package/src/flow/chain.ts +353 -0
- package/src/flow/chapters.test.ts +185 -0
- package/src/flow/chapters.ts +225 -0
- package/src/flow/continues.test.ts +102 -0
- package/src/flow/continues.ts +65 -0
- package/src/flow/cross-context.test.ts +97 -0
- package/src/flow/cross-context.ts +35 -0
- package/src/flow/mermaid.test.ts +22 -0
- package/src/flow/mermaid.ts +141 -0
- package/src/flow/outline.test.ts +212 -0
- package/src/flow/outline.ts +170 -0
- package/src/flow/paths.test.ts +129 -0
- package/src/flow/paths.ts +147 -0
- package/src/flow/prefs.test.ts +80 -0
- package/src/flow/prefs.ts +104 -0
- package/src/graph/DependencyGraph.tsx +283 -0
- package/src/graph/DependencyNodes.tsx +162 -0
- package/src/graph/EdgeLabel.tsx +61 -0
- package/src/graph/FocusedEventGraph.tsx +211 -0
- package/src/graph/GraphToolbar.tsx +187 -0
- package/src/graph/RoutedEdge.tsx +80 -0
- package/src/graph/dependency-layout.test.ts +360 -0
- package/src/graph/dependency-layout.ts +444 -0
- package/src/graph/elk.test.ts +70 -0
- package/src/graph/elk.ts +287 -0
- package/src/graph/nodes.tsx +97 -0
- package/src/graph/theme.ts +81 -0
- package/src/graph/useElkFlow.ts +125 -0
- package/src/index.css +1547 -0
- package/src/language/InLanguage.tsx +40 -0
- package/src/language/TermCard.tsx +132 -0
- package/src/language/cards.test.ts +114 -0
- package/src/language/cards.ts +111 -0
- package/src/lib/admonition.test.ts +49 -0
- package/src/lib/admonition.ts +48 -0
- package/src/lib/adr.test.ts +131 -0
- package/src/lib/adr.ts +68 -0
- package/src/lib/api.test.ts +122 -0
- package/src/lib/api.ts +135 -0
- package/src/lib/backlinks.test.ts +330 -0
- package/src/lib/backlinks.ts +567 -0
- package/src/lib/branch-compare.ts +16 -0
- package/src/lib/build-info.test.ts +76 -0
- package/src/lib/build-info.ts +80 -0
- package/src/lib/catalog-diff.test.ts +275 -0
- package/src/lib/catalog-diff.ts +655 -0
- package/src/lib/clipboard.ts +43 -0
- package/src/lib/comparison-memory.test.ts +40 -0
- package/src/lib/comparison-memory.ts +39 -0
- package/src/lib/context-color.ts +27 -0
- package/src/lib/context-map.test.ts +148 -0
- package/src/lib/context-map.ts +399 -0
- package/src/lib/data-model.test.ts +245 -0
- package/src/lib/data-model.ts +399 -0
- package/src/lib/data-problems.test.ts +178 -0
- package/src/lib/data-problems.ts +314 -0
- package/src/lib/derive.test.ts +251 -0
- package/src/lib/derive.ts +515 -0
- package/src/lib/editor-link.test.ts +125 -0
- package/src/lib/editor-link.ts +96 -0
- package/src/lib/editor-prefs.ts +27 -0
- package/src/lib/event-graph.test.ts +237 -0
- package/src/lib/event-graph.ts +327 -0
- package/src/lib/export-canvas.ts +37 -0
- package/src/lib/export-file.test.ts +30 -0
- package/src/lib/export-file.ts +20 -0
- package/src/lib/flow-tree.test.ts +177 -0
- package/src/lib/flow-tree.ts +160 -0
- package/src/lib/forge-refs.test.ts +50 -0
- package/src/lib/forge-refs.ts +60 -0
- package/src/lib/format.test.ts +35 -0
- package/src/lib/format.ts +64 -0
- package/src/lib/github-catalog.test.ts +301 -0
- package/src/lib/github-catalog.ts +610 -0
- package/src/lib/integrations.test.ts +119 -0
- package/src/lib/integrations.ts +133 -0
- package/src/lib/kinds.test.ts +91 -0
- package/src/lib/kinds.ts +204 -0
- package/src/lib/lifecycle.test.ts +93 -0
- package/src/lib/lifecycle.ts +165 -0
- package/src/lib/local-api.ts +194 -0
- package/src/lib/motion-features.ts +11 -0
- package/src/lib/motion.test.ts +120 -0
- package/src/lib/motion.tsx +269 -0
- package/src/lib/palette-recent.test.ts +80 -0
- package/src/lib/palette-recent.ts +90 -0
- package/src/lib/palette.test.ts +365 -0
- package/src/lib/palette.ts +593 -0
- package/src/lib/pins.test.ts +139 -0
- package/src/lib/pins.ts +130 -0
- package/src/lib/problems.test.ts +112 -0
- package/src/lib/project-preview.ts +5 -0
- package/src/lib/proto-problems.test.ts +121 -0
- package/src/lib/proto-problems.ts +65 -0
- package/src/lib/queries.test.ts +113 -0
- package/src/lib/queries.ts +131 -0
- package/src/lib/registry.test.ts +219 -0
- package/src/lib/registry.ts +208 -0
- package/src/lib/scenarios.ts +547 -0
- package/src/lib/setup-info.test.ts +199 -0
- package/src/lib/setup-info.ts +415 -0
- package/src/lib/shape.test.ts +289 -0
- package/src/lib/shape.ts +454 -0
- package/src/lib/sidebar-prefs.test.ts +32 -0
- package/src/lib/sidebar-prefs.ts +75 -0
- package/src/lib/source-code.test.ts +159 -0
- package/src/lib/source-code.ts +286 -0
- package/src/lib/source-doc.test.ts +131 -0
- package/src/lib/source-doc.ts +103 -0
- package/src/lib/source-highlight.test.ts +29 -0
- package/src/lib/source-highlight.ts +24 -0
- package/src/lib/source-link.test.ts +153 -0
- package/src/lib/source-link.ts +201 -0
- package/src/lib/spec-files.test.ts +24 -0
- package/src/lib/spec-files.ts +23 -0
- package/src/lib/table-directive.test.ts +139 -0
- package/src/lib/table-directive.ts +106 -0
- package/src/lib/tech.test.ts +120 -0
- package/src/lib/tech.ts +421 -0
- package/src/lib/terms.test.ts +67 -0
- package/src/lib/terms.ts +179 -0
- package/src/lib/wire-problems.test.ts +263 -0
- package/src/lib/wire-problems.ts +281 -0
- package/src/likec4/C4View.tsx +55 -0
- package/src/likec4/CanvasBridge.tsx +187 -0
- package/src/likec4/FlowView.tsx +235 -0
- package/src/likec4/InteractiveView.tsx +144 -0
- package/src/likec4/canvas-viewport.test.ts +149 -0
- package/src/likec4/canvas-viewport.ts +135 -0
- package/src/likec4/flow-edges.test.ts +51 -0
- package/src/likec4/flow-edges.ts +89 -0
- package/src/likec4/frame-theme.test.ts +76 -0
- package/src/likec4/frame-theme.ts +101 -0
- package/src/likec4/highlight-css.test.ts +49 -0
- package/src/likec4/highlight-css.ts +52 -0
- package/src/likec4/ids.test.ts +151 -0
- package/src/likec4/ids.ts +115 -0
- package/src/likec4/levels.tsx +70 -0
- package/src/likec4/mapping.test.ts +66 -0
- package/src/likec4/mapping.ts +54 -0
- package/src/likec4/reserved.json +141 -0
- package/src/likec4/view-index.ts +78 -0
- package/src/main.tsx +13 -0
- package/src/map/ContextMapGraph.tsx +274 -0
- package/src/map/ContextNode.tsx +70 -0
- package/src/map/FloatingEdge.tsx +86 -0
- package/src/merge.test.ts +1038 -0
- package/src/merge.ts +1004 -0
- package/src/pages/AdrDetail.tsx +242 -0
- package/src/pages/AdrIndex.tsx +114 -0
- package/src/pages/AggregatePage.tsx +727 -0
- package/src/pages/BlockPage.tsx +478 -0
- package/src/pages/CatalogFailure.tsx +111 -0
- package/src/pages/Changes.tsx +313 -0
- package/src/pages/ContextMap.tsx +534 -0
- package/src/pages/ContextPage.tsx +346 -0
- package/src/pages/EnumPage.tsx +282 -0
- package/src/pages/EventPage.tsx +686 -0
- package/src/pages/ExternalPage.tsx +204 -0
- package/src/pages/FlowDetail.tsx +663 -0
- package/src/pages/FlowIndex.tsx +303 -0
- package/src/pages/GraphPage.tsx +217 -0
- package/src/pages/Language.tsx +257 -0
- package/src/pages/ModulePage.tsx +366 -0
- package/src/pages/NotFound.tsx +54 -0
- package/src/pages/Overview.tsx +344 -0
- package/src/pages/Problems.tsx +360 -0
- package/src/pages/RegistryIndex.tsx +118 -0
- package/src/pages/ServicePage.tsx +746 -0
- package/src/pages/Settings.tsx +975 -0
- package/src/pages/StorePage.tsx +114 -0
- package/src/peek/PeekCard.test.ts +35 -0
- package/src/peek/PeekCard.tsx +118 -0
- package/src/peek/PeekLayer.tsx +147 -0
- package/src/peek/model.test.ts +156 -0
- package/src/peek/model.ts +253 -0
- package/src/routes.test.ts +222 -0
- package/src/routes.ts +449 -0
- package/src/selection/DetailPanel.tsx +1407 -0
- package/src/selection/hash.test.ts +73 -0
- package/src/selection/hash.ts +58 -0
- package/src/selection/model.test.ts +199 -0
- package/src/selection/model.ts +473 -0
- package/src/selection/pages.test.ts +115 -0
- package/src/selection/pages.ts +268 -0
- package/src/selection/store.test.ts +62 -0
- package/src/selection/store.ts +46 -0
- package/src/selection/sync.tsx +99 -0
- package/src/table/ColumnsMenu.tsx +72 -0
- package/src/table/DataTable.tsx +780 -0
- package/src/table/Facets.tsx +54 -0
- package/src/table/GroupMenu.tsx +69 -0
- package/src/table/Toolbar.tsx +190 -0
- package/src/table/cells.tsx +117 -0
- package/src/table/compare.test.ts +117 -0
- package/src/table/compare.ts +196 -0
- package/src/table/export.test.ts +88 -0
- package/src/table/export.ts +66 -0
- package/src/table/facet-groups.test.ts +74 -0
- package/src/table/facet-groups.ts +56 -0
- package/src/table/grouping.test.ts +84 -0
- package/src/table/grouping.ts +82 -0
- package/src/table/infer.test.ts +57 -0
- package/src/table/infer.ts +50 -0
- package/src/table/persist.test.ts +76 -0
- package/src/table/persist.ts +112 -0
- package/src/table/sort-url.test.ts +75 -0
- package/src/table/sort-url.ts +52 -0
- package/src/table/types.ts +80 -0
- package/src/table/useTableState.ts +220 -0
- package/src/test-catalog.ts +7 -0
- package/src/testing/estate/data__catalog.json +2847 -0
- package/src/testing/estate/data__flows.json +1724 -0
- package/src/testing/estate/examples__auth__portolan__api.json +212 -0
- package/src/testing/estate/examples__auth__portolan__domain.json +1204 -0
- package/src/testing/estate/examples__auth__portolan__glossary.json +226 -0
- package/src/testing/estate/examples__auth__portolan__observed.json +757 -0
- package/src/testing/estate/examples__auth__portolan__stores.json +195 -0
- package/src/testing/estate/examples__shop__cart__portolan__api.json +234 -0
- package/src/testing/estate/examples__shop__cart__portolan__commands.json +86 -0
- package/src/testing/estate/examples__shop__cart__portolan__domain.json +966 -0
- package/src/testing/estate/examples__shop__cart__portolan__observed.json +498 -0
- package/src/testing/estate/examples__shop__cart__portolan__stores.json +208 -0
- package/src/testing/estate/examples__shop__oms__portolan__glossary.json +98 -0
- package/src/testing/estate/examples__shop__oms__portolan__proto.json +186 -0
- package/src/testing/estate.ts +49 -0
- package/src/trail/Trail.tsx +81 -0
- package/src/trail/model.test.ts +157 -0
- package/src/trail/model.ts +189 -0
- package/src/trail/record.tsx +32 -0
- package/src/trail/store.test.ts +66 -0
- package/src/trail/store.ts +102 -0
- package/tsconfig.json +35 -0
- package/vite.config.ts +171 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
// The tokens of a .proto file, and the comments attached to them.
|
|
4
|
+
//
|
|
5
|
+
// Comments are not thrown away. A proto's leading comments are the only
|
|
6
|
+
// documentation it carries - a descriptor drops them unless SourceCodeInfo is
|
|
7
|
+
// asked for and carried around - and `Field.doc` in the catalog would come back
|
|
8
|
+
// empty without them. So the lexer keeps them, attaches each block to the token
|
|
9
|
+
// it precedes, and files each trailing one under the line it sits on.
|
|
10
|
+
|
|
11
|
+
import (
|
|
12
|
+
"fmt"
|
|
13
|
+
"strings"
|
|
14
|
+
"unicode"
|
|
15
|
+
"unicode/utf8"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
type kind int
|
|
19
|
+
|
|
20
|
+
const (
|
|
21
|
+
tokEOF kind = iota
|
|
22
|
+
tokIdent
|
|
23
|
+
tokString
|
|
24
|
+
tokNumber
|
|
25
|
+
tokPunct
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
type token struct {
|
|
29
|
+
kind kind
|
|
30
|
+
text string
|
|
31
|
+
line int
|
|
32
|
+
|
|
33
|
+
// doc is the comment block directly above this token, already cleaned.
|
|
34
|
+
// Empty unless this token opens a declaration that was commented.
|
|
35
|
+
doc string
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
func (t token) is(text string) bool {
|
|
39
|
+
return (t.kind == tokPunct || t.kind == tokIdent) && t.text == text
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// lexed is a file's tokens plus the comments that did not lead a declaration.
|
|
43
|
+
type lexed struct {
|
|
44
|
+
tokens []token
|
|
45
|
+
|
|
46
|
+
// trailing is the comment sitting at the end of a line, by line number.
|
|
47
|
+
// A field documented to its right rather than above is common enough that
|
|
48
|
+
// dropping it would lose real prose.
|
|
49
|
+
trailing map[int]string
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
type lexer struct {
|
|
53
|
+
src string
|
|
54
|
+
pos int
|
|
55
|
+
line int
|
|
56
|
+
|
|
57
|
+
pending []string // comment block being accumulated
|
|
58
|
+
lastEnd int // line the last accumulated comment ended on
|
|
59
|
+
trailing map[int]string
|
|
60
|
+
lastTok int // line of the last non-comment token, for trailing detection
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
func lex(src string) (lexed, error) {
|
|
64
|
+
l := &lexer{src: src, line: 1, trailing: map[int]string{}, lastTok: -1}
|
|
65
|
+
out := lexed{trailing: l.trailing}
|
|
66
|
+
|
|
67
|
+
for {
|
|
68
|
+
tok, err := l.next()
|
|
69
|
+
if err != nil {
|
|
70
|
+
return lexed{}, err
|
|
71
|
+
}
|
|
72
|
+
out.tokens = append(out.tokens, tok)
|
|
73
|
+
if tok.kind == tokEOF {
|
|
74
|
+
return out, nil
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
func (l *lexer) next() (token, error) {
|
|
80
|
+
for {
|
|
81
|
+
l.skipSpace()
|
|
82
|
+
if l.pos >= len(l.src) {
|
|
83
|
+
return token{kind: tokEOF, line: l.line}, nil
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if l.src[l.pos] == '/' && l.pos+1 < len(l.src) {
|
|
87
|
+
switch l.src[l.pos+1] {
|
|
88
|
+
case '/':
|
|
89
|
+
l.lineComment()
|
|
90
|
+
|
|
91
|
+
continue
|
|
92
|
+
case '*':
|
|
93
|
+
if err := l.blockComment(); err != nil {
|
|
94
|
+
return token{}, err
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
continue
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
break
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
start := l.line
|
|
105
|
+
c := l.src[l.pos]
|
|
106
|
+
|
|
107
|
+
switch {
|
|
108
|
+
case c == '"' || c == '\'':
|
|
109
|
+
text, err := l.str()
|
|
110
|
+
if err != nil {
|
|
111
|
+
return token{}, err
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return l.emit(token{kind: tokString, text: text, line: start}), nil
|
|
115
|
+
|
|
116
|
+
case isIdentStart(c):
|
|
117
|
+
begin := l.pos
|
|
118
|
+
for l.pos < len(l.src) && isIdentPart(l.src[l.pos]) {
|
|
119
|
+
l.pos++
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return l.emit(token{kind: tokIdent, text: l.src[begin:l.pos], line: start}), nil
|
|
123
|
+
|
|
124
|
+
case c >= '0' && c <= '9':
|
|
125
|
+
begin := l.pos
|
|
126
|
+
for l.pos < len(l.src) && isNumberPart(l.src[l.pos]) {
|
|
127
|
+
l.pos++
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return l.emit(token{kind: tokNumber, text: l.src[begin:l.pos], line: start}), nil
|
|
131
|
+
|
|
132
|
+
default:
|
|
133
|
+
l.pos++
|
|
134
|
+
|
|
135
|
+
return l.emit(token{kind: tokPunct, text: string(c), line: start}), nil
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// emit hands the accumulated comment block to a token, but only when the block
|
|
140
|
+
// ends on the line above it. A comment separated by a blank line was about
|
|
141
|
+
// whatever came before, or about nothing, and attaching it would put a
|
|
142
|
+
// paragraph on a declaration that never claimed it.
|
|
143
|
+
func (l *lexer) emit(t token) token {
|
|
144
|
+
if len(l.pending) > 0 {
|
|
145
|
+
if l.lastEnd == t.line-1 {
|
|
146
|
+
t.doc = strings.Join(l.pending, "\n")
|
|
147
|
+
}
|
|
148
|
+
l.pending = nil
|
|
149
|
+
}
|
|
150
|
+
l.lastTok = t.line
|
|
151
|
+
|
|
152
|
+
return t
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
func (l *lexer) lineComment() {
|
|
156
|
+
l.pos += 2
|
|
157
|
+
begin := l.pos
|
|
158
|
+
for l.pos < len(l.src) && l.src[l.pos] != '\n' {
|
|
159
|
+
l.pos++
|
|
160
|
+
}
|
|
161
|
+
text := strings.TrimSpace(l.src[begin:l.pos])
|
|
162
|
+
|
|
163
|
+
// A comment on the same line as the last token trails it rather than
|
|
164
|
+
// leading whatever comes next.
|
|
165
|
+
if l.line == l.lastTok {
|
|
166
|
+
if prev, ok := l.trailing[l.line]; ok {
|
|
167
|
+
l.trailing[l.line] = prev + " " + text
|
|
168
|
+
} else {
|
|
169
|
+
l.trailing[l.line] = text
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if l.lastEnd != l.line-1 {
|
|
176
|
+
l.pending = nil
|
|
177
|
+
}
|
|
178
|
+
l.pending = append(l.pending, text)
|
|
179
|
+
l.lastEnd = l.line
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
func (l *lexer) blockComment() error {
|
|
183
|
+
startLine := l.line
|
|
184
|
+
l.pos += 2
|
|
185
|
+
begin := l.pos
|
|
186
|
+
for {
|
|
187
|
+
if l.pos+1 >= len(l.src) {
|
|
188
|
+
return fmt.Errorf("line %d: block comment is never closed", startLine)
|
|
189
|
+
}
|
|
190
|
+
if l.src[l.pos] == '*' && l.src[l.pos+1] == '/' {
|
|
191
|
+
break
|
|
192
|
+
}
|
|
193
|
+
if l.src[l.pos] == '\n' {
|
|
194
|
+
l.line++
|
|
195
|
+
}
|
|
196
|
+
l.pos++
|
|
197
|
+
}
|
|
198
|
+
body := l.src[begin:l.pos]
|
|
199
|
+
l.pos += 2
|
|
200
|
+
|
|
201
|
+
var lines []string
|
|
202
|
+
for _, raw := range strings.Split(body, "\n") {
|
|
203
|
+
line := strings.TrimSpace(raw)
|
|
204
|
+
line = strings.TrimPrefix(line, "*")
|
|
205
|
+
lines = append(lines, strings.TrimSpace(line))
|
|
206
|
+
}
|
|
207
|
+
for len(lines) > 0 && lines[0] == "" {
|
|
208
|
+
lines = lines[1:]
|
|
209
|
+
}
|
|
210
|
+
for len(lines) > 0 && lines[len(lines)-1] == "" {
|
|
211
|
+
lines = lines[:len(lines)-1]
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if l.lastEnd != startLine-1 {
|
|
215
|
+
l.pending = nil
|
|
216
|
+
}
|
|
217
|
+
l.pending = append(l.pending, lines...)
|
|
218
|
+
l.lastEnd = l.line
|
|
219
|
+
|
|
220
|
+
return nil
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
func (l *lexer) str() (string, error) {
|
|
224
|
+
quote := l.src[l.pos]
|
|
225
|
+
startLine := l.line
|
|
226
|
+
l.pos++
|
|
227
|
+
var b strings.Builder
|
|
228
|
+
for {
|
|
229
|
+
if l.pos >= len(l.src) {
|
|
230
|
+
return "", fmt.Errorf("line %d: string is never closed", startLine)
|
|
231
|
+
}
|
|
232
|
+
c := l.src[l.pos]
|
|
233
|
+
if c == quote {
|
|
234
|
+
l.pos++
|
|
235
|
+
|
|
236
|
+
return b.String(), nil
|
|
237
|
+
}
|
|
238
|
+
if c == '\n' {
|
|
239
|
+
return "", fmt.Errorf("line %d: string is never closed", startLine)
|
|
240
|
+
}
|
|
241
|
+
if c == '\\' && l.pos+1 < len(l.src) {
|
|
242
|
+
// The escape is kept as written. Nothing downstream interprets a
|
|
243
|
+
// proto string literal; they are option values and default values,
|
|
244
|
+
// and both are shown rather than evaluated.
|
|
245
|
+
b.WriteByte(c)
|
|
246
|
+
l.pos++
|
|
247
|
+
b.WriteByte(l.src[l.pos])
|
|
248
|
+
l.pos++
|
|
249
|
+
|
|
250
|
+
continue
|
|
251
|
+
}
|
|
252
|
+
b.WriteByte(c)
|
|
253
|
+
l.pos++
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
func (l *lexer) skipSpace() {
|
|
258
|
+
for l.pos < len(l.src) {
|
|
259
|
+
c := l.src[l.pos]
|
|
260
|
+
if c == '\n' {
|
|
261
|
+
l.line++
|
|
262
|
+
l.pos++
|
|
263
|
+
|
|
264
|
+
continue
|
|
265
|
+
}
|
|
266
|
+
r, size := utf8.DecodeRuneInString(l.src[l.pos:])
|
|
267
|
+
if !unicode.IsSpace(r) {
|
|
268
|
+
return
|
|
269
|
+
}
|
|
270
|
+
l.pos += size
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
func isIdentStart(c byte) bool {
|
|
275
|
+
return c == '_' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
func isIdentPart(c byte) bool {
|
|
279
|
+
return isIdentStart(c) || (c >= '0' && c <= '9')
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
func isNumberPart(c byte) bool {
|
|
283
|
+
return (c >= '0' && c <= '9') || c == '.' || c == 'x' || c == 'X' ||
|
|
284
|
+
(c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || c == '-' || c == '+'
|
|
285
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Package main is portolan-extract-proto: .proto files in, a catalog fragment
|
|
2
|
+
// out.
|
|
3
|
+
//
|
|
4
|
+
// It is a `process` plugin because it walks the input tree, and it would be a
|
|
5
|
+
// wasm one the day the host preopens `Input.Root`. Nothing in it reads a clock,
|
|
6
|
+
// opens a socket or looks at the environment, and nothing should: fetching a
|
|
7
|
+
// module from a registry belongs to portolan-fetch-bsr, and keeping the two
|
|
8
|
+
// apart is what lets this one be replayed byte-for-byte from a checkout.
|
|
9
|
+
//
|
|
10
|
+
// Wired into portolan.json for the order contract oms publishes; the shape of
|
|
11
|
+
// a step, with a vendored copy as well:
|
|
12
|
+
//
|
|
13
|
+
// {
|
|
14
|
+
// "plugins": [
|
|
15
|
+
// { "name": "proto", "process": { "command": "go", "args": ["run", "./plugins/extract-proto"] } }
|
|
16
|
+
// ],
|
|
17
|
+
// "extract": [
|
|
18
|
+
// {
|
|
19
|
+
// "plugin": "proto",
|
|
20
|
+
// "in": "examples/shop",
|
|
21
|
+
// "out": "examples/shop/portolan",
|
|
22
|
+
// "options": {
|
|
23
|
+
// "context": "shop",
|
|
24
|
+
// "service": "oms",
|
|
25
|
+
// "paths": ["proto"],
|
|
26
|
+
// "vendored": ["internal/infrastructure/pricing"],
|
|
27
|
+
// "peers": { "shop.v1": "shop.pricing" },
|
|
28
|
+
// "out": "proto.json"
|
|
29
|
+
// }
|
|
30
|
+
// }
|
|
31
|
+
// ]
|
|
32
|
+
// }
|
|
33
|
+
//
|
|
34
|
+
// Declared AFTER any fetch-bsr step that writes into the same tree: extract
|
|
35
|
+
// steps run in list order, so a fetch declared first has already written its
|
|
36
|
+
// protos and its lock by the time this reads them.
|
|
37
|
+
package main
|
|
38
|
+
|
|
39
|
+
import (
|
|
40
|
+
"fmt"
|
|
41
|
+
"io"
|
|
42
|
+
"os"
|
|
43
|
+
|
|
44
|
+
"github.com/shortlink-org/portolan/plugin"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
// Options are what the manifest tells the extractor: the things a .proto does
|
|
48
|
+
// not say about the estate it belongs to.
|
|
49
|
+
type Options struct {
|
|
50
|
+
Context string `json:"context"`
|
|
51
|
+
Service string `json:"service"`
|
|
52
|
+
|
|
53
|
+
// Paths are directories of protos this service PUBLISHES, relative to the
|
|
54
|
+
// input root. They become what it provides.
|
|
55
|
+
Paths []string `json:"paths,omitempty"`
|
|
56
|
+
|
|
57
|
+
// Vendored are directories of client copies this service CONSUMES. They
|
|
58
|
+
// become what it calls.
|
|
59
|
+
//
|
|
60
|
+
// An explicit list rather than a glob: which copies a service is allowed to
|
|
61
|
+
// keep is an architectural boundary, and a boundary spelled out in the
|
|
62
|
+
// manifest is one a reviewer can see change.
|
|
63
|
+
Vendored []string `json:"vendored,omitempty"`
|
|
64
|
+
|
|
65
|
+
// Peers maps a proto package to the service id that answers on it.
|
|
66
|
+
//
|
|
67
|
+
// The only way a consumer-side extractor can name a peer. Without an entry
|
|
68
|
+
// the call keeps the raw package name, which is exactly what `RpcCall.peer`
|
|
69
|
+
// documents - guessing a service id from a package would be inventing an
|
|
70
|
+
// edge between two services.
|
|
71
|
+
Peers map[string]string `json:"peers,omitempty"`
|
|
72
|
+
|
|
73
|
+
// Modules maps a directory, relative to the input root, to the module id
|
|
74
|
+
// its protos belong to. Only needed where there is no lock file to say.
|
|
75
|
+
Modules map[string]string `json:"modules,omitempty"`
|
|
76
|
+
|
|
77
|
+
// Defs is "shared" (the default) or "off". Shared promotes a message the
|
|
78
|
+
// author put in another file to a catalog.defs entry, on the reasoning that
|
|
79
|
+
// an import is their own signal the type is not local.
|
|
80
|
+
Defs string `json:"defs,omitempty"`
|
|
81
|
+
|
|
82
|
+
Out string `json:"out,omitempty"`
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
func main() {
|
|
86
|
+
if err := run(os.Stdin, os.Stdout); err != nil {
|
|
87
|
+
fmt.Fprintln(os.Stderr, "portolan-extract-proto:", err)
|
|
88
|
+
os.Exit(1)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
func run(stdin io.Reader, stdout io.Writer) error {
|
|
93
|
+
return plugin.Serve(stdin, stdout, descriptor(), func(req plugin.Request, opts Options) (plugin.Response, error) {
|
|
94
|
+
if req.Input.Root == "" {
|
|
95
|
+
return plugin.Response{}, fmt.Errorf("no input root: an extractor has nothing to read")
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return extract(req.Input, opts)
|
|
99
|
+
})
|
|
100
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
// Where a set of .proto files came from.
|
|
4
|
+
//
|
|
5
|
+
// Two answers are possible and both are honest. A directory written into by
|
|
6
|
+
// `fetch-bsr` has a `bsr.lock.json` beside it saying which module and which
|
|
7
|
+
// commit; a directory of protos the estate simply keeps has neither, and gets a
|
|
8
|
+
// `local:` id so nobody mistakes the path for something they could go and
|
|
9
|
+
// fetch.
|
|
10
|
+
|
|
11
|
+
import (
|
|
12
|
+
"encoding/json"
|
|
13
|
+
"os"
|
|
14
|
+
"path/filepath"
|
|
15
|
+
"sort"
|
|
16
|
+
"strings"
|
|
17
|
+
|
|
18
|
+
"github.com/shortlink-org/portolan/catalog"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
// lockFile is the shape fetch-bsr writes. Read here rather than shared, because
|
|
22
|
+
// the two plugins are separate programs on purpose: one may run without the
|
|
23
|
+
// other ever having existed.
|
|
24
|
+
type lockFile struct {
|
|
25
|
+
Modules []lockModule `json:"modules"`
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
type lockModule struct {
|
|
29
|
+
Module string `json:"module"`
|
|
30
|
+
Commit string `json:"commit"`
|
|
31
|
+
Digest string `json:"digest"`
|
|
32
|
+
Deps []string `json:"deps,omitempty"`
|
|
33
|
+
Files []lockEntry `json:"files"`
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type lockEntry struct {
|
|
37
|
+
Path string `json:"path"`
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const lockName = "bsr.lock.json"
|
|
41
|
+
|
|
42
|
+
// readLock loads the lock beside a directory of protos, if there is one.
|
|
43
|
+
func readLock(dir string) (*lockFile, error) {
|
|
44
|
+
raw, err := os.ReadFile(filepath.Join(dir, lockName))
|
|
45
|
+
if os.IsNotExist(err) {
|
|
46
|
+
return nil, nil
|
|
47
|
+
}
|
|
48
|
+
if err != nil {
|
|
49
|
+
return nil, err
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
var lock lockFile
|
|
53
|
+
if err := json.Unmarshal(raw, &lock); err != nil {
|
|
54
|
+
return nil, err
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return &lock, nil
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// moduleFor describes the set of protos under one directory.
|
|
61
|
+
//
|
|
62
|
+
// packages and files come from what was actually parsed rather than from the
|
|
63
|
+
// lock, because the lock says what was fetched and this says what portolan
|
|
64
|
+
// could read - and when they disagree, the second is the one a reader needs.
|
|
65
|
+
func moduleFor(id, dir string, files []*File) catalog.ProtoModule {
|
|
66
|
+
packages := map[string]bool{}
|
|
67
|
+
paths := make([]string, 0, len(files))
|
|
68
|
+
for _, file := range files {
|
|
69
|
+
if file.Package != "" {
|
|
70
|
+
packages[file.Package] = true
|
|
71
|
+
}
|
|
72
|
+
paths = append(paths, relativeTo(dir, file.Path))
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
module := catalog.ProtoModule{
|
|
76
|
+
ID: id,
|
|
77
|
+
Slug: moduleSlug(id),
|
|
78
|
+
Name: moduleName(id),
|
|
79
|
+
Registry: registryOf(id),
|
|
80
|
+
Packages: sortedKeys(packages),
|
|
81
|
+
Files: sortedCopy(paths),
|
|
82
|
+
Source: filepath.ToSlash(dir),
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return module
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
func relativeTo(dir, path string) string {
|
|
89
|
+
rel, err := filepath.Rel(dir, path)
|
|
90
|
+
if err != nil {
|
|
91
|
+
return filepath.ToSlash(path)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return filepath.ToSlash(rel)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// sortedKeys and sortedCopy exist because the fragment is committed and
|
|
98
|
+
// compared by `gen:check`. A map iterated in Go's order writes a different file
|
|
99
|
+
// every run, which would turn every build into a diff.
|
|
100
|
+
func sortedKeys(set map[string]bool) []string {
|
|
101
|
+
out := make([]string, 0, len(set))
|
|
102
|
+
for k := range set {
|
|
103
|
+
out = append(out, k)
|
|
104
|
+
}
|
|
105
|
+
sort.Strings(out)
|
|
106
|
+
|
|
107
|
+
return out
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
func sortedCopy(in []string) []string {
|
|
111
|
+
out := append([]string(nil), in...)
|
|
112
|
+
sort.Strings(out)
|
|
113
|
+
|
|
114
|
+
return out
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// trimSlash keeps a directory option comparable however it was written.
|
|
118
|
+
func trimSlash(dir string) string {
|
|
119
|
+
return strings.TrimSuffix(filepath.ToSlash(dir), "/")
|
|
120
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"additionalProperties": false,
|
|
4
|
+
"required": ["context", "service"],
|
|
5
|
+
"properties": {
|
|
6
|
+
"context": {
|
|
7
|
+
"type": "string",
|
|
8
|
+
"description": "Slug of the bounded context the service belongs to. A .proto knows its package, not which context owns it.",
|
|
9
|
+
"examples": ["shop"]
|
|
10
|
+
},
|
|
11
|
+
"service": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "Slug of the service that publishes or calls these protos.",
|
|
14
|
+
"examples": ["oms"]
|
|
15
|
+
},
|
|
16
|
+
"paths": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": { "type": "string" },
|
|
19
|
+
"description": "Directories of protos this service publishes, relative to the input root. They become what it provides. A directory fetch-bsr wrote carries its lock, and the lock says which module the protos came from.",
|
|
20
|
+
"examples": [["vendor/proto/shortlink-org/portolan-shop-order"]]
|
|
21
|
+
},
|
|
22
|
+
"vendored": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": { "type": "string" },
|
|
25
|
+
"description": "Directories of client copies this service consumes, relative to the input root. They become what it calls. Listed rather than globbed: which copies a service may keep is a boundary a reviewer should see change.",
|
|
26
|
+
"examples": [["src/infrastructure/payments/proto"]]
|
|
27
|
+
},
|
|
28
|
+
"peers": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": { "type": "string" },
|
|
31
|
+
"description": "Which service answers for a vendored copy, as the proto package to its service id. A package with no line here is called as unknown and its steps stay unresolved.",
|
|
32
|
+
"examples": [{ "payments.v1": "payments.ledger" }]
|
|
33
|
+
},
|
|
34
|
+
"modules": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": { "type": "string" },
|
|
37
|
+
"description": "Which module a directory's protos belong to, as the directory relative to the input root to the module id. Only needed where there is no lock beside them to say.",
|
|
38
|
+
"examples": [{ "src/infrastructure/payments/proto": "buf.build/shortlink-org/portolan-payments-payment" }]
|
|
39
|
+
},
|
|
40
|
+
"defs": {
|
|
41
|
+
"enum": ["shared", "off"],
|
|
42
|
+
"description": "Whether a message imported from another file is promoted to a shared type, on the reasoning that the import is the author's own signal it is not local.",
|
|
43
|
+
"default": "shared"
|
|
44
|
+
},
|
|
45
|
+
"out": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Name of the fragment file, inside the step's output directory.",
|
|
48
|
+
"default": "proto.json"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|