aboutsummaryrefslogtreecommitdiff
path: root/src/resolver/package_json.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/resolver/package_json.zig')
-rw-r--r--src/resolver/package_json.zig21
1 files changed, 14 insertions, 7 deletions
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;