@voxgig/sdkgen 2.0.1 → 3.0.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 (394) hide show
  1. package/bin/voxgig-sdkgen +22 -2
  2. package/dist/action/doctor.d.ts +14 -0
  3. package/dist/action/doctor.js +296 -0
  4. package/dist/action/doctor.js.map +1 -0
  5. package/dist/action/feature.js +48 -9
  6. package/dist/action/feature.js.map +1 -1
  7. package/dist/action/target.d.ts +6 -1
  8. package/dist/action/target.js +134 -22
  9. package/dist/action/target.js.map +1 -1
  10. package/dist/cmp/Entity.js +5 -0
  11. package/dist/cmp/Entity.js.map +1 -1
  12. package/dist/cmp/Feature.js +2 -1
  13. package/dist/cmp/Feature.js.map +1 -1
  14. package/dist/cmp/Main.js +5 -1
  15. package/dist/cmp/Main.js.map +1 -1
  16. package/dist/cmp/ReadmeExplanation.js +1 -1
  17. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  18. package/dist/cmp/ReadmeTop.js +16 -6
  19. package/dist/cmp/ReadmeTop.js.map +1 -1
  20. package/dist/cmp/Registered.d.ts +7 -0
  21. package/dist/cmp/Registered.js +70 -0
  22. package/dist/cmp/Registered.js.map +1 -0
  23. package/dist/cmp/Test.js +3 -1
  24. package/dist/cmp/Test.js.map +1 -1
  25. package/dist/helpers/dryrun.d.ts +10 -0
  26. package/dist/helpers/dryrun.js +35 -0
  27. package/dist/helpers/dryrun.js.map +1 -0
  28. package/dist/helpers/featureSource.d.ts +13 -0
  29. package/dist/helpers/featureSource.js +156 -0
  30. package/dist/helpers/featureSource.js.map +1 -0
  31. package/dist/helpers/naming.d.ts +9 -1
  32. package/dist/helpers/naming.js +66 -2
  33. package/dist/helpers/naming.js.map +1 -1
  34. package/dist/helpers/opExample.js +23 -3
  35. package/dist/helpers/opExample.js.map +1 -1
  36. package/dist/helpers/opShape.d.ts +11 -1
  37. package/dist/helpers/opShape.js +51 -0
  38. package/dist/helpers/opShape.js.map +1 -1
  39. package/dist/helpers/packageMeta.d.ts +8 -1
  40. package/dist/helpers/packageMeta.js +141 -10
  41. package/dist/helpers/packageMeta.js.map +1 -1
  42. package/dist/helpers/stdrep.d.ts +3 -0
  43. package/dist/helpers/stdrep.js +47 -0
  44. package/dist/helpers/stdrep.js.map +1 -0
  45. package/dist/helpers/testPolicy.d.ts +2 -0
  46. package/dist/helpers/testPolicy.js +46 -0
  47. package/dist/helpers/testPolicy.js.map +1 -0
  48. package/dist/sdkgen.d.ts +15 -6
  49. package/dist/sdkgen.js +45 -4
  50. package/dist/sdkgen.js.map +1 -1
  51. package/dist/tsconfig.tsbuildinfo +1 -1
  52. package/model/sdkgen.aontu +125 -0
  53. package/package.json +8 -5
  54. package/project/.sdk/model/target/c.aontu +28 -3
  55. package/project/.sdk/model/target/clojure.aontu +24 -3
  56. package/project/.sdk/model/target/cpp.aontu +25 -3
  57. package/project/.sdk/model/target/csharp.aontu +25 -3
  58. package/project/.sdk/model/target/dart.aontu +15 -3
  59. package/project/.sdk/model/target/elixir.aontu +15 -3
  60. package/project/.sdk/model/target/go-cli.aontu +17 -1
  61. package/project/.sdk/model/target/go-mcp.aontu +17 -1
  62. package/project/.sdk/model/target/go.aontu +14 -4
  63. package/project/.sdk/model/target/haskell.aontu +24 -3
  64. package/project/.sdk/model/target/java.aontu +26 -3
  65. package/project/.sdk/model/target/js.aontu +15 -3
  66. package/project/.sdk/model/target/kotlin.aontu +26 -3
  67. package/project/.sdk/model/target/lean.aontu +25 -3
  68. package/project/.sdk/model/target/lua.aontu +15 -3
  69. package/project/.sdk/model/target/ocaml.aontu +24 -3
  70. package/project/.sdk/model/target/perl.aontu +15 -3
  71. package/project/.sdk/model/target/php.aontu +15 -3
  72. package/project/.sdk/model/target/py-data.aontu +16 -3
  73. package/project/.sdk/model/target/py.aontu +15 -3
  74. package/project/.sdk/model/target/rb.aontu +15 -3
  75. package/project/.sdk/model/target/rust.aontu +25 -3
  76. package/project/.sdk/model/target/scala.aontu +25 -3
  77. package/project/.sdk/model/target/swift.aontu +25 -3
  78. package/project/.sdk/model/target/ts.aontu +15 -3
  79. package/project/.sdk/model/target/zig.aontu +26 -3
  80. package/project/.sdk/src/cmp/c/Config_c.ts +10 -11
  81. package/project/.sdk/src/cmp/c/Entity_c.ts +5 -1
  82. package/project/.sdk/src/cmp/c/fragment/Entity.fragment.c +23 -5
  83. package/project/.sdk/src/cmp/c/fragment/EntityCreateOp.fragment.c +9 -2
  84. package/project/.sdk/src/cmp/c/fragment/EntityListOp.fragment.c +19 -2
  85. package/project/.sdk/src/cmp/c/fragment/EntityLoadOp.fragment.c +9 -2
  86. package/project/.sdk/src/cmp/c/fragment/EntityRemoveOp.fragment.c +12 -2
  87. package/project/.sdk/src/cmp/c/fragment/EntityUpdateOp.fragment.c +9 -2
  88. package/project/.sdk/src/cmp/c/fragment/Main.fragment.c +1 -0
  89. package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +6 -3
  90. package/project/.sdk/src/cmp/clojure/fragment/Entity.fragment.clj +18 -1
  91. package/project/.sdk/src/cmp/clojure/fragment/EntityCreateOp.fragment.clj +2 -2
  92. package/project/.sdk/src/cmp/clojure/fragment/EntityLoadOp.fragment.clj +2 -2
  93. package/project/.sdk/src/cmp/clojure/fragment/EntityRemoveOp.fragment.clj +12 -8
  94. package/project/.sdk/src/cmp/clojure/fragment/EntityUpdateOp.fragment.clj +2 -2
  95. package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +5 -1
  96. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +24 -11
  97. package/project/.sdk/src/cmp/cpp/fragment/EntityCreateOp.fragment.cpp +8 -2
  98. package/project/.sdk/src/cmp/cpp/fragment/EntityListOp.fragment.cpp +18 -2
  99. package/project/.sdk/src/cmp/cpp/fragment/EntityLoadOp.fragment.cpp +8 -2
  100. package/project/.sdk/src/cmp/cpp/fragment/EntityRemoveOp.fragment.cpp +11 -2
  101. package/project/.sdk/src/cmp/cpp/fragment/EntityUpdateOp.fragment.cpp +8 -2
  102. package/project/.sdk/src/cmp/csharp/Package_csharp.ts +2 -1
  103. package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +3 -3
  104. package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +6 -6
  105. package/project/.sdk/src/cmp/csharp/fragment/EntityBase.fragment.cs +38 -1
  106. package/project/.sdk/src/cmp/csharp/fragment/Main.fragment.cs +42 -33
  107. package/project/.sdk/src/cmp/dart/Config_dart.ts +6 -0
  108. package/project/.sdk/src/cmp/dart/Package_dart.ts +2 -1
  109. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +13 -2
  110. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +2 -1
  111. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +3 -3
  112. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +1 -1
  113. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +17 -6
  114. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +13 -2
  115. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +13 -2
  116. package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +3 -3
  117. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +8 -8
  118. package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +18 -1
  119. package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +9 -1
  120. package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +9 -1
  121. package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +15 -1
  122. package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +9 -1
  123. package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +8 -0
  124. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
  125. package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +2 -2
  126. package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +7 -4
  127. package/project/.sdk/src/cmp/elixir/TestEntity_elixir.ts +11 -2
  128. package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +2 -1
  129. package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +1 -0
  130. package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +2 -1
  131. package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -1
  132. package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +2 -1
  133. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +38 -8
  134. package/project/.sdk/src/cmp/go/Entity_go.ts +2 -2
  135. package/project/.sdk/src/cmp/go/Main_go.ts +4 -5
  136. package/project/.sdk/src/cmp/go/Package_go.ts +8 -5
  137. package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +2 -2
  138. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +2 -2
  139. package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +4 -2
  140. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +2 -2
  141. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +2 -2
  142. package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +2 -2
  143. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +2 -2
  144. package/project/.sdk/src/cmp/go/TestDirect_go.ts +21 -15
  145. package/project/.sdk/src/cmp/go/TestEntity_go.ts +9 -9
  146. package/project/.sdk/src/cmp/go/Test_go.ts +2 -2
  147. package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +42 -1
  148. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +4 -4
  149. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +4 -4
  150. package/project/.sdk/src/cmp/haskell/Package_haskell.ts +2 -1
  151. package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +10 -5
  152. package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +10 -8
  153. package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +14 -10
  154. package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +21 -18
  155. package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +4 -4
  156. package/project/.sdk/src/cmp/haskell/Test_haskell.ts +23 -11
  157. package/project/.sdk/src/cmp/java/Package_java.ts +2 -1
  158. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +2 -1
  159. package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +2 -2
  160. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +1 -1
  161. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +3 -3
  162. package/project/.sdk/src/cmp/java/TestDirect_java.ts +3 -3
  163. package/project/.sdk/src/cmp/java/TestEntity_java.ts +6 -6
  164. package/project/.sdk/src/cmp/java/fragment/EntityBase.fragment.java +34 -1
  165. package/project/.sdk/src/cmp/java/fragment/SdkError.fragment.java +12 -0
  166. package/project/.sdk/src/cmp/js/Main_js.ts +4 -1
  167. package/project/.sdk/src/cmp/js/Package_js.ts +7 -1
  168. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +13 -2
  169. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +2 -1
  170. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +13 -2
  171. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +13 -2
  172. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +2 -1
  173. package/project/.sdk/src/cmp/js/TestDirect_js.ts +3 -3
  174. package/project/.sdk/src/cmp/js/TestEntity_js.ts +8 -8
  175. package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +22 -1
  176. package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +9 -1
  177. package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +9 -1
  178. package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +15 -1
  179. package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +9 -1
  180. package/project/.sdk/src/cmp/js/fragment/SdkError.fragment.js +13 -0
  181. package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +2 -1
  182. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +2 -1
  183. package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +2 -2
  184. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +1 -1
  185. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +3 -3
  186. package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +3 -3
  187. package/project/.sdk/src/cmp/kotlin/TestEntity_kotlin.ts +6 -6
  188. package/project/.sdk/src/cmp/kotlin/fragment/EntityBase.fragment.kt +32 -1
  189. package/project/.sdk/src/cmp/lean/Package_lean.ts +3 -1
  190. package/project/.sdk/src/cmp/lean/Test_lean.ts +75 -21
  191. package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +9 -4
  192. package/project/.sdk/src/cmp/lua/Package_lua.ts +4 -3
  193. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +11 -3
  194. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +1 -1
  195. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +3 -3
  196. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +9 -9
  197. package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +37 -1
  198. package/project/.sdk/src/cmp/lua/fragment/SdkError.fragment.lua +12 -0
  199. package/project/.sdk/src/cmp/ocaml/EntityOperation_ocaml.ts +30 -3
  200. package/project/.sdk/src/cmp/ocaml/Entity_ocaml.ts +11 -5
  201. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +3 -1
  202. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +10 -5
  203. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +6 -2
  204. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +10 -8
  205. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +14 -13
  206. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +20 -18
  207. package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +4 -4
  208. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +8 -2
  209. package/project/.sdk/src/cmp/ocaml/TestEntity_ocaml.ts +8 -5
  210. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +2 -1
  211. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +1 -1
  212. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +3 -3
  213. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +1 -1
  214. package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +3 -3
  215. package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +6 -6
  216. package/project/.sdk/src/cmp/perl/fragment/Entity.fragment.pm +36 -1
  217. package/project/.sdk/src/cmp/php/MainEntity_php.ts +21 -16
  218. package/project/.sdk/src/cmp/php/Package_php.ts +2 -2
  219. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +6 -6
  220. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +4 -3
  221. package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +2 -2
  222. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +1 -1
  223. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +12 -12
  224. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +6 -6
  225. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +4 -4
  226. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +2 -2
  227. package/project/.sdk/src/cmp/php/TestDirect_php.ts +3 -3
  228. package/project/.sdk/src/cmp/php/TestEntity_php.ts +17 -15
  229. package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +20 -1
  230. package/project/.sdk/src/cmp/php/fragment/SdkError.fragment.php +11 -0
  231. package/project/.sdk/src/cmp/py/Package_py.ts +4 -3
  232. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +13 -2
  233. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +2 -1
  234. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +1 -1
  235. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +17 -6
  236. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +14 -3
  237. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +13 -2
  238. package/project/.sdk/src/cmp/py/TestDirect_py.ts +3 -3
  239. package/project/.sdk/src/cmp/py/TestEntity_py.ts +9 -9
  240. package/project/.sdk/src/cmp/py/Test_py.ts +4 -1
  241. package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +29 -1
  242. package/project/.sdk/src/cmp/py/fragment/SdkError.fragment.py +11 -0
  243. package/project/.sdk/src/cmp/py-data/Main_py-data.ts +2 -1
  244. package/project/.sdk/src/cmp/rb/Package_rb.ts +4 -3
  245. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +1 -1
  246. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +2 -1
  247. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +5 -5
  248. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +1 -1
  249. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +3 -3
  250. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +9 -9
  251. package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +31 -1
  252. package/project/.sdk/src/cmp/rb/fragment/SdkError.fragment.rb +10 -1
  253. package/project/.sdk/src/cmp/rust/Entity_rust.ts +5 -1
  254. package/project/.sdk/src/cmp/rust/Main_rust.ts +21 -0
  255. package/project/.sdk/src/cmp/rust/Package_rust.ts +2 -1
  256. package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +3 -3
  257. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +12 -12
  258. package/project/.sdk/src/cmp/rust/fragment/Entity.fragment.rs +18 -0
  259. package/project/.sdk/src/cmp/rust/fragment/EntityCreateOp.fragment.rs +8 -2
  260. package/project/.sdk/src/cmp/rust/fragment/EntityListOp.fragment.rs +20 -3
  261. package/project/.sdk/src/cmp/rust/fragment/EntityLoadOp.fragment.rs +8 -2
  262. package/project/.sdk/src/cmp/rust/fragment/EntityRemoveOp.fragment.rs +10 -2
  263. package/project/.sdk/src/cmp/rust/fragment/EntityUpdateOp.fragment.rs +8 -2
  264. package/project/.sdk/src/cmp/rust/fragment/SdkError.fragment.rs +10 -0
  265. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +2 -1
  266. package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +3 -3
  267. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +1 -1
  268. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +3 -3
  269. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +3 -3
  270. package/project/.sdk/src/cmp/scala/fragment/EntityBase.fragment.scala +27 -1
  271. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +2 -1
  272. package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +3 -3
  273. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +1 -1
  274. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +3 -3
  275. package/project/.sdk/src/cmp/swift/fragment/EntityBase.fragment.swift +34 -1
  276. package/project/.sdk/src/cmp/ts/EntityOperation_ts.ts +9 -1
  277. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +18 -1
  278. package/project/.sdk/src/cmp/ts/Gitignore_ts.ts +5 -2
  279. package/project/.sdk/src/cmp/ts/Main_ts.ts +4 -1
  280. package/project/.sdk/src/cmp/ts/Package_ts.ts +10 -1
  281. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +13 -2
  282. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +2 -1
  283. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +21 -6
  284. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +52 -2
  285. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +14 -3
  286. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +34 -2
  287. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +64 -43
  288. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +8 -8
  289. package/project/.sdk/src/cmp/ts/fragment/Direct.test.fragment.ts +2 -2
  290. package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +2 -2
  291. package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +25 -1
  292. package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +10 -2
  293. package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +1 -1
  294. package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +10 -2
  295. package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +27 -3
  296. package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +10 -2
  297. package/project/.sdk/src/cmp/ts/fragment/SdkError.fragment.ts +15 -0
  298. package/project/.sdk/src/cmp/zig/Entity_zig.ts +5 -1
  299. package/project/.sdk/src/cmp/zig/Package_zig.ts +3 -1
  300. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +39 -0
  301. package/project/.sdk/src/cmp/zig/fragment/EntityCreateOp.fragment.zig +2 -2
  302. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +21 -2
  303. package/project/.sdk/src/cmp/zig/fragment/EntityLoadOp.fragment.zig +2 -2
  304. package/project/.sdk/src/cmp/zig/fragment/EntityRemoveOp.fragment.zig +5 -2
  305. package/project/.sdk/src/cmp/zig/fragment/EntityUpdateOp.fragment.zig +2 -2
  306. package/project/.sdk/tm/c/VERSION +1 -1
  307. package/project/.sdk/tm/c/core/helpers.c +1 -0
  308. package/project/.sdk/tm/c/core/sdk.h +22 -6
  309. package/project/.sdk/tm/c/tests/feature_harness.h +1 -0
  310. package/project/.sdk/tm/c/tests/primary_utility_test.c +4 -1
  311. package/project/.sdk/tm/c/utility/graphql.c +1 -1
  312. package/project/.sdk/tm/c/utility/make_url.c +1 -0
  313. package/project/.sdk/tm/c/utility/param.c +1 -0
  314. package/project/.sdk/tm/clojure/VERSION +1 -1
  315. package/project/.sdk/tm/cpp/VERSION +1 -1
  316. package/project/.sdk/tm/cpp/core/types.hpp +33 -8
  317. package/project/.sdk/tm/cpp/test/pipeline_test.cpp +5 -0
  318. package/project/.sdk/tm/cpp/test/runner_support.hpp +4 -4
  319. package/project/.sdk/tm/csharp/VERSION +1 -1
  320. package/project/.sdk/tm/csharp/core/Types.cs +6 -0
  321. package/project/.sdk/tm/csharp/test/FeatureHarness.cs +396 -0
  322. package/project/.sdk/tm/csharp/test/FeatureTest.cs +7 -385
  323. package/project/.sdk/tm/csharp/test/Runner.cs +4 -4
  324. package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +4 -0
  325. package/project/.sdk/tm/dart/test/utility.dart +4 -4
  326. package/project/.sdk/tm/elixir/VERSION +1 -1
  327. package/project/.sdk/tm/elixir/lib/projectname/entity_base.ex +26 -0
  328. package/project/.sdk/tm/go/VERSION +1 -1
  329. package/project/.sdk/tm/go/core/types.go +6 -0
  330. package/project/.sdk/tm/go/test/feature_harness_test.go +361 -0
  331. package/project/.sdk/tm/go/test/feature_test.go +7 -350
  332. package/project/.sdk/tm/go/test/pipeline_test.go +6 -0
  333. package/project/.sdk/tm/go/test/runner_test.go +16 -4
  334. package/project/.sdk/tm/haskell/VERSION +1 -1
  335. package/project/.sdk/tm/haskell/src/SdkFeatures.hs +28 -5
  336. package/project/.sdk/tm/haskell/src/SdkTypes.hs +14 -5
  337. package/project/.sdk/tm/java/VERSION +1 -1
  338. package/project/.sdk/tm/java/test/RunnerSupport.java +4 -4
  339. package/project/.sdk/tm/java/utility/MakeError.java +4 -0
  340. package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +4 -0
  341. package/project/.sdk/tm/js/test/utility.js +3 -3
  342. package/project/.sdk/tm/kotlin/VERSION +1 -1
  343. package/project/.sdk/tm/kotlin/core/Utility.kt +2 -0
  344. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +3 -3
  345. package/project/.sdk/tm/lean/Makefile +25 -0
  346. package/project/.sdk/tm/lean/VERSION +1 -1
  347. package/project/.sdk/tm/lean/src/SdkUtility.lean +11 -9
  348. package/project/.sdk/tm/lean/test/TFeature.lean +27 -14
  349. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +5 -2
  350. package/project/.sdk/tm/lua/test/runner.lua +4 -4
  351. package/project/.sdk/tm/lua/utility/make_error.lua +4 -0
  352. package/project/.sdk/tm/ocaml/VERSION +1 -1
  353. package/project/.sdk/tm/ocaml/sdk_types.ml +14 -5
  354. package/project/.sdk/tm/ocaml/test/t_pipeline.ml +5 -2
  355. package/project/.sdk/tm/perl/t/runner.pm +4 -4
  356. package/project/.sdk/tm/php/VERSION +1 -1
  357. package/project/.sdk/tm/php/test/Runner.php +4 -4
  358. package/project/.sdk/tm/php/utility/MakeError.php +5 -0
  359. package/project/.sdk/tm/py/pkg/utility/make_error.py +4 -0
  360. package/project/.sdk/tm/py/test/runner.py +19 -4
  361. package/project/.sdk/tm/rb/test/runner.rb +4 -4
  362. package/project/.sdk/tm/rb/utility/make_error.rb +4 -0
  363. package/project/.sdk/tm/rust/VERSION +1 -1
  364. package/project/.sdk/tm/rust/core/types.rs +22 -6
  365. package/project/.sdk/tm/rust/tests/common/mod.rs +6 -6
  366. package/project/.sdk/tm/rust/tests/pipeline_test.rs +6 -0
  367. package/project/.sdk/tm/rust/utility/make_error.rs +4 -0
  368. package/project/.sdk/tm/scala/VERSION +1 -1
  369. package/project/.sdk/tm/swift/VERSION +1 -1
  370. package/project/.sdk/tm/ts/src/tsconfig.json +1 -0
  371. package/project/.sdk/tm/ts/src/utility/MakeErrorUtility.ts +4 -0
  372. package/project/.sdk/tm/ts/test/tsconfig.json +1 -0
  373. package/project/.sdk/tm/ts/test/utility.ts +3 -3
  374. package/project/.sdk/tm/zig/VERSION +1 -1
  375. package/src/action/doctor.ts +410 -0
  376. package/src/action/feature.ts +54 -16
  377. package/src/action/target.ts +174 -25
  378. package/src/cmp/Entity.ts +7 -0
  379. package/src/cmp/Feature.ts +3 -1
  380. package/src/cmp/Main.ts +7 -1
  381. package/src/cmp/ReadmeExplanation.ts +2 -2
  382. package/src/cmp/ReadmeTop.ts +22 -9
  383. package/src/cmp/Registered.ts +100 -0
  384. package/src/cmp/Test.ts +4 -1
  385. package/src/helpers/dryrun.ts +57 -0
  386. package/src/helpers/featureSource.ts +208 -0
  387. package/src/helpers/naming.ts +73 -2
  388. package/src/helpers/opExample.ts +19 -2
  389. package/src/helpers/opShape.ts +65 -0
  390. package/src/helpers/packageMeta.ts +163 -10
  391. package/src/helpers/stdrep.ts +56 -0
  392. package/src/helpers/testPolicy.ts +52 -0
  393. package/src/sdkgen.ts +70 -4
  394. package/project/.sdk/tm/rust/feature/mod.rs +0 -24
