@voxgig/sdkgen 4.22.0 → 4.24.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.
Files changed (315) hide show
  1. package/bin/voxgig-sdkgen +18 -2
  2. package/dist/action/doctor.d.ts +1 -1
  3. package/dist/action/doctor.js +12 -10
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/action/edition.js +4 -0
  6. package/dist/action/edition.js.map +1 -1
  7. package/dist/action/feature.js +5 -1
  8. package/dist/action/feature.js.map +1 -1
  9. package/dist/action/remove.d.ts +16 -0
  10. package/dist/action/remove.js +345 -0
  11. package/dist/action/remove.js.map +1 -0
  12. package/dist/action/target.js +6 -1
  13. package/dist/action/target.js.map +1 -1
  14. package/dist/cmp/ReadmeTop.js +1 -1
  15. package/dist/cmp/ReadmeTop.js.map +1 -1
  16. package/dist/cmp/ReadmeUnions.js +1 -1
  17. package/dist/cmp/ReadmeUnions.js.map +1 -1
  18. package/dist/cmp/Test.js +1 -1
  19. package/dist/cmp/Test.js.map +1 -1
  20. package/dist/helpers/buildIdNames.d.ts +3 -1
  21. package/dist/helpers/buildIdNames.js +15 -7
  22. package/dist/helpers/buildIdNames.js.map +1 -1
  23. package/dist/helpers/canonSpec.js +2 -2
  24. package/dist/helpers/canonSpec.js.map +1 -1
  25. package/dist/helpers/getMatchEntries.js +2 -2
  26. package/dist/helpers/getMatchEntries.js.map +1 -1
  27. package/dist/helpers/modelNames.js +5 -1
  28. package/dist/helpers/modelNames.js.map +1 -1
  29. package/dist/helpers/opShape.js +33 -33
  30. package/dist/helpers/opShape.js.map +1 -1
  31. package/dist/helpers/pointPath.js +5 -10
  32. package/dist/helpers/pointPath.js.map +1 -1
  33. package/dist/helpers/resolved.js +2 -29
  34. package/dist/helpers/resolved.js.map +1 -1
  35. package/dist/sdkgen.d.ts +2 -2
  36. package/dist/sdkgen.js +5 -3
  37. package/dist/sdkgen.js.map +1 -1
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/dist/utility.js +15 -7
  40. package/dist/utility.js.map +1 -1
  41. package/package.json +3 -3
  42. package/project/.sdk/src/cmp/c/EntityTypes_c.ts +4 -4
  43. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +3 -3
  44. package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +3 -3
  45. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +5 -5
  46. package/project/.sdk/src/cmp/c/Schema_c.ts +1 -1
  47. package/project/.sdk/src/cmp/c/TestDirect_c.ts +12 -12
  48. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +3 -3
  49. package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +3 -3
  50. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +5 -5
  51. package/project/.sdk/src/cmp/clojure/Schema_clojure.ts +1 -1
  52. package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +3 -3
  53. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +3 -3
  54. package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +3 -3
  55. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +5 -5
  56. package/project/.sdk/src/cmp/cpp/Schema_cpp.ts +1 -1
  57. package/project/.sdk/src/cmp/cpp/TestDirect_cpp.ts +14 -14
  58. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +51 -50
  59. package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +4 -4
  60. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +3 -3
  61. package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +3 -3
  62. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +5 -5
  63. package/project/.sdk/src/cmp/csharp/Schema_csharp.ts +1 -1
  64. package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +30 -30
  65. package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +66 -65
  66. package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +4 -4
  67. package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +3 -3
  68. package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +3 -3
  69. package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +4 -4
  70. package/project/.sdk/src/cmp/elixir/Schema_elixir.ts +1 -1
  71. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +4 -4
  72. package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +3 -3
  73. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +3 -3
  74. package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +5 -5
  75. package/project/.sdk/src/cmp/go/Schema_go.ts +1 -1
  76. package/project/.sdk/src/cmp/go/TestDirect_go.ts +38 -38
  77. package/project/.sdk/src/cmp/go/TestEntity_go.ts +75 -74
  78. package/project/.sdk/src/cmp/go/utility_go.ts +5 -5
  79. package/project/.sdk/src/cmp/java/EntityTypes_java.ts +4 -4
  80. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +3 -3
  81. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +3 -3
  82. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +5 -5
  83. package/project/.sdk/src/cmp/java/Schema_java.ts +1 -1
  84. package/project/.sdk/src/cmp/java/TestDirect_java.ts +30 -30
  85. package/project/.sdk/src/cmp/java/TestEntity_java.ts +69 -68
  86. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +5 -5
  87. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +3 -3
  88. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +3 -3
  89. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
  90. package/project/.sdk/src/cmp/js/Schema_js.ts +1 -1
  91. package/project/.sdk/src/cmp/js/TestDirect_js.ts +27 -27
  92. package/project/.sdk/src/cmp/js/TestEntity_js.ts +66 -69
  93. package/project/.sdk/src/cmp/js/TestLive_js.ts +3 -3
  94. package/project/.sdk/src/cmp/js/utility_js.ts +5 -5
  95. package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +4 -4
  96. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +3 -3
  97. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +3 -3
  98. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +5 -5
  99. package/project/.sdk/src/cmp/kotlin/Schema_kotlin.ts +1 -1
  100. package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +30 -30
  101. package/project/.sdk/src/cmp/kotlin/TestEntity_kotlin.ts +67 -66
  102. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +5 -5
  103. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +3 -3
  104. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +3 -3
  105. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +4 -4
  106. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +5 -5
  107. package/project/.sdk/src/cmp/lua/Schema_lua.ts +1 -1
  108. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +25 -25
  109. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +66 -65
  110. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +3 -3
  111. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +3 -3
  112. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +5 -5
  113. package/project/.sdk/src/cmp/ocaml/Schema_ocaml.ts +1 -1
  114. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +3 -3
  115. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +3 -3
  116. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +5 -5
  117. package/project/.sdk/src/cmp/perl/Schema_perl.ts +1 -1
  118. package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +25 -25
  119. package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +60 -59
  120. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +4 -4
  121. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +3 -3
  122. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +3 -3
  123. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +4 -4
  124. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +5 -5
  125. package/project/.sdk/src/cmp/php/Schema_php.ts +1 -1
  126. package/project/.sdk/src/cmp/php/TestDirect_php.ts +25 -25
  127. package/project/.sdk/src/cmp/php/TestEntity_php.ts +66 -65
  128. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +4 -4
  129. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +3 -3
  130. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +3 -3
  131. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +5 -5
  132. package/project/.sdk/src/cmp/py/Schema_py.ts +1 -1
  133. package/project/.sdk/src/cmp/py/TestDirect_py.ts +25 -25
  134. package/project/.sdk/src/cmp/py/TestEntity_py.ts +66 -65
  135. package/project/.sdk/src/cmp/py-data/Main_py-data.ts +4 -4
  136. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +4 -4
  137. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +3 -3
  138. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +3 -3
  139. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +4 -4
  140. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +5 -5
  141. package/project/.sdk/src/cmp/rb/Schema_rb.ts +1 -1
  142. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +25 -25
  143. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +66 -65
  144. package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +4 -4
  145. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +3 -3
  146. package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +3 -3
  147. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +5 -5
  148. package/project/.sdk/src/cmp/rust/Schema_rust.ts +1 -1
  149. package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +18 -18
  150. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +63 -62
  151. package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +4 -4
  152. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +3 -3
  153. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +3 -3
  154. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +5 -5
  155. package/project/.sdk/src/cmp/scala/Schema_scala.ts +1 -1
  156. package/project/.sdk/src/cmp/scala/TestDirect_scala.ts +14 -14
  157. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +60 -59
  158. package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +4 -4
  159. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +3 -3
  160. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +3 -3
  161. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +5 -5
  162. package/project/.sdk/src/cmp/swift/Schema_swift.ts +1 -1
  163. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +5 -5
  164. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +3 -3
  165. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +3 -3
  166. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +1 -1
  167. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
  168. package/project/.sdk/src/cmp/ts/Schema_ts.ts +1 -1
  169. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +40 -40
  170. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +72 -75
  171. package/project/.sdk/src/cmp/ts/TestLive_ts.ts +3 -3
  172. package/project/.sdk/src/cmp/ts/utility_ts.ts +5 -5
  173. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +3 -3
  174. package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +3 -3
  175. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +5 -5
  176. package/project/.sdk/src/cmp/zig/Schema_zig.ts +1 -1
  177. package/project/.sdk/tm/c/core/context.c +3 -1
  178. package/project/.sdk/tm/c/feature/paging.c +37 -3
  179. package/project/.sdk/tm/c/feature/test.c +71 -31
  180. package/project/.sdk/tm/c/utility/prepare_query.c +2 -1
  181. package/project/.sdk/tm/c/utility/transform_request.c +25 -3
  182. package/project/.sdk/tm/clojure/src/sdk/core.clj +21 -7
  183. package/project/.sdk/tm/clojure/src/sdk/features.clj +74 -22
  184. package/project/.sdk/tm/cpp/core/types.hpp +1 -1
  185. package/project/.sdk/tm/cpp/feature/paging.hpp +36 -3
  186. package/project/.sdk/tm/cpp/feature/test.hpp +58 -19
  187. package/project/.sdk/tm/cpp/utility/pipeline.hpp +16 -4
  188. package/project/.sdk/tm/csharp/core/Context.cs +1 -1
  189. package/project/.sdk/tm/csharp/feature/PagingFeature.cs +58 -4
  190. package/project/.sdk/tm/csharp/feature/TestFeature.cs +23 -25
  191. package/project/.sdk/tm/csharp/utility/Fetcher.cs +19 -12
  192. package/project/.sdk/tm/csharp/utility/PrepareQuery.cs +1 -1
  193. package/project/.sdk/tm/csharp/utility/TransformRequest.cs +23 -3
  194. package/project/.sdk/tm/elixir/lib/projectname/context.ex +1 -1
  195. package/project/.sdk/tm/elixir/lib/projectname/feature/paging.ex +52 -10
  196. package/project/.sdk/tm/elixir/lib/projectname/feature/test.ex +58 -22
  197. package/project/.sdk/tm/elixir/lib/projectname/utility.ex +30 -9
  198. package/project/.sdk/tm/go/core/context.go +13 -13
  199. package/project/.sdk/tm/go/feature/paging_feature.go +40 -2
  200. package/project/.sdk/tm/go/feature/test_feature.go +3 -15
  201. package/project/.sdk/tm/go/test/feature_corpus_test.go +1 -0
  202. package/project/.sdk/tm/go/test/feature_test.go +54 -0
  203. package/project/.sdk/tm/go/utility/fetcher.go +41 -20
  204. package/project/.sdk/tm/go/utility/prepare_query.go +1 -1
  205. package/project/.sdk/tm/go/utility/transform_request.go +22 -3
  206. package/project/.sdk/tm/java/core/Context.java +2 -1
  207. package/project/.sdk/tm/java/feature/PagingFeature.java +46 -4
  208. package/project/.sdk/tm/java/feature/TestFeature.java +21 -19
  209. package/project/.sdk/tm/java/test/FeatureCorpusTest.java +3 -0
  210. package/project/.sdk/tm/java/test/FeatureTest.java +42 -0
  211. package/project/.sdk/tm/java/utility/Fetcher.java +36 -28
  212. package/project/.sdk/tm/java/utility/PrepareQuery.java +1 -1
  213. package/project/.sdk/tm/java/utility/TransformRequest.java +18 -3
  214. package/project/.sdk/tm/js/src/Context.js +7 -2
  215. package/project/.sdk/tm/js/src/feature/paging/PagingFeature.js +24 -6
  216. package/project/.sdk/tm/js/src/feature/test/TestFeature.js +7 -5
  217. package/project/.sdk/tm/js/src/utility/PrepareQueryUtility.js +1 -1
  218. package/project/.sdk/tm/js/test/feature/Corpus.test.js +4 -0
  219. package/project/.sdk/tm/js/test/live-entity.js +29 -29
  220. package/project/.sdk/tm/js/test/live-scenarios.js +4 -4
  221. package/project/.sdk/tm/kotlin/core/Context.kt +1 -1
  222. package/project/.sdk/tm/kotlin/feature/PagingFeature.kt +36 -4
  223. package/project/.sdk/tm/kotlin/feature/TestFeature.kt +19 -18
  224. package/project/.sdk/tm/kotlin/utility/Fetcher.kt +33 -24
  225. package/project/.sdk/tm/kotlin/utility/Prepare.kt +1 -1
  226. package/project/.sdk/tm/kotlin/utility/ResultTransform.kt +18 -3
  227. package/project/.sdk/tm/lua/core/context.lua +8 -1
  228. package/project/.sdk/tm/lua/core/control.lua +3 -0
  229. package/project/.sdk/tm/lua/feature/paging_feature.lua +44 -5
  230. package/project/.sdk/tm/lua/feature/test_feature.lua +32 -14
  231. package/project/.sdk/tm/lua/utility/prepare_query.lua +2 -1
  232. package/project/.sdk/tm/lua/utility/transform_request.lua +19 -3
  233. package/project/.sdk/tm/ocaml/sdk_features.ml +78 -25
  234. package/project/.sdk/tm/ocaml/sdk_runtime.ml +23 -8
  235. package/project/.sdk/tm/perl/core/context.pm +2 -1
  236. package/project/.sdk/tm/perl/feature/paging_feature.pm +31 -5
  237. package/project/.sdk/tm/perl/feature/test_feature.pm +52 -20
  238. package/project/.sdk/tm/perl/feature/timeout_feature.pm +17 -13
  239. package/project/.sdk/tm/perl/t/feature_corpus.t +14 -1
  240. package/project/.sdk/tm/perl/utility/fetcher.pm +15 -1
  241. package/project/.sdk/tm/perl/utility/prepare_query.pm +1 -0
  242. package/project/.sdk/tm/perl/utility/transform_request.pm +13 -3
  243. package/project/.sdk/tm/php/core/Context.php +5 -1
  244. package/project/.sdk/tm/php/core/Control.php +5 -0
  245. package/project/.sdk/tm/php/feature/PagingFeature.php +26 -5
  246. package/project/.sdk/tm/php/feature/TestFeature.php +27 -42
  247. package/project/.sdk/tm/php/test/FeatureCorpusTest.php +17 -1
  248. package/project/.sdk/tm/php/test/FeatureTest.php +44 -0
  249. package/project/.sdk/tm/php/utility/Fetcher.php +17 -3
  250. package/project/.sdk/tm/php/utility/PrepareQuery.php +1 -1
  251. package/project/.sdk/tm/php/utility/TransformRequest.php +15 -3
  252. package/project/.sdk/tm/py/pkg/core/context.py +2 -1
  253. package/project/.sdk/tm/py/pkg/feature/paging_feature.py +29 -4
  254. package/project/.sdk/tm/py/pkg/feature/test_feature.py +29 -12
  255. package/project/.sdk/tm/py/pkg/utility/fetcher.py +63 -65
  256. package/project/.sdk/tm/py/pkg/utility/prepare_query.py +2 -1
  257. package/project/.sdk/tm/py/pkg/utility/transform_request.py +11 -3
  258. package/project/.sdk/tm/py/test/test_feature.py +27 -0
  259. package/project/.sdk/tm/py/test/test_feature_corpus.py +11 -1
  260. package/project/.sdk/tm/rb/core/context.rb +1 -1
  261. package/project/.sdk/tm/rb/feature/paging_feature.rb +27 -5
  262. package/project/.sdk/tm/rb/feature/test_feature.rb +39 -11
  263. package/project/.sdk/tm/rb/test/feature_corpus_test.rb +12 -1
  264. package/project/.sdk/tm/rb/test/feature_test.rb +38 -0
  265. package/project/.sdk/tm/rb/utility/fetcher.rb +49 -3
  266. package/project/.sdk/tm/rb/utility/prepare_query.rb +1 -1
  267. package/project/.sdk/tm/rb/utility/transform_request.rb +10 -3
  268. package/project/.sdk/tm/rust/core/context.rs +2 -6
  269. package/project/.sdk/tm/rust/feature/paging.rs +44 -3
  270. package/project/.sdk/tm/rust/feature/secrets.rs +1 -1
  271. package/project/.sdk/tm/rust/feature/test.rs +74 -37
  272. package/project/.sdk/tm/rust/utility/fetcher.rs +41 -14
  273. package/project/.sdk/tm/rust/utility/prepare_query.rs +1 -1
  274. package/project/.sdk/tm/rust/utility/transform_request.rs +31 -5
  275. package/project/.sdk/tm/scala/core/Context.scala +2 -1
  276. package/project/.sdk/tm/scala/feature/PagingFeature.scala +41 -4
  277. package/project/.sdk/tm/scala/feature/TestFeature.scala +21 -18
  278. package/project/.sdk/tm/scala/utility/Fetcher.scala +34 -13
  279. package/project/.sdk/tm/scala/utility/Prepare.scala +1 -1
  280. package/project/.sdk/tm/scala/utility/Transform.scala +19 -3
  281. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Context.swift +1 -1
  282. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/PagingFeature.swift +31 -4
  283. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TestFeature.swift +22 -15
  284. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Fetcher.swift +22 -3
  285. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +1 -1
  286. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/ResultUtil.swift +14 -3
  287. package/project/.sdk/tm/ts/src/Context.ts +7 -2
  288. package/project/.sdk/tm/ts/src/feature/paging/PagingFeature.ts +19 -3
  289. package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +3 -0
  290. package/project/.sdk/tm/ts/src/utility/PrepareQueryUtility.ts +1 -1
  291. package/project/.sdk/tm/ts/test/feature/Corpus.test.ts +1 -0
  292. package/project/.sdk/tm/ts/test/live-entity.ts +26 -26
  293. package/project/.sdk/tm/ts/test/live-scenarios.ts +3 -3
  294. package/project/.sdk/tm/zig/core/context.zig +1 -1
  295. package/project/.sdk/tm/zig/core/utility.zig +19 -5
  296. package/project/.sdk/tm/zig/feature/paging.zig +34 -4
  297. package/project/.sdk/tm/zig/feature/test.zig +65 -30
  298. package/project/sdkgen-package.json +1 -1
  299. package/src/action/doctor.ts +12 -9
  300. package/src/action/edition.ts +8 -0
  301. package/src/action/feature.ts +7 -1
  302. package/src/action/remove.ts +492 -0
  303. package/src/action/target.ts +8 -1
  304. package/src/cmp/ReadmeTop.ts +1 -1
  305. package/src/cmp/ReadmeUnions.ts +1 -1
  306. package/src/cmp/Test.ts +1 -1
  307. package/src/helpers/buildIdNames.ts +17 -7
  308. package/src/helpers/canonSpec.ts +2 -2
  309. package/src/helpers/getMatchEntries.ts +2 -2
  310. package/src/helpers/modelNames.ts +6 -1
  311. package/src/helpers/opShape.ts +33 -33
  312. package/src/helpers/pointPath.ts +5 -10
  313. package/src/helpers/resolved.ts +3 -14
  314. package/src/sdkgen.ts +3 -1
  315. package/src/utility.ts +16 -7
