@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.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/target/zig.aon +9 -0
- package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +2 -2
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +2 -2
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
- package/project/.sdk/tm/go/test/omni/omni.go +8 -3
- package/project/.sdk/tm/go/test/omni/util.go +25 -4
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
- package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
- package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
- package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
- package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
- package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +3 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
- package/project/.sdk/tm/zig/Makefile +15 -1
- package/project/.sdk/tm/zig/build.zig +23 -5
- package/project/.sdk/tm/zig/core/helpers.zig +52 -11
- package/project/.sdk/tm/zig/core/mem.zig +17 -1
- package/project/.sdk/tm/zig/core/utility.zig +23 -19
- package/project/.sdk/tm/zig/feature/audit.zig +2 -2
- package/project/.sdk/tm/zig/feature/cache.zig +2 -2
- package/project/.sdk/tm/zig/feature/debug.zig +5 -5
- package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
- package/project/.sdk/tm/zig/feature/paging.zig +2 -2
- package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
- package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
- package/project/.sdk/tm/zig/feature/support.zig +3 -3
- package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
- package/project/.sdk/tm/zig/feature/test.zig +10 -5
- package/project/.sdk/tm/zig/test/fh.zig +10 -10
- package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
- package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
- package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
- package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
- package/project/sdkgen-package.json +1 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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 =>
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
-
|
|
288
|
-
|
|
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
|
|
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
|
|
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 (
|
|
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.
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
53
|
-
buf.
|
|
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 =
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
h.
|
|
160
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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) =
|
|
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 =
|
|
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 =
|
|
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();
|