@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
|
@@ -826,7 +826,8 @@ defmodule ProjectName.Utility do
|
|
|
826
826
|
# The options to scan for secrets. The feature map is keyed by feature
|
|
827
827
|
# names, not field names, so it is scanned as a list: `secrets` must not
|
|
828
828
|
# make every setting of that feature a secret. Entity blocks hold entity
|
|
829
|
-
# settings and seeded records, never a credential, so they are skipped
|
|
829
|
+
# settings and seeded records, never a credential, so they are skipped, and
|
|
830
|
+
# so are rbac's rules, keyed by entity and operation names.
|
|
830
831
|
defp secret_scan(opts, names) do
|
|
831
832
|
out = S.jm([])
|
|
832
833
|
|
|
@@ -836,10 +837,15 @@ defmodule ProjectName.Utility do
|
|
|
836
837
|
nil
|
|
837
838
|
|
|
838
839
|
k == "feature" and (S.ismap(v) or S.islist(v)) ->
|
|
839
|
-
|
|
840
|
+
blocks =
|
|
841
|
+
Enum.map(H.entries(v), fn {fk, f} ->
|
|
842
|
+
plain(f, if(S.ismap(v), do: fk, else: S.getprop(f, "name")))
|
|
843
|
+
end)
|
|
844
|
+
|
|
845
|
+
S.setprop(out, k, S.jt(blocks))
|
|
840
846
|
|
|
841
847
|
k == "test" ->
|
|
842
|
-
S.setprop(out, k,
|
|
848
|
+
S.setprop(out, k, plain(v, nil))
|
|
843
849
|
|
|
844
850
|
true ->
|
|
845
851
|
S.setprop(out, k, v)
|
|
@@ -849,6 +855,10 @@ defmodule ProjectName.Utility do
|
|
|
849
855
|
out
|
|
850
856
|
end
|
|
851
857
|
|
|
858
|
+
defp plain(node, name) do
|
|
859
|
+
if name == "rbac", do: without(without(node, "entity"), "rules"), else: without(node, "entity")
|
|
860
|
+
end
|
|
861
|
+
|
|
852
862
|
defp without(node, key) do
|
|
853
863
|
if S.ismap(node) do
|
|
854
864
|
out = S.jm([])
|
|
@@ -861,6 +871,61 @@ defmodule ProjectName.Utility do
|
|
|
861
871
|
|
|
862
872
|
# ---- make_point ----------------------------------------------------------
|
|
863
873
|
|
|
874
|
+
# A terminal parameter marks a record route (/boards/{id}); a
|
|
875
|
+
# cross-reference ends in the relationship's name (/posts/{id}/author), and
|
|
876
|
+
# failing that the shallower path wins. The same rule runs at generation
|
|
877
|
+
# time, in helpers/opShape.ts — both sides must move together.
|
|
878
|
+
defp parts_len(p) do
|
|
879
|
+
parts = S.getprop(p, "parts")
|
|
880
|
+
if S.islist(parts), do: S.size(parts), else: 0
|
|
881
|
+
end
|
|
882
|
+
|
|
883
|
+
defp terminal_param?(p) do
|
|
884
|
+
parts = S.getprop(p, "parts")
|
|
885
|
+
|
|
886
|
+
if S.islist(parts) and S.size(parts) > 0 do
|
|
887
|
+
last = S.getelem(parts, S.size(parts) - 1)
|
|
888
|
+
is_binary(last) and String.starts_with?(last, "{")
|
|
889
|
+
else
|
|
890
|
+
false
|
|
891
|
+
end
|
|
892
|
+
end
|
|
893
|
+
|
|
894
|
+
defp own_point(points) do
|
|
895
|
+
Enum.reduce(points, hd(points), fn cand, best ->
|
|
896
|
+
ct = terminal_param?(cand)
|
|
897
|
+
bt = terminal_param?(best)
|
|
898
|
+
|
|
899
|
+
cond do
|
|
900
|
+
ct != bt -> if ct, do: cand, else: best
|
|
901
|
+
parts_len(cand) < parts_len(best) -> cand
|
|
902
|
+
true -> best
|
|
903
|
+
end
|
|
904
|
+
end)
|
|
905
|
+
end
|
|
906
|
+
|
|
907
|
+
# The path parameters of a point that neither the call nor the entity gives
|
|
908
|
+
# a value for, looked up as param_impl looks them up.
|
|
909
|
+
defp unfilled(ctx, point) do
|
|
910
|
+
parts = S.getprop(point, "parts")
|
|
911
|
+
|
|
912
|
+
if S.islist(parts) and S.size(parts) > 0 do
|
|
913
|
+
Enum.flat_map(0..(S.size(parts) - 1), fn i ->
|
|
914
|
+
part = S.getelem(parts, i)
|
|
915
|
+
|
|
916
|
+
case is_binary(part) && Regex.run(~r/\A\{([^{}\/]+)\}\z/, part) do
|
|
917
|
+
[_, name] ->
|
|
918
|
+
if param_value(ctx, point, name) != nil, do: [], else: [name]
|
|
919
|
+
|
|
920
|
+
_ ->
|
|
921
|
+
[]
|
|
922
|
+
end
|
|
923
|
+
end)
|
|
924
|
+
else
|
|
925
|
+
[]
|
|
926
|
+
end
|
|
927
|
+
end
|
|
928
|
+
|
|
864
929
|
def make_point_impl(ctx) do
|
|
865
930
|
out = S.getprop(ctx, "out")
|
|
866
931
|
pre = S.getprop(out, "point")
|
|
@@ -877,15 +942,16 @@ defmodule ProjectName.Utility do
|
|
|
877
942
|
op = S.getprop(ctx, "op")
|
|
878
943
|
options = S.getprop(ctx, "options")
|
|
879
944
|
opname = S.getprop(op, "name")
|
|
880
|
-
allow_op =
|
|
945
|
+
allow_op = S.getpath(options, "allow.op")
|
|
881
946
|
points = S.getprop(op, "points")
|
|
882
947
|
npoints = S.size(points)
|
|
883
948
|
|
|
884
949
|
cond do
|
|
885
|
-
|
|
950
|
+
not allowed?(allow_op, opname) ->
|
|
886
951
|
{nil,
|
|
887
952
|
Context.make_error(ctx, "point_op_allow",
|
|
888
|
-
"Operation \"" <> opname <> "\" not allowed by SDK option allow.op value: \"" <>
|
|
953
|
+
"Operation \"" <> opname <> "\" not allowed by SDK option allow.op value: \"" <>
|
|
954
|
+
H.str_or(allow_op, "") <> "\"")}
|
|
889
955
|
|
|
890
956
|
npoints == 0 ->
|
|
891
957
|
{nil,
|
|
@@ -950,44 +1016,18 @@ defmodule ProjectName.Utility do
|
|
|
950
1016
|
|
|
951
1017
|
matched? = match?({:halt, _}, point)
|
|
952
1018
|
|
|
953
|
-
point
|
|
1019
|
+
# select.exist can list more than the params needed to pick a point,
|
|
1020
|
+
# so nothing matched. A call without an action falls back to a
|
|
1021
|
+
# point without one, as generation does, and only to a route the
|
|
1022
|
+
# call can fill.
|
|
1023
|
+
{point, plain} =
|
|
954
1024
|
if matched? do
|
|
955
|
-
elem(point, 1)
|
|
1025
|
+
{elem(point, 1), nil}
|
|
956
1026
|
else
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
# relationship's name (/posts/{id}/author), and failing that
|
|
962
|
-
# the shallower path wins. The same rule runs at generation
|
|
963
|
-
# time, in helpers/opShape.ts — both sides must move together.
|
|
964
|
-
parts_len = fn p ->
|
|
965
|
-
parts = S.getprop(p, "parts")
|
|
966
|
-
if S.islist(parts), do: S.size(parts), else: 0
|
|
967
|
-
end
|
|
968
|
-
|
|
969
|
-
terminal_param? = fn p ->
|
|
970
|
-
parts = S.getprop(p, "parts")
|
|
971
|
-
|
|
972
|
-
if S.islist(parts) and S.size(parts) > 0 do
|
|
973
|
-
last = S.getelem(parts, S.size(parts) - 1)
|
|
974
|
-
is_binary(last) and String.starts_with?(last, "{")
|
|
975
|
-
else
|
|
976
|
-
false
|
|
977
|
-
end
|
|
978
|
-
end
|
|
979
|
-
|
|
980
|
-
Enum.reduce(0..(npoints - 1), S.getelem(points, 0), fn i, best ->
|
|
981
|
-
cand = S.getelem(points, i)
|
|
982
|
-
ct = terminal_param?.(cand)
|
|
983
|
-
bt = terminal_param?.(best)
|
|
984
|
-
|
|
985
|
-
cond do
|
|
986
|
-
ct != bt -> if ct, do: cand, else: best
|
|
987
|
-
parts_len.(cand) < parts_len.(best) -> cand
|
|
988
|
-
true -> best
|
|
989
|
-
end
|
|
990
|
-
end)
|
|
1027
|
+
all = Enum.map(0..(npoints - 1), &S.getelem(points, &1))
|
|
1028
|
+
plain = Enum.filter(all, &(S.getprop(H.to_map(S.getprop(&1, "select")), "$action") == nil))
|
|
1029
|
+
fillable = Enum.filter(plain, &(unfilled(ctx, &1) == []))
|
|
1030
|
+
{if(fillable == [], do: nil, else: own_point(fillable)), plain}
|
|
991
1031
|
end
|
|
992
1032
|
|
|
993
1033
|
unmatched_action =
|
|
@@ -1007,6 +1047,15 @@ defmodule ProjectName.Utility do
|
|
|
1007
1047
|
Context.make_error(ctx, "point_action_invalid",
|
|
1008
1048
|
"Operation \"" <> opname <> "\" action \"" <> S.stringify(unmatched_action) <> "\" is not valid.")
|
|
1009
1049
|
|
|
1050
|
+
plain == [] ->
|
|
1051
|
+
Context.make_error(ctx, "point_action_required",
|
|
1052
|
+
"Operation \"" <> opname <> "\" has only action endpoints; pass $action to choose one.")
|
|
1053
|
+
|
|
1054
|
+
point == nil and plain != nil ->
|
|
1055
|
+
Context.make_error(ctx, "point_no_match",
|
|
1056
|
+
"Operation \"" <> opname <> "\" has no endpoint whose path parameters are all given (missing: " <>
|
|
1057
|
+
Enum.join(unfilled(ctx, own_point(plain)), ", ") <> ").")
|
|
1058
|
+
|
|
1010
1059
|
reqselector != nil ->
|
|
1011
1060
|
req_action = S.getprop(reqselector, "$action")
|
|
1012
1061
|
|
|
@@ -1068,13 +1117,14 @@ defmodule ProjectName.Utility do
|
|
|
1068
1117
|
S.setprop(ctx, "spec", spec)
|
|
1069
1118
|
S.setprop(spec, "method", prepare_method(ctx))
|
|
1070
1119
|
|
|
1071
|
-
allow_method =
|
|
1120
|
+
allow_method = S.getpath(options, "allow.method")
|
|
1072
1121
|
method = S.getprop(spec, "method")
|
|
1073
1122
|
|
|
1074
|
-
if
|
|
1123
|
+
if not allowed?(allow_method, method) do
|
|
1075
1124
|
{nil,
|
|
1076
1125
|
Context.make_error(ctx, "spec_method_allow",
|
|
1077
|
-
"Method \"" <> method <> "\" not allowed by SDK option allow.method value: \"" <>
|
|
1126
|
+
"Method \"" <> H.str_or(method, "") <> "\" not allowed by SDK option allow.method value: \"" <>
|
|
1127
|
+
H.str_or(allow_method, "") <> "\"")}
|
|
1078
1128
|
else
|
|
1079
1129
|
S.setprop(spec, "params", prepare_params(ctx))
|
|
1080
1130
|
S.setprop(spec, "query", prepare_query(ctx))
|
|
@@ -1101,11 +1151,21 @@ defmodule ProjectName.Utility do
|
|
|
1101
1151
|
explain = S.getprop(ctrl, "explain")
|
|
1102
1152
|
if explain != nil, do: S.setprop(explain, "spec", spec)
|
|
1103
1153
|
|
|
1154
|
+
# Whatever prepare_auth sets in the query, under whichever name, is
|
|
1155
|
+
# the credential; a key it leaves as it was is the caller's.
|
|
1156
|
+
query = Map.new(H.entries(S.getprop(spec, "query")))
|
|
1157
|
+
|
|
1104
1158
|
{spec2, err} = prepare_auth(ctx)
|
|
1105
1159
|
|
|
1106
1160
|
if err != nil do
|
|
1107
1161
|
{nil, err}
|
|
1108
1162
|
else
|
|
1163
|
+
authquery =
|
|
1164
|
+
for {key, val} <- H.entries(S.getprop(spec2, "query")),
|
|
1165
|
+
not Map.has_key?(query, key) or Map.get(query, key) != val,
|
|
1166
|
+
do: key
|
|
1167
|
+
|
|
1168
|
+
S.setprop(spec2, "authquery", S.jt(authquery))
|
|
1109
1169
|
S.setprop(ctx, "spec", spec2)
|
|
1110
1170
|
{spec2, nil}
|
|
1111
1171
|
end
|
|
@@ -1402,11 +1462,19 @@ defmodule ProjectName.Utility do
|
|
|
1402
1462
|
])
|
|
1403
1463
|
|
|
1404
1464
|
body = S.getprop(spec, "body")
|
|
1465
|
+
scalar = is_binary(body) or is_number(body) or is_boolean(body)
|
|
1405
1466
|
|
|
1467
|
+
# A map or a list is JSON, and so is a scalar on a point that declares
|
|
1468
|
+
# a JSON body. Anything else goes as given.
|
|
1406
1469
|
cond do
|
|
1407
|
-
body == nil ->
|
|
1408
|
-
|
|
1409
|
-
|
|
1470
|
+
body == nil ->
|
|
1471
|
+
:ok
|
|
1472
|
+
|
|
1473
|
+
S.isnode(body) or (scalar and json_request?(S.getprop(ctx, "point"))) ->
|
|
1474
|
+
S.setprop(fetchdef, "body", S.jsonify(body))
|
|
1475
|
+
|
|
1476
|
+
true ->
|
|
1477
|
+
S.setprop(fetchdef, "body", body)
|
|
1410
1478
|
end
|
|
1411
1479
|
|
|
1412
1480
|
{fetchdef, nil}
|
|
@@ -1446,6 +1514,9 @@ defmodule ProjectName.Utility do
|
|
|
1446
1514
|
|
|
1447
1515
|
resmatch = S.jm([])
|
|
1448
1516
|
|
|
1517
|
+
# Sent with the request, never recorded as the entity's match.
|
|
1518
|
+
authquery = for {_, name} <- H.entries(S.getprop(spec, "authquery")), do: name
|
|
1519
|
+
|
|
1449
1520
|
url1 =
|
|
1450
1521
|
Enum.reduce(H.entries(S.getprop(spec, "params")), url0, fn {key, val}, acc ->
|
|
1451
1522
|
if val != nil and is_binary(key) do
|
|
@@ -1457,19 +1528,32 @@ defmodule ProjectName.Utility do
|
|
|
1457
1528
|
end
|
|
1458
1529
|
end)
|
|
1459
1530
|
|
|
1531
|
+
# A placeholder left in the route would send the request to the wrong
|
|
1532
|
+
# route. The base's own placeholders are server variables, resolved
|
|
1533
|
+
# with the options.
|
|
1534
|
+
base = S.getprop(spec, "base")
|
|
1535
|
+
base = if is_binary(base), do: String.trim_trailing(base, "/"), else: ""
|
|
1536
|
+
route = String.replace_prefix(url1, base, "")
|
|
1537
|
+
unfilled = Regex.scan(~r/\{[^{}\/]+\}/, route) |> Enum.map(&hd/1)
|
|
1538
|
+
|
|
1460
1539
|
{url2, _qsep} =
|
|
1461
1540
|
Enum.reduce(H.entries(S.getprop(spec, "query")), {url1, "?"}, fn {key, val}, {acc, qsep} ->
|
|
1462
1541
|
if val != nil and is_binary(key) do
|
|
1463
1542
|
vstr = if is_binary(val), do: val, else: S.stringify(val)
|
|
1464
|
-
S.setprop(resmatch, key, val)
|
|
1543
|
+
if key not in authquery, do: S.setprop(resmatch, key, val)
|
|
1465
1544
|
{acc <> qsep <> S.escurl(key) <> "=" <> S.escurl(vstr), "&"}
|
|
1466
1545
|
else
|
|
1467
1546
|
{acc, qsep}
|
|
1468
1547
|
end
|
|
1469
1548
|
end)
|
|
1470
1549
|
|
|
1471
|
-
|
|
1472
|
-
|
|
1550
|
+
if unfilled != [] do
|
|
1551
|
+
{"", Context.make_error(ctx, "url_param_missing",
|
|
1552
|
+
"URL path has no value for " <> Enum.join(unfilled, ", ") <> ".")}
|
|
1553
|
+
else
|
|
1554
|
+
S.setprop(result, "resmatch", resmatch)
|
|
1555
|
+
{url2, nil}
|
|
1556
|
+
end
|
|
1473
1557
|
end
|
|
1474
1558
|
end
|
|
1475
1559
|
|
|
@@ -1478,10 +1562,6 @@ defmodule ProjectName.Utility do
|
|
|
1478
1562
|
def param_impl(ctx, paramdef) do
|
|
1479
1563
|
point = S.getprop(ctx, "point")
|
|
1480
1564
|
spec = S.getprop(ctx, "spec")
|
|
1481
|
-
match = S.getprop(ctx, "match")
|
|
1482
|
-
reqmatch = S.getprop(ctx, "reqmatch")
|
|
1483
|
-
data = S.getprop(ctx, "data")
|
|
1484
|
-
reqdata = S.getprop(ctx, "reqdata")
|
|
1485
1565
|
|
|
1486
1566
|
key =
|
|
1487
1567
|
if is_binary(paramdef) do
|
|
@@ -1491,45 +1571,158 @@ defmodule ProjectName.Utility do
|
|
|
1491
1571
|
if is_binary(k), do: k, else: ""
|
|
1492
1572
|
end
|
|
1493
1573
|
|
|
1494
|
-
akey =
|
|
1495
|
-
if point != nil do
|
|
1496
|
-
alias = H.to_map(S.getprop(point, "alias"))
|
|
1574
|
+
akey = param_alias(point, key)
|
|
1497
1575
|
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
""
|
|
1503
|
-
end
|
|
1504
|
-
else
|
|
1505
|
-
""
|
|
1506
|
-
end
|
|
1576
|
+
if spec != nil and akey != "" and S.getprop(S.getprop(ctx, "reqmatch"), key) == nil and
|
|
1577
|
+
S.getprop(S.getprop(ctx, "match"), key) == nil do
|
|
1578
|
+
S.setprop(S.getprop(spec, "alias"), akey, key)
|
|
1579
|
+
end
|
|
1507
1580
|
|
|
1508
|
-
|
|
1509
|
-
|
|
1581
|
+
param_value(ctx, point, key)
|
|
1582
|
+
end
|
|
1510
1583
|
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
end
|
|
1584
|
+
# The name a point gives a parameter in the call, if it renames it.
|
|
1585
|
+
defp param_alias(point, key) do
|
|
1586
|
+
alias = if point != nil, do: H.to_map(S.getprop(point, "alias")), else: nil
|
|
1587
|
+
ak = if alias != nil, do: S.getprop(alias, key), else: nil
|
|
1588
|
+
if is_binary(ak), do: ak, else: ""
|
|
1589
|
+
end
|
|
1518
1590
|
|
|
1591
|
+
# The value the call or its entity gives a point's parameter, under its name
|
|
1592
|
+
# or the point's alias for it.
|
|
1593
|
+
defp param_value(ctx, point, key) do
|
|
1594
|
+
akey = param_alias(point, key)
|
|
1595
|
+
reqmatch = S.getprop(ctx, "reqmatch")
|
|
1596
|
+
reqdata = S.getprop(ctx, "reqdata")
|
|
1597
|
+
data = S.getprop(ctx, "data")
|
|
1598
|
+
|
|
1599
|
+
val = S.getprop(reqmatch, key)
|
|
1600
|
+
val = if val == nil, do: S.getprop(S.getprop(ctx, "match"), key), else: val
|
|
1601
|
+
val = if val == nil and akey != "", do: S.getprop(reqmatch, akey), else: val
|
|
1519
1602
|
val = if val == nil, do: S.getprop(reqdata, key), else: val
|
|
1520
1603
|
val = if val == nil, do: S.getprop(data, key), else: val
|
|
1521
1604
|
|
|
1522
|
-
val
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1605
|
+
if val == nil and akey != "" do
|
|
1606
|
+
v2 = S.getprop(reqdata, akey)
|
|
1607
|
+
if v2 == nil, do: S.getprop(data, akey), else: v2
|
|
1608
|
+
else
|
|
1609
|
+
val
|
|
1610
|
+
end
|
|
1611
|
+
end
|
|
1612
|
+
|
|
1613
|
+
# The arguments a point declares in one location, query or header, each as
|
|
1614
|
+
# {name, wire, val}: the name it travels under and the value this call
|
|
1615
|
+
# passes in its match or else its data. Unlike a path parameter, the
|
|
1616
|
+
# entity's stored match and data never supply one.
|
|
1617
|
+
defp call_args(ctx, kind) do
|
|
1618
|
+
point = S.getprop(ctx, "point")
|
|
1619
|
+
defs = if point != nil, do: S.getpath(point, "args." <> kind), else: nil
|
|
1529
1620
|
|
|
1530
|
-
|
|
1621
|
+
if S.islist(defs) and S.size(defs) > 0 do
|
|
1622
|
+
Enum.flat_map(0..(S.size(defs) - 1), fn i ->
|
|
1623
|
+
ad = S.getelem(defs, i)
|
|
1624
|
+
name = S.getprop(ad, "name")
|
|
1625
|
+
|
|
1626
|
+
if is_binary(name) and name != "" do
|
|
1627
|
+
orig = S.getprop(ad, "orig")
|
|
1628
|
+
wire = if is_binary(orig) and orig != "", do: orig, else: name
|
|
1629
|
+
val = S.getprop(S.getprop(ctx, "reqmatch"), name)
|
|
1630
|
+
val = if val == nil, do: S.getprop(S.getprop(ctx, "reqdata"), name), else: val
|
|
1631
|
+
[{name, wire, val}]
|
|
1632
|
+
else
|
|
1633
|
+
[]
|
|
1634
|
+
end
|
|
1635
|
+
end)
|
|
1636
|
+
else
|
|
1637
|
+
[]
|
|
1638
|
+
end
|
|
1531
1639
|
end
|
|
1532
1640
|
|
|
1641
|
+
# ---- media ---------------------------------------------------------------
|
|
1642
|
+
|
|
1643
|
+
# The media types a point declares: `response` (the model's `rs`) for the
|
|
1644
|
+
# Accept header, and `body` (the model's `rb`) for the request body.
|
|
1645
|
+
|
|
1646
|
+
# The data key holding a raw request body. Like `$action`, it can never be
|
|
1647
|
+
# a declared argument name.
|
|
1648
|
+
@raw_body "$body"
|
|
1649
|
+
|
|
1650
|
+
def json_media?(media) do
|
|
1651
|
+
m =
|
|
1652
|
+
if(is_binary(media), do: media, else: "")
|
|
1653
|
+
|> String.split(";", parts: 2)
|
|
1654
|
+
|> hd()
|
|
1655
|
+
|> String.trim()
|
|
1656
|
+
|> String.downcase()
|
|
1657
|
+
|
|
1658
|
+
m == "application/json" or m == "text/json" or String.ends_with?(m, "+json")
|
|
1659
|
+
end
|
|
1660
|
+
|
|
1661
|
+
# The declared JSON type alone, else every declared type in the model's
|
|
1662
|
+
# order; nil when no success response declares a body.
|
|
1663
|
+
def accept_of(point) do
|
|
1664
|
+
res = S.getprop(point, "response")
|
|
1665
|
+
media = S.getprop(res, "media")
|
|
1666
|
+
|
|
1667
|
+
cond do
|
|
1668
|
+
not is_binary(media) or media == "" ->
|
|
1669
|
+
nil
|
|
1670
|
+
|
|
1671
|
+
S.getprop(res, "kind") == "json" ->
|
|
1672
|
+
media
|
|
1673
|
+
|
|
1674
|
+
true ->
|
|
1675
|
+
alts = S.getprop(res, "alternatives")
|
|
1676
|
+
n = if S.islist(alts), do: S.size(alts), else: 0
|
|
1677
|
+
|
|
1678
|
+
others =
|
|
1679
|
+
if n == 0 do
|
|
1680
|
+
[]
|
|
1681
|
+
else
|
|
1682
|
+
Enum.flat_map(0..(n - 1), fn i ->
|
|
1683
|
+
m = S.getprop(S.getelem(alts, i), "media")
|
|
1684
|
+
if is_binary(m) and m != "", do: [m], else: []
|
|
1685
|
+
end)
|
|
1686
|
+
end
|
|
1687
|
+
|
|
1688
|
+
Enum.join([media | others], ", ")
|
|
1689
|
+
end
|
|
1690
|
+
end
|
|
1691
|
+
|
|
1692
|
+
def raw_request?(point), do: S.getprop(S.getprop(point, "body"), "kind") == "raw"
|
|
1693
|
+
def json_request?(point), do: S.getprop(S.getprop(point, "body"), "kind") == "json"
|
|
1694
|
+
|
|
1695
|
+
defp media_header?(headers, name) do
|
|
1696
|
+
Enum.any?(H.entries(headers), fn {k, _} -> is_binary(k) and String.downcase(k) == name end)
|
|
1697
|
+
end
|
|
1698
|
+
|
|
1699
|
+
# A caller's accept wins. A declared request type replaces each JSON
|
|
1700
|
+
# content-type, the SDK default, and leaves any other the caller set.
|
|
1701
|
+
def media_headers(point, headers) do
|
|
1702
|
+
accept = accept_of(point)
|
|
1703
|
+
|
|
1704
|
+
if accept != nil and not media_header?(headers, "accept"),
|
|
1705
|
+
do: S.setprop(headers, "accept", accept)
|
|
1706
|
+
|
|
1707
|
+
body = S.getprop(point, "body")
|
|
1708
|
+
media = S.getprop(body, "media")
|
|
1709
|
+
|
|
1710
|
+
if S.getprop(body, "kind") in ["raw", "json"] and is_binary(media) and media != "" do
|
|
1711
|
+
Enum.each(H.entries(headers), fn {k, v} ->
|
|
1712
|
+
if is_binary(k) and String.downcase(k) == "content-type" and json_media?(v),
|
|
1713
|
+
do: S.delprop(headers, k)
|
|
1714
|
+
end)
|
|
1715
|
+
|
|
1716
|
+
if not media_header?(headers, "content-type"),
|
|
1717
|
+
do: S.setprop(headers, "content-type", media)
|
|
1718
|
+
end
|
|
1719
|
+
|
|
1720
|
+
headers
|
|
1721
|
+
end
|
|
1722
|
+
|
|
1723
|
+
# A binary, of bytes or text, sent as it is.
|
|
1724
|
+
def raw_body(reqdata), do: if(S.ismap(reqdata), do: S.getprop(reqdata, @raw_body), else: nil)
|
|
1725
|
+
|
|
1533
1726
|
# ---- prepare_* -----------------------------------------------------------
|
|
1534
1727
|
|
|
1535
1728
|
@method_map %{
|
|
@@ -1541,6 +1734,14 @@ defmodule ProjectName.Utility do
|
|
|
1541
1734
|
"patch" => "PATCH"
|
|
1542
1735
|
}
|
|
1543
1736
|
|
|
1737
|
+
# Whether a comma-separated allow option names the item: whole names, any case.
|
|
1738
|
+
def allowed?(names, item) when is_binary(names) and is_binary(item) and item != "" do
|
|
1739
|
+
want = String.upcase(item)
|
|
1740
|
+
names |> String.split(",") |> Enum.any?(fn name -> String.upcase(String.trim(name)) == want end)
|
|
1741
|
+
end
|
|
1742
|
+
|
|
1743
|
+
def allowed?(_names, _item), do: false
|
|
1744
|
+
|
|
1544
1745
|
def prepare_method_impl(ctx) do
|
|
1545
1746
|
opname = S.getprop(S.getprop(ctx, "op"), "name")
|
|
1546
1747
|
|
|
@@ -1567,41 +1768,92 @@ defmodule ProjectName.Utility do
|
|
|
1567
1768
|
if S.ismap(cloned), do: cloned, else: S.jm([])
|
|
1568
1769
|
end
|
|
1569
1770
|
|
|
1570
|
-
|
|
1571
|
-
# gives it, and only from this call's own arguments. It replaces a default
|
|
1572
|
-
# of the same name, whatever its case.
|
|
1573
|
-
point = S.getprop(ctx, "point")
|
|
1574
|
-
aheader = if point != nil, do: S.getpath(point, "args.header"), else: nil
|
|
1771
|
+
out = media_headers(S.getprop(ctx, "point"), out)
|
|
1575
1772
|
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1773
|
+
# A header argument replaces a default of the same name, whatever its case.
|
|
1774
|
+
Enum.each(call_args(ctx, "header"), fn {_name, wire, val} ->
|
|
1775
|
+
if val != nil do
|
|
1776
|
+
key = String.downcase(wire)
|
|
1580
1777
|
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
val = S.getprop(S.getprop(ctx, "reqmatch"), name)
|
|
1585
|
-
val = if val == nil, do: S.getprop(S.getprop(ctx, "reqdata"), name), else: val
|
|
1586
|
-
if val != nil do
|
|
1587
|
-
key = String.downcase(wire)
|
|
1778
|
+
Enum.each(H.entries(out), fn {k, _} ->
|
|
1779
|
+
if is_binary(k) and String.downcase(k) == key, do: S.delprop(out, k)
|
|
1780
|
+
end)
|
|
1588
1781
|
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1782
|
+
S.setprop(out, key, S.stringify(val))
|
|
1783
|
+
end
|
|
1784
|
+
end)
|
|
1785
|
+
|
|
1786
|
+
# A cookie argument travels in the cookie header, form serialized and
|
|
1787
|
+
# percent-encoded, replacing a cookie of the same name among those the
|
|
1788
|
+
# caller's headers already send.
|
|
1789
|
+
sent = Enum.filter(call_args(ctx, "cookie"), fn {_name, _wire, val} -> val != nil end)
|
|
1790
|
+
|
|
1791
|
+
if sent != [] do
|
|
1792
|
+
names =
|
|
1793
|
+
Enum.flat_map(sent, fn {_name, wire, val} ->
|
|
1794
|
+
if S.ismap(val), do: Enum.map(S.keysof(val), &S.escurl/1), else: [wire]
|
|
1795
|
+
end)
|
|
1796
|
+
|
|
1797
|
+
given =
|
|
1798
|
+
Enum.filter(H.entries(out), fn {k, _} -> is_binary(k) and String.downcase(k) == "cookie" end)
|
|
1592
1799
|
|
|
1593
|
-
|
|
1800
|
+
kept = Enum.flat_map(given, fn {_, v} -> if is_binary(v), do: cookie_keep(v, names), else: [] end)
|
|
1801
|
+
|
|
1802
|
+
Enum.each(given, fn {k, _} -> S.delprop(out, k) end)
|
|
1803
|
+
|
|
1804
|
+
pairs =
|
|
1805
|
+
Enum.flat_map(sent, fn {_name, wire, val} ->
|
|
1806
|
+
case cookie_pair(wire, val) do
|
|
1807
|
+
"" -> []
|
|
1808
|
+
pair -> [pair]
|
|
1594
1809
|
end
|
|
1595
|
-
end
|
|
1596
|
-
|
|
1810
|
+
end)
|
|
1811
|
+
|
|
1812
|
+
if kept ++ pairs != [], do: S.setprop(out, "cookie", Enum.join(kept ++ pairs, "; "))
|
|
1597
1813
|
end
|
|
1598
1814
|
|
|
1599
1815
|
out
|
|
1600
1816
|
end
|
|
1601
1817
|
|
|
1818
|
+
# The caller's cookie pieces with the named cookies removed: a cookie is one
|
|
1819
|
+
# ;-delimited piece, whatever its value holds.
|
|
1820
|
+
def cookie_keep(header, names) do
|
|
1821
|
+
header
|
|
1822
|
+
|> String.split(";")
|
|
1823
|
+
|> Enum.map(&String.trim/1)
|
|
1824
|
+
|> Enum.reject(fn cookie -> cookie == "" or cookie_name(cookie) in names end)
|
|
1825
|
+
end
|
|
1826
|
+
|
|
1827
|
+
defp cookie_name(cookie), do: cookie |> String.split("=", parts: 2) |> hd() |> String.trim()
|
|
1828
|
+
|
|
1829
|
+
# The form style of a cookie parameter: a list repeats the name, a map sends
|
|
1830
|
+
# its own keys, and every value is percent-encoded.
|
|
1831
|
+
defp cookie_pair(wire, val) do
|
|
1832
|
+
esc = fn v -> S.escurl(S.stringify(v)) end
|
|
1833
|
+
|
|
1834
|
+
pairs =
|
|
1835
|
+
cond do
|
|
1836
|
+
S.islist(val) ->
|
|
1837
|
+
Enum.map(H.entries(val), fn {_i, item} -> wire <> "=" <> esc.(item) end)
|
|
1838
|
+
|
|
1839
|
+
S.ismap(val) ->
|
|
1840
|
+
Enum.map(S.keysof(val), fn k -> S.escurl(k) <> "=" <> esc.(S.getprop(val, k)) end)
|
|
1841
|
+
|
|
1842
|
+
true ->
|
|
1843
|
+
[wire <> "=" <> esc.(val)]
|
|
1844
|
+
end
|
|
1845
|
+
|
|
1846
|
+
Enum.join(pairs, "; ")
|
|
1847
|
+
end
|
|
1848
|
+
|
|
1602
1849
|
def prepare_body_impl(ctx) do
|
|
1603
1850
|
op = S.getprop(ctx, "op")
|
|
1604
|
-
|
|
1851
|
+
|
|
1852
|
+
cond do
|
|
1853
|
+
S.getprop(op, "input") != "data" -> nil
|
|
1854
|
+
raw_request?(S.getprop(ctx, "point")) -> raw_body(S.getprop(ctx, "reqdata"))
|
|
1855
|
+
true -> transform_request(ctx)
|
|
1856
|
+
end
|
|
1605
1857
|
end
|
|
1606
1858
|
|
|
1607
1859
|
def prepare_params_impl(ctx) do
|
|
@@ -1687,8 +1939,14 @@ defmodule ProjectName.Utility do
|
|
|
1687
1939
|
|
|
1688
1940
|
# A path parameter travels in the path. The generated config lists them
|
|
1689
1941
|
# as args.params, which prepare_params reads; params is the older list.
|
|
1690
|
-
# A header parameter travels in the headers, which prepare_headers
|
|
1691
|
-
|
|
1942
|
+
# A header or cookie parameter travels in the headers, which prepare_headers
|
|
1943
|
+
# fills, unless a query parameter shares its name: then both are sent.
|
|
1944
|
+
declared = arg_names(point, "args.query")
|
|
1945
|
+
|
|
1946
|
+
param_strs =
|
|
1947
|
+
param_strs ++
|
|
1948
|
+
arg_names(point, "args.params") ++
|
|
1949
|
+
Enum.reject(arg_names(point, "args.header") ++ arg_names(point, "args.cookie"), &(&1 in declared))
|
|
1692
1950
|
|
|
1693
1951
|
# A query parameter travels under the name the definition gives it, its
|
|
1694
1952
|
# orig, which the model may have renamed for the caller.
|
|
@@ -1718,6 +1976,11 @@ defmodule ProjectName.Utility do
|
|
|
1718
1976
|
end
|
|
1719
1977
|
end)
|
|
1720
1978
|
|
|
1979
|
+
# A create or update passes its query arguments in its data.
|
|
1980
|
+
Enum.each(call_args(ctx, "query"), fn {name, orig, val} ->
|
|
1981
|
+
if val != nil and not Enum.member?(param_strs, name), do: S.setprop(out, orig, val)
|
|
1982
|
+
end)
|
|
1983
|
+
|
|
1721
1984
|
out
|
|
1722
1985
|
end
|
|
1723
1986
|
|
|
@@ -1927,11 +2190,71 @@ defmodule ProjectName.Utility do
|
|
|
1927
2190
|
jf = S.getprop(response, "json_func")
|
|
1928
2191
|
body = S.getprop(response, "body")
|
|
1929
2192
|
if jf != nil and body != nil and S.isfunc(jf), do: S.setprop(result, "body", jf.())
|
|
2193
|
+
|
|
2194
|
+
if S.getprop(response, "unreadable") == true do
|
|
2195
|
+
spec = S.getprop(ctx, "spec")
|
|
2196
|
+
sent = if spec != nil, do: S.getprop(spec, "headers")
|
|
2197
|
+
|
|
2198
|
+
S.setprop(result, "err",
|
|
2199
|
+
unreadable_body(ctx, S.getprop(result, "status"), S.getprop(result, "headers"), body, sent,
|
|
2200
|
+
S.getprop(result, "err")))
|
|
2201
|
+
end
|
|
1930
2202
|
end
|
|
1931
2203
|
|
|
1932
2204
|
result
|
|
1933
2205
|
end
|
|
1934
2206
|
|
|
2207
|
+
@body_preview_length 160
|
|
2208
|
+
|
|
2209
|
+
# A body that is not JSON. An HTTP failure keeps its own error, with the
|
|
2210
|
+
# response described; otherwise the code tells a wrong content type from
|
|
2211
|
+
# malformed JSON.
|
|
2212
|
+
def unreadable_body(ctx, status, headers, text, sent, failed) do
|
|
2213
|
+
type = body_header(headers, "content-type")
|
|
2214
|
+
agent = to_string(clean(ctx, body_header(sent, "user-agent")))
|
|
2215
|
+
|
|
2216
|
+
detail =
|
|
2217
|
+
"HTTP " <> to_string(status) <> ", content-type " <> if(type == "", do: "none", else: type) <>
|
|
2218
|
+
", user-agent " <> if(agent == "", do: "transport default", else: agent) <>
|
|
2219
|
+
if(text == nil, do: "", else: ", body: " <> body_preview(ctx, text))
|
|
2220
|
+
|
|
2221
|
+
cond do
|
|
2222
|
+
match?(%ProjectName.Error{}, failed) ->
|
|
2223
|
+
%{failed | msg: failed.msg <> " (" <> detail <> ")"}
|
|
2224
|
+
|
|
2225
|
+
failed != nil ->
|
|
2226
|
+
%RuntimeError{message: err_msg(failed) <> " (" <> detail <> ")"}
|
|
2227
|
+
|
|
2228
|
+
type == "" or String.contains?(String.downcase(type), "json") ->
|
|
2229
|
+
Context.make_error(ctx, "response_json_invalid", "response: body is not valid JSON (" <> detail <> ")")
|
|
2230
|
+
|
|
2231
|
+
true ->
|
|
2232
|
+
Context.make_error(ctx, "response_content_type",
|
|
2233
|
+
"response: expected JSON, got " <> type <> " (" <> detail <> ")")
|
|
2234
|
+
end
|
|
2235
|
+
end
|
|
2236
|
+
|
|
2237
|
+
defp body_header(headers, name) do
|
|
2238
|
+
if S.ismap(headers) do
|
|
2239
|
+
case Enum.find(H.entries(headers), fn {k, _v} -> String.downcase(to_string(k)) == name end) do
|
|
2240
|
+
{_k, v} -> to_string(v)
|
|
2241
|
+
nil -> ""
|
|
2242
|
+
end
|
|
2243
|
+
else
|
|
2244
|
+
""
|
|
2245
|
+
end
|
|
2246
|
+
end
|
|
2247
|
+
|
|
2248
|
+
# Cleaned whole: a secret the bound would split could leave its prefix.
|
|
2249
|
+
defp body_preview(ctx, text) do
|
|
2250
|
+
flat = to_string(clean(ctx, String.trim(Regex.replace(~r/\s+/, to_string(text), " "))))
|
|
2251
|
+
points = String.codepoints(flat)
|
|
2252
|
+
|
|
2253
|
+
if length(points) > @body_preview_length,
|
|
2254
|
+
do: Enum.join(Enum.take(points, @body_preview_length)) <> "...",
|
|
2255
|
+
else: flat
|
|
2256
|
+
end
|
|
2257
|
+
|
|
1935
2258
|
def result_headers_impl(ctx) do
|
|
1936
2259
|
response = S.getprop(ctx, "response")
|
|
1937
2260
|
result = S.getprop(ctx, "result")
|
|
@@ -1955,17 +2278,28 @@ defmodule ProjectName.Utility do
|
|
|
1955
2278
|
# untouched.
|
|
1956
2279
|
defp strip_action(reqdata), do: omit_keys(reqdata, ["$action"])
|
|
1957
2280
|
|
|
1958
|
-
# A header
|
|
1959
|
-
# the body is built from the request data
|
|
1960
|
-
|
|
1961
|
-
|
|
2281
|
+
# A header, cookie or query argument travels where prepare_headers_impl or
|
|
2282
|
+
# prepare_query_impl sends it, so the body is built from the request data
|
|
2283
|
+
# without it, unless the entity declares it as a field too.
|
|
2284
|
+
defp routed_arg_names(ctx) do
|
|
2285
|
+
(call_args(ctx, "header") ++ call_args(ctx, "cookie") ++ call_args(ctx, "query"))
|
|
2286
|
+
|> Enum.map(&elem(&1, 0))
|
|
2287
|
+
|> Enum.reject(&field_arg?(ctx, &1))
|
|
2288
|
+
end
|
|
1962
2289
|
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
[]
|
|
1968
|
-
|
|
2290
|
+
defp field_arg?(ctx, name) do
|
|
2291
|
+
point = S.getprop(ctx, "point")
|
|
2292
|
+
|
|
2293
|
+
point != nil and
|
|
2294
|
+
Enum.any?(["header", "cookie", "query"], fn kind ->
|
|
2295
|
+
defs = S.getpath(point, "args." <> kind)
|
|
2296
|
+
|
|
2297
|
+
S.islist(defs) and S.size(defs) > 0 and
|
|
2298
|
+
Enum.any?(0..(S.size(defs) - 1), fn i ->
|
|
2299
|
+
ad = S.getelem(defs, i)
|
|
2300
|
+
name == S.getprop(ad, "name") and true == S.getprop(ad, "field")
|
|
2301
|
+
end)
|
|
2302
|
+
end)
|
|
1969
2303
|
end
|
|
1970
2304
|
|
|
1971
2305
|
defp omit_keys(reqdata, names) do
|
|
@@ -1987,7 +2321,7 @@ defmodule ProjectName.Utility do
|
|
|
1987
2321
|
point = S.getprop(ctx, "point")
|
|
1988
2322
|
if spec != nil, do: S.setprop(spec, "step", "reqform")
|
|
1989
2323
|
|
|
1990
|
-
data = omit_keys(S.getprop(ctx, "reqdata"),
|
|
2324
|
+
data = omit_keys(S.getprop(ctx, "reqdata"), routed_arg_names(ctx))
|
|
1991
2325
|
transform = H.to_map(S.getprop(point, "transform"))
|
|
1992
2326
|
|
|
1993
2327
|
reqdata =
|
|
@@ -2089,19 +2423,37 @@ defmodule ProjectName.Utility do
|
|
|
2089
2423
|
has_ua =
|
|
2090
2424
|
Enum.any?(H.entries(headers_node), fn {k, _v} -> String.downcase(to_string(k)) == "user-agent" end)
|
|
2091
2425
|
|
|
2426
|
+
with_body = method in [:post, :put, :patch, :delete] and is_binary(body)
|
|
2427
|
+
content_type? = fn {k, _v} -> String.downcase(to_string(k)) == "content-type" end
|
|
2428
|
+
|
|
2429
|
+
# :httpc takes a body's content type beside the headers, not among them.
|
|
2430
|
+
ctype =
|
|
2431
|
+
case Enum.find(H.entries(headers_node), content_type?) do
|
|
2432
|
+
{_k, v} -> to_string(v)
|
|
2433
|
+
nil -> "application/json"
|
|
2434
|
+
end
|
|
2435
|
+
|
|
2436
|
+
pairs =
|
|
2437
|
+
if with_body,
|
|
2438
|
+
do: Enum.reject(H.entries(headers_node), content_type?),
|
|
2439
|
+
else: H.entries(headers_node)
|
|
2440
|
+
|
|
2092
2441
|
hlist0 =
|
|
2093
|
-
Enum.map(
|
|
2442
|
+
Enum.map(pairs, fn {k, v} ->
|
|
2094
2443
|
{String.to_charlist(to_string(k)), String.to_charlist(to_string(v))}
|
|
2095
2444
|
end)
|
|
2096
2445
|
|
|
2097
2446
|
hlist =
|
|
2098
2447
|
if has_ua, do: hlist0, else: [{~c"User-Agent", String.to_charlist(@default_user_agent)} | hlist0]
|
|
2099
2448
|
|
|
2449
|
+
# The default User-Agent is recorded with the headers the request sent.
|
|
2450
|
+
if not has_ua, do: S.setprop(headers_node, "user-agent", @default_user_agent)
|
|
2451
|
+
|
|
2100
2452
|
url = String.to_charlist(fullurl)
|
|
2101
2453
|
|
|
2102
2454
|
request =
|
|
2103
|
-
if
|
|
2104
|
-
{url, hlist,
|
|
2455
|
+
if with_body do
|
|
2456
|
+
{url, hlist, String.to_charlist(ctype), body}
|
|
2105
2457
|
else
|
|
2106
2458
|
{url, hlist}
|
|
2107
2459
|
end
|
|
@@ -2124,14 +2476,14 @@ defmodule ProjectName.Utility do
|
|
|
2124
2476
|
|
|
2125
2477
|
body_str = if is_binary(resp_body), do: resp_body, else: to_string(resp_body)
|
|
2126
2478
|
|
|
2127
|
-
json_body =
|
|
2128
|
-
if String.
|
|
2479
|
+
{json_body, unreadable} =
|
|
2480
|
+
if String.trim(body_str) != "" do
|
|
2129
2481
|
case safe_json(body_str) do
|
|
2130
|
-
{:ok, v} -> v
|
|
2131
|
-
_ -> nil
|
|
2482
|
+
{:ok, v} -> {v, false}
|
|
2483
|
+
_ -> {nil, true}
|
|
2132
2484
|
end
|
|
2133
2485
|
else
|
|
2134
|
-
nil
|
|
2486
|
+
{nil, false}
|
|
2135
2487
|
end
|
|
2136
2488
|
|
|
2137
2489
|
status_text = if status < 400, do: "OK", else: "Error"
|
|
@@ -2141,7 +2493,8 @@ defmodule ProjectName.Utility do
|
|
|
2141
2493
|
"statusText", status_text,
|
|
2142
2494
|
"headers", rh,
|
|
2143
2495
|
"json", fn -> json_body end,
|
|
2144
|
-
"body", body_str
|
|
2496
|
+
"body", body_str,
|
|
2497
|
+
"unreadable", unreadable
|
|
2145
2498
|
]), nil}
|
|
2146
2499
|
|
|
2147
2500
|
{:error, reason} ->
|