@@ -33,10 +33,10 @@ function normalizePathParams(
33
33
  // original name was renamed to another param's current name (e.g. badge
34
34
  // load: param 'group_id' has orig 'id', and another param has name 'id').
35
35
  const param = params.find((p: any) =>
36
- p.name === snaked || p.name === depluralized) ||
36
+ p.n === snaked || p.n === depluralized) ||
37
37
  params.find((p: any) =>
38
- p.orig === snaked || p.orig === depluralized)
39
- if (param) return '{' + param.name + '}'
38
+ p.or === snaked || p.or === depluralized)
39
+ if (param) return '{' + param.n + '}'
40
40
 
41
41
  if (rename) {
42
42
  for (const [origCamel, renamedTo] of Object.entries(rename)) {
@@ -44,10 +44,10 @@ function normalizePathParams(
44
44
  const origSnaked = snakify(origCamel)
45
45
  const origDepluralized = depluralize(origSnaked)
46
46
  const renamedParam = params.find(
47
- (p: any) => p.orig === origSnaked || p.name === origSnaked ||
48
- p.orig === origDepluralized || p.name === origDepluralized
47
+ (p: any) => p.or === origSnaked || p.n === origSnaked ||
48
+ p.or === origDepluralized || p.n === origDepluralized
49
49
  )
50
- if (renamedParam) return '{' + renamedParam.name + '}'
50
+ if (renamedParam) return '{' + renamedParam.n + '}'
51
51
  }
52
52
  }
53
53
  }
