Skip to content

Commit

Permalink
chore: @netlify/edge-bundler workaround until Deno 2.0 (#24532)
Browse files Browse the repository at this point in the history
Hack for a few months until Deno 2.0. See code for details
  • Loading branch information
dsherret authored Jul 11, 2024
1 parent 4f15aad commit ba63740
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 0 deletions.
48 changes: 48 additions & 0 deletions cli/args/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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,
Expand Down
9 changes: 9 additions & 0 deletions tests/specs/run/netlify_edge_bundler_hack/__test__.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"args": [
"run",
"--allow-read",
"--allow-write",
"node_modules/@netlify/edge-bundler/deno/config.ts"
],
"output": "main.out"
}
1 change: 1 addition & 0 deletions tests/specs/run/netlify_edge_bundler_hack/main.out
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Success

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions tests/specs/run/netlify_edge_bundler_hack/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "my-package",
"version": "1.0.0"
}

0 comments on commit ba63740

Please sign in to comment.