From 617eeabe8369d7bfca7951d1cd55ac58ede1f9fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Mon, 18 Oct 2021 19:36:28 +0200 Subject: feat(unstable): Node CJS and ESM resolvers for compat mode (#12424) This commit adds CJS and ESM Node resolvers to the "--compat" mode. The functionality is spread across "cli/compat" module and Node compatibility layer in "deno_std/node"; this stems from the fact that ES module resolution can only be implemented in Rust as it needs to directly integrated with "deno_core"; however "deno_std/node" already provided CJS module resolution. Currently this resolution is only active when running a files using "deno run --compat --unstable ", and is not available in other subcommands, which will be changed in follow up commits. --- cli/compat/testdata/basic/main.js | 1 + cli/compat/testdata/basic/node_modules/foo/index.js | 0 cli/compat/testdata/basic/node_modules/foo/package.json | 5 +++++ cli/compat/testdata/basic/package.json | 7 +++++++ cli/compat/testdata/basic_deps/main.js | 1 + cli/compat/testdata/basic_deps/node_modules/bar/bar.js | 1 + .../testdata/basic_deps/node_modules/bar/package.json | 6 ++++++ cli/compat/testdata/basic_deps/node_modules/foo/foo.js | 1 + .../testdata/basic_deps/node_modules/foo/package.json | 8 ++++++++ cli/compat/testdata/basic_deps/package.json | 7 +++++++ cli/compat/testdata/conditions/main.js | 1 + .../node_modules/imports_exports/import_export.js | 6 ++++++ .../node_modules/imports_exports/import_polyfill.js | 3 +++ .../node_modules/imports_exports/package.json | 17 +++++++++++++++++ .../node_modules/imports_exports/require_export.cjs | 6 ++++++ .../node_modules/imports_exports/require_polyfill.js | 3 +++ cli/compat/testdata/conditions/package.json | 7 +++++++ cli/compat/testdata/deep/a/b/c/d/main.js | 1 + cli/compat/testdata/deep/node_modules/foo/index.js | 0 cli/compat/testdata/deep/node_modules/foo/package.json | 5 +++++ 20 files changed, 86 insertions(+) create mode 100644 cli/compat/testdata/basic/main.js create mode 100644 cli/compat/testdata/basic/node_modules/foo/index.js create mode 100644 cli/compat/testdata/basic/node_modules/foo/package.json create mode 100644 cli/compat/testdata/basic/package.json create mode 100644 cli/compat/testdata/basic_deps/main.js create mode 100644 cli/compat/testdata/basic_deps/node_modules/bar/bar.js create mode 100644 cli/compat/testdata/basic_deps/node_modules/bar/package.json create mode 100644 cli/compat/testdata/basic_deps/node_modules/foo/foo.js create mode 100644 cli/compat/testdata/basic_deps/node_modules/foo/package.json create mode 100644 cli/compat/testdata/basic_deps/package.json create mode 100644 cli/compat/testdata/conditions/main.js create mode 100644 cli/compat/testdata/conditions/node_modules/imports_exports/import_export.js create mode 100644 cli/compat/testdata/conditions/node_modules/imports_exports/import_polyfill.js create mode 100644 cli/compat/testdata/conditions/node_modules/imports_exports/package.json create mode 100644 cli/compat/testdata/conditions/node_modules/imports_exports/require_export.cjs create mode 100644 cli/compat/testdata/conditions/node_modules/imports_exports/require_polyfill.js create mode 100644 cli/compat/testdata/conditions/package.json create mode 100644 cli/compat/testdata/deep/a/b/c/d/main.js create mode 100644 cli/compat/testdata/deep/node_modules/foo/index.js create mode 100644 cli/compat/testdata/deep/node_modules/foo/package.json (limited to 'cli/compat/testdata') diff --git a/cli/compat/testdata/basic/main.js b/cli/compat/testdata/basic/main.js new file mode 100644 index 000000000..c0748305d --- /dev/null +++ b/cli/compat/testdata/basic/main.js @@ -0,0 +1 @@ +import "foo"; diff --git a/cli/compat/testdata/basic/node_modules/foo/index.js b/cli/compat/testdata/basic/node_modules/foo/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/cli/compat/testdata/basic/node_modules/foo/package.json b/cli/compat/testdata/basic/node_modules/foo/package.json new file mode 100644 index 000000000..a74d52fd3 --- /dev/null +++ b/cli/compat/testdata/basic/node_modules/foo/package.json @@ -0,0 +1,5 @@ +{ + "name": "foo", + "type": "module", + "exports": "./index.js" +} diff --git a/cli/compat/testdata/basic/package.json b/cli/compat/testdata/basic/package.json new file mode 100644 index 000000000..cc4ac5493 --- /dev/null +++ b/cli/compat/testdata/basic/package.json @@ -0,0 +1,7 @@ +{ + "name": "bar", + "type": "module", + "dependencies": { + "foo": "1.0.0" + } +} diff --git a/cli/compat/testdata/basic_deps/main.js b/cli/compat/testdata/basic_deps/main.js new file mode 100644 index 000000000..c0748305d --- /dev/null +++ b/cli/compat/testdata/basic_deps/main.js @@ -0,0 +1 @@ +import "foo"; diff --git a/cli/compat/testdata/basic_deps/node_modules/bar/bar.js b/cli/compat/testdata/basic_deps/node_modules/bar/bar.js new file mode 100644 index 000000000..98e51675e --- /dev/null +++ b/cli/compat/testdata/basic_deps/node_modules/bar/bar.js @@ -0,0 +1 @@ +export const BAR = 123; diff --git a/cli/compat/testdata/basic_deps/node_modules/bar/package.json b/cli/compat/testdata/basic_deps/node_modules/bar/package.json new file mode 100644 index 000000000..c2043f610 --- /dev/null +++ b/cli/compat/testdata/basic_deps/node_modules/bar/package.json @@ -0,0 +1,6 @@ +{ + "name": "bar", + "version": "0.1.2", + "type": "module", + "exports": "./bar.js" +} diff --git a/cli/compat/testdata/basic_deps/node_modules/foo/foo.js b/cli/compat/testdata/basic_deps/node_modules/foo/foo.js new file mode 100644 index 000000000..0026acc8e --- /dev/null +++ b/cli/compat/testdata/basic_deps/node_modules/foo/foo.js @@ -0,0 +1 @@ +import "bar"; diff --git a/cli/compat/testdata/basic_deps/node_modules/foo/package.json b/cli/compat/testdata/basic_deps/node_modules/foo/package.json new file mode 100644 index 000000000..376dae81e --- /dev/null +++ b/cli/compat/testdata/basic_deps/node_modules/foo/package.json @@ -0,0 +1,8 @@ +{ + "name": "foo", + "type": "module", + "exports": "./foo.js", + "dependencies": { + "bar": "0.1.2" + } +} diff --git a/cli/compat/testdata/basic_deps/package.json b/cli/compat/testdata/basic_deps/package.json new file mode 100644 index 000000000..138d401ed --- /dev/null +++ b/cli/compat/testdata/basic_deps/package.json @@ -0,0 +1,7 @@ +{ + "name": "main_program", + "type": "module", + "dependencies": { + "foo": "1.0.0" + } +} diff --git a/cli/compat/testdata/conditions/main.js b/cli/compat/testdata/conditions/main.js new file mode 100644 index 000000000..cafddb5d6 --- /dev/null +++ b/cli/compat/testdata/conditions/main.js @@ -0,0 +1 @@ +import "imports_exports"; diff --git a/cli/compat/testdata/conditions/node_modules/imports_exports/import_export.js b/cli/compat/testdata/conditions/node_modules/imports_exports/import_export.js new file mode 100644 index 000000000..3ebd222ea --- /dev/null +++ b/cli/compat/testdata/conditions/node_modules/imports_exports/import_export.js @@ -0,0 +1,6 @@ +import dep from "#dep"; + +export default { + bar: "bar", + dep, +}; diff --git a/cli/compat/testdata/conditions/node_modules/imports_exports/import_polyfill.js b/cli/compat/testdata/conditions/node_modules/imports_exports/import_polyfill.js new file mode 100644 index 000000000..76716a3ef --- /dev/null +++ b/cli/compat/testdata/conditions/node_modules/imports_exports/import_polyfill.js @@ -0,0 +1,3 @@ +export default { + polyfill: "import", +}; diff --git a/cli/compat/testdata/conditions/node_modules/imports_exports/package.json b/cli/compat/testdata/conditions/node_modules/imports_exports/package.json new file mode 100644 index 000000000..5d26359db --- /dev/null +++ b/cli/compat/testdata/conditions/node_modules/imports_exports/package.json @@ -0,0 +1,17 @@ +{ + "version": "1.0.0", + "name": "imports_exports", + "main": "./require_export.cjs", + "imports": { + "#dep": { + "import": "./import_polyfill.js", + "require": "./require_polyfill.js" + } + }, + "exports": { + ".": { + "import": "./import_export.js", + "require": "./require_export.cjs" + } + } +} diff --git a/cli/compat/testdata/conditions/node_modules/imports_exports/require_export.cjs b/cli/compat/testdata/conditions/node_modules/imports_exports/require_export.cjs new file mode 100644 index 000000000..11648c0d7 --- /dev/null +++ b/cli/compat/testdata/conditions/node_modules/imports_exports/require_export.cjs @@ -0,0 +1,6 @@ +const dep = require("#dep"); + +module.exports = { + foo: "foo", + dep, +}; \ No newline at end of file diff --git a/cli/compat/testdata/conditions/node_modules/imports_exports/require_polyfill.js b/cli/compat/testdata/conditions/node_modules/imports_exports/require_polyfill.js new file mode 100644 index 000000000..1023fd65c --- /dev/null +++ b/cli/compat/testdata/conditions/node_modules/imports_exports/require_polyfill.js @@ -0,0 +1,3 @@ +module.exports = { + polyfill: "require", +}; diff --git a/cli/compat/testdata/conditions/package.json b/cli/compat/testdata/conditions/package.json new file mode 100644 index 000000000..4d6d004dd --- /dev/null +++ b/cli/compat/testdata/conditions/package.json @@ -0,0 +1,7 @@ +{ + "name": "conditions", + "type": "module", + "dependencies": { + "imports_exports": "1.0.0" + } +} diff --git a/cli/compat/testdata/deep/a/b/c/d/main.js b/cli/compat/testdata/deep/a/b/c/d/main.js new file mode 100644 index 000000000..c0748305d --- /dev/null +++ b/cli/compat/testdata/deep/a/b/c/d/main.js @@ -0,0 +1 @@ +import "foo"; diff --git a/cli/compat/testdata/deep/node_modules/foo/index.js b/cli/compat/testdata/deep/node_modules/foo/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/cli/compat/testdata/deep/node_modules/foo/package.json b/cli/compat/testdata/deep/node_modules/foo/package.json new file mode 100644 index 000000000..a74d52fd3 --- /dev/null +++ b/cli/compat/testdata/deep/node_modules/foo/package.json @@ -0,0 +1,5 @@ +{ + "name": "foo", + "type": "module", + "exports": "./index.js" +} -- cgit v1.2.3