@@ -110,8 +110,8 @@ const TestDirect = cmp(function TestDirect(props: any) {
110
110
  const listOp = entity.op?.list
111
111
 
112
112
  const loadPoint = loadOp?.points?.[0]
113
- const loadPath = loadPoint ? normalizePathParams(pointParts(loadPoint), loadPoint?.args?.params || [], loadPoint?.rename?.param) : ''
114
- const allLoadParams = loadPoint?.args?.params || []
113
+ const loadPath = loadPoint ? normalizePathParams(pointParts(loadPoint), loadPoint?.g?.params || [], loadPoint?.r?.param) : ''
114
+ const allLoadParams = loadPoint?.g?.params || []
115
115
  // Only path params that actually appear in the URL template drive direct-
116
116
  // test path-param setup and URL-substitution asserts (see TestDirect_rb).
117
117
  const _pathPlaceholders = new Set<string>()
@@ -120,7 +120,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
120
120
  _pathPlaceholders.add(part.slice(1, -1))
121
121
  }
122
122
  }
123
- const _renameMap = (loadPoint?.rename?.param || {}) as Record<string, string>
123
+ const _renameMap = (loadPoint?.r?.param || {}) as Record<string, string>
124
124
  const _renamedPlaceholders = new Set<string>()
125
125
  for (const ph of _pathPlaceholders) {
126
126
  _renamedPlaceholders.add(ph)
@@ -129,25 +129,25 @@ const TestDirect = cmp(function TestDirect(props: any) {
129
129
  }
130
130
  }
131
131
  const loadParams = allLoadParams.filter((p: any) =>
132
- _renamedPlaceholders.has(p.name) || _renamedPlaceholders.has(p.orig))
132
+ _renamedPlaceholders.has(p.n) || _renamedPlaceholders.has(p.or))
133
133
 
