diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/args/flags.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/cli/args/flags.rs b/cli/args/flags.rs index 48cfb9240..3298d6f83 100644 --- a/cli/args/flags.rs +++ b/cli/args/flags.rs @@ -4246,6 +4246,53 @@ fn run_parse( matches: &mut ArgMatches, app: Command, ) -> clap::error::Result<()> { + // todo(dsherret): remove this in Deno 2.0 + // This is a hack to make https://github.com/netlify/build/pull/5767 work + // for old versions of @netlify/edge-bundler with new versions of Deno + // where Deno has gotten smarter at resolving config files. + // + // It's an unfortuante scenario, but Netlify has the version at least + // pinned to 1.x in old versions so we can remove this in Deno 2.0 in + // a few months. + fn temp_netlify_deno_1_hack(flags: &mut Flags, script_arg: &str) { + fn is_netlify_edge_bundler_entrypoint( + flags: &Flags, + script_arg: &str, + ) -> bool { + // based on diff here: https://github.com/netlify/edge-bundler/blame/f1d33b74ca7aeec19a7c2149316d4547a94e43fb/node/config.ts#L85 + if flags.permissions.allow_read.is_none() + || flags.permissions.allow_write.is_none() + || flags.config_flag != ConfigFlag::Discover + { + return false; + } + if !script_arg.contains("@netlify") { + return false; + } + let path = PathBuf::from(script_arg); + if !path.ends_with("deno/config.ts") { + return false; + } + let mut found_node_modules = false; + for component in path.components().filter_map(|c| c.as_os_str().to_str()) + { + if !found_node_modules { + found_node_modules = component == "node_modules"; + } else { + // make this work with pnpm and other package managers + if component.contains("@netlify") { + return true; + } + } + } + false + } + + if is_netlify_edge_bundler_entrypoint(flags, script_arg) { + flags.config_flag = ConfigFlag::Disabled; + } + } + runtime_args_parse(flags, matches, true, true); flags.code_cache_enabled = !matches.get_flag("no-code-cache"); @@ -4264,6 +4311,7 @@ fn run_parse( flags.argv.extend(script_arg); ext_arg_parse(flags, matches); + temp_netlify_deno_1_hack(flags, &script); flags.subcommand = DenoSubcommand::Run(RunFlags { script, |