@@ -7,6 +7,7 @@ import {
7
7
  pkgDescription,
8
8
  keywords,
9
9
  repoInfo,
10
+ packageVersion,
10
11
  } from '@voxgig/sdkgen'
11
12
 
12
13
 
@@ -39,7 +40,7 @@ const Package = cmp(async function Package(props: any) {
39
40
  Content(`name: ${dartPackageName(model)}
40
41
  description: >-
41
42
  ${pkgDescription(model, target.name)}
42
- version: 0.0.1
43
+ version: ${packageVersion(model, target.name)}
43
44
  homepage: ${repoUrl}
44
45
  repository: ${repoUrl}
45
46
  issue_tracker: ${issuesUrl}
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName, matchArg, idLiteral } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -22,6 +22,17 @@ function dartLit(type: any, placeholder: string = 'example'): string {
22
22
 
23
23
 
24
24
  // Op method spellings + descriptions (language-agnostic wording).
25
+ // A `list()` on a NESTED entity needs its parent path params. The
26
+ // quickstart used to emit `client.Moon().list()` for an entity at
27
+ // `/planet/{planet_id}/moon`, which 404s against a live server from a
28
+ // half-built URL — indistinguishable from "no such record". The model
29
+ // already marks those params `reqd: true`; matchArg renders exactly them.
30
+ function listMatchArg(ent: any): string {
31
+ const idF = entityIdField(ent)
32
+ return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
33
+ }
34
+
35
+
25
36
  const OP_DESC: Record<string, { method: string, desc: string }> = {
26
37
  load: { method: 'load(match)', desc: 'Load a single entity by match criteria.' },
27
38
  list: { method: 'list()', desc: 'List entities, optionally matching the given criteria.' },
@@ -132,7 +143,7 @@ final ${eVar} = await client.${entity.Name}().load(${loadArg});
132
143
  Content(`#### Example: List
133
144
 
134
145
  \`\`\`dart
135
- final ${eVar}s = await client.${entity.Name}().list();
146
+ final ${eVar}s = await client.${entity.Name}().list(${listMatchArg(entity)});
136
147
  \`\`\`
137
148
 
138
149
  `)
@@ -46,7 +46,8 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
46
46
  // The op-driven test-mode line, shown only when the SDK has an entity op.
47
47
  // A direct()-only SDK (no ops anywhere) shows a direct() call instead.
48
48
  const testModeExample = primaryOp
49
- ? `// Entity ops return the bare record and throw on error.
49
+ ? `// Entity ops return the ENTITY and throws on error;
50
+ // call data() for the record.
50
51
  final ${eVar} = await client.${eName}().${primaryOp}(${testArg});
51
52
  // ${eVar} contains the mock response record
52
53
  print(${eVar});`
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isPublished, repoInfo } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isPublished, repoInfo, packageVersion } from '@voxgig/sdkgen'
3
3
 
4
4
  import { dartPackageName } from './Package_dart'
5
5
 
@@ -19,7 +19,7 @@ Or add it to your \`pubspec.yaml\`:
19
19
 
20
20
  \`\`\`yaml
21
21
  dependencies:
22
- ${pkg}: ^0.0.1
22
+ ${pkg}: ^${packageVersion(model, target.name)}
23
23
  \`\`\`
24
24
 
25
25
  `)
@@ -39,7 +39,7 @@ dependencies:
39
39
  git:
40
40
  url: ${repoUrl}
41
41
  path: ${target.name}
42
- ref: ${target.name}/v0.0.1
42
+ ref: ${target.name}/v${packageVersion(model, target.name)}
43
43
  \`\`\`
44
44
 
45
45
  Or depend on a local source checkout:
@@ -94,7 +94,7 @@ ${opRows}
94
94
 
95
95
  ### Result shape
96
96
 
97
- Entity operations return the bare result data (a \`Map\` for single-entity
97
+ Entity operations return the ENTITY (call data() for the record) (a \`Map\` for single-entity
98
98
  ops, a \`List\` of entity instances for \`list\`) and throw on error. Wrap calls
99
99
  in \`try\`/\`catch\` to handle failures.
100
100
 
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName, matchArg, idLiteral } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -10,6 +10,17 @@ import {
10
10
  import { dartPackageName } from './Package_dart'
11
11
 
12
12
 
13
+ // A `list()` on a NESTED entity needs its parent path params. The
14
+ // quickstart used to emit `client.Moon().list()` for an entity at
15
+ // `/planet/{planet_id}/moon`, which 404s against a live server from a
16
+ // half-built URL — indistinguishable from "no such record". The model
17
+ // already marks those params `reqd: true`; matchArg renders exactly them.
18
+ function listMatchArg(ent: any): string {
19
+ const idF = entityIdField(ent)
20
+ return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
21
+ }
22
+
23
+
13
24
  const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
14
25
  const { target, ctx$: { model } } = props
15
26
 
@@ -74,7 +85,7 @@ it and read each record's data via \`.data()\`.
74
85
 
75
86
  \`\`\`dart
76
87
  try {
77
- final ${eVar}s = await client.${eName}().list();
88
+ final ${eVar}s = await client.${eName}().list(${listMatchArg(exampleEntity)});
78
89
  for (final item in ${eVar}s) {
79
90
  print(item.data());
80
91
  }
@@ -108,7 +119,7 @@ try {
108
119
  Content(`### 3. Load ${neArticle} ${neName.toLowerCase()}
109
120
 
110
121
  ${neName} is nested under ${parentName}, so provide the \`${parentParam}\`.
111
- \`load()\` returns the bare record (a \`Map\`) and throws on error.
122
+ \`load()\` returns the ENTITY call data() for the record — and throws on error.
112
123
 
113
124
  \`\`\`dart
114
125
  try {
@@ -135,7 +146,7 @@ try {
135
146
 
136
147
  Content(`### 3. Load ${article} ${eName.toLowerCase()}
137
148
 
138
- \`load()\` returns the bare record (a \`Map\`) and throws on error.
149
+ \`load()\` returns the ENTITY call data() for the record — and throws on error.
139
150
 
140
151
  \`\`\`dart
141
152
  try {
@@ -167,7 +178,7 @@ try {
167
178
  return it && it.type
168
179
  }
169
180
  const idValueFor = (opname: string): string => (null != dataIdF && opnames.includes('create'))
170
- ? `created['${dataIdF}']`
181
+ ? `created.data()['${dataIdF}']`
171
182
  : dartLit(idParamType(opname), 'example_id')
172
183
 
173
184
  if (opnames.includes('create') || opnames.includes('update') || opnames.includes('remove')) {
@@ -176,7 +187,7 @@ try {
176
187
  \`\`\`dart
177
188
  `)
