diff options
| -rw-r--r-- | src/resolver/package_json.zig | 6 | ||||
| -rw-r--r-- | src/resolver/resolver.zig | 8 | ||||
| -rw-r--r-- | src/router.zig | 38 | 
3 files changed, 38 insertions, 14 deletions
| diff --git a/src/resolver/package_json.zig b/src/resolver/package_json.zig index af7e46470..d475f2761 100644 --- a/src/resolver/package_json.zig +++ b/src/resolver/package_json.zig @@ -568,10 +568,12 @@ pub const PackageJSON = struct {          input_path: string,          dirname_fd: StoredFileDescriptorType,          package_id: ?Install.PackageID, -        comptime include_scripts: bool, +        comptime include_scripts_: @Type(.EnumLiteral),          comptime include_dependencies: @Type(.EnumLiteral), -        comptime generate_hash: bool, +        comptime generate_hash_: @Type(.EnumLiteral),      ) ?PackageJSON { +        const generate_hash = generate_hash_ == .generate_hash; +        const include_scripts = include_scripts_ == .include_scripts;          // TODO: remove this extra copy          const parts = [_]string{ input_path, "package.json" }; diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index 513a4e216..1e4c19e8f 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -2106,9 +2106,9 @@ pub const Resolver = struct {                  file,                  dirname_fd,                  package_id, -                true, +                .ignore_scripts,                  if (allow_dependencies) .local else .none, -                false, +                .generate_hash,              ) orelse return null;          } else {              pkg = PackageJSON.parse( @@ -2116,9 +2116,9 @@ pub const Resolver = struct {                  file,                  dirname_fd,                  package_id, -                true, +                .include_scripts,                  if (allow_dependencies) .local else .none, -                true, +                .generate_hash,              ) orelse return null;          } diff --git a/src/router.zig b/src/router.zig index d96b32ee4..bb572c2a7 100644 --- a/src/router.zig +++ b/src/router.zig @@ -322,10 +322,18 @@ const RouteLoader = struct {          }      } -    pub fn loadAll(allocator: std.mem.Allocator, config: Options.RouteConfig, log: *Logger.Log, comptime ResolverType: type, resolver: *ResolverType, root_dir_info: *const DirInfo) Routes { +    pub fn loadAll( +        allocator: std.mem.Allocator, +        config: Options.RouteConfig, +        log: *Logger.Log, +        comptime ResolverType: type, +        resolver: *ResolverType, +        root_dir_info: *const DirInfo, +        base_dir: []const u8, +    ) Routes {          var route_dirname_len: u16 = 0; -        const relative_dir = FileSystem.instance.relative(resolver.fs.top_level_dir, config.dir); +        const relative_dir = FileSystem.instance.relative(base_dir, config.dir);          if (!strings.hasPrefixComptime(relative_dir, "..")) {              route_dirname_len = @truncate(u16, relative_dir.len + @as(usize, @boolToInt(config.dir[config.dir.len - 1] != std.fs.path.sep)));          } @@ -341,7 +349,7 @@ const RouteLoader = struct {              .route_dirname_len = route_dirname_len,          };          defer this.dedupe_dynamic.deinit(); -        this.load(ResolverType, resolver, root_dir_info); +        this.load(ResolverType, resolver, root_dir_info, base_dir);          if (this.all_routes.items.len == 0) return Routes{              .static = this.static_list,              .config = config, @@ -406,7 +414,13 @@ const RouteLoader = struct {          };      } -    pub fn load(this: *RouteLoader, comptime ResolverType: type, resolver: *ResolverType, root_dir_info: *const DirInfo) void { +    pub fn load( +        this: *RouteLoader, +        comptime ResolverType: type, +        resolver: *ResolverType, +        root_dir_info: *const DirInfo, +        base_dir: []const u8, +    ) void {          var fs = this.fs;          if (root_dir_info.getEntriesConst()) |entries| { @@ -433,6 +447,7 @@ const RouteLoader = struct {                                  ResolverType,                                  resolver,                                  dir_info, +                                base_dir,                              );                          }                      }, @@ -447,10 +462,10 @@ const RouteLoader = struct {                                  // length is extended by one                                  // entry.dir is a string with a trailing slash                                  if (comptime Environment.isDebug) { -                                    std.debug.assert(entry.dir.ptr[this.config.dir.len - 1] == '/'); +                                    std.debug.assert(entry.dir.ptr[base_dir.len - 1] == '/');                                  } -                                const public_dir = entry.dir.ptr[this.config.dir.len - 1 .. entry.dir.len]; +                                const public_dir = entry.dir.ptr[base_dir.len - 1 .. entry.dir.len];                                  if (Route.parse(                                      entry.base(), @@ -481,9 +496,10 @@ pub fn loadRoutes(      root_dir_info: *const DirInfo,      comptime ResolverType: type,      resolver: *ResolverType, +    base_dir: []const u8,  ) anyerror!void {      if (this.loaded_routes) return; -    this.routes = RouteLoader.loadAll(this.allocator, this.config, log, ResolverType, resolver, root_dir_info); +    this.routes = RouteLoader.loadAll(this.allocator, this.config, log, ResolverType, resolver, root_dir_info, base_dir);      this.loaded_routes = true;  } @@ -1028,7 +1044,13 @@ pub const Test = struct {          var resolver = Resolver.init1(default_allocator, &logger, &FileSystem.instance, opts);          var root_dir = (try resolver.readDirInfo(pages_dir)).?; -        try router.loadRoutes(&logger, root_dir, Resolver, &resolver); +        try router.loadRoutes( +            &logger, +            root_dir, +            Resolver, +            &resolver, +            FileSystem.instance.top_level_dir, +        );          var entry_points = try router.getEntryPoints();          try expectEqual(std.meta.fieldNames(@TypeOf(data)).len, entry_points.len); | 
