node/test/es-module
Joyee Cheung 8aac7da7d6
module: fix error thrown from require(esm) hitting TLA repeatedly
This tracks the asynchronicity in the ModuleWraps when they turn out to
contain TLA after instantiation, and throw the right error
(ERR_REQUIRE_ASYNC_MODULE) when it's required again. It removes
the freezing of ModuleWraps since it's not meaningful to freeze
this when the rest of the module loader is mutable, and we
can record the asynchronicity in the ModuleWrap right after
compilation after we get a V8 upgrade that contains
v8::Module::HasTopLevelAwait() instead of searching through
the module graph repeatedly which can be slow.

PR-URL: https://github.com/nodejs/node/pull/55520
Fixes: https://github.com/nodejs/node/issues/55516
Refs: https://github.com/nodejs/node/issues/52697
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Jacob Smith <jacob@frende.me>
2024-10-29 21:15:19 +00:00
..
es-module.status Revert "test: set test-esm-loader-resolve-type as flaky" 2023-10-21 15:54:28 +00:00
test-cjs-esm-warn.js module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-cjs-legacyMainResolve-permission.js module,win: fix long path resolve 2024-08-10 14:12:53 +00:00
test-cjs-legacyMainResolve.js esm: do not interpret "main" as a URL 2024-09-27 10:05:50 +00:00
test-cjs-prototype-pollution.js esm: protect ESM loader from prototype pollution 2022-10-27 20:09:07 +00:00
test-disable-require-module-with-detection.js module: check --experimental-require-module separately from detection 2024-10-08 20:26:13 +00:00
test-dynamic-import-script-lifetime.js module: use symbol in WeakMap to manage host defined options 2023-09-14 15:42:24 +00:00
test-esm-assert-strict.mjs
test-esm-assertionless-json-import.js esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-basic-imports.mjs esm: improve typings and code coverage 2022-03-14 16:30:26 +01:00
test-esm-child-process-fork-main.mjs child_process: queue pending messages 2021-12-30 05:59:49 -08:00
test-esm-cjs-builtins.js test: refactor ESM tests to improve performance 2022-07-29 10:42:55 +02:00
test-esm-cjs-exports.js module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-esm-cjs-load-error-note.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-cjs-main.js test: refactor ESM tests to improve performance 2022-07-29 10:42:55 +02:00
test-esm-cjs-named-error.mjs test: ensure never settling promises are detected 2023-10-23 17:55:50 +00:00
test-esm-custom-exports.mjs cli: add -C alias for --conditions flag 2021-05-25 15:13:36 +02:00
test-esm-cyclic-dynamic-import.mjs
test-esm-data-urls.js esm: use Undici/fetch data: URL parser 2024-09-07 10:22:03 +02:00
test-esm-default-type.mjs
test-esm-detect-ambiguous.mjs module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-esm-dns-promises.mjs
test-esm-double-encoding.mjs
test-esm-dynamic-import-attribute.js esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-dynamic-import-attribute.mjs esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-dynamic-import-commonjs.js esm: do not call getSource when format is commonjs 2023-11-29 09:21:54 +00:00
test-esm-dynamic-import-commonjs.mjs esm: do not call getSource when format is commonjs 2023-11-29 09:21:54 +00:00
test-esm-dynamic-import-mutating-fs.js test,benchmark: use tmpdir.fileURL() 2023-08-21 16:42:03 +00:00
test-esm-dynamic-import-mutating-fs.mjs test,benchmark: use tmpdir.fileURL() 2023-08-21 16:42:03 +00:00
test-esm-dynamic-import.js vm: allow dynamic import with a referrer realm 2023-11-01 06:05:13 +00:00
test-esm-encoded-path-native.js test: refactor ESM tests to improve performance 2022-07-29 10:42:55 +02:00
test-esm-encoded-path.mjs lib: fix regular expression to detect / and \ 2021-10-21 14:55:00 +00:00
test-esm-error-cache.js
test-esm-example-loader.mjs esm: consolidate ESM loader hooks 2021-09-11 18:08:35 -07:00
test-esm-experimental-warnings.mjs lib,src: drop --experimental-network-imports 2024-07-28 16:33:05 +00:00
test-esm-export-not-found.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-exports-deprecations.mjs module: exports & imports map invalid slash deprecation 2022-09-11 12:01:37 +02:00
test-esm-exports.mjs esm: export 'module.exports' on ESM CJS wrapper 2024-10-02 12:30:23 -07:00
test-esm-extension-lookup-deprecation.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-extensionless-esm-and-wasm.mjs test: fix invalid wasm test 2024-09-20 10:42:59 +00:00
test-esm-forbidden-globals.mjs
test-esm-fs-promises.mjs
test-esm-import-assertion-warning.mjs esm: fix inconsistency with importAssertion in resolve hook 2024-10-15 21:02:07 +02:00
test-esm-import-attributes-1.mjs esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-import-attributes-2.mjs esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-import-attributes-3.mjs esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-import-attributes-errors.js esm: drop support for import assertions 2024-04-19 00:01:24 +00:00
test-esm-import-attributes-errors.mjs esm: drop support for import assertions 2024-04-19 00:01:24 +00:00
test-esm-import-attributes-validation.js esm: rename error code related to import attributes 2023-10-18 14:27:55 +00:00
test-esm-import-flag.mjs module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-esm-import-json-named-export.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-import-meta-resolve.mjs test: fix some tests when path contains % 2024-09-25 17:25:33 +00:00
test-esm-import-meta.mjs esm: add import.meta.dirname and import.meta.filename 2023-10-31 21:11:15 +00:00
test-esm-imports-deprecations.mjs module: fix segment deprecation for imports field 2022-10-13 07:31:31 -07:00
test-esm-imports.mjs esm: export 'module.exports' on ESM CJS wrapper 2024-10-02 12:30:23 -07:00
test-esm-initialization.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-invalid-data-urls.js lib: fix MIME overmatch in data URLs 2023-08-13 23:24:22 +02:00
test-esm-invalid-pjson.js module,win: fix long path resolve 2024-04-08 14:37:46 +00:00
test-esm-json-cache.mjs esm: use import attributes instead of import assertions 2023-10-14 03:52:38 +00:00
test-esm-json.mjs esm: mark import attributes and JSON module as stable 2024-10-12 11:21:09 +00:00
test-esm-live-binding.mjs
test-esm-loader-cache-clearing.js
test-esm-loader-chaining.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-loader-custom-condition.mjs
test-esm-loader-default-resolver.mjs esm: identify parent importing a url with invalid host 2023-09-23 05:41:26 +00:00
test-esm-loader-dependency.mjs
test-esm-loader-entry-url.mjs test: fix tests when Amaro is unavailable 2024-10-11 05:27:54 +00:00
test-esm-loader-event-loop.mjs esm: misc test refactors 2023-02-18 14:26:36 +00:00
test-esm-loader-hooks.mjs module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-esm-loader-http-imports.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-loader-invalid-format.mjs
test-esm-loader-invalid-url.mjs esm: add chaining to loaders 2022-05-04 16:51:12 +01:00
test-esm-loader-mock.mjs Revert "module: have a single hooks thread for all workers" 2024-06-02 22:10:34 +00:00
test-esm-loader-modulemap.js module: support require()ing synchronous ESM graphs 2024-03-18 18:10:06 +08:00
test-esm-loader-not-found.mjs test: refactor ESM tests to improve performance 2022-07-29 10:42:55 +02:00
test-esm-loader-programmatically.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-loader-resolve-type.mjs test: use tmpdir.refresh() in test-esm-loader-resolve-type.mjs 2023-12-20 18:17:31 +00:00
test-esm-loader-search.js esm: move hook execution to separate thread 2023-04-13 09:35:17 +02:00
test-esm-loader-spawn-promisified.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-loader-stringify-text.mjs esm: consolidate ESM loader hooks 2021-09-11 18:08:35 -07:00
test-esm-loader-thenable.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-loader-with-source.mjs esm: do not call getSource when format is commonjs 2023-11-29 09:21:54 +00:00
test-esm-loader-with-syntax-error.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-loader.mjs esm: fix hook name in error message 2023-12-05 19:54:01 +01:00
test-esm-long-path-win.js module,win: fix long path resolve 2024-08-10 14:12:53 +00:00
test-esm-main-lookup.mjs esm: add a fallback when importer in not a file 2024-10-22 18:09:32 +02:00
test-esm-module-not-found-commonjs-hint.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-named-exports.mjs Revert "module: have a single hooks thread for all workers" 2024-06-02 22:10:34 +00:00
test-esm-namespace.mjs
test-esm-no-addons.mjs src: add option to disable loading native addons 2021-09-10 10:54:39 -05:00
test-esm-non-js.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-nowarn-exports.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-path-posix.mjs
test-esm-path-win32.mjs
test-esm-pkgname.mjs lib: fix regular expression to detect / and \ 2021-10-21 14:55:00 +00:00
test-esm-preserve-symlinks-main.js test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-preserve-symlinks-not-found-plain.mjs
test-esm-preserve-symlinks-not-found.mjs
test-esm-preserve-symlinks.js
test-esm-process.mjs process: fix named report export 2022-02-23 18:37:55 +02:00
test-esm-prototype-pollution.mjs esm: protect ESM loader from prototype pollution 2022-10-27 20:09:07 +00:00
test-esm-recursive-cjs-dependencies.mjs esm: fix loading of CJS modules from ESM 2023-09-06 10:12:14 +00:00
test-esm-repl-imports.js test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-repl.js
test-esm-require-cache.mjs
test-esm-resolve-type.mjs module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-esm-scope-node-modules.mjs
test-esm-shared-loader-dep.mjs
test-esm-shebang.mjs
test-esm-snapshot.mjs
test-esm-source-map.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-symlink-main.js test: use tmpdir.resolve() 2023-08-21 16:41:53 +00:00
test-esm-symlink-type.js
test-esm-symlink.js
test-esm-syntax-error.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-throw-undefined.mjs
test-esm-tla-unfinished.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-tla.mjs
test-esm-type-field-errors-2.js module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-esm-type-field-errors.js module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-esm-type-field.mjs esm: --experimental-default-type flag to flip module defaults 2023-09-29 06:18:44 +00:00
test-esm-type-flag-cli-entry.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-type-flag-errors.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-type-flag-loose-files.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-type-flag-package-scopes.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-type-flag-string-input.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-type-main.mjs
test-esm-undefined-cjs-global-like-variables.js
test-esm-unknown-extension.js test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-url-extname.js esm: --experimental-default-type flag to flip module defaults 2023-09-29 06:18:44 +00:00
test-esm-util-types.mjs
test-esm-virtual-json.mjs Revert "module: have a single hooks thread for all workers" 2024-06-02 22:10:34 +00:00
test-esm-wasm.mjs test: do not set concurrency on parallelized runs 2024-03-23 21:11:28 +00:00
test-esm-windows.js test: use tmpdir.resolve() 2023-08-21 16:41:53 +00:00
test-import-module-conditional-exports-module.mjs module: implement the "module-sync" exports condition 2024-09-25 06:35:26 +00:00
test-loaders-hidden-from-users.js src: implement natives binding without special casing 2023-06-09 15:32:55 +02:00
test-loaders-unknown-builtin-module.mjs esm: misc test refactors 2023-02-18 14:26:36 +00:00
test-loaders-workers-spawned.mjs test: make test-loaders-workers-spawned less flaky 2024-10-08 10:43:20 +00:00
test-require-as-esm-interop.mjs module: support 'module.exports' interop export in require(esm) 2024-10-01 21:13:03 -07:00
test-require-module-cached-tla.js module: support require()ing synchronous ESM graphs 2024-03-18 18:10:06 +08:00
test-require-module-conditional-exports-module.js module: implement the "module-sync" exports condition 2024-09-25 06:35:26 +00:00
test-require-module-conditional-exports.js module: support require()ing synchronous ESM graphs 2024-03-18 18:10:06 +08:00
test-require-module-cycle-cjs-esm-esm.js module: cache synchronous module jobs before linking 2024-05-09 00:25:14 +00:00
test-require-module-cycle-esm-cjs-esm-esm.js module: disallow CJS <-> ESM edges in a cycle from require(esm) 2024-04-08 14:45:55 +00:00
test-require-module-cycle-esm-cjs-esm.js module: disallow CJS <-> ESM edges in a cycle from require(esm) 2024-04-08 14:45:55 +00:00
test-require-module-cycle-esm-esm-cjs-esm-esm.js module: disallow CJS <-> ESM edges in a cycle from require(esm) 2024-04-08 14:45:55 +00:00
test-require-module-cycle-esm-esm-cjs-esm.js module: disallow CJS <-> ESM edges in a cycle from require(esm) 2024-04-08 14:45:55 +00:00
test-require-module-default-extension.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-defined-esmodule.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-detect-entry-point-aou.js module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-require-module-detect-entry-point.js module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-require-module-dont-detect-cjs.js module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-require-module-dynamic-import-1.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-dynamic-import-2.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-dynamic-import-3.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-dynamic-import-4.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-errors.js module: support require()ing synchronous ESM graphs 2024-03-18 18:10:06 +08:00
test-require-module-feature-detect.js process: add process.features.require_module 2024-10-07 15:26:10 +00:00
test-require-module-implicit.js module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-require-module-preload.js module: include module information in require(esm) warning 2024-10-22 16:51:45 +00:00
test-require-module-retry-import-errored.js module: allow ESM that failed to be required to be re-imported 2024-10-28 12:21:22 +00:00
test-require-module-retry-import-evaluating.js module: allow ESM that failed to be required to be re-imported 2024-10-28 12:21:22 +00:00
test-require-module-tla-retry-import-2.js module: allow ESM that failed to be required to be re-imported 2024-10-28 12:21:22 +00:00
test-require-module-tla-retry-import.js module: allow ESM that failed to be required to be re-imported 2024-10-28 12:21:22 +00:00
test-require-module-tla-retry-require.js module: fix error thrown from require(esm) hitting TLA repeatedly 2024-10-29 21:15:19 +00:00
test-require-module-tla.js module: support require()ing synchronous ESM graphs 2024-03-18 18:10:06 +08:00
test-require-module-transpiled.js module: add __esModule to require()'d ESM 2024-07-11 18:59:31 +00:00
test-require-module-twice.js module: support require()ing synchronous ESM graphs 2024-03-18 18:10:06 +08:00
test-require-module-warning.js module: trim off internal stack frames for require(esm) warnings 2024-10-29 18:29:27 +01:00
test-require-module-with-detection.js module: unflag detect-module 2024-07-20 18:30:46 +00:00
test-require-module.js module: include module information in require(esm) warning 2024-10-22 16:51:45 +00:00
test-typescript-commonjs.mjs module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-typescript-eval.mjs module: wrap swc error in ERR_INVALID_TYPESCRIPT_SYNTAX 2024-10-10 09:12:39 +00:00
test-typescript-module.mjs module: unflag --experimental-require-module 2024-09-26 14:21:37 +00:00
test-typescript-transform.mjs module: use amaro default transform values 2024-08-27 16:39:09 +02:00
test-typescript.mjs process: fix process.features.typescript when Amaro is unavailable 2024-10-11 11:27:16 +00:00
test-vm-compile-function-leak.js test: use checkIfCollectable in vm leak tests 2023-09-18 23:00:53 +02:00
test-vm-compile-function-lineoffset.js lib: fix compileFunction throws range error for negative numbers 2023-10-06 14:33:46 +00:00
test-vm-contextified-script-leak.js test: deflake test-vm-contextified-script-leak 2023-09-23 03:46:22 +00:00
test-vm-main-context-default-loader.js vm: support using the default loader to handle dynamic import() 2024-02-01 11:45:42 +00:00
test-vm-source-text-module-leak.js v8: implement v8.queryObjects() for memory leak regression testing 2024-03-02 22:11:30 +00:00
test-vm-synthetic-module-leak.js test: use checkIfCollectable in vm leak tests 2023-09-18 23:00:53 +02:00
test-wasm-memory-out-of-bound.js esm: --experimental-default-type flag to flip module defaults 2023-09-29 06:18:44 +00:00
test-wasm-simple.js esm: --experimental-default-type flag to flip module defaults 2023-09-29 06:18:44 +00:00
test-wasm-web-api.js test: fix typos 2024-09-28 13:58:55 +00:00
testcfg.py