178
189
  if (opnames.includes('create')) {
179
- Content(`// Create — returns the bare created record (a Map)
190
+ Content(`// Create — returns the ENTITY (call data() for the record)
180
191
  final created = await client.${eName}().create({${examplePairs('create').join(', ')}});
181
192
 
182
193
  `)
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, matchArg, idLiteral } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -23,6 +23,17 @@ function dartLit(type: any, placeholder: string = 'example'): string {
23
23
  }
24
24
 
25
25
 
26
+ // A `list()` on a NESTED entity needs its parent path params. The
27
+ // quickstart used to emit `client.Moon().list()` for an entity at
28
+ // `/planet/{planet_id}/moon`, which 404s against a live server from a
29
+ // half-built URL — indistinguishable from "no such record". The model
30
+ // already marks those params `reqd: true`; matchArg renders exactly them.
31
+ function listMatchArg(ent: any): string {
32
+ const idF = entityIdField(ent)
33
+ return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
34
+ }
35
+
36
+
26
37
  const OP_SIGNATURES: Record<string, { sig: string, returns: string, desc: string }> = {
27
38
  load: {
28
39
  sig: 'load(reqmatch, [ctrl]) -> Future<dynamic>',
@@ -268,7 +279,7 @@ final result = await client.${ent.Name}().${opname}(${arg});
268
279
  }
269
280
  else if ('list' === opname) {
270
281
  Content(`\`\`\`dart
271
- final results = await client.${ent.Name}().list();
282
+ final results = await client.${ent.Name}().list(${listMatchArg(ent)});
272
283
  for (final ${eVar} in results) {
273
284
  print(${eVar}.data());
274
285
  }
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName, matchArg, idLiteral } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -23,6 +23,17 @@ function dartLit(type: any, placeholder: string = 'example'): string {
23
23
  }
24
24
 
25
25
 
26
+ // A `list()` on a NESTED entity needs its parent path params. The
27
+ // quickstart used to emit `client.Moon().list()` for an entity at
28
+ // `/planet/{planet_id}/moon`, which 404s against a live server from a
29
+ // half-built URL — indistinguishable from "no such record". The model
30
+ // already marks those params `reqd: true`; matchArg renders exactly them.
31
+ function listMatchArg(ent: any): string {
32
+ const idF = entityIdField(ent)
33
+ return matchArg('ts', ent, 'list', idF, idLiteral(ent, 'list', idF))
34
+ }
35
+
36
+
26
37
  const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
27
38
  const { target, ctx$: { model } } = props
28
39
 
@@ -55,7 +66,7 @@ Future<void> main() async {
55
66
 
56
67
  if (opnames.includes('list')) {
57
68
  Content(` // List all ${eName.toLowerCase()}s (returns a list of entities, throws on error)
58
- final ${eVar}s = await client.${eName}().list();
69
+ final ${eVar}s = await client.${eName}().list(${listMatchArg(exampleEntity)});
59
70
  for (final item in ${eVar}s) {
60
71
  print(item.data());
61
72
  }
@@ -16,7 +16,7 @@ import {
16
16
  Slot,
17
17
  cmp,
18
18
  snakify,
19
- isAuthActive,
19
+ isAuthActive, envName, envToken
20
20
  } from '@voxgig/sdkgen'
21
21
 
22
22
 
@@ -35,8 +35,8 @@ const TestDirect = cmp(function TestDirect(props: any) {
35
35
 
36
36
  const ff = projectPath('src/cmp/dart/fragment/')
37
37
 
38
- const PROJECTNAME = nom(model, 'Name').toUpperCase().replace(/[^A-Z_]/g, '_')
39
- const entidEnvVar = `${PROJECTNAME}_TEST_${nom(entity, 'NAME').replace(/[^A-Z_]/g, '_')}_ENTID`
38
+ const PROJECTNAME = envName(model)
39
+ const entidEnvVar = `${PROJECTNAME}_TEST_${envToken(entity.name)}_ENTID`
40
40
 
41
41
  const authActive = isAuthActive(model)
42
42
  const apikeyEnvEntry = authActive
@@ -23,7 +23,7 @@ import {
23
23
  Slot,
24
24
  cmp,
25
25
  each,
26
- isAuthActive,
26
+ isAuthActive, envName, envToken
27
27
  } from '@voxgig/sdkgen'
28
28
 
29
29
 
@@ -50,8 +50,8 @@ const TestEntity = cmp(function TestEntity(props: any) {
50
50
 
51
51
  const entity: ModelEntity = props.entity
52
52
 
53
- const PROJENVNAME = nom(model.const, 'NAME').replace(/[^A-Z_]/g, '_')
54
- const ENTENVNAME = nom(entity, 'NAME').replace(/[^A-Z_]/g, '_')
53
+ const PROJENVNAME = envName(model)
54
+ const ENTENVNAME = envToken(entity.name)
55
55
  const authActive = isAuthActive(model)
56
56
  const apikeyEnvEntry = authActive
57
57
  ? `\n '${PROJENVNAME}_APIKEY': 'NONE',`
@@ -333,7 +333,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
333
333
  const hasEntIdC = null != entity.id
334
334
 
335
335
  Content(`
336
- ${datavar} = await ${entvar}.create(${datavar});
336
+ ${datavar} = (await ${entvar}.create(${datavar})).data();
337
337
  `)
338
338
  if (hasEntIdC) {
339
339
  Content(` ok(null != ${datavar}['id']);
@@ -373,7 +373,7 @@ const generateList: OpGen = (ctx, step, index) => {
373
373
  })
374
374
 
375
375
  Content(`
376
- final ${listvar} = await ${entvar}.list(${matchvar});
376
+ final ${listvar} = (await ${entvar}.list(${matchvar})).map((e) => e.data()).toList();
377
377
  `)
378
378
  const allSteps = flow.step
379
379
  for (let vI = 0; vI < step.valid.length; vI++) {
@@ -460,7 +460,7 @@ const generateUpdate: OpGen = (ctx, step, index) => {
460
460
  }
461
461
 
462
462
  Content(`
463
- final ${resdatavar} = await ${entvar}.update(${updvar});
463
+ final ${resdatavar} = (await ${entvar}.update(${updvar})).data();
464
464
  `)
465
465
  if (hasEntIdU) {
466
466
  Content(` ok(${resdatavar}['id'] == ${updvar}['id']);
@@ -550,13 +550,13 @@ const generateLoad: OpGen = (ctx, step, index) => {
550
550
  if (hasEntId) {
551
551
  Content(` final ${matchvar} = <String, dynamic>{};
552
552
  ${matchvar}['id'] = ${srcdatavar}['id'];
553
- final ${datavar} = await ${entvar}.load(${matchvar});
553
+ final ${datavar} = (await ${entvar}.load(${matchvar})).data();
554
554
  ok(${datavar}['id'] == ${srcdatavar}['id']);
555
555
  `)
556
556
  }
557
557
  else {
558
558
  Content(` final ${matchvar} = <String, dynamic>{};
559
- final ${datavar} = await ${entvar}.load(${matchvar});
559
+ final ${datavar} = (await ${entvar}.load(${matchvar})).data();
560
560
  ok(null != ${datavar});
561
561
  `)
562
562
  }
@@ -43,6 +43,18 @@ class ProjectNameEntityBase {
43
43
  featureHook(entctx, 'PostConstructEntity');
44
44
  }
45
45
 
46
+ // Every operation resolves to the entity; `remove` additionally marks
47
+ // it. The instance KEEPS the data it held — a caller can still read what
48
+ // was deleted — but it is no longer a live record. See AGENTS.md.
49
+ bool _deleted = false;
50
+
51
+ void markDeleted() {
52
+ _deleted = true;
53
+ }
54
+
55
+ bool deleted() => _deleted;
56
+
57
+
46
58
  dynamic entopts() {
47
59
  return utility.struct.merge([{}, entoptsMap]);
48
60
  }
@@ -235,7 +247,12 @@ class ProjectNameEntityBase {
235
247
  if (d is Map) {
236
248
  d.forEach((k, v) => out[k.toString()] = v);
237
249
  }
238
- out[r'entity$'] = Name;
250
+ // The marker is NAMESPACED. It used to be `entity$` a short, generic
251
+ // name, and the `$`-suffix convention is not unique to sdkgen. Seneca uses
252
+ // `entity$` on its own entities to hold the canon, so an SDK record fed
253
+ // into `entize` silently overwrote it and produced entities claiming a
254
+ // canon that does not exist: no error, just wrong entities.
255
+ out[r'voxgig$entity'] = Name;
239
256
  return out;
240
257
  }
241
258
 
@@ -72,7 +72,15 @@
72
72
  }
73
73
  }
74
74
 
75
- return done(ctx);
75
+ final out = done(ctx);
76
+
77
+ // An operation resolves to the ENTITY, not the raw data — the record
78
+ // has just been absorbed into this instance and is reached through
79
+ // data(). `done` still runs: it completes the pipeline and raises on
80
+ // failure, and when throwing is disabled it hands back the error
81
+ // payload, which passes through unchanged. See AGENTS.md "Entity
82
+ // operations return ENTITIES".
83
+ return (null != ctx.result && true == ctx.result.ok) ? this : out;
76
84
  } catch (err) {
77
85
  // #PreUnexpected-Hook
78
86
 
@@ -76,7 +76,15 @@
76
76
  }
77
77
  }
78
78
 
79
- return done(ctx);
79
+ final out = done(ctx);
80
+
81
+ // An operation resolves to the ENTITY, not the raw data — the record
82
+ // has just been absorbed into this instance and is reached through
83
+ // data(). `done` still runs: it completes the pipeline and raises on
84
+ // failure, and when throwing is disabled it hands back the error
85
+ // payload, which passes through unchanged. See AGENTS.md "Entity
86
+ // operations return ENTITIES".
87
+ return (null != ctx.result && true == ctx.result.ok) ? this : out;
80
88
  } catch (err) {
81
89
  // #PreUnexpected-Hook
82
90
 
@@ -76,7 +76,21 @@
76
76
  }
77
77
  }
78
78
 
79
- return done(ctx);
79
+ final out = done(ctx);
80
+
81
+ // An operation resolves to the ENTITY, not the raw data — the record
82
+ // has just been absorbed into this instance and is reached through
83
+ // data(). `done` still runs: it completes the pipeline and raises on
84
+ // failure, and when throwing is disabled it hands back the error
85
+ // payload, which passes through unchanged. See AGENTS.md "Entity
86
+ // operations return ENTITIES".
87
+ if (null != ctx.result && true == ctx.result.ok) {
88
+ // A removed entity keeps its data but is no longer a live record.
89
+ markDeleted();
90
+ return this;
91
+ }
92
+
93
+ return out;
80
94
  } catch (err) {
81
95
  // #PreUnexpected-Hook
82
96
 
@@ -76,7 +76,15 @@
76
76
  }
77
77
  }
78
78
 
79
- return done(ctx);
79
+ final out = done(ctx);
80
+
81
+ // An operation resolves to the ENTITY, not the raw data — the record
82
+ // has just been absorbed into this instance and is reached through
83
+ // data(). `done` still runs: it completes the pipeline and raises on
84
+ // failure, and when throwing is disabled it hands back the error
85
+ // payload, which passes through unchanged. See AGENTS.md "Entity
86
+ // operations return ENTITIES".
87
+ return (null != ctx.result && true == ctx.result.ok) ? this : out;
80
88
  } catch (err) {
81
89
  // #PreUnexpected-Hook
82
90
 
@@ -11,6 +11,14 @@ class ProjectNameError extends Error {
11
11
  dynamic result;
12
12
  dynamic spec;
13
13
 
14
+ // HTTP status of the response that caused this error, or -1 when the
15
+ // request never got one. PROMOTED to the top level: it used to be
16
+ // reachable only at `err.result['status']`, so every consumer coupled
17
+ // itself to the internal shape of `result`.
18
+ int status = -1;
19
+
20
+ bool get notFound => 404 == status;
21
+
14
22
  ProjectNameError(this.code, this.message, [this.ctx]);
15
23
 
16
24
  @override
@@ -5,6 +5,7 @@ import {
5
5
  cmp,
6
6
  pkgDescription,
7
7
  repoInfo,
8
+ packageVersion,
8
9
  } from '@voxgig/sdkgen'
9
10
 
10
11
 
@@ -17,6 +18,7 @@ import type {
17
18
  // third-party runtime deps, so the SDK ships with none either.
18
19
  const Package = cmp(async function Package(props: any) {
19
20
  const ctx$ = props.ctx$
21
+ const target = props.target
20
22
  const model: Model = ctx$.model
21
23
 
22
24
  const Name = model.const.Name
@@ -32,7 +34,7 @@ const Package = cmp(async function Package(props: any) {
32
34
  def project do
33
35
  [
34
36
  app: :${app},
35
- version: "0.0.1",
37
+ version: "${packageVersion(model, target.name)}",
36
38
  elixir: "~> 1.14",
37
39
  description: ${JSON.stringify(pkgDescription(model, 'elixir'))},
38
40
  elixirc_paths: elixirc_paths(Mix.env()),
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isPublished, repoInfo } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isPublished, repoInfo, packageVersion } from '@voxgig/sdkgen'
3
3
 
4
4
 
5
5
  const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
@@ -16,7 +16,7 @@ const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
16
16
  \`\`\`elixir
17
17
  def deps do
18
18
  [
19
- {:${app}, "~> 0.0.1"}
19
+ {:${app}, "~> ${packageVersion(model, target.name)}"}
20
20
  ]
21
21
  end
22
22
  \`\`\`
@@ -55,14 +55,17 @@ IO.inspect(records)
55
55
  .filter((it: any) => !it.optional || it.name === idF)
56
56
  .sort((a: any, b: any) =>
57
57
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
58
- const loadArg = 0 < loadItems.length
59
- ? `H.deep(%{${loadItems.map((it: any) =>
58
+ // No required match keys (a singleton endpoint like /current) means no
59
+ // second argument at all — `load(ent, )` is a syntax error, and
60
+ // reqmatch defaults to nil, so load/1 is the correct call.
61
+ const loadArgs = 0 < loadItems.length
62
+ ? `${eVar}, H.deep(%{${loadItems.map((it: any) =>
60
63
  `"${it.name}" => ${elixirLit(it.type,
61
64
  it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')}})`
62
- : ''
65
+ : eVar
63
66
  Content(`
64
67
  # Load a specific ${eName.toLowerCase()} (returns the record, raises on error)
65
- record = ${Name}.Entity.${eName}.load(${eVar}, ${loadArg})
68
+ record = ${Name}.Entity.${eName}.load(${loadArgs})
66
69
  IO.inspect(record)
67
70
  `)
68
71
  }
@@ -70,8 +70,15 @@ defmodule ${Name}.${EName}EntityTest do
70
70
  test "should list records" do
71
71
  sdk = mk_sdk()
72
72
  ent = ${Name}.${ename}(sdk)
73
+ # The op resolves to one ENTITY per record; the record is reached with
74
+ # data_get. See AGENTS.md "Entity operations return ENTITIES".
73
75
  result = ${Name}.Entity.${EName}.list(ent, S.jm([]))
74
76
  assert S.islist(result)
77
+ if S.size(result) > 0 do
78
+ Enum.each(0..(S.size(result) - 1), fn i ->
79
+ assert S.ismap(${Name}.EntityBase.data_get(S.getelem(result, i)))
80
+ end)
81
+ end
75
82
  end
76
83
  `)
77
84
  }
@@ -84,7 +91,8 @@ defmodule ${Name}.${EName}EntityTest do
84
91
  if id != nil do
85
92
  sdk = mk_sdk()
86
93
  ent = ${Name}.${ename}(sdk)
87
- rec = ${Name}.Entity.${EName}.load(ent, S.jm(["id", id]))
94
+ loaded = ${Name}.Entity.${EName}.load(ent, S.jm(["id", id]))
95
+ rec = ${Name}.EntityBase.data_get(loaded)
88
96
  assert S.ismap(rec)
89
97
  assert S.getprop(rec, "id") == id
90
98
  end
@@ -97,7 +105,8 @@ defmodule ${Name}.${EName}EntityTest do
97
105
  test "should create then read back" do
98
106
  sdk = ${Name}.test(S.jm(["entity", S.jm(["${ename}", S.jm([])])]))
99
107
  ent = ${Name}.${ename}(sdk)
100
- made = ${Name}.Entity.${EName}.create(ent, S.jm(["name", "test-create"]))
108
+ created = ${Name}.Entity.${EName}.create(ent, S.jm(["name", "test-create"]))
109
+ made = ${Name}.EntityBase.data_get(created)
101
110
  assert S.ismap(made)
102
111
  assert S.getprop(made, "id") != nil
103
112
  end
@@ -26,7 +26,8 @@
26
26
  end
27
27
  end
28
28
 
29
- Pipeline.run_op(ctx, post_done)
29
+ out = Pipeline.run_op(ctx, post_done)
30
+ EntityBase.op_return(ent, ctx, out)
30
31
  end
31
32
 
32
33
  # EJECT-END
@@ -28,6 +28,7 @@
28
28
  end
29
29
  end
30
30
 
31
+ # `list` resolves to one ENTITY per record — make_result builds them.
31
32
  Pipeline.run_op(ctx, post_done)
32
33
  end
33
34
 
@@ -30,7 +30,8 @@
30
30
  end
31
31
  end
32
32
 
33
- Pipeline.run_op(ctx, post_done)
33
+ out = Pipeline.run_op(ctx, post_done)
34
+ EntityBase.op_return(ent, ctx, out)
34
35
  end
35
36
 
36
37
  # EJECT-END
@@ -30,7 +30,10 @@
30
30
  end
31
31
  end
32
32
 
33
- Pipeline.run_op(ctx, post_done)
33
+ out = Pipeline.run_op(ctx, post_done)
34
+ ent = EntityBase.op_return(ent, ctx, out)
35
+ # A removed entity keeps its data but is no longer a live record.
36
+ if ent == out, do: out, else: EntityBase.mark_deleted(ent)
34
37
  end
35
38
 
36
39
  # EJECT-END
@@ -28,7 +28,8 @@
28
28
  end
29
29
  end
30
30
 
31
- Pipeline.run_op(ctx, post_done)
31
+ out = Pipeline.run_op(ctx, post_done)
32
+ EntityBase.op_return(ent, ctx, out)
32
33
  end
33
34
 
34
35
  # EJECT-END