@voxgig/sdkgen 4.21.0 → 4.23.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/bin/voxgig-sdkgen +1 -1
- package/dist/action/action.js +0 -65
- package/dist/action/action.js.map +1 -1
- package/dist/action/check.js +0 -88
- package/dist/action/check.js.map +1 -1
- package/dist/action/dispatch.js +0 -27
- package/dist/action/dispatch.js.map +1 -1
- package/dist/action/doctor.d.ts +1 -0
- package/dist/action/doctor.js +55 -321
- package/dist/action/doctor.js.map +1 -1
- package/dist/action/edition.js +1 -87
- package/dist/action/edition.js.map +1 -1
- package/dist/action/feature.js +0 -48
- package/dist/action/feature.js.map +1 -1
- package/dist/action/kind.js +0 -132
- package/dist/action/kind.js.map +1 -1
- package/dist/action/package.js +0 -221
- package/dist/action/package.js.map +1 -1
- package/dist/action/resolve.js +0 -145
- package/dist/action/resolve.js.map +1 -1
- package/dist/action/target.js +0 -177
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/AgentGuide.js +0 -7
- package/dist/cmp/AgentGuide.js.map +1 -1
- package/dist/cmp/AgentGuideContent.js +0 -24
- package/dist/cmp/AgentGuideContent.js.map +1 -1
- package/dist/cmp/AgentGuideTop.js +0 -7
- package/dist/cmp/AgentGuideTop.js.map +1 -1
- package/dist/cmp/Changelog.js +0 -14
- package/dist/cmp/Changelog.js.map +1 -1
- package/dist/cmp/Deploy.js +1 -31
- package/dist/cmp/Deploy.js.map +1 -1
- package/dist/cmp/Entity.js +0 -4
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/ExternalTarget.js +0 -36
- package/dist/cmp/ExternalTarget.js.map +1 -1
- package/dist/cmp/Feature.js +0 -14
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureDocs.js +0 -25
- package/dist/cmp/FeatureDocs.js.map +1 -1
- package/dist/cmp/PublishWorkflow.js +0 -60
- package/dist/cmp/PublishWorkflow.js.map +1 -1
- package/dist/cmp/ReadmeErrors.js +0 -2
- package/dist/cmp/ReadmeErrors.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +0 -5
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeFeatures.js +0 -10
- package/dist/cmp/ReadmeFeatures.js.map +1 -1
- package/dist/cmp/ReadmeRefFeatures.js +0 -19
- package/dist/cmp/ReadmeRefFeatures.js.map +1 -1
- package/dist/cmp/ReadmeStation.js +0 -19
- package/dist/cmp/ReadmeStation.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +1 -81
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/ReadmeUnions.js +1 -16
- package/dist/cmp/ReadmeUnions.js.map +1 -1
- package/dist/cmp/Registered.js +0 -30
- package/dist/cmp/Registered.js.map +1 -1
- package/dist/cmp/Security.js +0 -2
- package/dist/cmp/Security.js.map +1 -1
- package/dist/cmp/Test.js +3 -2
- package/dist/cmp/Test.js.map +1 -1
- package/dist/cmp/TestControl.js +0 -25
- package/dist/cmp/TestControl.js.map +1 -1
- package/dist/helpers/applicability.js +0 -60
- package/dist/helpers/applicability.js.map +1 -1
- package/dist/helpers/buildIdNames.d.ts +3 -1
- package/dist/helpers/buildIdNames.js +15 -19
- package/dist/helpers/buildIdNames.js.map +1 -1
- package/dist/helpers/canonSpec.js +2 -116
- package/dist/helpers/canonSpec.js.map +1 -1
- package/dist/helpers/canonType.js +0 -87
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.js +0 -27
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/definition.js +0 -29
- package/dist/helpers/definition.js.map +1 -1
- package/dist/helpers/dryrun.js +0 -8
- package/dist/helpers/dryrun.js.map +1 -1
- package/dist/helpers/featureSource.js +0 -145
- package/dist/helpers/featureSource.js.map +1 -1
- package/dist/helpers/getMatchEntries.js +2 -6
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/junk.js +9 -85
- package/dist/helpers/junk.js.map +1 -1
- package/dist/helpers/manifest.js +0 -138
- package/dist/helpers/manifest.js.map +1 -1
- package/dist/helpers/modelNames.js +5 -79
- package/dist/helpers/modelNames.js.map +1 -1
- package/dist/helpers/modelcheck.js +0 -106
- package/dist/helpers/modelcheck.js.map +1 -1
- package/dist/helpers/naming.d.ts +0 -1
- package/dist/helpers/naming.js +0 -303
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/opExample.js +0 -51
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.js +33 -231
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/optspec.js +0 -77
- package/dist/helpers/optspec.js.map +1 -1
- package/dist/helpers/packageMeta.js +1 -200
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/helpers/pointPath.js +5 -65
- package/dist/helpers/pointPath.js.map +1 -1
- package/dist/helpers/resolved.d.ts +6 -0
- package/dist/helpers/resolved.js +22 -0
- package/dist/helpers/resolved.js.map +1 -0
- package/dist/helpers/semver.js +0 -61
- package/dist/helpers/semver.js.map +1 -1
- package/dist/helpers/serverVars.js +0 -44
- package/dist/helpers/serverVars.js.map +1 -1
- package/dist/helpers/shipped.js +0 -14
- package/dist/helpers/shipped.js.map +1 -1
- package/dist/helpers/station.js +0 -32
- package/dist/helpers/station.js.map +1 -1
- package/dist/helpers/stdrep.js +0 -26
- package/dist/helpers/stdrep.js.map +1 -1
- package/dist/helpers/testPolicy.js +0 -4
- package/dist/helpers/testPolicy.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -2
- package/dist/sdkgen.js +15 -242
- package/dist/sdkgen.js.map +1 -1
- package/dist/testkit.js +6 -266
- package/dist/testkit.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.js +15 -250
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aon +12 -489
- package/package.json +4 -4
- package/project/.sdk/model/feature/audit.aon +0 -7
- package/project/.sdk/model/feature/cache.aon +0 -7
- package/project/.sdk/model/feature/clienttrack.aon +0 -7
- package/project/.sdk/model/feature/cost.aon +0 -13
- package/project/.sdk/model/feature/debug.aon +0 -7
- package/project/.sdk/model/feature/idempotency.aon +0 -7
- package/project/.sdk/model/feature/log.aon +0 -7
- package/project/.sdk/model/feature/metrics.aon +0 -7
- package/project/.sdk/model/feature/netsim.aon +0 -10
- package/project/.sdk/model/feature/paging.aon +0 -7
- package/project/.sdk/model/feature/proxy.aon +0 -7
- package/project/.sdk/model/feature/ratelimit.aon +0 -7
- package/project/.sdk/model/feature/retry.aon +0 -7
- package/project/.sdk/model/feature/secrets.aon +0 -482
- package/project/.sdk/model/feature/streaming.aon +0 -7
- package/project/.sdk/model/feature/telemetry.aon +0 -7
- package/project/.sdk/model/feature/test.aon +1 -8
- package/project/.sdk/model/feature/timeout.aon +0 -7
- package/project/.sdk/model/feature/validate.aon +0 -32
- package/project/.sdk/model/target/c.aon +0 -41
- package/project/.sdk/model/target/clojure.aon +0 -36
- package/project/.sdk/model/target/cpp.aon +0 -42
- package/project/.sdk/model/target/csharp.aon +0 -26
- package/project/.sdk/model/target/elixir.aon +0 -22
- package/project/.sdk/model/target/go-cli.aon +0 -30
- package/project/.sdk/model/target/go-mcp.aon +0 -21
- package/project/.sdk/model/target/go.aon +0 -9
- package/project/.sdk/model/target/java.aon +0 -29
- package/project/.sdk/model/target/js.aon +2 -21
- package/project/.sdk/model/target/kotlin.aon +0 -31
- package/project/.sdk/model/target/lua.aon +0 -32
- package/project/.sdk/model/target/ocaml.aon +0 -64
- package/project/.sdk/model/target/perl.aon +0 -20
- package/project/.sdk/model/target/php.aon +0 -17
- package/project/.sdk/model/target/py-data.aon +0 -33
- package/project/.sdk/model/target/py.aon +0 -17
- package/project/.sdk/model/target/rb.aon +0 -17
- package/project/.sdk/model/target/rust.aon +0 -25
- package/project/.sdk/model/target/scala.aon +0 -74
- package/project/.sdk/model/target/swift.aon +0 -41
- package/project/.sdk/model/target/ts.aon +3 -25
- package/project/.sdk/model/target/zig.aon +0 -50
- package/project/.sdk/src/cmp/c/Config_c.ts +0 -100
- package/project/.sdk/src/cmp/c/EntityTypes_c.ts +4 -40
- package/project/.sdk/src/cmp/c/Main_c.ts +0 -44
- package/project/.sdk/src/cmp/c/Package_c.ts +0 -14
- package/project/.sdk/src/cmp/c/PrepareAuth_c.ts +0 -85
- package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +3 -3
- package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +0 -20
- package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +3 -3
- package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +7 -10
- package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +0 -2
- package/project/.sdk/src/cmp/c/Schema_c.ts +1 -20
- package/project/.sdk/src/cmp/c/TestDirect_c.ts +12 -12
- package/project/.sdk/src/cmp/c/utility_c.ts +0 -47
- package/project/.sdk/src/cmp/clojure/Config_clojure.ts +0 -63
- package/project/.sdk/src/cmp/clojure/Entity_clojure.ts +0 -1
- package/project/.sdk/src/cmp/clojure/Main_clojure.ts +0 -41
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +0 -20
- package/project/.sdk/src/cmp/clojure/PrepareAuth_clojure.ts +0 -130
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +3 -3
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +0 -16
- package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +3 -3
- package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +7 -10
- package/project/.sdk/src/cmp/clojure/Schema_clojure.ts +1 -21
- package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +0 -6
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +0 -10
- package/project/.sdk/src/cmp/clojure/Test_clojure.ts +0 -8
- package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +0 -34
- package/project/.sdk/src/cmp/clojure/utility_clojure.ts +0 -47
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +0 -109
- package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +3 -39
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +0 -47
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +0 -14
- package/project/.sdk/src/cmp/cpp/PrepareAuth_cpp.ts +0 -125
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/ReadmeExamplesTest_cpp.ts +0 -19
- package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +0 -7
- package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +7 -10
- package/project/.sdk/src/cmp/cpp/Schema_cpp.ts +1 -22
- package/project/.sdk/src/cmp/cpp/TestDirect_cpp.ts +14 -14
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +51 -53
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +0 -3
- package/project/.sdk/src/cmp/cpp/utility_cpp.ts +0 -28
- package/project/.sdk/src/cmp/csharp/Config_csharp.ts +0 -79
- package/project/.sdk/src/cmp/csharp/EntityOperation_csharp.ts +0 -3
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +4 -54
- package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +0 -1
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +0 -24
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +0 -20
- package/project/.sdk/src/cmp/csharp/PrepareAuth_csharp.ts +0 -81
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +3 -4
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +0 -23
- package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +7 -10
- package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +0 -2
- package/project/.sdk/src/cmp/csharp/Schema_csharp.ts +1 -19
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +30 -30
- package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +66 -69
- package/project/.sdk/src/cmp/csharp/utility_csharp.ts +0 -72
- package/project/.sdk/src/cmp/elixir/Config_elixir.ts +0 -78
- package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +4 -42
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +0 -40
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +0 -13
- package/project/.sdk/src/cmp/elixir/PrepareAuth_elixir.ts +0 -123
- package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +3 -3
- package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +0 -19
- package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +3 -3
- package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +6 -9
- package/project/.sdk/src/cmp/elixir/Schema_elixir.ts +1 -25
- package/project/.sdk/src/cmp/elixir/utility_elixir.ts +0 -34
- package/project/.sdk/src/cmp/go/Config_go.ts +0 -41
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +4 -75
- package/project/.sdk/src/cmp/go/Entity_go.ts +0 -5
- package/project/.sdk/src/cmp/go/Main_go.ts +0 -28
- package/project/.sdk/src/cmp/go/Package_go.ts +0 -7
- package/project/.sdk/src/cmp/go/PrepareAuth_go.ts +0 -64
- package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +3 -8
- package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +0 -30
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +0 -3
- package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +0 -7
- package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +3 -14
- package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +0 -21
- package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +7 -19
- package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +0 -9
- package/project/.sdk/src/cmp/go/Schema_go.ts +1 -22
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +38 -61
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +75 -82
- package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +0 -21
- package/project/.sdk/src/cmp/go/fragment/Main.fragment.go +0 -12
- package/project/.sdk/src/cmp/go/utility_go.ts +5 -75
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +0 -49
- package/project/.sdk/src/cmp/go-cli/fragment/words.fragment.go +0 -12
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +0 -36
- package/project/.sdk/src/cmp/go-mcp/fragment/main.fragment.go +0 -20
- package/project/.sdk/src/cmp/go-mcp/fragment/tools.fragment.go +0 -3
- package/project/.sdk/src/cmp/java/Config_java.ts +0 -63
- package/project/.sdk/src/cmp/java/EntityTypes_java.ts +4 -54
- package/project/.sdk/src/cmp/java/Entity_java.ts +0 -6
- package/project/.sdk/src/cmp/java/Main_java.ts +0 -24
- package/project/.sdk/src/cmp/java/PrepareAuth_java.ts +0 -55
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +3 -4
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +0 -20
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +3 -3
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +0 -4
- package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +7 -10
- package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +0 -7
- package/project/.sdk/src/cmp/java/Schema_java.ts +1 -20
- package/project/.sdk/src/cmp/java/TestDirect_java.ts +30 -37
- package/project/.sdk/src/cmp/java/TestEntity_java.ts +69 -72
- package/project/.sdk/src/cmp/java/Test_java.ts +0 -6
- package/project/.sdk/src/cmp/java/utility_java.ts +0 -33
- package/project/.sdk/src/cmp/js/Config_js.ts +0 -46
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +5 -38
- package/project/.sdk/src/cmp/js/Main_js.ts +0 -33
- package/project/.sdk/src/cmp/js/Package_js.ts +2 -7
- package/project/.sdk/src/cmp/js/PrepareAuth_js.ts +0 -57
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +3 -12
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +0 -2
- package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +3 -3
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +0 -15
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +7 -12
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +0 -7
- package/project/.sdk/src/cmp/js/Schema_js.ts +1 -22
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +29 -43
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +69 -82
- package/project/.sdk/src/cmp/js/TestLive_js.ts +12 -5
- package/project/.sdk/src/cmp/js/utility_js.ts +5 -63
- package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +0 -46
- package/project/.sdk/src/cmp/kotlin/EntityOperation_kotlin.ts +0 -2
- package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +4 -57
- package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +0 -4
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +0 -46
- package/project/.sdk/src/cmp/kotlin/PrepareAuth_kotlin.ts +0 -113
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +3 -4
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +0 -20
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +7 -10
- package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +0 -5
- package/project/.sdk/src/cmp/kotlin/Schema_kotlin.ts +1 -20
- package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +30 -30
- package/project/.sdk/src/cmp/kotlin/TestEntity_kotlin.ts +67 -70
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +0 -6
- package/project/.sdk/src/cmp/kotlin/utility_kotlin.ts +0 -33
- package/project/.sdk/src/cmp/lua/Config_lua.ts +0 -56
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +5 -35
- package/project/.sdk/src/cmp/lua/Entity_lua.ts +0 -7
- package/project/.sdk/src/cmp/lua/Main_lua.ts +0 -58
- package/project/.sdk/src/cmp/lua/Package_lua.ts +0 -20
- package/project/.sdk/src/cmp/lua/PrepareAuth_lua.ts +0 -61
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +3 -11
- package/project/.sdk/src/cmp/lua/ReadmeExamplesTest_lua.ts +0 -24
- package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +3 -13
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +4 -25
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +7 -17
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +0 -3
- package/project/.sdk/src/cmp/lua/Schema_lua.ts +1 -17
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +25 -27
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +66 -65
- package/project/.sdk/src/cmp/lua/utility_lua.ts +0 -30
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +0 -98
- package/project/.sdk/src/cmp/ocaml/EntityOperation_ocaml.ts +0 -6
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +0 -78
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +0 -13
- package/project/.sdk/src/cmp/ocaml/PrepareAuth_ocaml.ts +0 -145
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +3 -3
- package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +0 -17
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +3 -3
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +7 -10
- package/project/.sdk/src/cmp/ocaml/Schema_ocaml.ts +1 -24
- package/project/.sdk/src/cmp/ocaml/SdkError_ocaml.ts +0 -4
- package/project/.sdk/src/cmp/ocaml/TestEntity_ocaml.ts +0 -5
- package/project/.sdk/src/cmp/ocaml/utility_ocaml.ts +0 -27
- package/project/.sdk/src/cmp/perl/Config_perl.ts +0 -52
- package/project/.sdk/src/cmp/perl/Entity_perl.ts +0 -3
- package/project/.sdk/src/cmp/perl/Main_perl.ts +0 -33
- package/project/.sdk/src/cmp/perl/Package_perl.ts +0 -8
- package/project/.sdk/src/cmp/perl/PrepareAuth_perl.ts +0 -84
- package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +3 -6
- package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +0 -27
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +7 -10
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +0 -2
- package/project/.sdk/src/cmp/perl/Schema_perl.ts +1 -19
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +25 -27
- package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +60 -59
- package/project/.sdk/src/cmp/perl/utility_perl.ts +0 -26
- package/project/.sdk/src/cmp/php/Config_php.ts +0 -76
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +5 -56
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +0 -6
- package/project/.sdk/src/cmp/php/Main_php.ts +0 -15
- package/project/.sdk/src/cmp/php/PrepareAuth_php.ts +0 -73
- package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +3 -7
- package/project/.sdk/src/cmp/php/ReadmeExamplesTest_php.ts +0 -33
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +0 -1
- package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +3 -3
- package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +4 -23
- package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +7 -12
- package/project/.sdk/src/cmp/php/Schema_php.ts +1 -16
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +25 -25
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +66 -74
- package/project/.sdk/src/cmp/php/utility_php.ts +0 -22
- package/project/.sdk/src/cmp/py/Config_py.ts +0 -53
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +4 -59
- package/project/.sdk/src/cmp/py/Entity_py.ts +0 -16
- package/project/.sdk/src/cmp/py/Main_py.ts +1 -61
- package/project/.sdk/src/cmp/py/Package_py.ts +0 -3
- package/project/.sdk/src/cmp/py/PrepareAuth_py.ts +0 -69
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +3 -16
- package/project/.sdk/src/cmp/py/ReadmeExamplesTest_py.ts +0 -31
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +0 -3
- package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +0 -28
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +7 -21
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +0 -14
- package/project/.sdk/src/cmp/py/Schema_py.ts +1 -20
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +25 -27
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +66 -65
- package/project/.sdk/src/cmp/py/utility_py.ts +0 -22
- package/project/.sdk/src/cmp/py-data/Main_py-data.ts +13 -47
- package/project/.sdk/src/cmp/rb/Config_rb.ts +0 -56
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +4 -62
- package/project/.sdk/src/cmp/rb/Entity_rb.ts +0 -3
- package/project/.sdk/src/cmp/rb/Main_rb.ts +0 -10
- package/project/.sdk/src/cmp/rb/Package_rb.ts +0 -5
- package/project/.sdk/src/cmp/rb/PrepareAuth_rb.ts +0 -81
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +3 -10
- package/project/.sdk/src/cmp/rb/ReadmeExamplesTest_rb.ts +0 -32
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +0 -9
- package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +4 -27
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +7 -15
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +0 -5
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +0 -3
- package/project/.sdk/src/cmp/rb/Schema_rb.ts +1 -16
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +25 -27
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +66 -65
- package/project/.sdk/src/cmp/rb/utility_rb.ts +0 -22
- package/project/.sdk/src/cmp/rust/Config_rust.ts +0 -35
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +4 -38
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +0 -9
- package/project/.sdk/src/cmp/rust/Main_rust.ts +0 -58
- package/project/.sdk/src/cmp/rust/Package_rust.ts +0 -30
- package/project/.sdk/src/cmp/rust/PrepareAuth_rust.ts +0 -84
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +0 -16
- package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +7 -10
- package/project/.sdk/src/cmp/rust/Schema_rust.ts +1 -19
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +18 -25
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +63 -71
- package/project/.sdk/src/cmp/rust/fragment/Entity.fragment.rs +0 -14
- package/project/.sdk/src/cmp/rust/fragment/EntityRemoveOp.fragment.rs +0 -4
- package/project/.sdk/src/cmp/rust/fragment/Main.fragment.rs +0 -20
- package/project/.sdk/src/cmp/rust/fragment/SdkError.fragment.rs +0 -6
- package/project/.sdk/src/cmp/rust/utility_rust.ts +0 -47
- package/project/.sdk/src/cmp/scala/Config_scala.ts +0 -31
- package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +4 -55
- package/project/.sdk/src/cmp/scala/Main_scala.ts +0 -78
- package/project/.sdk/src/cmp/scala/PrepareAuth_scala.ts +0 -102
- package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +3 -4
- package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +0 -23
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +7 -10
- package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +0 -5
- package/project/.sdk/src/cmp/scala/Schema_scala.ts +1 -20
- package/project/.sdk/src/cmp/scala/TestDirect_scala.ts +14 -14
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +60 -67
- package/project/.sdk/src/cmp/scala/Test_scala.ts +0 -3
- package/project/.sdk/src/cmp/scala/utility_scala.ts +0 -31
- package/project/.sdk/src/cmp/swift/Config_swift.ts +0 -62
- package/project/.sdk/src/cmp/swift/EntityOperation_swift.ts +0 -3
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +5 -44
- package/project/.sdk/src/cmp/swift/Main_swift.ts +0 -42
- package/project/.sdk/src/cmp/swift/Package_swift.ts +0 -69
- package/project/.sdk/src/cmp/swift/PrepareAuth_swift.ts +0 -134
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +3 -5
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +0 -22
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +7 -10
- package/project/.sdk/src/cmp/swift/Schema_swift.ts +1 -19
- package/project/.sdk/src/cmp/swift/TestEntity_swift.ts +0 -4
- package/project/.sdk/src/cmp/swift/utility_swift.ts +0 -51
- package/project/.sdk/src/cmp/ts/Config_ts.ts +0 -46
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +5 -39
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +0 -6
- package/project/.sdk/src/cmp/ts/Main_ts.ts +0 -28
- package/project/.sdk/src/cmp/ts/Package_ts.ts +2 -26
- package/project/.sdk/src/cmp/ts/PrepareAuth_ts.ts +0 -55
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +3 -12
- package/project/.sdk/src/cmp/ts/ReadmeExampleTest_ts.ts +0 -6
- package/project/.sdk/src/cmp/ts/ReadmeExamplesTest_ts.ts +0 -25
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +4 -9
- package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +0 -7
- package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +3 -6
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +1 -44
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +7 -25
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +0 -11
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +6 -9
- package/project/.sdk/src/cmp/ts/Schema_ts.ts +1 -22
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +42 -93
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +76 -107
- package/project/.sdk/src/cmp/ts/TestLive_ts.ts +12 -6
- package/project/.sdk/src/cmp/ts/Test_ts.ts +0 -4
- package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +0 -27
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +0 -7
- package/project/.sdk/src/cmp/ts/fragment/Direct.test.fragment.ts +0 -7
- package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +0 -1
- package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +0 -4
- package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +0 -20
- package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +0 -6
- package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +0 -6
- package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +0 -15
- package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +0 -6
- package/project/.sdk/src/cmp/ts/fragment/Main.fragment.ts +0 -15
- package/project/.sdk/src/cmp/ts/fragment/MainStation.fragment.ts +0 -12
- package/project/.sdk/src/cmp/ts/fragment/SdkError.fragment.ts +0 -9
- package/project/.sdk/src/cmp/ts/utility_ts.ts +5 -64
- package/project/.sdk/src/cmp/zig/Config_zig.ts +0 -70
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +0 -3
- package/project/.sdk/src/cmp/zig/Main_zig.ts +0 -83
- package/project/.sdk/src/cmp/zig/Package_zig.ts +0 -22
- package/project/.sdk/src/cmp/zig/PrepareAuth_zig.ts +0 -136
- package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +3 -3
- package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +0 -18
- package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +3 -3
- package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +0 -3
- package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +7 -10
- package/project/.sdk/src/cmp/zig/Schema_zig.ts +1 -24
- package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +0 -11
- package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +0 -8
- package/project/.sdk/src/cmp/zig/Test_zig.ts +0 -11
- package/project/.sdk/src/cmp/zig/utility_zig.ts +0 -47
- package/project/.sdk/tm/c/feature/test.c +20 -4
- package/project/.sdk/tm/clojure/src/sdk/features.clj +6 -4
- package/project/.sdk/tm/cpp/feature/test.hpp +17 -6
- package/project/.sdk/tm/csharp/feature/FeatureOptions.cs +18 -5
- package/project/.sdk/tm/csharp/feature/TestFeature.cs +10 -4
- package/project/.sdk/tm/elixir/lib/projectname/feature/test.ex +11 -5
- package/project/.sdk/tm/go/core/context.go +0 -9
- package/project/.sdk/tm/go/core/types.go +0 -3
- package/project/.sdk/tm/go/feature/audit_feature.go +0 -9
- package/project/.sdk/tm/go/feature/cache_feature.go +0 -8
- package/project/.sdk/tm/go/feature/clienttrack_feature.go +0 -7
- package/project/.sdk/tm/go/feature/cost_feature.go +0 -51
- package/project/.sdk/tm/go/feature/debug_feature.go +0 -6
- package/project/.sdk/tm/go/feature/feature_options.go +108 -21
- package/project/.sdk/tm/go/feature/idempotency_feature.go +0 -6
- package/project/.sdk/tm/go/feature/metrics_feature.go +0 -6
- package/project/.sdk/tm/go/feature/netsim_feature.go +0 -8
- package/project/.sdk/tm/go/feature/paging_feature.go +0 -9
- package/project/.sdk/tm/go/feature/proxy_feature.go +0 -7
- package/project/.sdk/tm/go/feature/ratelimit_feature.go +0 -6
- package/project/.sdk/tm/go/feature/rbac_feature.go +0 -10
- package/project/.sdk/tm/go/feature/retry_feature.go +0 -6
- package/project/.sdk/tm/go/feature/secrets_feature.go +0 -173
- package/project/.sdk/tm/go/feature/streaming_feature.go +0 -7
- package/project/.sdk/tm/go/feature/telemetry_feature.go +0 -8
- package/project/.sdk/tm/go/feature/test_feature.go +0 -23
- package/project/.sdk/tm/go/feature/validate_feature.go +0 -66
- package/project/.sdk/tm/go/test/custom_utility_test.go +0 -29
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +0 -100
- package/project/.sdk/tm/go/test/feature_corpus_test.go +1 -60
- package/project/.sdk/tm/go/test/feature_harness_test.go +0 -10
- package/project/.sdk/tm/go/test/feature_test.go +107 -9
- package/project/.sdk/tm/go/test/omniresolver_test.go +0 -74
- package/project/.sdk/tm/go/test/omnismoke_test.go +0 -4
- package/project/.sdk/tm/go/test/pipeline_test.go +0 -10
- package/project/.sdk/tm/go/test/primary_utility_test.go +0 -32
- package/project/.sdk/tm/go/test/struct_utility_test.go +0 -38
- package/project/.sdk/tm/go/test/testsupport_test.go +0 -25
- package/project/.sdk/tm/go/utility/feature_add.go +0 -6
- package/project/.sdk/tm/go/utility/fetcher.go +0 -6
- package/project/.sdk/tm/go/utility/graphql.go +1 -31
- package/project/.sdk/tm/go/utility/make_options.go +38 -49
- package/project/.sdk/tm/go/utility/make_point.go +0 -11
- package/project/.sdk/tm/go/utility/make_spec.go +0 -15
- package/project/.sdk/tm/go/utility/register.go +0 -28
- package/project/.sdk/tm/go/utility/transform_request.go +0 -20
- package/project/.sdk/tm/go/utility/transform_response.go +0 -8
- package/project/.sdk/tm/java/feature/TestFeature.java +11 -6
- package/project/.sdk/tm/js/src/feature/test/TestFeature.js +12 -4
- package/project/.sdk/tm/js/test/live-entity.js +29 -29
- package/project/.sdk/tm/js/test/live-scenarios.js +4 -4
- package/project/.sdk/tm/kotlin/feature/TestFeature.kt +8 -4
- package/project/.sdk/tm/ocaml/sdk_features.ml +6 -4
- package/project/.sdk/tm/perl/feature/test_feature.pm +6 -4
- package/project/.sdk/tm/rb/feature/test_feature.rb +6 -4
- package/project/.sdk/tm/rust/core/context.rs +0 -5
- package/project/.sdk/tm/rust/core/control.rs +0 -1
- package/project/.sdk/tm/rust/core/helpers.rs +0 -15
- package/project/.sdk/tm/rust/core/operation.rs +0 -1
- package/project/.sdk/tm/rust/core/point.rs +0 -3
- package/project/.sdk/tm/rust/core/response.rs +0 -2
- package/project/.sdk/tm/rust/core/result.rs +0 -1
- package/project/.sdk/tm/rust/core/spec.rs +0 -1
- package/project/.sdk/tm/rust/core/types.rs +0 -20
- package/project/.sdk/tm/rust/core/utility_type.rs +0 -5
- package/project/.sdk/tm/rust/feature/audit.rs +0 -9
- package/project/.sdk/tm/rust/feature/base.rs +0 -3
- package/project/.sdk/tm/rust/feature/cache.rs +0 -9
- package/project/.sdk/tm/rust/feature/clienttrack.rs +0 -7
- package/project/.sdk/tm/rust/feature/cost.rs +0 -48
- package/project/.sdk/tm/rust/feature/debug.rs +0 -7
- package/project/.sdk/tm/rust/feature/idempotency.rs +0 -7
- package/project/.sdk/tm/rust/feature/log.rs +0 -3
- package/project/.sdk/tm/rust/feature/metrics.rs +0 -7
- package/project/.sdk/tm/rust/feature/netsim.rs +0 -9
- package/project/.sdk/tm/rust/feature/paging.rs +0 -10
- package/project/.sdk/tm/rust/feature/proxy.rs +0 -8
- package/project/.sdk/tm/rust/feature/ratelimit.rs +0 -6
- package/project/.sdk/tm/rust/feature/rbac.rs +0 -10
- package/project/.sdk/tm/rust/feature/retry.rs +0 -6
- package/project/.sdk/tm/rust/feature/secrets.rs +1 -187
- package/project/.sdk/tm/rust/feature/streaming.rs +0 -7
- package/project/.sdk/tm/rust/feature/support.rs +0 -6
- package/project/.sdk/tm/rust/feature/telemetry.rs +0 -9
- package/project/.sdk/tm/rust/feature/test.rs +8 -23
- package/project/.sdk/tm/rust/feature/timeout.rs +0 -7
- package/project/.sdk/tm/rust/feature/validate.rs +0 -81
- package/project/.sdk/tm/rust/tests/common/mod.rs +0 -35
- package/project/.sdk/tm/rust/tests/custom_utility_test.rs +0 -2
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +0 -95
- package/project/.sdk/tm/rust/tests/feature_test.rs +0 -16
- package/project/.sdk/tm/rust/tests/netsim_test.rs +0 -6
- package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +0 -135
- package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +0 -15
- package/project/.sdk/tm/rust/tests/pipeline_test.rs +0 -6
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +0 -22
- package/project/.sdk/tm/rust/tests/struct_utility_test.rs +0 -25
- package/project/.sdk/tm/rust/utility/fetcher.rs +0 -5
- package/project/.sdk/tm/rust/utility/graphql.rs +1 -30
- package/project/.sdk/tm/rust/utility/make_error.rs +0 -2
- package/project/.sdk/tm/rust/utility/make_options.rs +0 -46
- package/project/.sdk/tm/rust/utility/make_point.rs +0 -12
- package/project/.sdk/tm/rust/utility/make_spec.rs +0 -4
- package/project/.sdk/tm/rust/utility/voxgigstruct/consts.rs +14 -20
- package/project/.sdk/tm/rust/utility/voxgigstruct/major.rs +0 -13
- package/project/.sdk/tm/rust/utility/voxgigstruct/mini.rs +0 -14
- package/project/.sdk/tm/rust/utility/voxgigstruct/mod.rs +0 -2
- package/project/.sdk/tm/rust/utility/voxgigstruct/ordered_map.rs +0 -18
- package/project/.sdk/tm/rust/utility/voxgigstruct/re.rs +0 -11
- package/project/.sdk/tm/rust/utility/voxgigstruct/value.rs +0 -3
- package/project/.sdk/tm/scala/feature/TestFeature.scala +10 -6
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TestFeature.swift +10 -6
- package/project/.sdk/tm/ts/src/Context.ts +0 -5
- package/project/.sdk/tm/ts/src/feature/audit/AuditFeature.ts +0 -7
- package/project/.sdk/tm/ts/src/feature/cache/CacheFeature.ts +0 -8
- package/project/.sdk/tm/ts/src/feature/clienttrack/ClienttrackFeature.ts +0 -7
- package/project/.sdk/tm/ts/src/feature/cost/CostFeature.ts +0 -52
- package/project/.sdk/tm/ts/src/feature/debug/DebugFeature.ts +0 -6
- package/project/.sdk/tm/ts/src/feature/metrics/MetricsFeature.ts +0 -6
- package/project/.sdk/tm/ts/src/feature/netsim/NetsimFeature.ts +0 -8
- package/project/.sdk/tm/ts/src/feature/paging/PagingFeature.ts +0 -13
- package/project/.sdk/tm/ts/src/feature/proxy/ProxyFeature.ts +0 -8
- package/project/.sdk/tm/ts/src/feature/ratelimit/RatelimitFeature.ts +0 -6
- package/project/.sdk/tm/ts/src/feature/rbac/RbacFeature.ts +0 -9
- package/project/.sdk/tm/ts/src/feature/retry/RetryFeature.ts +0 -6
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +0 -136
- package/project/.sdk/tm/ts/src/feature/streaming/StreamingFeature.ts +0 -7
- package/project/.sdk/tm/ts/src/feature/telemetry/TelemetryFeature.ts +0 -7
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +13 -88
- package/project/.sdk/tm/ts/src/feature/validate/ValidateFeature.ts +0 -87
- package/project/.sdk/tm/ts/src/utility/CleanUtility.ts +0 -12
- package/project/.sdk/tm/ts/src/utility/FeatureAddUtility.ts +0 -1
- package/project/.sdk/tm/ts/src/utility/GraphqlUtility.ts +2 -30
- package/project/.sdk/tm/ts/src/utility/MakeErrorUtility.ts +0 -4
- package/project/.sdk/tm/ts/src/utility/MakeOptionsUtility.ts +0 -46
- package/project/.sdk/tm/ts/src/utility/MakePointUtility.ts +0 -34
- package/project/.sdk/tm/ts/src/utility/MakeRequestUtility.ts +0 -1
- package/project/.sdk/tm/ts/src/utility/MakeSpecUtility.ts +0 -5
- package/project/.sdk/tm/ts/src/utility/MakeUrlUtility.ts +0 -1
- package/project/.sdk/tm/ts/src/utility/ParamUtility.ts +0 -8
- package/project/.sdk/tm/ts/src/utility/PrepareBodyUtility.ts +0 -3
- package/project/.sdk/tm/ts/src/utility/PrepareParamsUtility.ts +0 -6
- package/project/.sdk/tm/ts/src/utility/ResultBasicUtility.ts +0 -1
- package/project/.sdk/tm/ts/src/utility/TransformRequestUtility.ts +0 -20
- package/project/.sdk/tm/ts/src/utility/TransformResponseUtility.ts +0 -4
- package/project/.sdk/tm/ts/test/exists.test.ts +0 -10
- package/project/.sdk/tm/ts/test/feature/Corpus.test.ts +0 -56
- package/project/.sdk/tm/ts/test/feature/harness.ts +0 -9
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +0 -106
- package/project/.sdk/tm/ts/test/live-contract.ts +0 -2
- package/project/.sdk/tm/ts/test/live-entity.ts +26 -26
- package/project/.sdk/tm/ts/test/live-scenarios.ts +3 -3
- package/project/.sdk/tm/ts/test/omni.ts +0 -32
- package/project/.sdk/tm/ts/test/pipeline.test.ts +45 -28
- package/project/.sdk/tm/ts/test/utility/Corpus.test.ts +0 -13
- package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +56 -29
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +0 -7
- package/project/.sdk/tm/ts/test/utility.ts +0 -55
- package/project/.sdk/tm/zig/feature/test.zig +11 -4
- package/project/sdkgen-package.json +1 -1
- package/src/action/action.ts +0 -65
- package/src/action/check.ts +0 -88
- package/src/action/dispatch.ts +0 -27
- package/src/action/doctor.ts +69 -329
- package/src/action/edition.ts +1 -87
- package/src/action/feature.ts +1 -49
- package/src/action/kind.ts +0 -149
- package/src/action/package.ts +0 -228
- package/src/action/resolve.ts +0 -148
- package/src/action/target.ts +0 -177
- package/src/cmp/AgentGuide.ts +0 -7
- package/src/cmp/AgentGuideContent.ts +0 -24
- package/src/cmp/AgentGuideTop.ts +0 -7
- package/src/cmp/Changelog.ts +0 -14
- package/src/cmp/Deploy.ts +1 -31
- package/src/cmp/Entity.ts +0 -4
- package/src/cmp/ExternalTarget.ts +0 -36
- package/src/cmp/Feature.ts +0 -14
- package/src/cmp/FeatureDocs.ts +0 -37
- package/src/cmp/PublishWorkflow.ts +0 -60
- package/src/cmp/ReadmeErrors.ts +0 -17
- package/src/cmp/ReadmeExplanation.ts +2 -11
- package/src/cmp/ReadmeFeatures.ts +0 -10
- package/src/cmp/ReadmeRefFeatures.ts +0 -19
- package/src/cmp/ReadmeStation.ts +0 -19
- package/src/cmp/ReadmeTop.ts +1 -81
- package/src/cmp/ReadmeUnions.ts +1 -16
- package/src/cmp/Registered.ts +0 -30
- package/src/cmp/Security.ts +0 -2
- package/src/cmp/Test.ts +4 -2
- package/src/cmp/TestControl.ts +0 -25
- package/src/helpers/applicability.ts +0 -60
- package/src/helpers/buildIdNames.ts +17 -19
- package/src/helpers/canonSpec.ts +2 -116
- package/src/helpers/canonType.ts +0 -87
- package/src/helpers/collectDeps.ts +0 -27
- package/src/helpers/definition.ts +0 -29
- package/src/helpers/dryrun.ts +0 -8
- package/src/helpers/featureSource.ts +0 -152
- package/src/helpers/getMatchEntries.ts +2 -6
- package/src/helpers/junk.ts +13 -89
- package/src/helpers/manifest.ts +0 -169
- package/src/helpers/modelNames.ts +6 -82
- package/src/helpers/modelcheck.ts +0 -106
- package/src/helpers/naming.ts +0 -303
- package/src/helpers/opExample.ts +0 -56
- package/src/helpers/opShape.ts +33 -233
- package/src/helpers/optspec.ts +0 -77
- package/src/helpers/packageMeta.ts +1 -200
- package/src/helpers/pointPath.ts +5 -65
- package/src/helpers/resolved.ts +39 -0
- package/src/helpers/semver.ts +0 -61
- package/src/helpers/serverVars.ts +0 -44
- package/src/helpers/shipped.ts +0 -14
- package/src/helpers/station.ts +0 -32
- package/src/helpers/stdrep.ts +0 -52
- package/src/helpers/testPolicy.ts +0 -4
- package/src/sdkgen.ts +18 -264
- package/src/testkit.ts +6 -312
- package/src/types.ts +1 -30
- package/src/utility.ts +16 -250
|
@@ -42,20 +42,14 @@ const Main = cmp(async function Main(props: any) {
|
|
|
42
42
|
// helpers/applicability.
|
|
43
43
|
const feature = targetFeatures(model, target)
|
|
44
44
|
|
|
45
|
-
// Does the secrets feature apply here and is it switched on? Both, since
|
|
46
|
-
// targetFeatures already dropped it for a target with no sekreto port.
|
|
47
45
|
const secrets = null != (feature as any).secrets
|
|
48
46
|
|
|
49
|
-
// The one package directory everything the SDK owns lives in.
|
|
50
47
|
const pkgdir = model.const.Name.toLowerCase() + '_sdk'
|
|
51
48
|
|
|
52
49
|
Package({ target })
|
|
53
50
|
|
|
54
51
|
Gitignore({})
|
|
55
52
|
|
|
56
|
-
// Root-level statics only (Makefile, LICENSE, test/). The runtime
|
|
57
|
-
// packages live under tm/py/pkg and are copied INSIDE the SDK package
|
|
58
|
-
// below.
|
|
59
53
|
Copy({
|
|
60
54
|
from: 'tm/' + target.name,
|
|
61
55
|
exclude: [/src\//, /pkg\//, TEST_CONTROL_EXCLUDE],
|
|
@@ -64,35 +58,16 @@ const Main = cmp(async function Main(props: any) {
|
|
|
64
58
|
}
|
|
65
59
|
})
|
|
66
60
|
|
|
67
|
-
// Everything the SDK owns lives inside ONE package directory.
|
|
68
|
-
//
|
|
69
|
-
// core/, entity/, feature/ and utility/ used to sit at the language root
|
|
70
|
-
// as top-level importable names. `core`, `entity` and `utility` are all
|
|
71
|
-
// real PyPI distributions AND common scratch filenames, and Python puts
|
|
72
|
-
// the working directory first on sys.path — so a single utility.py beside
|
|
73
|
-
// a notebook shadowed ours and the SDK died on
|
|
74
|
-
// `No module named 'utility.voxgig_struct'`. Nesting them behind the
|
|
75
|
-
// model-named package makes that impossible.
|
|
76
|
-
//
|
|
77
|
-
// The public import is unchanged: `from <name>_sdk import <Name>SDK`,
|
|
78
|
-
// because <name>_sdk.py becomes <name>_sdk/__init__.py.
|
|
79
61
|
Folder({ name: pkgdir }, () => {
|
|
80
62
|
|
|
81
63
|
Copy({
|
|
82
64
|
from: 'tm/' + target.name + '/pkg',
|
|
83
|
-
// An ACTIVE feature's INACTIVE plugins do not ship. py has no
|
|
84
|
-
// src/feature layout (srcfeature: false), so this blanket pkg copy is
|
|
85
|
-
// the one place the generate-time plugin trim can act; the model's
|
|
86
|
-
// `plugin.<group>.path` entries name their files relative to THIS
|
|
87
|
-
// copy's root ('feature/secrets/voxgig_sekreto/plugins/<kind>.py').
|
|
88
|
-
// See helpers/featureSource.pluginExcludes.
|
|
89
65
|
exclude: [...pluginExcludes(model)],
|
|
90
66
|
replace: {
|
|
91
67
|
...props.ctx$.stdrep,
|
|
92
68
|
}
|
|
93
69
|
})
|
|
94
70
|
|
|
95
|
-
// Generate main SDK file
|
|
96
71
|
File({ name: '__init__.' + target.ext }, () => {
|
|
97
72
|
|
|
98
73
|
Fragment(
|
|
@@ -101,22 +76,7 @@ const Main = cmp(async function Main(props: any) {
|
|
|
101
76
|
replace: {
|
|
102
77
|
...props.ctx$.stdrep,
|
|
103
78
|
|
|
104
|
-
|
|
105
|
-
// applies to this target AND the model activates it - an
|
|
106
|
-
// unconditional edit would land in every generated SDK, and with
|
|
107
|
-
// the feature off the marker line is REMOVED, so the inactive
|
|
108
|
-
// output is byte-identical to pre-migration. `feature` is
|
|
109
|
-
// already gated by targetFeatures, so a target that does not
|
|
110
|
-
// provide 'sekreto' never reaches these.
|
|
111
|
-
//
|
|
112
|
-
// CUSTOM-REGEX keys, like Entity_py's hook markers: jostraca's
|
|
113
|
-
// built-in `#Name` tag pattern is hardcoded to `//` comments,
|
|
114
|
-
// so a bare '#SecretsAccessor' key would silently never match a
|
|
115
|
-
// python `# #SecretsAccessor` marker line.
|
|
116
|
-
|
|
117
|
-
// The LIVE Sekreto, not a clone: sekreto holds provider and
|
|
118
|
-
// cache state, so a clone would resolve into a copy that
|
|
119
|
-
// prepare_auth never sees.
|
|
79
|
+
|
|
120
80
|
'/(?<indent>[ \\t]*)#[ \\t]*#SecretsAccessor[ \\t]*\\n?/':
|
|
121
81
|
({ indent }: any) => !secrets ? '' :
|
|
122
82
|
`${indent}def secrets(self):\n` +
|
|
@@ -148,7 +108,6 @@ self._utility.feature_hook(self._rootctx, "${name}")
|
|
|
148
108
|
}
|
|
149
109
|
},
|
|
150
110
|
|
|
151
|
-
// Entities - injected at SLOT
|
|
152
111
|
() => {
|
|
153
112
|
each(entity, (entity: ModelEntity) => {
|
|
154
113
|
const entitySDK = getModelPath(model, `main.${KIT}.entity.${entity.name}`)
|
|
@@ -177,7 +136,6 @@ if TYPE_CHECKING:
|
|
|
177
136
|
}
|
|
178
137
|
})
|
|
179
138
|
|
|
180
|
-
// Generate the typed-model module (<sdk>_types.py) next to the main SDK file.
|
|
181
139
|
EntityTypes({ target })
|
|
182
140
|
|
|
183
141
|
// PEP 561 marker so the inline type hints ship to consumers. Emitted at the
|
|
@@ -187,24 +145,13 @@ if TYPE_CHECKING:
|
|
|
187
145
|
Content(``)
|
|
188
146
|
})
|
|
189
147
|
|
|
190
|
-
// Generate config module
|
|
191
148
|
Folder({ name: '.' }, () => {
|
|
192
149
|
Config({ target })
|
|
193
150
|
Schema({ target })
|
|
194
151
|
})
|
|
195
152
|
|
|
196
|
-
// GENERATED, NOT COPIED. Where the credential goes is a fact about the
|
|
197
|
-
// API, and tm/ can only hold one answer. The blanket tm/py/pkg copy above
|
|
198
|
-
// no longer brings a prepare_auth.py in - it was deleted, since both
|
|
199
|
-
// writers would claim the same output path. See PrepareAuth_py.
|
|
200
|
-
//
|
|
201
|
-
// Called HERE, inside the <name>_sdk package folder and outside any
|
|
202
|
-
// other, because that is where the deleted template's own path
|
|
203
|
-
// (tm/py/pkg/utility/prepare_auth.py) put it: the component opens the one
|
|
204
|
-
// remaining segment, `utility`, itself.
|
|
205
153
|
PrepareAuth({ target })
|
|
206
154
|
|
|
207
|
-
// Generate feature factory module
|
|
208
155
|
File({ name: 'features.' + target.ext }, () => {
|
|
209
156
|
Content(`# ${model.const.Name} SDK feature factory
|
|
210
157
|
|
|
@@ -252,11 +199,6 @@ def _has_feature(name):
|
|
|
252
199
|
`)
|
|
253
200
|
})
|
|
254
201
|
|
|
255
|
-
// Generate __init__.py files for sub-packages.
|
|
256
|
-
// NOTE: deliberately omit __init__.py at the language-root (py/) level —
|
|
257
|
-
// making py/ a package collides with the third-party `py` module on PyPI
|
|
258
|
-
// (a single-file `py.py`), which causes pytest to construct test module
|
|
259
|
-
// paths as `py.test.<file>` and fail with "'py' is not a package".
|
|
260
202
|
Folder({ name: 'core' }, () => {
|
|
261
203
|
File({ name: '__init__.' + target.ext }, () => {
|
|
262
204
|
Content(``)
|
|
@@ -267,8 +209,6 @@ def _has_feature(name):
|
|
|
267
209
|
File({ name: '__init__.' + target.ext }, () => {
|
|
268
210
|
Content(``)
|
|
269
211
|
})
|
|
270
|
-
// PEP 561 marker inside the type-bearing package so setuptools package-data
|
|
271
|
-
// ("*" = ["py.typed"]) bundles it into the wheel.
|
|
272
212
|
File({ name: 'py.typed' }, () => {
|
|
273
213
|
Content(``)
|
|
274
214
|
})
|
|
@@ -22,9 +22,6 @@ const Package = cmp(async function Package(props: any) {
|
|
|
22
22
|
|
|
23
23
|
const model: Model = ctx$.model
|
|
24
24
|
|
|
25
|
-
// PyPI distribution name is namespaced to model.origin (e.g. "voxgig-sdk").
|
|
26
|
-
// PyPI names can't contain "/", so the parts are hyphen-joined. The import
|
|
27
|
-
// package (the `${model.name}_sdk/` dir) is unchanged.
|
|
28
25
|
const ns = model.origin || 'voxgig-sdk'
|
|
29
26
|
const pkgBase = ns.endsWith('-sdk') ? model.name : `${model.name}-sdk`
|
|
30
27
|
const distName = packageName(model, target.name)
|
|
@@ -17,51 +17,19 @@ import {
|
|
|
17
17
|
} from '@voxgig/apidef'
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
// WHERE THE CREDENTIAL GOES IS A FACT ABOUT THE API, so it is generated
|
|
21
|
-
// rather than templated. The py port of cmp/ts/PrepareAuth_ts.ts; see that
|
|
22
|
-
// file for the full account.
|
|
23
|
-
//
|
|
24
|
-
// This was a static file at `tm/py/pkg/utility/prepare_auth.py` that
|
|
25
|
-
// hardcoded a lowercase `authorization` header. apidef has always resolved
|
|
26
|
-
// the scheme's `in` and `name` into `main.kit.info.security` — joplin's
|
|
27
|
-
// says `in: "query", name: "token"` — and generation dropped both, so the
|
|
28
|
-
// SDK sent a header the API does not read and never sent the query
|
|
29
|
-
// parameter it does.
|
|
30
|
-
//
|
|
31
|
-
// A template cannot fix this, because the three placements need three
|
|
32
|
-
// different bodies and a template has to pick one. A component emits the
|
|
33
|
-
// branch this API actually uses and nothing else — no dead query code in a
|
|
34
|
-
// bearer-token SDK, and no runtime `if` on a value that is fixed at
|
|
35
|
-
// generation time.
|
|
36
20
|
const PrepareAuth = cmp(async function PrepareAuth(props: any) {
|
|
37
21
|
const { target } = props
|
|
38
22
|
const { model } = props.ctx$
|
|
39
23
|
|
|
40
|
-
// FOLDER NESTING. Main_py already opened the ONE package folder
|
|
41
|
-
// (`<name>_sdk`) that everything the SDK owns lives in, and the blanket
|
|
42
|
-
// `Copy({from: 'tm/py/pkg'})` that used to bring this file in runs inside
|
|
43
|
-
// that same folder — which is why the template's own path,
|
|
44
|
-
// `tm/py/pkg/utility/prepare_auth.py`, lands at
|
|
45
|
-
// `<name>_sdk/utility/prepare_auth.py`. So this component opens exactly
|
|
46
|
-
// ONE segment, `utility`, to reproduce that path. Opening `<name>_sdk`
|
|
47
|
-
// again would write to `<name>_sdk/<name>_sdk/utility/`, which nothing
|
|
48
|
-
// imports, while register.py kept importing the stale copy.
|
|
49
24
|
Folder({ name: 'utility' }, () => {
|
|
50
25
|
File({ name: 'prepare_auth.' + target.ext }, () => {
|
|
51
26
|
Content(render({
|
|
52
|
-
// The generated package name, spelled the way Config_py spells it.
|
|
53
|
-
// A Copy applies ctx$.stdrep to the file it copies; Content does
|
|
54
|
-
// not, so the `projectname_sdk` placeholder the template carried
|
|
55
|
-
// has to be resolved here.
|
|
56
27
|
pkg: model.const.Name.toLowerCase() + '_sdk',
|
|
57
28
|
Name: model.const.Name,
|
|
58
29
|
active: isAuthActive_py(model),
|
|
59
30
|
where: resolveAuthIn(model),
|
|
60
31
|
name: resolveAuthName(model),
|
|
61
32
|
basic: isHttpBasicAuth(model),
|
|
62
|
-
// Read so the resolution is visible at generation time even though
|
|
63
|
-
// the emitted code takes the prefix from options at runtime (the
|
|
64
|
-
// secrets feature rewrites it there).
|
|
65
33
|
prefix: resolveAuthPrefix(model),
|
|
66
34
|
}))
|
|
67
35
|
})
|
|
@@ -113,10 +81,6 @@ def prepare_auth_util(ctx):
|
|
|
113
81
|
}
|
|
114
82
|
|
|
115
83
|
|
|
116
|
-
// HEADER. Byte-for-byte the old template when the scheme resolves to the
|
|
117
|
-
// defaults (header / Authorization), so every header-based SDK regenerates
|
|
118
|
-
// unchanged — only the constant's VALUE moves with the model, plus the
|
|
119
|
-
// HTTP Basic block, which is emitted only for a basic scheme.
|
|
120
84
|
function renderHeader(spec: AuthSpec, head: string): string {
|
|
121
85
|
return head + (spec.basic ? `import base64
|
|
122
86
|
` : '') + `from ${spec.pkg}.utility.voxgig_struct import voxgig_struct as vs
|
|
@@ -211,8 +175,6 @@ function basicBlock(spec: AuthSpec): string {
|
|
|
211
175
|
}
|
|
212
176
|
|
|
213
177
|
|
|
214
|
-
// QUERY. The credential is a query parameter, so it goes in spec.query and
|
|
215
|
-
// the headers are never touched.
|
|
216
178
|
function renderQuery(spec: AuthSpec, head: string): string {
|
|
217
179
|
return head + `from ${spec.pkg}.utility.voxgig_struct import voxgig_struct as vs
|
|
218
180
|
|
|
@@ -257,9 +219,6 @@ def prepare_auth_util(ctx):
|
|
|
257
219
|
}
|
|
258
220
|
|
|
259
221
|
|
|
260
|
-
// COOKIE. A cookie IS a header, so the credential rides the header bag -
|
|
261
|
-
// but the `cookie` header is SHARED with whatever cookies the caller set,
|
|
262
|
-
// so the pair is spliced in and out rather than the header assigned over.
|
|
263
222
|
function renderCookie(spec: AuthSpec, head: string): string {
|
|
264
223
|
return head + `from ${spec.pkg}.utility.voxgig_struct import voxgig_struct as vs
|
|
265
224
|
|
|
@@ -339,28 +298,6 @@ def prepare_auth_util(ctx):
|
|
|
339
298
|
}
|
|
340
299
|
|
|
341
300
|
|
|
342
|
-
// NOT `isAuthActive`, AND THE DIFFERENCE IS LOAD-BEARING. That helper is
|
|
343
|
-
// false whenever the SPEC declares no security scheme (`main.kit.info.auth:
|
|
344
|
-
// false`) — which is a statement about the DEFINITION, not a ban on ever
|
|
345
|
-
// sending a credential. apidef writes it for every spec with no
|
|
346
|
-
// securitySchemes block, GitHub's official OpenAPI included, and those SDKs
|
|
347
|
-
// are still expected to honour an `apikey` the caller passes; the old
|
|
348
|
-
// template placed the credential unconditionally, so they did.
|
|
349
|
-
//
|
|
350
|
-
// Gating the body on `isAuthActive` therefore does not just trim dead code,
|
|
351
|
-
// it removes working authentication from every such SDK. The generated
|
|
352
|
-
// suite catches it: generatedcompile's `py: auth null beats an explicit
|
|
353
|
-
// apikey` lane generates against a fixture that declares
|
|
354
|
-
// `main: kit: info: { ... auth: false }` and then requires
|
|
355
|
-
// `wire({apikey: 'OPTKEY01'})` to reach the transport as an authorization
|
|
356
|
-
// header. With the wider gate it reports
|
|
357
|
-
//
|
|
358
|
-
// FAIL: baseline broken: an ordinary apikey was not sent:
|
|
359
|
-
// {'called': True, 'had': False, 'val': None}
|
|
360
|
-
//
|
|
361
|
-
// So the no-op is emitted only when the PROJECT says so — `config.auth.active:
|
|
362
|
-
// false`, an explicit per-SDK switch nobody sets by accident. A spec that is
|
|
363
|
-
// merely silent keeps the credential path it has always had.
|
|
364
301
|
function isAuthActive_py(model: any): boolean {
|
|
365
302
|
const auth = getModelPath(model, `main.${KIT}.config.auth`,
|
|
366
303
|
{ only_active: false, required: false })
|
|
@@ -368,12 +305,6 @@ function isAuthActive_py(model: any): boolean {
|
|
|
368
305
|
}
|
|
369
306
|
|
|
370
307
|
|
|
371
|
-
// HTTP header names are case-insensitive, and the whole py runtime spells
|
|
372
|
-
// them lowercase - the debug feature's redact list, the secrets feature's
|
|
373
|
-
// in-place rewrite of `fetchdef["headers"]["authorization"]`, and the
|
|
374
|
-
// generated tests all match on the lowercase key. Lowercasing here keeps
|
|
375
|
-
// the default byte-identical to the old template AND keeps a custom header
|
|
376
|
-
// name (`X-API-Key`) findable by all of them.
|
|
377
308
|
function headerName(name: string): string {
|
|
378
309
|
return String(name).toLowerCase()
|
|
379
310
|
}
|
|
@@ -7,11 +7,6 @@ import {
|
|
|
7
7
|
} from '@voxgig/apidef'
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
// A type-correct, JSON-serialisable Python literal for a field's canonical
|
|
11
|
-
// type. The create example is EXECUTED by the doc test (the body is
|
|
12
|
-
// JSON-serialised), so an Ellipsis (`...`) placeholder would raise
|
|
13
|
-
// "Object of type ellipsis is not JSON serializable" — use a real value.
|
|
14
|
-
// Strings render the quoted placeholder.
|
|
15
10
|
function pyLit(type: any, placeholder: string = 'example'): string {
|
|
16
11
|
const k = canonScalarKey(type)
|
|
17
12
|
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
@@ -22,14 +17,6 @@ function pyLit(type: any, placeholder: string = 'example'): string {
|
|
|
22
17
|
}
|
|
23
18
|
|
|
24
19
|
|
|
25
|
-
// Operation method spelling differs between Go and other languages — Go
|
|
26
|
-
// uses PascalCase methods with explicit ctrl arg, others use lowercase
|
|
27
|
-
// methods with optional ctrl. The op descriptions are language-agnostic.
|
|
28
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
29
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
30
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
31
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
32
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
33
20
|
function listMatchArg(ent: any): string {
|
|
34
21
|
const idF = entityIdField(ent)
|
|
35
22
|
return matchArg('py', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -66,7 +53,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
66
53
|
|
|
67
54
|
publishedEntities.map((entity: any) => {
|
|
68
55
|
const opnames = Object.keys(entity.op || {})
|
|
69
|
-
const fields = entity.fields ||
|
|
56
|
+
const fields = Object.values(entity.fields || {})
|
|
70
57
|
// Model-driven id key: null when this entity has no id-like field.
|
|
71
58
|
const idF = entityIdField(entity)
|
|
72
59
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
@@ -114,8 +101,8 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
114
101
|
`)
|
|
115
102
|
|
|
116
103
|
each(fields, (field: any) => {
|
|
117
|
-
const desc = field.
|
|
118
|
-
Content(`| \`${field.
|
|
104
|
+
const desc = field.sh || ''
|
|
105
|
+
Content(`| \`${field.n}\` | \`${canonToType(field.t, target.name)}\` | ${desc} |
|
|
119
106
|
`)
|
|
120
107
|
})
|
|
121
108
|
|
|
@@ -8,37 +8,6 @@ import {
|
|
|
8
8
|
} from '@voxgig/apidef'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
// Emits py/test/test_readme_examples.py — a pytest COMPLETENESS GATE over
|
|
12
|
-
// every ```python fenced block in the repository ROOT README.md, in the
|
|
13
|
-
// per-language py/README.md, AND in the per-language py/REFERENCE.md.
|
|
14
|
-
//
|
|
15
|
-
// The gate GUARANTEES every documented python example is unit-tested. For each
|
|
16
|
-
// of the three docs it:
|
|
17
|
-
// 1. extracts every ```python block (tagged by source doc + index);
|
|
18
|
-
// 2. ast.parse + compile()s EVERY block -> SYNTAX gate;
|
|
19
|
-
// 3. EXECUTEs every RUNNABLE block (one that constructs the SDK, or drives a
|
|
20
|
-
// `client`/`sdk` the narrative built earlier) in a seeded, offline
|
|
21
|
-
// TEST-mode subprocess. A PROGRAMMING error
|
|
22
|
-
// (Name/Attribute/Type/Key/Index/Import/Syntax) FAILS; ONLY a
|
|
23
|
-
// not-found/404 domain error is tolerated. Any other error also FAILS;
|
|
24
|
-
// 4. asserts COMPLETENESS: it partitions every block into exactly one of
|
|
25
|
-
// {executed, compiled-nonrunnable, illustration} and asserts
|
|
26
|
-
// total == executed + compiled + illustration. "illustration" is a NARROW
|
|
27
|
-
// explicit class (a non-runnable block that is only imports / signature
|
|
28
|
-
// stubs / bare references / literal assignments — a pure signature/table
|
|
29
|
-
// snippet) and can NEVER absorb a runnable example. A block that looks
|
|
30
|
-
// runnable (references the SDK/client) but was not executed FAILS the
|
|
31
|
-
// test; a block that fails to compile FAILS the test. A per-doc summary
|
|
32
|
-
// (total/executed/compiled/illustration) is printed.
|
|
33
|
-
//
|
|
34
|
-
// If mypy is importable it also type-checks the concatenated ROOT README blocks
|
|
35
|
-
// (the SDK ships py.typed + TypedDicts) — a bonus TYPE gate over the primary
|
|
36
|
-
// EXECUTE gate.
|
|
37
|
-
//
|
|
38
|
-
// The emitted Python is written WITHOUT backticks or backslashes (chr(96) is
|
|
39
|
-
// the fence marker, chr(10) is newline) so this TS template literal stays
|
|
40
|
-
// clean — the only interpolations are the SDK module/class names and the
|
|
41
|
-
// generated entity map.
|
|
42
11
|
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
43
12
|
const { target, ctx$: { model } } = props
|
|
44
13
|
|
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
} from '@voxgig/apidef'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
// A type-correct Python literal for a field's canonical type.
|
|
12
11
|
function pyLit(type: any): string {
|
|
13
12
|
const k = canonScalarKey(type)
|
|
14
13
|
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
@@ -31,8 +30,6 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
31
30
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
32
31
|
// Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
33
32
|
const eVar = exampleVarName(eName.toLowerCase(), 'py')
|
|
34
|
-
// Model-driven id key: null when the entity has no id-like field, so a
|
|
35
|
-
// match op takes no argument.
|
|
36
33
|
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
37
34
|
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
38
35
|
let testArg = ''
|
|
@@ -117,13 +117,13 @@ On error, \`ok\` is \`False\` and \`err\` contains the error value.
|
|
|
117
117
|
|
|
118
118
|
`)
|
|
119
119
|
each(entityList, (ent: any) => {
|
|
120
|
-
const fields = ent.fields ||
|
|
120
|
+
const fields = Object.values(ent.fields || {})
|
|
121
121
|
const opnames = Object.keys(ent.op || {})
|
|
122
122
|
const ops = ent.op || {}
|
|
123
123
|
const points = each(ops).map((op: any) =>
|
|
124
124
|
op.points ? each(op.points) : []
|
|
125
125
|
).flat()
|
|
126
|
-
const path = points.length > 0 ? (points[0] as any).
|
|
126
|
+
const path = points.length > 0 ? (points[0] as any).o || '' : ''
|
|
127
127
|
|
|
128
128
|
Content(`#### ${ent.Name}
|
|
129
129
|
|
|
@@ -131,7 +131,7 @@ On error, \`ok\` is \`False\` and \`err\` contains the error value.
|
|
|
131
131
|
| --- | --- |
|
|
132
132
|
`)
|
|
133
133
|
each(fields, (field: any) => {
|
|
134
|
-
Content(`| \`${field.
|
|
134
|
+
Content(`| \`${field.n}\` | ${field.sh || ''} |
|
|
135
135
|
`)
|
|
136
136
|
})
|
|
137
137
|
|
|
@@ -8,11 +8,6 @@ import {
|
|
|
8
8
|
} from '@voxgig/apidef'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
12
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
13
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
14
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
15
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
16
11
|
function listMatchArg(ent: any): string {
|
|
17
12
|
const idF = entityIdField(ent)
|
|
18
13
|
return matchArg('py', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -26,9 +21,6 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
|
26
21
|
|
|
27
22
|
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
28
23
|
|
|
29
|
-
// Find a nested entity if available: one with a parent chain
|
|
30
|
-
// (relations.ancestors), an active load op, and a required non-id load
|
|
31
|
-
// param to demonstrate (the parent key, e.g. page_id).
|
|
32
24
|
const nestedEntity = Object.values(entity).find((e: any) =>
|
|
33
25
|
e.active !== false &&
|
|
34
26
|
e.relations && e.relations.ancestors && 0 < e.relations.ancestors.length &&
|
|
@@ -39,10 +31,6 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
|
39
31
|
|
|
40
32
|
const authActive = isAuthActive(model)
|
|
41
33
|
|
|
42
|
-
// Server variables (a templated server URL) are REQUIRED at construction
|
|
43
|
-
// - the SDK refuses rather than request a URL with a literal
|
|
44
|
-
// {account_id} in it - so a quickstart that omits them is a quickstart
|
|
45
|
-
// that fails on its first line.
|
|
46
34
|
const svars = serverVariables(model)
|
|
47
35
|
const pyServerField = 0 === svars.length ? '' :
|
|
48
36
|
`\n "server": {` +
|
|
@@ -117,9 +105,6 @@ except Exception as err:
|
|
|
117
105
|
const neArticle = /^[aeiou]/i.test(neName) ? 'an' : 'a'
|
|
118
106
|
const neVar = exampleVarName(neName.toLowerCase(), 'py')
|
|
119
107
|
|
|
120
|
-
// Model-driven match: every REQUIRED load-match key — the same shape
|
|
121
|
-
// the runtime resolves path params from, so the example always works.
|
|
122
|
-
// Parent keys (e.g. page_id) first, the entity's own id last.
|
|
123
108
|
const neIdF = entityIdField(nestedEntity)
|
|
124
109
|
const neRequired = opRequestShape(nestedEntity, 'load').items
|
|
125
110
|
.filter((it: any) => !it.optional)
|
|
@@ -148,9 +133,6 @@ except Exception as err:
|
|
|
148
133
|
`)
|
|
149
134
|
}
|
|
150
135
|
else if (opnames.includes('load')) {
|
|
151
|
-
// Every REQUIRED load-match key (id first, then parent path params like
|
|
152
|
-
// page_id) — the same shape the runtime resolves path params from, so
|
|
153
|
-
// the example always works.
|
|
154
136
|
const loadRequired = opRequestShape(exampleEntity, 'load').items
|
|
155
137
|
.filter((it: any) => !it.optional || it.name === idF)
|
|
156
138
|
.sort((a: any, b: any) =>
|
|
@@ -176,20 +158,12 @@ except Exception as err:
|
|
|
176
158
|
`)
|
|
177
159
|
}
|
|
178
160
|
|
|
179
|
-
// Model-driven example fields: derive the create/update body from the op
|
|
180
|
-
// shape (opRequestShape) so the docs reference REAL writable fields, not a
|
|
181
|
-
// hardcoded "name" the entity may not have. Literals are Python-typed by
|
|
182
|
-
// the field's canonical type. ids are rendered separately as the match key
|
|
183
|
-
// for update/remove; a REQUIRED create id stays (the call is invalid
|
|
184
|
-
// without it).
|
|
185
161
|
const examplePairs = (opname: string): string[] => {
|
|
186
162
|
const items = opRequestShape(exampleEntity, opname).items
|
|
187
163
|
.filter((it: any) => (it.name !== idF && it.name !== 'id') ||
|
|
188
164
|
('create' === opname && !it.optional))
|
|
189
165
|
const required = items.filter((it: any) => !it.optional)
|
|
190
166
|
const optional = items.filter((it: any) => it.optional)
|
|
191
|
-
// create needs ALL required fields; update is a patch, so the required
|
|
192
|
-
// members plus a sample optional field or two suffice.
|
|
193
167
|
const chosen = 'create' === opname
|
|
194
168
|
? (required.length ? required : items.slice(0, 2))
|
|
195
169
|
: required.concat(optional).slice(0, Math.max(2, required.length))
|
|
@@ -227,8 +201,6 @@ client.${eName}().update({${updatePairs.join(', ')}})
|
|
|
227
201
|
`)
|
|
228
202
|
}
|
|
229
203
|
if (opnames.includes('remove')) {
|
|
230
|
-
// Every REQUIRED remove-match key: the id (off the created record
|
|
231
|
-
// when possible) plus parent keys like page_id.
|
|
232
204
|
const removePairs = opRequestShape(exampleEntity, 'remove').items
|
|
233
205
|
.filter((it: any) => !it.optional || it.name === idF)
|
|
234
206
|
.sort((a: any, b: any) =>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, matchArg, idLiteral } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, matchArg, idLiteral, targetFeatures } from '@voxgig/sdkgen'
|
|
3
3
|
import { ReadmeRefFeatures } from '@voxgig/sdkgen'
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -21,11 +21,6 @@ function pyLit(type: any, placeholder: string = 'example'): string {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
25
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
26
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
27
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
28
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
29
24
|
function listMatchArg(ent: any): string {
|
|
30
25
|
const idF = entityIdField(ent)
|
|
31
26
|
return matchArg('py', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -66,7 +61,7 @@ const ReadmeRef = cmp(function ReadmeRef(props: any) {
|
|
|
66
61
|
const { model } = props.ctx$
|
|
67
62
|
|
|
68
63
|
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
69
|
-
const feature =
|
|
64
|
+
const feature = targetFeatures(model, target)
|
|
70
65
|
|
|
71
66
|
const publishedEntities = each(entity).filter((e: any) => e.active !== false)
|
|
72
67
|
|
|
@@ -129,7 +124,6 @@ client = ${model.const.Name}SDK.test()
|
|
|
129
124
|
`)
|
|
130
125
|
|
|
131
126
|
|
|
132
|
-
// Entity factory methods
|
|
133
127
|
publishedEntities.map((ent: any) => {
|
|
134
128
|
Content(`#### \`${ent.Name}(data=None)\`
|
|
135
129
|
|
|
@@ -171,10 +165,9 @@ Prepare a fetch definition without sending. Returns the \`fetchdef\` and raises
|
|
|
171
165
|
`)
|
|
172
166
|
|
|
173
167
|
|
|
174
|
-
// Entity reference sections
|
|
175
168
|
publishedEntities.map((ent: any) => {
|
|
176
169
|
const opnames = Object.keys(ent.op || {})
|
|
177
|
-
const fields = ent.fields ||
|
|
170
|
+
const fields = Object.values(ent.fields || {})
|
|
178
171
|
// Model-driven id key: null when this entity has no id-like field, in
|
|
179
172
|
// which case load/remove match on no argument and update omits the id.
|
|
180
173
|
const idF = entityIdField(ent)
|
|
@@ -202,7 +195,6 @@ ${eVar} = client.${ent.Name}()
|
|
|
202
195
|
`)
|
|
203
196
|
|
|
204
197
|
|
|
205
|
-
// Field schema
|
|
206
198
|
if (fields.length > 0) {
|
|
207
199
|
Content(`### Fields
|
|
208
200
|
|
|
@@ -210,9 +202,9 @@ ${eVar} = client.${ent.Name}()
|
|
|
210
202
|
| --- | --- | --- | --- |
|
|
211
203
|
`)
|
|
212
204
|
each(fields, (field: any) => {
|
|
213
|
-
const req = field.
|
|
214
|
-
const desc = field.
|
|
215
|
-
Content(`| \`${field.
|
|
205
|
+
const req = field.r ? 'Yes' : 'No'
|
|
206
|
+
const desc = field.sh || ''
|
|
207
|
+
Content(`| \`${field.n}\` | \`${canonToType(field.t, target.name)}\` | ${req} | ${desc} |
|
|
216
208
|
`)
|
|
217
209
|
})
|
|
218
210
|
|
|
@@ -239,7 +231,7 @@ ${eVar} = client.${ent.Name}()
|
|
|
239
231
|
if (fop.active === false) return '-'
|
|
240
232
|
return 'Yes'
|
|
241
233
|
})
|
|
242
|
-
Content(`| \`${field.
|
|
234
|
+
Content(`| \`${field.n}\` | ${cols.join(' | ')} |
|
|
243
235
|
`)
|
|
244
236
|
})
|
|
245
237
|
|
|
@@ -249,7 +241,6 @@ ${eVar} = client.${ent.Name}()
|
|
|
249
241
|
}
|
|
250
242
|
|
|
251
243
|
|
|
252
|
-
// Operation details
|
|
253
244
|
if (opnames.length > 0) {
|
|
254
245
|
Content(`### Operations
|
|
255
246
|
|
|
@@ -337,7 +328,6 @@ ${updateLines} # Fields to update
|
|
|
337
328
|
}
|
|
338
329
|
|
|
339
330
|
|
|
340
|
-
// Common methods
|
|
341
331
|
Content(`### Common Methods
|
|
342
332
|
|
|
343
333
|
#### \`data_get() -> dict\`
|
|
@@ -368,7 +358,6 @@ Return the entity name.
|
|
|
368
358
|
})
|
|
369
359
|
|
|
370
360
|
|
|
371
|
-
// Features section
|
|
372
361
|
const activeFeatures = each(feature).filter((f: any) => f.active)
|
|
373
362
|
if (activeFeatures.length > 0) {
|
|
374
363
|
Content(`
|
|
@@ -404,9 +393,6 @@ client = ${model.const.Name}SDK({
|
|
|
404
393
|
\`\`\`
|
|
405
394
|
|
|
406
395
|
`)
|
|
407
|
-
// The shared feature reference: options, defaults, usage and the
|
|
408
|
-
// considerations. Model facts, identical in every target, so they are
|
|
409
|
-
// written once in cmp/ReadmeRefFeatures.ts rather than here.
|
|
410
396
|
ReadmeRefFeatures({ target })
|
|
411
397
|
}
|
|
412
398
|
|
|
@@ -22,11 +22,6 @@ function pyLit(type: any, placeholder: string = 'example'): string {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
26
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
27
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
28
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
29
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
30
25
|
function listMatchArg(ent: any): string {
|
|
31
26
|
const idF = entityIdField(ent)
|
|
32
27
|
return matchArg('py', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -42,10 +37,6 @@ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
|
42
37
|
|
|
43
38
|
const authActive = isAuthActive(model)
|
|
44
39
|
|
|
45
|
-
// Server variables (a templated server URL) are REQUIRED at construction
|
|
46
|
-
// - the SDK refuses rather than request a URL with a literal
|
|
47
|
-
// {account_id} in it - so a quickstart that omits them is a quickstart
|
|
48
|
-
// that fails on its first line.
|
|
49
40
|
const svars = serverVariables(model)
|
|
50
41
|
const pyServerField = 0 === svars.length ? '' :
|
|
51
42
|
`\n "server": {` +
|
|
@@ -72,8 +63,6 @@ client = ${ctor}
|
|
|
72
63
|
// Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
73
64
|
const eVar = exampleVarName(eName.toLowerCase(), 'py')
|
|
74
65
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
75
|
-
// Model-driven id key: null when the entity has no id-like field, in which
|
|
76
|
-
// case the load example takes no match argument.
|
|
77
66
|
const idF = entityIdField(exampleEntity)
|
|
78
67
|
|
|
79
68
|
let hasCall = false
|
|
@@ -88,9 +77,6 @@ for ${eVar} in ${eVar}s:
|
|
|
88
77
|
}
|
|
89
78
|
|
|
90
79
|
if (opnames.includes('load')) {
|
|
91
|
-
// Every REQUIRED load-match key (id first, then parent path params like
|
|
92
|
-
// page_id) — the same shape the runtime resolves path params from, so
|
|
93
|
-
// the example always works.
|
|
94
80
|
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
95
81
|
.filter((it: any) => !it.optional || it.name === idF)
|
|
96
82
|
.sort((a: any, b: any) =>
|
|
@@ -12,25 +12,6 @@ import {
|
|
|
12
12
|
} from '@voxgig/apidef'
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
// THE GENERATED SCHEMA MODULE: the model's schemas, as data the SDK can run.
|
|
16
|
-
//
|
|
17
|
-
// The python peer of src/cmp/ts/Schema_ts.ts. Same two exports, same source:
|
|
18
|
-
// OPTSPEC from `main.kit.optspec` plus each feature's own `config.options`,
|
|
19
|
-
// ENTITYSPEC from the entity field sentinels — both built by the shared
|
|
20
|
-
// helpers, so what python validates against and what ts validates against
|
|
21
|
-
// cannot drift.
|
|
22
|
-
//
|
|
23
|
-
// EMBEDDED AS JSON, PARSED AT IMPORT, the same mechanism config.py already
|
|
24
|
-
// uses for the model above the size threshold. A python dict literal would
|
|
25
|
-
// also work here, but `json.loads` (the C accelerator) builds it from one
|
|
26
|
-
// string constant rather than making the byte-compiler walk several hundred
|
|
27
|
-
// literal nodes, and it is the one mechanism every ported target shares.
|
|
28
|
-
//
|
|
29
|
-
// The round-trip is exact because the spec holds only strings and booleans —
|
|
30
|
-
// pinned by "strings and booleans only, so the JSON round-trip is lossless"
|
|
31
|
-
// in ts/test/optspec.test.ts. JSON's single number type is the hazard that
|
|
32
|
-
// test exists for: `true`/`false` and `null` differ between JSON and python
|
|
33
|
-
// source, which is why this is a parsed string and not a literal paste.
|
|
34
15
|
const Schema = cmp(async function Schema(props: any) {
|
|
35
16
|
const ctx$ = props.ctx$
|
|
36
17
|
const target = props.target
|
|
@@ -44,7 +25,7 @@ const Schema = cmp(async function Schema(props: any) {
|
|
|
44
25
|
Content(`# ${model.const.Name} ${target.Name} SDK: generated schemas. Do not edit.
|
|
45
26
|
#
|
|
46
27
|
# Generated from the model: \`main.kit.optspec\` and each feature's
|
|
47
|
-
# \`config.options\` for OPTSPEC; entity \`fields
|
|
28
|
+
# \`config.options\` for OPTSPEC; entity \`fields{}.type\` for ENTITYSPEC.
|
|
48
29
|
|
|
49
30
|
from __future__ import annotations
|
|
50
31
|
|