@voxgig/sdkgen 2.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +22 -2
- package/dist/action/doctor.d.ts +14 -0
- package/dist/action/doctor.js +351 -0
- package/dist/action/doctor.js.map +1 -0
- package/dist/action/feature.js +48 -9
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.d.ts +6 -1
- package/dist/action/target.js +134 -22
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/Entity.js +5 -0
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/ExternalTarget.d.ts +2 -0
- package/dist/cmp/ExternalTarget.js +104 -0
- package/dist/cmp/ExternalTarget.js.map +1 -0
- package/dist/cmp/Feature.js +2 -1
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/Main.js +5 -1
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +1 -1
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +16 -6
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/Registered.d.ts +7 -0
- package/dist/cmp/Registered.js +70 -0
- package/dist/cmp/Registered.js.map +1 -0
- package/dist/cmp/Test.js +3 -1
- package/dist/cmp/Test.js.map +1 -1
- package/dist/helpers/dryrun.d.ts +10 -0
- package/dist/helpers/dryrun.js +35 -0
- package/dist/helpers/dryrun.js.map +1 -0
- package/dist/helpers/featureSource.d.ts +13 -0
- package/dist/helpers/featureSource.js +156 -0
- package/dist/helpers/featureSource.js.map +1 -0
- package/dist/helpers/naming.d.ts +9 -1
- package/dist/helpers/naming.js +66 -2
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/opExample.js +23 -3
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.d.ts +11 -1
- package/dist/helpers/opShape.js +51 -0
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/packageMeta.d.ts +16 -1
- package/dist/helpers/packageMeta.js +181 -10
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/helpers/stdrep.d.ts +3 -0
- package/dist/helpers/stdrep.js +47 -0
- package/dist/helpers/stdrep.js.map +1 -0
- package/dist/helpers/testPolicy.d.ts +2 -0
- package/dist/helpers/testPolicy.js +46 -0
- package/dist/helpers/testPolicy.js.map +1 -0
- package/dist/sdkgen.d.ts +15 -6
- package/dist/sdkgen.js +273 -5
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/utility.js +10 -1
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aontu +245 -0
- package/package.json +5 -3
- package/project/.sdk/model/target/c.aontu +28 -3
- package/project/.sdk/model/target/clojure.aontu +24 -3
- package/project/.sdk/model/target/cpp.aontu +25 -3
- package/project/.sdk/model/target/csharp.aontu +25 -3
- package/project/.sdk/model/target/dart.aontu +15 -3
- package/project/.sdk/model/target/elixir.aontu +15 -3
- package/project/.sdk/model/target/go-cli.aontu +16 -1
- package/project/.sdk/model/target/go-mcp.aontu +16 -1
- package/project/.sdk/model/target/go.aontu +14 -4
- package/project/.sdk/model/target/haskell.aontu +24 -3
- package/project/.sdk/model/target/java.aontu +25 -3
- package/project/.sdk/model/target/js.aontu +15 -3
- package/project/.sdk/model/target/kotlin.aontu +25 -3
- package/project/.sdk/model/target/lean.aontu +24 -3
- package/project/.sdk/model/target/lua.aontu +15 -3
- package/project/.sdk/model/target/ocaml.aontu +24 -3
- package/project/.sdk/model/target/perl.aontu +15 -3
- package/project/.sdk/model/target/php.aontu +15 -3
- package/project/.sdk/model/target/py-data.aontu +15 -3
- package/project/.sdk/model/target/py.aontu +15 -3
- package/project/.sdk/model/target/rb.aontu +15 -3
- package/project/.sdk/model/target/rust.aontu +25 -3
- package/project/.sdk/model/target/scala.aontu +24 -3
- package/project/.sdk/model/target/seneca-provider.aontu +118 -0
- package/project/.sdk/model/target/swift.aontu +25 -3
- package/project/.sdk/model/target/ts.aontu +15 -3
- package/project/.sdk/model/target/zig.aontu +25 -3
- package/project/.sdk/src/cmp/c/Config_c.ts +10 -11
- package/project/.sdk/src/cmp/c/Entity_c.ts +5 -1
- package/project/.sdk/src/cmp/c/fragment/Entity.fragment.c +23 -5
- package/project/.sdk/src/cmp/c/fragment/EntityCreateOp.fragment.c +9 -2
- package/project/.sdk/src/cmp/c/fragment/EntityListOp.fragment.c +19 -2
- package/project/.sdk/src/cmp/c/fragment/EntityLoadOp.fragment.c +9 -2
- package/project/.sdk/src/cmp/c/fragment/EntityRemoveOp.fragment.c +12 -2
- package/project/.sdk/src/cmp/c/fragment/EntityUpdateOp.fragment.c +9 -2
- package/project/.sdk/src/cmp/c/fragment/Main.fragment.c +1 -0
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +6 -3
- package/project/.sdk/src/cmp/clojure/fragment/Entity.fragment.clj +18 -1
- package/project/.sdk/src/cmp/clojure/fragment/EntityCreateOp.fragment.clj +2 -2
- package/project/.sdk/src/cmp/clojure/fragment/EntityLoadOp.fragment.clj +2 -2
- package/project/.sdk/src/cmp/clojure/fragment/EntityRemoveOp.fragment.clj +12 -8
- package/project/.sdk/src/cmp/clojure/fragment/EntityUpdateOp.fragment.clj +2 -2
- package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +12 -9
- package/project/.sdk/src/cmp/cpp/fragment/EntityCreateOp.fragment.cpp +8 -2
- package/project/.sdk/src/cmp/cpp/fragment/EntityListOp.fragment.cpp +18 -2
- package/project/.sdk/src/cmp/cpp/fragment/EntityLoadOp.fragment.cpp +8 -2
- package/project/.sdk/src/cmp/cpp/fragment/EntityRemoveOp.fragment.cpp +11 -2
- package/project/.sdk/src/cmp/cpp/fragment/EntityUpdateOp.fragment.cpp +8 -2
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +2 -1
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +6 -6
- package/project/.sdk/src/cmp/csharp/fragment/EntityBase.fragment.cs +38 -1
- package/project/.sdk/src/cmp/csharp/fragment/Main.fragment.cs +42 -33
- package/project/.sdk/src/cmp/dart/Package_dart.ts +2 -1
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +13 -2
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +2 -1
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +3 -3
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +1 -1
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +17 -6
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +13 -2
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +13 -2
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +3 -3
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +8 -8
- package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +18 -1
- package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +9 -1
- package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +9 -1
- package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +15 -1
- package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +9 -1
- package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +8 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
- package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +2 -2
- package/project/.sdk/src/cmp/elixir/TestEntity_elixir.ts +11 -2
- package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +2 -1
- package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +1 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +2 -1
- package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -1
- package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +2 -1
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +38 -8
- package/project/.sdk/src/cmp/go/Entity_go.ts +2 -2
- package/project/.sdk/src/cmp/go/Main_go.ts +4 -5
- package/project/.sdk/src/cmp/go/Package_go.ts +8 -5
- package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +2 -2
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +2 -2
- package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +4 -2
- package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +2 -2
- package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +2 -2
- package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +2 -2
- package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +2 -2
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +21 -15
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +9 -9
- package/project/.sdk/src/cmp/go/Test_go.ts +2 -2
- package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +42 -1
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +4 -4
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +4 -4
- package/project/.sdk/src/cmp/haskell/Package_haskell.ts +2 -1
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +10 -5
- package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +10 -8
- package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +14 -10
- package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +21 -18
- package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +4 -4
- package/project/.sdk/src/cmp/haskell/Test_haskell.ts +23 -11
- package/project/.sdk/src/cmp/java/Package_java.ts +2 -1
- package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +2 -1
- package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +2 -2
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +1 -1
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +3 -3
- package/project/.sdk/src/cmp/java/TestDirect_java.ts +3 -3
- package/project/.sdk/src/cmp/java/TestEntity_java.ts +6 -6
- package/project/.sdk/src/cmp/java/fragment/EntityBase.fragment.java +34 -1
- package/project/.sdk/src/cmp/java/fragment/SdkError.fragment.java +12 -0
- package/project/.sdk/src/cmp/js/Main_js.ts +4 -1
- package/project/.sdk/src/cmp/js/Package_js.ts +7 -1
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +13 -2
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +2 -1
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +13 -2
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +13 -2
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +2 -1
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +3 -3
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +8 -8
- package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +22 -1
- package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +9 -1
- package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +9 -1
- package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +15 -1
- package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +9 -1
- package/project/.sdk/src/cmp/js/fragment/SdkError.fragment.js +13 -0
- package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +2 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +2 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +2 -2
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/TestEntity_kotlin.ts +6 -6
- package/project/.sdk/src/cmp/kotlin/fragment/EntityBase.fragment.kt +32 -1
- package/project/.sdk/src/cmp/lean/Package_lean.ts +3 -1
- package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +9 -4
- package/project/.sdk/src/cmp/lua/Package_lua.ts +4 -3
- package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +11 -3
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +9 -9
- package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +37 -1
- package/project/.sdk/src/cmp/lua/fragment/SdkError.fragment.lua +12 -0
- package/project/.sdk/src/cmp/ocaml/EntityOperation_ocaml.ts +30 -3
- package/project/.sdk/src/cmp/ocaml/Entity_ocaml.ts +11 -5
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +3 -1
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +10 -5
- package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +6 -2
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +10 -8
- package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +14 -13
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +20 -18
- package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +4 -4
- package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +8 -2
- package/project/.sdk/src/cmp/ocaml/TestEntity_ocaml.ts +8 -5
- package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +2 -1
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +6 -6
- package/project/.sdk/src/cmp/perl/fragment/Entity.fragment.pm +36 -1
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +21 -16
- package/project/.sdk/src/cmp/php/Package_php.ts +2 -2
- package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +6 -6
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +4 -3
- package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +2 -2
- package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +12 -12
- package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +6 -6
- package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +4 -4
- package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +2 -2
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +3 -3
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +17 -15
- package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +20 -1
- package/project/.sdk/src/cmp/php/fragment/SdkError.fragment.php +11 -0
- package/project/.sdk/src/cmp/py/Package_py.ts +4 -3
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +13 -2
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +2 -1
- package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +17 -6
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +14 -3
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +13 -2
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +3 -3
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +9 -9
- package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +29 -1
- package/project/.sdk/src/cmp/py/fragment/SdkError.fragment.py +11 -0
- package/project/.sdk/src/cmp/py-data/Main_py-data.ts +2 -1
- package/project/.sdk/src/cmp/rb/Package_rb.ts +4 -3
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +2 -1
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +5 -5
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +9 -9
- package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +31 -1
- package/project/.sdk/src/cmp/rb/fragment/SdkError.fragment.rb +10 -1
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +5 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +21 -0
- package/project/.sdk/src/cmp/rust/Package_rust.ts +2 -1
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +12 -12
- package/project/.sdk/src/cmp/rust/fragment/Entity.fragment.rs +18 -0
- package/project/.sdk/src/cmp/rust/fragment/EntityCreateOp.fragment.rs +8 -2
- package/project/.sdk/src/cmp/rust/fragment/EntityListOp.fragment.rs +20 -3
- package/project/.sdk/src/cmp/rust/fragment/EntityLoadOp.fragment.rs +8 -2
- package/project/.sdk/src/cmp/rust/fragment/EntityRemoveOp.fragment.rs +10 -2
- package/project/.sdk/src/cmp/rust/fragment/EntityUpdateOp.fragment.rs +8 -2
- package/project/.sdk/src/cmp/rust/fragment/SdkError.fragment.rs +10 -0
- package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +2 -1
- package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +1 -1
- package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/fragment/EntityBase.fragment.scala +27 -1
- package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +3915 -0
- package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +960 -0
- package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +2 -1
- package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/fragment/EntityBase.fragment.swift +34 -1
- package/project/.sdk/src/cmp/ts/EntityOperation_ts.ts +9 -1
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +18 -1
- package/project/.sdk/src/cmp/ts/Gitignore_ts.ts +5 -2
- package/project/.sdk/src/cmp/ts/Main_ts.ts +4 -1
- package/project/.sdk/src/cmp/ts/Package_ts.ts +10 -1
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +13 -2
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +2 -1
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +21 -6
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +52 -2
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +14 -3
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +34 -2
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +64 -43
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +8 -8
- package/project/.sdk/src/cmp/ts/fragment/Direct.test.fragment.ts +2 -2
- package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +2 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +25 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +10 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +1 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +10 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +27 -3
- package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +10 -2
- package/project/.sdk/src/cmp/ts/fragment/SdkError.fragment.ts +15 -0
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +5 -1
- package/project/.sdk/src/cmp/zig/Package_zig.ts +3 -1
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +39 -0
- package/project/.sdk/src/cmp/zig/fragment/EntityCreateOp.fragment.zig +2 -2
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +21 -2
- package/project/.sdk/src/cmp/zig/fragment/EntityLoadOp.fragment.zig +2 -2
- package/project/.sdk/src/cmp/zig/fragment/EntityRemoveOp.fragment.zig +5 -2
- package/project/.sdk/src/cmp/zig/fragment/EntityUpdateOp.fragment.zig +2 -2
- package/project/.sdk/tm/c/VERSION +1 -1
- package/project/.sdk/tm/c/core/helpers.c +1 -0
- package/project/.sdk/tm/c/core/sdk.h +22 -6
- package/project/.sdk/tm/c/tests/feature_harness.h +1 -0
- package/project/.sdk/tm/c/tests/primary_utility_test.c +4 -1
- package/project/.sdk/tm/c/utility/make_url.c +1 -0
- package/project/.sdk/tm/c/utility/param.c +1 -0
- package/project/.sdk/tm/clojure/VERSION +1 -1
- package/project/.sdk/tm/cpp/VERSION +1 -1
- package/project/.sdk/tm/cpp/core/types.hpp +33 -8
- package/project/.sdk/tm/cpp/test/pipeline_test.cpp +5 -0
- package/project/.sdk/tm/cpp/test/runner_support.hpp +4 -4
- package/project/.sdk/tm/csharp/VERSION +1 -1
- package/project/.sdk/tm/csharp/core/Types.cs +6 -0
- package/project/.sdk/tm/csharp/test/FeatureHarness.cs +396 -0
- package/project/.sdk/tm/csharp/test/FeatureTest.cs +7 -385
- package/project/.sdk/tm/csharp/test/Runner.cs +4 -4
- package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +4 -0
- package/project/.sdk/tm/dart/test/utility.dart +4 -4
- package/project/.sdk/tm/elixir/VERSION +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/entity_base.ex +26 -0
- package/project/.sdk/tm/go/VERSION +1 -1
- package/project/.sdk/tm/go/core/types.go +6 -0
- package/project/.sdk/tm/go/test/feature_harness_test.go +361 -0
- package/project/.sdk/tm/go/test/feature_test.go +7 -350
- package/project/.sdk/tm/go/test/pipeline_test.go +6 -0
- package/project/.sdk/tm/go/test/runner_test.go +16 -4
- package/project/.sdk/tm/haskell/VERSION +1 -1
- package/project/.sdk/tm/haskell/src/SdkFeatures.hs +28 -5
- package/project/.sdk/tm/haskell/src/SdkTypes.hs +14 -5
- package/project/.sdk/tm/java/VERSION +1 -1
- package/project/.sdk/tm/java/test/RunnerSupport.java +4 -4
- package/project/.sdk/tm/java/utility/MakeError.java +4 -0
- package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +4 -0
- package/project/.sdk/tm/js/test/utility.js +3 -3
- package/project/.sdk/tm/kotlin/VERSION +1 -1
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +3 -3
- package/project/.sdk/tm/lean/VERSION +1 -1
- package/project/.sdk/tm/lean/test/TFeature.lean +27 -14
- package/project/.sdk/tm/lua/test/runner.lua +4 -4
- package/project/.sdk/tm/lua/utility/make_error.lua +4 -0
- package/project/.sdk/tm/ocaml/VERSION +1 -1
- package/project/.sdk/tm/ocaml/sdk_types.ml +14 -5
- package/project/.sdk/tm/ocaml/test/t_pipeline.ml +5 -2
- package/project/.sdk/tm/perl/t/runner.pm +4 -4
- package/project/.sdk/tm/php/VERSION +1 -1
- package/project/.sdk/tm/php/test/Runner.php +4 -4
- package/project/.sdk/tm/php/utility/MakeError.php +5 -0
- package/project/.sdk/tm/py/pkg/utility/make_error.py +4 -0
- package/project/.sdk/tm/py/test/runner.py +19 -4
- package/project/.sdk/tm/rb/test/runner.rb +4 -4
- package/project/.sdk/tm/rb/utility/make_error.rb +4 -0
- package/project/.sdk/tm/rust/VERSION +1 -1
- package/project/.sdk/tm/rust/core/types.rs +22 -6
- package/project/.sdk/tm/rust/tests/common/mod.rs +6 -6
- package/project/.sdk/tm/rust/tests/pipeline_test.rs +6 -0
- package/project/.sdk/tm/rust/utility/make_error.rs +4 -0
- package/project/.sdk/tm/scala/VERSION +1 -1
- package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +132 -0
- package/project/.sdk/tm/seneca-provider/LICENSE +21 -0
- package/project/.sdk/tm/seneca-provider/Makefile +15 -0
- package/project/.sdk/tm/seneca-provider/src/tsconfig.json +18 -0
- package/project/.sdk/tm/seneca-provider/test/tsconfig.json +16 -0
- package/project/.sdk/tm/seneca-provider/tsfmt.json +3 -0
- package/project/.sdk/tm/swift/VERSION +1 -1
- package/project/.sdk/tm/ts/src/tsconfig.json +1 -0
- package/project/.sdk/tm/ts/src/utility/MakeErrorUtility.ts +4 -0
- package/project/.sdk/tm/ts/test/tsconfig.json +1 -0
- package/project/.sdk/tm/ts/test/utility.ts +3 -3
- package/project/.sdk/tm/zig/VERSION +1 -1
- package/src/action/doctor.ts +475 -0
- package/src/action/feature.ts +54 -16
- package/src/action/target.ts +174 -25
- package/src/cmp/Entity.ts +7 -0
- package/src/cmp/ExternalTarget.ts +125 -0
- package/src/cmp/Feature.ts +3 -1
- package/src/cmp/Main.ts +7 -1
- package/src/cmp/ReadmeExplanation.ts +2 -2
- package/src/cmp/ReadmeTop.ts +22 -9
- package/src/cmp/Registered.ts +100 -0
- package/src/cmp/Test.ts +4 -1
- package/src/helpers/dryrun.ts +57 -0
- package/src/helpers/featureSource.ts +208 -0
- package/src/helpers/naming.ts +73 -2
- package/src/helpers/opExample.ts +19 -2
- package/src/helpers/opShape.ts +65 -0
- package/src/helpers/packageMeta.ts +211 -10
- package/src/helpers/stdrep.ts +56 -0
- package/src/helpers/testPolicy.ts +52 -0
- package/src/sdkgen.ts +350 -5
- package/src/types.ts +24 -1
- package/src/utility.ts +10 -1
- package/project/.sdk/tm/rust/feature/mod.rs +0 -24
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// Behavioural tests for the enterprise features shipped with this SDK
|
|
2
|
+
// (retry, cache, rbac, telemetry, ...). Each block runs only when its
|
|
3
|
+
// feature is present (see Fh.HasFeature in FeatureHarness.cs, which also
|
|
4
|
+
// holds the Fh* pipeline harness these tests drive).
|
|
4
5
|
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// generated entity op code, but with no live server and no API-specific
|
|
9
|
-
// fixtures. Each block runs only when its feature is present in this SDK
|
|
10
|
-
// (see Fh.HasFeature; absent features early-return their tests).
|
|
6
|
+
// This file constructs every shipped feature type by name, so it only
|
|
7
|
+
// compiles with the COMPLETE feature set - it is listed in the csharp
|
|
8
|
+
// target's `feature.fullset` and dropped when a project trims its features.
|
|
11
9
|
|
|
12
10
|
using System.Text.RegularExpressions;
|
|
13
11
|
|
|
@@ -19,382 +17,6 @@ using ProjectNameSdk.Feature;
|
|
|
19
17
|
|
|
20
18
|
namespace ProjectNameSdk.Test;
|
|
21
19
|
|
|
22
|
-
// --- harness ----------------------------------------------------------------
|
|
23
|
-
|
|
24
|
-
// FhClock is a deterministic virtual clock: Now() advances only when
|
|
25
|
-
// Sleep(ms) is called, so timing-based features can be asserted without
|
|
26
|
-
// real delays.
|
|
27
|
-
internal class FhClock
|
|
28
|
-
{
|
|
29
|
-
public long T;
|
|
30
|
-
public long Now() => T;
|
|
31
|
-
public void Sleep(int ms) => T += ms;
|
|
32
|
-
public void Advance(int ms) => T += ms;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// FhRecorder is a mock transport recording every call, replying via an
|
|
36
|
-
// optional Reply func (default: 200 with a call counter).
|
|
37
|
-
internal class FhRecorder
|
|
38
|
-
{
|
|
39
|
-
public List<Dictionary<string, object?>> Calls = new();
|
|
40
|
-
public Func<int, Dictionary<string, object?>, object?>? Reply;
|
|
41
|
-
|
|
42
|
-
public object? Fetch(Context ctx, string url, Dictionary<string, object?> fetchdef)
|
|
43
|
-
{
|
|
44
|
-
Calls.Add(new Dictionary<string, object?>
|
|
45
|
-
{
|
|
46
|
-
["url"] = url,
|
|
47
|
-
["fetchdef"] = fetchdef,
|
|
48
|
-
});
|
|
49
|
-
if (Reply != null)
|
|
50
|
-
{
|
|
51
|
-
return Reply(Calls.Count, fetchdef);
|
|
52
|
-
}
|
|
53
|
-
return Fh.Response(200, new Dictionary<string, object?>
|
|
54
|
-
{
|
|
55
|
-
["ok"] = true,
|
|
56
|
-
["n"] = Calls.Count,
|
|
57
|
-
}, null);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
public Dictionary<string, object?> Headers(int i)
|
|
61
|
-
{
|
|
62
|
-
var fetchdef = Calls[i]["fetchdef"] as Dictionary<string, object?>;
|
|
63
|
-
return fetchdef?["headers"] as Dictionary<string, object?>
|
|
64
|
-
?? new Dictionary<string, object?>();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public Dictionary<string, object?> Fetchdef(int i)
|
|
68
|
-
{
|
|
69
|
-
return Calls[i]["fetchdef"] as Dictionary<string, object?>
|
|
70
|
-
?? new Dictionary<string, object?>();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
public string Url(int i)
|
|
74
|
-
{
|
|
75
|
-
return Calls[i]["url"] as string ?? "";
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
internal class FhOpSpec
|
|
80
|
-
{
|
|
81
|
-
public string Entity = "";
|
|
82
|
-
public string Op = "";
|
|
83
|
-
public string Method = "";
|
|
84
|
-
public string Path = "";
|
|
85
|
-
public Dictionary<string, object?>? Query;
|
|
86
|
-
public Dictionary<string, object?>? Headers;
|
|
87
|
-
public object? Body;
|
|
88
|
-
public Dictionary<string, object?>? Ctrl;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
internal class FhOpResult
|
|
92
|
-
{
|
|
93
|
-
public bool Ok;
|
|
94
|
-
public object? Data;
|
|
95
|
-
public Exception? Err;
|
|
96
|
-
public Result? Result;
|
|
97
|
-
public Context? Ctx;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// FhHarness wires features (in init order) to a mock transport and a mini
|
|
101
|
-
// operation pipeline.
|
|
102
|
-
internal class FhHarness
|
|
103
|
-
{
|
|
104
|
-
public ProjectNameSDK Client = null!;
|
|
105
|
-
public Utility Utility = null!;
|
|
106
|
-
public Context Rootctx = null!;
|
|
107
|
-
public string Base = "http://api.test";
|
|
108
|
-
|
|
109
|
-
private static string FhDefaultMethod(string op)
|
|
110
|
-
{
|
|
111
|
-
return op switch
|
|
112
|
-
{
|
|
113
|
-
"create" => "POST",
|
|
114
|
-
"update" => "PATCH",
|
|
115
|
-
"remove" => "DELETE",
|
|
116
|
-
_ => "GET",
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
private static string FhBuildUrl(Spec spec)
|
|
121
|
-
{
|
|
122
|
-
var keys = spec.Query.Where(kv => kv.Value != null)
|
|
123
|
-
.Select(kv => kv.Key).OrderBy(k => k, StringComparer.Ordinal).ToList();
|
|
124
|
-
var qs = string.Join("&", keys.Select(k =>
|
|
125
|
-
Uri.EscapeDataString(k) + "=" +
|
|
126
|
-
Uri.EscapeDataString(StructUtils.Stringify(spec.Query[k]))));
|
|
127
|
-
var url = spec.Base + spec.Path;
|
|
128
|
-
if (qs != "")
|
|
129
|
-
{
|
|
130
|
-
url += "?" + qs;
|
|
131
|
-
}
|
|
132
|
-
return url;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Op runs one operation through the mini pipeline (mirrors the generated
|
|
136
|
-
// entity op code: hook, short-circuit, make*, hook, ...).
|
|
137
|
-
public FhOpResult Op(FhOpSpec o)
|
|
138
|
-
{
|
|
139
|
-
var entity = o.Entity == "" ? "widget" : o.Entity;
|
|
140
|
-
var opname = o.Op == "" ? "load" : o.Op;
|
|
141
|
-
var method = o.Method == "" ? FhDefaultMethod(opname) : o.Method;
|
|
142
|
-
var ctrl = o.Ctrl ?? new Dictionary<string, object?>();
|
|
143
|
-
|
|
144
|
-
var ctx = Utility.MakeContext(new Dictionary<string, object?>
|
|
145
|
-
{
|
|
146
|
-
["opname"] = opname,
|
|
147
|
-
["ctrl"] = ctrl,
|
|
148
|
-
}, Rootctx);
|
|
149
|
-
ctx.Op = new Operation(new Dictionary<string, object?>
|
|
150
|
-
{
|
|
151
|
-
["entity"] = entity,
|
|
152
|
-
["name"] = opname,
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
Utility.FeatureHook(ctx, "PostConstructEntity");
|
|
156
|
-
|
|
157
|
-
Utility.FeatureHook(ctx, "PrePoint");
|
|
158
|
-
if (ctx.Out.TryGetValue("point", out var pointOut) && pointOut is Exception perr)
|
|
159
|
-
{
|
|
160
|
-
return Fail(ctx, perr);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
Utility.FeatureHook(ctx, "PreSpec");
|
|
164
|
-
var path = o.Path == "" ? "/" + entity : o.Path;
|
|
165
|
-
var headers = new Dictionary<string, object?>(o.Headers
|
|
166
|
-
?? new Dictionary<string, object?>());
|
|
167
|
-
var query = new Dictionary<string, object?>(o.Query
|
|
168
|
-
?? new Dictionary<string, object?>());
|
|
169
|
-
ctx.Spec = new Spec(new Dictionary<string, object?>
|
|
170
|
-
{
|
|
171
|
-
["method"] = method,
|
|
172
|
-
["base"] = Base,
|
|
173
|
-
["path"] = path,
|
|
174
|
-
["headers"] = headers,
|
|
175
|
-
["query"] = query,
|
|
176
|
-
["step"] = "start",
|
|
177
|
-
});
|
|
178
|
-
if (o.Body != null)
|
|
179
|
-
{
|
|
180
|
-
ctx.Spec.Body = o.Body;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
Utility.FeatureHook(ctx, "PreRequest");
|
|
184
|
-
ctx.Spec.Url = FhBuildUrl(ctx.Spec);
|
|
185
|
-
|
|
186
|
-
var fetchdef = new Dictionary<string, object?>
|
|
187
|
-
{
|
|
188
|
-
["url"] = ctx.Spec.Url,
|
|
189
|
-
["method"] = ctx.Spec.Method,
|
|
190
|
-
["headers"] = ctx.Spec.Headers,
|
|
191
|
-
};
|
|
192
|
-
if (ctx.Spec.Body != null)
|
|
193
|
-
{
|
|
194
|
-
fetchdef["body"] = ctx.Spec.Body;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
object? response = null;
|
|
198
|
-
Exception? fetchErr = null;
|
|
199
|
-
if (ctx.Out.TryGetValue("request", out var reqOut) && reqOut != null)
|
|
200
|
-
{
|
|
201
|
-
response = reqOut;
|
|
202
|
-
}
|
|
203
|
-
else
|
|
204
|
-
{
|
|
205
|
-
try
|
|
206
|
-
{
|
|
207
|
-
response = Utility.Fetcher(ctx, ctx.Spec.Url, fetchdef);
|
|
208
|
-
}
|
|
209
|
-
catch (Exception ex)
|
|
210
|
-
{
|
|
211
|
-
fetchErr = ex;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
if (response is Dictionary<string, object?> rm)
|
|
215
|
-
{
|
|
216
|
-
ctx.Response = new Response(rm);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
Utility.FeatureHook(ctx, "PreResponse");
|
|
220
|
-
FhPopulateResult(ctx, response, fetchErr);
|
|
221
|
-
Utility.FeatureHook(ctx, "PreResult");
|
|
222
|
-
Utility.FeatureHook(ctx, "PreDone");
|
|
223
|
-
|
|
224
|
-
if (ctx.Result != null && ctx.Result.Ok)
|
|
225
|
-
{
|
|
226
|
-
return new FhOpResult
|
|
227
|
-
{
|
|
228
|
-
Ok = true,
|
|
229
|
-
Data = ctx.Result.Resdata,
|
|
230
|
-
Result = ctx.Result,
|
|
231
|
-
Ctx = ctx,
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
Exception err;
|
|
236
|
-
if (ctx.Result?.Err != null)
|
|
237
|
-
{
|
|
238
|
-
err = ctx.Result.Err;
|
|
239
|
-
}
|
|
240
|
-
else
|
|
241
|
-
{
|
|
242
|
-
err = ctx.MakeError("op_failed", "operation failed");
|
|
243
|
-
}
|
|
244
|
-
return Fail(ctx, err);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
private FhOpResult Fail(Context ctx, Exception err)
|
|
248
|
-
{
|
|
249
|
-
ctx.Ctrl.Err = err;
|
|
250
|
-
Utility.FeatureHook(ctx, "PreUnexpected");
|
|
251
|
-
return new FhOpResult
|
|
252
|
-
{
|
|
253
|
-
Ok = false,
|
|
254
|
-
Err = err,
|
|
255
|
-
Result = ctx.Result,
|
|
256
|
-
Ctx = ctx,
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
private static void FhPopulateResult(Context ctx, object? response, Exception? fetchErr)
|
|
261
|
-
{
|
|
262
|
-
var result = new Result(new Dictionary<string, object?>());
|
|
263
|
-
ctx.Result = result;
|
|
264
|
-
|
|
265
|
-
if (fetchErr != null)
|
|
266
|
-
{
|
|
267
|
-
result.Err = fetchErr;
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
if (response is not Dictionary<string, object?> rm)
|
|
272
|
-
{
|
|
273
|
-
result.Err = ctx.MakeError("request_no_response", "response: undefined");
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
var resp = new Response(rm);
|
|
278
|
-
result.Status = resp.Status;
|
|
279
|
-
result.StatusText = resp.StatusText;
|
|
280
|
-
if (resp.Headers is Dictionary<string, object?> hm)
|
|
281
|
-
{
|
|
282
|
-
result.Headers = hm;
|
|
283
|
-
}
|
|
284
|
-
if (resp.JsonFunc != null)
|
|
285
|
-
{
|
|
286
|
-
result.Body = resp.JsonFunc();
|
|
287
|
-
}
|
|
288
|
-
result.Resdata = result.Body;
|
|
289
|
-
|
|
290
|
-
if (result.Status >= 400)
|
|
291
|
-
{
|
|
292
|
-
result.Err = ctx.MakeError("request_status",
|
|
293
|
-
$"request: {result.Status}: {result.StatusText}");
|
|
294
|
-
}
|
|
295
|
-
else if (resp.Err != null)
|
|
296
|
-
{
|
|
297
|
-
result.Err = resp.Err;
|
|
298
|
-
}
|
|
299
|
-
if (result.Err == null)
|
|
300
|
-
{
|
|
301
|
-
result.Ok = true;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
internal static class Fh
|
|
307
|
-
{
|
|
308
|
-
// HasFeature is true when this SDK was generated with the named feature.
|
|
309
|
-
public static bool HasFeature(string name)
|
|
310
|
-
{
|
|
311
|
-
var config = SdkConfig.MakeConfig();
|
|
312
|
-
return config.TryGetValue("feature", out var fraw) &&
|
|
313
|
-
fraw is Dictionary<string, object?> fm &&
|
|
314
|
-
fm.TryGetValue(name, out var f) && f != null;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
public static bool SkipWithout(params string[] names)
|
|
318
|
-
{
|
|
319
|
-
return names.Any(name => !HasFeature(name));
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
// Response builds a transport-shaped response the pipeline understands.
|
|
323
|
-
public static Dictionary<string, object?> Response(int status, object? data,
|
|
324
|
-
Dictionary<string, object?>? headers)
|
|
325
|
-
{
|
|
326
|
-
var h = new Dictionary<string, object?>();
|
|
327
|
-
if (headers != null)
|
|
328
|
-
{
|
|
329
|
-
foreach (var kv in headers)
|
|
330
|
-
{
|
|
331
|
-
h[kv.Key.ToLowerInvariant()] = kv.Value;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return new Dictionary<string, object?>
|
|
335
|
-
{
|
|
336
|
-
["status"] = status,
|
|
337
|
-
["statusText"] = status >= 400 ? "ERR" : "OK",
|
|
338
|
-
["body"] = "not-used",
|
|
339
|
-
["json"] = (Func<object?>)(() => data),
|
|
340
|
-
["headers"] = h,
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// Make constructs the harness: a real (test-mode) client, an isolated
|
|
345
|
-
// utility whose fetcher is the mock server, and the requested features
|
|
346
|
-
// initialised against it. Fires PostConstruct once wiring is complete.
|
|
347
|
-
public static FhHarness Make(FetcherFunc? server,
|
|
348
|
-
params (BaseFeature f, Dictionary<string, object?>? options)[] features)
|
|
349
|
-
{
|
|
350
|
-
var client = ProjectNameSDK.TestSDK(null, null);
|
|
351
|
-
client.Features = new List<BaseFeature>();
|
|
352
|
-
|
|
353
|
-
var utility = client.GetUtility();
|
|
354
|
-
if (server == null)
|
|
355
|
-
{
|
|
356
|
-
var rec = new FhRecorder();
|
|
357
|
-
server = rec.Fetch;
|
|
358
|
-
}
|
|
359
|
-
utility.Fetcher = server;
|
|
360
|
-
|
|
361
|
-
var rootctx = utility.MakeContext(new Dictionary<string, object?>
|
|
362
|
-
{
|
|
363
|
-
["client"] = client,
|
|
364
|
-
["utility"] = utility,
|
|
365
|
-
}, client.GetRootCtx());
|
|
366
|
-
|
|
367
|
-
foreach (var (f, options) in features)
|
|
368
|
-
{
|
|
369
|
-
var fopts = new Dictionary<string, object?> { ["active"] = true };
|
|
370
|
-
if (options != null)
|
|
371
|
-
{
|
|
372
|
-
foreach (var kv in options)
|
|
373
|
-
{
|
|
374
|
-
fopts[kv.Key] = kv.Value;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
f.Init(rootctx, fopts);
|
|
378
|
-
client.Features.Add(f);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
utility.FeatureHook(rootctx, "PostConstruct");
|
|
382
|
-
|
|
383
|
-
return new FhHarness
|
|
384
|
-
{
|
|
385
|
-
Client = client,
|
|
386
|
-
Utility = utility,
|
|
387
|
-
Rootctx = rootctx,
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// ErrCode extracts the SDK error code, "" otherwise.
|
|
392
|
-
public static string ErrCode(Exception? err)
|
|
393
|
-
{
|
|
394
|
-
return err is ProjectNameError se ? se.Code : "";
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
20
|
// --- netsim -----------------------------------------------------------------
|
|
399
21
|
|
|
400
22
|
public class FeatureNetsimTest
|
|
@@ -71,8 +71,8 @@ public static class TestRunner
|
|
|
71
71
|
|
|
72
72
|
public static Dictionary<string, object?> EnvOverride(Dictionary<string, object?> m)
|
|
73
73
|
{
|
|
74
|
-
if (Environment.GetEnvironmentVariable("
|
|
75
|
-
Environment.GetEnvironmentVariable("
|
|
74
|
+
if (Environment.GetEnvironmentVariable("PROJECTENV_TEST_LIVE") == "TRUE" ||
|
|
75
|
+
Environment.GetEnvironmentVariable("PROJECTENV_TEST_OVERRIDE") == "TRUE")
|
|
76
76
|
{
|
|
77
77
|
foreach (var key in m.Keys.ToList())
|
|
78
78
|
{
|
|
@@ -98,10 +98,10 @@ public static class TestRunner
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
var explain = Environment.GetEnvironmentVariable("
|
|
101
|
+
var explain = Environment.GetEnvironmentVariable("PROJECTENV_TEST_EXPLAIN");
|
|
102
102
|
if (!string.IsNullOrEmpty(explain))
|
|
103
103
|
{
|
|
104
|
-
m["
|
|
104
|
+
m["PROJECTENV_TEST_EXPLAIN"] = explain;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
return m;
|
|
@@ -47,6 +47,10 @@ dynamic makeError(dynamic ctx, [dynamic err]) {
|
|
|
47
47
|
sdkerr.result = clean(ctx, result);
|
|
48
48
|
sdkerr.spec = clean(ctx, spec);
|
|
49
49
|
|
|
50
|
+
// Promote the HTTP status to the top level, so a consumer can branch on
|
|
51
|
+
// `err.status` / `err.notFound` instead of reaching into `err.result`.
|
|
52
|
+
sdkerr.status = null == result.status ? -1 : result.status;
|
|
53
|
+
|
|
50
54
|
ctx.ctrl['err'] = sdkerr;
|
|
51
55
|
|
|
52
56
|
// Fire PreUnexpected so observability features (metrics, telemetry, audit,
|
|
@@ -34,8 +34,8 @@ String resolveTestPath(String rel) {
|
|
|
34
34
|
Map<String, dynamic> envOverride(Map<String, dynamic> m) {
|
|
35
35
|
final env = Platform.environment;
|
|
36
36
|
|
|
37
|
-
if ('TRUE' == env['
|
|
38
|
-
'TRUE' == env['
|
|
37
|
+
if ('TRUE' == env['PROJECTENV_TEST_LIVE'] ||
|
|
38
|
+
'TRUE' == env['PROJECTENV_TEST_OVERRIDE']) {
|
|
39
39
|
for (final k in m.keys.toList()) {
|
|
40
40
|
var envval = env[k];
|
|
41
41
|
if (null != envval) {
|
|
@@ -45,8 +45,8 @@ Map<String, dynamic> envOverride(Map<String, dynamic> m) {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
m['
|
|
49
|
-
env['
|
|
48
|
+
m['PROJECTENV_TEST_EXPLAIN'] =
|
|
49
|
+
env['PROJECTENV_TEST_EXPLAIN'] ?? m['PROJECTENV_TEST_EXPLAIN'];
|
|
50
50
|
|
|
51
51
|
return m;
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
PROJECTVERSION
|
|
@@ -39,6 +39,32 @@ defmodule ProjectName.EntityBase do
|
|
|
39
39
|
|
|
40
40
|
def get_name(ent), do: S.getprop(ent, "_name")
|
|
41
41
|
|
|
42
|
+
# Every operation resolves to the ENTITY, not the raw data — the record is
|
|
43
|
+
# reached through data_get/1. `run_op` returns the terminal result value, so
|
|
44
|
+
# the op hands that value back only when the pipeline FAILED (the error
|
|
45
|
+
# shape is utility-configurable); on success it hands back the entity.
|
|
46
|
+
# See AGENTS.md "Entity operations return ENTITIES".
|
|
47
|
+
def op_return(ent, ctx, out) do
|
|
48
|
+
result = S.getprop(ctx, "result")
|
|
49
|
+
|
|
50
|
+
if result != nil and S.getprop(result, "ok") == true do
|
|
51
|
+
ent
|
|
52
|
+
else
|
|
53
|
+
out
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# `remove` resolves to the entity, marked. The instance KEEPS the data it
|
|
58
|
+
# held — a caller can still read what was deleted — but it is no longer a
|
|
59
|
+
# live record.
|
|
60
|
+
def mark_deleted(ent) do
|
|
61
|
+
S.setprop(ent, "_deleted", true)
|
|
62
|
+
ent
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def deleted(ent), do: S.getprop(ent, "_deleted") == true
|
|
66
|
+
|
|
67
|
+
|
|
42
68
|
def make(ent) do
|
|
43
69
|
module = S.getprop(ent, "_module")
|
|
44
70
|
client = S.getprop(ent, "_client")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
PROJECTVERSION
|
|
@@ -28,6 +28,12 @@ type Entity interface {
|
|
|
28
28
|
Make() Entity
|
|
29
29
|
Data(data ...any) any
|
|
30
30
|
Match(match ...any) any
|
|
31
|
+
|
|
32
|
+
// Every operation resolves to the entity; Remove additionally marks it.
|
|
33
|
+
// The instance keeps the data it held — a caller can still read what was
|
|
34
|
+
// deleted — but it is no longer a live record.
|
|
35
|
+
MarkDeleted()
|
|
36
|
+
Deleted() bool
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
type ProjectNameEntity interface {
|