@voxgig/sdkgen 4.8.3 → 4.9.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 (201) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/package.json +1 -1
  3. package/project/.sdk/model/target/zig.aon +9 -0
  4. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  5. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  6. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  7. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  8. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  9. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  10. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  11. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  12. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  13. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  14. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  15. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  16. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  17. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  18. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  19. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  20. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  21. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  22. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +2 -2
  23. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +2 -2
  24. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +2 -2
  25. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  26. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  27. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  28. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  29. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  30. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  31. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  32. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  33. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  34. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  35. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  36. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  37. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  38. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  39. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  40. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  41. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  42. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  43. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
  44. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  45. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  46. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  47. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  48. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  49. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
  50. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
  51. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
  52. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  53. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  54. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  55. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
  56. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
  57. package/project/.sdk/tm/go/test/omni/omni.go +8 -3
  58. package/project/.sdk/tm/go/test/omni/util.go +25 -4
  59. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  60. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  61. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  62. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  63. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  64. package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
  65. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  66. package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
  67. package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
  68. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  69. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  70. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  71. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  72. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +2 -2
  73. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  74. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  75. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  76. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  77. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  78. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  79. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  80. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  81. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  82. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  83. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  84. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  85. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  86. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  87. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  88. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  89. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  90. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  91. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  92. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  93. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  94. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  95. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  96. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  97. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  98. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  99. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  100. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  101. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +3 -1
  102. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  103. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
  104. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  105. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  106. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  107. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  108. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
  109. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  110. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
  111. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  112. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  113. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  114. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  115. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
  116. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  117. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  118. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
  119. package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
  120. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  121. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  122. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  123. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  124. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  125. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  126. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  127. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  128. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  129. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  130. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  131. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  132. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  133. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  134. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  135. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  136. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  137. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  138. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  139. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  140. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  141. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  142. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  143. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  144. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  145. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  146. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  147. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  148. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  149. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  150. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  151. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  152. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  153. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  154. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  155. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  156. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  157. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  158. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  159. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  160. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  161. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  162. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  163. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  164. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  165. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  166. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  167. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  168. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  169. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  170. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
  171. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  172. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  173. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  174. package/project/.sdk/tm/zig/Makefile +15 -1
  175. package/project/.sdk/tm/zig/build.zig +23 -5
  176. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  177. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  178. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  179. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  180. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  181. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  182. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  183. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  184. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  185. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  186. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  187. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  188. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  189. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  190. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  191. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  192. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  193. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  194. package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
  195. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  196. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  197. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  198. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  199. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  200. package/project/sdkgen-package.json +1 -1
  201. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -465
@@ -252,11 +252,11 @@ pub fn feature_add_util(ctx: *Context, f: Feature) void {
252
252
  while (i < feats.items.len) : (i += 1) {
253
253
  const nm = feats.items[i].name();
254
254
  if (before.len != 0 and std.mem.eql(u8, before, nm)) {
255
- feats.insert(i, f) catch {};
255
+ feats.insert(h.A(), i, f) catch {};
256
256
  return;
257
257
  }
258
258
  if (after.len != 0 and std.mem.eql(u8, after, nm)) {
259
- feats.insert(i + 1, f) catch {};
259
+ feats.insert(h.A(), i + 1, f) catch {};
260
260
  return;
261
261
  }
262
262
  if (replace.len != 0 and std.mem.eql(u8, replace, nm)) {
@@ -266,14 +266,14 @@ pub fn feature_add_util(ctx: *Context, f: Feature) void {
266
266
  }
267
267
  }
268
268
  }
269
- client.features.append(f) catch {};
269
+ client.features.append(h.A(), f) catch {};
270
270
  }
271
271
 
272
272
  pub fn feature_hook_util(ctx: *Context, name: []const u8) void {
273
273
  const client = ctx.client orelse return;
274
274
  // Snapshot so a hook that mutates the feature set is safe to iterate.
275
- var snap = std.ArrayList(Feature).init(h.A());
276
- for (client.features.items) |f| snap.append(f) catch {};
275
+ var snap: std.ArrayList(Feature) = .empty;
276
+ for (client.features.items) |f| snap.append(h.A(), f) catch {};
277
277
  for (snap.items) |f| f.dispatch(name, ctx);
278
278
  }
279
279
 
@@ -441,11 +441,11 @@ pub fn make_options_util(ctx: *Context) Value {
441
441
  else => "SDK",
442
442
  };
