From a1d823e27d1b605b5658fddc1c9273667f0e9e84 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Fri, 1 Dec 2023 15:12:10 -0500 Subject: feat(compile): support discovering modules for more dynamic arguments (#21381) This PR causes Deno to include more files in the graph based on how a template literal looks that's provided to a dynamic import: ```ts const file = await import(`./dir/${expr}`); ``` In this case, it will search the `dir` directory and descendant directories for any .js/jsx/etc modules and include them in the graph. To opt out of this behaviour, move the template literal to a separate line: ```ts const specifier = `./dir/${expr}` const file = await import(specifier); ``` --- .../testdata/compile/dynamic_imports_tmp_lit/main.info.out | 10 ++++++++++ cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.js | 14 ++++++++++++++ .../compile/dynamic_imports_tmp_lit/other/data.json | 3 +++ .../compile/dynamic_imports_tmp_lit/other/sub/data2.json | 3 +++ .../testdata/compile/dynamic_imports_tmp_lit/sub/a.js | 1 + .../testdata/compile/dynamic_imports_tmp_lit/sub/b.ts | 1 + cli/tests/testdata/doc/lint_success_html.out | 2 +- .../testdata/jsr/registry/@denotest/deps/1.0.0_meta.json | 2 ++ .../jsr/registry/@denotest/module_graph/1.4.0_meta.json | 1 + 9 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.info.out create mode 100644 cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.js create mode 100644 cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/data.json create mode 100644 cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/sub/data2.json create mode 100644 cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/a.js create mode 100644 cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/b.ts (limited to 'cli/tests/testdata') diff --git a/cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.info.out b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.info.out new file mode 100644 index 000000000..57d730a64 --- /dev/null +++ b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.info.out @@ -0,0 +1,10 @@ +local: [WILDCARD]main.js +type: JavaScript +dependencies: 4 unique +size: [WILDCARD] + +file:///[WILDCARD]/dynamic_imports_tmp_lit/main.js ([WILDCARD]) +├── file:///[WILDCARD]/dynamic_imports_tmp_lit/sub/a.js ([WILDCARD]) +├── file:///[WILDCARD]/dynamic_imports_tmp_lit/sub/b.ts ([WILDCARD]) +├── file:///[WILDCARD]/dynamic_imports_tmp_lit/other/data.json ([WILDCARD]) +└── file:///[WILDCARD]/dynamic_imports_tmp_lit/other/sub/data2.json ([WILDCARD]) diff --git a/cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.js b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.js new file mode 100644 index 000000000..3bda59772 --- /dev/null +++ b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/main.js @@ -0,0 +1,14 @@ +const fileNames = [ + "a.js", + "b.ts", +]; + +for (const fileName of fileNames) { + await import(`./sub/${fileName}`); +} + +const jsonFileNames = ["data.json", "sub/data2.json"]; +for (const fileName of jsonFileNames) { + const mod = await import(`./other/${fileName}`, { with: { type: "json" } }); + console.log(mod.default); +} diff --git a/cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/data.json b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/data.json new file mode 100644 index 000000000..0131e01e4 --- /dev/null +++ b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/data.json @@ -0,0 +1,3 @@ +{ + "data": 5 +} diff --git a/cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/sub/data2.json b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/sub/data2.json new file mode 100644 index 000000000..858a13cdd --- /dev/null +++ b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/other/sub/data2.json @@ -0,0 +1,3 @@ +{ + "data": 1 +} diff --git a/cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/a.js b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/a.js new file mode 100644 index 000000000..7b2a34601 --- /dev/null +++ b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/a.js @@ -0,0 +1 @@ +console.log("a"); diff --git a/cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/b.ts b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/b.ts new file mode 100644 index 000000000..6d012e7f1 --- /dev/null +++ b/cli/tests/testdata/compile/dynamic_imports_tmp_lit/sub/b.ts @@ -0,0 +1 @@ +console.log("b"); diff --git a/cli/tests/testdata/doc/lint_success_html.out b/cli/tests/testdata/doc/lint_success_html.out index 8c4c2d187..9503a335f 100644 --- a/cli/tests/testdata/doc/lint_success_html.out +++ b/cli/tests/testdata/doc/lint_success_html.out @@ -1 +1 @@ -Written 7 files to "./docs/" +Written 9 files to "./docs/" diff --git a/cli/tests/testdata/jsr/registry/@denotest/deps/1.0.0_meta.json b/cli/tests/testdata/jsr/registry/@denotest/deps/1.0.0_meta.json index f60c65026..914e4bd73 100644 --- a/cli/tests/testdata/jsr/registry/@denotest/deps/1.0.0_meta.json +++ b/cli/tests/testdata/jsr/registry/@denotest/deps/1.0.0_meta.json @@ -5,11 +5,13 @@ "moduleGraph1": { "/mod.ts": { "dependencies": [{ + "type": "static", "kind": "import", "range": [[0, 0], [0, 59]], "specifier": "jsr:@denotest/module_graph@1/other", "specifierRange": [[0, 22], [0, 58]] }, { + "type": "static", "kind": "import", "range": [[1, 0], [1, 57]], "specifier": "jsr:@denotest/no_module_graph@^0.1", diff --git a/cli/tests/testdata/jsr/registry/@denotest/module_graph/1.4.0_meta.json b/cli/tests/testdata/jsr/registry/@denotest/module_graph/1.4.0_meta.json index 8745d72b9..ff105b58a 100644 --- a/cli/tests/testdata/jsr/registry/@denotest/module_graph/1.4.0_meta.json +++ b/cli/tests/testdata/jsr/registry/@denotest/module_graph/1.4.0_meta.json @@ -7,6 +7,7 @@ "/mod.ts": { "dependencies": [{ "kind": "import", + "type": "static", "range": [[0, 0], [0, 35]], "specifier": "./other.ts", "specifierRange": [[0, 22], [0, 34]] -- cgit v1.2.3