@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,9 +42,6 @@ const Config = cmp(async function Config(props: any) {
|
|
|
42
42
|
const model: Model = ctx$.model
|
|
43
43
|
|
|
44
44
|
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
45
|
-
// Gated by the applicability tags, so this target never imports or
|
|
46
|
-
// registers a feature it has no source for. One rule, one place:
|
|
47
|
-
// helpers/applicability.
|
|
48
45
|
const feature = targetFeatures(model, target)
|
|
49
46
|
|
|
50
47
|
const ff = Path.normalize(__dirname + '/../../../src/cmp/js/fragment/')
|
|
@@ -52,7 +49,6 @@ const Config = cmp(async function Config(props: any) {
|
|
|
52
49
|
const headers = getModelPath(model, `main.${KIT}.config.headers`) || {}
|
|
53
50
|
|
|
54
51
|
const authActive = isAuthActive(model)
|
|
55
|
-
// config.auth.prefix override -> spec-derived info.security.prefix -> 'Bearer'
|
|
56
52
|
const authPrefix = resolveAuthPrefix(model)
|
|
57
53
|
// `in` and `name` travel with the prefix now. They were resolved by
|
|
58
54
|
// apidef all along and dropped here, so an apiKey-in-query API got an
|
|
@@ -71,30 +67,17 @@ const Config = cmp(async function Config(props: any) {
|
|
|
71
67
|
`
|
|
72
68
|
: ''
|
|
73
69
|
|
|
74
|
-
// Templated server URL: emit the spec's server-variable defaults so the
|
|
75
|
-
// runtime can substitute {name} placeholders in base (see makeOptions).
|
|
76
70
|
const svars = serverVariables(model)
|
|
77
71
|
const serverBlock = 0 === svars.length ? '' :
|
|
78
72
|
'server: {\n' +
|
|
79
73
|
svars.map((v: any) => ` ${JSON.stringify(v.name)}: ${JSON.stringify(v.dflt)},\n`).join('') +
|
|
80
74
|
' },\n\n '
|
|
81
75
|
|
|
82
|
-
// Read the base URL here rather than leaving it to a `$$...$$` stdrep
|
|
83
|
-
// placeholder in the fragment. stdrep can only substitute a path the model
|
|
84
|
-
// actually has: a model with no `info.servers` left the placeholder itself in
|
|
85
|
-
// the generated source, so `options.base` came out as the literal string
|
|
86
|
-
// '$main.kit.info.servers.0.url$'. Reading it explicitly yields '' in that
|
|
87
|
-
// case, which is what every other target already emits, and is identical to
|
|
88
|
-
// the old output whenever the model does define a server.
|
|
89
76
|
let baseUrl = ''
|
|
90
77
|
try {
|
|
91
78
|
baseUrl = getModelPath(model, `main.${KIT}.info.servers.0.url`)
|
|
92
79
|
} catch (_e) { }
|
|
93
80
|
|
|
94
|
-
// The same config as an OBJECT, built by the shared helper so this target's
|
|
95
|
-
// literal and the data that replaces it above the threshold are the same
|
|
96
|
-
// config by construction. The JSON is what the threshold is measured on -
|
|
97
|
-
// emitted source size varies by language, the model does not.
|
|
98
81
|
const { def: configDef, json: configJson } = configDefinition(model, target.name)
|
|
99
82
|
const asData = isConfigData(configJson, configReprSetting(model))
|
|
100
83
|
|
|
@@ -122,9 +105,6 @@ const Config = cmp(async function Config(props: any) {
|
|
|
122
105
|
|
|
123
106
|
'// #FeaturePlugins': () => pluginDefs(feature),
|
|
124
107
|
|
|
125
|
-
// A JS string literal, so the JSON survives verbatim. JSON.stringify
|
|
126
|
-
// escapes the quotes and backslashes the model contains (values like
|
|
127
|
-
// `$STRING` carry backticks, which a template literal could not).
|
|
128
108
|
"'CONFIGJSON'": JSON.stringify(configJson),
|
|
129
109
|
}
|
|
130
110
|
})
|
|
@@ -162,8 +142,6 @@ const Config = cmp(async function Config(props: any) {
|
|
|
162
142
|
|
|
163
143
|
'// #FeatureClasses': () => {
|
|
164
144
|
each(feature, (f: any) => {
|
|
165
|
-
// Trailing comma: the map has one entry per feature, so entries
|
|
166
|
-
// must be comma-separated (a single feature hid this until now).
|
|
167
145
|
Line(` ${f.name}: ${nom(f, 'Name')}Feature,`)
|
|
168
146
|
})
|
|
169
147
|
},
|
|
@@ -189,12 +167,6 @@ const Config = cmp(async function Config(props: any) {
|
|
|
189
167
|
})
|
|
190
168
|
},
|
|
191
169
|
|
|
192
|
-
// configDefinition's `def.entity` verbatim, NOT rebuilt here. This
|
|
193
|
-
// reduce was a second copy of that function's entityDefs loop, and
|
|
194
|
-
// when configDefinition started reconstructing a point's `parts`
|
|
195
|
-
// from apidef's segment vector (its ADR-003), only the data
|
|
196
|
-
// representation got it — the literal one emitted empty paths. The
|
|
197
|
-
// config-repr equivalence test caught it, which is what it is for.
|
|
198
170
|
"'ENTITYMAP'": formatJson(configDef.entity, { margin: 2 }).trim(),
|
|
199
171
|
}
|
|
200
172
|
})
|
|
@@ -202,24 +174,8 @@ const Config = cmp(async function Config(props: any) {
|
|
|
202
174
|
})
|
|
203
175
|
|
|
204
176
|
|
|
205
|
-
// PLUGIN DEFINITION REQUIRES AND THE FEATURE_PLUGINS MAP.
|
|
206
|
-
//
|
|
207
|
-
// Upstream sekreto replaced its self-registration registry with
|
|
208
|
-
// voxgig/plugin definitions: a provider kind the caller did not pass in
|
|
209
|
-
// via `plugins: [...]` is unknown to that Sekreto. So Config no longer
|
|
210
|
-
// requires provider modules for their side effects — it requires each
|
|
211
|
-
// active plugin's exported Definition BY NAME (the model's `def` map)
|
|
212
|
-
// and hands the list to the feature through FEATURE_PLUGINS.
|
|
213
|
-
//
|
|
214
|
-
// Emitted here because Config already requires every active feature from
|
|
215
|
-
// the model, and this is the same list one level down. The `def` map is
|
|
216
|
-
// declared in the model rather than derived from filenames because one
|
|
217
|
-
// file may export several definitions (sekreto's aws.js exports
|
|
218
|
-
// awssecrets AND awsparams).
|
|
219
177
|
function pluginImports(feature: any) {
|
|
220
178
|
each(feature, (f: any) => {
|
|
221
|
-
// path -> [symbol, ...], so one require line serves a two-definition
|
|
222
|
-
// module.
|
|
223
179
|
const bypath: Record<string, string[]> = {}
|
|
224
180
|
|
|
225
181
|
each(f.plugin, (plugin: any) => {
|
|
@@ -243,8 +199,6 @@ function pluginImports(feature: any) {
|
|
|
243
199
|
})
|
|
244
200
|
}
|
|
245
201
|
|
|
246
|
-
// The FEATURE_PLUGINS entries: one line per feature that has any active
|
|
247
|
-
// plugin definitions, listing the required symbols.
|
|
248
202
|
function pluginDefs(feature: any) {
|
|
249
203
|
each(feature, (f: any) => {
|
|
250
204
|
const syms: string[] = []
|
|
@@ -1,25 +1,5 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
// Typed-model generator (JavaScript target).
|
|
4
|
-
//
|
|
5
|
-
// JavaScript is dynamically typed, so the "types" are JSDoc typedefs
|
|
6
|
-
// (@typedef / @property) for editor/tooling DX only — no runtime effect.
|
|
7
|
-
//
|
|
8
|
-
// Reads main.<KIT>.entity.<e>.fields[] and per-op params
|
|
9
|
-
// (op.<name>.points[].args.params[]) and emits one file, src/<Sdk>Types.js,
|
|
10
|
-
// with a `@typedef {Object} <Name>` per active entity plus a request/match
|
|
11
|
-
// typedef per active op. Field/param sentinels ($STRING, $INTEGER, ...) are
|
|
12
|
-
// turned into JSDoc types by the shared sdkgen helper `canonToType`
|
|
13
|
-
// ('js' column: Object / Array / * for open shapes).
|
|
14
|
-
//
|
|
15
|
-
// The typedefs are emitted at file (script) scope so they are GLOBAL across
|
|
16
|
-
// the SDK's JS program — the op fragments reference them by bare name
|
|
17
|
-
// (@param {AdviceLoadMatch} / @returns {Promise<Advice>}). The program itself
|
|
18
|
-
// is established by the tm/js/jsconfig.json template shipped at the SDK root
|
|
19
|
-
// (one project spanning src/ + test/), so resolution does not depend on
|
|
20
|
-
// editor workspace inference. Keeps the SAME type-name scheme as the TS
|
|
21
|
-
// reference (<Name>, <Name>LoadMatch, <Name>ListMatch, <Name>CreateData,
|
|
22
|
-
// <Name>UpdateData, <Name>RemoveMatch).
|
|
23
3
|
|
|
24
4
|
import {
|
|
25
5
|
cmp, each, names,
|
|
@@ -37,8 +17,6 @@ import {
|
|
|
37
17
|
const LANG = 'js'
|
|
38
18
|
|
|
39
19
|
|
|
40
|
-
// A bare JSDoc property key, or a quoted string literal for anything that is
|
|
41
|
-
// not a plain identifier.
|
|
42
20
|
function propKey(name: string): string {
|
|
43
21
|
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name)
|
|
44
22
|
}
|
|
@@ -47,10 +25,6 @@ function propKey(name: string): string {
|
|
|
47
25
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
48
26
|
const { model, log } = props.ctx$
|
|
49
27
|
|
|
50
|
-
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
51
|
-
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
52
|
-
// collection, so inactive entities still get generated entity code that
|
|
53
|
-
// references these typed names. The typed model must cover them too.
|
|
54
28
|
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
55
29
|
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
56
30
|
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
@@ -62,17 +36,14 @@ const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
|
62
36
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
63
37
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
64
38
|
|
|
65
|
-
// Surface duplicate generated type names (two entities with the same
|
|
66
|
-
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
67
|
-
// targets. Detection only; renaming is a model-level decision.
|
|
68
39
|
warnEntityTypeCollisions(entity, log, LANG)
|
|
69
40
|
|
|
70
41
|
File({ name: model.const.Name + 'Types.' + LANG }, () => {
|
|
71
42
|
|
|
72
43
|
Content(`// Typed models for the ${model.const.Name} SDK (JSDoc typedefs).
|
|
73
44
|
//
|
|
74
|
-
// GENERATED from the API model: main.${KIT}.entity.<e>.fields
|
|
75
|
-
// params (op.<name>.points[].
|
|
45
|
+
// GENERATED from the API model: main.${KIT}.entity.<e>.fields{} and per-op
|
|
46
|
+
// params (op.<name>.points[].g.params[]). Field/param types come from the
|
|
76
47
|
// canonical type sentinels via @voxgig/sdkgen canonToType (source of truth:
|
|
77
48
|
// @voxgig/apidef VALID_CANON). Annotations only — no runtime effect. Do not
|
|
78
49
|
// edit by hand.
|
|
@@ -82,24 +53,20 @@ const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
|
82
53
|
entityList.forEach((ent: any) => {
|
|
83
54
|
const Name = ent.Name
|
|
84
55
|
const fields = (ent.fields ? each(ent.fields) : [])
|
|
85
|
-
.filter((f: any) => f.
|
|
56
|
+
.filter((f: any) => f.a !== false)
|
|
86
57
|
|
|
87
|
-
// Entity data model: one @property per field, `req:false` -> optional [].
|
|
88
58
|
Content(`/**
|
|
89
59
|
* @typedef {Object} ${Name}
|
|
90
60
|
`)
|
|
91
61
|
fields.forEach((f: any) => {
|
|
92
|
-
const key = false === f.
|
|
93
|
-
Content(` * @property {${canonToType(f.
|
|
62
|
+
const key = false === f.r ? '[' + propKey(f.n) + ']' : propKey(f.n)
|
|
63
|
+
Content(` * @property {${canonToType(f.t, LANG)}} ${key}
|
|
94
64
|
`)
|
|
95
65
|
})
|
|
96
66
|
Content(` */
|
|
97
67
|
|
|
98
68
|
`)
|
|
99
69
|
|
|
100
|
-
// Per active op: a request/match typedef. Members and their optionality
|
|
101
|
-
// come from the shared partiality policy (opRequestShape); this file only
|
|
102
|
-
// renders them as JSDoc @property lines (optional -> [bracketed] key).
|
|
103
70
|
const ops = ent.op || {}
|
|
104
71
|
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
105
72
|
if (null == ops[opname]) {
|
|
@@ -55,15 +55,6 @@ const Main = cmp(async function Main(props: any) {
|
|
|
55
55
|
|
|
56
56
|
Copy({
|
|
57
57
|
from: 'tm/' + target.name,
|
|
58
|
-
// Root copies src/feature/<name>/ per ACTIVE feature; keep this blanket
|
|
59
|
-
// copy from restoring one that was switched off after `target add`.
|
|
60
|
-
// A feature's inactive plugins go too - same rule, one level
|
|
61
|
-
// deeper. See helpers/featureSource.pluginExcludes.
|
|
62
|
-
//
|
|
63
|
-
// pluginExcludes is REQUIRED, not cosmetic: Feature() renders before
|
|
64
|
-
// Main(), so its per-feature Copy applies pluginExcludesFor and then
|
|
65
|
-
// this blanket copy runs — and without the same patterns here it puts
|
|
66
|
-
// every trimmed plugin straight back.
|
|
67
58
|
exclude: [
|
|
68
59
|
...srcFeatureExcludes(model),
|
|
69
60
|
...pluginExcludes(model),
|
|
@@ -93,14 +84,6 @@ const Main = cmp(async function Main(props: any) {
|
|
|
93
84
|
replace: {
|
|
94
85
|
...props.ctx$.stdrep,
|
|
95
86
|
|
|
96
|
-
// SECRETS. All five slots are emitted only when the secrets
|
|
97
|
-
// feature applies to this target AND the model activates it.
|
|
98
|
-
// An unconditional edit here would land in every generated SDK
|
|
99
|
-
// and break the inactive-output gate: a model without the
|
|
100
|
-
// feature must generate byte-identically to pre-migration.
|
|
101
|
-
//
|
|
102
|
-
// `feature` is already gated by targetFeatures, so a target
|
|
103
|
-
// that does not provide 'sekreto' never reaches these.
|
|
104
87
|
'// #SecretsImport': () => secrets ?
|
|
105
88
|
Line(`const sekreto = require('./feature/secrets/sekreto')`) : undefined,
|
|
106
89
|
|
|
@@ -117,15 +100,6 @@ secrets() {
|
|
|
117
100
|
}
|
|
118
101
|
`) : undefined,
|
|
119
102
|
|
|
120
|
-
// prepare() bypasses the feature hook pipeline, so the PreSpec
|
|
121
|
-
// hook that resolves the secret for entity ops never runs on
|
|
122
|
-
// this path and the resolve has to be explicit. This is also
|
|
123
|
-
// what defends direct() and graphql(), which run no feature
|
|
124
|
-
// hooks at all and reach the wire through prepare().
|
|
125
|
-
//
|
|
126
|
-
// It RETURNS the Error rather than rejecting: _rawRequest
|
|
127
|
-
// awaits prepare() outside its try, and direct()/graphql() are
|
|
128
|
-
// documented to return a value or an Error, never reject.
|
|
129
103
|
'// #SecretsResolve': ({ indent }: any) => secrets ?
|
|
130
104
|
Content({ indent }, `
|
|
131
105
|
if (null != this._secrets) {
|
|
@@ -174,13 +148,6 @@ if (fres instanceof Promise) { await fres }
|
|
|
174
148
|
})
|
|
175
149
|
})
|
|
176
150
|
|
|
177
|
-
// Station self-registration (station design §6.2 path 1;
|
|
178
|
-
// station-declarative-config §11 item 2): emitted ONLY when the model
|
|
179
|
-
// carries an ACTIVE station feature (installed via
|
|
180
|
-
// `package add @voxgig/sdkgen-station`). The library package name
|
|
181
|
-
// comes from the feature model's own `deps.js` block — the same entry
|
|
182
|
-
// collectDeps flows into package.json — so the manifest dependency
|
|
183
|
-
// and the emitted require cannot disagree.
|
|
184
151
|
const stationPkg = stationLibrary(model, target.name)
|
|
185
152
|
if (null != stationPkg) {
|
|
186
153
|
Fragment({
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
packageVersion,
|
|
15
15
|
authorInfo,
|
|
16
16
|
targetFeatures, envName,
|
|
17
|
+
hasLiveScenarios,
|
|
17
18
|
} from '@voxgig/sdkgen'
|
|
18
19
|
|
|
19
20
|
|
|
@@ -44,14 +45,11 @@ const Package = cmp(async function Package(props: any) {
|
|
|
44
45
|
const only = (kind: string, deps: any) =>
|
|
45
46
|
omap(deps, ([k, v]: any) => [v.active && kind === v.kind ? k : undefined, v.version])
|
|
46
47
|
|
|
47
|
-
// merge target and feature deps, by kind
|
|
48
48
|
const deps =
|
|
49
49
|
each(feature, (feature: any) =>
|
|
50
50
|
omap(feature.deps?.[target.name], ([k, v]: any) =>
|
|
51
51
|
[v.active ? k : undefined, v]))
|
|
52
52
|
|
|
53
|
-
// TODO: sort by version; rules for version choice?
|
|
54
|
-
// TODO: non-node dep kinds
|
|
55
53
|
.reduce((a: any, deps: any) => (each(deps, (dep: any) =>
|
|
56
54
|
a[dep.kind][dep.key$] = dep.version), a),
|
|
57
55
|
{
|
|
@@ -64,8 +62,6 @@ const Package = cmp(async function Package(props: any) {
|
|
|
64
62
|
const { repoUrl, issuesUrl } = repoInfo(model)
|
|
65
63
|
|
|
66
64
|
const pkg = {
|
|
67
|
-
// The ts target publishes the canonical scoped npm name; the js target
|
|
68
|
-
// appends `-js` so the two never collide on npm.
|
|
69
65
|
name: packageName(model, target.name),
|
|
70
66
|
version: packageVersion(model, target.name),
|
|
71
67
|
description: pkgDescription(model, target.name),
|
|
@@ -81,7 +77,7 @@ const Package = cmp(async function Package(props: any) {
|
|
|
81
77
|
// directly (no build step), so that is the whole package.
|
|
82
78
|
files: ['src'],
|
|
83
79
|
scripts: {
|
|
84
|
-
...(
|
|
80
|
+
...(hasLiveScenarios(model) ? {
|
|
85
81
|
'test:live': `${envName(model)}_TEST_LIVE=TRUE node --test test/live.test.js`,
|
|
86
82
|
} : {}),
|
|
87
83
|
|
|
@@ -95,7 +91,6 @@ const Package = cmp(async function Package(props: any) {
|
|
|
95
91
|
},
|
|
96
92
|
author,
|
|
97
93
|
|
|
98
|
-
// TODO: needs to be config
|
|
99
94
|
license: 'MIT',
|
|
100
95
|
|
|
101
96
|
dependencies: deps.prod,
|
|
@@ -17,53 +17,17 @@ 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.
|
|
22
|
-
//
|
|
23
|
-
// This was a static file at `tm/js/src/utility/PrepareAuthUtility.js` that
|
|
24
|
-
// hardcoded `authorization` and a header. apidef has always resolved the
|
|
25
|
-
// scheme's `in` and `name` into `main.kit.info.security` — joplin's says
|
|
26
|
-
// `in: "query", name: "token"` — and generation dropped both. The result
|
|
27
|
-
// was an SDK that sent a header the API does not read and never sent the
|
|
28
|
-
// query parameter it does, so it could not authenticate at all. Four
|
|
29
|
-
// repos in the cedar fleet shipped that way: joplin (`token`), pipedrive
|
|
30
|
-
// (`api_token`), trello (`key`), lm-umbrella (`apiKey`).
|
|
31
|
-
//
|
|
32
|
-
// A template cannot fix this, because the three placements need three
|
|
33
|
-
// different bodies and a template has to pick one. A component emits the
|
|
34
|
-
// branch this API actually uses and nothing else — no dead query code in
|
|
35
|
-
// a bearer-token SDK, and no runtime `if` on a value that is fixed at
|
|
36
|
-
// generation time.
|
|
37
|
-
//
|
|
38
|
-
// Ported from PrepareAuth_ts, which is the proven shape. The differences
|
|
39
|
-
// are the language's, not the design's: no type import, `module.exports`
|
|
40
|
-
// instead of `export {}`, and the prefix read inline off `options.auth`
|
|
41
|
-
// exactly as the js template read it, rather than hoisted into a local
|
|
42
|
-
// that the query and cookie bodies would leave unused.
|
|
43
20
|
const PrepareAuth = cmp(async function PrepareAuth(props: any) {
|
|
44
21
|
const { target } = props
|
|
45
22
|
const { model } = props.ctx$
|
|
46
23
|
|
|
47
24
|
const active = isAuthActive_js(model)
|
|
48
25
|
const where = resolveAuthIn(model)
|
|
49
|
-
// LOWERCASED FOR A HEADER, VERBATIM OTHERWISE. The js runtime keys its
|
|
50
|
-
// header map in lower case — the old template hardcoded 'authorization',
|
|
51
|
-
// the shared corpus asserts ctx:spec:headers:authorization, and every
|
|
52
|
-
// generatedcompile probe reads the lower-case key. apidef writes
|
|
53
|
-
// name: "Authorization", so emitting it verbatim hides the credential
|
|
54
|
-
// under a key nothing reads. Query parameters and cookies ARE
|
|
55
|
-
// case-sensitive and keep the spec's spelling.
|
|
56
26
|
const resolvedName = resolveAuthName(model)
|
|
57
27
|
const name = 'header' === where ? resolvedName.toLowerCase() : resolvedName
|
|
58
28
|
const prefix = resolveAuthPrefix(model)
|
|
59
29
|
const basic = isHttpBasicAuth(model)
|
|
60
30
|
|
|
61
|
-
// No `src` folder here: Main_js already opened it, and Config, Schema,
|
|
62
|
-
// SdkError, EntityBase and EntityTypes all write straight into it. The
|
|
63
|
-
// template this replaces lived at `tm/js/src/utility/`, so relative to
|
|
64
|
-
// that open folder the file needs `utility` and nothing more. Opening a
|
|
65
|
-
// second `src` would put it at src/src/utility/ — where nothing imports
|
|
66
|
-
// it, and the stale copy at src/utility/ keeps being used.
|
|
67
31
|
Folder({ name: 'utility' }, () => {
|
|
68
32
|
File({ name: 'PrepareAuthUtility.' + target.ext }, () => {
|
|
69
33
|
Content(render({ active, where, name, prefix, basic }))
|
|
@@ -76,8 +40,6 @@ function render(spec: {
|
|
|
76
40
|
active: boolean, where: string, name: string, prefix: string, basic: boolean
|
|
77
41
|
}): string {
|
|
78
42
|
|
|
79
|
-
// NO AUTH AT ALL. A public API's SDK gets a prepareAuth that is honest
|
|
80
|
-
// about it rather than one that deletes a header nobody set.
|
|
81
43
|
if (!spec.active) {
|
|
82
44
|
return `
|
|
83
45
|
// This API declares no authentication, so there is no credential to
|
|
@@ -193,16 +155,10 @@ function clear(where: string): string {
|
|
|
193
155
|
|
|
194
156
|
function place(where: string): string {
|
|
195
157
|
if ('query' === where) {
|
|
196
|
-
// NO PREFIX IN A QUERY STRING. `?token=Bearer%20abc` is not a thing any
|
|
197
|
-
// API reads; the prefix is a header convention and is dropped here
|
|
198
|
-
// deliberately rather than silently concatenated.
|
|
199
158
|
return ` setprop(query, CRED_name, apikey)`
|
|
200
159
|
}
|
|
201
160
|
|
|
202
161
|
if ('cookie' === where) {
|
|
203
|
-
// APPEND, never clobber: the request may already carry a session
|
|
204
|
-
// cookie set from options.headers, and a cookie header holds a
|
|
205
|
-
// '; '-joined list of pairs.
|
|
206
162
|
return ` const existing = getprop(headers, 'cookie', '')
|
|
207
163
|
const pair = CRED_name + '=' + apikey
|
|
208
164
|
setprop(headers, 'cookie', existing ? existing + '; ' + pair : pair)`
|
|
@@ -224,19 +180,6 @@ export {
|
|
|
224
180
|
}
|
|
225
181
|
|
|
226
182
|
|
|
227
|
-
// NOT `isAuthActive`, AND THE DIFFERENCE IS LOAD-BEARING. That helper is
|
|
228
|
-
// also false whenever the SPEC declares no security scheme
|
|
229
|
-
// (`main.kit.info.auth: false`) — a statement about the DEFINITION, not a
|
|
230
|
-
// ban on ever sending a credential. `optspec` still declares `apikey` and
|
|
231
|
-
// makeOptions fills `options.auth` from its defaults, so the runtime
|
|
232
|
-
// `options.auth == null` guard never fired and those SDKs have always sent
|
|
233
|
-
// the credential. Gating the body on `isAuthActive` does not trim dead
|
|
234
|
-
// code, it removes working authentication — which
|
|
235
|
-
// `js: auth null suppresses the credential` catches, and which takes the
|
|
236
|
-
// secrets feature down with it.
|
|
237
|
-
//
|
|
238
|
-
// `main.kit.config.auth.active: false` is the project saying "no credential,
|
|
239
|
-
// ever", and it is the only signal that can be honoured before runtime.
|
|
240
183
|
function isAuthActive_js(model: any): boolean {
|
|
241
184
|
const auth = getModelPath(model, `main.${KIT}.config.auth`,
|
|
242
185
|
{ only_active: false, required: false })
|
|
@@ -9,14 +9,6 @@ import {
|
|
|
9
9
|
import { exampleValue } from './utility_js'
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
// Operation method spelling differs between Go and other languages — Go
|
|
13
|
-
// uses PascalCase methods with explicit ctrl arg, others use lowercase
|
|
14
|
-
// methods with optional ctrl. The op descriptions are language-agnostic.
|
|
15
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
16
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
17
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
18
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
19
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
20
12
|
function listMatchArg(ent: any): string {
|
|
21
13
|
const idF = entityIdField(ent)
|
|
22
14
|
return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -53,10 +45,9 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
53
45
|
|
|
54
46
|
publishedEntities.map((entity: any) => {
|
|
55
47
|
const opnames = Object.keys(entity.op || {})
|
|
56
|
-
const fields = entity.fields ||
|
|
48
|
+
const fields = Object.values(entity.fields || {})
|
|
57
49
|
// Model-driven id key: null when this entity has no id-like field.
|
|
58
50
|
const idF = entityIdField(entity)
|
|
59
|
-
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
60
51
|
const eVar = exampleVarName(entity.name, 'js')
|
|
61
52
|
|
|
62
53
|
Content(`
|
|
@@ -100,8 +91,8 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
100
91
|
`)
|
|
101
92
|
|
|
102
93
|
each(fields, (field: any) => {
|
|
103
|
-
const desc = field.
|
|
104
|
-
Content(`| \`${field.
|
|
94
|
+
const desc = field.sh || ''
|
|
95
|
+
Content(`| \`${field.n}\` | \`${canonToType(field.t, target.name)}\` | ${desc} |
|
|
105
96
|
`)
|
|
106
97
|
})
|
|
107
98
|
|
|
@@ -32,8 +32,6 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
32
32
|
if (!exampleEntity || !primaryOp) return ''
|
|
33
33
|
if ('list' === primaryOp) return ''
|
|
34
34
|
if (isMatchOp) {
|
|
35
|
-
// Every REQUIRED match key (id first), not just idF — a composite-match
|
|
36
|
-
// entity (database_id + id) needs them all. Mirrors ReadmeTopTest.
|
|
37
35
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
38
36
|
.filter((it: any) => !it.optional || it.name === idF)
|
|
39
37
|
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
@@ -153,13 +153,13 @@ The \`prepare()\` method returns:
|
|
|
153
153
|
`)
|
|
154
154
|
|
|
155
155
|
each(entityList, (ent: any) => {
|
|
156
|
-
const fields = ent.fields ||
|
|
156
|
+
const fields = Object.values(ent.fields || {})
|
|
157
157
|
const opnames = Object.keys(ent.op || {})
|
|
158
158
|
const ops = ent.op || {}
|
|
159
159
|
const points = each(ops).map((op: any) =>
|
|
160
160
|
op.points ? each(op.points) : []
|
|
161
161
|
).flat()
|
|
162
|
-
const path = points.length > 0 ? (points[0] as any).
|
|
162
|
+
const path = points.length > 0 ? (points[0] as any).o || '' : ''
|
|
163
163
|
|
|
164
164
|
Content(`#### ${ent.Name}
|
|
165
165
|
|
|
@@ -167,7 +167,7 @@ The \`prepare()\` method returns:
|
|
|
167
167
|
| --- | --- |
|
|
168
168
|
`)
|
|
169
169
|
each(fields, (field: any) => {
|
|
170
|
-
Content(`| \`${field.
|
|
170
|
+
Content(`| \`${field.n}\` | ${field.sh || ''} |
|
|
171
171
|
`)
|
|
172
172
|
})
|
|
173
173
|
|
|
@@ -10,11 +10,6 @@ import {
|
|
|
10
10
|
import { exampleValue } from './utility_js'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
14
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
15
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
16
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
17
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
18
13
|
function listMatchArg(ent: any): string {
|
|
19
14
|
const idF = entityIdField(ent)
|
|
20
15
|
return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -26,7 +21,6 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
|
26
21
|
|
|
27
22
|
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
28
23
|
|
|
29
|
-
// Find the first published entity for examples
|
|
30
24
|
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
31
25
|
|
|
32
26
|
const ctor = isAuthActive(model)
|
|
@@ -47,8 +41,6 @@ const client = ${ctor}
|
|
|
47
41
|
if (exampleEntity) {
|
|
48
42
|
const eName = nom(exampleEntity, 'Name')
|
|
49
43
|
const article = /^[aeiou]/i.test(eName) ? 'an' : 'a'
|
|
50
|
-
// ACTIVE ops only — an inactive op generates no method, so an example
|
|
51
|
-
// calling it would be wrong.
|
|
52
44
|
const opnames = entityOps(exampleEntity)
|
|
53
45
|
|
|
54
46
|
// Model-driven example fields, in parity with the ts target: derive the
|
|
@@ -57,20 +49,13 @@ const client = ${ctor}
|
|
|
57
49
|
// `idF` is the entity's id-like field name, or null when it has none —
|
|
58
50
|
// then load/remove match on no argument and update omits the id.
|
|
59
51
|
const idF = entityIdField(exampleEntity)
|
|
60
|
-
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
61
52
|
const eVar = exampleVarName(exampleEntity.name, 'js')
|
|
62
53
|
const exampleFields = (opname: string): string[] => {
|
|
63
|
-
// ids are rendered separately as the match key for update/remove; a
|
|
64
|
-
// REQUIRED id stays for create (dropping it makes the payload
|
|
65
|
-
// incomplete).
|
|
66
54
|
const items = opRequestShape(exampleEntity, opname).items
|
|
67
55
|
.filter((it: any) => (it.name !== idF && it.name !== 'id') ||
|
|
68
56
|
('create' === opname && !it.optional))
|
|
69
57
|
const required = items.filter((it: any) => !it.optional)
|
|
70
58
|
const optional = items.filter((it: any) => it.optional)
|
|
71
|
-
// create needs ALL required fields for parity with the typed ts target;
|
|
72
|
-
// update is a patch, so the required members plus a sample optional
|
|
73
|
-
// field or two suffice.
|
|
74
59
|
const chosen = 'create' === opname
|
|
75
60
|
? (required.length ? required : items.slice(0, 2))
|
|
76
61
|
: required.concat(optional).slice(0, Math.max(2, required.length))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey , targetFeatures } from '@voxgig/sdkgen'
|
|
3
3
|
import { ReadmeRefFeatures } from '@voxgig/sdkgen'
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -44,7 +44,7 @@ const ReadmeRef = cmp(function ReadmeRef(props: any) {
|
|
|
44
44
|
const { model } = props.ctx$
|
|
45
45
|
|
|
46
46
|
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
47
|
-
const feature =
|
|
47
|
+
const feature = targetFeatures(model, target)
|
|
48
48
|
|
|
49
49
|
const publishedEntities = each(entity).filter((e: any) => e.active !== false)
|
|
50
50
|
|
|
@@ -181,11 +181,10 @@ Alias for \`${model.Name}SDK.test()\`.
|
|
|
181
181
|
// Entity reference sections
|
|
182
182
|
publishedEntities.map((ent: any) => {
|
|
183
183
|
const opnames = Object.keys(ent.op || {})
|
|
184
|
-
const fields = ent.fields ||
|
|
184
|
+
const fields = Object.values(ent.fields || {})
|
|
185
185
|
// Model-driven id key: null when this entity has no id-like field, in
|
|
186
186
|
// which case load/remove match on no argument and update omits the id.
|
|
187
187
|
const idF = entityIdField(ent)
|
|
188
|
-
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
189
188
|
const eVar = exampleVarName(ent.name, 'js')
|
|
190
189
|
|
|
191
190
|
Content(`
|
|
@@ -208,7 +207,6 @@ const ${eVar} = client.${ent.Name}()
|
|
|
208
207
|
`)
|
|
209
208
|
|
|
210
209
|
|
|
211
|
-
// Field schema
|
|
212
210
|
if (fields.length > 0) {
|
|
213
211
|
Content(`### Fields
|
|
214
212
|
|
|
@@ -216,9 +214,9 @@ const ${eVar} = client.${ent.Name}()
|
|
|
216
214
|
| --- | --- | --- | --- |
|
|
217
215
|
`)
|
|
218
216
|
each(fields, (field: any) => {
|
|
219
|
-
const req = field.
|
|
220
|
-
const desc = field.
|
|
221
|
-
Content(`| \`${field.
|
|
217
|
+
const req = field.r ? 'Yes' : 'No'
|
|
218
|
+
const desc = field.sh || ''
|
|
219
|
+
Content(`| \`${field.n}\` | \`${canonToType(field.t, target.name)}\` | ${req} | ${desc} |
|
|
222
220
|
`)
|
|
223
221
|
})
|
|
224
222
|
|
|
@@ -245,7 +243,7 @@ const ${eVar} = client.${ent.Name}()
|
|
|
245
243
|
if (fop.active === false) return '-'
|
|
246
244
|
return 'Yes'
|
|
247
245
|
})
|
|
248
|
-
Content(`| \`${field.
|
|
246
|
+
Content(`| \`${field.n}\` | ${cols.join(' | ')} |
|
|
249
247
|
`)
|
|
250
248
|
})
|
|
251
249
|
|
|
@@ -406,9 +404,6 @@ const client = new ${model.Name}SDK({
|
|
|
406
404
|
\`\`\`
|
|
407
405
|
|
|
408
406
|
`)
|
|
409
|
-
// The shared feature reference: options, defaults, usage and the
|
|
410
|
-
// considerations. Model facts, identical in every target, so they are
|
|
411
|
-
// written once in cmp/ReadmeRefFeatures.ts rather than here.
|
|
412
407
|
ReadmeRefFeatures({ target })
|
|
413
408
|
}
|
|
414
409
|
|
|
@@ -10,11 +10,6 @@ import {
|
|
|
10
10
|
import { exampleValue } from './utility_js'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
// A `list()` on a NESTED entity needs its parent path params. The
|
|
14
|
-
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
15
|
-
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
16
|
-
// half-built URL — indistinguishable from "no such record". The model
|
|
17
|
-
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
18
13
|
function listMatchArg(ent: any): string {
|
|
19
14
|
const idF = entityIdField(ent)
|
|
20
15
|
return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
@@ -41,8 +36,6 @@ const client = ${ctor}
|
|
|
41
36
|
if (exampleEntity) {
|
|
42
37
|
const eName = nom(exampleEntity, 'Name')
|
|
43
38
|
const eVar = exampleVarName(eName.toLowerCase(), 'js')
|
|
44
|
-
// ACTIVE ops only — an inactive op generates no method, so an example
|
|
45
|
-
// calling it would be wrong.
|
|
46
39
|
const opnames = entityOps(exampleEntity)
|
|
47
40
|
|
|
48
41
|
if (opnames.includes('list')) {
|
|
@@ -12,27 +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
|
-
// Two exports, both struct.validate specs:
|
|
18
|
-
//
|
|
19
|
-
// OPTSPEC what makeOptions validates the caller's options against —
|
|
20
|
-
// the standard options from `main.kit.optspec` plus one entry
|
|
21
|
-
// per feature this target carries, built by helpers/optspec.
|
|
22
|
-
//
|
|
23
|
-
// ENTITYSPEC per entity, `{ data, op: { <opname> } }` — the record shape
|
|
24
|
-
// and each operation's request shape, mapped from the field
|
|
25
|
-
// type sentinels the model already carries (helpers/canonSpec).
|
|
26
|
-
// Emitted as an EMPTY MAP unless the `validate` feature is
|
|
27
|
-
// active, because nothing else reads it and every byte here is
|
|
28
|
-
// a byte in the consumer's package.
|
|
29
|
-
//
|
|
30
|
-
// A JSON OBJECT LITERAL, not a parsed string: JSON is a subset of the
|
|
31
|
-
// language's own literal syntax, so the values land as data with no parse
|
|
32
|
-
// step, and the backticks the sentinels carry (`\`$STRING\``) survive because
|
|
33
|
-
// JSON.stringify quotes and escapes them. The config emitter has to choose
|
|
34
|
-
// between a literal and a parsed blob because the config can be megabytes;
|
|
35
|
-
// the spec is bounded by the model's field count, so it does not.
|
|
36
15
|
const Schema = cmp(async function Schema(props: any) {
|
|
37
16
|
const ctx$ = props.ctx$
|
|
38
17
|
const target = props.target
|
|
@@ -46,7 +25,7 @@ const Schema = cmp(async function Schema(props: any) {
|
|
|
46
25
|
Content(`// ${model.const.Name} ${target.Name} SDK: generated schemas. Do not edit.
|
|
47
26
|
//
|
|
48
27
|
// Generated from the model: \`main.kit.optspec\` and each feature's
|
|
49
|
-
// \`config.options\` for OPTSPEC; entity \`fields
|
|
28
|
+
// \`config.options\` for OPTSPEC; entity \`fields{}.type\` for ENTITYSPEC.
|
|
50
29
|
|
|
51
30
|
const OPTSPEC = ${JSON.stringify(optspec, null, 2)}
|
|
52
31
|
|