@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
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
File,
|
|
12
12
|
cmp,
|
|
13
13
|
snakify,
|
|
14
|
-
isAuthActive,
|
|
14
|
+
isAuthActive, envName, envToken
|
|
15
15
|
} from '@voxgig/sdkgen'
|
|
16
16
|
|
|
17
17
|
|
|
@@ -70,7 +70,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
70
70
|
const entity: ModelEntity = props.entity
|
|
71
71
|
const javapackage: string = props.javapackage
|
|
72
72
|
|
|
73
|
-
const PROJECTNAME =
|
|
73
|
+
const PROJECTNAME = envName(model)
|
|
74
74
|
const SDK = model.const.Name + 'SDK'
|
|
75
75
|
|
|
76
76
|
const authActive = isAuthActive(model)
|
|
@@ -132,7 +132,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
132
132
|
: ''
|
|
133
133
|
|
|
134
134
|
// Build the ENTID env var name for this entity
|
|
135
|
-
const entidEnvVar = `${PROJECTNAME}_TEST_${
|
|
135
|
+
const entidEnvVar = `${PROJECTNAME}_TEST_${envToken(entity.name)}_ENTID`
|
|
136
136
|
|
|
137
137
|
File({ name: entity.Name + 'DirectTest.' + target.ext }, () => {
|
|
138
138
|
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
each,
|
|
18
18
|
buildIdNames,
|
|
19
19
|
getMatchEntries,
|
|
20
|
-
isAuthActive,
|
|
20
|
+
isAuthActive, envName, envToken
|
|
21
21
|
} from '@voxgig/sdkgen'
|
|
22
22
|
|
|
23
23
|
|
|
@@ -58,8 +58,8 @@ const TestEntity = cmp(function TestEntity(props: any) {
|
|
|
58
58
|
return
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
const PROJUPPER =
|
|
62
|
-
const ENTUPPER = entity.name
|
|
61
|
+
const PROJUPPER = envName(model)
|
|
62
|
+
const ENTUPPER = envToken(entity.name)
|
|
63
63
|
const entidEnvVar = `${PROJUPPER}_TEST_${ENTUPPER}_ENTID`
|
|
64
64
|
|
|
65
65
|
const SDK = model.const.Name + 'SDK'
|
|
@@ -339,7 +339,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
339
339
|
|
|
340
340
|
Content(`
|
|
341
341
|
Object ${datavar}Result = ${entvar}.create(${datavar}, null);
|
|
342
|
-
${datavar} = Helpers.toMapAny(${datavar}Result);
|
|
342
|
+
${datavar} = Helpers.toMapAny(${datavar}Result instanceof SdkEntity ? ((SdkEntity) ${datavar}Result).data() : ${datavar}Result);
|
|
343
343
|
assertNotNull(${datavar}, "expected create result to be a map");
|
|
344
344
|
`)
|
|
345
345
|
if (null != ctx.entity.id) {
|
|
@@ -479,7 +479,7 @@ const generateUpdate: OpGen = (ctx, step, index) => {
|
|
|
479
479
|
|
|
480
480
|
Content(`
|
|
481
481
|
Object ${resdatavar}Result = ${entvar}.update(${datavar}Up, null);
|
|
482
|
-
Map<String, Object> ${resdatavar} = Helpers.toMapAny(${resdatavar}Result);
|
|
482
|
+
Map<String, Object> ${resdatavar} = Helpers.toMapAny(${resdatavar}Result instanceof SdkEntity ? ((SdkEntity) ${resdatavar}Result).data() : ${resdatavar}Result);
|
|
483
483
|
assertNotNull(${resdatavar}, "expected update result to be a map");
|
|
484
484
|
`)
|
|
485
485
|
if (hasEntIdU) {
|
|
@@ -546,7 +546,7 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
546
546
|
if (hasEntId) {
|
|
547
547
|
Content(` ${matchvar}.put("id", ${srcdatavar}.get("id"));
|
|
548
548
|
Object ${datavar}Loaded = ${entvar}.load(${matchvar}, null);
|
|
549
|
-
Map<String, Object> ${datavar}LoadResult = Helpers.toMapAny(${datavar}Loaded);
|
|
549
|
+
Map<String, Object> ${datavar}LoadResult = Helpers.toMapAny(${datavar}Loaded instanceof SdkEntity ? ((SdkEntity) ${datavar}Loaded).data() : ${datavar}Loaded);
|
|
550
550
|
assertNotNull(${datavar}LoadResult, "expected load result to be a map");
|
|
551
551
|
assertEquals(${srcdatavar}.get("id"), ${datavar}LoadResult.get("id"),
|
|
552
552
|
"expected load result id to match");
|
|
@@ -34,6 +34,20 @@ public abstract class EntityBase implements SdkEntity {
|
|
|
34
34
|
protected Map<String, Object> match = new LinkedHashMap<>();
|
|
35
35
|
protected Context entctx;
|
|
36
36
|
|
|
37
|
+
// Every operation resolves to the entity; `remove` additionally marks
|
|
38
|
+
// it. The instance KEEPS the data it held — a caller can still read what
|
|
39
|
+
// was deleted — but it is no longer a live record. See AGENTS.md.
|
|
40
|
+
private boolean deleted = false;
|
|
41
|
+
|
|
42
|
+
public void markDeleted() {
|
|
43
|
+
this.deleted = true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public boolean deleted() {
|
|
47
|
+
return this.deleted;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
37
51
|
protected EntityBase(String name, SdkClient client, Map<String, Object> entopts) {
|
|
38
52
|
if (entopts == null) {
|
|
39
53
|
entopts = new LinkedHashMap<>();
|
|
@@ -127,7 +141,26 @@ public abstract class EntityBase implements SdkEntity {
|
|
|
127
141
|
|
|
128
142
|
postDone.run();
|
|
129
143
|
|
|
130
|
-
|
|
144
|
+
Object out = utility.done.apply(ctx);
|
|
145
|
+
|
|
146
|
+
// An operation resolves to the ENTITY, not the raw data. Entities are
|
|
147
|
+
// stateful: postDone has just absorbed resdata/resmatch into this
|
|
148
|
+
// instance, and the caller reaches the record through data(). Two
|
|
149
|
+
// structural exceptions: `list` resolves to the ARRAY of entity
|
|
150
|
+
// instances makeResult built, and a failed op with throwing disabled
|
|
151
|
+
// hands back the error payload unchanged. `remove` additionally marks
|
|
152
|
+
// the entity deleted; it KEEPS its data, so a caller can still read
|
|
153
|
+
// what was removed. See AGENTS.md "Entity operations return ENTITIES".
|
|
154
|
+
String opname = ctx.op == null ? null : ctx.op.name;
|
|
155
|
+
|
|
156
|
+
if (ctx.result != null && ctx.result.ok && !"list".equals(opname)) {
|
|
157
|
+
if ("remove".equals(opname)) {
|
|
158
|
+
this.markDeleted();
|
|
159
|
+
}
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return out;
|
|
131
164
|
}
|
|
132
165
|
catch (RuntimeException err) {
|
|
133
166
|
// An error already finalised by makeError (e.g. via done) must not
|
|
@@ -13,6 +13,18 @@ public class SdkError extends RuntimeException {
|
|
|
13
13
|
public transient Object result;
|
|
14
14
|
public transient Object spec;
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* HTTP status of the response that caused this error, or -1 when the
|
|
18
|
+
* request never got one. PROMOTED to the top level: it used to be
|
|
19
|
+
* reachable only at `err.result.status`, so every consumer coupled itself
|
|
20
|
+
* to the internal shape of `result`.
|
|
21
|
+
*/
|
|
22
|
+
public int status = -1;
|
|
23
|
+
|
|
24
|
+
public boolean notFound() {
|
|
25
|
+
return 404 == this.status;
|
|
26
|
+
}
|
|
27
|
+
|
|
16
28
|
public SdkError(String code, String msg, Context ctx) {
|
|
17
29
|
super(msg);
|
|
18
30
|
this.code = code == null ? "" : code;
|
|
@@ -4,7 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each, names, cmap,
|
|
6
6
|
List, File, Content, Copy, Folder, Fragment, Line, FeatureHook,
|
|
7
|
-
entityClassName, entityCollection,
|
|
7
|
+
entityClassName, entityCollection, srcFeatureExcludes,
|
|
8
8
|
} from '@voxgig/sdkgen'
|
|
9
9
|
|
|
10
10
|
|
|
@@ -43,6 +43,9 @@ const Main = cmp(async function Main(props: any) {
|
|
|
43
43
|
|
|
44
44
|
Copy({
|
|
45
45
|
from: 'tm/' + target.name,
|
|
46
|
+
// Root copies src/feature/<name>/ per ACTIVE feature; keep this blanket
|
|
47
|
+
// copy from restoring one that was switched off after `target add`.
|
|
48
|
+
exclude: srcFeatureExcludes(model),
|
|
46
49
|
replace: {
|
|
47
50
|
...props.ctx$.stdrep,
|
|
48
51
|
}
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
repoInfo,
|
|
12
12
|
PUBLISHER,
|
|
13
13
|
PUBLISHER_URL,
|
|
14
|
+
packageVersion,
|
|
14
15
|
} from '@voxgig/sdkgen'
|
|
15
16
|
|
|
16
17
|
|
|
@@ -56,7 +57,7 @@ const Package = cmp(async function Package(props: any) {
|
|
|
56
57
|
// The ts target publishes the canonical scoped npm name; the js target
|
|
57
58
|
// appends `-js` so the two never collide on npm.
|
|
58
59
|
name: packageName(model, 'js'),
|
|
59
|
-
version:
|
|
60
|
+
version: packageVersion(model, target.name),
|
|
60
61
|
description: pkgDescription(model, target.name),
|
|
61
62
|
keywords: keywords(model),
|
|
62
63
|
homepage: `${repoUrl}#readme`,
|
|
@@ -64,6 +65,11 @@ const Package = cmp(async function Package(props: any) {
|
|
|
64
65
|
bugs: { url: issuesUrl },
|
|
65
66
|
main: `src/${SdkName}SDK.js`,
|
|
66
67
|
type: 'commonjs',
|
|
68
|
+
|
|
69
|
+
// What actually ships. Without `files`, `npm publish` packs the test
|
|
70
|
+
// suite and the build scaffolding too. The js target runs from `src`
|
|
71
|
+
// directly (no build step), so that is the whole package.
|
|
72
|
+
files: ['src'],
|
|
67
73
|
scripts: {
|
|
68
74
|
'test': 'node --test \'test/**/*.test.js\'',
|
|
69
75
|
'test-some': 'node --experimental-test-isolation=none ' +
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey, matchArg, idLiteral } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -12,6 +12,17 @@ import { exampleValue } from './utility_js'
|
|
|
12
12
|
// Operation method spelling differs between Go and other languages — Go
|
|
13
13
|
// uses PascalCase methods with explicit ctrl arg, others use lowercase
|
|
14
14
|
// methods with optional ctrl. The op descriptions are language-agnostic.
|
|
15
|
+
// A `list()` on a NESTED entity needs its parent path params. The
|
|
16
|
+
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
17
|
+
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
18
|
+
// half-built URL — indistinguishable from "no such record". The model
|
|
19
|
+
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
20
|
+
function listMatchArg(ent: any): string {
|
|
21
|
+
const idF = entityIdField(ent)
|
|
22
|
+
return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
15
26
|
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
16
27
|
load: { method: 'load(match)', desc: 'Load a single entity by match criteria.' },
|
|
17
28
|
list: { method: 'list(match)', desc: 'List entities matching the criteria.' },
|
|
@@ -124,7 +135,7 @@ const ${eVar} = await client.${entity.Name}().load(${loadArg})
|
|
|
124
135
|
Content(`#### Example: List
|
|
125
136
|
|
|
126
137
|
\`\`\`ts
|
|
127
|
-
const ${eVar}s = await client.${entity.Name}().list()
|
|
138
|
+
const ${eVar}s = await client.${entity.Name}().list(${listMatchArg(entity)})
|
|
128
139
|
\`\`\`
|
|
129
140
|
|
|
130
141
|
`)
|
|
@@ -62,7 +62,8 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
62
62
|
// and omits the stateful section (there is no op to retain state across).
|
|
63
63
|
const testModeExample = primaryOp
|
|
64
64
|
? `const ${eVar} = await client.${eName}().${primaryOp}(${testCallArg})
|
|
65
|
-
// ${eVar} is
|
|
65
|
+
// ${eVar} is the entity, populated with mock response data
|
|
66
|
+
// — call ${eVar}.data() for the record itself
|
|
66
67
|
console.log(${eVar})`
|
|
67
68
|
: `const result = await client.direct({ path: '/api/resource', method: 'GET' })
|
|
68
69
|
console.log(result)`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName, exampleVarName, jsKey, matchArg, idLiteral } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -10,6 +10,17 @@ import {
|
|
|
10
10
|
import { exampleValue } from './utility_js'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
// A `list()` on a NESTED entity needs its parent path params. The
|
|
14
|
+
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
15
|
+
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
16
|
+
// half-built URL — indistinguishable from "no such record". The model
|
|
17
|
+
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
18
|
+
function listMatchArg(ent: any): string {
|
|
19
|
+
const idF = entityIdField(ent)
|
|
20
|
+
return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
13
24
|
const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
14
25
|
const { target, ctx$: { model } } = props
|
|
15
26
|
|
|
@@ -98,7 +109,7 @@ console.log(${eVar})
|
|
|
98
109
|
### List ${eName} Records
|
|
99
110
|
|
|
100
111
|
\`\`\`js
|
|
101
|
-
const ${eVar}s = await client.${eName}().list()
|
|
112
|
+
const ${eVar}s = await client.${eName}().list(${listMatchArg(exampleEntity)})
|
|
102
113
|
for (const ${eVar} of ${eVar}s) {
|
|
103
114
|
console.log(${eVar})
|
|
104
115
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName, exampleVarName, jsKey, matchArg, idLiteral } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -10,6 +10,17 @@ import {
|
|
|
10
10
|
import { exampleValue } from './utility_js'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
// A `list()` on a NESTED entity needs its parent path params. The
|
|
14
|
+
// quickstart used to emit `client.Moon().list()` for an entity at
|
|
15
|
+
// `/planet/{planet_id}/moon`, which 404s against a live server from a
|
|
16
|
+
// half-built URL — indistinguishable from "no such record". The model
|
|
17
|
+
// already marks those params `reqd: true`; matchArg renders exactly them.
|
|
18
|
+
function listMatchArg(ent: any): string {
|
|
19
|
+
const idF = entityIdField(ent)
|
|
20
|
+
return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
13
24
|
const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
14
25
|
const { target, ctx$: { model } } = props
|
|
15
26
|
|
|
@@ -36,7 +47,7 @@ const client = ${ctor}
|
|
|
36
47
|
|
|
37
48
|
if (opnames.includes('list')) {
|
|
38
49
|
Content(`// List all ${eName.toLowerCase()}s (returns an array)
|
|
39
|
-
const ${eVar}s = await client.${eName}().list()
|
|
50
|
+
const ${eVar}s = await client.${eName}().list(${listMatchArg(exampleEntity)})
|
|
40
51
|
for (const ${eVar} of ${eVar}s) {
|
|
41
52
|
console.log(${eVar})
|
|
42
53
|
}
|
|
@@ -51,7 +51,8 @@ const client = ${model.const.Name}SDK.test()
|
|
|
51
51
|
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
|
|
52
52
|
}
|
|
53
53
|
Content(`const ${eVar} = await client.${eName}().${primaryOp}(${arg})
|
|
54
|
-
// ${eVar} is ${'list' === primaryOp ? 'an array of
|
|
54
|
+
// ${eVar} is ${'list' === primaryOp ? 'an array of entities' : 'the entity'}, populated with mock data
|
|
55
|
+
// — call ${eVar}${'list' === primaryOp ? '[0]' : ''}.data() for the record itself
|
|
55
56
|
console.log(${eVar})
|
|
56
57
|
`)
|
|
57
58
|
}
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
cmp,
|
|
18
18
|
snakify,
|
|
19
19
|
isAuthActive,
|
|
20
|
-
jsProp,
|
|
20
|
+
jsProp, envName, envToken
|
|
21
21
|
} from '@voxgig/sdkgen'
|
|
22
22
|
|
|
23
23
|
|
|
@@ -36,8 +36,8 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
36
36
|
|
|
37
37
|
const ff = projectPath('src/cmp/js/fragment/')
|
|
38
38
|
|
|
39
|
-
const PROJECTNAME =
|
|
40
|
-
const entidEnvVar = `${PROJECTNAME}_TEST_${
|
|
39
|
+
const PROJECTNAME = envName(model)
|
|
40
|
+
const entidEnvVar = `${PROJECTNAME}_TEST_${envToken(entity.name)}_ENTID`
|
|
41
41
|
|
|
42
42
|
const authActive = isAuthActive(model)
|
|
43
43
|
const apikeyEnvEntry = authActive
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
cmp,
|
|
31
31
|
each,
|
|
32
32
|
isAuthActive,
|
|
33
|
-
entityDataIdField,
|
|
33
|
+
entityDataIdField, envName, envToken
|
|
34
34
|
} from '@voxgig/sdkgen'
|
|
35
35
|
|
|
36
36
|
|
|
@@ -59,8 +59,8 @@ const TestEntity = cmp(function TestEntity(props: any) {
|
|
|
59
59
|
const target = props.target
|
|
60
60
|
const entity: ModelEntity = props.entity
|
|
61
61
|
|
|
62
|
-
const PROJENVNAME =
|
|
63
|
-
const ENTENVNAME =
|
|
62
|
+
const PROJENVNAME = envName(model)
|
|
63
|
+
const ENTENVNAME = envToken(entity.name)
|
|
64
64
|
const authActive = isAuthActive(model)
|
|
65
65
|
const apikeyEnvEntry = authActive
|
|
66
66
|
? `\n '${PROJENVNAME}_APIKEY': 'NONE',`
|
|
@@ -256,7 +256,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
256
256
|
const hasEntIdC = null != entity.id
|
|
257
257
|
|
|
258
258
|
Content(`
|
|
259
|
-
${datavar} = await ${entvar}.create(${datavar})
|
|
259
|
+
${datavar} = (await ${entvar}.create(${datavar})).data()
|
|
260
260
|
`)
|
|
261
261
|
if (hasEntIdC) {
|
|
262
262
|
Content(` assert(null != ${datavar}.id)
|
|
@@ -297,7 +297,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
297
297
|
})
|
|
298
298
|
|
|
299
299
|
Content(`
|
|
300
|
-
const ${listvar} = await ${entvar}.list(${matchvar})
|
|
300
|
+
const ${listvar} = (await ${entvar}.list(${matchvar})).map((e) => e.data())
|
|
301
301
|
`)
|
|
302
302
|
const allSteps = flow.step
|
|
303
303
|
for (let vI = 0; vI < step.valid.length; vI++) {
|
|
@@ -370,7 +370,7 @@ const generateUpdate: OpGen = (ctx, step, index) => {
|
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
Content(`
|
|
373
|
-
const ${resdatavar} = await ${entvar}.update(${datavar})
|
|
373
|
+
const ${resdatavar} = (await ${entvar}.update(${datavar})).data()
|
|
374
374
|
`)
|
|
375
375
|
if (hasEntIdU) {
|
|
376
376
|
Content(` assert(${resdatavar}.id === ${datavar}.id)
|
|
@@ -435,13 +435,13 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
435
435
|
if (hasEntId) {
|
|
436
436
|
Content(` const ${matchvar} = {}
|
|
437
437
|
${matchvar}.id = ${srcdatavar}.id
|
|
438
|
-
const ${datavar} = await ${entvar}.load(${matchvar})
|
|
438
|
+
const ${datavar} = (await ${entvar}.load(${matchvar})).data()
|
|
439
439
|
assert(${datavar}.id === ${srcdatavar}.id)
|
|
440
440
|
`)
|
|
441
441
|
}
|
|
442
442
|
else {
|
|
443
443
|
Content(` const ${matchvar} = {}
|
|
444
|
-
const ${datavar} = await ${entvar}.load(${matchvar})
|
|
444
|
+
const ${datavar} = (await ${entvar}.load(${matchvar})).data()
|
|
445
445
|
assert(null != ${datavar})
|
|
446
446
|
`)
|
|
447
447
|
}
|
|
@@ -24,6 +24,7 @@ class ProjectNameEntityBase {
|
|
|
24
24
|
this._entopts = entopts
|
|
25
25
|
this._utility = client.utility()
|
|
26
26
|
this._data = {}
|
|
27
|
+
this._deleted = false
|
|
27
28
|
this._match = {}
|
|
28
29
|
|
|
29
30
|
const makeContext = this._utility.makeContext
|
|
@@ -37,6 +38,21 @@ class ProjectNameEntityBase {
|
|
|
37
38
|
featureHook(this._entctx, 'PostConstructEntity')
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
|
|
42
|
+
// True once a successful `remove` resolves on this instance. `remove`
|
|
43
|
+
// resolves to the entity like every other operation, and the instance KEEPS
|
|
44
|
+
// the data it held — a caller can still read what was deleted — but it is
|
|
45
|
+
// no longer a live record. See AGENTS.md.
|
|
46
|
+
markDeleted() {
|
|
47
|
+
this._deleted = true
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
deleted() {
|
|
52
|
+
return true === this._deleted
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
40
56
|
entopts() {
|
|
41
57
|
return this._utility.struct.merge([{}, this._entopts])
|
|
42
58
|
}
|
|
@@ -161,7 +177,12 @@ class ProjectNameEntityBase {
|
|
|
161
177
|
|
|
162
178
|
toJSON() {
|
|
163
179
|
const struct = this._utility.struct
|
|
164
|
-
|
|
180
|
+
// The marker is NAMESPACED. It used to be `entity$` — a short, generic
|
|
181
|
+
// name, and the `$`-suffix convention is not unique to sdkgen. Seneca uses
|
|
182
|
+
// `entity$` on its own entities to hold the canon, so an SDK record fed
|
|
183
|
+
// into `entize` silently overwrote it and produced entities claiming a
|
|
184
|
+
// canon that does not exist: no error, just wrong entities.
|
|
185
|
+
return struct.merge([{}, struct.getdef(this._data, {}), { 'voxgig$entity': this.Name }])
|
|
165
186
|
}
|
|
166
187
|
|
|
167
188
|
|
|
@@ -83,7 +83,15 @@ class EntityOperation {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
const out = done(ctx)
|
|
87
|
+
|
|
88
|
+
// An operation resolves to the ENTITY, not the raw data — the record
|
|
89
|
+
// has just been absorbed into this instance and is reached through
|
|
90
|
+
// data(). `done` still runs: it completes the pipeline and raises on
|
|
91
|
+
// failure, and when throwing is disabled it hands back the error
|
|
92
|
+
// payload, which passes through unchanged. See AGENTS.md "Entity
|
|
93
|
+
// operations return ENTITIES".
|
|
94
|
+
return (ctx.result && ctx.result.ok) ? this : out
|
|
87
95
|
}
|
|
88
96
|
catch (err) {
|
|
89
97
|
// #PreUnexpected-Hook
|
|
@@ -88,7 +88,15 @@ class EntityOperation {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
const out = done(ctx)
|
|
92
|
+
|
|
93
|
+
// An operation resolves to the ENTITY, not the raw data — the record
|
|
94
|
+
// has just been absorbed into this instance and is reached through
|
|
95
|
+
// data(). `done` still runs: it completes the pipeline and raises on
|
|
96
|
+
// failure, and when throwing is disabled it hands back the error
|
|
97
|
+
// payload, which passes through unchanged. See AGENTS.md "Entity
|
|
98
|
+
// operations return ENTITIES".
|
|
99
|
+
return (ctx.result && ctx.result.ok) ? this : out
|
|
92
100
|
}
|
|
93
101
|
catch (err) {
|
|
94
102
|
// #PreUnexpected-Hook
|
|
@@ -89,7 +89,21 @@ class EntityOperation {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
const out = done(ctx)
|
|
93
|
+
|
|
94
|
+
// An operation resolves to the ENTITY, not the raw data — the record
|
|
95
|
+
// has just been absorbed into this instance and is reached through
|
|
96
|
+
// data(). `done` still runs: it completes the pipeline and raises on
|
|
97
|
+
// failure, and when throwing is disabled it hands back the error
|
|
98
|
+
// payload, which passes through unchanged. See AGENTS.md "Entity
|
|
99
|
+
// operations return ENTITIES".
|
|
100
|
+
if (ctx.result && ctx.result.ok) {
|
|
101
|
+
// A removed entity keeps its data but is no longer a live record.
|
|
102
|
+
this.markDeleted()
|
|
103
|
+
return this
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return out
|
|
93
107
|
}
|
|
94
108
|
catch (err) {
|
|
95
109
|
// #PreUnexpected-Hook
|
|
@@ -89,7 +89,15 @@ class EntityOperation {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
const out = done(ctx)
|
|
93
|
+
|
|
94
|
+
// An operation resolves to the ENTITY, not the raw data — the record
|
|
95
|
+
// has just been absorbed into this instance and is reached through
|
|
96
|
+
// data(). `done` still runs: it completes the pipeline and raises on
|
|
97
|
+
// failure, and when throwing is disabled it hands back the error
|
|
98
|
+
// payload, which passes through unchanged. See AGENTS.md "Entity
|
|
99
|
+
// operations return ENTITIES".
|
|
100
|
+
return (ctx.result && ctx.result.ok) ? this : out
|
|
93
101
|
}
|
|
94
102
|
catch (err) {
|
|
95
103
|
// #PreUnexpected-Hook
|
|
@@ -10,8 +10,21 @@ class ProjectNameError extends Error {
|
|
|
10
10
|
super(msg)
|
|
11
11
|
this.code = code
|
|
12
12
|
this.ctx = ctx
|
|
13
|
+
|
|
14
|
+
// HTTP status of the response that caused this error, or -1 when the
|
|
15
|
+
// request never got one (transport failure, client-side abort).
|
|
16
|
+
//
|
|
17
|
+
// PROMOTED to the top level on purpose. It used to be reachable only at
|
|
18
|
+
// `err.result.status`, so every consumer wrote the same
|
|
19
|
+
// `404 === e?.result?.status` branch and coupled itself to the internal
|
|
20
|
+
// shape of `result`.
|
|
21
|
+
this.status = -1
|
|
13
22
|
}
|
|
14
23
|
|
|
24
|
+
|
|
25
|
+
// `err.notFound` rather than a magic number at every call site.
|
|
26
|
+
get notFound() { return 404 === this.status }
|
|
27
|
+
|
|
15
28
|
}
|
|
16
29
|
|
|
17
30
|
module.exports = {
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
File,
|
|
5
5
|
cmp,
|
|
6
6
|
collectDeps,
|
|
7
|
+
packageVersion,
|
|
7
8
|
} from '@voxgig/sdkgen'
|
|
8
9
|
|
|
9
10
|
|
|
@@ -53,7 +54,7 @@ const Package = cmp(async function Package(props: any) {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
group = "${group}"
|
|
56
|
-
version = "
|
|
57
|
+
version = "${packageVersion(model, target.name)}"
|
|
57
58
|
|
|
58
59
|
repositories {
|
|
59
60
|
mavenCentral()
|
|
@@ -51,7 +51,8 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
51
51
|
// The op-driven test-mode line, shown only when the SDK has an entity op.
|
|
52
52
|
// A direct()-only SDK (no ops anywhere) shows a direct() call instead.
|
|
53
53
|
const testModeExample = primaryOp
|
|
54
|
-
? `// Entity ops return the
|
|
54
|
+
? `// Entity ops return the ENTITY and raises on error;
|
|
55
|
+
// call data() for the record.
|
|
55
56
|
val ${eVar} = client.${accessor}(null).${primaryOp}(${testArg}, null)
|
|
56
57
|
// ${eVar} holds the mock response record
|
|
57
58
|
println(${eVar})`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isPublished, repoInfo } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isPublished, repoInfo, packageVersion } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import { gradleGroup } from './utility_kotlin'
|
|
5
5
|
|
|
@@ -16,7 +16,7 @@ const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
|
|
|
16
16
|
|
|
17
17
|
\`\`\`kotlin
|
|
18
18
|
dependencies {
|
|
19
|
-
implementation("${group}:${artifactId}
|
|
19
|
+
implementation("${group}:${artifactId}:${packageVersion(model, target.name)}")
|
|
20
20
|
}
|
|
21
21
|
\`\`\`
|
|
22
22
|
|
|
@@ -93,7 +93,7 @@ ${opRows}
|
|
|
93
93
|
|
|
94
94
|
### Result shape
|
|
95
95
|
|
|
96
|
-
Entity operations return the
|
|
96
|
+
Entity operations return the ENTITY (call data() for the record) (a \`Map\` for single-entity
|
|
97
97
|
ops, an aggregate \`List\` for \`list\`) as \`Any?\` and raise on error. Wrap
|
|
98
98
|
calls in \`try\`/\`catch\` to handle failures.
|
|
99
99
|
|
|
@@ -123,7 +123,7 @@ catch (err: RuntimeException) {
|
|
|
123
123
|
Content(`### 3. Load ${neArticle} ${neName.toLowerCase()}
|
|
124
124
|
|
|
125
125
|
${neName} is nested under ${parentName}, so provide the \`${parentParam}\`.
|
|
126
|
-
\`load()\` returns the
|
|
126
|
+
\`load()\` returns the ENTITY — call data() for the record — and raises on error.
|
|
127
127
|
|
|
128
128
|
\`\`\`kotlin
|
|
129
129
|
try {
|
|
@@ -151,7 +151,7 @@ catch (err: RuntimeException) {
|
|
|
151
151
|
|
|
152
152
|
Content(`### 3. Load ${article} ${eName.toLowerCase()}
|
|
153
153
|
|
|
154
|
-
\`load()\` returns the
|
|
154
|
+
\`load()\` returns the ENTITY — call data() for the record — and raises on error.
|
|
155
155
|
|
|
156
156
|
\`\`\`kotlin
|
|
157
157
|
try {
|
|
@@ -191,7 +191,7 @@ catch (err: RuntimeException) {
|
|
|
191
191
|
\`\`\`kotlin
|
|
192
192
|
`)
|
|
193
193
|
if (opnames.includes('create')) {
|
|
194
|
-
Content(`// Create — returns the
|
|
194
|
+
Content(`// Create — returns the ENTITY (call data() for the record)
|
|
195
195
|
val created = client.${accessor}(null).create(mutableMapOf<String, Any?>(${examplePairs('create').join(', ')}), null)
|
|
196
196
|
|
|
197
197
|
`)
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
File,
|
|
12
12
|
cmp,
|
|
13
13
|
snakify,
|
|
14
|
-
isAuthActive,
|
|
14
|
+
isAuthActive, envName, envToken
|
|
15
15
|
} from '@voxgig/sdkgen'
|
|
16
16
|
|
|
17
17
|
|
|
@@ -67,7 +67,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
67
67
|
const entity: ModelEntity = props.entity
|
|
68
68
|
const kotlinpackage: string = props.kotlinpackage
|
|
69
69
|
|
|
70
|
-
const PROJECTNAME =
|
|
70
|
+
const PROJECTNAME = envName(model)
|
|
71
71
|
const SDK = model.const.Name + 'SDK'
|
|
72
72
|
|
|
73
73
|
const authActive = isAuthActive(model)
|
|
@@ -121,7 +121,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
121
121
|
? loadParams.map((p: any) => ` params["${p.name}"] = ${kotlinLiteral(p.example)}`).join('\n')
|
|
122
122
|
: ''
|
|
123
123
|
|
|
124
|
-
const entidEnvVar = `${PROJECTNAME}_TEST_${
|
|
124
|
+
const entidEnvVar = `${PROJECTNAME}_TEST_${envToken(entity.name)}_ENTID`
|
|
125
125
|
|
|
126
126
|
File({ name: entity.Name + 'DirectTest.' + target.ext }, () => {
|
|
127
127
|
|