diff --git a/deps.zig b/deps.zig index eb6999d49ac049f5ced1ba9d850cc42ee6a296b7..bcae7d311cbf81ffc8ef7ef956f19137d4cdfe61 100644 --- a/deps.zig +++ b/deps.zig @@ -63,6 +63,8 @@ pub fn fetch(exe: *std.Build.Step.Compile) *std.Build.Step { step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-extras", "74f0ddb0a4dfa7921739b88cc381951a6b6e73ce").step); step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-git", "103f4e419c35b88f802bb8234ece1c0a9aa40c03").step); step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-inquirer", "cf43dd6c9f328073f7468b5341c69ed0bb185db3").step); + step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-intrusive-parser", "2336d8b767eb7378762e1ba63635ca44accbd2ca").step); + step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-json", "29587071de6dd3338e8eb76d4e0307af69a2d61a").step); step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-leven", "e5481b297b6023d446d835156591ba5ce88c17be").step); step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-licenses", "f46d9f774df929885eef66c733a1e2a46bf16aec").step); step.dependOn(&GitExactStep.create(b, "https://github.com/nektro/zig-licenses-text", "b01e5a2dffcc564bddd8f514fe64bab9b5c52572").step); @@ -202,6 +204,12 @@ pub const package_data = struct { .entry = "/git/github.com/nektro/zig-inquirer/cf43dd6c9f328073f7468b5341c69ed0bb185db3/src/lib.zig", .deps = &[_]*Package{ &_s84v9o48ucb0 }, }; + pub var _7l3oxw6nqqws = Package{ + .store = "/git/github.com/nektro/zig-intrusive-parser/2336d8b767eb7378762e1ba63635ca44accbd2ca", + .name = "intrusive-parser", + .entry = "/git/github.com/nektro/zig-intrusive-parser/2336d8b767eb7378762e1ba63635ca44accbd2ca/intrusive_parser.zig", + .deps = &[_]*Package{ &_f7dubzb7cyqe }, + }; pub var _96h80ezrvj7i = Package{ .store = "/git/github.com/nektro/zig-leven/e5481b297b6023d446d835156591ba5ce88c17be", .name = "leven", @@ -241,6 +249,12 @@ pub const package_data = struct { .entry = "/git/github.com/nektro/zig-git/103f4e419c35b88f802bb8234ece1c0a9aa40c03/git.zig", .deps = &[_]*Package{ &_iecwp4b3bsfm, &_f7dubzb7cyqe, &_ede2wygpe1iy }, }; + pub var _ocmr9rtohgcc = Package{ + .store = "/git/github.com/nektro/zig-json/29587071de6dd3338e8eb76d4e0307af69a2d61a", + .name = "json", + .entry = "/git/github.com/nektro/zig-json/29587071de6dd3338e8eb76d4e0307af69a2d61a/json.zig", + .deps = &[_]*Package{ &_f7dubzb7cyqe, &_ede2wygpe1iy, &_7l3oxw6nqqws }, + }; pub var _g982zq6e8wsv = Package{ .store = "/git/github.com/nektro/zig-yaml/0d17fb99cba338aedc1abac12d78d5e5f04f0b6b", .name = "yaml", @@ -266,7 +280,7 @@ pub const package_data = struct { pub var _89ujp8gq842x = Package{ .name = "zigmod", .entry = "/../..//src/lib.zig", - .deps = &[_]*Package{ &_g982zq6e8wsv, &_s84v9o48ucb0, &_2ta738wrqbaq, &_0npcrzfdlrvk, &_ejw82j2ipa0e, &_2ovav391ivak, &_c1xirp1ota5p, &_u7sysdckdymi, &_iecwp4b3bsfm, &_f7dubzb7cyqe, &_0k64oe2nuzvj }, + .deps = &[_]*Package{ &_g982zq6e8wsv, &_s84v9o48ucb0, &_2ta738wrqbaq, &_0npcrzfdlrvk, &_ejw82j2ipa0e, &_2ovav391ivak, &_c1xirp1ota5p, &_u7sysdckdymi, &_iecwp4b3bsfm, &_f7dubzb7cyqe, &_0k64oe2nuzvj, &_ocmr9rtohgcc }, }; pub var _root = Package{ }; diff --git a/licenses.txt b/licenses.txt index 9d22617fada8f4fc1d81560e1710c4e0166abb5f..0cac1fe1c87f4684b1e191e9ee7740a4b6526f2f 100644 --- a/licenses.txt +++ b/licenses.txt @@ -10,6 +10,7 @@ MIT: - git https://github.com/nektro/zig-extras - git https://github.com/nektro/zig-git - git https://github.com/nektro/zig-inquirer +- git https://github.com/nektro/zig-json - git https://github.com/nektro/zig-leven - git https://github.com/nektro/zig-licenses - git https://github.com/nektro/zig-licenses-text @@ -19,3 +20,7 @@ MIT: - git https://github.com/truemedian/hzzp - git https://github.com/ziglibs/known-folders - git https://github.com/yaml/libyaml + +MPL-2.0: += https://spdx.org/licenses/MPL-2.0 +- git https://github.com/nektro/zig-intrusive-parser diff --git a/src/cmd/aq.zig b/src/cmd/aq.zig index c764373e93c5376698a29e348e6600c25b3fb4b1..d77326e411939baa36ed94f6fcd0833b4acfaf21 100644 --- a/src/cmd/aq.zig +++ b/src/cmd/aq.zig @@ -3,6 +3,7 @@ const string = []const u8; const gpa = std.heap.c_allocator; const zfetch = @import("zfetch"); const extras = @import("extras"); +const json = @import("json"); const u = @import("./../util/index.zig"); @@ -43,7 +44,7 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { u.fail("unknown command \"{s}\" for \"zigmod aq\"", .{args[0]}); } -pub fn server_fetch(url: string) !std.json.Parsed(std.json.Value) { +pub fn server_fetch(url: string) !json.Document { const req = try zfetch.Request.init(gpa, url, null); defer req.deinit(); @@ -53,13 +54,13 @@ pub fn server_fetch(url: string) !std.json.Parsed(std.json.Value) { try req.do(.GET, headers, null); - const r = req.reader(); - const body_content = try r.readAllAlloc(gpa, std.math.maxInt(usize)); - const val = try extras.parse_json(gpa, body_content); + const doc = try json.parse(gpa, "", req.reader(), .{ .support_trailing_commas = true, .maximum_depth = 100 }); + doc.acquire(); + defer doc.release(); - if (val.value.object.get("message")) |msg| { - std.log.err("server: {s}", .{msg.string}); + if (doc.root.object().getS("message")) |msg| { + std.log.err("server: {s}", .{msg}); return error.AquilaBadResponse; } - return val; + return doc; } diff --git a/src/cmd/aquila/add.zig b/src/cmd/aquila/add.zig index 88b14cc4e4863050d2438d89e82be397906f0ce5..cb80a69398d9c3c06d20f1dd2e00d346b2f903f2 100644 --- a/src/cmd/aquila/add.zig +++ b/src/cmd/aquila/add.zig @@ -18,11 +18,13 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { pub fn do(dir: std.fs.Dir, pkg_id: string) !string { const url = try std.mem.join(gpa, "/", &.{ aq.server_root, pkg_id }); - const val = try aq.server_fetch(url); + const doc = try aq.server_fetch(url); + doc.acquire(); + defer doc.release(); const pkg_url = try std.fmt.allocPrint(gpa, "https://{s}/{s}", .{ - val.value.object.get("repo").?.object.get("domain").?.string, - val.value.object.get("package").?.object.get("remote_name").?.string, + doc.root.object().getO("repo").?.getS("domain").?, + doc.root.object().getO("package").?.getS("remote_name").?, }); const m = try zigmod.ModFile.from_dir(gpa, dir); diff --git a/src/cmd/aquila/showjson.zig b/src/cmd/aquila/showjson.zig index 1aab53f542387db2b9d16d545c9b25559667ea62..68a3bfb2d7b1472d6ae2f5995f2c3a2916c73757 100644 --- a/src/cmd/aquila/showjson.zig +++ b/src/cmd/aquila/showjson.zig @@ -12,7 +12,9 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { const out = std.io.getStdOut().writer(); const url = try std.mem.join(gpa, "/", &.{ aq.server_root, args[0] }); - const val = try aq.server_fetch(url); + const doc = try aq.server_fetch(url); + doc.acquire(); + defer doc.release(); - try out.print("{}\n", .{val}); + try out.print("{}\n", .{doc}); } diff --git a/src/cmd/zpm.zig b/src/cmd/zpm.zig index 846afb3818f61a0e4bab9ed68c2dd415c373e6e5..bdbabf9a40e71ef029dccffa3fd1be560b3e0988 100644 --- a/src/cmd/zpm.zig +++ b/src/cmd/zpm.zig @@ -3,6 +3,7 @@ const string = []const u8; const gpa = std.heap.c_allocator; const zfetch = @import("zfetch"); const extras = @import("extras"); +const json = @import("json"); const u = @import("./../util/index.zig"); @@ -26,7 +27,7 @@ pub const Package = struct { root_file: string, description: string, source: u32, - links: []const ?string, + links: []const string, }; pub fn execute(self_name: []const u8, args: [][]u8) !void { @@ -55,60 +56,54 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { u.fail("unknown command \"{s}\" for \"zigmod zpm\"", .{args[0]}); } -pub fn server_fetch(url: string) !std.json.Parsed(std.json.Value) { +pub fn server_fetch(url: string) !json.Document { const req = try zfetch.Request.init(gpa, url, null); defer req.deinit(); try req.do(.GET, null, null); - const r = req.reader(); - const body_content = try r.readAllAlloc(gpa, std.math.maxInt(usize)); - return extras.parse_json(gpa, body_content); + return json.parse(gpa, "", req.reader(), .{ .support_trailing_commas = true, .maximum_depth = 100 }); } pub fn server_fetchArray(url: string) ![]const Package { - const val = try server_fetch(url); + const doc = try server_fetch(url); + doc.acquire(); + defer doc.release(); var list = std.ArrayList(Package).init(gpa); errdefer list.deinit(); - for (val.value.array.items) |item| { - if (get(item, "root_file") == null) continue; + for (doc.root.array()) |item| { + const obj = item.object(); + if (obj.getS("root_file") == null) continue; try list.append(Package{ - .name = item.object.get("name").?.string, - .author = item.object.get("author").?.string, - .description = item.object.get("description").?.string, - .tags = try valueStrArray(item.object.get("tags").?.array.items), - .git = item.object.get("git").?.string, - .root_file = item.object.get("root_file").?.string, - .source = @intCast(item.object.get("source").?.integer), - .links = try valueLinks(item.object.get("links").?), + .name = obj.getS("name").?, + .author = obj.getS("author").?, + .description = obj.getS("description").?, + .tags = try valueStrArray(obj.getA("tags").?), + .git = obj.getS("git").?, + .root_file = obj.getS("root_file").?, + .source = obj.getN("source").?.get(u32), + .links = try valueLinks(obj.getO("links").?), }); } return list.toOwnedSlice(); } -fn valueStrArray(vals: []std.json.Value) ![]string { +fn valueStrArray(vals: json.Array) ![]string { var list = std.ArrayList(string).init(gpa); errdefer list.deinit(); for (vals) |item| { - if (item != .string) continue; - try list.append(item.string); + if (item.v() != .string) continue; + try list.append(item.string()); } return list.toOwnedSlice(); } -fn valueLinks(vals: std.json.Value) ![]?string { - var list = std.ArrayList(?string).init(gpa); +fn valueLinks(vals: json.ObjectIndex) ![]string { + var list = std.ArrayList(string).init(gpa); errdefer list.deinit(); - if (get(vals, "github")) |x| try list.append(x.string); - if (get(vals, "aquila")) |x| try list.append(x.string); - if (get(vals, "astrolabe")) |x| try list.append(x.string); + if (vals.getS("github")) |x| try list.append(x); + if (vals.getS("aquila")) |x| try list.append(x); + if (vals.getS("astrolabe")) |x| try list.append(x); return list.toOwnedSlice(); } - -fn get(obj: std.json.Value, key: string) ?std.json.Value { - const v = obj.object.get(key); - if (v == null) return null; - if (v.? == .null) return null; - return v.?; -} diff --git a/src/cmd/zpm/showjson.zig b/src/cmd/zpm/showjson.zig index e6710245feb4a60797a9eb37e5c49dfd4b59a5ef..dbbef7e1e7ff47b07a7c5d837a2575cb81e8ddd7 100644 --- a/src/cmd/zpm/showjson.zig +++ b/src/cmd/zpm/showjson.zig @@ -12,7 +12,9 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { const out = std.io.getStdOut().writer(); const url = try std.mem.join(gpa, "/", &.{ zpm.server_root, args[0] }); - const val = try zpm.server_fetch(url); + const doc = try zpm.server_fetch(url); + doc.acquire(); + defer doc.release(); - try out.print("{}\n", .{val}); + try out.print("{}\n", .{doc}); } diff --git a/src/cmd/zpm/tags.zig b/src/cmd/zpm/tags.zig index 82b0c683cac0ed3d7016a5f325e3d8955f1f8b9b..a798a15a002135f138e389a9ddf520e5c0233b54 100644 --- a/src/cmd/zpm/tags.zig +++ b/src/cmd/zpm/tags.zig @@ -14,12 +14,14 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { const out = std.io.getStdOut().writer(); const url = try std.mem.join(gpa, "/", &.{ zpm.server_root, "tags" }); - const val = try zpm.server_fetch(url); + const doc = try zpm.server_fetch(url); + doc.acquire(); + defer doc.release(); const name_col_width = blk: { var w: usize = 4; - for (val.value.array.items) |tag| { - const len = tag.object.get("name").?.string.len; + for (doc.root.array()) |tag| { + const len = tag.object().getS("name").?.len; if (len > w) { w = len; } @@ -31,11 +33,11 @@ pub fn execute(self_name: []const u8, args: [][]u8) !void { try print_c_n(out, ' ', name_col_width - 4); try out.writeAll("DESCRIPTION\n"); - for (val.value.array.items) |tag| { - const name = tag.object.get("name").?.string; + for (doc.root.array()) |tag| { + const name = tag.object().getS("name").?; try out.writeAll(name); try print_c_n(out, ' ', name_col_width - name.len); - try out.writeAll(tag.object.get("description").?.string); + try out.writeAll(tag.object().getS("description").?); try out.writeAll("\n"); } } diff --git a/src/util/modfile.zig b/src/util/modfile.zig index d5ce967013841afa07ac88910e8ec7c032678f91..f7adf0a3a4cd00f6ffc572d266d17f5f7796c333 100644 --- a/src/util/modfile.zig +++ b/src/util/modfile.zig @@ -90,7 +90,6 @@ pub const ModFile = struct { var dtype: string = undefined; var path: string = undefined; var version: ?string = null; - var name = item.mapping.get_string("name") orelse ""; var main = item.mapping.get_string("main") orelse ""; if (item.mapping.get("src")) |val| { @@ -112,10 +111,6 @@ pub const ModFile = struct { } const dep_type = std.meta.stringToEnum(zigmod.Dep.Type, dtype).?; if (dep_type == .local) { - if (path.len > 0) { - name = path; - path = ""; - } if (version.?.len > 0) { main = version.?; version = ""; @@ -129,7 +124,7 @@ pub const ModFile = struct { .type = dep_type, .path = path, .id = id, - .name = name, + .name = item.mapping.get_string("name") orelse "", .main = main, .version = version.?, .c_include_dirs = try item.mapping.get_string_array(alloc, "c_include_dirs"), @@ -142,6 +137,7 @@ pub const ModFile = struct { .keep = std.mem.eql(u8, "true", item.mapping.get_string("keep") orelse ""), .for_build = for_build, }); + // const d = &dep_list.getLast(); } } } diff --git a/zig.mod b/zig.mod index aabb8a3640f0073dac4e10fdbe59316625aead45..3458c2ae4cf6b903c9e79913c18a6a687072ea72 100644 --- a/zig.mod +++ b/zig.mod @@ -16,6 +16,7 @@ dependencies: - src: git https://github.com/nektro/zig-time - src: git https://github.com/nektro/zig-extras - src: git https://github.com/nektro/zig-git + - src: git https://github.com/nektro/zig-json root_dependencies: - src: git https://github.com/marlersoft/zigwin32 diff --git a/zigmod.lock b/zigmod.lock index a7fc703213f34fe138e88d16a9e8cc87017b2745..aac7c26a42cd4de0b2cf2027a28ca5009ddf41b3 100644 --- a/zigmod.lock +++ b/zigmod.lock @@ -8,6 +8,8 @@ git https://github.com/nektro/zig-detect-license commit-3ff57d0681b7bd7f8ca9bd09 git https://github.com/nektro/zig-extras commit-74f0ddb0a4dfa7921739b88cc381951a6b6e73ce git https://github.com/nektro/zig-git commit-103f4e419c35b88f802bb8234ece1c0a9aa40c03 git https://github.com/nektro/zig-inquirer commit-cf43dd6c9f328073f7468b5341c69ed0bb185db3 +git https://github.com/nektro/zig-intrusive-parser commit-2336d8b767eb7378762e1ba63635ca44accbd2ca +git https://github.com/nektro/zig-json commit-29587071de6dd3338e8eb76d4e0307af69a2d61a git https://github.com/nektro/zig-leven commit-e5481b297b6023d446d835156591ba5ce88c17be git https://github.com/nektro/zig-licenses commit-f46d9f774df929885eef66c733a1e2a46bf16aec git https://github.com/nektro/zig-licenses-text commit-b01e5a2dffcc564bddd8f514fe64bab9b5c52572