aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-08-17 04:09:42 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-08-17 04:09:42 -0700
commit71943a83e6173ec73d958c27c5ac9e305d253fb4 (patch)
tree71ab3f46e97fbea000b24e52d5b531d67c8101e1
parentca6514c77ca665cff0d3bfe00077d421af10af2e (diff)
downloadbun-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.zig37
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