134
134
  const listPoint = listOp?.points?.[0]
135
- const listPath = listPoint ? normalizePathParams(pointParts(listPoint), listPoint?.args?.params || [], listPoint?.rename?.param) : ''
136
- const listParams = listPoint?.args?.params || []
135
+ const listPath = listPoint ? normalizePathParams(pointParts(listPoint), listPoint?.g?.params || [], listPoint?.r?.param) : ''
136
+ const listParams = listPoint?.g?.params || []
137
137
 
138
138
  // Required query params with spec-provided examples - needed in live mode.
139
- const loadQuery = loadPoint?.args?.query || []
139
+ const loadQuery = loadPoint?.g?.query || []
140
140
  const loadLiveQueryEntries = loadQuery
141
- .filter((q: any) => q.reqd && undefined !== q.example && null !== q.example)
141
+ .filter((q: any) => q.r && undefined !== q.ex && null !== q.ex)
142
142
  const loadLiveQueryLines = loadLiveQueryEntries
143
- .map((q: any) => ` $query->{'${q.name}'} = ${perlScalar(q.example)};`)
143
+ .map((q: any) => ` $query->{'${q.n}'} = ${perlScalar(q.ex)};`)
144
144
  .join('\n')
145
145
 
146
146
  const loadAllHaveExamples =
147
147
  loadParams.length > 0 &&
148
- loadParams.every((p: any) => undefined !== p.example && null !== p.example)
148
+ loadParams.every((p: any) => undefined !== p.ex && null !== p.ex)
149
149
  const loadExampleLines = loadAllHaveExamples
150
- ? loadParams.map((p: any) => ` $params->{'${p.name}'} = ${perlScalar(p.example)};`).join('\n')
150
+ ? loadParams.map((p: any) => ` $params->{'${p.n}'} = ${perlScalar(p.ex)};`).join('\n')
151
151
  : ''
152
152
 
153
153
  const entidEnvVar = `${PROJECTNAME}_TEST_${envToken(entity.name)}_ENTID`
@@ -171,9 +171,9 @@ require(Cwd::abs_path("$FindBin::Bin/runner.pm"));
171
171
 
172
172
  if (hasList && listPoint) {
173
173
  const listLiveIdKeys: string[] = listParams.map((lp: any) => {
174
- return lp.name === 'id'
174
+ return lp.n === 'id'
175
175
  ? entity.name + '01'
176
- : lp.name.replace(/_id$/, '') + '01'
176
+ : lp.n.replace(/_id$/, '') + '01'
177
177
  })
178
178
  const listSkipBlock = listLiveIdKeys.length > 0
179
179
  ? ` if ($setup->{live}) {
@@ -207,14 +207,14 @@ ${listSkipBlock} my $client = $setup->{client};
207
207
  Content(` my $params = {};
208
208
  `)
209
209
  for (const lp of listParams) {
210
- const key = lp.name === 'id'
210
+ const key = lp.n === 'id'
211
211
  ? entity.name + '01'
212
- : lp.name.replace(/_id$/, '') + '01'
212
+ : lp.n.replace(/_id$/, '') + '01'
213
213
  Content(` if ($setup->{live}) {
214
- $params->{'${lp.name}'} = $setup->{idmap}{'${key}'};
214
+ $params->{'${lp.n}'} = $setup->{idmap}{'${key}'};
215
215
  }
216
216
  else {
217
- $params->{'${lp.name}'} = 'direct01';
217
+ $params->{'${lp.n}'} = 'direct01';
218
218
  }
219
219
  `)
220
220
  }
@@ -305,7 +305,7 @@ ${loadSkipBlock} my $client = $setup->{client};
305
305
  else {
306
306
  `)