443
443
 
444
- var out = std.ArrayList(u8).init(h.A());
444
+ var out: std.ArrayList(u8) = .empty;
445
445
  var i: usize = 0;
446
446
  while (i < base.len) {
447
447
  if ('{' != base[i]) {
448
- out.append(base[i]) catch {};
448
+ out.append(h.A(), base[i]) catch {};
449
449
  i += 1;
450
450
  continue;
451
451
  }
@@ -454,7 +454,7 @@ pub fn make_options_util(ctx: *Context) Value {
454
454
  j += 1;
455
455
  }
456
456
  if (j >= base.len or '}' != base[j] or j == i + 1) {
457
- out.append(base[i]) catch {};
457
+ out.append(h.A(), base[i]) catch {};
458
458
  i += 1;
459
459
  continue;
460
460
  }
@@ -465,8 +465,8 @@ pub fn make_options_util(ctx: *Context) Value {
465
465
  };
466
466
  if (0 == val.len) {
467
467
  if (testmode) {
468
- out.appendSlice("test-") catch {};
469
- out.appendSlice(name) catch {};
468
+ out.appendSlice(h.A(), "test-") catch {};
469
+ out.appendSlice(h.A(), name) catch {};
470
470
  } else {
471
471
  std.debug.panic(
472
472
  "{s}: the server variable '{s}' is required: the API " ++
@@ -476,11 +476,11 @@ pub fn make_options_util(ctx: *Context) Value {
476
476
  );
477
477
  }
478
478
  } else {
479
- out.appendSlice(val) catch {};
479
+ out.appendSlice(h.A(), val) catch {};
480
480
  }
481
481
  i = j + 1;
482
482
  }
483
- h.setp(opts, "base", h.vstr(out.toOwnedSlice() catch base));
483
+ h.setp(opts, "base", h.vstr(out.toOwnedSlice(h.A()) catch base));
484
484
  }
485
485
  },
486
486
  else => {},
@@ -502,11 +502,11 @@ pub fn make_options_util(ctx: *Context) Value {
502
502
  else => "key,token,id",
503
503
  };
504
504
 
505
- var parts = std.ArrayList([]const u8).init(h.A());
505
+ var parts: std.ArrayList([]const u8) = .empty;
506
506
  var it = std.mem.splitScalar(u8, clean_keys, ',');
507
507
  while (it.next()) |p| {
508
508
  const t = std.mem.trim(u8, p, " \t");
509
- if (t.len != 0) parts.append(h.esc_re(t)) catch {};
509
+ if (t.len != 0) parts.append(h.A(), h.esc_re(t)) catch {};
510
510
  }
511
511
  const keyre = std.mem.join(h.A(), "|", parts.items) catch "";
512
512
 
