@voxgig/sdkgen 4.34.0 → 4.34.1
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/copies.d.ts +4 -3
- package/dist/action/copies.js +142 -45
- package/dist/action/copies.js.map +1 -1
- package/dist/action/doctor.d.ts +1 -0
- package/dist/action/doctor.js +6 -2
- package/dist/action/doctor.js.map +1 -1
- package/dist/action/package.d.ts +3 -1
- package/dist/action/package.js +12 -5
- package/dist/action/package.js.map +1 -1
- package/dist/action/resolve.d.ts +11 -2
- package/dist/action/resolve.js +27 -0
- package/dist/action/resolve.js.map +1 -1
- package/dist/admin/npm-trust.js +7 -7
- package/dist/admin/npm-trust.js.map +1 -1
- package/dist/cmp/AgentGuide.js +4 -3
- package/dist/cmp/AgentGuide.js.map +1 -1
- package/dist/cmp/AgentGuideFeature.js +3 -2
- package/dist/cmp/AgentGuideFeature.js.map +1 -1
- package/dist/cmp/AgentGuideTop.js +2 -1
- package/dist/cmp/AgentGuideTop.js.map +1 -1
- package/dist/cmp/Changelog.js +2 -1
- package/dist/cmp/Changelog.js.map +1 -1
- package/dist/cmp/Deploy.js +2 -1
- package/dist/cmp/Deploy.js.map +1 -1
- package/dist/cmp/Entity.js +2 -2
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/ExternalTarget.js +2 -1
- package/dist/cmp/ExternalTarget.js.map +1 -1
- package/dist/cmp/Feature.js +2 -1
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureHook.js +2 -1
- package/dist/cmp/FeatureHook.js.map +1 -1
- package/dist/cmp/License.js +6 -4
- package/dist/cmp/License.js.map +1 -1
- package/dist/cmp/Main.js +2 -2
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/PublishWorkflow.js +2 -1
- package/dist/cmp/PublishWorkflow.js.map +1 -1
- package/dist/cmp/Readme.js +2 -1
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeEntity.js +4 -4
- package/dist/cmp/ReadmeEntity.js.map +1 -1
- package/dist/cmp/ReadmeErrors.js +6 -4
- package/dist/cmp/ReadmeErrors.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +4 -3
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeFeatures.js +4 -3
- package/dist/cmp/ReadmeFeatures.js.map +1 -1
- package/dist/cmp/ReadmeHowto.js +4 -3
- package/dist/cmp/ReadmeHowto.js.map +1 -1
- package/dist/cmp/ReadmeInstall.js +4 -3
- package/dist/cmp/ReadmeInstall.js.map +1 -1
- package/dist/cmp/ReadmeIntro.js +4 -4
- package/dist/cmp/ReadmeIntro.js.map +1 -1
- package/dist/cmp/ReadmeModel.js +6 -3
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js +4 -4
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeQuick.js +4 -3
- package/dist/cmp/ReadmeQuick.js.map +1 -1
- package/dist/cmp/ReadmeRef.js +4 -4
- package/dist/cmp/ReadmeRef.js.map +1 -1
- package/dist/cmp/ReadmeRefFeatures.js +2 -1
- package/dist/cmp/ReadmeRefFeatures.js.map +1 -1
- package/dist/cmp/ReadmeStation.js +2 -1
- package/dist/cmp/ReadmeStation.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +104 -35
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/ReadmeUnions.js +2 -1
- package/dist/cmp/ReadmeUnions.js.map +1 -1
- package/dist/cmp/Registered.js +4 -3
- package/dist/cmp/Registered.js.map +1 -1
- package/dist/cmp/Security.js +10 -6
- package/dist/cmp/Security.js.map +1 -1
- package/dist/cmp/Test.js +2 -1
- package/dist/cmp/Test.js.map +1 -1
- package/dist/cmp/TestControl.js +2 -1
- package/dist/cmp/TestControl.js.map +1 -1
- package/dist/helpers/component.d.ts +4 -0
- package/dist/helpers/component.js +54 -0
- package/dist/helpers/component.js.map +1 -0
- package/dist/helpers/definition.js +2 -2
- package/dist/helpers/definition.js.map +1 -1
- package/dist/helpers/definitionPlan.d.ts +16 -0
- package/dist/helpers/definitionPlan.js +116 -12
- package/dist/helpers/definitionPlan.js.map +1 -1
- package/dist/helpers/featureSource.d.ts +2 -1
- package/dist/helpers/featureSource.js +44 -2
- package/dist/helpers/featureSource.js.map +1 -1
- package/dist/helpers/flowGuard.d.ts +8 -0
- package/dist/helpers/flowGuard.js +84 -0
- package/dist/helpers/flowGuard.js.map +1 -0
- package/dist/helpers/generated.d.ts +26 -0
- package/dist/helpers/generated.js +363 -0
- package/dist/helpers/generated.js.map +1 -0
- package/dist/helpers/mcpTools.d.ts +11 -0
- package/dist/helpers/mcpTools.js +28 -0
- package/dist/helpers/mcpTools.js.map +1 -0
- package/dist/helpers/media.d.ts +9 -0
- package/dist/helpers/media.js +61 -0
- package/dist/helpers/media.js.map +1 -0
- package/dist/helpers/modelNames.js +147 -14
- package/dist/helpers/modelNames.js.map +1 -1
- package/dist/helpers/naming.d.ts +11 -1
- package/dist/helpers/naming.js +143 -0
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/npm.d.ts +13 -0
- package/dist/helpers/npm.js +41 -0
- package/dist/helpers/npm.js.map +1 -0
- package/dist/helpers/npmScripts.d.ts +4 -0
- package/dist/helpers/npmScripts.js +30 -0
- package/dist/helpers/npmScripts.js.map +1 -0
- package/dist/helpers/opExample.d.ts +5 -4
- package/dist/helpers/opExample.js +10 -7
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.d.ts +20 -4
- package/dist/helpers/opShape.js +197 -30
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/optional.d.ts +20 -0
- package/dist/helpers/optional.js +51 -0
- package/dist/helpers/optional.js.map +1 -0
- package/dist/helpers/packageMeta.d.ts +9 -1
- package/dist/helpers/packageMeta.js +70 -11
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/helpers/stdrep.js +3 -0
- package/dist/helpers/stdrep.js.map +1 -1
- package/dist/helpers/testPolicy.d.ts +9 -1
- package/dist/helpers/testPolicy.js +48 -0
- package/dist/helpers/testPolicy.js.map +1 -1
- package/dist/helpers/text.d.ts +2 -0
- package/dist/helpers/text.js +27 -0
- package/dist/helpers/text.js.map +1 -0
- package/dist/sdkgen.d.ts +15 -8
- package/dist/sdkgen.js +79 -12
- package/dist/sdkgen.js.map +1 -1
- package/dist/testkit.js +2 -1
- package/dist/testkit.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.d.ts +2 -1
- package/dist/utility.js +33 -18
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aontu +24 -1
- package/package.json +8 -2
- package/project/.sdk/model/feature/timeout.aontu +2 -0
- package/project/.sdk/model/target/go-mcp.aontu +2 -0
- package/project/.sdk/src/cmp/c/Config_c.ts +5 -0
- package/project/.sdk/src/cmp/c/EntityTypes_c.ts +1 -1
- package/project/.sdk/src/cmp/c/Entity_c.ts +1 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +4 -20
- package/project/.sdk/src/cmp/c/PrepareAuth_c.ts +169 -51
- package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +22 -13
- package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +10 -5
- package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +2 -2
- package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +3 -3
- package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +11 -10
- package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +37 -20
- package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +39 -21
- package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +9 -7
- package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +15 -4
- package/project/.sdk/src/cmp/c/TestClean_c.ts +56 -22
- package/project/.sdk/src/cmp/c/TestDirect_c.ts +2 -2
- package/project/.sdk/src/cmp/c/TestEntity_c.ts +77 -4
- package/project/.sdk/src/cmp/c/fragment/Entity.fragment.c +33 -27
- package/project/.sdk/src/cmp/c/fragment/EntityPatchOp.fragment.c +36 -0
- package/project/.sdk/src/cmp/c/fragment/Main.fragment.c +40 -7
- package/project/.sdk/src/cmp/clojure/Entity_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/Main_clojure.ts +3 -1
- package/project/.sdk/src/cmp/clojure/PrepareAuth_clojure.ts +44 -28
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +7 -4
- package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +3 -3
- package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +3 -3
- package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +7 -5
- package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +12 -4
- package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +24 -7
- package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +2 -2
- package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/TestClean_clojure.ts +53 -23
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +64 -5
- package/project/.sdk/src/cmp/clojure/fragment/Entity.fragment.clj +22 -11
- package/project/.sdk/src/cmp/clojure/fragment/EntityListOp.fragment.clj +7 -9
- package/project/.sdk/src/cmp/clojure/fragment/EntityPatchOp.fragment.clj +15 -0
- package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +1 -1
- package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +2 -2
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +3 -19
- package/project/.sdk/src/cmp/cpp/PrepareAuth_cpp.ts +38 -39
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +19 -12
- package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +11 -6
- package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +2 -2
- package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +10 -9
- package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +26 -18
- package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +42 -25
- package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +7 -7
- package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +11 -4
- package/project/.sdk/src/cmp/cpp/TestClean_cpp.ts +69 -21
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +135 -6
- package/project/.sdk/src/cmp/cpp/fragment/Entity.fragment.cpp +2 -0
- package/project/.sdk/src/cmp/cpp/fragment/EntityPatchOp.fragment.cpp +28 -0
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +3 -1
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +4 -1
- package/project/.sdk/src/cmp/csharp/PrepareAuth_csharp.ts +69 -23
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +7 -4
- package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +11 -9
- package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +17 -6
- package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +33 -16
- package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/TestClean_csharp.ts +67 -14
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +43 -31
- package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +187 -15
- package/project/.sdk/src/cmp/csharp/fragment/Entity.fragment.cs +2 -0
- package/project/.sdk/src/cmp/csharp/fragment/EntityBase.fragment.cs +11 -2
- package/project/.sdk/src/cmp/csharp/fragment/EntityPatchOp.fragment.cs +41 -0
- package/project/.sdk/src/cmp/csharp/fragment/Main.fragment.cs +28 -4
- package/project/.sdk/src/cmp/csharp/utility_csharp.ts +6 -0
- package/project/.sdk/src/cmp/elixir/EntityOperation_elixir.ts +5 -0
- package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +3 -3
- package/project/.sdk/src/cmp/elixir/Entity_elixir.ts +22 -1
- package/project/.sdk/src/cmp/elixir/MainEntity_elixir.ts +4 -2
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +6 -2
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +7 -0
- package/project/.sdk/src/cmp/elixir/PrepareAuth_elixir.ts +40 -30
- package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +13 -9
- package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +6 -5
- package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +2 -2
- package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +4 -4
- package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +13 -11
- package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +25 -12
- package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +29 -13
- package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +5 -4
- package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +5 -4
- package/project/.sdk/src/cmp/elixir/TestClean_elixir.ts +41 -12
- package/project/.sdk/src/cmp/elixir/TestEntity_elixir.ts +152 -23
- package/project/.sdk/src/cmp/elixir/fragment/Entity.fragment.ex +4 -4
- package/project/.sdk/src/cmp/elixir/fragment/EntityPatchOp.fragment.ex +35 -0
- package/project/.sdk/src/cmp/elixir/fragment/Main.fragment.ex +29 -5
- package/project/.sdk/src/cmp/elixir/fragment/Pipeline.fragment.ex +23 -16
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +1 -1
- package/project/.sdk/src/cmp/go/Entity_go.ts +1 -1
- package/project/.sdk/src/cmp/go/Main_go.ts +5 -6
- package/project/.sdk/src/cmp/go/PrepareAuth_go.ts +40 -26
- package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +1 -0
- package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +6 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +3 -3
- package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +3 -3
- package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +3 -2
- package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +14 -0
- package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +29 -7
- package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +1 -1
- package/project/.sdk/src/cmp/go/TestClean_go.ts +81 -18
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +47 -53
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +204 -24
- package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +79 -60
- package/project/.sdk/src/cmp/go/fragment/EntityPatchOp.fragment.go +49 -0
- package/project/.sdk/src/cmp/go/fragment/Main.fragment.go +26 -5
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +8 -10
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +240 -121
- package/project/.sdk/src/cmp/go-mcp/fragment/main.fragment.go +1 -1
- package/project/.sdk/src/cmp/go-mcp/fragment/tools.fragment.go +34 -27
- package/project/.sdk/src/cmp/java/EntityTypes_java.ts +1 -1
- package/project/.sdk/src/cmp/java/Entity_java.ts +1 -1
- package/project/.sdk/src/cmp/java/Main_java.ts +3 -1
- package/project/.sdk/src/cmp/java/PrepareAuth_java.ts +58 -23
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +7 -4
- package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +1 -1
- package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +3 -3
- package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +3 -3
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +2 -1
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +10 -1
- package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +22 -5
- package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +1 -1
- package/project/.sdk/src/cmp/java/TestClean_java.ts +57 -12
- package/project/.sdk/src/cmp/java/TestDirect_java.ts +50 -36
- package/project/.sdk/src/cmp/java/TestEntity_java.ts +180 -13
- package/project/.sdk/src/cmp/java/fragment/Entity.fragment.java +2 -0
- package/project/.sdk/src/cmp/java/fragment/EntityBase.fragment.java +5 -3
- package/project/.sdk/src/cmp/java/fragment/EntityPatchOp.fragment.java +45 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +1 -1
- package/project/.sdk/src/cmp/js/Entity_js.ts +1 -1
- package/project/.sdk/src/cmp/js/Main_js.ts +2 -0
- package/project/.sdk/src/cmp/js/Package_js.ts +11 -8
- package/project/.sdk/src/cmp/js/PrepareAuth_js.ts +39 -27
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +7 -4
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +0 -3
- package/project/.sdk/src/cmp/js/ReadmeInstall_js.ts +3 -3
- package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +3 -3
- package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +4 -3
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +17 -0
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +37 -8
- package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +2 -3
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +1 -1
- package/project/.sdk/src/cmp/js/TestClean_js.ts +52 -8
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +81 -54
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +95 -2
- package/project/.sdk/src/cmp/js/TestLive_js.ts +4 -3
- package/project/.sdk/src/cmp/js/fragment/Direct.test.fragment.js +4 -0
- package/project/.sdk/src/cmp/js/fragment/Entity.fragment.js +2 -0
- package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +2 -0
- package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +51 -25
- package/project/.sdk/src/cmp/js/fragment/EntityPatchOp.fragment.js +129 -0
- package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +39 -15
- package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +3 -1
- package/project/.sdk/src/cmp/kotlin/PrepareAuth_kotlin.ts +56 -31
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +7 -4
- package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +2 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +10 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +22 -5
- package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/TestClean_kotlin.ts +45 -10
- package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +49 -26
- package/project/.sdk/src/cmp/kotlin/TestEntity_kotlin.ts +168 -10
- package/project/.sdk/src/cmp/kotlin/fragment/Entity.fragment.kt +2 -0
- package/project/.sdk/src/cmp/kotlin/fragment/EntityBase.fragment.kt +2 -1
- package/project/.sdk/src/cmp/kotlin/fragment/EntityPatchOp.fragment.kt +40 -0
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/Entity_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/Main_lua.ts +2 -1
- package/project/.sdk/src/cmp/lua/PrepareAuth_lua.ts +42 -23
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +7 -4
- package/project/.sdk/src/cmp/lua/ReadmeExamplesTest_lua.ts +8 -2
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +3 -2
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +9 -1
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +22 -6
- package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/TestClean_lua.ts +46 -12
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +100 -124
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +173 -20
- package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +85 -48
- package/project/.sdk/src/cmp/lua/fragment/EntityPatchOp.fragment.lua +34 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +28 -6
- package/project/.sdk/src/cmp/ocaml/EntityOperation_ocaml.ts +8 -11
- package/project/.sdk/src/cmp/ocaml/Entity_ocaml.ts +8 -3
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +2 -1
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +7 -5
- package/project/.sdk/src/cmp/ocaml/PrepareAuth_ocaml.ts +39 -34
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +7 -4
- package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +3 -8
- package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +2 -2
- package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +3 -3
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +2 -1
- package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +9 -1
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +22 -6
- package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +3 -7
- package/project/.sdk/src/cmp/ocaml/TestClean_ocaml.ts +47 -14
- package/project/.sdk/src/cmp/ocaml/TestEntity_ocaml.ts +88 -3
- package/project/.sdk/src/cmp/ocaml/fragment/RunOp.fragment.ml +10 -11
- package/project/.sdk/src/cmp/ocaml/utility_ocaml.ts +7 -0
- package/project/.sdk/src/cmp/perl/Entity_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/Main_perl.ts +3 -1
- package/project/.sdk/src/cmp/perl/Package_perl.ts +5 -4
- package/project/.sdk/src/cmp/perl/PrepareAuth_perl.ts +48 -33
- package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +9 -4
- package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +2 -2
- package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +9 -3
- package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +7 -5
- package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +12 -4
- package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +26 -9
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +2 -2
- package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/TestClean_perl.ts +42 -11
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +121 -149
- package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +178 -17
- package/project/.sdk/src/cmp/perl/fragment/Entity.fragment.pm +16 -2
- package/project/.sdk/src/cmp/perl/fragment/EntityListOp.fragment.pm +2 -13
- package/project/.sdk/src/cmp/perl/fragment/EntityPatchOp.fragment.pm +32 -0
- package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +23 -5
- package/project/.sdk/src/cmp/perl/utility_perl.ts +16 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +3 -3
- package/project/.sdk/src/cmp/php/Entity_php.ts +4 -3
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +1 -1
- package/project/.sdk/src/cmp/php/Main_php.ts +3 -1
- package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
- package/project/.sdk/src/cmp/php/PrepareAuth_php.ts +36 -28
- package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +7 -4
- package/project/.sdk/src/cmp/php/ReadmeExamplesTest_php.ts +3 -3
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +2 -2
- package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +3 -3
- package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +2 -1
- package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +9 -1
- package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +23 -6
- package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +1 -1
- package/project/.sdk/src/cmp/php/TestClean_php.ts +73 -12
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +95 -127
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +219 -20
- package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +82 -45
- package/project/.sdk/src/cmp/php/fragment/EntityPatchOp.fragment.php +38 -0
- package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +26 -5
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +1 -1
- package/project/.sdk/src/cmp/py/Entity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Main_py.ts +6 -2
- package/project/.sdk/src/cmp/py/Package_py.ts +7 -0
- package/project/.sdk/src/cmp/py/PrepareAuth_py.ts +52 -26
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +7 -4
- package/project/.sdk/src/cmp/py/ReadmeExamplesTest_py.ts +12 -6
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +2 -1
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +9 -1
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +23 -6
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +1 -1
- package/project/.sdk/src/cmp/py/TestClean_py.ts +41 -10
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +91 -121
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +146 -20
- package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +62 -42
- package/project/.sdk/src/cmp/py/fragment/EntityPatchOp.fragment.py +27 -0
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +23 -5
- package/project/.sdk/src/cmp/py-data/Main_py-data.ts +1 -1
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/Entity_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/Main_rb.ts +5 -6
- package/project/.sdk/src/cmp/rb/Package_rb.ts +3 -1
- package/project/.sdk/src/cmp/rb/PrepareAuth_rb.ts +30 -28
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +9 -5
- package/project/.sdk/src/cmp/rb/ReadmeExamplesTest_rb.ts +16 -8
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +3 -2
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +14 -5
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +26 -8
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/TestClean_rb.ts +36 -10
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +95 -126
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +177 -21
- package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +49 -29
- package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +2 -11
- package/project/.sdk/src/cmp/rb/fragment/EntityPatchOp.fragment.rb +31 -0
- package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +19 -5
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +2 -2
- package/project/.sdk/src/cmp/rust/Main_rust.ts +7 -6
- package/project/.sdk/src/cmp/rust/PrepareAuth_rust.ts +56 -29
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +16 -9
- package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +11 -4
- package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +12 -9
- package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +25 -17
- package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +35 -21
- package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +6 -8
- package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +13 -5
- package/project/.sdk/src/cmp/rust/TestClean_rust.ts +80 -21
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +124 -79
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +164 -17
- package/project/.sdk/src/cmp/rust/fragment/Entity.fragment.rs +44 -23
- package/project/.sdk/src/cmp/rust/fragment/EntityPatchOp.fragment.rs +41 -0
- package/project/.sdk/src/cmp/rust/fragment/Main.fragment.rs +39 -9
- package/project/.sdk/src/cmp/scala/Config_scala.ts +4 -0
- package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +1 -1
- package/project/.sdk/src/cmp/scala/Entity_scala.ts +1 -1
- package/project/.sdk/src/cmp/scala/Main_scala.ts +4 -20
- package/project/.sdk/src/cmp/scala/PrepareAuth_scala.ts +56 -24
- package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +7 -4
- package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +1 -1
- package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +2 -1
- package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +10 -1
- package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +22 -5
- package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +1 -1
- package/project/.sdk/src/cmp/scala/TestClean_scala.ts +39 -10
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +113 -3
- package/project/.sdk/src/cmp/scala/fragment/Entity.fragment.scala +2 -0
- package/project/.sdk/src/cmp/scala/fragment/EntityBase.fragment.scala +4 -2
- package/project/.sdk/src/cmp/scala/fragment/EntityPatchOp.fragment.scala +33 -0
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/Entity_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/Main_swift.ts +6 -2
- package/project/.sdk/src/cmp/swift/PrepareAuth_swift.ts +56 -29
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +7 -4
- package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +2 -1
- package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +10 -1
- package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +21 -5
- package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/TestClean_swift.ts +44 -10
- package/project/.sdk/src/cmp/swift/TestEntity_swift.ts +90 -2
- package/project/.sdk/src/cmp/swift/fragment/Entity.fragment.swift +2 -0
- package/project/.sdk/src/cmp/swift/fragment/EntityBase.fragment.swift +9 -1
- package/project/.sdk/src/cmp/swift/fragment/EntityPatchOp.fragment.swift +24 -0
- package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +23 -3
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +9 -3
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +5 -5
- package/project/.sdk/src/cmp/ts/Main_ts.ts +4 -3
- package/project/.sdk/src/cmp/ts/Package_ts.ts +18 -10
- package/project/.sdk/src/cmp/ts/PrepareAuth_ts.ts +37 -28
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +7 -4
- package/project/.sdk/src/cmp/ts/ReadmeExamplesTest_ts.ts +39 -21
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +0 -3
- package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +3 -3
- package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +3 -3
- package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +4 -3
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +10 -1
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +37 -8
- package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +2 -3
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +1 -1
- package/project/.sdk/src/cmp/ts/TestClean_ts.ts +52 -8
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +50 -109
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +92 -2
- package/project/.sdk/src/cmp/ts/TestLive_ts.ts +4 -3
- package/project/.sdk/src/cmp/ts/fragment/Direct.test.fragment.ts +3 -0
- package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +2 -0
- package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +3 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +49 -24
- package/project/.sdk/src/cmp/ts/fragment/EntityPatchOp.fragment.ts +126 -0
- package/project/.sdk/src/cmp/ts/fragment/Main.fragment.ts +50 -18
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +2 -2
- package/project/.sdk/src/cmp/zig/Main_zig.ts +5 -22
- package/project/.sdk/src/cmp/zig/Package_zig.ts +11 -2
- package/project/.sdk/src/cmp/zig/PrepareAuth_zig.ts +57 -31
- package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +17 -9
- package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +14 -4
- package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +2 -2
- package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +3 -3
- package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +12 -10
- package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +29 -12
- package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +45 -22
- package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +8 -4
- package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +10 -3
- package/project/.sdk/src/cmp/zig/TestClean_zig.ts +67 -28
- package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +54 -5
- package/project/.sdk/src/cmp/zig/Test_zig.ts +1 -0
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +44 -34
- package/project/.sdk/src/cmp/zig/fragment/EntityPatchOp.fragment.zig +26 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +30 -6
- package/project/.sdk/src/cmp/zig/fragment/Root.fragment.zig +1 -0
- package/project/.sdk/tm/c/LICENSE +1 -1
- package/project/.sdk/tm/c/core/context.c +2 -1
- package/project/.sdk/tm/c/core/helpers.c +21 -0
- package/project/.sdk/tm/c/core/response.c +103 -0
- package/project/.sdk/tm/c/core/sdk.h +26 -0
- package/project/.sdk/tm/c/core/spec.c +10 -0
- package/project/.sdk/tm/c/feature/test.c +46 -2
- package/project/.sdk/tm/c/feature/validate.c +2 -0
- package/project/.sdk/tm/c/tests/feature_harness.h +1 -1
- package/project/.sdk/tm/c/tests/primary_utility_test.c +9 -5
- package/project/.sdk/tm/c/tests/server_variable_test.c +80 -0
- package/project/.sdk/tm/c/utility/make_fetch_def.c +5 -1
- package/project/.sdk/tm/c/utility/make_options.c +84 -6
- package/project/.sdk/tm/c/utility/make_point.c +100 -8
- package/project/.sdk/tm/c/utility/make_spec.c +17 -1
- package/project/.sdk/tm/c/utility/make_url.c +38 -1
- package/project/.sdk/tm/c/utility/media.c +107 -0
- package/project/.sdk/tm/c/utility/param.c +52 -28
- package/project/.sdk/tm/c/utility/prepare_body.c +1 -0
- package/project/.sdk/tm/c/utility/prepare_headers.c +199 -29
- package/project/.sdk/tm/c/utility/prepare_query.c +24 -2
- package/project/.sdk/tm/c/utility/result_body.c +4 -0
- package/project/.sdk/tm/c/utility/transform_request.c +54 -17
- package/project/.sdk/tm/clojure/LICENSE +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +0 -3
- package/project/.sdk/tm/clojure/src/sdk/client.clj +19 -5
- package/project/.sdk/tm/clojure/src/sdk/core.clj +415 -117
- package/project/.sdk/tm/clojure/src/sdk/features.clj +44 -20
- package/project/.sdk/tm/clojure/test/sdk/test/feature.clj +21 -1
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +10 -2
- package/project/.sdk/tm/cpp/LICENSE +1 -1
- package/project/.sdk/tm/cpp/core/types.hpp +131 -7
- package/project/.sdk/tm/cpp/feature/test.hpp +32 -2
- package/project/.sdk/tm/cpp/feature/timeout.hpp +29 -9
- package/project/.sdk/tm/cpp/feature/validate.hpp +2 -0
- package/project/.sdk/tm/cpp/test/feature_test.cpp +37 -0
- package/project/.sdk/tm/cpp/test/harness.hpp +1 -1
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +6 -2
- package/project/.sdk/tm/cpp/test/server_variable_test.cpp +57 -0
- package/project/.sdk/tm/cpp/utility/cookie.hpp +36 -0
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +441 -82
- package/project/.sdk/tm/csharp/LICENSE +1 -1
- package/project/.sdk/tm/csharp/core/Context.cs +1 -1
- package/project/.sdk/tm/csharp/core/Helpers.cs +17 -0
- package/project/.sdk/tm/csharp/core/Response.cs +75 -0
- package/project/.sdk/tm/csharp/core/Spec.cs +3 -0
- package/project/.sdk/tm/csharp/feature/TestFeature.cs +41 -3
- package/project/.sdk/tm/csharp/feature/TimeoutFeature.cs +31 -3
- package/project/.sdk/tm/csharp/feature/ValidateFeature.cs +2 -0
- package/project/.sdk/tm/csharp/test/FeatureHarness.cs +1 -1
- package/project/.sdk/tm/csharp/test/FeatureTest.cs +35 -0
- package/project/.sdk/tm/csharp/test/PipelineTest.cs +28 -0
- package/project/.sdk/tm/csharp/test/Runner.cs +119 -0
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +8 -3
- package/project/.sdk/tm/csharp/utility/Fetcher.cs +25 -7
- package/project/.sdk/tm/csharp/utility/MakeFetchDef.cs +1 -5
- package/project/.sdk/tm/csharp/utility/MakeOptions.cs +8 -6
- package/project/.sdk/tm/csharp/utility/MakePoint.cs +68 -17
- package/project/.sdk/tm/csharp/utility/MakeSpec.cs +24 -6
- package/project/.sdk/tm/csharp/utility/MakeUrl.cs +21 -1
- package/project/.sdk/tm/csharp/utility/Media.cs +124 -0
- package/project/.sdk/tm/csharp/utility/Param.cs +57 -20
- package/project/.sdk/tm/csharp/utility/PrepareBody.cs +4 -0
- package/project/.sdk/tm/csharp/utility/PrepareHeaders.cs +103 -24
- package/project/.sdk/tm/csharp/utility/PrepareQuery.cs +33 -3
- package/project/.sdk/tm/csharp/utility/ResultBody.cs +5 -0
- package/project/.sdk/tm/csharp/utility/TransformRequest.cs +21 -13
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +3 -2
- package/project/.sdk/tm/elixir/LICENSE +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/context.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/core.ex +7 -2
- package/project/.sdk/tm/elixir/lib/projectname/entity_base.ex +43 -12
- package/project/.sdk/tm/elixir/lib/projectname/feature/test.ex +47 -21
- package/project/.sdk/tm/elixir/lib/projectname/feature/validate.ex +2 -0
- package/project/.sdk/tm/elixir/lib/projectname/utility.ex +482 -129
- package/project/.sdk/tm/elixir/test/support/feature_harness.ex +1 -0
- package/project/.sdk/tm/go/LICENSE +1 -1
- package/project/.sdk/tm/go/core/context.go +1 -1
- package/project/.sdk/tm/go/core/helpers.go +19 -1
- package/project/.sdk/tm/go/core/response.go +72 -0
- package/project/.sdk/tm/go/core/spec.go +3 -0
- package/project/.sdk/tm/go/core/types.go +9 -1
- package/project/.sdk/tm/go/feature/test_feature.go +44 -3
- package/project/.sdk/tm/go/feature/timeout_feature.go +39 -22
- package/project/.sdk/tm/go/feature/validate_feature.go +2 -0
- package/project/.sdk/tm/go/test/feature_corpus_test.go +45 -1
- package/project/.sdk/tm/go/test/feature_harness_test.go +1 -1
- package/project/.sdk/tm/go/test/feature_test.go +86 -0
- package/project/.sdk/tm/go/test/primary_utility_test.go +37 -1
- package/project/.sdk/tm/go/test/testsupport_test.go +106 -0
- package/project/.sdk/tm/go/utility/fetcher.go +20 -6
- package/project/.sdk/tm/go/utility/make_fetch_def.go +1 -7
- package/project/.sdk/tm/go/utility/make_options.go +12 -6
- package/project/.sdk/tm/go/utility/make_point.go +52 -3
- package/project/.sdk/tm/go/utility/make_spec.go +23 -3
- package/project/.sdk/tm/go/utility/make_url.go +23 -1
- package/project/.sdk/tm/go/utility/media.go +111 -0
- package/project/.sdk/tm/go/utility/param.go +61 -20
- package/project/.sdk/tm/go/utility/prepare_body.go +3 -0
- package/project/.sdk/tm/go/utility/prepare_headers.go +108 -22
- package/project/.sdk/tm/go/utility/prepare_query.go +25 -2
- package/project/.sdk/tm/go/utility/result_body.go +8 -0
- package/project/.sdk/tm/go/utility/transform_request.go +20 -9
- package/project/.sdk/tm/java/LICENSE +1 -1
- package/project/.sdk/tm/java/core/Context.java +1 -1
- package/project/.sdk/tm/java/core/Helpers.java +13 -0
- package/project/.sdk/tm/java/core/Response.java +61 -0
- package/project/.sdk/tm/java/core/SdkClient.java +21 -3
- package/project/.sdk/tm/java/core/SdkEntity.java +2 -0
- package/project/.sdk/tm/java/core/Spec.java +4 -0
- package/project/.sdk/tm/java/feature/TestFeature.java +46 -3
- package/project/.sdk/tm/java/feature/TimeoutFeature.java +51 -18
- package/project/.sdk/tm/java/feature/ValidateFeature.java +2 -0
- package/project/.sdk/tm/java/test/FeatureCorpusTest.java +93 -35
- package/project/.sdk/tm/java/test/FeatureHarness.java +1 -0
- package/project/.sdk/tm/java/test/FeatureTest.java +33 -0
- package/project/.sdk/tm/java/test/PipelineTest.java +4 -1
- package/project/.sdk/tm/java/test/RunnerSupport.java +97 -0
- package/project/.sdk/tm/java/utility/Clean.java +17 -7
- package/project/.sdk/tm/java/utility/Fetcher.java +27 -3
- package/project/.sdk/tm/java/utility/MakeFetchDef.java +1 -7
- package/project/.sdk/tm/java/utility/MakePoint.java +62 -10
- package/project/.sdk/tm/java/utility/MakeSpec.java +26 -1
- package/project/.sdk/tm/java/utility/MakeUrl.java +23 -1
- package/project/.sdk/tm/java/utility/Media.java +117 -0
- package/project/.sdk/tm/java/utility/Param.java +59 -20
- package/project/.sdk/tm/java/utility/PrepareBody.java +3 -0
- package/project/.sdk/tm/java/utility/PrepareHeaders.java +76 -18
- package/project/.sdk/tm/java/utility/PrepareMethod.java +2 -1
- package/project/.sdk/tm/java/utility/PrepareQuery.java +26 -2
- package/project/.sdk/tm/java/utility/ResultBody.java +5 -0
- package/project/.sdk/tm/java/utility/TransformRequest.java +24 -11
- package/project/.sdk/tm/js/LICENSE +1 -1
- package/project/.sdk/tm/js/src/Context.js +1 -1
- package/project/.sdk/tm/js/src/Control.js +1 -0
- package/project/.sdk/tm/js/src/Response.js +10 -1
- package/project/.sdk/tm/js/src/Spec.js +3 -0
- package/project/.sdk/tm/js/src/feature/base/BaseFeature.js +28 -0
- package/project/.sdk/tm/js/src/feature/netsim/NetsimFeature.js +10 -8
- package/project/.sdk/tm/js/src/feature/ratelimit/RatelimitFeature.js +8 -6
- package/project/.sdk/tm/js/src/feature/retry/RetryFeature.js +17 -4
- package/project/.sdk/tm/js/src/feature/test/TestFeature.js +40 -12
- package/project/.sdk/tm/js/src/feature/timeout/TimeoutFeature.js +17 -3
- package/project/.sdk/tm/js/src/feature/validate/ValidateFeature.js +2 -0
- package/project/.sdk/tm/js/src/utility/CleanUtility.js +25 -1
- package/project/.sdk/tm/js/src/utility/FetcherUtility.js +23 -1
- package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +2 -2
- package/project/.sdk/tm/js/src/utility/MakeFetchDefUtility.js +14 -2
- package/project/.sdk/tm/js/src/utility/MakeOptionsUtility.js +6 -6
- package/project/.sdk/tm/js/src/utility/MakePointUtility.js +39 -2
- package/project/.sdk/tm/js/src/utility/MakeRequestUtility.js +27 -2
- package/project/.sdk/tm/js/src/utility/MakeResponseUtility.js +2 -1
- package/project/.sdk/tm/js/src/utility/MakeSpecUtility.js +14 -1
- package/project/.sdk/tm/js/src/utility/MakeUrlUtility.js +23 -0
- package/project/.sdk/tm/js/src/utility/MediaUtility.js +145 -0
- package/project/.sdk/tm/js/src/utility/ParamUtility.js +46 -18
- package/project/.sdk/tm/js/src/utility/PrepareBodyUtility.js +6 -0
- package/project/.sdk/tm/js/src/utility/PrepareHeadersUtility.js +55 -14
- package/project/.sdk/tm/js/src/utility/PrepareMethodUtility.js +9 -0
- package/project/.sdk/tm/js/src/utility/PrepareQueryUtility.js +23 -6
- package/project/.sdk/tm/js/src/utility/ResultBodyUtility.js +60 -3
- package/project/.sdk/tm/js/src/utility/TransformRequestUtility.js +16 -7
- package/project/.sdk/tm/js/test/definition-runner.js +103 -3
- package/project/.sdk/tm/js/test/feature/Corpus.test.js +47 -16
- package/project/.sdk/tm/js/test/feature/harness.js +4 -1
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +7 -7
- package/project/.sdk/tm/js/test/feature.test.js +134 -0
- package/project/.sdk/tm/js/test/live-contract.js +73 -3
- package/project/.sdk/tm/js/test/live-entity.js +34 -15
- package/project/.sdk/tm/js/test/live-runner.js +52 -7
- package/project/.sdk/tm/js/test/live-scenarios.js +4 -4
- package/project/.sdk/tm/js/test/pipeline.test.js +52 -1
- package/project/.sdk/tm/js/test/utility.js +30 -4
- package/project/.sdk/tm/kotlin/LICENSE +1 -1
- package/project/.sdk/tm/kotlin/core/Context.kt +1 -1
- package/project/.sdk/tm/kotlin/core/Helpers.kt +8 -0
- package/project/.sdk/tm/kotlin/core/Interfaces.kt +2 -0
- package/project/.sdk/tm/kotlin/core/Response.kt +65 -0
- package/project/.sdk/tm/kotlin/core/SdkClient.kt +20 -3
- package/project/.sdk/tm/kotlin/core/Spec.kt +3 -0
- package/project/.sdk/tm/kotlin/feature/TestFeature.kt +23 -3
- package/project/.sdk/tm/kotlin/feature/TimeoutFeature.kt +42 -15
- package/project/.sdk/tm/kotlin/feature/ValidateFeature.kt +2 -0
- package/project/.sdk/tm/kotlin/test/FeatureHarness.kt +1 -1
- package/project/.sdk/tm/kotlin/test/FeatureTest.kt +32 -0
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +90 -0
- package/project/.sdk/tm/kotlin/test/ServerVariableTest.kt +50 -0
- package/project/.sdk/tm/kotlin/utility/CoreUtil.kt +9 -7
- package/project/.sdk/tm/kotlin/utility/Fetcher.kt +24 -4
- package/project/.sdk/tm/kotlin/utility/MakeOptions.kt +26 -0
- package/project/.sdk/tm/kotlin/utility/MakePoint.kt +57 -12
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +26 -7
- package/project/.sdk/tm/kotlin/utility/Media.kt +83 -0
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +127 -48
- package/project/.sdk/tm/kotlin/utility/ResultTransform.kt +18 -7
- package/project/.sdk/tm/lua/LICENSE +1 -1
- package/project/.sdk/tm/lua/core/context.lua +1 -1
- package/project/.sdk/tm/lua/core/helpers.lua +103 -0
- package/project/.sdk/tm/lua/core/response.lua +3 -0
- package/project/.sdk/tm/lua/core/spec.lua +3 -0
- package/project/.sdk/tm/lua/feature/test_feature.lua +36 -3
- package/project/.sdk/tm/lua/feature/validate_feature.lua +2 -0
- package/project/.sdk/tm/lua/test/feature_test.lua +1 -1
- package/project/.sdk/tm/lua/test/runner.lua +107 -0
- package/project/.sdk/tm/lua/utility/fetcher.lua +9 -2
- package/project/.sdk/tm/lua/utility/make_fetch_def.lua +2 -6
- package/project/.sdk/tm/lua/utility/make_options.lua +10 -7
- package/project/.sdk/tm/lua/utility/make_point.lua +65 -12
- package/project/.sdk/tm/lua/utility/make_spec.lua +19 -4
- package/project/.sdk/tm/lua/utility/make_url.lua +22 -1
- package/project/.sdk/tm/lua/utility/media.lua +106 -0
- package/project/.sdk/tm/lua/utility/param.lua +5 -45
- package/project/.sdk/tm/lua/utility/prepare_body.lua +5 -0
- package/project/.sdk/tm/lua/utility/prepare_headers.lua +71 -21
- package/project/.sdk/tm/lua/utility/prepare_query.lua +28 -6
- package/project/.sdk/tm/lua/utility/result_body.lua +7 -0
- package/project/.sdk/tm/lua/utility/transform_request.lua +23 -10
- package/project/.sdk/tm/lua/utility/unreadable_body.lua +70 -0
- package/project/.sdk/tm/ocaml/LICENSE +1 -1
- package/project/.sdk/tm/ocaml/sdk_features.ml +56 -10
- package/project/.sdk/tm/ocaml/sdk_helpers.ml +9 -0
- package/project/.sdk/tm/ocaml/sdk_runtime.ml +359 -85
- package/project/.sdk/tm/ocaml/sdk_types.ml +6 -0
- package/project/.sdk/tm/ocaml/test/harness.ml +1 -1
- package/project/.sdk/tm/ocaml/test/t_pipeline.ml +2 -1
- package/project/.sdk/tm/perl/LICENSE +1 -1
- package/project/.sdk/tm/perl/core/context.pm +1 -1
- package/project/.sdk/tm/perl/core/response.pm +2 -0
- package/project/.sdk/tm/perl/core/spec.pm +3 -0
- package/project/.sdk/tm/perl/feature/test_feature.pm +26 -3
- package/project/.sdk/tm/perl/feature/validate_feature.pm +2 -0
- package/project/.sdk/tm/perl/t/feature.t +1 -1
- package/project/.sdk/tm/perl/t/feature_corpus.t +72 -33
- package/project/.sdk/tm/perl/t/runner.pm +86 -0
- package/project/.sdk/tm/perl/t/server_variables.t +39 -0
- package/project/.sdk/tm/perl/utility/clean.pm +12 -7
- package/project/.sdk/tm/perl/utility/fetcher.pm +32 -19
- package/project/.sdk/tm/perl/utility/make_fetch_def.pm +4 -4
- package/project/.sdk/tm/perl/utility/make_options.pm +24 -0
- package/project/.sdk/tm/perl/utility/make_point.pm +55 -9
- package/project/.sdk/tm/perl/utility/make_spec.pm +27 -3
- package/project/.sdk/tm/perl/utility/make_url.pm +13 -1
- package/project/.sdk/tm/perl/utility/media.pm +109 -0
- package/project/.sdk/tm/perl/utility/param.pm +50 -24
- package/project/.sdk/tm/perl/utility/prepare_body.pm +11 -3
- package/project/.sdk/tm/perl/utility/prepare_headers.pm +63 -16
- package/project/.sdk/tm/perl/utility/prepare_method.pm +13 -0
- package/project/.sdk/tm/perl/utility/prepare_query.pm +18 -4
- package/project/.sdk/tm/perl/utility/result_body.pm +60 -0
- package/project/.sdk/tm/perl/utility/transform_request.pm +23 -8
- package/project/.sdk/tm/php/LICENSE +1 -1
- package/project/.sdk/tm/php/core/Context.php +1 -1
- package/project/.sdk/tm/php/core/Response.php +3 -0
- package/project/.sdk/tm/php/core/Spec.php +4 -0
- package/project/.sdk/tm/php/feature/CostFeature.php +2 -7
- package/project/.sdk/tm/php/feature/TestFeature.php +33 -3
- package/project/.sdk/tm/php/feature/ValidateFeature.php +14 -12
- package/project/.sdk/tm/php/test/FeatureCorpusTest.php +90 -35
- package/project/.sdk/tm/php/test/FeatureTest.php +4 -5
- package/project/.sdk/tm/php/test/PipelineTest.php +18 -1
- package/project/.sdk/tm/php/test/Runner.php +86 -0
- package/project/.sdk/tm/php/utility/Clean.php +10 -5
- package/project/.sdk/tm/php/utility/Fetcher.php +48 -6
- package/project/.sdk/tm/php/utility/MakeFetchDef.php +2 -1
- package/project/.sdk/tm/php/utility/MakePoint.php +55 -11
- package/project/.sdk/tm/php/utility/MakeSpec.php +21 -4
- package/project/.sdk/tm/php/utility/MakeUrl.php +16 -1
- package/project/.sdk/tm/php/utility/Media.php +111 -0
- package/project/.sdk/tm/php/utility/Param.php +66 -27
- package/project/.sdk/tm/php/utility/PrepareBody.php +5 -0
- package/project/.sdk/tm/php/utility/PrepareHeaders.php +83 -23
- package/project/.sdk/tm/php/utility/PrepareMethod.php +15 -0
- package/project/.sdk/tm/php/utility/PrepareQuery.php +22 -8
- package/project/.sdk/tm/php/utility/ResultBody.php +71 -0
- package/project/.sdk/tm/php/utility/TransformRequest.php +22 -11
- package/project/.sdk/tm/py/LICENSE +1 -1
- package/project/.sdk/tm/py/pkg/core/context.py +1 -1
- package/project/.sdk/tm/py/pkg/core/response.py +3 -0
- package/project/.sdk/tm/py/pkg/core/spec.py +3 -0
- package/project/.sdk/tm/py/pkg/feature/test_feature.py +27 -3
- package/project/.sdk/tm/py/pkg/feature/validate_feature.py +2 -0
- package/project/.sdk/tm/py/pkg/utility/fetcher.py +17 -7
- package/project/.sdk/tm/py/pkg/utility/make_fetch_def.py +2 -5
- package/project/.sdk/tm/py/pkg/utility/make_options.py +14 -8
- package/project/.sdk/tm/py/pkg/utility/make_point.py +40 -4
- package/project/.sdk/tm/py/pkg/utility/make_spec.py +12 -4
- package/project/.sdk/tm/py/pkg/utility/make_url.py +19 -1
- package/project/.sdk/tm/py/pkg/utility/media.py +88 -0
- package/project/.sdk/tm/py/pkg/utility/param.py +47 -18
- package/project/.sdk/tm/py/pkg/utility/prepare_body.py +4 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_headers.py +56 -20
- package/project/.sdk/tm/py/pkg/utility/prepare_method.py +7 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_query.py +17 -8
- package/project/.sdk/tm/py/pkg/utility/result_body.py +51 -0
- package/project/.sdk/tm/py/pkg/utility/transform_request.py +18 -9
- package/project/.sdk/tm/py/test/feature_harness.py +1 -1
- package/project/.sdk/tm/py/test/runner.py +77 -2
- package/project/.sdk/tm/py/test/test_feature_corpus.py +69 -32
- package/project/.sdk/tm/py-data/LICENSE +1 -1
- package/project/.sdk/tm/py-data/Makefile +2 -2
- package/project/.sdk/tm/rb/LICENSE +1 -1
- package/project/.sdk/tm/rb/core/context.rb +1 -1
- package/project/.sdk/tm/rb/core/response.rb +3 -1
- package/project/.sdk/tm/rb/core/spec.rb +4 -1
- package/project/.sdk/tm/rb/feature/test_feature.rb +27 -8
- package/project/.sdk/tm/rb/feature/validate_feature.rb +3 -1
- package/project/.sdk/tm/rb/test/feature_corpus_test.rb +74 -30
- package/project/.sdk/tm/rb/test/feature_test.rb +1 -1
- package/project/.sdk/tm/rb/test/runner.rb +54 -2
- package/project/.sdk/tm/rb/utility/clean.rb +14 -6
- package/project/.sdk/tm/rb/utility/fetcher.rb +22 -14
- package/project/.sdk/tm/rb/utility/make_fetch_def.rb +2 -4
- package/project/.sdk/tm/rb/utility/make_point.rb +44 -8
- package/project/.sdk/tm/rb/utility/make_spec.rb +14 -2
- package/project/.sdk/tm/rb/utility/make_url.rb +13 -1
- package/project/.sdk/tm/rb/utility/media.rb +75 -0
- package/project/.sdk/tm/rb/utility/param.rb +44 -25
- package/project/.sdk/tm/rb/utility/prepare_body.rb +4 -1
- package/project/.sdk/tm/rb/utility/prepare_headers.rb +50 -16
- package/project/.sdk/tm/rb/utility/prepare_method.rb +6 -0
- package/project/.sdk/tm/rb/utility/prepare_query.rb +12 -4
- package/project/.sdk/tm/rb/utility/result_body.rb +45 -0
- package/project/.sdk/tm/rb/utility/transform_request.rb +17 -7
- package/project/.sdk/tm/rust/LICENSE +1 -1
- package/project/.sdk/tm/rust/core/context.rs +1 -1
- package/project/.sdk/tm/rust/core/helpers.rs +10 -0
- package/project/.sdk/tm/rust/core/response.rs +80 -1
- package/project/.sdk/tm/rust/core/spec.rs +4 -0
- package/project/.sdk/tm/rust/core/types.rs +1 -0
- package/project/.sdk/tm/rust/feature/test.rs +29 -2
- package/project/.sdk/tm/rust/feature/validate.rs +2 -0
- package/project/.sdk/tm/rust/tests/common/mod.rs +108 -1
- package/project/.sdk/tm/rust/utility/clean.rs +0 -2
- package/project/.sdk/tm/rust/utility/fetcher.rs +19 -11
- package/project/.sdk/tm/rust/utility/make_fetch_def.rs +12 -1
- package/project/.sdk/tm/rust/utility/make_options.rs +6 -5
- package/project/.sdk/tm/rust/utility/make_point.rs +80 -16
- package/project/.sdk/tm/rust/utility/make_spec.rs +23 -4
- package/project/.sdk/tm/rust/utility/make_url.rs +39 -2
- package/project/.sdk/tm/rust/utility/media.rs +116 -0
- package/project/.sdk/tm/rust/utility/mod.rs +1 -0
- package/project/.sdk/tm/rust/utility/param.rs +66 -19
- package/project/.sdk/tm/rust/utility/prepare_body.rs +4 -0
- package/project/.sdk/tm/rust/utility/prepare_headers.rs +85 -28
- package/project/.sdk/tm/rust/utility/prepare_query.rs +27 -5
- package/project/.sdk/tm/rust/utility/result_body.rs +15 -2
- package/project/.sdk/tm/rust/utility/transform_request.rs +27 -14
- package/project/.sdk/tm/scala/LICENSE +1 -1
- package/project/.sdk/tm/scala/Makefile +3 -1
- package/project/.sdk/tm/scala/core/Context.scala +1 -1
- package/project/.sdk/tm/scala/core/Contracts.scala +1 -0
- package/project/.sdk/tm/scala/core/Helpers.scala +7 -0
- package/project/.sdk/tm/scala/core/Response.scala +55 -0
- package/project/.sdk/tm/scala/core/SdkClient.scala +18 -5
- package/project/.sdk/tm/scala/core/Spec.scala +3 -0
- package/project/.sdk/tm/scala/feature/TestFeature.scala +36 -3
- package/project/.sdk/tm/scala/feature/TimeoutFeature.scala +39 -13
- package/project/.sdk/tm/scala/feature/ValidateFeature.scala +2 -0
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +16 -1
- package/project/.sdk/tm/scala/sdktest/ServerVariableTest.scala +49 -0
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +1 -0
- package/project/.sdk/tm/scala/utility/Fetcher.scala +17 -2
- package/project/.sdk/tm/scala/utility/Make.scala +141 -43
- package/project/.sdk/tm/scala/utility/MakeSpec.scala +20 -2
- package/project/.sdk/tm/scala/utility/Media.scala +96 -0
- package/project/.sdk/tm/scala/utility/Misc.scala +56 -23
- package/project/.sdk/tm/scala/utility/Prepare.scala +84 -31
- package/project/.sdk/tm/scala/utility/Results.scala +5 -0
- package/project/.sdk/tm/scala/utility/Transform.scala +15 -19
- package/project/.sdk/tm/swift/LICENSE +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Context.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Response.swift +57 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Spec.swift +3 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Support.swift +8 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TestFeature.swift +34 -3
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TimeoutFeature.swift +19 -3
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/ValidateFeature.swift +2 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Fetcher.swift +21 -12
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Make.swift +85 -18
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +73 -7
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Media.swift +76 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +118 -43
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/ResultUtil.swift +18 -8
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/FeatureTest.swift +31 -1
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +6 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/ServerVariableTest.swift +42 -0
- package/project/.sdk/tm/ts/LICENSE +1 -1
- package/project/.sdk/tm/ts/src/Context.ts +1 -1
- package/project/.sdk/tm/ts/src/Control.ts +3 -0
- package/project/.sdk/tm/ts/src/Response.ts +10 -1
- package/project/.sdk/tm/ts/src/Spec.ts +4 -0
- package/project/.sdk/tm/ts/src/feature/base/BaseFeature.ts +28 -0
- package/project/.sdk/tm/ts/src/feature/netsim/NetsimFeature.ts +10 -8
- package/project/.sdk/tm/ts/src/feature/ratelimit/RatelimitFeature.ts +8 -6
- package/project/.sdk/tm/ts/src/feature/retry/RetryFeature.ts +17 -4
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +41 -13
- package/project/.sdk/tm/ts/src/feature/timeout/TimeoutFeature.ts +17 -3
- package/project/.sdk/tm/ts/src/feature/validate/ValidateFeature.ts +2 -0
- package/project/.sdk/tm/ts/src/tsconfig.json +2 -1
- package/project/.sdk/tm/ts/src/utility/CleanUtility.ts +25 -1
- package/project/.sdk/tm/ts/src/utility/FetcherUtility.ts +24 -1
- package/project/.sdk/tm/ts/src/utility/MakeErrorUtility.ts +2 -2
- package/project/.sdk/tm/ts/src/utility/MakeFetchDefUtility.ts +15 -2
- package/project/.sdk/tm/ts/src/utility/MakeOptionsUtility.ts +6 -6
- package/project/.sdk/tm/ts/src/utility/MakePointUtility.ts +38 -2
- package/project/.sdk/tm/ts/src/utility/MakeRequestUtility.ts +29 -2
- package/project/.sdk/tm/ts/src/utility/MakeResponseUtility.ts +3 -1
- package/project/.sdk/tm/ts/src/utility/MakeSpecUtility.ts +16 -6
- package/project/.sdk/tm/ts/src/utility/MakeUrlUtility.ts +16 -2
- package/project/.sdk/tm/ts/src/utility/MediaUtility.ts +143 -0
- package/project/.sdk/tm/ts/src/utility/ParamUtility.ts +50 -18
- package/project/.sdk/tm/ts/src/utility/PrepareBodyUtility.ts +6 -0
- package/project/.sdk/tm/ts/src/utility/PrepareHeadersUtility.ts +53 -11
- package/project/.sdk/tm/ts/src/utility/PrepareMethodUtility.ts +9 -0
- package/project/.sdk/tm/ts/src/utility/PrepareQueryUtility.ts +22 -6
- package/project/.sdk/tm/ts/src/utility/ResultBodyUtility.ts +68 -3
- package/project/.sdk/tm/ts/src/utility/TransformRequestUtility.ts +16 -6
- package/project/.sdk/tm/ts/test/definition-runner.ts +109 -3
- package/project/.sdk/tm/ts/test/feature/Corpus.test.ts +47 -16
- package/project/.sdk/tm/ts/test/feature/harness.ts +4 -1
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +1 -1
- package/project/.sdk/tm/ts/test/feature.test.ts +134 -0
- package/project/.sdk/tm/ts/test/live-contract.ts +60 -2
- package/project/.sdk/tm/ts/test/live-entity.ts +36 -12
- package/project/.sdk/tm/ts/test/live-runner.ts +79 -12
- package/project/.sdk/tm/ts/test/live-scenarios.ts +5 -4
- package/project/.sdk/tm/ts/test/pipeline.test.ts +52 -1
- package/project/.sdk/tm/ts/test/tsconfig.json +2 -1
- package/project/.sdk/tm/ts/test/utility.ts +35 -7
- package/project/.sdk/tm/zig/LICENSE +1 -1
- package/project/.sdk/tm/zig/core/context.zig +2 -1
- package/project/.sdk/tm/zig/core/helpers.zig +33 -0
- package/project/.sdk/tm/zig/core/response.zig +3 -0
- package/project/.sdk/tm/zig/core/spec.zig +27 -0
- package/project/.sdk/tm/zig/core/types.zig +6 -0
- package/project/.sdk/tm/zig/core/utility.zig +456 -84
- package/project/.sdk/tm/zig/feature/test.zig +31 -2
- package/project/.sdk/tm/zig/feature/validate.zig +2 -0
- package/project/.sdk/tm/zig/test/fh.zig +1 -1
- package/project/sdkgen-package.json +1 -1
- package/src/action/copies.ts +179 -46
- package/src/action/doctor.ts +13 -3
- package/src/action/package.ts +17 -9
- package/src/action/resolve.ts +41 -0
- package/src/admin/npm-trust.ts +9 -8
- package/src/cmp/AgentGuide.ts +4 -3
- package/src/cmp/AgentGuideFeature.ts +3 -2
- package/src/cmp/AgentGuideTop.ts +2 -1
- package/src/cmp/Changelog.ts +2 -1
- package/src/cmp/Deploy.ts +2 -1
- package/src/cmp/Entity.ts +1 -3
- package/src/cmp/ExternalTarget.ts +2 -1
- package/src/cmp/Feature.ts +2 -1
- package/src/cmp/FeatureHook.ts +2 -1
- package/src/cmp/License.ts +7 -5
- package/src/cmp/Main.ts +2 -1
- package/src/cmp/PublishWorkflow.ts +2 -1
- package/src/cmp/Readme.ts +2 -1
- package/src/cmp/ReadmeEntity.ts +3 -3
- package/src/cmp/ReadmeErrors.ts +6 -4
- package/src/cmp/ReadmeExplanation.ts +4 -3
- package/src/cmp/ReadmeFeatures.ts +4 -3
- package/src/cmp/ReadmeHowto.ts +4 -3
- package/src/cmp/ReadmeInstall.ts +4 -3
- package/src/cmp/ReadmeIntro.ts +3 -3
- package/src/cmp/ReadmeModel.ts +6 -3
- package/src/cmp/ReadmeOptions.ts +3 -3
- package/src/cmp/ReadmeQuick.ts +4 -3
- package/src/cmp/ReadmeRef.ts +3 -3
- package/src/cmp/ReadmeRefFeatures.ts +2 -1
- package/src/cmp/ReadmeStation.ts +2 -1
- package/src/cmp/ReadmeTop.ts +121 -37
- package/src/cmp/ReadmeUnions.ts +2 -1
- package/src/cmp/Registered.ts +4 -4
- package/src/cmp/Security.ts +14 -7
- package/src/cmp/Test.ts +2 -1
- package/src/cmp/TestControl.ts +1 -1
- package/src/helpers/component.ts +25 -0
- package/src/helpers/definition.ts +2 -2
- package/src/helpers/definitionPlan.ts +135 -13
- package/src/helpers/featureSource.ts +55 -2
- package/src/helpers/flowGuard.ts +111 -0
- package/src/helpers/generated.ts +488 -0
- package/src/helpers/mcpTools.ts +47 -0
- package/src/helpers/media.ts +79 -0
- package/src/helpers/modelNames.ts +186 -16
- package/src/helpers/naming.ts +188 -0
- package/src/helpers/npm.ts +68 -0
- package/src/helpers/npmScripts.ts +37 -0
- package/src/helpers/opExample.ts +19 -11
- package/src/helpers/opShape.ts +235 -29
- package/src/helpers/optional.ts +76 -0
- package/src/helpers/packageMeta.ts +83 -11
- package/src/helpers/stdrep.ts +5 -1
- package/src/helpers/testPolicy.ts +68 -1
- package/src/helpers/text.ts +33 -0
- package/src/sdkgen.ts +97 -14
- package/src/testkit.ts +2 -1
- package/src/utility.ts +41 -19
- package/project/.sdk/src/cmp/go/fragment/SdkError.fragment.go +0 -22
- package/project/.sdk/src/cmp/lua/fragment/SdkError.fragment.lua +0 -38
- package/project/.sdk/src/cmp/perl/fragment/SdkError.fragment.pm +0 -27
- package/project/.sdk/src/cmp/php/fragment/SdkError.fragment.php +0 -35
- package/project/.sdk/src/cmp/py/fragment/SdkError.fragment.py +0 -27
- package/project/.sdk/src/cmp/rb/fragment/SdkError.fragment.rb +0 -25
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
// (it includes only core/struct.hpp), so this cannot close a cycle with
|
|
20
20
|
// core/config.hpp, which pulls in the feature headers.
|
|
21
21
|
#include "../core/schema.hpp"
|
|
22
|
+
#include "cookie.hpp"
|
|
22
23
|
|
|
23
24
|
// prepareAuth is GENERATED, not templated: WHERE the credential goes -
|
|
24
25
|
// header, query or cookie, and under what name - is a fact about THIS API
|
|
@@ -579,6 +580,8 @@ inline Value fetcher(CtxPtr ctx, const std::string& fullurl, const Value& fetchd
|
|
|
579
580
|
|
|
580
581
|
// ---- makeFetchDef -----------------------------------------------------
|
|
581
582
|
|
|
583
|
+
inline bool isJsonRequest(const Value& point);
|
|
584
|
+
|
|
582
585
|
inline Value makeFetchDef(CtxPtr ctx) {
|
|
583
586
|
SpecPtr spec = ctx->spec;
|
|
584
587
|
if (!spec) {
|
|
@@ -597,11 +600,15 @@ inline Value makeFetchDef(CtxPtr ctx) {
|
|
|
597
600
|
map_put(fetchdef, "method", Value(spec->method));
|
|
598
601
|
map_put(fetchdef, "headers", spec->headers);
|
|
599
602
|
|
|
603
|
+
// A map or a list is JSON, and so is a scalar on a point that declares a
|
|
604
|
+
// JSON body. Anything else goes as given.
|
|
600
605
|
if (!is_nullish(spec->body)) {
|
|
601
|
-
|
|
602
|
-
|
|
606
|
+
const Value& body = spec->body;
|
|
607
|
+
bool scalar = body.is_string() || body.is_number() || body.is_bool();
|
|
608
|
+
if (body.is_map() || body.is_list() || (scalar && isJsonRequest(ctx->point))) {
|
|
609
|
+
map_put(fetchdef, "body", Value(Struct::jsonify(body)));
|
|
603
610
|
} else {
|
|
604
|
-
map_put(fetchdef, "body",
|
|
611
|
+
map_put(fetchdef, "body", body);
|
|
605
612
|
}
|
|
606
613
|
}
|
|
607
614
|
|
|
@@ -638,6 +645,23 @@ inline std::string makeUrl(CtxPtr ctx) {
|
|
|
638
645
|
}
|
|
639
646
|
}
|
|
640
647
|
|
|
648
|
+
// A placeholder left in the route would send the request to the wrong route.
|
|
649
|
+
// The base's own placeholders are server variables, resolved with the options.
|
|
650
|
+
std::string base = spec->base;
|
|
651
|
+
while (!base.empty() && '/' == base.back()) base.pop_back();
|
|
652
|
+
const std::string route = 0 == url.compare(0, base.size(), base) ? url.substr(base.size()) : url;
|
|
653
|
+
std::string unfilled;
|
|
654
|
+
for (size_t at = route.find('{'); std::string::npos != at; at = route.find('{', at + 1)) {
|
|
655
|
+
size_t end = route.find_first_of("{}/", at + 1);
|
|
656
|
+
if (std::string::npos != end && '}' == route[end] && end > at + 1) {
|
|
657
|
+
unfilled += (unfilled.empty() ? "" : ", ") + route.substr(at, end - at + 1);
|
|
658
|
+
at = end;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
if (!unfilled.empty()) {
|
|
662
|
+
throw ctx->makeError("url_param_missing", "URL path has no value for " + unfilled + ".");
|
|
663
|
+
}
|
|
664
|
+
|
|
641
665
|
std::string qsep = "?";
|
|
642
666
|
for (const auto& item : Struct::items(spec->query)) {
|
|
643
667
|
std::string key = as_str(pair_key(item));
|
|
@@ -645,7 +669,10 @@ inline std::string makeUrl(CtxPtr ctx) {
|
|
|
645
669
|
if (!is_nullish(val)) {
|
|
646
670
|
url += qsep + Struct::escurl(Value(key)) + "=" + Struct::escurl(Value(Struct::stringify(val)));
|
|
647
671
|
qsep = "&";
|
|
648
|
-
|
|
672
|
+
// Sent with the request, never recorded as the entity's match.
|
|
673
|
+
if (spec->authquery.end() == std::find(spec->authquery.begin(), spec->authquery.end(), key)) {
|
|
674
|
+
map_put(resmatch, key, val);
|
|
675
|
+
}
|
|
649
676
|
}
|
|
650
677
|
}
|
|
651
678
|
|
|
@@ -655,6 +682,50 @@ inline std::string makeUrl(CtxPtr ctx) {
|
|
|
655
682
|
|
|
656
683
|
// ---- makePoint --------------------------------------------------------
|
|
657
684
|
|
|
685
|
+
// The name a point gives a parameter in the call, if it renames it.
|
|
686
|
+
inline std::string paramAlias(const Value& point, const std::string& key) {
|
|
687
|
+
if (!point.is_map()) return "";
|
|
688
|
+
Value alias = Helpers::toMapAny(getp(point, "alias"));
|
|
689
|
+
if (!alias.is_map()) return "";
|
|
690
|
+
Value ak = getp(alias, key);
|
|
691
|
+
return ak.is_string() ? ak.as_string() : "";
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// The value the call or its entity gives a point's parameter, under its name
|
|
695
|
+
// or the point's alias for it.
|
|
696
|
+
inline Value paramValue(CtxPtr ctx, const Value& point, const std::string& key) {
|
|
697
|
+
std::string akey = paramAlias(point, key);
|
|
698
|
+
|
|
699
|
+
Value val = getp(ctx->reqmatch, key, Value(nullptr));
|
|
700
|
+
if (val.is_null()) val = getp(ctx->match, key, Value(nullptr));
|
|
701
|
+
if (val.is_null() && !akey.empty()) val = getp(ctx->reqmatch, akey, Value(nullptr));
|
|
702
|
+
if (val.is_null()) val = getp(ctx->reqdata, key, Value(nullptr));
|
|
703
|
+
if (val.is_null()) val = getp(ctx->data, key, Value(nullptr));
|
|
704
|
+
if (val.is_null() && !akey.empty()) {
|
|
705
|
+
val = getp(ctx->reqdata, akey, Value(nullptr));
|
|
706
|
+
if (val.is_null()) val = getp(ctx->data, akey, Value(nullptr));
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
return val;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// The path parameters of a point that neither the call nor the entity gives a
|
|
713
|
+
// value for, looked up as param looks them up.
|
|
714
|
+
inline std::vector<std::string> unfilledParams(CtxPtr ctx, const Value& point) {
|
|
715
|
+
std::vector<std::string> missing;
|
|
716
|
+
Value parts = getp(point, "parts");
|
|
717
|
+
if (!parts.is_list()) return missing;
|
|
718
|
+
for (const auto& part : *parts.as_list()) {
|
|
719
|
+
if (!part.is_string()) continue;
|
|
720
|
+
const std::string& text = part.as_string();
|
|
721
|
+
if (text.size() < 3 || '{' != text.front() ||
|
|
722
|
+
text.size() - 1 != text.find_first_of("{}/", 1) || '}' != text.back()) continue;
|
|
723
|
+
std::string name = text.substr(1, text.size() - 2);
|
|
724
|
+
if (is_nullish(paramValue(ctx, point, name))) missing.push_back(name);
|
|
725
|
+
}
|
|
726
|
+
return missing;
|
|
727
|
+
}
|
|
728
|
+
|
|
658
729
|
inline Value makePoint(CtxPtr ctx) {
|
|
659
730
|
// A PrePoint feature hook (e.g. rbac) may short-circuit by storing an
|
|
660
731
|
// error; surface it before any endpoint resolution or network activity.
|
|
@@ -669,8 +740,9 @@ inline Value makePoint(CtxPtr ctx) {
|
|
|
669
740
|
OperationPtr op = ctx->op;
|
|
670
741
|
Value options = ctx->options;
|
|
671
742
|
|
|
672
|
-
|
|
673
|
-
|
|
743
|
+
Value allowOpVal = Struct::getpath(options, {"allow", "op"});
|
|
744
|
+
std::string allowOp = as_str(allowOpVal);
|
|
745
|
+
if (!Helpers::allowed(allowOpVal, op->name)) {
|
|
674
746
|
throw ctx->makeError("point_op_allow",
|
|
675
747
|
"Operation \"" + op->name + "\" not allowed by SDK option allow.op value: \"" + allowOp + "\"");
|
|
676
748
|
}
|
|
@@ -761,18 +833,50 @@ inline Value makePoint(CtxPtr ctx) {
|
|
|
761
833
|
return last.is_string() && 0 == last.as_string().rfind("{", 0);
|
|
762
834
|
};
|
|
763
835
|
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
const
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
836
|
+
auto ownPoint = [&](const std::vector<Value>& points) {
|
|
837
|
+
Value best = points[0];
|
|
838
|
+
for (const auto& cand : points) {
|
|
839
|
+
bool candTerm = terminalParam(cand);
|
|
840
|
+
bool bestTerm = terminalParam(best);
|
|
841
|
+
if (candTerm != bestTerm) {
|
|
842
|
+
if (candTerm) best = cand;
|
|
843
|
+
}
|
|
844
|
+
else if (partsLen(cand) < partsLen(best)) {
|
|
845
|
+
best = cand;
|
|
846
|
+
}
|
|
771
847
|
}
|
|
772
|
-
|
|
773
|
-
|
|
848
|
+
return best;
|
|
849
|
+
};
|
|
850
|
+
|
|
851
|
+
// A call without an action falls back to a point without one, as
|
|
852
|
+
// generation does, and only to a route the call can fill.
|
|
853
|
+
std::vector<Value> plain;
|
|
854
|
+
for (const auto& cand : op->points) {
|
|
855
|
+
if (getp(Helpers::toMapAny(getp(cand, "select")), "$action", Value(nullptr)).is_null()) {
|
|
856
|
+
plain.push_back(cand);
|
|
774
857
|
}
|
|
775
858
|
}
|
|
859
|
+
if (plain.empty()) {
|
|
860
|
+
throw ctx->makeError("point_action_required",
|
|
861
|
+
"Operation \"" + op->name +
|
|
862
|
+
"\" has only action endpoints; pass $action to choose one.");
|
|
863
|
+
}
|
|
864
|
+
std::vector<Value> fillable;
|
|
865
|
+
for (const auto& cand : plain) {
|
|
866
|
+
if (unfilledParams(ctx, cand).empty()) fillable.push_back(cand);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
if (fillable.empty()) {
|
|
870
|
+
std::string missing;
|
|
871
|
+
for (const auto& name : unfilledParams(ctx, ownPoint(plain))) {
|
|
872
|
+
missing += (missing.empty() ? "" : ", ") + name;
|
|
873
|
+
}
|
|
874
|
+
throw ctx->makeError("point_no_match",
|
|
875
|
+
"Operation \"" + op->name +
|
|
876
|
+
"\" has no endpoint whose path parameters are all given (missing: " + missing + ").");
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
point = ownPoint(fillable);
|
|
776
880
|
}
|
|
777
881
|
|
|
778
882
|
if (reqselector.is_map()) {
|
|
@@ -953,8 +1057,9 @@ inline SpecPtr makeSpec(CtxPtr ctx) {
|
|
|
953
1057
|
|
|
954
1058
|
ctx->spec->method = utility->prepareMethod(ctx);
|
|
955
1059
|
|
|
956
|
-
|
|
957
|
-
|
|
1060
|
+
Value allowMethodVal = Struct::getpath(options, {"allow", "method"});
|
|
1061
|
+
std::string allowMethod = as_str(allowMethodVal);
|
|
1062
|
+
if (!Helpers::allowed(allowMethodVal, ctx->spec->method)) {
|
|
958
1063
|
throw ctx->makeError("spec_method_allow",
|
|
959
1064
|
"Method \"" + ctx->spec->method + "\" not allowed by SDK option allow.method value: \"" + allowMethod + "\"");
|
|
960
1065
|
}
|
|
@@ -984,7 +1089,25 @@ inline SpecPtr makeSpec(CtxPtr ctx) {
|
|
|
984
1089
|
map_put(ctx->ctrl->explain, "spec", ctx->spec->toValue());
|
|
985
1090
|
}
|
|
986
1091
|
|
|
1092
|
+
// Whatever prepareAuth sets in the query, under whichever name, is the
|
|
1093
|
+
// credential; a key it leaves as it was is the caller's.
|
|
1094
|
+
std::vector<std::pair<std::string, Value>> query;
|
|
1095
|
+
for (const auto& item : Struct::items(ctx->spec->query)) {
|
|
1096
|
+
query.emplace_back(as_str(pair_key(item)), pair_val(item));
|
|
1097
|
+
}
|
|
1098
|
+
|
|
987
1099
|
SpecPtr spec = utility->prepareAuth(ctx);
|
|
1100
|
+
if (spec) {
|
|
1101
|
+
spec->authquery.clear();
|
|
1102
|
+
for (const auto& item : Struct::items(spec->query)) {
|
|
1103
|
+
std::string key = as_str(pair_key(item));
|
|
1104
|
+
auto was = std::find_if(query.begin(), query.end(),
|
|
1105
|
+
[&](const std::pair<std::string, Value>& kv) { return kv.first == key; });
|
|
1106
|
+
if (query.end() == was || !(was->second == pair_val(item))) {
|
|
1107
|
+
spec->authquery.push_back(key);
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
988
1111
|
ctx->spec = spec;
|
|
989
1112
|
return spec;
|
|
990
1113
|
}
|
|
@@ -1101,6 +1224,11 @@ inline ResultPtr resultBody(CtxPtr ctx) {
|
|
|
1101
1224
|
if (response && response->jsonFunc && !is_nullish(response->body)) {
|
|
1102
1225
|
result->body = response->jsonFunc();
|
|
1103
1226
|
}
|
|
1227
|
+
if (response && response->unreadable) {
|
|
1228
|
+
Value sent = ctx->spec ? ctx->spec->headers : Value::undef();
|
|
1229
|
+
result->err = unreadableBody(ctx, result->status, result->headers, response->body, sent,
|
|
1230
|
+
result->err);
|
|
1231
|
+
}
|
|
1104
1232
|
}
|
|
1105
1233
|
return result;
|
|
1106
1234
|
}
|
|
@@ -1255,44 +1383,216 @@ inline std::string prepareMethod(CtxPtr ctx) {
|
|
|
1255
1383
|
|
|
1256
1384
|
// ---- prepareBody ------------------------------------------------------
|
|
1257
1385
|
|
|
1386
|
+
// ---- media ------------------------------------------------------------
|
|
1387
|
+
|
|
1388
|
+
// The media types a point declares: `response` (the model's `rs`) for the
|
|
1389
|
+
// Accept header, and `body` (the model's `rb`) for the request body.
|
|
1390
|
+
|
|
1391
|
+
// The data key holding a raw request body. Like `$action`, it can never be a
|
|
1392
|
+
// declared argument name.
|
|
1393
|
+
inline const char* rawBodyKey() { return "$body"; }
|
|
1394
|
+
|
|
1395
|
+
inline std::string mediaLower(std::string s) {
|
|
1396
|
+
for (auto& ch : s) ch = (char)std::tolower((unsigned char)ch);
|
|
1397
|
+
return s;
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
inline bool isJsonMedia(const Value& v) {
|
|
1401
|
+
if (!v.is_string()) return false;
|
|
1402
|
+
std::string m = v.as_string().substr(0, v.as_string().find(';'));
|
|
1403
|
+
size_t b = m.find_first_not_of(" \t");
|
|
1404
|
+
size_t e = m.find_last_not_of(" \t");
|
|
1405
|
+
m = std::string::npos == b ? "" : mediaLower(m.substr(b, e - b + 1));
|
|
1406
|
+
return m == "application/json" || m == "text/json" ||
|
|
1407
|
+
(m.size() >= 5 && 0 == m.compare(m.size() - 5, 5, "+json"));
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
// The declared JSON type alone, else every declared type in the model's
|
|
1411
|
+
// order; empty when no success response declares a body.
|
|
1412
|
+
inline std::string acceptOf(const Value& point) {
|
|
1413
|
+
Value res = getp(point, "response");
|
|
1414
|
+
Value media = getp(res, "media");
|
|
1415
|
+
if (!media.is_string() || media.as_string().empty()) return "";
|
|
1416
|
+
Value kind = getp(res, "kind");
|
|
1417
|
+
if (kind.is_string() && kind.as_string() == "json") return media.as_string();
|
|
1418
|
+
std::string out = media.as_string();
|
|
1419
|
+
Value alts = getp(res, "alternatives");
|
|
1420
|
+
if (alts.is_list()) {
|
|
1421
|
+
for (const auto& alt : *alts.as_list()) {
|
|
1422
|
+
Value m = getp(alt, "media");
|
|
1423
|
+
if (m.is_string() && !m.as_string().empty()) out += ", " + m.as_string();
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
return out;
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
inline bool isRawRequest(const Value& point) {
|
|
1430
|
+
Value kind = getp(getp(point, "body"), "kind");
|
|
1431
|
+
return kind.is_string() && kind.as_string() == "raw";
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
inline bool isJsonRequest(const Value& point) {
|
|
1435
|
+
Value kind = getp(getp(point, "body"), "kind");
|
|
1436
|
+
return kind.is_string() && kind.as_string() == "json";
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
inline bool hasMediaHeader(const Value& headers, const std::string& name) {
|
|
1440
|
+
for (const auto& item : Struct::items(headers)) {
|
|
1441
|
+
if (mediaLower(as_str(pair_key(item))) == name) return true;
|
|
1442
|
+
}
|
|
1443
|
+
return false;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
// A caller's accept wins. A declared request type replaces each JSON
|
|
1447
|
+
// content-type, the SDK default, and leaves any other the caller set.
|
|
1448
|
+
inline Value mediaHeaders(const Value& point, Value headers) {
|
|
1449
|
+
std::string accept = acceptOf(point);
|
|
1450
|
+
if (!accept.empty() && !hasMediaHeader(headers, "accept")) {
|
|
1451
|
+
map_put(headers, "accept", Value(accept));
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
Value body = getp(point, "body");
|
|
1455
|
+
Value kind = getp(body, "kind");
|
|
1456
|
+
Value media = getp(body, "media");
|
|
1457
|
+
if (kind.is_string() && (kind.as_string() == "raw" || kind.as_string() == "json") &&
|
|
1458
|
+
media.is_string() && !media.as_string().empty()) {
|
|
1459
|
+
for (const auto& item : Struct::items(headers)) {
|
|
1460
|
+
std::string key = as_str(pair_key(item));
|
|
1461
|
+
if (mediaLower(key) == "content-type" && isJsonMedia(getp(headers, key))) {
|
|
1462
|
+
headers.as_map()->erase(key);
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
if (!hasMediaHeader(headers, "content-type")) map_put(headers, "content-type", media);
|
|
1466
|
+
}
|
|
1467
|
+
return headers;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
// A string Value holds any bytes, and they are sent as they are.
|
|
1471
|
+
inline Value rawBody(const Value& reqdata) { return getp(reqdata, rawBodyKey()); }
|
|
1472
|
+
|
|
1258
1473
|
inline Value prepareBody(CtxPtr ctx) {
|
|
1259
1474
|
if (ctx->op->input == "data") {
|
|
1475
|
+
if (isRawRequest(ctx->point)) return rawBody(ctx->reqdata);
|
|
1260
1476
|
return ctx->utility->transformRequest(ctx);
|
|
1261
1477
|
}
|
|
1262
1478
|
return Value::undef();
|
|
1263
1479
|
}
|
|
1264
1480
|
|
|
1481
|
+
// ---- callArgs ---------------------------------------------------------
|
|
1482
|
+
|
|
1483
|
+
// One argument a point declares, with the name it travels under and the
|
|
1484
|
+
// value the call passes for it.
|
|
1485
|
+
struct CallArg {
|
|
1486
|
+
std::string name;
|
|
1487
|
+
std::string wire;
|
|
1488
|
+
Value val;
|
|
1489
|
+
};
|
|
1490
|
+
|
|
1491
|
+
// The arguments a point declares in one location, query or header, each with
|
|
1492
|
+
// the name it travels under and the value this call passes in its match or
|
|
1493
|
+
// else its data. Unlike a path parameter, the entity's stored match and data
|
|
1494
|
+
// never supply one.
|
|
1495
|
+
inline std::vector<CallArg> callArgs(CtxPtr ctx, const std::string& kind) {
|
|
1496
|
+
std::vector<CallArg> out;
|
|
1497
|
+
Value defs = ctx->point.is_map() ? getp(getp(ctx->point, "args"), kind) : Value::undef();
|
|
1498
|
+
if (!defs.is_list()) return out;
|
|
1499
|
+
for (const auto& ad : *defs.as_list()) {
|
|
1500
|
+
Value name = getp(ad, "name");
|
|
1501
|
+
if (!name.is_string() || name.as_string().empty()) continue;
|
|
1502
|
+
Value orig = getp(ad, "orig");
|
|
1503
|
+
std::string wire = orig.is_string() && !orig.as_string().empty() ?
|
|
1504
|
+
orig.as_string() : name.as_string();
|
|
1505
|
+
Value val = getp(ctx->reqmatch, name.as_string(), Value(nullptr));
|
|
1506
|
+
if (is_nullish(val)) val = getp(ctx->reqdata, name.as_string(), Value(nullptr));
|
|
1507
|
+
out.push_back({name.as_string(), wire, val});
|
|
1508
|
+
}
|
|
1509
|
+
return out;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1265
1512
|
// ---- prepareHeaders ---------------------------------------------------
|
|
1266
1513
|
|
|
1514
|
+
// Strips the blanks around a cookie piece.
|
|
1515
|
+
inline std::string trimBlank(const std::string& s) {
|
|
1516
|
+
size_t from = s.find_first_not_of(" \t");
|
|
1517
|
+
if (std::string::npos == from) return "";
|
|
1518
|
+
return s.substr(from, s.find_last_not_of(" \t") - from + 1);
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
// The form style of a cookie parameter: a list repeats the name, a map sends
|
|
1522
|
+
// its own keys, and every value is percent-encoded.
|
|
1523
|
+
inline std::string cookiePair(const std::string& wire, const Value& val) {
|
|
1524
|
+
auto esc = [](const Value& v) { return Struct::escurl(Value(Struct::stringify(v))); };
|
|
1525
|
+
std::vector<std::string> pairs;
|
|
1526
|
+
if (val.is_list()) {
|
|
1527
|
+
for (const auto& item : *val.as_list()) pairs.push_back(wire + "=" + esc(item));
|
|
1528
|
+
} else if (val.is_map()) {
|
|
1529
|
+
for (const auto& item : Struct::items(val)) {
|
|
1530
|
+
pairs.push_back(Struct::escurl(pair_key(item)) + "=" + esc(pair_val(item)));
|
|
1531
|
+
}
|
|
1532
|
+
} else {
|
|
1533
|
+
pairs.push_back(wire + "=" + esc(val));
|
|
1534
|
+
}
|
|
1535
|
+
std::string joined;
|
|
1536
|
+
for (size_t i = 0; i < pairs.size(); i++) joined += (0 < i ? "; " : "") + pairs[i];
|
|
1537
|
+
return joined;
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1267
1540
|
inline Value prepareHeaders(CtxPtr ctx) {
|
|
1268
1541
|
Value options = ctx->client->optionsMap();
|
|
1269
1542
|
Value headers = getp(options, "headers");
|
|
1270
1543
|
Value out = is_nullish(headers) ? vmap() : Helpers::toMapAny(Struct::clone(headers));
|
|
1271
1544
|
if (!out.is_map()) out = vmap();
|
|
1545
|
+
out = mediaHeaders(ctx->point, out);
|
|
1272
1546
|
|
|
1273
|
-
// A header
|
|
1274
|
-
// gives it, and only from this call's own arguments. It replaces a default
|
|
1275
|
-
// of the same name, whatever its case.
|
|
1547
|
+
// A header argument replaces a default of the same name, whatever its case.
|
|
1276
1548
|
auto lower = [](std::string s) {
|
|
1277
1549
|
for (auto& ch : s) ch = (char)std::tolower((unsigned char)ch);
|
|
1278
1550
|
return s;
|
|
1279
1551
|
};
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1552
|
+
for (const auto& arg : callArgs(ctx, "header")) {
|
|
1553
|
+
if (is_nullish(arg.val)) continue;
|
|
1554
|
+
std::string wire = lower(arg.wire);
|
|
1555
|
+
for (const auto& item : Struct::items(out)) {
|
|
1556
|
+
std::string key = as_str(pair_key(item));
|
|
1557
|
+
if (lower(key) == wire) out.as_map()->erase(key);
|
|
1558
|
+
}
|
|
1559
|
+
map_put(out, wire, Value(Struct::stringify(arg.val)));
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
// A cookie argument travels in the cookie header, form serialized and
|
|
1563
|
+
// percent-encoded, replacing a cookie of the same name among those the
|
|
1564
|
+
// caller's headers already send.
|
|
1565
|
+
std::vector<CallArg> sent;
|
|
1566
|
+
for (const auto& arg : callArgs(ctx, "cookie")) {
|
|
1567
|
+
if (!is_nullish(arg.val)) sent.push_back(arg);
|
|
1568
|
+
}
|
|
1569
|
+
if (!sent.empty()) {
|
|
1570
|
+
std::vector<std::string> names;
|
|
1571
|
+
for (const auto& arg : sent) {
|
|
1572
|
+
if (arg.val.is_map()) {
|
|
1573
|
+
for (const auto& item : Struct::items(arg.val)) names.push_back(Struct::escurl(pair_key(item)));
|
|
1574
|
+
} else {
|
|
1575
|
+
names.push_back(arg.wire);
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
std::vector<std::string> kept;
|
|
1579
|
+
for (const auto& item : Struct::items(out)) {
|
|
1580
|
+
std::string key = as_str(pair_key(item));
|
|
1581
|
+
if (lower(key) != "cookie") continue;
|
|
1582
|
+
Value given = getp(out, key);
|
|
1583
|
+
if (given.is_string()) {
|
|
1584
|
+
for (const auto& cookie : cookieKeep(given.as_string(), names)) kept.push_back(cookie);
|
|
1294
1585
|
}
|
|
1295
|
-
|
|
1586
|
+
out.as_map()->erase(key);
|
|
1587
|
+
}
|
|
1588
|
+
for (const auto& arg : sent) {
|
|
1589
|
+
std::string pair = cookiePair(arg.wire, arg.val);
|
|
1590
|
+
if (!pair.empty()) kept.push_back(pair);
|
|
1591
|
+
}
|
|
1592
|
+
if (!kept.empty()) {
|
|
1593
|
+
std::string joined;
|
|
1594
|
+
for (size_t i = 0; i < kept.size(); i++) joined += (0 < i ? "; " : "") + kept[i];
|
|
1595
|
+
map_put(out, "cookie", Value(joined));
|
|
1296
1596
|
}
|
|
1297
1597
|
}
|
|
1298
1598
|
return out;
|
|
@@ -1301,13 +1601,6 @@ inline Value prepareHeaders(CtxPtr ctx) {
|
|
|
1301
1601
|
// ---- param ------------------------------------------------------------
|
|
1302
1602
|
|
|
1303
1603
|
inline Value param(CtxPtr ctx, const Value& paramdef) {
|
|
1304
|
-
Value point = ctx->point;
|
|
1305
|
-
SpecPtr spec = ctx->spec;
|
|
1306
|
-
Value match = ctx->match;
|
|
1307
|
-
Value reqmatch = ctx->reqmatch;
|
|
1308
|
-
Value data = ctx->data;
|
|
1309
|
-
Value reqdata = ctx->reqdata;
|
|
1310
|
-
|
|
1311
1604
|
int pt = Struct::typify(paramdef);
|
|
1312
1605
|
|
|
1313
1606
|
std::string key;
|
|
@@ -1318,29 +1611,14 @@ inline Value param(CtxPtr ctx, const Value& paramdef) {
|
|
|
1318
1611
|
key = k.is_string() ? k.as_string() : "";
|
|
1319
1612
|
}
|
|
1320
1613
|
|
|
1321
|
-
std::string akey =
|
|
1322
|
-
if (
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
if (ak.is_string()) akey = ak.as_string();
|
|
1327
|
-
}
|
|
1614
|
+
std::string akey = paramAlias(ctx->point, key);
|
|
1615
|
+
if (ctx->spec && !akey.empty() &&
|
|
1616
|
+
getp(ctx->reqmatch, key, Value(nullptr)).is_null() &&
|
|
1617
|
+
getp(ctx->match, key, Value(nullptr)).is_null()) {
|
|
1618
|
+
map_put(ctx->spec->alias, akey, Value(key));
|
|
1328
1619
|
}
|
|
1329
1620
|
|
|
1330
|
-
|
|
1331
|
-
if (val.is_null()) val = getp(match, key, Value(nullptr));
|
|
1332
|
-
if (val.is_null() && !akey.empty()) {
|
|
1333
|
-
if (spec) map_put(spec->alias, akey, Value(key));
|
|
1334
|
-
val = getp(reqmatch, akey, Value(nullptr));
|
|
1335
|
-
}
|
|
1336
|
-
if (val.is_null()) val = getp(reqdata, key, Value(nullptr));
|
|
1337
|
-
if (val.is_null()) val = getp(data, key, Value(nullptr));
|
|
1338
|
-
if (val.is_null() && !akey.empty()) {
|
|
1339
|
-
val = getp(reqdata, akey, Value(nullptr));
|
|
1340
|
-
if (val.is_null()) val = getp(data, akey, Value(nullptr));
|
|
1341
|
-
}
|
|
1342
|
-
|
|
1343
|
-
return val;
|
|
1621
|
+
return paramValue(ctx, ctx->point, key);
|
|
1344
1622
|
}
|
|
1345
1623
|
|
|
1346
1624
|
// ---- prepareParams ----------------------------------------------------
|
|
@@ -1396,9 +1674,9 @@ inline Value prepareQuery(CtxPtr ctx) {
|
|
|
1396
1674
|
|
|
1397
1675
|
// A path parameter travels in the path. The generated config lists them as
|
|
1398
1676
|
// args.params, which prepareParams reads; params is the older list of names.
|
|
1399
|
-
// A header parameter travels in the headers, which prepareHeaders fills.
|
|
1400
1677
|
Value aparams = point.is_map() ? getp(getp(point, "args"), "params") : Value::undef();
|
|
1401
1678
|
Value aheader = point.is_map() ? getp(getp(point, "args"), "header") : Value::undef();
|
|
1679
|
+
Value acookie = point.is_map() ? getp(getp(point, "args"), "cookie") : Value::undef();
|
|
1402
1680
|
auto named = [&](const Value& defs, const std::string& s) {
|
|
1403
1681
|
if (!defs.is_list()) return false;
|
|
1404
1682
|
for (const auto& pd : *defs.as_list()) {
|
|
@@ -1408,9 +1686,13 @@ inline Value prepareQuery(CtxPtr ctx) {
|
|
|
1408
1686
|
return false;
|
|
1409
1687
|
};
|
|
1410
1688
|
|
|
1689
|
+
// A header or cookie parameter travels in the headers, which prepareHeaders
|
|
1690
|
+
// fills, unless a query parameter shares its name: then both are sent.
|
|
1691
|
+
Value aquery = point.is_map() ? getp(getp(point, "args"), "query") : Value::undef();
|
|
1692
|
+
auto elsewhere = [&](const std::string& s) { return (named(aheader, s) || named(acookie, s)) && !named(aquery, s); };
|
|
1693
|
+
|
|
1411
1694
|
// A query parameter travels under the name the definition gives it, its
|
|
1412
1695
|
// orig, which the model may have renamed for the caller.
|
|
1413
|
-
Value aquery = point.is_map() ? getp(getp(point, "args"), "query") : Value::undef();
|
|
1414
1696
|
auto wire_name = [&](const std::string& s) {
|
|
1415
1697
|
if (aquery.is_list()) {
|
|
1416
1698
|
for (const auto& qd : *aquery.as_list()) {
|
|
@@ -1430,10 +1712,18 @@ inline Value prepareQuery(CtxPtr ctx) {
|
|
|
1430
1712
|
std::string key = as_str(pair_key(item));
|
|
1431
1713
|
Value val = pair_val(item);
|
|
1432
1714
|
if (!is_nullish(val) && "$action" != key && !contains_str(params, key) &&
|
|
1433
|
-
!named(aparams, key) && !
|
|
1715
|
+
!named(aparams, key) && !elsewhere(key)) {
|
|
1434
1716
|
map_put(out, wire_name(key), val);
|
|
1435
1717
|
}
|
|
1436
1718
|
}
|
|
1719
|
+
|
|
1720
|
+
// A create or update passes its query arguments in its data.
|
|
1721
|
+
for (const auto& arg : callArgs(ctx, "query")) {
|
|
1722
|
+
if (!is_nullish(arg.val) && !contains_str(params, arg.name) &&
|
|
1723
|
+
!named(aparams, arg.name) && !elsewhere(arg.name)) {
|
|
1724
|
+
map_put(out, arg.wire, arg.val);
|
|
1725
|
+
}
|
|
1726
|
+
}
|
|
1437
1727
|
return out;
|
|
1438
1728
|
}
|
|
1439
1729
|
|
|
@@ -1470,15 +1760,28 @@ inline Value omitKeys(const Value& reqdata, const std::vector<std::string>& name
|
|
|
1470
1760
|
// the body is a copy without it. The caller's map is left untouched.
|
|
1471
1761
|
inline Value stripAction(const Value& reqdata) { return omitKeys(reqdata, {"$action"}); }
|
|
1472
1762
|
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1763
|
+
inline bool fieldArg(CtxPtr ctx, const std::string& name) {
|
|
1764
|
+
if (!ctx->point.is_map()) return false;
|
|
1765
|
+
for (const char* kind : {"header", "cookie", "query"}) {
|
|
1766
|
+
Value defs = getp(getp(ctx->point, "args"), kind);
|
|
1767
|
+
if (!defs.is_list()) continue;
|
|
1768
|
+
for (const auto& ad : *defs.as_list()) {
|
|
1769
|
+
Value n = getp(ad, "name");
|
|
1770
|
+
Value f = getp(ad, "field");
|
|
1771
|
+
if (n.is_string() && n.as_string() == name && f.is_bool() && f.as_bool()) return true;
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
return false;
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
// A header, cookie or query argument travels where prepareHeaders or
|
|
1778
|
+
// prepareQuery sends it, so the body is built from the request data without
|
|
1779
|
+
// it, unless the entity declares it as a field too.
|
|
1780
|
+
inline std::vector<std::string> routedArgNames(CtxPtr ctx) {
|
|
1476
1781
|
std::vector<std::string> names;
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
Value name = getp(hd, "name");
|
|
1481
|
-
if (name.is_string() && !name.as_string().empty()) names.push_back(name.as_string());
|
|
1782
|
+
for (const char* kind : {"header", "cookie", "query"}) {
|
|
1783
|
+
for (const auto& arg : callArgs(ctx, kind)) {
|
|
1784
|
+
if (!fieldArg(ctx, arg.name)) names.push_back(arg.name);
|
|
1482
1785
|
}
|
|
1483
1786
|
}
|
|
1484
1787
|
return names;
|
|
@@ -1487,7 +1790,7 @@ inline std::vector<std::string> headerArgNames(CtxPtr ctx) {
|
|
|
1487
1790
|
inline Value transformRequest(CtxPtr ctx) {
|
|
1488
1791
|
if (ctx->spec) ctx->spec->step = "reqform";
|
|
1489
1792
|
|
|
1490
|
-
Value reqdata = omitKeys(ctx->reqdata,
|
|
1793
|
+
Value reqdata = omitKeys(ctx->reqdata, routedArgNames(ctx));
|
|
1491
1794
|
|
|
1492
1795
|
Value transform = Helpers::toMapAny(getp(ctx->point, "transform"));
|
|
1493
1796
|
if (!transform.is_map()) return stripAction(reqdata);
|
|
@@ -1502,11 +1805,13 @@ inline Value transformRequest(CtxPtr ctx) {
|
|
|
1502
1805
|
|
|
1503
1806
|
// ---- makeOptions ------------------------------------------------------
|
|
1504
1807
|
|
|
1505
|
-
inline Value
|
|
1808
|
+
inline Value optsPlain(const Value& settings, const std::string& name) {
|
|
1506
1809
|
if (!settings.is_map()) return settings;
|
|
1507
1810
|
Value out = vmap();
|
|
1508
1811
|
for (const auto& kv : *settings.as_map()) {
|
|
1509
|
-
if ("entity" != kv.first
|
|
1812
|
+
if ("entity" != kv.first && !("rbac" == name && "rules" == kv.first)) {
|
|
1813
|
+
map_put(out, kv.first, kv.second);
|
|
1814
|
+
}
|
|
1510
1815
|
}
|
|
1511
1816
|
return out;
|
|
1512
1817
|
}
|
|
@@ -1514,8 +1819,9 @@ inline Value optsNoEntity(const Value& settings) {
|
|
|
1514
1819
|
// The options to scan for secrets. The feature map is keyed by feature
|
|
1515
1820
|
// names, not field names, so it is scanned as a list: `secrets` must not
|
|
1516
1821
|
// make every setting of that feature a secret. Entity blocks hold entity
|
|
1517
|
-
// settings and seeded records, never a credential, so none is scanned
|
|
1518
|
-
//
|
|
1822
|
+
// settings and seeded records, never a credential, so none is scanned, and
|
|
1823
|
+
// nor are rbac's rules, keyed by entity and operation names. The raw scan
|
|
1824
|
+
// still sees the feature list form, whose entries each carry `name`.
|
|
1519
1825
|
inline Value optsWithout(const Value& opts, std::initializer_list<const char*> keys) {
|
|
1520
1826
|
Value out = vmap();
|
|
1521
1827
|
if (!opts.is_map()) return out;
|
|
@@ -1526,13 +1832,16 @@ inline Value optsWithout(const Value& opts, std::initializer_list<const char*> k
|
|
|
1526
1832
|
if ("feature" == kv.first && (kv.second.is_map() || kv.second.is_list())) {
|
|
1527
1833
|
Value list = vlist();
|
|
1528
1834
|
if (kv.second.is_map()) {
|
|
1529
|
-
for (const auto& f : *kv.second.as_map()) list.as_list()->push_back(
|
|
1835
|
+
for (const auto& f : *kv.second.as_map()) list.as_list()->push_back(optsPlain(f.second, f.first));
|
|
1530
1836
|
} else {
|
|
1531
|
-
for (const auto& f : *kv.second.as_list())
|
|
1837
|
+
for (const auto& f : *kv.second.as_list()) {
|
|
1838
|
+
Value name = f.is_map() ? getp(f, "name") : Value::undef();
|
|
1839
|
+
list.as_list()->push_back(optsPlain(f, name.is_string() ? name.as_string() : ""));
|
|
1840
|
+
}
|
|
1532
1841
|
}
|
|
1533
1842
|
map_put(out, kv.first, list);
|
|
1534
1843
|
} else if ("test" == kv.first) {
|
|
1535
|
-
map_put(out, kv.first,
|
|
1844
|
+
map_put(out, kv.first, optsPlain(kv.second, ""));
|
|
1536
1845
|
} else {
|
|
1537
1846
|
map_put(out, kv.first, kv.second);
|
|
1538
1847
|
}
|
|
@@ -1540,6 +1849,51 @@ inline Value optsWithout(const Value& opts, std::initializer_list<const char*> k
|
|
|
1540
1849
|
return out;
|
|
1541
1850
|
}
|
|
1542
1851
|
|
|
1852
|
+
// A templated base URL takes each {name} from options.server. An empty value
|
|
1853
|
+
// cannot make a working URL, so it fails construction, except in test mode,
|
|
1854
|
+
// where it becomes test-<name>.
|
|
1855
|
+
inline std::string resolveServerBase(const std::string& base, const Value& opts,
|
|
1856
|
+
const Value& config, CtxPtr ctx) {
|
|
1857
|
+
bool testmode = is_true(Struct::getpath(opts, {"test", "active"}))
|
|
1858
|
+
|| is_true(Struct::getpath(opts, {"feature", "test", "active"}));
|
|
1859
|
+
Value server = Helpers::toMapAny(getp(opts, "server"));
|
|
1860
|
+
Value nameV = Struct::getpath(config, {"main", "name"});
|
|
1861
|
+
std::string sdkname = nameV.is_string() && !nameV.as_string().empty()
|
|
1862
|
+
? nameV.as_string() : "SDK";
|
|
1863
|
+
auto namechar = [](char c) {
|
|
1864
|
+
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || '_' == c;
|
|
1865
|
+
};
|
|
1866
|
+
|
|
1867
|
+
std::string out;
|
|
1868
|
+
size_t i = 0;
|
|
1869
|
+
while (i < base.size()) {
|
|
1870
|
+
size_t j = i + 1;
|
|
1871
|
+
if ('{' == base[i]) {
|
|
1872
|
+
while (j < base.size() && namechar(base[j])) j++;
|
|
1873
|
+
}
|
|
1874
|
+
// A placeholder only when it closes and the name is [A-Za-z0-9_]+.
|
|
1875
|
+
if ('{' != base[i] || j == i + 1 || j >= base.size() || '}' != base[j]) {
|
|
1876
|
+
out += base[i];
|
|
1877
|
+
i++;
|
|
1878
|
+
continue;
|
|
1879
|
+
}
|
|
1880
|
+
std::string name = base.substr(i + 1, j - i - 1);
|
|
1881
|
+
Value val = server.is_map() ? getp(server, name) : Value::undef();
|
|
1882
|
+
if (val.is_string() && !val.as_string().empty()) {
|
|
1883
|
+
out += val.as_string();
|
|
1884
|
+
} else if (testmode) {
|
|
1885
|
+
out += "test-" + name;
|
|
1886
|
+
} else {
|
|
1887
|
+
throw std::make_shared<SdkError>("server_var_required",
|
|
1888
|
+
sdkname + ": the server variable '" + name + "' is required: the API base URL is '" +
|
|
1889
|
+
base + "' - pass {\"server\", vmap({{\"" + name + "\", Value(\"...\")}})} in the SDK options",
|
|
1890
|
+
ctx.get());
|
|
1891
|
+
}
|
|
1892
|
+
i = j + 1;
|
|
1893
|
+
}
|
|
1894
|
+
return out;
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1543
1897
|
inline Value makeOptions(CtxPtr ctx) {
|
|
1544
1898
|
Value options = ctx->options;
|
|
1545
1899
|
if (!options.is_map()) options = vmap();
|
|
@@ -1676,6 +2030,11 @@ inline Value makeOptions(CtxPtr ctx) {
|
|
|
1676
2030
|
}
|
|
1677
2031
|
}
|
|
1678
2032
|
|
|
2033
|
+
Value baseV = getp(opts, "base");
|
|
2034
|
+
if (baseV.is_string() && std::string::npos != baseV.as_string().find('{')) {
|
|
2035
|
+
map_put(opts, "base", Value(resolveServerBase(baseV.as_string(), opts, config, ctx)));
|
|
2036
|
+
}
|
|
2037
|
+
|
|
1679
2038
|
// Resolve the feature add-order: an explicit list order (above) wins;
|
|
1680
2039
|
// otherwise order the map test-first, then the remaining names sorted, so
|
|
1681
2040
|
// the outcome is deterministic and `test` is always the base transport.
|