307
307
  for (let i = 0; i < loadParams.length; i++) {
308
- Content(` $params->{'${loadParams[i].name}'} = 'direct0${i + 1}';
308
+ Content(` $params->{'${loadParams[i].n}'} = 'direct0${i + 1}';
309
309
  `)
310
310
  }
311
311
  Content(` }
@@ -320,7 +320,7 @@ ${loadLiveQueryLines}
320
320
  Content(` unless ($setup->{live}) {
321
321
  `)
322
322
  for (let i = 0; i < loadParams.length; i++) {
323
- Content(` $params->{'${loadParams[i].name}'} = 'direct0${i + 1}';
323
+ Content(` $params->{'${loadParams[i].n}'} = 'direct0${i + 1}';
324
324
  `)
325
325
  }
326
326
  Content(` }
@@ -1,3 +1,4 @@
1
+ import { flowSteps } from '@voxgig/sdkgen'
1
2
 
2
3
  import {
3
4
  KIT,
@@ -80,10 +81,10 @@ const TestEntity = cmp(function TestEntity(props: any) {
80
81
  const idnames = buildIdNames(entity, basicflow)
81
82
  const idnamesStr = idnames.map(n => `'${n}'`).join(', ')
82
83
 
83
- const allSteps = Object.values(basicflow.step) as any[]
84
- const updateStep = allSteps.find((s: any) => s.op === 'update')
85
- const updateData = updateStep?.data
86
- ? Object.entries(updateStep.data).filter(([k]: any) => k !== 'id' && !k.endsWith('$'))
84
+ const allSteps = Object.values(flowSteps(basicflow)) as any[]
85
+ const updateStep = allSteps.find((s: any) => s.o === 'update')
86
+ const updateData = updateStep?.d
87
+ ? Object.entries(updateStep.d).filter(([k]: any) => k !== 'id' && !k.endsWith('$'))
87
88
  : []
88
89
  const aliases = updateData.map(([k, v]: any) => [k, v])
89
90
 
@@ -93,7 +94,7 @@ const TestEntity = cmp(function TestEntity(props: any) {
93
94
  // below therefore wraps this in a second pair of parens, which is a no-op
94
95
  // for a non-empty list because Perl flattens it.
95
96
  const opsList = Array.from(new Set(
96
- (allSteps as any[]).map((s: any) => s.op).filter(Boolean)))
97
+ (allSteps as any[]).map((s: any) => s.o).filter(Boolean)))
97
98
  .map(o => `'${o}'`).join(', ')
98
99
 
99
100
  const genCtx: GenCtx = { model, entity, flow: basicflow, N, PROJUPPER }
@@ -145,7 +146,7 @@ BASIC_FLOW: {
145
146
  `)
146
147
 
147
148
  // Check if the flow has a create step
148
- const flowHasCreate = allSteps.some((s: any) => s.op === 'create')
149
+ const flowHasCreate = allSteps.some((s: any) => s.o === 'create')
149
150
  if (!flowHasCreate) {
150
151
  Content(` # Bootstrap entity data from existing test data.
151
152
  $V{${entity.name}_ref01_data_raw} = Voxgig::Struct::items(${N}Helpers::to_map(
@@ -159,8 +160,8 @@ BASIC_FLOW: {
159
160
  }
160
161
 
161
162
  // Model-driven step iteration
162
- each(basicflow.step, (step: any, index: any) => {
163
- const opgen: OpGen = GENERATE_OP[step.op]
163
+ each(flowSteps(basicflow), (step: any, index: any) => {
164
+ const opgen: OpGen = GENERATE_OP[step.o]
164
165
  if (opgen) {
165
166
  opgen(genCtx, step, index)
166
167
  Content('\n')
@@ -261,13 +262,13 @@ done_testing();
261
262
 
262
263
  const generateCreate: OpGen = (ctx, step, index) => {
263
264
  const { entity, flow, N } = ctx
264
- const ref = step.input.ref ?? entity.name + '_ref01'
265
- const entvar = step.input.entvar ?? ref + '_ent'
266
- const datavar = step.input.datavar ?? (ref + '_data' + (step.input.suffix ?? ''))
265
+ const ref = step.i.ref ?? entity.name + '_ref01'
266
+ const entvar = step.i.entvar ?? ref + '_ent'
267
+ const datavar = step.i.datavar ?? (ref + '_data' + (step.i.suffix ?? ''))
267
268
 
268
- const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
269
+ const priorSteps = Object.values(flowSteps(flow)).slice(0, Number(index)) as any[]
269
270
  const needsEnt = !priorSteps.some((s: any) =>
270
- ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
271
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.o))
271
272
 
272
273
  Content(` # CREATE
273
274
  `)
@@ -299,14 +300,14 @@ const generateCreate: OpGen = (ctx, step, index) => {
299
300
 
300
301
  const generateList: OpGen = (ctx, step, index) => {
301
302
  const { entity, flow, N } = ctx
302
- const ref = step.input.ref ?? entity.name + '_ref01'
303
- const entvar = step.input.entvar ?? ref + '_ent'
304
- const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
305
- const listvar = step.input.listvar ?? (ref + '_list' + (step.input.suffix ?? ''))
303
+ const ref = step.i.ref ?? entity.name + '_ref01'
304
+ const entvar = step.i.entvar ?? ref + '_ent'
305
+ const matchvar = step.i.matchvar ?? (ref + '_match' + (step.i.suffix ?? ''))
306
+ const listvar = step.i.listvar ?? (ref + '_list' + (step.i.suffix ?? ''))
306
307
 
307
- const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
308
+ const priorSteps = Object.values(flowSteps(flow)).slice(0, Number(index)) as any[]
308
309
  const needsEnt = !priorSteps.some((s: any) =>
309
- ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
310
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.o))
310
311
 
311
312
  Content(` # LIST
312
313
  `)
@@ -336,12 +337,12 @@ const generateList: OpGen = (ctx, step, index) => {
336
337
  `)
337
338
 
338
339
  // Handle validators
339
- const allSteps = Object.values(flow.step) as any[]
340
- if (step.valid) {
341
- for (const validator of step.valid) {
340
+ const allSteps = Object.values(flowSteps(flow)) as any[]
341
+ if (step.v) {
342
+ for (const validator of step.v) {
342
343
  const validRef = validator.def?.ref
343
- const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
344
- ((s.input.ref ?? entity.name + '_ref01') === validRef))
344
+ const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.o &&
345
+ ((s.i.ref ?? entity.name + '_ref01') === validRef))
345
346
 
346
347
  if ('ItemExists' === validator.apply && hasRefData) {
347
348
  const refDataVar = validRef + '_data'
@@ -367,16 +368,16 @@ const generateList: OpGen = (ctx, step, index) => {
367
368
 
368
369
  const generateUpdate: OpGen = (ctx, step, index) => {
369
370
  const { entity, flow, N } = ctx
370
- const ref = step.input.ref ?? entity.name + '_ref01'
371
- const entvar = step.input.entvar ?? ref + '_ent'
372
- const datavar = step.input.datavar ?? (ref + '_data' + (step.input.suffix ?? ''))
373
- const resdatavar = step.input.resdatavar ?? (ref + '_resdata' + (step.input.suffix ?? ''))
374
- const markdefvar = step.input.markdefvar ?? (ref + '_markdef' + (step.input.suffix ?? ''))
375
- const srcdatavar = step.input.srcdatavar ?? (ref + '_data' + (step.input.suffix ?? ''))
376
-
377
- const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
371
+ const ref = step.i.ref ?? entity.name + '_ref01'
372
+ const entvar = step.i.entvar ?? ref + '_ent'
373
+ const datavar = step.i.datavar ?? (ref + '_data' + (step.i.suffix ?? ''))
374
+ const resdatavar = step.i.resdatavar ?? (ref + '_resdata' + (step.i.suffix ?? ''))
375
+ const markdefvar = step.i.markdefvar ?? (ref + '_markdef' + (step.i.suffix ?? ''))
376
+ const srcdatavar = step.i.srcdatavar ?? (ref + '_data' + (step.i.suffix ?? ''))
377
+
378
+ const priorSteps = Object.values(flowSteps(flow)).slice(0, Number(index)) as any[]
378
379
  const needsEnt = !priorSteps.some((s: any) =>
379
- ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
380
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.o))
380
381
 
381
382
  const hasEntIdU = null != entity.id
382
383
 
@@ -393,8 +394,8 @@ const generateUpdate: OpGen = (ctx, step, index) => {
393
394
  `)
394
395
  }
395
396
 
396
- if (step.data) {
397
- const dataEntries = Object.entries(step.data).filter(([k]: any) => k !== 'id' && !k.endsWith('$'))
397
+ if (step.d) {
398
+ const dataEntries = Object.entries(step.d).filter(([k]: any) => k !== 'id' && !k.endsWith('$'))
398
399
  for (const [key] of dataEntries) {
399
400
  Content(` '${key}' => $setup->{idmap}{'${key}'},
400
401
  `)
@@ -404,10 +405,10 @@ const generateUpdate: OpGen = (ctx, step, index) => {
404
405
  Content(` };
405
406
  `)
406
407
 
407
- if (step.spec) {
408
- for (const spec of step.spec) {
409
- if ('TextFieldMark' === spec.apply && null != step.input.textfield) {
410
- const fieldname = step.input.textfield
408
+ if (step.s) {
409
+ for (const spec of step.s) {
410
+ if ('TextFieldMark' === spec.apply && null != step.i.textfield) {
411
+ const fieldname = step.i.textfield
411
412
  const fieldvalue = spec.def?.mark ?? `Mark01-${ref}`
412
413
  Content(`
413
414
  $V{${markdefvar}_name} = '${fieldname}';
@@ -428,9 +429,9 @@ const generateUpdate: OpGen = (ctx, step, index) => {
428
429
  `)
429
430
  }
430
431
 
431
- if (step.spec) {
432
- for (const spec of step.spec) {
433
- if ('TextFieldMark' === spec.apply && null != step.input.textfield) {
432
+ if (step.s) {
433
+ for (const spec of step.s) {
434
+ if ('TextFieldMark' === spec.apply && null != step.i.textfield) {
434
435
  Content(` is($V{${resdatavar}}{ $V{${markdefvar}_name} }, $V{${markdefvar}_value}, '${entity.name} update: mark');
435
436
  `)
436
437
  }
@@ -441,23 +442,23 @@ const generateUpdate: OpGen = (ctx, step, index) => {
441
442
 
442
443
  const generateLoad: OpGen = (ctx, step, index) => {
443
444
  const { entity, flow, N } = ctx
444
- const ref = step.input.ref ?? entity.name + '_ref01'
445
- const entvar = step.input.entvar ?? ref + '_ent'
446
- const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
447
- const datavar = step.input.datavar ?? (ref + '_data' + (step.input.suffix ?? ''))
448
- const srcdatavar = step.input.srcdatavar ?? (ref + '_data' + (step.input.suffix ?? ''))
445
+ const ref = step.i.ref ?? entity.name + '_ref01'
446
+ const entvar = step.i.entvar ?? ref + '_ent'
447
+ const matchvar = step.i.matchvar ?? (ref + '_match' + (step.i.suffix ?? ''))
448
+ const datavar = step.i.datavar ?? (ref + '_data' + (step.i.suffix ?? ''))
449
+ const srcdatavar = step.i.srcdatavar ?? (ref + '_data' + (step.i.suffix ?? ''))
449
450
 
450
- const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
451
+ const priorSteps = Object.values(flowSteps(flow)).slice(0, Number(index)) as any[]
451
452
  const hasEntVar = priorSteps.some((s: any) =>
452
- ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
453
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.o))
453
454
 
454
- const flowHasCreate = Object.values(flow.step).some((s: any) => (s as any).op === 'create')
455
+ const flowHasCreate = Object.values(flowSteps(flow)).some((s: any) => (s as any).o === 'create')
455
456
  const preambleRef = entity.name + '_ref01'
456
457
  const hasSrcData = (!flowHasCreate && srcdatavar === (preambleRef + '_data')) ||
457
458
  priorSteps.some((s: any) => {
458
- if ('create' === s.op) {
459
- const priorRef = s.input.ref ?? entity.name + '_ref01'
460
- const priorDatvar = s.input.datavar ?? (priorRef + '_data' + (s.input.suffix ?? ''))
459
+ if ('create' === s.o) {
460
+ const priorRef = s.i.ref ?? entity.name + '_ref01'
461
+ const priorDatvar = s.i.datavar ?? (priorRef + '_data' + (s.i.suffix ?? ''))
461
462
  return priorDatvar === srcdatavar
462
463
  }
463
464
  return false
@@ -501,14 +502,14 @@ const generateLoad: OpGen = (ctx, step, index) => {
501
502
 
502
503
  const generateRemove: OpGen = (ctx, step, index) => {
503
504
  const { entity, flow, N } = ctx
504
- const ref = step.input.ref ?? entity.name + '_ref01'
505
- const entvar = step.input.entvar ?? ref + '_ent'
506
- const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
507
- const srcdatavar = step.input.srcdatavar ?? (ref + '_data')
505
+ const ref = step.i.ref ?? entity.name + '_ref01'
506
+ const entvar = step.i.entvar ?? ref + '_ent'
507
+ const matchvar = step.i.matchvar ?? (ref + '_match' + (step.i.suffix ?? ''))
508
+ const srcdatavar = step.i.srcdatavar ?? (ref + '_data')
508
509
 
509
- const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
510
+ const priorSteps = Object.values(flowSteps(flow)).slice(0, Number(index)) as any[]
510
511
  const needsEnt = !priorSteps.some((s: any) =>
511
- ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
512
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.o))
512
513
 
513
514
  Content(` # REMOVE
514
515
  `)
@@ -60,8 +60,8 @@ declare(strict_types=1);
60
60
 
61
61
  // Typed models for the ${model.const.Name} SDK.
62
62
  //
63
- // GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
64
- // params (op.<name>.points[].args.params[]). Field/param types come from the
63
+ // GENERATED from the API model: main.${KIT}.entity.<e>.fields{} and per-op
64
+ // params (op.<name>.points[].g.params[]). Field/param types come from the
65
65
  // canonical type sentinels via @voxgig/sdkgen canonToType (source of truth:
66
66
  // @voxgig/apidef VALID_CANON). Do not edit by hand.
67
67
  //
@@ -74,7 +74,7 @@ declare(strict_types=1);
74
74
  entityList.forEach((ent: any) => {
75
75
  const Name = ent.Name
76
76
  const fields = (ent.fields ? each(ent.fields) : [])
77
- .filter((f: any) => f.active !== false && validName(f.name))
77
+ .filter((f: any) => f.a !== false && validName(f.n))
78
78
 
79
79
  const TypeName = phpSafeTypeName(Name)
80
80
 
@@ -83,7 +83,7 @@ class ${TypeName}
83
83
  {
84
84
  `)
85
85
  fields.forEach((f: any) => {
86
- Content(propLine(f.name, f.type, false === f.req))
86
+ Content(propLine(f.n, f.t, false === f.r))
87
87
  })
88
88
  Content(`}
89
89
 
@@ -53,7 +53,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
53
53
 
54
54
  publishedEntities.map((entity: any) => {
55
55
  const opnames = Object.keys(entity.op || {})
56
- const fields = entity.fields || []
56
+ const fields = Object.values(entity.fields || {})
57
57
  const idF = entityIdField(entity)
58
58
 
59
59
  Content(`
@@ -97,8 +97,8 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
97
97
  `)
98
98
 
99
99
  each(fields, (field: any) => {
100
- const desc = field.short || ''
101
- Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
100
+ const desc = field.sh || ''
101
+ Content(`| \`${field.n}\` | \`${canonToType(field.t, target.name)}\` | ${desc} |
102
102
  `)
103
103
  })
104
104
 
@@ -116,13 +116,13 @@ On error, \`ok\` is \`false\` and \`$err\` contains the error value.
116
116
 
117
117
  `)
118
118
  each(entityList, (ent: any) => {
119
- const fields = ent.fields || []
119
+ const fields = Object.values(ent.fields || {})
120
120
  const opnames = Object.keys(ent.op || {})
121
121
  const ops = ent.op || {}
122
122
  const points = each(ops).map((op: any) =>
123
123
  op.points ? each(op.points) : []
124
124
  ).flat()
125
- const path = points.length > 0 ? (points[0] as any).orig || '' : ''
125
+ const path = points.length > 0 ? (points[0] as any).o || '' : ''
126
126
 
127
127
  Content(`#### ${ent.Name}
128
128
 
@@ -130,7 +130,7 @@ On error, \`ok\` is \`false\` and \`$err\` contains the error value.
130
130
  | --- | --- |
131
131
  `)
132
132
  each(fields, (field: any) => {
133
- Content(`| \`${field.name}\` | ${field.short || ''} |
133
+ Content(`| \`${field.n}\` | ${field.sh || ''} |
134
134
  `)
135
135
  })
136
136
 
@@ -64,13 +64,13 @@ $client = ${ctor};
64
64
  // Model-driven display field: the entity's first non-id string field
65
65
  // (falling back to any non-id field), so the list example prints a real
66
66
  // column instead of a hardcoded "name" the entity may not have.
67
- const fields = exampleEntity.fields || []
67
+ const fields: any[] = Object.values(exampleEntity.fields || {})
68
68
  const displayField =
69
- fields.find((f: any) => f && f.name !== 'id' && f.type === '$STRING') ||
70
- fields.find((f: any) => f && f.name !== 'id') ||
69
+ fields.find((f: any) => f && f.n !== 'id' && f.t === '$STRING') ||
70
+ fields.find((f: any) => f && f.n !== 'id') ||
71
71
  null
72
72
  const idCol = dataIdF ? `$item[${JSON.stringify(dataIdF)}]` : null
73
- const dispCol = displayField ? `$item[${JSON.stringify(displayField.name)}]` : null
73
+ const dispCol = displayField ? `$item[${JSON.stringify(displayField.n)}]` : null
74
74
  const itemPrint = [idCol, dispCol].filter(Boolean).join(' . " " . ') || 'json_encode($item)'
75
75
 
76
76
  if (opnames.includes('list')) {
@@ -168,7 +168,7 @@ Prepare a fetch definition without sending the request. Returns the
168
168
  // Entity reference sections
169
169
  publishedEntities.map((ent: any) => {
170
170
  const opnames = Object.keys(ent.op || {})
171
- const fields = ent.fields || []
171
+ const fields = Object.values(ent.fields || {})
172
172
  // Model-driven id key: null when this entity has no id-like field, in
173
173
  // which case load/remove match on no argument and update omits the id.
174
174
  const idF = entityIdField(ent)
@@ -200,9 +200,9 @@ $${ent.name} = $client->${phpEntityAccessor(ent.Name)}();
200
200
  | --- | --- | --- | --- |
201
201
  `)
202
202
  each(fields, (field: any) => {
203
- const req = field.req ? 'Yes' : 'No'
204
- const desc = field.short || ''
205
- Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${req} | ${desc} |
203
+ const req = field.r ? 'Yes' : 'No'
204
+ const desc = field.sh || ''
205
+ Content(`| \`${field.n}\` | \`${canonToType(field.t, target.name)}\` | ${req} | ${desc} |
206
206
  `)
207
207
  })
208
208
 
@@ -229,7 +229,7 @@ $${ent.name} = $client->${phpEntityAccessor(ent.Name)}();
229
229
  if (fop.active === false) return '-'
230
230
  return 'Yes'
231
231
  })
232
- Content(`| \`${field.name}\` | ${cols.join(' | ')} |
232
+ Content(`| \`${field.n}\` | ${cols.join(' | ')} |
233
233
  `)
234
234
  })
235
235
 
@@ -29,7 +29,7 @@ declare(strict_types=1);
29
29
  // ${model.const.Name} ${target.Name} SDK: generated schemas. Do not edit.
30
30
  //
31
31
  // Generated from the model: \`main.kit.optspec\` and each feature's
32
- // \`config.options\` for OPTSPEC; entity \`fields[].type\` for ENTITYSPEC.
32
+ // \`config.options\` for OPTSPEC; entity \`fields{}.type\` for ENTITYSPEC.
33
33
 
34
34
  class ${model.const.Name}Schema
35
35
  {
@@ -33,10 +33,10 @@ function normalizePathParams(
33
33
  // original name was renamed to another param's current name (e.g. badge
34
34
  // load: param 'group_id' has orig 'id', and another param has name 'id').
35
35
  const param = params.find((p: any) =>
36
- p.name === snaked || p.name === depluralized) ||
36
+ p.n === snaked || p.n === depluralized) ||
37
37
  params.find((p: any) =>
38
- p.orig === snaked || p.orig === depluralized)
39
- if (param) return '{' + param.name + '}'
38
+ p.or === snaked || p.or === depluralized)
39
+ if (param) return '{' + param.n + '}'
40
40
 
41
41
  if (rename) {
42
42
  for (const [origCamel, renamedTo] of Object.entries(rename)) {
@@ -44,10 +44,10 @@ function normalizePathParams(
44
44
  const origSnaked = snakify(origCamel)
45
45
  const origDepluralized = depluralize(origSnaked)
46
46
  const renamedParam = params.find(
47
- (p: any) => p.orig === origSnaked || p.name === origSnaked ||
48
- p.orig === origDepluralized || p.name === origDepluralized
47
+ (p: any) => p.or === origSnaked || p.n === origSnaked ||
48
+ p.or === origDepluralized || p.n === origDepluralized
49
49
  )
50
- if (renamedParam) return '{' + renamedParam.name + '}'
50
+ if (renamedParam) return '{' + renamedParam.n + '}'
51
51
  }
52
52
  }
53
53
  }
@@ -100,8 +100,8 @@ const TestDirect = cmp(function TestDirect(props: any) {
100
100
  const listOp = entity.op?.list
101
101
 
102
102
  const loadPoint = loadOp?.points?.[0]
103
- const loadPath = loadPoint ? normalizePathParams(pointParts(loadPoint), loadPoint?.args?.params || [], loadPoint?.rename?.param) : ''
104
- const allLoadParams = loadPoint?.args?.params || []
103
+ const loadPath = loadPoint ? normalizePathParams(pointParts(loadPoint), loadPoint?.g?.params || [], loadPoint?.r?.param) : ''
104
+ const allLoadParams = loadPoint?.g?.params || []
105
105
  // Some upstream OpenAPI specs declare a parameter as `in: path` even when
106
106
  // that path has no `{name}` placeholder for it. Only path params that
107
107
  // actually appear in the URL template should drive direct-test path-param
@@ -113,7 +113,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
113
113
  _pathPlaceholders.add(part.slice(1, -1))
114
114
  }
115
115
  }
116
- const _renameMap = (loadPoint?.rename?.param || {}) as Record<string, string>
116
+ const _renameMap = (loadPoint?.r?.param || {}) as Record<string, string>
117
117
  const _renamedPlaceholders = new Set<string>()
118
118
  for (const ph of _pathPlaceholders) {
119
119
  _renamedPlaceholders.add(ph)
@@ -122,25 +122,25 @@ const TestDirect = cmp(function TestDirect(props: any) {
122
122
  }
123
123
  }
124
124
  const loadParams = allLoadParams.filter((p: any) =>
125
- _renamedPlaceholders.has(p.name) || _renamedPlaceholders.has(p.orig))
125
+ _renamedPlaceholders.has(p.n) || _renamedPlaceholders.has(p.or))
126
126
 
127
127
  const listPoint = listOp?.points?.[0]
128
- const listPath = listPoint ? normalizePathParams(pointParts(listPoint), listPoint?.args?.params || [], listPoint?.rename?.param) : ''
129
- const listParams = listPoint?.args?.params || []
128
+ const listPath = listPoint ? normalizePathParams(pointParts(listPoint), listPoint?.g?.params || [], listPoint?.r?.param) : ''
129
+ const listParams = listPoint?.g?.params || []
130
130
 
131
131
  // Required query params with spec-provided examples — needed in live mode.
132
- const loadQuery = loadPoint?.args?.query || []
132
+ const loadQuery = loadPoint?.g?.query || []
133
133
  const loadLiveQueryEntries = loadQuery
134
- .filter((q: any) => q.reqd && undefined !== q.example && null !== q.example)
134
+ .filter((q: any) => q.r && undefined !== q.ex && null !== q.ex)
135
135
  const loadLiveQueryLines = loadLiveQueryEntries
136
- .map((q: any) => ` $query["${q.name}"] = ${JSON.stringify(q.example)};`)
136
+ .map((q: any) => ` $query["${q.n}"] = ${JSON.stringify(q.ex)};`)
137
137
  .join('\n')
138
138
 
139
139
  const loadAllHaveExamples =
140
140
  loadParams.length > 0 &&
141
- loadParams.every((p: any) => undefined !== p.example && null !== p.example)
141
+ loadParams.every((p: any) => undefined !== p.ex && null !== p.ex)
142
142
  const loadExampleLines = loadAllHaveExamples
143
- ? loadParams.map((p: any) => ` $params["${p.name}"] = ${JSON.stringify(p.example)};`).join('\n')
143
+ ? loadParams.map((p: any) => ` $params["${p.n}"] = ${JSON.stringify(p.ex)};`).join('\n')
144
144
  : ''
145
145
 
146
146
  const entidEnvVar = `${PROJECTNAME}_TEST_${envToken(entity.name)}_ENTID`
@@ -163,9 +163,9 @@ class ${entity.Name}DirectTest extends TestCase
163
163
 
164
164
  if (hasList && listPoint) {
165
165
  const listLiveIdKeys: string[] = listParams.map((lp: any) => {
166
- return lp.name === 'id'
166
+ return lp.n === 'id'
167
167
  ? entity.name + '01'
168
- : lp.name.replace(/_id$/, '') + '01'
168
+ : lp.n.replace(/_id$/, '') + '01'
169
169
  })
170
170
  const listSkipBlock = listLiveIdKeys.length > 0
171
171
  ? ` if ($setup["live"]) {
@@ -197,13 +197,13 @@ ${listSkipBlock} $client = $setup["client"];
197
197
  Content(` $params = [];
198
198
  `)
199
199
  for (const lp of listParams) {
200
- const key = lp.name === 'id'
200
+ const key = lp.n === 'id'
201
201
  ? entity.name + '01'
202
- : lp.name.replace(/_id$/, '') + '01'
202
+ : lp.n.replace(/_id$/, '') + '01'
203
203
  Content(` if ($setup["live"]) {
204
- $params["${lp.name}"] = $setup["idmap"]["${key}"];
204
+ $params["${lp.n}"] = $setup["idmap"]["${key}"];
205
205
  } else {
206
- $params["${lp.name}"] = "direct01";
206
+ $params["${lp.n}"] = "direct01";
207
207
  }
208
208
  `)
209
209
  }
@@ -289,7 +289,7 @@ ${loadSkipBlock} $client = $setup["client"];
289
289
  Content(` } else {
290
290
  `)
291
291
  for (let i = 0; i < loadParams.length; i++) {
292
- Content(` $params["${loadParams[i].name}"] = "direct0${i + 1}";
292
+ Content(` $params["${loadParams[i].n}"] = "direct0${i + 1}";
293
293
  `)
294
294
  }
295
295
  Content(` }
@@ -304,7 +304,7 @@ ${loadLiveQueryLines}
304
304
  Content(` if (!$setup["live"]) {
305
305
  `)
306
306
  for (let i = 0; i < loadParams.length; i++) {
307
- Content(` $params["${loadParams[i].name}"] = "direct0${i + 1}";
307
+ Content(` $params["${loadParams[i].n}"] = "direct0${i + 1}";
308
308
  `)
309
309
  }
310
310
  Content(` }