@@ -516,9 +516,9 @@ pub fn make_options_util(ctx: *Context) Value {
516
516
  if (feature_order.array.data.items.len == 0) {
517
517
  const fmapv = h.getp(opts, "feature");
518
518
  if (fmapv == .object) {
519
- var names = std.ArrayList([]const u8).init(h.A());
519
+ var names: std.ArrayList([]const u8) = .empty;
520
520
  var nit = fmapv.object.iterator();
521
- while (nit.next()) |kv| names.append(kv.key_ptr.*) catch {};
521
+ while (nit.next()) |kv| names.append(h.A(), kv.key_ptr.*) catch {};
522
522
  std.mem.sort([]const u8, names.items, {}, mo_str_less);
523
523
  var has_test = false;
524
524
  for (names.items) |nm| {
@@ -1059,7 +1059,7 @@ pub fn prepare_headers_util(ctx: *Context) Value {
1059
1059
  if (h.is_noval(headers)) return h.omap();
1060
1060
 
1061
1061
  return switch (h.clone(headers)) {
1062
- .object => |_| h.clone(headers),
1062
+ .object => h.clone(headers),
1063
1063
  else => h.omap(),
1064
1064
  };
1065
1065
  }
@@ -1420,7 +1420,10 @@ pub fn transform_request_util(ctx: *Context) Value {
1420
1420
  if (h.is_noval(reqform)) return ctx.reqdata;
1421
1421
 
1422
1422
  const store = h.jo(&.{.{ "reqdata", ctx.reqdata }});
1423
- return vs.transform(h.A(), store, reqform) catch ctx.reqdata;
1423
+ // transform now reports collected injection errors beside the value; .out
1424
+ // is what it used to return on its own, errors or not.
1425
+ const tres = vs.transform(h.A(), store, reqform) catch return ctx.reqdata;
1426
+ return tres.out;
1424
1427
  }
1425
1428
 
1426
1429
  pub fn transform_response_util(ctx: *Context) Value {
@@ -1449,7 +1452,8 @@ pub fn transform_response_util(ctx: *Context) Value {
1449
1452
  .{ "resmatch", res.resmatch },
1450
1453
  });
1451
1454
 
1452
- const resdata = vs.transform(h.A(), store, resform) catch return h.vnull();
1455
+ const tres = vs.transform(h.A(), store, resform) catch return h.vnull();
1456
+ const resdata = tres.out;
1453
1457
  res.resdata = resdata;
1454
1458
  return resdata;
1455
1459
  }
@@ -32,7 +32,7 @@ pub const AuditFeature = struct {
32
32
 
33
33
  pub fn make() Feature {
34
34
  const self = h.A().create(AuditFeature) catch unreachable;
35
- self.* = .{ .records = std.ArrayList(Value).init(h.A()) };
35
+ self.* = .{ .records = .empty };
36
36
  return .{ .ptr = @ptrCast(self), .vtable = &vtable };
37
37
  }
38
38
 
@@ -73,7 +73,7 @@ pub const AuditFeature = struct {
73
73
  h.setp(record, "correlationId", h.vstr(ctx.id));
74
74
  if (ctx.result) |r| h.setp(record, "status", h.vnum(r.status));
75
75
 
76
- self.records.append(record) catch {};
76
+ self.records.append(h.A(), record) catch {};
77
77
  const max: usize = @intCast(@max(sup.fopt_int(self.options, "max", 1000), 0));
78
78
  while (self.records.items.len > max) {
79
79
  _ = self.records.orderedRemove(0);
@@ -53,7 +53,7 @@ pub const CacheFeature = struct {
53
53
  const track = h.A().create(CacheTrack) catch unreachable;
54
54
  track.* = .{
55
55
  .store = std.StringHashMap(CacheEntry).init(h.A()),
56
- .order = std.ArrayList([]const u8).init(h.A()),
56
+ .order = .empty,
57
57
  };
58
58
  self.* = .{ .track = track };
59
59
  return .{ .ptr = @ptrCast(self), .vtable = &vtable };
@@ -152,7 +152,7 @@ fn through(track: *CacheTrack, options: Value, ctx: *Context, url: []const u8, f
152
152
  const ttl = sup.fopt_int(options, "ttl", 5000);
153
153
  evict(track, options);
154
154
  track.store.put(key, .{ .expiry = now + ttl, .snapshot = snap }) catch {};
155
- track.order.append(key) catch {};
155
+ track.order.append(h.A(), key) catch {};
156
156
  track.miss += 1;
157
157
  return replay(snap);
158
158
  }
@@ -38,7 +38,7 @@ pub const DebugFeature = struct {
38
38
 
39
39
  pub fn make() Feature {
40
40
  const self = h.A().create(DebugFeature) catch unreachable;
41
- self.* = .{ .entries = std.ArrayList(Value).init(h.A()) };
41
+ self.* = .{ .entries = .empty };
42
42
  return .{ .ptr = @ptrCast(self), .vtable = &vtable };
43
43
  }
44
44
 
@@ -49,9 +49,9 @@ pub const DebugFeature = struct {
49
49
  fn redact(self: *DebugFeature, headers: Value) Value {
50
50
  const out = h.omap();
51
51
  const patterns: [][]const u8 = sup.fopt_str_list(self.options, "redact") orelse blk: {
52
- var l = std.ArrayList([]const u8).init(h.A());
53
- for (DEBUG_DEFAULT_REDACT) |p| l.append(p) catch {};
54
- break :blk l.toOwnedSlice() catch &.{};
52
+ var l: std.ArrayList([]const u8) = .empty;
53
+ for (DEBUG_DEFAULT_REDACT) |p| l.append(h.A(), p) catch {};
54
+ break :blk l.toOwnedSlice(h.A()) catch &.{};
55
55
  };
56
56
  if (headers == .object) {
57
57
  var it = headers.object.iterator();
@@ -92,7 +92,7 @@ pub const DebugFeature = struct {
92
92
  if (ctx.result) |r| h.setp(entry, "status", h.vnum(r.status));
93
93
  }
94
94
 
95
- self.entries.append(entry) catch {};
95
+ self.entries.append(h.A(), entry) catch {};
96
96
  const max: usize = @intCast(@max(sup.fopt_int(self.options, "max", 100), 0));
97
97
  while (self.entries.items.len > max) {
98
98
  _ = self.entries.orderedRemove(0);
@@ -33,7 +33,7 @@ pub const NetsimFeature = struct {
33
33
  pub fn make() Feature {
34
34
  const self = h.A().create(NetsimFeature) catch unreachable;
35
35
  const track = h.A().create(NetsimTrack) catch unreachable;
36
- track.* = .{ .applied = std.ArrayList(Value).init(h.A()) };
36
+ track.* = .{ .applied = .empty };
37
37
  self.* = .{ .track = track };
38
38
  return .{ .ptr = @ptrCast(self), .vtable = &vtable };
39
39
  }
@@ -110,7 +110,7 @@ fn pick_latency(track: *NetsimTrack, options: Value) i64 {
110
110
  }
111
111
 
112
112
  fn track_applied(track: *NetsimTrack, ctx: *Context, applied: Value) void {
113
- track.applied.append(applied) catch {};
113
+ track.applied.append(h.A(), applied) catch {};
114
114
  const calls = track.calls;
115
115
  const applied_list = h.olist();
116
116
  for (track.applied.items) |a| applied_list.array.append(a) catch {};
@@ -284,8 +284,8 @@ pub const PagingFeature = struct {
284
284
  // would send the caller back for a page that does not exist, forever.
285
285
  if (!explicit_more and (h.get_bool(paging, "hasMore") orelse false) != true and
286
286
  (!h.is_noval(h.getp(paging, "next")) or
287
- !h.is_noval(h.getp(paging, "cursor")) or
288
- !h.is_noval(h.getp(paging, "nextPage"))))
287
+ !h.is_noval(h.getp(paging, "cursor")) or
288
+ !h.is_noval(h.getp(paging, "nextPage"))))
289
289
  {
290
290
  h.setp(paging, "hasMore", h.vbool(true));
291
291
  }
@@ -9,6 +9,7 @@
9
9
 
10
10
  const std = @import("std");
11
11
  const h = @import("../core/helpers.zig");
12
+ const mem = @import("../core/mem.zig");
12
13
  const err = @import("../core/error.zig");
13
14
  const types = @import("../core/types.zig");
14
15
  const sup = @import("support.zig");
@@ -65,22 +66,22 @@ pub const ProxyFeature = struct {
65
66
  if (no_proxy_opt == null) {
66
67
  const np = first_env(&.{ "NO_PROXY", "no_proxy" });
67
68
  if (np.len != 0) {
68
- var list = std.ArrayList([]const u8).init(h.A());
69
+ var list: std.ArrayList([]const u8) = .empty;
69
70
  var it = std.mem.splitScalar(u8, np, ',');
70
- while (it.next()) |s| list.append(s) catch {};
71
- no_proxy_opt = list.toOwnedSlice() catch null;
71
+ while (it.next()) |s| list.append(h.A(), s) catch {};
72
+ no_proxy_opt = list.toOwnedSlice(h.A()) catch null;
72
73
  }
73
74
  }
74
75
  }
75
76
 
76
- var np_list = std.ArrayList([]const u8).init(h.A());
77
+ var np_list: std.ArrayList([]const u8) = .empty;
77
78
  if (no_proxy_opt) |arr| {
78
79
  for (arr) |s| {
79
80
  const trimmed = std.mem.trim(u8, s, " \t\r\n");
80
- if (trimmed.len != 0) np_list.append(trimmed) catch {};
81
+ if (trimmed.len != 0) np_list.append(h.A(), trimmed) catch {};
81
82
  }
82
83
  }
83
- const no_proxy: []const []const u8 = np_list.toOwnedSlice() catch &.{};
84
+ const no_proxy: []const []const u8 = np_list.toOwnedSlice(h.A()) catch &.{};
84
85
 
85
86
  self.track.url = url;
86
87
  self.track.no_proxy = no_proxy;
@@ -120,9 +121,15 @@ fn wrapCall(p: *anyopaque, ctx: *Context, url: []const u8, fetchdef: Value) err.
120
121
  return w.inner.invoke(ctx, url, routed);
121
122
  }
122
123
 
124
+ // Zig 0.16 has no free-standing environment lookup: the block the process was
125
+ // started with is owned by an Io implementation, and library code is expected
126
+ // to be handed one. The SDK's Io is the process-global singleton (core/mem.zig),
127
+ // and the startup code fills its environment block in, so that is where a
128
+ // `fromEnv` proxy config reads HTTP(S)_PROXY / NO_PROXY from.
123
129
  fn first_env(names: []const []const u8) []const u8 {
130
+ const environ = mem.threaded().environ.process_environ;
124
131
  for (names) |name| {
125
- if (std.process.getEnvVarOwned(h.A(), name)) |v| {
132
+ if (environ.getAlloc(h.A(), name)) |v| {
126
133
  if (v.len != 0) return v;
127
134
  } else |_| {}
128
135
  }
@@ -150,7 +157,7 @@ fn bypass(no_proxy: []const []const u8, url: []const u8) bool {
150
157
  const host = host_of(url);
151
158
  for (no_proxy) |np| {
152
159
  if (std.mem.eql(u8, np, "*")) return true;
153
- const np_trim = std.mem.trimLeft(u8, np, ".");
160
+ const np_trim = std.mem.trimStart(u8, np, ".");
154
161
  if (std.mem.eql(u8, host, np)) return true;
155
162
  const suffix = std.fmt.allocPrint(h.A(), ".{s}", .{np_trim}) catch continue;
156
163
  if (std.mem.endsWith(u8, host, suffix)) return true;
@@ -105,7 +105,7 @@ fn iterate(options: Value, resdata: Value) []Value {
105
105
 
106
106
  const items: []const Value = if (resdata == .array) resdata.array.data.items else &[_]Value{};
107
107
 
108
- var out = std.ArrayList(Value).init(h.A());
108
+ var out: std.ArrayList(Value) = .empty;
109
109
 
110
110
  if (chunk_size > 0) {
111
111
  const cs: usize = @intCast(chunk_size);
@@ -113,15 +113,15 @@ fn iterate(options: Value, resdata: Value) []Value {
113
113
  while (i < items.len) {
114
114
  if (chunk_delay > 0) sup.fopt_sleep(options, chunk_delay);
115
115
  const end = @min(i + cs, items.len);
116
- out.append(h.ja(items[i..end])) catch {};
116
+ out.append(h.A(), h.ja(items[i..end])) catch {};
117
117
  i = end;
118
118
  }
119
- return out.toOwnedSlice() catch &.{};
119
+ return out.toOwnedSlice(h.A()) catch &.{};
120
120
  }
121
121
 
122
122
  for (items) |item| {
123
123
  if (chunk_delay > 0) sup.fopt_sleep(options, chunk_delay);
124
- out.append(item) catch {};
124
+ out.append(h.A(), item) catch {};
125
125
  }
126
- return out.toOwnedSlice() catch &.{};
126
+ return out.toOwnedSlice(h.A()) catch &.{};
127
127
  }
@@ -56,11 +56,11 @@ pub fn fopt_list(options: Value, key: []const u8) Value {
56
56
  pub fn fopt_str_list(options: Value, key: []const u8) ?[][]const u8 {
57
57
  const l = h.getp(options, key);
58
58
  if (l != .array) return null;
59
- var out = std.ArrayList([]const u8).init(h.A());
59
+ var out: std.ArrayList([]const u8) = .empty;
60
60
  for (l.array.data.items) |v| {
61
- if (v == .string) out.append(v.string) catch {};
61
+ if (v == .string) out.append(h.A(), v.string) catch {};
62
62
  }
63
- return out.toOwnedSlice() catch &.{};
63
+ return out.toOwnedSlice(h.A()) catch &.{};
64
64
  }
65
65
 
66
66
  // The injectable sleep (option "sleep": a function taking ms), defaulting to
@@ -33,7 +33,7 @@ pub const TelemetryFeature = struct {
33
33
 
34
34
  pub fn make() Feature {
35
35
  const self = h.A().create(TelemetryFeature) catch unreachable;
36
- self.* = .{ .spans = std.ArrayList(Value).init(h.A()) };
36
+ self.* = .{ .spans = .empty };
37
37
  return .{ .ptr = @ptrCast(self), .vtable = &vtable };
38
38
  }
39
39
 
@@ -49,9 +49,9 @@ pub const TelemetryFeature = struct {
49
49
  }
50
50
  // Deterministic-ish sequential id; unique within a client instance.
51
51
  self.seq += 1;
52
- var buf = std.ArrayList(u8).init(h.A());
53
- buf.writer().print("{x:0>4}", .{@as(u64, @intCast(self.seq))}) catch {};
54
- while (buf.items.len < 16) buf.append('0') catch {};
52
+ var buf: std.ArrayList(u8) = .empty;
53
+ buf.print(h.A(), "{x:0>4}", .{@as(u64, @intCast(self.seq))}) catch {};
54
+ while (buf.items.len < 16) buf.append(h.A(), '0') catch {};
55
55
  const prefix: []const u8 = if (std.mem.eql(u8, kind, "trace")) "t" else "s";
56
56
  return std.fmt.allocPrint(h.A(), "{s}{s}", .{ prefix, buf.items }) catch "";
57
57
  }
@@ -73,7 +73,7 @@ pub const TelemetryFeature = struct {
73
73
  h.setp(span, "ok", h.vbool(ok));
74
74
 
75
75
  self.active_spans -= 1;
76
- self.spans.append(span) catch {};
76
+ self.spans.append(h.A(), span) catch {};
77
77
 
78
78
  const exporter = h.getp(self.options, "exporter");
79
79
  if (exporter == .function) {
@@ -153,11 +153,16 @@ fn build_args(ctx: *Context, args: Value) Value {
153
153
 
154
154
  const params_path = h.getpath(&.{ "args", "params" }, point);
155
155
  const reqd_params = vs.select(h.A(), params_path, h.jo(&.{.{ "reqd", h.vbool(true) }})) catch h.olist();
156
- const reqd = vs.transform(h.A(), reqd_params, h.ja(&.{
157
- h.vstr("`$EACH`"),
158
- h.vstr(""),
159
- h.vstr("`$KEY.name`"),
160
- })) catch h.olist();
156
+ const reqd = blk: {
157
+ // transform now reports collected injection errors beside the value;
158
+ // .out is what it used to return on its own, errors or not.
159
+ const tres = vs.transform(h.A(), reqd_params, h.ja(&.{
160
+ h.vstr("`$EACH`"),
161
+ h.vstr(""),
162
+ h.vstr("`$KEY.name`"),
163
+ })) catch break :blk h.olist();
164
+ break :blk tres.out;
165
+ };
161
166
 
162
167
  const qand = h.olist();
163
168
  const q = h.jo(&.{.{ "`$AND`", qand }});
@@ -150,12 +150,12 @@ pub const Collector = struct {
150
150
 
151
151
  fn call(p: *anyopaque, _: std.mem.Allocator, arg: Value) anyerror!Value {
152
152
  const self: *Collector = @ptrCast(@alignCast(p));
153
- self.items.append(arg) catch {};
153
+ self.items.append(h.A(), arg) catch {};
154
154
  return vnull();
155
155
  }
156
156
  pub fn new() *Collector {
157
157
  const s = h.A().create(Collector) catch unreachable;
158
- s.* = .{ .items = std.ArrayList(Value).init(h.A()) };
158
+ s.* = .{ .items = .empty };
159
159
  return s;
160
160
  }
161
161
  pub fn fn_val(self: *Collector) Value {
@@ -205,7 +205,7 @@ pub const Recorder = struct {
205
205
 
206
206
  fn call(p: *anyopaque, opctx: *Context, url: []const u8, fetchdef: Value) E!Value {
207
207
  const self: *Recorder = @ptrCast(@alignCast(p));
208
- self.calls.append(h.jo(&.{
208
+ self.calls.append(h.A(), h.jo(&.{
209
209
  .{ "url", h.vstr(url) },
210
210
  .{ "fetchdef", fetchdef },
211
211
  })) catch {};
@@ -218,7 +218,7 @@ pub const Recorder = struct {
218
218
  }
219
219
  pub fn new(reply: ?ReplyFn) *Recorder {
220
220
  const s = h.A().create(Recorder) catch unreachable;
221
- s.* = .{ .calls = std.ArrayList(Value).init(h.A()), .reply = reply };
221
+ s.* = .{ .calls = .empty, .reply = reply };
222
222
  return s;
223
223
  }
224
224
  pub fn fetcher(self: *Recorder) Fetcher {
@@ -326,19 +326,19 @@ fn strLess(_: void, a: []const u8, b: []const u8) bool {
326
326
  fn fhBuildUrl(spec: *sdk.Spec) []const u8 {
327
327
  var url = std.fmt.allocPrint(h.A(), "{s}{s}", .{ spec.base, spec.path }) catch spec.path;
328
328
  if (spec.query == .object) {
329
- var keys = std.ArrayList([]const u8).init(h.A());
329
+ var keys: std.ArrayList([]const u8) = .empty;
330
330
  var it = spec.query.object.iterator();
331
331
  while (it.next()) |kv| {
332
- if (!h.is_noval(kv.value_ptr.*)) keys.append(kv.key_ptr.*) catch {};
332
+ if (!h.is_noval(kv.value_ptr.*)) keys.append(h.A(), kv.key_ptr.*) catch {};
333
333
  }
334
334
  if (keys.items.len != 0) {
335
335
  std.mem.sort([]const u8, keys.items, {}, strLess);
336
- var qs = std.ArrayList(u8).init(h.A());
336
+ var qs: std.ArrayList(u8) = .empty;
337
337
  for (keys.items) |k| {
338
- if (qs.items.len != 0) qs.append('&') catch {};
338
+ if (qs.items.len != 0) qs.append(h.A(), '&') catch {};
339
339
  const v = h.getp(spec.query, k);
340
340
  const part = std.fmt.allocPrint(h.A(), "{s}={s}", .{ h.esc_url(k), h.esc_url(h.scalar_str(v)) }) catch "";
341
- qs.appendSlice(part) catch {};
341
+ qs.appendSlice(h.A(), part) catch {};
342
342
  }
343
343
  url = std.fmt.allocPrint(h.A(), "{s}?{s}", .{ url, qs.items }) catch url;
344
344
  }
@@ -520,7 +520,7 @@ pub fn fh_make(server: ?Fetcher, feats: []const FeatSpec) *FhHarness {
520
520
  while (it.next()) |kv| h.setp(fopts, kv.key_ptr.*, kv.value_ptr.*);
521
521
  }
522
522
  fs.feat.callInit(rootctx, fopts);
523
- client.features.append(fs.feat) catch {};
523
+ client.features.append(h.A(), fs.feat) catch {};
524
524
  }
525
525
 
526
526
  utility.feature_hook(rootctx, "PostConstruct");
@@ -37,15 +37,15 @@ fn makeAlwaysOk() Value {
37
37
  }
38
38
 
39
39
  // A deterministic sleep recorder: appends each requested ms to `sleep_log`.
40
- var sleep_log: std.ArrayList(i64) = undefined;
40
+ var sleep_log: std.ArrayList(i64) = .empty;
41
41
  var sleep_log_init = false;
42
42
  var sleep_dummy: u8 = 0;
43
43
  fn sleepRecCall(_: *anyopaque, _: std.mem.Allocator, arg: Value) anyerror!Value {
44
44
  if (!sleep_log_init) {
45
- sleep_log = std.ArrayList(i64).init(h.A());
45
+ sleep_log = .empty;
46
46
  sleep_log_init = true;
47
47
  }
48
- sleep_log.append(h.to_int(arg)) catch {};
48
+ sleep_log.append(h.A(), h.to_int(arg)) catch {};
49
49
  return vnull();
50
50
  }
51
51
  fn sleepRec() Value {
@@ -200,7 +200,7 @@ test "gotcha6: netsim conn error code" {
200
200
  test "gotcha6: netsim seeded latency is deterministic" {
201
201
  const mk = struct {
202
202
  fn build() []const i64 {
203
- sleep_log = std.ArrayList(i64).init(h.A());
203
+ sleep_log = .empty;
204
204
  sleep_log_init = true;
205
205
  const opts = h.jo(&.{
206
206
  .{ "feature", h.jo(&.{.{ "netsim", h.jo(&.{
@@ -217,7 +217,7 @@ test "gotcha6: netsim seeded latency is deterministic" {
217
217
  while (i < 4) : (i += 1) {
218
218
  _ = client.sdkUtility.fetch(ctx, "http://x", h.jo(&.{.{ "url", h.vstr("http://x") }})) catch {};
219
219
  }
220
- return sleep_log.toOwnedSlice() catch &.{};
220
+ return sleep_log.toOwnedSlice(h.A()) catch &.{};
221
221
  }
222
222
  };
223
223
  const run1 = mk.build();