From 53fea22846df532162d3641c8b31925af2dfe9b0 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Thu, 24 Jan 2019 19:33:28 +0200 Subject: [PATCH] esm: irp type implementation Refs: https://github.com/GeoffreyBooth/node-import-file-specifier-resolution-proposal PR-URL: https://github.com/nodejs/ecmascript-modules/pull/28 --- .eslintrc.js | 2 + doc/api/cli.md | 12 + doc/api/errors.md | 32 +- doc/api/esm.md | 38 +- doc/node.1 | 3 + lib/internal/errors.js | 32 +- lib/internal/main/check_syntax.js | 36 +- lib/internal/main/eval_stdin.js | 6 +- lib/internal/main/eval_string.js | 7 +- lib/internal/main/repl.js | 7 + lib/internal/modules/cjs/loader.js | 26 +- lib/internal/modules/esm/default_resolve.js | 142 +++++--- lib/internal/modules/esm/loader.js | 29 +- lib/internal/modules/esm/module_job.js | 5 +- lib/internal/modules/esm/translators.js | 13 +- lib/internal/process/esm_loader.js | 18 +- lib/internal/process/execution.js | 19 + src/env.h | 26 +- src/module_wrap.cc | 335 ++++++++++++++++-- src/module_wrap.h | 4 - src/node_errors.h | 2 + src/node_options.cc | 11 +- src/node_options.h | 1 + test/es-module/test-esm-dynamic-import.js | 2 +- test/es-module/test-esm-loader-modulemap.js | 2 +- test/es-module/test-esm-main-lookup.mjs | 2 +- test/es-module/test-esm-package-scope.mjs | 12 + test/es-module/test-esm-symlink-type.js | 77 ++++ test/es-module/test-esm-type-flag-alias.mjs | 6 + test/es-module/test-esm-type-flag-errors.js | 57 +++ test/es-module/test-esm-type-flag.mjs | 11 + test/fixtures/es-modules/cjs-file.cjs | 1 + test/fixtures/es-modules/mjs-file.mjs | 1 + .../es-modules/package-type-commonjs/index.js | 3 + .../package-type-commonjs/package.json | 4 + .../es-modules/package-type-module/index.js | 3 + .../package-type-module/package.json | 4 + .../es-modules/package-without-type/index.js | 3 + .../package-without-type/package.json | 3 + .../esm-package-scope/legacy-loader/a.js | 1 + .../esm-package-scope/legacy-loader/b.mjs | 1 + .../esm-package-scope/legacy-loader/c.cjs | 5 + .../esm-package-scope/legacy-loader/index.mjs | 21 ++ .../legacy-loader/package.json | 13 + .../esm-package-scope/new-loader/a.js | 1 + .../esm-package-scope/new-loader/b.mjs | 1 + .../esm-package-scope/new-loader/c.cjs | 5 + .../esm-package-scope/new-loader/index.js | 21 ++ .../esm-package-scope/new-loader/package.json | 13 + test/message/esm_display_syntax_error.out | 2 +- test/parallel/test-cli-syntax-piped-bad.js | 33 +- test/parallel/test-cli-syntax-piped-good.js | 24 +- 52 files changed, 962 insertions(+), 176 deletions(-) create mode 100644 test/es-module/test-esm-package-scope.mjs create mode 100644 test/es-module/test-esm-symlink-type.js create mode 100644 test/es-module/test-esm-type-flag-alias.mjs create mode 100644 test/es-module/test-esm-type-flag-errors.js create mode 100644 test/es-module/test-esm-type-flag.mjs create mode 100644 test/fixtures/es-modules/cjs-file.cjs create mode 100644 test/fixtures/es-modules/mjs-file.mjs create mode 100644 test/fixtures/es-modules/package-type-commonjs/index.js create mode 100644 test/fixtures/es-modules/package-type-commonjs/package.json create mode 100644 test/fixtures/es-modules/package-type-module/index.js create mode 100644 test/fixtures/es-modules/package-type-module/package.json create mode 100644 test/fixtures/es-modules/package-without-type/index.js create mode 100644 test/fixtures/es-modules/package-without-type/package.json create mode 100644 test/fixtures/esm-package-scope/legacy-loader/a.js create mode 100644 test/fixtures/esm-package-scope/legacy-loader/b.mjs create mode 100644 test/fixtures/esm-package-scope/legacy-loader/c.cjs create mode 100644 test/fixtures/esm-package-scope/legacy-loader/index.mjs create mode 100644 test/fixtures/esm-package-scope/legacy-loader/package.json create mode 100644 test/fixtures/esm-package-scope/new-loader/a.js create mode 100644 test/fixtures/esm-package-scope/new-loader/b.mjs create mode 100644 test/fixtures/esm-package-scope/new-loader/c.cjs create mode 100644 test/fixtures/esm-package-scope/new-loader/index.js create mode 100644 test/fixtures/esm-package-scope/new-loader/package.json diff --git a/.eslintrc.js b/.eslintrc.js index 8b3b613e67..9de0f850df 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -38,6 +38,8 @@ module.exports = { { files: [ 'doc/api/esm.md', + 'test/es-module/test-esm-type-flag.js', + 'test/es-module/test-esm-type-flag-alias.js', '*.mjs', ], parserOptions: { sourceType: 'module' }, diff --git a/doc/api/cli.md b/doc/api/cli.md index f8fa53a5cc..de822b6a06 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -504,6 +504,18 @@ added: v2.4.0 Track heap object allocations for heap snapshots. +### `-m`, `--type=type` + +When using `--experimental-modules`, this informs the module resolution type +to interpret the top-level entry into Node.js. + +Works with stdin, `--eval`, `--print` as well as standard execution. + +Valid values are `"commonjs"` and `"module"`, where the default is to infer +from the file extension and package type boundary. + +`-m` is an alias for `--type=module`. + ### `--use-bundled-ca`, `--use-openssl-ca`