diff options
author | 2021-11-02 23:10:43 -0700 | |
---|---|---|
committer | 2021-11-02 23:10:43 -0700 | |
commit | bffe8e918b141a52e8b9792840a1fbb163aac2d4 (patch) | |
tree | 5fc65a8cc9a6415e855069f7ac360489bb7216b7 | |
parent | 92e5fe9fd5b31d8b0ac8327a221b20dd03218502 (diff) | |
parent | 1844212f343790e83fad63e3310e22c66ed5ff00 (diff) | |
download | bun-bffe8e918b141a52e8b9792840a1fbb163aac2d4.tar.gz bun-bffe8e918b141a52e8b9792840a1fbb163aac2d4.tar.zst bun-bffe8e918b141a52e8b9792840a1fbb163aac2d4.zip |
Merge branch 'jarred/package-mapper' of github.com:Jarred-Sumner/bun into jarred/package-mapperjarred/package-mapper
-rw-r--r-- | src/resolver/dir_info.zig | 2 | ||||
-rw-r--r-- | src/resolver/package_json.zig | 21 | ||||
-rw-r--r-- | src/resolver/resolver.zig | 21 | ||||
-rw-r--r-- | src/resolver/workspace.zig | 8 |
4 files changed, 44 insertions, 8 deletions
diff --git a/src/resolver/dir_info.zig b/src/resolver/dir_info.zig index 396413327..f27baa922 100644 --- a/src/resolver/dir_info.zig +++ b/src/resolver/dir_info.zig @@ -5,6 +5,7 @@ const DirInfo = @This(); const Fs = @import("../fs.zig"); const TSConfigJSON = @import("./tsconfig_json.zig").TSConfigJSON; const PackageJSON = @import("./package_json.zig").PackageJSON; +const Workspace = @import("./workspace.zig").Workspace; pub const Index = allocators.IndexType; @@ -17,6 +18,7 @@ parent: Index = allocators.NotFound, enclosing_browser_scope: Index = allocators.NotFound, package_json_for_browser_field: ?*const PackageJSON = null, enclosing_tsconfig_json: ?*const TSConfigJSON = null, +enclosing_workspace: ?*const Workspace = null, enclosing_package_json: ?*PackageJSON = null, diff --git a/src/resolver/package_json.zig b/src/resolver/package_json.zig index 9db39ff7a..f7c6294c1 100644 --- a/src/resolver/package_json.zig +++ b/src/resolver/package_json.zig @@ -19,6 +19,7 @@ pub const MacroImportReplacementMap = std.StringArrayHashMap(string); pub const MacroMap = std.StringArrayHashMapUnmanaged(MacroImportReplacementMap); const ScriptsMap = std.StringArrayHashMap(string); +const Workspace = @import("./workspace.zig").Workspace; pub const PackageJSON = struct { pub const LoadFramework = enum { @@ -64,6 +65,8 @@ pub const PackageJSON = struct { always_bundle: []string = &.{}, macros: MacroMap = MacroMap{}, + workspace_root: bool = false, + // Present if the "browser" field is present. This field is intended to be // used by bundlers and lets you redirect the paths of certain 3rd-party // modules that don't work in the browser to other modules that shim that @@ -695,6 +698,9 @@ pub const PackageJSON = struct { } } + package_json.workspace_root = json.asProperty("workspaces") != null; + + // used by `bun run` if (include_scripts) { read_scripts: { if (json.asProperty("scripts")) |scripts_prop| { @@ -730,7 +736,6 @@ pub const PackageJSON = struct { } // TODO: side effects - // TODO: exports map if (generate_hash) { if (package_json.name.len > 0 and package_json.version.len > 0) { @@ -1029,21 +1034,23 @@ pub const ESModule = struct { name: string, subpath: string, - pub fn parse(specifier: string, subpath_buf: []u8) ?Package { - if (specifier.len == 0) return null; - var package = Package{ .name = "", .subpath = "" }; - + pub fn parseName(specifier: string) ?string { var slash = strings.indexOfCharNeg(specifier, '/'); if (!strings.startsWithChar(specifier, '@')) { slash = if (slash == -1) @intCast(i32, specifier.len) else slash; - package.name = specifier[0..@intCast(usize, slash)]; + return specifier[0..@intCast(usize, slash)]; } else { if (slash == -1) return null; const slash2 = strings.indexOfChar(specifier[@intCast(usize, slash) + 1 ..], '/') orelse specifier[@intCast(u32, slash + 1)..].len; - package.name = specifier[0 .. @intCast(usize, slash + 1) + slash2]; + return specifier[0 .. @intCast(usize, slash + 1) + slash2]; } + } + + pub fn parse(specifier: string, subpath_buf: []u8) ?Package { + if (specifier.len == 0) return null; + var package = Package{ .name = parseName(specifier) orelse return null, .subpath = "" }; if (strings.startsWith(package.name, ".") or strings.indexAnyComptime(package.name, "\\%") != null) return null; diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index 7f95dffae..06b486bb0 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -18,7 +18,7 @@ const HTTPWatcher = if (isTest) void else @import("../http.zig").Watcher; const Wyhash = std.hash.Wyhash; const ResolvePath = @import("./resolve_path.zig"); const NodeFallbackModules = @import("../node_fallbacks.zig"); - +const Workspace = @import("./workspace.zig").Workspace; const Mutex = @import("../lock.zig").Lock; const StringBoolMap = std.StringHashMap(bool); @@ -2561,6 +2561,7 @@ pub const Resolver = struct { info.package_json_for_browser_field = parent.?.package_json_for_browser_field; info.enclosing_tsconfig_json = parent.?.enclosing_tsconfig_json; info.enclosing_package_json = parent.?.package_json orelse parent.?.enclosing_package_json; + info.enclosing_workspace = parent.enclosing_workspace; // Make sure "absRealPath" is the real path of the directory (resolving any symlinks) if (!r.opts.preserve_symlinks) { @@ -2604,6 +2605,24 @@ pub const Resolver = struct { } info.enclosing_package_json = pkg; + const is_root = pkg.workspace_root or entries.hasComptimeQuery(".pnpm-workspace.yaml"); + + pkg.workspace_root = is_root; + + if (is_root) { + var workspace = r.allocator.create(Workspace) catch unreachable; + workspace.* = Workspace{ + .import_base_path = info.abs_path, + .package_json = pkg, + }; + + if (info.abs_real_path.len > 0) { + workspace.import_base_path = info.abs_real_path; + } + + info.enclosing_workspace = workspace; + } + if (r.debug_logs) |*logs| { logs.addNoteFmt("Resolved package.json in \"{s}\"", .{ path, diff --git a/src/resolver/workspace.zig b/src/resolver/workspace.zig new file mode 100644 index 000000000..938a49016 --- /dev/null +++ b/src/resolver/workspace.zig @@ -0,0 +1,8 @@ +pub const Workspace = struct { + import_base_path: string, + package_json: *PackageJSON, + + // package_path_matchers: []const string, + // package_prefixes: []const string, + +}; |