diff options
author | 2021-08-17 04:09:42 -0700 | |
---|---|---|
committer | 2021-08-17 04:09:42 -0700 | |
commit | 71943a83e6173ec73d958c27c5ac9e305d253fb4 (patch) | |
tree | 71ab3f46e97fbea000b24e52d5b531d67c8101e1 | |
parent | ca6514c77ca665cff0d3bfe00077d421af10af2e (diff) | |
download | bun-71943a83e6173ec73d958c27c5ac9e305d253fb4.tar.gz bun-71943a83e6173ec73d958c27c5ac9e305d253fb4.tar.zst bun-71943a83e6173ec73d958c27c5ac9e305d253fb4.zip |
Support implicit bun-framework- package prefix
Former-commit-id: a525b9fb31e1b806ef91e1a464a93a607f2bbe32
-rw-r--r-- | src/resolver/resolver.zig | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index db8ee6fd3..964864ba5 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -371,6 +371,7 @@ pub fn NewResolver(cache_files: bool) type { } var tracing_start: i128 = if (FeatureFlags.tracing) 0 else undefined; + pub const bunFrameworkPackagePrefix = "bun-framework-"; pub fn resolveFramework( r: *ThisResolver, package: string, @@ -379,6 +380,42 @@ pub fn NewResolver(cache_files: bool) type { comptime load_defines: bool, ) !void { + // We want to enable developers to integrate frameworks without waiting on official support. + // But, we still want the command to do the actual framework integration to be succint + // This lets users type "--use next" instead of "--use bun-framework-next" + // If they're using a local file path, we skip this. + if (isPackagePath(package)) { + var prefixed_package_buf: [512]u8 = undefined; + // Prevent the extra lookup if the package is already prefixed, i.e. avoid "bun-framework-next-bun-framework-next" + if (strings.startsWith(package, bunFrameworkPackagePrefix) or package.len + bunFrameworkPackagePrefix.len >= prefixed_package_buf.len) { + return try r._resolveFramework(package, pair, preference, load_defines); + } + + prefixed_package_buf[0..bunFrameworkPackagePrefix.len].* = bunFrameworkPackagePrefix.*; + std.mem.copy(u8, prefixed_package_buf[bunFrameworkPackagePrefix.len..], package); + return r._resolveFramework(prefixed_package_buf[0 .. bunFrameworkPackagePrefix.len + package.len], pair, preference, load_defines) catch |err| { + switch (err) { + error.ModuleNotFound => { + return try r._resolveFramework(package, pair, preference, load_defines); + }, + else => { + return err; + }, + } + }; + } + + return try r._resolveFramework(package, pair, preference, load_defines); + } + + fn _resolveFramework( + r: *ThisResolver, + package: string, + pair: *PackageJSON.FrameworkRouterPair, + comptime preference: PackageJSON.LoadFramework, + comptime load_defines: bool, + ) !void { + // TODO: make this only parse package.json once var result = try r.resolve(r.fs.top_level_dir, package, .internal); // support passing a package.json or path to a package |