@voxgig/sdkgen 1.3.14 → 1.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/action/action.js.map +1 -1
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/AgentGuide.js.map +1 -1
- package/dist/cmp/AgentGuideContent.js.map +1 -1
- package/dist/cmp/AgentGuideFeature.js.map +1 -1
- package/dist/cmp/AgentGuideTop.js.map +1 -1
- package/dist/cmp/Changelog.js.map +1 -1
- package/dist/cmp/Deploy.js.map +1 -1
- package/dist/cmp/Entity.js +5 -1
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js +2 -1
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureHook.js.map +1 -1
- package/dist/cmp/License.js.map +1 -1
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeEntity.js.map +1 -1
- package/dist/cmp/ReadmeErrors.js +1 -1
- package/dist/cmp/ReadmeErrors.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +2 -2
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeHowto.js.map +1 -1
- package/dist/cmp/ReadmeInstall.js.map +1 -1
- package/dist/cmp/ReadmeIntro.js.map +1 -1
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeQuick.js.map +1 -1
- package/dist/cmp/ReadmeRef.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +1 -1
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/Security.js.map +1 -1
- package/dist/cmp/Test.js.map +1 -1
- package/dist/helpers/buildIdNames.js.map +1 -1
- package/dist/helpers/canonType.d.ts +3 -2
- package/dist/helpers/canonType.js +112 -24
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.d.ts +1 -1
- package/dist/helpers/collectDeps.js +36 -13
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/naming.d.ts +7 -1
- package/dist/helpers/naming.js +90 -0
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/opExample.d.ts +1 -1
- package/dist/helpers/opExample.js +37 -20
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.d.ts +5 -1
- package/dist/helpers/opShape.js +174 -7
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -3
- package/dist/sdkgen.js +12 -2
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utility.js.map +1 -1
- package/package.json +20 -14
- package/project/.sdk/model/target/cpp.aontu +4 -4
- package/project/.sdk/model/target/go-cli.aontu +17 -17
- package/project/.sdk/model/target/go-mcp.aontu +11 -11
- package/project/.sdk/model/target/go.aontu +1 -1
- package/project/.sdk/model/target/haskell.aontu +6 -3
- package/project/.sdk/model/target/java.aontu +4 -4
- package/project/.sdk/model/target/kotlin.aontu +4 -4
- package/project/.sdk/model/target/lean.aontu +51 -0
- package/project/.sdk/model/target/scala.aontu +4 -4
- package/project/.sdk/model/target/zig.aontu +12 -2
- package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
- package/project/.sdk/src/cmp/c/EntityTypes_c.ts +167 -0
- package/project/.sdk/src/cmp/c/Entity_c.ts +3 -3
- package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
- package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
- package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +169 -0
- package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
- package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
- package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
- package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
- package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
- package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
- package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
- package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
- package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
- package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
- package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
- package/project/.sdk/src/cmp/c/TestDirect_c.ts +3 -3
- package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
- package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
- package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
- package/project/.sdk/src/cmp/clojure/Entity_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +65 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
- package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
- package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
- package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
- package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
- package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
- package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
- package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
- package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
- package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
- package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
- package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/MainEntity_cpp.ts +2 -2
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExamplesTest_cpp.ts +136 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
- package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
- package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
- package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
- package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
- package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
- package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
- package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
- package/project/.sdk/src/cmp/cpp/TestDirect_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +4 -0
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +195 -0
- package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/MainEntity_csharp.ts +2 -2
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +210 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
- package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
- package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
- package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
- package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
- package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
- package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
- package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -30
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +11 -3
- package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +2 -2
- package/project/.sdk/src/cmp/dart/Main_dart.ts +3 -3
- package/project/.sdk/src/cmp/dart/Package_dart.ts +1 -1
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
- package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
- package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
- package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +4 -4
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
- package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
- package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
- package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
- package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +164 -0
- package/project/.sdk/src/cmp/elixir/Entity_elixir.ts +1 -1
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
- package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +144 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
- package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
- package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
- package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
- package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
- package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
- package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
- package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
- package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
- package/project/.sdk/src/cmp/go/Config_go.ts +4 -1
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +121 -20
- package/project/.sdk/src/cmp/go/Entity_go.ts +3 -3
- package/project/.sdk/src/cmp/go/Main_go.ts +7 -6
- package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +3 -3
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +11 -4
- package/project/.sdk/src/cmp/go/utility_go.ts +28 -2
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +249 -44
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +200 -31
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +135 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
- package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
- package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
- package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
- package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
- package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
- package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
- package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
- package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
- package/project/.sdk/src/cmp/java/EntityTypes_java.ts +206 -0
- package/project/.sdk/src/cmp/java/Entity_java.ts +3 -3
- package/project/.sdk/src/cmp/java/MainEntity_java.ts +2 -2
- package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
- package/project/.sdk/src/cmp/java/Package_java.ts +1 -1
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +208 -0
- package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
- package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
- package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
- package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
- package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
- package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
- package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
- package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
- package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
- package/project/.sdk/src/cmp/java/TestDirect_java.ts +3 -3
- package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -9
- package/project/.sdk/src/cmp/js/Entity_js.ts +3 -3
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +6 -4
- package/project/.sdk/src/cmp/js/Main_js.ts +2 -2
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +10 -9
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
- package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
- package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +200 -0
- package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/MainEntity_kotlin.ts +2 -2
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
- package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +198 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
- package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/lean/Config_lean.ts +88 -0
- package/project/.sdk/src/cmp/lean/Entity_lean.ts +9 -0
- package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Main_lean.ts +120 -0
- package/project/.sdk/src/cmp/lean/Package_lean.ts +68 -0
- package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +29 -0
- package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +19 -0
- package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +38 -0
- package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +24 -0
- package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +22 -0
- package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +50 -0
- package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Test_lean.ts +207 -0
- package/project/.sdk/src/cmp/lean/utility_lean.ts +78 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -6
- package/project/.sdk/src/cmp/lua/Entity_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
- package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +8 -3
- package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +126 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
- package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
- package/project/.sdk/src/cmp/perl/Entity_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/MainEntity_perl.ts +2 -2
- package/project/.sdk/src/cmp/perl/Package_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
- package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
- package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
- package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
- package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
- package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
- package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
- package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
- package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -7
- package/project/.sdk/src/cmp/php/Entity_php.ts +3 -3
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +2 -2
- package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +3 -3
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +8 -3
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -8
- package/project/.sdk/src/cmp/py/Entity_py.ts +4 -12
- package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Main_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Package_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +3 -3
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +8 -3
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +32 -8
- package/project/.sdk/src/cmp/rb/Entity_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/Package_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +8 -3
- package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +6 -2
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +151 -0
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +4 -4
- package/project/.sdk/src/cmp/rust/MainEntity_rust.ts +2 -2
- package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
- package/project/.sdk/src/cmp/rust/Package_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +144 -0
- package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
- package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
- package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
- package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
- package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
- package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
- package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
- package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
- package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
- package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +201 -0
- package/project/.sdk/src/cmp/scala/Entity_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/MainEntity_scala.ts +2 -2
- package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
- package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
- package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +182 -0
- package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
- package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
- package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
- package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
- package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
- package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
- package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
- package/project/.sdk/src/cmp/scala/TestDirect_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
- package/project/.sdk/src/cmp/scala/Test_scala.ts +9 -1
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +151 -0
- package/project/.sdk/src/cmp/swift/Entity_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/MainEntity_swift.ts +2 -2
- package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +187 -0
- package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
- package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
- package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
- package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
- package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
- package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
- package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
- package/project/.sdk/src/cmp/swift/TestDirect_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -6
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +3 -3
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +6 -4
- package/project/.sdk/src/cmp/ts/Main_ts.ts +2 -2
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +17 -15
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
- package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +4 -4
- package/project/.sdk/src/cmp/zig/MainEntity_zig.ts +2 -2
- package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
- package/project/.sdk/src/cmp/zig/Package_zig.ts +61 -0
- package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
- package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
- package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
- package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
- package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
- package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
- package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
- package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
- package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
- package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
- package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
- package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
- package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +8 -16
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +10 -28
- package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
- package/project/.sdk/tm/dart/test/primary_test.dart +7 -0
- package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
- package/project/.sdk/tm/go/feature/test_feature.go +33 -1
- package/project/.sdk/tm/go/test/primary_utility_test.go +41 -42
- package/project/.sdk/tm/go/test/runner_test.go +30 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
- package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +7 -24
- package/project/.sdk/tm/js/Makefile +1 -1
- package/project/.sdk/tm/js/jsconfig.json +12 -0
- package/project/.sdk/tm/js/src/feature/test/TestFeature.js +18 -1
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +8 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +7 -20
- package/project/.sdk/tm/lean/LICENSE +21 -0
- package/project/.sdk/tm/lean/VERSION +1 -0
- package/project/.sdk/tm/lean/src/SdkFeature.lean +171 -0
- package/project/.sdk/tm/lean/src/SdkFeatures.lean +602 -0
- package/project/.sdk/tm/lean/src/SdkJson.lean +134 -0
- package/project/.sdk/tm/lean/src/SdkRuntime.lean +356 -0
- package/project/.sdk/tm/lean/src/SdkUtility.lean +617 -0
- package/project/.sdk/tm/lean/src/VoxgigStruct.lean +2880 -0
- package/project/.sdk/tm/lean/src/Vregex.lean +412 -0
- package/project/.sdk/tm/lean/src/feature/README.md +5 -0
- package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +697 -0
- package/project/.sdk/tm/lean/test/TFeature.lean +268 -0
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +349 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +10 -8
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/perl/t/primary_utility.t +8 -17
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +9 -7
- package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
- package/project/.sdk/tm/py/feature/test_feature.py +28 -1
- package/project/.sdk/tm/py/test/test_primary_utility.py +13 -18
- package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/rb/feature/test_feature.rb +24 -1
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +7 -8
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +37 -1
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +12 -26
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +7 -8
- package/project/.sdk/tm/ts/Makefile +1 -1
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +18 -1
- package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +65 -21
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
- package/src/cmp/Entity.ts +5 -1
- package/src/cmp/Feature.ts +2 -1
- package/src/cmp/ReadmeErrors.ts +2 -2
- package/src/cmp/ReadmeExplanation.ts +3 -3
- package/src/cmp/ReadmeTop.ts +2 -2
- package/src/helpers/canonType.ts +121 -25
- package/src/helpers/collectDeps.ts +39 -12
- package/src/helpers/naming.ts +106 -0
- package/src/helpers/opExample.ts +43 -20
- package/src/helpers/opShape.ts +197 -11
- package/src/sdkgen.ts +13 -3
- package/src/tsconfig.json +2 -0
- package/project/.sdk/tm/zig/build.zig.zon +0 -11
package/src/helpers/naming.ts
CHANGED
|
@@ -69,6 +69,63 @@ const RESERVED: Record<string, Set<string>> = {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
// Ruby CORE CONSTANTS — a different hazard from the keyword sets above.
|
|
73
|
+
//
|
|
74
|
+
// The keyword sets guard local-variable BINDINGS. This set guards generated
|
|
75
|
+
// top-level CONSTANTS. Ruby constants share one namespace with the core
|
|
76
|
+
// classes, and reassigning one is not an error — it silently replaces it:
|
|
77
|
+
//
|
|
78
|
+
// File = Struct.new(:name) # ::File is now a Struct
|
|
79
|
+
// File.join('a', 'b') # NoMethodError — every later caller breaks
|
|
80
|
+
//
|
|
81
|
+
// The typed model emits `<Name> = Struct.new(...)` per entity, so an API with
|
|
82
|
+
// a `/files` collection (entity `File`) used to clobber Ruby's File class and
|
|
83
|
+
// take the whole SDK down with it — the generated test runner calls
|
|
84
|
+
// `File.join` to locate `.env.local`, so `rb` failed at require time.
|
|
85
|
+
//
|
|
86
|
+
// Only names Ruby itself defines at top level are listed: reassigning any of
|
|
87
|
+
// them breaks working code somewhere. Names that merely LOOK builtin but are
|
|
88
|
+
// not core constants (e.g. `Response`, `Record`) are safe and stay untouched,
|
|
89
|
+
// which keeps the rename off every SDK that does not actually collide.
|
|
90
|
+
const RB_CORE_CONSTANTS = new Set<string>([
|
|
91
|
+
// classes an entity name plausibly lands on
|
|
92
|
+
'Array', 'Binding', 'Class', 'Comparable', 'Complex', 'Data', 'Dir',
|
|
93
|
+
'Encoding', 'Enumerator', 'Exception', 'Fiber', 'File', 'Float', 'Hash',
|
|
94
|
+
'IO', 'Integer', 'Method', 'Module', 'Mutex', 'Numeric', 'Object', 'Proc',
|
|
95
|
+
'Queue', 'Random', 'Range', 'Rational', 'Regexp', 'Set', 'Signal', 'String',
|
|
96
|
+
'Struct', 'Symbol', 'Thread', 'Time', 'UnboundMethod',
|
|
97
|
+
// modules / singletons
|
|
98
|
+
'Enumerable', 'GC', 'Kernel', 'Marshal', 'Math', 'ObjectSpace', 'Process',
|
|
99
|
+
'Warning',
|
|
100
|
+
// the rest of the exception hierarchy an API might name an entity after
|
|
101
|
+
'ArgumentError', 'IndexError', 'IOError', 'KeyError', 'NameError',
|
|
102
|
+
'NotImplementedError', 'RangeError', 'RuntimeError', 'StandardError',
|
|
103
|
+
'StopIteration', 'SystemExit', 'TypeError', 'ZeroDivisionError',
|
|
104
|
+
// literal singletons
|
|
105
|
+
'FalseClass', 'NilClass', 'TrueClass',
|
|
106
|
+
])
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
// Is `Name` a constant Ruby already defines at top level?
|
|
110
|
+
function isRbCoreConstant(Name: string): boolean {
|
|
111
|
+
return RB_CORE_CONSTANTS.has(Name)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
// A top-level-safe Ruby constant name for a generated type: the name
|
|
116
|
+
// unchanged, unless Ruby core already owns it, in which case `Type` is
|
|
117
|
+
// appended (`File` -> `FileType`). Applied ONLY to the bare entity data type
|
|
118
|
+
// — the per-op type names always carry a suffix (`FileCreateData`,
|
|
119
|
+
// `FileLoadMatch`), which no core constant matches.
|
|
120
|
+
//
|
|
121
|
+
// The entity ACCESSOR keeps its original name (`client.File(...)`): methods
|
|
122
|
+
// and constants live in separate namespaces in Ruby, so the accessor never
|
|
123
|
+
// collided and the public surface is unchanged.
|
|
124
|
+
function rbSafeTypeName(Name: string): string {
|
|
125
|
+
return isRbCoreConstant(Name) ? Name + 'Type' : Name
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
72
129
|
// Is `name` a reserved word (an illegal identifier) in the target language?
|
|
73
130
|
function isReservedName(name: string, lang: string): boolean {
|
|
74
131
|
const set = RESERVED[lang]
|
|
@@ -83,7 +140,56 @@ function safeVarName(name: string, lang: string): string {
|
|
|
83
140
|
}
|
|
84
141
|
|
|
85
142
|
|
|
143
|
+
// A variable name for a doc EXAMPLE entity. Doc examples bind the SDK instance
|
|
144
|
+
// to `client` (e.g. `const client = ...SDK.test()`), so an entity whose
|
|
145
|
+
// lowercased name is also `client` — an API with a `Client` entity — would
|
|
146
|
+
// shadow it: `const client = client.Client()...` is self-referential (TS2448/
|
|
147
|
+
// TS7022) and breaks the readme_examples type-check. Append `_` to keep the
|
|
148
|
+
// example variable distinct from the SDK instance. Also applies the normal
|
|
149
|
+
// language-reserved-word guard.
|
|
150
|
+
function exampleVarName(name: string, lang: string): string {
|
|
151
|
+
const v = safeVarName(name, lang)
|
|
152
|
+
return 'client' === v ? v + '_' : v
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
// A valid ECMAScript identifier — the only shape `obj.name` can express.
|
|
157
|
+
const JS_IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
// A safe JS/TS property-access expression for a SPEC-DERIVED key: dot
|
|
161
|
+
// notation when the key is a valid identifier, bracket notation otherwise.
|
|
162
|
+
// OpenAPI path/query parameter names are not constrained to identifiers —
|
|
163
|
+
// e.g. Evervault's `/payments/3ds-sessions/{3ds_session_id}` yields
|
|
164
|
+
// `3ds_session_id`, and `params.3ds_session_id` is a syntax error (TS1434).
|
|
165
|
+
// The other language targets already quote these keys (`params["..."]`);
|
|
166
|
+
// this keeps ts/js in parity.
|
|
167
|
+
function jsProp(obj: string, name: string): string {
|
|
168
|
+
return JS_IDENT.test(name) ? `${obj}.${name}` : `${obj}[${JSON.stringify(name)}]`
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
// A safe JS/TS OBJECT-LITERAL key for a spec-derived field name: bare when
|
|
173
|
+
// the name is a valid identifier, single-quoted otherwise. `{ 3ds_session_id:
|
|
174
|
+
// 1 }` is a syntax error (TS1351) — doc examples must quote such keys.
|
|
175
|
+
function jsKey(name: string): string {
|
|
176
|
+
return JS_IDENT.test(name) ? name : `'${name}'`
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
// As `jsProp`, but optional-chained: `obj?.name` / `obj?.["3ds_session_id"]`.
|
|
181
|
+
function jsOptProp(obj: string, name: string): string {
|
|
182
|
+
return JS_IDENT.test(name) ? `${obj}?.${name}` : `${obj}?.[${JSON.stringify(name)}]`
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
86
186
|
export {
|
|
87
187
|
isReservedName,
|
|
88
188
|
safeVarName,
|
|
189
|
+
exampleVarName,
|
|
190
|
+
isRbCoreConstant,
|
|
191
|
+
rbSafeTypeName,
|
|
192
|
+
jsProp,
|
|
193
|
+
jsOptProp,
|
|
194
|
+
jsKey,
|
|
89
195
|
}
|
package/src/helpers/opExample.ts
CHANGED
|
@@ -52,15 +52,48 @@ function idLiteral(ent: any, op: string, idF: string | null): string {
|
|
|
52
52
|
|
|
53
53
|
// Render a match object `{ idF: idLit }` (or empty when the entity has no id
|
|
54
54
|
// key) in the target language's object syntax.
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
// Spec-derived field names are NOT constrained to be identifiers — e.g.
|
|
56
|
+
// Evervault's `/payments/3ds-sessions/{3ds_session_id}` yields the match key
|
|
57
|
+
// `3ds_session_id`. py/php/rb/go quote every literal key already, but ts/js
|
|
58
|
+
// (`{ key: v }`) and lua (`{ key = v }`) write them bare, and a leading digit
|
|
59
|
+
// or a `-` makes that a syntax error (TS1351 / Lua "'}' expected"). Quote
|
|
60
|
+
// exactly those, leaving ordinary keys in the idiomatic bare form.
|
|
61
|
+
const JS_IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/
|
|
62
|
+
const LUA_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/
|
|
63
|
+
|
|
64
|
+
// A `key<sep>value` literal pair in the target language's object syntax.
|
|
65
|
+
function litPair(lang: ExampleLang, name: string, value: string): string {
|
|
57
66
|
switch (lang) {
|
|
58
|
-
case 'py': return `
|
|
59
|
-
case 'php': return `
|
|
60
|
-
case 'rb': return `
|
|
61
|
-
case '
|
|
62
|
-
case '
|
|
63
|
-
|
|
67
|
+
case 'py': return `"${name}": ${value}`
|
|
68
|
+
case 'php': return `"${name}" => ${value}`
|
|
69
|
+
case 'rb': return `"${name}" => ${value}`
|
|
70
|
+
case 'go': return `"${name}": ${value}`
|
|
71
|
+
case 'lua': return LUA_IDENT.test(name) ?
|
|
72
|
+
`${name} = ${value}` : `["${name}"] = ${value}`
|
|
73
|
+
default: return JS_IDENT.test(name) ?
|
|
74
|
+
`${name}: ${value}` : `'${name}': ${value}`
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
// The match argument for a load/remove — ALL required match params, not just
|
|
80
|
+
// the primary id. A composite-match entity (e.g. Umbrella's FlatPermission,
|
|
81
|
+
// `/public/database/{id}/permission/{msisdn}`) has two required path params
|
|
82
|
+
// (database_id + id); emitting only `{ id }` fails the typed <Name>LoadMatch.
|
|
83
|
+
// The idF field takes the specific id literal; other required fields take a
|
|
84
|
+
// type-correct example value (mirrors dataArg).
|
|
85
|
+
function matchArg(
|
|
86
|
+
lang: ExampleLang, ent: any, op: string, idF: string | null, idLit: string
|
|
87
|
+
): string {
|
|
88
|
+
const items = opRequestShape(ent, op).items.filter((it: any) => !it.optional)
|
|
89
|
+
if (0 === items.length) return 'go' === lang ? 'nil' : ''
|
|
90
|
+
const pairs = items.map((it: any) =>
|
|
91
|
+
litPair(lang, it.name, it.name === idF ? idLit : litFor(lang, it.type)))
|
|
92
|
+
switch (lang) {
|
|
93
|
+
case 'py': return `{${pairs.join(', ')}}`
|
|
94
|
+
case 'php': return `[${pairs.join(', ')}]`
|
|
95
|
+
case 'go': return `map[string]any{${pairs.join(', ')}}`
|
|
96
|
+
default: return `{ ${pairs.join(', ')} }`
|
|
64
97
|
}
|
|
65
98
|
}
|
|
66
99
|
|
|
@@ -75,17 +108,7 @@ function dataArg(lang: ExampleLang, ent: any, op: string, idF: string | null): s
|
|
|
75
108
|
// ALL required fields must appear (a typed CreateData rejects a partial); cap
|
|
76
109
|
// only the optional fallback used when the op declares no required field.
|
|
77
110
|
const chosen = required.length ? required : items.slice(0, 3)
|
|
78
|
-
const pairs = chosen.map((it: any) =>
|
|
79
|
-
const v = litFor(lang, it.type)
|
|
80
|
-
switch (lang) {
|
|
81
|
-
case 'py': return `"${it.name}": ${v}`
|
|
82
|
-
case 'php': return `"${it.name}" => ${v}`
|
|
83
|
-
case 'rb': return `"${it.name}" => ${v}`
|
|
84
|
-
case 'lua': return `${it.name} = ${v}`
|
|
85
|
-
case 'go': return `"${it.name}": ${v}`
|
|
86
|
-
default: return `${it.name}: ${v}`
|
|
87
|
-
}
|
|
88
|
-
})
|
|
111
|
+
const pairs = chosen.map((it: any) => litPair(lang, it.name, litFor(lang, it.type)))
|
|
89
112
|
switch (lang) {
|
|
90
113
|
case 'php': return `[${pairs.join(', ')}]`
|
|
91
114
|
case 'lua': return `{ ${pairs.join(', ')} }`
|
|
@@ -139,7 +162,7 @@ function primaryOpCall(
|
|
|
139
162
|
if (isList) {
|
|
140
163
|
arg = 'go' === lang ? 'nil' : ''
|
|
141
164
|
} else if (isMatch) {
|
|
142
|
-
arg = matchArg(lang, idF, idLit)
|
|
165
|
+
arg = matchArg(lang, ent, op, idF, idLit)
|
|
143
166
|
} else if (isData) {
|
|
144
167
|
arg = dataArg(lang, ent, op, idF)
|
|
145
168
|
} else {
|
package/src/helpers/opShape.ts
CHANGED
|
@@ -26,7 +26,60 @@
|
|
|
26
26
|
// flag) and render them in the target language's struct/interface/TypedDict
|
|
27
27
|
// syntax; the policy itself is language-neutral and tested in isolation.
|
|
28
28
|
|
|
29
|
-
import { each } from 'jostraca'
|
|
29
|
+
import { each, names } from 'jostraca'
|
|
30
|
+
import { KIT, getModelPath } from '@voxgig/apidef'
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// THE entity collection for a model — resolved once, with a stable identity.
|
|
34
|
+
//
|
|
35
|
+
// Two problems this solves, both caused by every component calling
|
|
36
|
+
// `getModelPath(model, 'main.<KIT>.entity')` for itself:
|
|
37
|
+
//
|
|
38
|
+
// * CORRECTNESS. getModelPath drops `active: false` entries by default, but
|
|
39
|
+
// the consumer scaffold (create-sdkgen Root.ts) generates entity code for
|
|
40
|
+
// EVERY entity and every EntityTypes_<lang> emits data types with
|
|
41
|
+
// `only_active: false`. Class-name assignment done against the filtered
|
|
42
|
+
// view cannot see the inactive entities whose data types it must avoid.
|
|
43
|
+
// This resolver always returns the unfiltered collection.
|
|
44
|
+
//
|
|
45
|
+
// * PERFORMANCE. getModelPath REBUILDS the container object on every call
|
|
46
|
+
// when filtering, so the WeakMap memos below never hit across callers —
|
|
47
|
+
// the O(n·ops) class-name assignment re-ran per entity per target. At 500
|
|
48
|
+
// entities x 22 targets that was ~15s of pure recomputation; caching the
|
|
49
|
+
// resolved collection on the model makes it ~3ms.
|
|
50
|
+
const _entityCollCache = new WeakMap<object, any>()
|
|
51
|
+
|
|
52
|
+
function entityCollection(model: any): any {
|
|
53
|
+
if (null == model || 'object' !== typeof model) {
|
|
54
|
+
return {}
|
|
55
|
+
}
|
|
56
|
+
const cached = _entityCollCache.get(model)
|
|
57
|
+
if (null != cached) {
|
|
58
|
+
return cached
|
|
59
|
+
}
|
|
60
|
+
const coll = getModelPath(model, `main.${KIT}.entity`,
|
|
61
|
+
{ only_active: false, required: false }) || {}
|
|
62
|
+
deriveEntityNames(coll)
|
|
63
|
+
_entityCollCache.set(model, coll)
|
|
64
|
+
return coll
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
// Derive the PascalCase `Name` on every entity in a collection.
|
|
69
|
+
//
|
|
70
|
+
// `Name` is injected LAZILY by jostraca's names(), historically by whichever
|
|
71
|
+
// component happened to run first (create-sdkgen Root.ts, or an EntityTypes
|
|
72
|
+
// emitter). Anything reading `e.Name` before that ran saw `undefined` — and
|
|
73
|
+
// because the helpers below MEMOISE, one early read poisoned the result for
|
|
74
|
+
// the whole run (`undefinedEntity` class names; a permanently empty collision
|
|
75
|
+
// list). The helpers therefore derive `Name` themselves, up front, so they
|
|
76
|
+
// never depend on component ordering. Idempotent: names() is only called for
|
|
77
|
+
// an entity that lacks `Name`.
|
|
78
|
+
function deriveEntityNames(entityColl: any): any[] {
|
|
79
|
+
const ents = each(entityColl).filter((e: any) => e && null != e.name)
|
|
80
|
+
ents.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
81
|
+
return ents
|
|
82
|
+
}
|
|
30
83
|
|
|
31
84
|
|
|
32
85
|
// The five ops, and whether their request payload is a `Match` (query/id) or
|
|
@@ -156,8 +209,21 @@ function opRequestShape(ent: any, opname: string):
|
|
|
156
209
|
return { items: [], fromParams: false }
|
|
157
210
|
}
|
|
158
211
|
|
|
212
|
+
// Ops that carry a BODY are the exception to "op-declared params win":
|
|
213
|
+
// their request payload is BOTH. `PUT /v1/todo/item/{id}` declares the path
|
|
214
|
+
// param `id`, which the SDK resolves out of reqdata (see the param
|
|
215
|
+
// utility's reqmatch -> match -> reqdata search), while the fields the
|
|
216
|
+
// caller wants to change come from the entity. Params alone produced
|
|
217
|
+
// `<Name>UpdateData = { id }` — no way to send anything to update.
|
|
218
|
+
//
|
|
219
|
+
// The param stays in the payload because the path needs it; keeping it out
|
|
220
|
+
// of the request BODY is the model's job, via the op's `transform.req`
|
|
221
|
+
// (@voxgig/apidef restricts the body to a closed request schema's declared
|
|
222
|
+
// properties).
|
|
223
|
+
const isbodyop = 'create' === opname || 'update' === opname || 'patch' === opname
|
|
224
|
+
|
|
159
225
|
const params = opParams(op)
|
|
160
|
-
if (0 < params.length) {
|
|
226
|
+
if (0 < params.length && !isbodyop) {
|
|
161
227
|
const items = params.map((p: any) => ({
|
|
162
228
|
name: p.name,
|
|
163
229
|
type: p.type,
|
|
@@ -166,15 +232,25 @@ function opRequestShape(ent: any, opname: string):
|
|
|
166
232
|
return { items, fromParams: true }
|
|
167
233
|
}
|
|
168
234
|
|
|
235
|
+
const paramItems = isbodyop ? params.map((p: any) => ({
|
|
236
|
+
name: p.name,
|
|
237
|
+
type: p.type,
|
|
238
|
+
optional: false === p.reqd,
|
|
239
|
+
})) : []
|
|
240
|
+
const paramNames = new Set(paramItems.map((p: any) => p.name))
|
|
241
|
+
|
|
169
242
|
const fields = (ent.fields ? each(ent.fields) : [])
|
|
170
243
|
.filter((f: any) => f.active !== false)
|
|
171
244
|
.filter((f: any) => fieldInOp(f, opname))
|
|
172
245
|
|
|
173
|
-
const items =
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
246
|
+
const items = paramItems.concat(
|
|
247
|
+
fields
|
|
248
|
+
.filter((f: any) => !paramNames.has(f.name))
|
|
249
|
+
.map((f: any) => ({
|
|
250
|
+
name: f.name,
|
|
251
|
+
type: f.type,
|
|
252
|
+
optional: fieldOptional(f, opname),
|
|
253
|
+
})))
|
|
178
254
|
|
|
179
255
|
return { items, fromParams: false }
|
|
180
256
|
}
|
|
@@ -250,6 +326,16 @@ function entityPrimaryOp(ent: any): string | null {
|
|
|
250
326
|
// … The DATA type keeps its canonical `<Name>` — only the suffixed class
|
|
251
327
|
// yields. Deterministic (sorted-key iteration) and stable across runs.
|
|
252
328
|
//
|
|
329
|
+
// Covers EVERY entity, active or not: the consumer scaffold (create-sdkgen
|
|
330
|
+
// Root.ts) iterates the RAW entity collection, and every EntityTypes_<lang>
|
|
331
|
+
// emits with `only_active: false`, so an inactive entity still contributes a
|
|
332
|
+
// generated data type AND still needs a class name. Filtering to actives here
|
|
333
|
+
// left inactive entities on the un-deduped `<Name>Entity` fallback and left
|
|
334
|
+
// their data types out of `taken` — so an ACTIVE entity's class could collide
|
|
335
|
+
// with an INACTIVE entity's emitted data type (e.g. active `project` ->
|
|
336
|
+
// class `ProjectEntity` vs inactive `project-entity` -> type `ProjectEntity`,
|
|
337
|
+
// a redeclaration in Go).
|
|
338
|
+
//
|
|
253
339
|
// Memoised per entity-collection object so the O(n) assignment runs once.
|
|
254
340
|
const _classNameCache = new WeakMap<object, Record<string, string>>()
|
|
255
341
|
|
|
@@ -259,7 +345,7 @@ function entityClassNames(entityColl: any): Record<string, string> {
|
|
|
259
345
|
return cached
|
|
260
346
|
}
|
|
261
347
|
|
|
262
|
-
const ents =
|
|
348
|
+
const ents = deriveEntityNames(entityColl)
|
|
263
349
|
|
|
264
350
|
// 1. Every top-level DATA-type name the target emits.
|
|
265
351
|
const taken: Record<string, boolean> = {}
|
|
@@ -305,6 +391,63 @@ function entityClassName(ent: any, entityColl: any): string {
|
|
|
305
391
|
}
|
|
306
392
|
|
|
307
393
|
|
|
394
|
+
// Cross-entity TYPE-name collision detection. entityClassNames keeps CLASS
|
|
395
|
+
// names collision-free, but the DATA/op type names are the raw `<Name>` /
|
|
396
|
+
// opTypeName(...) — two entities whose PascalCase Name coincides (e.g.
|
|
397
|
+
// `foo-bar` vs `foo_bar`), or a data-type name equal to another entity's
|
|
398
|
+
// op-type name, emit DUPLICATE top-level type declarations: a redeclaration
|
|
399
|
+
// compile error in go/rust/c/cpp/csharp and the JVM containers, silent
|
|
400
|
+
// merging in ts. The names cannot be auto-renamed here — the generated
|
|
401
|
+
// entity classes and op fragments reference them by token — so the guard
|
|
402
|
+
// surfaces the collision loudly instead. Returns the sorted duplicate names
|
|
403
|
+
// (empty when clean). `Name` is derived here (deriveEntityNames), so the
|
|
404
|
+
// guard cannot be silently disabled by running before an emitter.
|
|
405
|
+
//
|
|
406
|
+
// Memoised per entity-collection object, like entityClassNames.
|
|
407
|
+
const _typeCollisionCache = new WeakMap<object, string[]>()
|
|
408
|
+
|
|
409
|
+
function entityTypeCollisions(entityColl: any): string[] {
|
|
410
|
+
const cached = _typeCollisionCache.get(entityColl)
|
|
411
|
+
if (null != cached) {
|
|
412
|
+
return cached
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
const counts: Record<string, number> = {}
|
|
416
|
+
const bump = (n: string) => { counts[n] = (counts[n] || 0) + 1 }
|
|
417
|
+
|
|
418
|
+
deriveEntityNames(entityColl)
|
|
419
|
+
.forEach((e: any) => {
|
|
420
|
+
bump(e.Name)
|
|
421
|
+
for (const op of ['load', 'list', 'create', 'update', 'remove']) {
|
|
422
|
+
if (e.op && e.op[op]) {
|
|
423
|
+
bump(opTypeName(e.Name, op))
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
})
|
|
427
|
+
|
|
428
|
+
const out = Object.keys(counts).filter((n) => 1 < counts[n]).sort()
|
|
429
|
+
_typeCollisionCache.set(entityColl, out)
|
|
430
|
+
return out
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
// Emitter convenience: warn (once per collection per target run) when the
|
|
435
|
+
// generated typed model would contain duplicate top-level type names.
|
|
436
|
+
function warnEntityTypeCollisions(entityColl: any, log: any, lang: string): string[] {
|
|
437
|
+
const dups = entityTypeCollisions(entityColl)
|
|
438
|
+
if (0 < dups.length && log && log.warn) {
|
|
439
|
+
log.warn({
|
|
440
|
+
point: 'entity-types-name-collision', lang, names: dups,
|
|
441
|
+
note: `${lang}: duplicate generated type name(s) ${dups.join(', ')} — ` +
|
|
442
|
+
`two entities produce the same PascalCase type name; rename one ` +
|
|
443
|
+
`entity (or alias it) in the model or the generated typed model ` +
|
|
444
|
+
`will not compile in statically-typed targets`,
|
|
445
|
+
})
|
|
446
|
+
}
|
|
447
|
+
return dups
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
|
|
308
451
|
// Pick a representative entity for a single illustrative snippet (e.g. the
|
|
309
452
|
// README's test-mode example): the first ACTIVE entity that exposes a read
|
|
310
453
|
// op (list/load) so the snippet is meaningful, else the first with ANY
|
|
@@ -315,16 +458,55 @@ function entityClassName(ent: any, entityColl: any): string {
|
|
|
315
458
|
// for deterministic output.
|
|
316
459
|
function pickExampleEntity(entity: any): { entity: any, primaryOp: string | null } {
|
|
317
460
|
const actives = each(entity).filter((e: any) => e && e.active !== false)
|
|
318
|
-
const readable = actives.
|
|
461
|
+
const readable = actives.filter((e: any) => {
|
|
319
462
|
const op = entityPrimaryOp(e)
|
|
320
463
|
return 'list' === op || 'load' === op
|
|
321
464
|
})
|
|
322
|
-
const withOp = actives.
|
|
323
|
-
|
|
465
|
+
const withOp = actives.filter((e: any) => null != entityPrimaryOp(e))
|
|
466
|
+
// Prefer a readable entity, then any entity with an op, then anything at all.
|
|
467
|
+
// WITHIN the chosen tier pick an entity of MEDIAN "size" — median name length
|
|
468
|
+
// and median field count — so the generated README/examples showcase a
|
|
469
|
+
// representative entity, not the alphabetically-first one (often a degenerate
|
|
470
|
+
// stub with a terse name and no fields) nor an atypically sprawling one.
|
|
471
|
+
const pool = readable.length ? readable : (withOp.length ? withOp : actives)
|
|
472
|
+
const chosen = pickMedianEntity(pool)
|
|
324
473
|
return { entity: chosen, primaryOp: null == chosen ? null : entityPrimaryOp(chosen) }
|
|
325
474
|
}
|
|
326
475
|
|
|
327
476
|
|
|
477
|
+
// The pool entity closest to the median on both axes (name length, field
|
|
478
|
+
// count). Distance on each axis is normalised by that axis's own median so the
|
|
479
|
+
// two are comparable, then summed. Ties keep the pool's existing key-sorted
|
|
480
|
+
// order (each() is byte-stable), so the pick is deterministic.
|
|
481
|
+
function pickMedianEntity(pool: any[]): any {
|
|
482
|
+
if (0 === pool.length) return null
|
|
483
|
+
if (1 === pool.length) return pool[0]
|
|
484
|
+
const fieldCount = (e: any): number => (e && e.fields ? each(e.fields).length : 0)
|
|
485
|
+
const nameLen = (e: any): number => (e && e.name ? String(e.name).length : 0)
|
|
486
|
+
const medName = medianOf(pool.map(nameLen))
|
|
487
|
+
const medField = medianOf(pool.map(fieldCount))
|
|
488
|
+
let best = pool[0]
|
|
489
|
+
let bestScore = Infinity
|
|
490
|
+
for (const e of pool) {
|
|
491
|
+
const score =
|
|
492
|
+
Math.abs(nameLen(e) - medName) / (medName || 1) +
|
|
493
|
+
Math.abs(fieldCount(e) - medField) / (medField || 1)
|
|
494
|
+
if (score < bestScore) {
|
|
495
|
+
bestScore = score
|
|
496
|
+
best = e
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
return best
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
function medianOf(xs: number[]): number {
|
|
504
|
+
const s = xs.slice().sort((a, b) => a - b)
|
|
505
|
+
const m = Math.floor(s.length / 2)
|
|
506
|
+
return 0 === s.length ? 0 : (s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2)
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
|
|
328
510
|
// The id field on the entity's DATA type (its fields[]), or null. DISTINCT from
|
|
329
511
|
// entityIdField (the load-MATCH key): an API can model a load match that carries
|
|
330
512
|
// an `id` param while the response entity itself has no `id` field, so `.id`
|
|
@@ -347,6 +529,8 @@ function entityDataIdField(ent: any): string | null {
|
|
|
347
529
|
|
|
348
530
|
export {
|
|
349
531
|
OP_SUFFIX,
|
|
532
|
+
deriveEntityNames,
|
|
533
|
+
entityCollection,
|
|
350
534
|
opTypeName,
|
|
351
535
|
opParams,
|
|
352
536
|
opRequestShape,
|
|
@@ -356,6 +540,8 @@ export {
|
|
|
356
540
|
entityPrimaryOp,
|
|
357
541
|
pickExampleEntity,
|
|
358
542
|
entityClassName,
|
|
543
|
+
entityTypeCollisions,
|
|
544
|
+
warnEntityTypeCollisions,
|
|
359
545
|
}
|
|
360
546
|
|
|
361
547
|
export type {
|
package/src/sdkgen.ts
CHANGED
|
@@ -5,7 +5,7 @@ import Path from 'node:path'
|
|
|
5
5
|
|
|
6
6
|
import { prettyPino, Pino } from '@voxgig/util'
|
|
7
7
|
|
|
8
|
-
import { Jsonic } from 'jsonic'
|
|
8
|
+
import { Jsonic } from '@tabnas/jsonic'
|
|
9
9
|
import * as JostracaModule from 'jostraca'
|
|
10
10
|
import { Aontu } from 'aontu'
|
|
11
11
|
|
|
@@ -51,8 +51,8 @@ import { getMatchEntries } from './helpers/getMatchEntries'
|
|
|
51
51
|
import { collectDeps } from './helpers/collectDeps'
|
|
52
52
|
import type { DepEntry } from './helpers/collectDeps'
|
|
53
53
|
import { canonToType, canonKey } from './helpers/canonType'
|
|
54
|
-
import { OP_SUFFIX, opTypeName, opParams, opRequestShape, entityIdField, entityDataIdField, entityOps, entityPrimaryOp, pickExampleEntity, entityClassName } from './helpers/opShape'
|
|
55
|
-
import { isReservedName, safeVarName } from './helpers/naming'
|
|
54
|
+
import { OP_SUFFIX, opTypeName, opParams, opRequestShape, entityIdField, entityDataIdField, entityOps, entityPrimaryOp, pickExampleEntity, entityClassName, entityTypeCollisions, warnEntityTypeCollisions, deriveEntityNames, entityCollection } from './helpers/opShape'
|
|
55
|
+
import { isReservedName, safeVarName, exampleVarName, isRbCoreConstant, rbSafeTypeName, jsProp, jsOptProp, jsKey } from './helpers/naming'
|
|
56
56
|
import {
|
|
57
57
|
packageName,
|
|
58
58
|
installCommand,
|
|
@@ -471,8 +471,18 @@ export {
|
|
|
471
471
|
entityPrimaryOp,
|
|
472
472
|
pickExampleEntity,
|
|
473
473
|
entityClassName,
|
|
474
|
+
entityTypeCollisions,
|
|
475
|
+
warnEntityTypeCollisions,
|
|
476
|
+
deriveEntityNames,
|
|
477
|
+
entityCollection,
|
|
474
478
|
isReservedName,
|
|
475
479
|
safeVarName,
|
|
480
|
+
exampleVarName,
|
|
481
|
+
isRbCoreConstant,
|
|
482
|
+
rbSafeTypeName,
|
|
483
|
+
jsProp,
|
|
484
|
+
jsOptProp,
|
|
485
|
+
jsKey,
|
|
476
486
|
|
|
477
487
|
packageName,
|
|
478
488
|
installCommand,
|
package/src/tsconfig.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"esModuleInterop": true,
|
|
4
|
+
"composite": true,
|
|
4
5
|
"module": "nodenext",
|
|
5
6
|
"noEmitOnError": true,
|
|
6
7
|
"skipLibCheck": true,
|
|
@@ -10,6 +11,7 @@
|
|
|
10
11
|
"sourceMap": true,
|
|
11
12
|
"strict": true,
|
|
12
13
|
"target": "es2021",
|
|
14
|
+
"types": ["node"],
|
|
13
15
|
"declaration": true,
|
|
14
16
|
"declarationDir": "../dist"
|
|
15
17
|
}
|