diff --git a/.github/workflows/auto-start-ci.yml b/.github/workflows/auto-start-ci.yml index cb9318ab4ade9f..6ca3392720562d 100644 --- a/.github/workflows/auto-start-ci.yml +++ b/.github/workflows/auto-start-ci.yml @@ -14,7 +14,7 @@ jobs: if: github.repository == 'nodejs/node' runs-on: ubuntu-latest steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 # Install dependencies - name: Install jq diff --git a/.github/workflows/build-tarball.yml b/.github/workflows/build-tarball.yml index 0caf0bdf961914..81f121e2cf2ee0 100644 --- a/.github/workflows/build-tarball.yml +++ b/.github/workflows/build-tarball.yml @@ -14,12 +14,12 @@ env: jobs: build-tarball: env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -39,13 +39,13 @@ jobs: path: tarballs test-tarball-linux: env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 needs: build-tarball runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index ff6788e06b7858..8765d2d8d5cae5 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -10,7 +10,7 @@ on: - v[0-9]+.x env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 FLAKY_TESTS: dontcare jobs: @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Install deps diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 3cd4def9f986bc..573057742ce70b 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -9,7 +9,7 @@ on: - v[0-9]+.x env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 NODE_VERSION: 10.x jobs: @@ -30,7 +30,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information @@ -68,7 +68,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information diff --git a/.github/workflows/test-asan.yml b/.github/workflows/test-asan.yml index 96975024e399f5..d976b225dbc5c2 100644 --- a/.github/workflows/test-asan.yml +++ b/.github/workflows/test-asan.yml @@ -14,7 +14,7 @@ on: - 'doc/**' env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 FLAKY_TESTS: dontcare jobs: @@ -28,7 +28,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml index f5bedead2afa01..f96e3a28a1e791 100644 --- a/.github/workflows/test-linux.yml +++ b/.github/workflows/test-linux.yml @@ -10,7 +10,7 @@ on: - v[0-9]+.x env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 FLAKY_TESTS: dontcare jobs: @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml index f4a2454e37f635..f12de4c5994f88 100644 --- a/.github/workflows/test-macos.yml +++ b/.github/workflows/test-macos.yml @@ -10,7 +10,7 @@ on: - v[0-9]+.x env: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 FLAKY_TESTS: dontcare jobs: @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ env.PYTHON_VERSION }} - name: Environment Information diff --git a/CHANGELOG.md b/CHANGELOG.md index 56d6fd4d344600..6de6a6b7bcd12e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,8 @@ release. -14.13.1
+14.14.0
+14.13.1
14.13.0
14.12.0
14.11.0
diff --git a/LICENSE b/LICENSE index 1f20a4a22cab15..50e6bf6344b0e2 100644 --- a/LICENSE +++ b/LICENSE @@ -1059,6 +1059,7 @@ The externally maintained libraries used by Node.js are: - GYP, located at tools/gyp, is licensed as follows: """ + Copyright (c) 2020 Node.js contributors. All rights reserved. Copyright (c) 2009 Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/Makefile b/Makefile index a63713ccdf9103..7d4ecf2ce382b1 100644 --- a/Makefile +++ b/Makefile @@ -943,7 +943,9 @@ endif .PHONY: release-only release-only: check-xz @if [ "$(DISTTYPE)" = "release" ] && `grep -q REPLACEME doc/api/*.md`; then \ - echo 'Please update REPLACEME in Added: tags in doc/api/*.md (See doc/guides/releases.md)' ; \ + echo 'Please update REPLACEME tags in the following doc/api/*.md files (See doc/guides/releases.md):\n' ; \ + REPLACEMES="$(shell grep -l REPLACEME doc/api/*.md)" ; \ + echo "$$REPLACEMES\n" | tr " " "\n" ; \ exit 1 ; \ fi @if [ "$(DISTTYPE)" = "release" ] && \ diff --git a/README.md b/README.md index 5818362c6e431c..a5066a675f0a8e 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,8 @@ For information about the governance of the Node.js project, see * [addaleax](https://github.com/addaleax) - **Anna Henningsen** <anna@addaleax.net> (she/her) +* [aduh95](https://github.com/aduh95) - +**Antoine du Hamel** <duhamelantoine1995@gmail.com> (he/him) * [ak239](https://github.com/ak239) - **Aleksei Koziatinskii** <ak239spb@gmail.com> * [AndreasMadsen](https://github.com/AndreasMadsen) - @@ -568,6 +570,11 @@ For information about the governance of the Node.js project, see Collaborators follow the [Collaborator Guide](./doc/guides/collaborator-guide.md) in maintaining the Node.js project. +### Triagers + +* [PoojaDurgad](https://github.com/PoojaDurgad) - +**Pooja Durgad** <Pooja.D.P@ibm.com> + ### Release Keys Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): diff --git a/benchmark/esm/cjs-parse.js b/benchmark/esm/cjs-parse.js new file mode 100644 index 00000000000000..325b362a057112 --- /dev/null +++ b/benchmark/esm/cjs-parse.js @@ -0,0 +1,40 @@ +'use strict'; +const fs = require('fs'); +const path = require('path'); +const common = require('../common.js'); +const { strictEqual } = require('assert'); + +const tmpdir = require('../../test/common/tmpdir'); +const benchmarkDirectory = + path.resolve(tmpdir.path, 'benchmark-esm-parse'); + +const bench = common.createBenchmark(main, { + n: [1e2] +}); + +async function main({ n }) { + tmpdir.refresh(); + + fs.mkdirSync(benchmarkDirectory); + + let sampleSource = 'try {\n'; + for (let i = 0; i < 1000; i++) { + sampleSource += 'sample.js(() => file = /test/);\n'; + } + sampleSource += '} catch {}\nexports.p = 5;\n'; + + for (let i = 0; i < n; i++) { + const sampleFile = path.join(benchmarkDirectory, `sample${i}.js`); + fs.writeFileSync(sampleFile, sampleSource); + } + + bench.start(); + for (let i = 0; i < n; i++) { + const sampleFile = path.join(benchmarkDirectory, `sample${i}.js`); + const m = await import('file:' + sampleFile); + strictEqual(m.p, 5); + } + bench.end(n); + + tmpdir.refresh(); +} diff --git a/common.gypi b/common.gypi index 33b1325eb513ea..4745bb5ac77639 100644 --- a/common.gypi +++ b/common.gypi @@ -36,7 +36,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.16', + 'v8_embedder_string': '-node.17', ##### V8 defaults for Node.js ##### diff --git a/configure b/configure index 7e8c4cff832ffd..07581d9c5a4ff1 100755 --- a/configure +++ b/configure @@ -5,6 +5,7 @@ # as is the fact that the ] goes on a new line. _=[ 'exec' '/bin/sh' '-c' ''' test ${FORCE_PYTHON2} && exec python2 "$0" "$@" # workaround for gclient +command -v python3.9 >/dev/null && exec python3.9 "$0" "$@" command -v python3.8 >/dev/null && exec python3.8 "$0" "$@" command -v python3.7 >/dev/null && exec python3.7 "$0" "$@" command -v python3.6 >/dev/null && exec python3.6 "$0" "$@" @@ -19,7 +20,7 @@ import sys from distutils.spawn import find_executable print('Node.js configure: Found Python {0}.{1}.{2}...'.format(*sys.version_info)) -acceptable_pythons = ((3, 8), (3, 7), (3, 6), (3, 5), (2, 7)) +acceptable_pythons = ((3, 9), (3, 8), (3, 7), (3, 6), (3, 5), (2, 7)) if sys.version_info[:2] in acceptable_pythons: import configure else: diff --git a/deps/cjs-module-lexer/dist/lexer.js b/deps/cjs-module-lexer/dist/lexer.js new file mode 100644 index 00000000000000..ed0ef8c12b420c --- /dev/null +++ b/deps/cjs-module-lexer/dist/lexer.js @@ -0,0 +1 @@ +"use strict";exports.parse=parse;exports.init=init;const A=new Set(["implements","interface","let","package","private","protected","public","static","yield","enum"]);let B;const Q=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse(I,C="@"){if(!B)throw new Error("Not initialized");const k=I.length+1,S=(B.__heap_base.value||B.__heap_base)+4*k-B.memory.buffer.byteLength;S>0&&B.memory.grow(Math.ceil(S/65536));const a=B.sa(k);if((Q?g:E)(I,new Uint16Array(B.memory.buffer,a,k)),!B.parseCJS(a,I.length,0,0))throw Object.assign(new Error(`Parse error ${C}${B.e()}:${I.slice(0,B.e()).split("\n").length}:${B.e()-I.lastIndexOf("\n",B.e()-1)}`),{idx:B.e()});let D=new Set,w=new Set;for(;B.rre();)w.add(I.slice(B.res(),B.ree()));for(;B.re();){let Q=I.slice(B.es(),B.ee());A.has(Q)||D.add(Q)}return{exports:[...D],reexports:[...w]}}function E(A,B){const Q=A.length;let E=0;for(;E>>8}}function g(A,B){const Q=A.length;let E=0;for(;E{const A=await WebAssembly.compile((Q="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","function"==typeof atob?Uint8Array.from(atob(Q),A=>A.charCodeAt(0)):Buffer.from(Q,"base64")));var Q;const{exports:E}=await WebAssembly.instantiate(A);B=E})())} \ No newline at end of file diff --git a/deps/cjs-module-lexer/dist/lexer.mjs b/deps/cjs-module-lexer/dist/lexer.mjs new file mode 100644 index 00000000000000..adc9b2c0e6edb6 --- /dev/null +++ b/deps/cjs-module-lexer/dist/lexer.mjs @@ -0,0 +1,2 @@ +/* cjs-module-lexer 0.4.2 */ +const A=new Set(["implements","interface","let","package","private","protected","public","static","yield","enum"]);let B;const Q=1===new Uint8Array(new Uint16Array([1]).buffer)[0];export function parse(I,C="@"){if(!B)throw new Error("Not initialized");const k=I.length+1,S=(B.__heap_base.value||B.__heap_base)+4*k-B.memory.buffer.byteLength;S>0&&B.memory.grow(Math.ceil(S/65536));const a=B.sa(k);if((Q?g:E)(I,new Uint16Array(B.memory.buffer,a,k)),!B.parseCJS(a,I.length,0,0))throw Object.assign(new Error(`Parse error ${C}${B.e()}:${I.slice(0,B.e()).split("\n").length}:${B.e()-I.lastIndexOf("\n",B.e()-1)}`),{idx:B.e()});let D=new Set,w=new Set;for(;B.rre();)w.add(I.slice(B.res(),B.ree()));for(;B.re();){let Q=I.slice(B.es(),B.ee());A.has(Q)||D.add(Q)}return{exports:[...D],reexports:[...w]}}function E(A,B){const Q=A.length;let E=0;for(;E>>8}}function g(A,B){const Q=A.length;let E=0;for(;E{const A=await WebAssembly.compile((Q="AGFzbQEAAAABVQxgAX8Bf2AAAGACf38AYAABf2ABfwBgA39/fwF/YAR/f39/AX9gBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX9gBX9/f39/AX9gCH9/f39/f39/AX8DPDsAAwMDAwMDAwICBgAABAcEAQEBAAAAAAEBAQEEAQELAQAIAwAAAAUKAAEAAAAABwYICQAAAAAAAAABBQQFAXABAwMFAwEAAQYIAX8AQbCYAgsHTQsGbWVtb3J5AgACc2EAAAFlAAECZXMAAgJlZQADA3JlcwAEA3JlZQAFAnJlAAYDcnJlAAcIcGFyc2VDSlMACgtfX2hlYXBfYmFzZQMACQgBAEEBCwIICQq2gQE7YAEBf0GYHygCACIBIABBAXRqIgBBADsBAEHIHyAAQQJqIgA2AgBBzB8gADYCAEGwH0EANgIAQbgfQQA2AgBBtB9BADYCAEG8H0EANgIAQcQfQQA2AgBBwB9BADYCACABCwgAQdAfKAIACxUAQbQfKAIAKAIAQZgfKAIAa0EBdQsVAEG0HygCACgCBEGYHygCAGtBAXULFQBBwB8oAgAoAgBBmB8oAgBrQQF1CxUAQcAfKAIAKAIEQZgfKAIAa0EBdQslAQF/QbQfQbQfKAIAIgBBCGpBsB8gABsoAgAiADYCACAAQQBHCyUBAX9BwB9BwB8oAgAiAEEIakG8HyAAGygCACIANgIAIABBAEcLSAEBf0G4HygCACICQQhqQbAfIAIbQcwfKAIAIgI2AgBBuB8gAjYCAEHMHyACQQxqNgIAIAJBADYCCCACIAE2AgQgAiAANgIAC0gBAX9BxB8oAgAiAkEIakG8HyACG0HMHygCACICNgIAQcQfIAI2AgBBzB8gAkEMajYCACACQQA2AgggAiABNgIEIAIgADYCAAuLDgEBf0HgPyABNgIAQZgfIAA2AgAgAgRAQZwfIAI2AgALIAMEQEGgHyADNgIAC0HoP0H//wM7AQBBgOAAQYDAADYCAEGQoAFBkOAANgIAQZSgAUHgHzYCAEHsP0GkHygCADYCAEGkoAEgAEF+aiICNgIAQaigASACIAFBAXRqIgM2AgBB5j9BADsBAEHkP0EAOwEAQfA/QQA6AABB0B9BADYCAEHUH0EAOgAAQZigAUEAOgAAQZygAUEANgIAQaCgAUEANgIAAkACQCAALwEAQSNHDQAgAC8BAkEhRw0AQQEhAiABQQJGDQFBpKABIABBAmo2AgAgAEEEaiEAA0ACQCAAIgJBfmogA08NACACQQJqIQAgAi8BAEF2aiIBQQNLDQEgAUEBaw4CAQEACwtBpKABIAI2AgALA0BBpKABIAJBAmoiADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIgA0kEQCAALwEAIgNBd2oiAUEXTUEAQQEgAXRBn4CABHEbDRkCQAJAQeY/LwEAIgFFBEAgA0Ghf2oiBEEOTQ0EIANBWWoiBEEITQ0FIANBhX9qIgRBAk0NBiADQSJGDQIgA0HPAEYNASADQfIARw0XAkBBABALRQ0AIAAQDEUNACACEA0LQew/QaSgASgCADYCAAwcCyADQVlqIgRBCE0NBiADQaB/aiIEQQVNDQcgA0GFf2oiBEECTQ0IIANBIkYNASADQc8ARg0AIANB7QBHDRYMFQsgAkEEakHiAEHqAEHlAEHjAEH0ABAORQ0VIAAQDEUNFSABRRAPDBULEBAMFAtBACECQeg/LwEAQf//A0cNGkHmPy8BAA0aQdQfLQAADRpBASECQZygASgCACIARQ0aIABBoKABKAIAQaAfKAIAEQIADBoLIARBAWsODgUSEg8SEBISEhQSEhIREwsgBEEBaw4IDQoREREREQUGCyAEQQFrDgIQCQoLIARBAWsOCAsKDw8PDw8DBAsgBEEBaw4FDg4LDgwBCyAEQQFrDgINAwcLQeg/LwEAQf7/A0cNAwwFCwJAIAIvAQQiAEEqRwRAIABBL0cNARARDBILEBIMEQtB8D8CfwJAAkBB7D8oAgAiAi8BACIAEBMEQCAAQVVqIgFBA0sNAgJAAkACQCABQQFrDgMFAgABCyACQX5qLwEAQVBqQf//A3FBCkkNAwwECyACQX5qLwEAQStGDQIMAwsgAkF+ai8BAEEtRg0BDAILAkAgAEH9AEcEQCAAQS9GDQEgAEEpRw0CQZCgASgCACABQQJ0aigCABAURQ0CDAMLQZCgASgCACABQQJ0aigCABAVDQIgAUGwoAFqLQAARQ0BDAILQfA/LQAADQELIAIQFiEBIABFDQBBASABRQ0BGgsQF0EACzoAAAwLCxAYDAoLQeY/IAFBf2oiAjsBACABQeg/LwEAIgBHDQFB5D9B5D8vAQBBf2oiADsBAEHoP0GA4AAoAgAgAEH//wNxQQF0ai8BADsBAAsQGQwICyAAQf//A0YgAkH//wNxIABPcg0HCxAaQQAPCyABQbCgAWpBmKABLQAAOgAAQeY/IAFBAWo7AQBBkKABKAIAIAFBAnRqQew/KAIANgIAQZigAUEAOgAADAULQeY/IAFBf2o7AQAMBAtB5j8gAUEBajsBAEGQoAEoAgAgAUECdGpB7D8oAgA2AgAMAwsgABAMRQ0CIAIvAQRB7ABHDQIgAi8BBkHhAEcNAiACLwEIQfMARw0CIAIvAQpB8wBHDQIgAi8BDCIAQXdqIgFBF01BAEEBIAF0QZ+AgARxG0VBACAAQaABRxsNAkGYoAFBAToAAAwCCyACQQRqQfgAQfAAQe8AQfIAQfQAEA5FDQEgABAMRQ0BIAIvAQ5B8wBGBEBBABAbDAILIAENARAcDAELIAJBBGpB7wBB5ABB9QBB7ABB5QAQDkUNACAAEAxFDQAQHQtB7D9BpKABKAIANgIADAQLIAJBBGpB3wBB5QBB+ABB8ABB7wBB8gBB9AAQHkUNAiAAEAxFBEAgAi8BAEEuRw0DC0GkoAEgAkESaiIANgIAIAIvARIiAUHTAEYEfyACLwEUQfQARw0DIAIvARZB4QBHDQMgAi8BGEHyAEcNA0GkoAEgAkEaaiIANgIAIAIvARoFIAELQf//A3FBKEcNAkGQoAEoAgBB7D8oAgA2AgBB5j9BATsBAEGkoAFBpKABKAIAIgFBAmoiADYCACABLwECQfIARw0CQQIQCxoMAQsgAkEEakHtAEHwAEHvAEHyAEH0ABAORQ0BIAAQDEUNARAfC0GkoAEoAgAhAAtB7D8gADYCAAtBqKABKAIAIQNBpKABKAIAIQIMAAsACyACC64CAQN/AkACQAJAQaSgASgCACIDQQJqQeUAQfEAQfUAQekAQfIAQeUAECEEQEGkoAEgA0EOajYCAAJAECJBKEcNAEGkoAFBpKABKAIAQQJqNgIAECIhAUGkoAEoAgBBAmohAiABQSJHBEAgAUEnRw0BEBhBpKABQaSgASgCACIBQQJqNgIAECJBKUcNASAAQX9qIgBBAU0EQCAAQQFrRQ0EDAULDAULEBBBpKABQaSgASgCACIBQQJqNgIAECJBKUcNACAAQX9qIgBBAU0EQCAAQQFrRQ0DDAQLDAQLQaSgASADQQxqNgIAC0EADwsgAiABQaAfKAIAEQIAQQEPC0GgoAEgATYCAEGcoAEgAjYCAEEBDwtBlKABKAIAIAI2AgBBlKABKAIAIAE2AgRBAQsbACAAQZgfKAIARgRAQQEPCyAAQX5qLwEAECAL7wIBBH9BmB8oAgAhAwNAAkAgAEF+aiEBIAAvAQAiAkEgRw0AIAAgA0sgASEADQELCwJAIAJBPUcNAANAAkAgAUF+aiEAIAEvAQBBIEcNACABIANLIAAhAQ0BCwsgAEECaiEBQQAhBANAAkAgARAjIgJFIAEgA01yDQAgAkHcAEYNAiACECRFDQAgAUF+QXwgAkGAgARJG2ohASACECUhBAwBCwsgBEEBcUUNACABLwEAQSBHDQBBlKABKAIAIgJBqB8oAgBGDQAgAiAAQQRqNgIMIAIgAUECajYCCCABQX5qIQBBICEBA0AgAUH//wNxQSBHIABBAmogA01yRQRAIAAvAQAhASAAQX5qIQAMAQsLIAFB//8DcUGOf2oiAUECSw0AAkACQAJAIAFBAWsOAgMBAAsgAEH2AEHhABAmDQEMAgsgAEHsAEHlABAmDQAgAEHjAEHvAEHuAEHzABAnRQ0BC0GUoAEgAkEQajYCAAsLOwEBfwJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVGIQYLIAYLzRQBCH9BpKABQaSgASgCACICQQxqNgIAIAJBCmohBQJAAkAQIkEuRw0AQaSgAUGkoAEoAgBBAmo2AgAQIiICQeQARgRAQaSgASgCACIAQQJqECpFDQFBpKABIABBHGo2AgAgAEEaaiEFECJBKEcNAUGkoAFBpKABKAIAQQJqNgIAECIQK0UNARAiQSxHDQFBpKABQaSgASgCAEECajYCABAiIgBBJ0dBACAAQSJHGw0BQaSgAUGkoAEoAgAiAkECaiIDNgIAIAIvAQIQKEUNASAAQaSgASgCACICLwEARw0BIAMgAkGcHygCABECAAwBCyAARSACQesAR3INAEGkoAEoAgAiAC8BAkHlAEcNACAALwEEQfkARw0AIAAvAQZB8wBHDQAgAEEGaiEFQaSgASAAQQhqNgIAECJBKEcNAEGkoAFBpKABKAIAQQJqNgIAECJBpKABKAIAIQcQKEUNAEGkoAEoAgAQIkEpRw0AQaSgAUGkoAEoAgAiBUECajYCABAiQS5HDQBBpKABQaSgASgCAEECajYCABAiQeYARw0AQaSgASgCACIAQQJqQe8AQfIAQcUAQeEAQeMAQegAECFFDQBBpKABIABBDmo2AgAQIkGkoAEoAgAiAkF+aiEFQShHDQBBpKABIAJBAmo2AgAQIkHmAEcNAEGkoAEoAgAiAEECakH1AEHuAEHjAEH0AEHpAEHvAEHuABAeRQ0AQaSgASAAQRBqNgIAECJBKEcNAEGkoAFBpKABKAIAQQJqNgIAECJBpKABKAIAIQAQKEUNAEGkoAEoAgAhAxAiQSlHDQBBpKABQaSgASgCAEECajYCABAiQfsARw0AQaSgAUGkoAEoAgBBAmo2AgAQIkHpAEcNAEGkoAEoAgAiAi8BAkHmAEcNACACLwEEQSBHDQBBpKABIAJBBmo2AgAQIkEoRw0AQaSgAUGkoAEoAgBBAmo2AgAQIhpBpKABKAIAIgEgACADIABrIgIQOg0AQaSgASABIAJBAXUiA0EBdGo2AgACQAJAECIiAUEhRwRAIAFBPUcNA0GkoAEoAgAiAS8BAkE9Rw0DIAEvAQRBPUcNA0GkoAEgAUEGajYCABAiIgFBJ0dBACABQSJHGw0DQaSgASgCACIEQQJqQeQAQeUAQeYAQeEAQfUAQewAQfQAEB5FDQNBpKABIARBEGo2AgAQIiABRw0DQaSgAUGkoAEoAgBBAmo2AgAQIkH8AEcNA0GkoAEoAgAiAS8BAkH8AEcNA0GkoAEgAUEEajYCABAiGkGkoAEoAgAiASAAIAIQOg0DQaSgASABIANBAXRqNgIAECJBPUcNA0GkoAEoAgAiAS8BAkE9Rw0DIAEvAQRBPUcNA0GkoAEgAUEGajYCABAiIgFBJ0dBACABQSJHGw0DQaSgASgCACIEQQJqECxFDQNBpKABIARBFmo2AgAQIiABRw0DQaSgAUGkoAEoAgBBAmo2AgAQIkEpRw0DQaSgAUGkoAEoAgBBAmo2AgAQIkHyAEcNA0GkoAEoAgAiAUECakHlAEH0AEH1AEHyAEHuABAORQ0DQaSgASABQQxqNgIAECJBO0YNAQwCC0GkoAEoAgAiAS8BAkE9Rw0CIAEvAQRBPUcNAkGkoAEgAUEGajYCABAiIgFBJ0dBACABQSJHGw0CQaSgASgCACIEQQJqQeQAQeUAQeYAQeEAQfUAQewAQfQAEB5FDQJBpKABIARBEGo2AgAQIiABRw0CQaSgAUGkoAEoAgBBAmo2AgAQIkEpRw0CC0GkoAFBpKABKAIAQQJqNgIACyAHayIGQQF1IQQCQBAiIgEQKwRAECJB2wBHDQJBpKABQaSgASgCAEECajYCABAiGkGkoAEoAgAiASAAIAIQOg0CQaSgASABIANBAXRqNgIAECJB3QBHDQJBpKABQaSgASgCAEECajYCABAiQT1HDQJBpKABQaSgASgCAEECajYCABAiGkGkoAEoAgAiASAHIAYQOg0CQaSgASABIARBAXRqNgIAECJB2wBHDQJBpKABQaSgASgCAEECajYCABAiGkGkoAEoAgAiASAAIAIQOg0CQaSgASABIANBAXRqNgIAECJB3QBHDQIMAQsgAUHPAEcNAUGkoAEoAgAiAUECakHiAEHqAEHlAEHjAEH0ABAORQ0BQaSgASABQQxqNgIAECJBLkcNAUGkoAFBpKABKAIAQQJqNgIAECJB5ABHDQFBpKABKAIAIgFBAmoQKkUNAUGkoAEgAUEcajYCABAiQShHDQFBpKABQaSgASgCAEECajYCABAiECtFDQEQIkEsRw0BQaSgAUGkoAEoAgBBAmo2AgAQIhpBpKABKAIAIgEgACACEDoNAUGkoAEgASADQQF0ajYCABAiQSxHDQFBpKABQaSgASgCAEECajYCABAiQfsARw0BQaSgAUGkoAEoAgBBAmo2AgAQIkHlAEcNAUGkoAEoAgAiAUECahAtRQ0BQaSgASABQRRqNgIAECJBOkcNAUGkoAFBpKABKAIAQQJqNgIAECJBpKABKAIAIQFB9ABHBEAgAS8BAkHyAEcNAiABLwEEQfUARw0CIAEvAQZB5QBHDQILQaSgASABQQhqNgIAECJBLEcNAUGkoAFBpKABKAIAQQJqNgIAECJB5wBHDQFBpKABKAIAIgEvAQJB5QBHDQEgAS8BBEH0AEcNAUGkoAEgAUEGajYCABAiQTpHDQFBpKABQaSgASgCAEECajYCABAiQeYARw0BQaSgASgCACIBQQJqQfUAQe4AQeMAQfQAQekAQe8AQe4AEB5FDQFBpKABIAFBEGo2AgAQIkEoRw0BQaSgAUGkoAEoAgBBAmo2AgAQIkEpRw0BQaSgAUGkoAEoAgBBAmo2AgAQIkH7AEcNAUGkoAFBpKABKAIAQQJqNgIAECJB8gBHDQFBpKABKAIAIgFBAmpB5QBB9ABB9QBB8gBB7gAQDkUNAUGkoAEgAUEMajYCABAiGkGkoAEoAgAiASAHIAYQOg0BQaSgASABIARBAXRqNgIAECJB2wBHDQFBpKABQaSgASgCAEECajYCABAiGkGkoAEoAgAiASAAIAIQOg0BQaSgASABIANBAXRqNgIAECJB3QBHDQFBpKABQaSgASgCAEECajYCABAiIgBBO0YEf0GkoAFBpKABKAIAQQJqNgIAECIFIAALQf0ARw0BQaSgAUGkoAEoAgBBAmo2AgAQIkH9AEcNAUGkoAFBpKABKAIAQQJqNgIAECJBKUcNAQtBpKABQaSgASgCAEECajYCABAiIgBBO0YEf0GkoAFBpKABKAIAQQJqNgIAECIFIAALQf0ARw0AQaSgAUGkoAEoAgBBAmo2AgAQIkEpRw0AQZSgASgCACECQeAfIQADQCAAIAJGDQICQCAEIABBDGooAgAgAEEIaigCACIDa0EBdUcNACAHIAMgBhA6DQAgACgCACAAQQRqKAIAQaAfKAIAEQIADAILIABBEGohAAwACwALQaSgASAFNgIACwuSAQEEf0GkoAEoAgAhAEGooAEoAgAhAwNAAkAgACIBQQJqIQAgASADTw0AIAAvAQAiAkHcAEcEQCACQXZqIgFBA0sEQCACQSJHDQNBpKABIAA2AgAPCyABQQFrDgICAgELIAFBBGohACABLwEEQQ1HDQEgAUEGaiAAIAEvAQZBCkYbIQAMAQsLQaSgASAANgIAEBoLVAEEf0GkoAEoAgBBAmohAUGooAEoAgAhAgNAAkAgASIAQX5qIAJPDQAgAEECaiEBIAAvAQBBdmoiA0EDSw0BIANBAWsOAgEBAAsLQaSgASAANgIAC3sBAn9BpKABQaSgASgCACIAQQJqNgIAIABBBmohAEGooAEoAgAhAQNAAkACQCAAQXxqIAFJBEAgAEF+ai8BAEEqRw0CIAAvAQBBL0cNAkGkoAEgAEF+ajYCAAwBCyAAQX5qIQALQaSgASAANgIADwsgAEECaiEADAALAAtyAQF/AkAgAEEpRyAAQVhqQf//A3FBB0lxIABBRmpB//8DcUEGSXIgAEFfaiIBQQVNQQBBASABdEExcRtyDQACQCAAQaV/aiIBQQNLDQAgAUEBaw4CAAABCyAAQf0ARyAAQYV/akH//wNxQQRJcQ8LQQELPQEBf0EBIQECQCAAQfcAQegAQekAQewAQeUAEC4NACAAQeYAQe8AQfIAEC8NACAAQekAQeYAECYhAQsgAQuvAQEDf0EBIQMCQAJAAkACQAJAAkAgAC8BACIBQUVqIgJBA0sEQCABQZt/aiICQQNNDQEgAUEpRg0DIAFB+QBHDQIgAEF+akHmAEHpAEHuAEHhAEHsAEHsABAwDwsgAkEBaw4DAQEFAgsgAkEBaw4DAAADAgtBACEDCyADDwsgAEF+akHlAEHsAEHzABAvDwsgAEF+akHjAEHhAEH0AEHjABAnDwsgAEF+ai8BAEE9RgvNAwECfwJAIAAvAQBBnH9qIgFBE0sNAAJAAkACQAJAAkACQAJAAkAgAUEBaw4TAQIICAgICAgIAwQICAUIBggIBwALIABBfmovAQBBl39qIgFBA0sNBwJAAkAgAUEBaw4DCQkBAAsgAEF8akH2AEHvABAmDwsgAEF8akH5AEHpAEHlABAvDwsgAEF+ai8BAEGNf2oiAUEBSw0GIAFBAWsEQCAAQXxqLwEAIgFB4QBHBEAgAUHsAEcNCCAAQXpqQeUAEDEPCyAAQXpqQeMAEDEPCyAAQXxqQeQAQeUAQewAQeUAECcPCyAAQX5qLwEAQe8ARw0FIABBfGovAQBB5QBHDQUgAEF6ai8BACIBQfAARwRAIAFB4wBHDQYgAEF4akHpAEHuAEHzAEH0AEHhAEHuABAwDwsgAEF4akH0AEH5ABAmDwtBASECIABBfmoiAEHpABAxDQQgAEHyAEHlAEH0AEH1AEHyABAuDwsgAEF+akHkABAxDwsgAEF+ahAyDwsgAEF+akHhAEH3AEHhAEHpABAnDwsgAEF+ai8BACIBQe8ARwRAIAFB5QBHDQEgAEF8akHuABAxDwsgAEF8akH0AEHoAEHyABAvIQILIAILgAEBA38DQEGkoAFBpKABKAIAIgBBAmoiATYCAAJAAkACQCAAQaigASgCAE8NACABLwEAIgFBpX9qIgJBAU0NAiABQXZqIgBBA0sEQCABQS9HDQQMAgsgAEEBaw4CAwMACxAaCw8LIAJBAWsEQBA5BUGkoAEgAEEEajYCAAsMAAsAC5IBAQR/QaSgASgCACEAQaigASgCACEDA0ACQCAAIgFBAmohACABIANPDQAgAC8BACICQdwARwRAIAJBdmoiAUEDSwRAIAJBJ0cNA0GkoAEgADYCAA8LIAFBAWsOAgICAQsgAUEEaiEAIAEvAQRBDUcNASABQQZqIAAgAS8BBkEKRhshAAwBCwtBpKABIAA2AgAQGgvQAQEFf0GkoAEoAgAhAEGooAEoAgAhAgNAIAAiAUECaiEAAkAgASACSQRAIAAvAQAiA0Gkf2oiBEEETQ0BIANBJEcNAiABLwEEQfsARw0CQeQ/QeQ/LwEAIgBBAWo7AQBBgOAAKAIAIABBAXRqQeg/LwEAOwEAQaSgASABQQRqNgIAQeg/QeY/LwEAQQFqIgE7AQBB5j8gATsBAA8LQaSgASAANgIAEBoPCwJAAkAgBEEBaw4EAgICAAELQaSgASAANgIADwsgAUEEaiEADAALAAs4AQF/QdQfQQE6AABBpKABKAIAIQBBpKABQaigASgCAEECajYCAEHQHyAAQZgfKAIAa0EBdTYCAAu/AgEDf0GkoAFBpKABKAIAIgJBDmo2AgACQAJAECIiAUHbAEcEQCABQT1GDQEgAUEuRw0CQaSgAUGkoAEoAgBBAmo2AgAQIkGkoAEoAgAhARAoRQ0CQaSgASgCACEAECJBPUcNAiABIABBnB8oAgARAgAPC0GkoAFBpKABKAIAQQJqNgIAECIiAEEnR0EAIABBIkcbDQFBpKABQaSgASgCACIBQQJqIgM2AgAgAS8BAhAoRQ0BIABBpKABKAIAIgEvAQBHDQFBpKABIAFBAmo2AgAQIkHdAEcNAUGkoAFBpKABKAIAQQJqNgIAECJBPUcNASADIAFBnB8oAgARAgAMAQsgAEUNAEGkoAFBpKABKAIAQQJqNgIAECIiAEHyAEcEQCAAQfsARw0BECkPC0EBEAsaC0GkoAEgAkEMajYCAAs0AQJ/QaSgAUGkoAEoAgBBDGoiADYCABAiIQECQCAAQaSgASgCAEYEQCABEDhFDQELEBoLC2wBAX9BpKABQaSgASgCACIAQQxqNgIAAkAQIkEuRw0AQaSgAUGkoAEoAgBBAmo2AgAQIkHlAEcNAEGkoAEoAgBBAmpB+ABB8ABB7wBB8gBB9ABB8wAQIUUNAEEBEBsPC0GkoAEgAEEKajYCAAtPAQF/AkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRiEICyAIC6MBAQR/QaSgAUGkoAEoAgAiAUEMaiICNgIAAkACQAJAAkAQIiIAQVlqIgNBB0sEQCAAQSJGIABB+wBGcg0CDAELAkAgA0EBaw4HAAECAQEBAwILQeY/QeY/LwEAIgBBAWo7AQBBkKABKAIAIABBAnRqIAE2AgAPC0GkoAEoAgAgAkYNAgtB5j8vAQBFDQBBpKABQaSgASgCAEF+ajYCAA8LEBoLCyoAIABBgAFyQaABRiAAQXdqQf//A3FBBUlyBH9BAQUgABA4IABBLkdxCwtFAQF/AkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZGIQcLIAcLdgEDf0GkoAEoAgAhAANAAkACQCAALwEAIgFBd2pBBUkgAUEgRnIgAUGgAUZyDQAgAUEvRw0BIAAvAQIiAEEqRwRAIABBL0cNAhARDAELEBILQaSgAUGkoAEoAgAiAkECaiIANgIAIAJBqKABKAIASQ0BCwsgAQs2AQF/IAAvAQAiAUGA+ANxQYC4A0YEfyABQf8HcSAAQX5qLwEAQf8HcUEKdHJBgIAEagUgAQsLcwEBfyAAQS9NBEAgAEEkRg8LAkAgAEE6SQ0AAkAgAEHBAEkNACAAQdsASQ0BIABB4ABNBEAgAEHfAEYPCyAAQfsASQ0BIABB//8DTQRAIABBqgFJDQEgABAzDwtBASEBIAAQNA0AIAAQNSEBCyABDwtBAQtdAQF/IABBwABNBEAgAEEkRg8LQQEhAQJAIABB2wBJDQAgAEHgAE0EQCAAQd8ARg8LIABB+wBJDQAgAEH//wNNBEBBACEBIABBqgFJDQEgABA2DwsgABA0IQELIAELRgEDfwJAIABBfmoiA0GYHygCACIESQ0AIAMvAQAgAUcNACAALwEAIAJHDQAgAyAERgRAQQEPCyAAQXxqLwEAECAhBQsgBQtgAQN/AkAgAEF6aiIFQZgfKAIAIgZJDQAgBS8BACABRw0AIABBfGovAQAgAkcNACAAQX5qLwEAIANHDQAgAC8BACAERw0AIAUgBkYEQEEBDwsgAEF4ai8BABAgIQcLIAcLegEBfyAAEDciABAlIQECfyAAQdwARwRAQQAgAUUNARoLQaSgASgCAEECQQQgAEGAgARJG2ohAAJAA0BBpKABIAA2AgAgAC8BABA3IgFFDQEgARAkBEAgAEECQQQgAUGAgARJG2ohAAwBCwtBACABQdwARg0BGgtBAQsL1gIBBH9BpKABKAIAIgBBfmohAwNAAkBBpKABIABBAmo2AgACQAJAIABBqKABKAIATw0AECIhAEGkoAEoAgAhAQJAAkAgABAoBEBBpKABKAIAIQICQBAiIgBBOkYEQEGkoAFBpKABKAIAQQJqNgIAECIQKEUNAUGkoAEoAgAvAQAhAAsgASACQZwfKAIAEQIADAILDAULIABBJ0dBACAAQSJHGw0BQaSgAUGkoAEoAgAiAUECaiICNgIAIAEvAQIQKEUNAEGkoAEoAgAiAS8BACAARw0AQaSgASABQQJqNgIAECIiAEE6Rw0AQaSgAUGkoAEoAgBBAmo2AgAQIhAoRQ0EQaSgASgCAC8BACEAIAIgAUGcHygCABECAAsgAEH//wNxIgBBLEYNAiAAQf0ARg0BDAMLQaSgASADNgIACw8LQaSgASgCACEADAELC0GkoAEgAzYCAAuYAQEBfwJAIAAvAQBB5QBHDQAgAC8BAkHmAEcNACAALwEEQekARw0AIAAvAQZB7gBHDQAgAC8BCEHlAEcNACAALwEKQdAARw0AIAAvAQxB8gBHDQAgAC8BDkHvAEcNACAALwEQQfAARw0AIAAvARJB5QBHDQAgAC8BFEHyAEcNACAALwEWQfQARw0AIAAvARhB+QBGIQELIAELmAEBAn9BpKABKAIAIQECQCAAQe0ARgR/IAFBAmpB7wBB5ABB9QBB7ABB5QAQDkUNAUGkoAEgAUEMajYCABAiQS5HDQFBpKABQaSgASgCAEECajYCABAiBSAAC0HlAEcNAEGkoAEoAgAiAEEOaiABIABBAmpB+ABB8ABB7wBB8gBB9ABB8wAQISICGyEBC0GkoAEgATYCACACC3cBAX8CQCAALwEAQd8ARw0AIAAvAQJB3wBHDQAgAC8BBEHlAEcNACAALwEGQfMARw0AIAAvAQhBzQBHDQAgAC8BCkHvAEcNACAALwEMQeQARw0AIAAvAQ5B9QBHDQAgAC8BEEHsAEcNACAALwESQeUARiEBCyABC2wBAX8CQCAALwEAQe4ARw0AIAAvAQJB9QBHDQAgAC8BBEHtAEcNACAALwEGQeUARw0AIAAvAQhB8gBHDQAgAC8BCkHhAEcNACAALwEMQeIARw0AIAAvAQ5B7ABHDQAgAC8BEEHlAEYhAQsgAQtDAQN/AkAgAEF4aiIGQZgfKAIAIgdJDQAgBiABIAIgAyAEIAUQDkUNACAGIAdGBEBBAQ8LIABBdmovAQAQICEICyAIC1MBA38CQCAAQXxqIgRBmB8oAgAiBUkNACAELwEAIAFHDQAgAEF+ai8BACACRw0AIAAvAQAgA0cNACAEIAVGBEBBAQ8LIABBemovAQAQICEGCyAGC0UBA38CQCAAQXZqIgdBmB8oAgAiCEkNACAHIAEgAiADIAQgBSAGECFFDQAgByAIRgRAQQEPCyAAQXRqLwEAECAhCQsgCQs3AQJ/AkBBmB8oAgAiAiAASw0AIAAvAQAgAUcNACAAIAJGBEBBAQ8LIABBfmovAQAQICEDCyADC04BA38CQCAAQXRqIgFBmB8oAgAiAkkNACABQeQAQeUAQeIAQfUAQecAQecAQeUAEB5FDQAgASACRgRAQQEPCyAAQXJqLwEAECAhAwsgAwvNEQECfwJAIAAQNiAAQfS/f2pBAklyIABBtwFGIABBgHpqQfAASXJyIABBhwdGIABB/XZqQQVJciAAQe90akEtSXJyDQAgAEHwc2pBC0kgAEG1c2pBH0lyIABBwXRqIgFBCE1BAEEBIAF0Qe0CcRtyDQAgAEHwDEYgAEGWcmpBBElyIABBqnJqIgFBEk1BAEEBIAF0Qf/8GXEbciAAQcBwakEKSSAAQdpwakELSXIgAEGRDkYgAEHQcWpBG0lycnIgAEGQcmpBCkkgAEHCbWpBEklyIABBxm1qQQNJIABBnW5qQSFJcnIgAEGtbmpBD0kgAEGnb2pBA0lyIABB129qQQVJIABB229qQQNJcnJyciAAQeVvakEJSSAAQepvakEESXIgAEH9D0YgAEGVcGpBCUlycnINACAAQZptakEKSSAAQa9taiIBQRJNQQBBASABdEH/gBhxG3INAAJAIABBxGxqIgFBJ0sEQCAAQf9sakEDSQ0CDAELIAFBAWsOJQABAQEBAQEBAAABAQAAAQEBAAAAAAAAAAAAAQAAAAAAAAAAAAABCyAAQf4TRiAAQZpsakEKSXINACAAQfUURiAAQf9rakEDSXIgAEHEa2oiAUEVTUEAQQEgAXRB/bCOAXEbciAAQZprakEMSXINAAJAIABBxGpqIgFBJ0sEQCAAQf9qakEDSQ0CDAELIAFBAWsOJQABAQEBAQEBAQABAQEAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABCyAAQZpqakEKSSAAQYZqakEGSXINAAJAIABBxGlqIgFBJ0sEQCAAQf9pakEDSQ0CDAELIAFBAWsOJQABAQEBAQEBAAABAQAAAQEBAAAAAAAAAAABAQAAAAAAAAAAAAABCyAAQZppakEKSQ0AIABBghdGIABBmmhqQQpJciAAQcJoaiIBQRlNQQBBASABdEGf7oMQcRtyDQACQCAAQcJnaiIBQSVLBEAgAEGAaGpBBUkNAgwBCyABQQdrDh0AAQEBAAEBAQEAAAAAAAAAAQEAAAAAAAAAAAAAAAELIABBmmdqQQpJDQACQCAAQcRmaiIBQSdLBEAgAEH/ZmpBA0kNAgwBCyABQQFrDiUAAQEBAQEBAQABAQEAAQEBAQAAAAAAAAABAQAAAAAAAAAAAAAAAQsgAEGaZmpBCkkNACAAQXxxIgFBgBpGDQACQCAAQcVlaiICQShLDQAgAkECaw4lAAEBAQEBAQEAAQEBAAEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAELIABBmmVqQQpJDQAgAEF4cUHYG0YgAEH+ZGpBAklyIABBtmRqIgJBDE1BAEEBIAJ0QeEvcRtyIABBmmRqQQpJcg0AIABBsR1GIABBjmRqQQJJciAAQc9jaiICQR1NQQBBASACdEH5h4D+A3EbciAAQbBjakEKSXINACAAQbhiakEGSSAAQeBhakEKSXIgAEHMYmoiAkEITUEAIAJBBkcbcg0AIABBAXIiAkGZHkYgAEGwYmpBCklyDQAgAkGHH0YgAEHzYGpBC0lyIABBy2FqIgJBCk1BAEEBIAJ0QZUMcRtyIABBj2FqQRRJIABB7lFqQQNJciAAQZdZakEJSSAAQaNZakEDSXJyciAAQfFeakEPSSAAQf5eakEMSXIgAEGPX2pBBEkgAEGZX2pBB0lyciAAQZ5fakEDSSAAQaJfakEDSXIgAEGqX2pBBEkgAEHAX2pBCklycnJyIABBxh9GIABB1V9qQRRJciAAQedgakEkSSAAQc5RakEDSXJyIABBrlFqQQJJIABBjlFqQQJJciAAQfVPakEDSSAAQaBQakEKSXJyciAAQd0vRiAAQcxQakEgSXIgAEGwRmpBA0kgAEGwR2pBCklyciAAQcBHakEKSSAAQdxHakEUSXIgAEGaSGpBDkkgAEHQSGpBCklycnJyciAAQd9IakENSSAAQYBJakEDSXIgAEGVSWpBCUkgAEGwSWpBCklyciAAQcxJakERSSAAQYBKakEFSXIgAEHQSmpBDkkgAEHwSmpBCklycnIgAEGBS2pBC0kgAEGgS2pBHUlyIABBq0tqQQpJIABB6UtqQQVJcnIgAEGwTGpBC0kgAEG6TWpBCklyIABB0E1qQQxJIABB4E1qQQxJcnJyciAAQakxRiAAQfBPakEKSXIgAEHARGpBOkkgAEGJRmpBA0lyciAAQe05RiAAQY5GakEDSXIgAEGsRmpBFUkgAEGFRGpBBUlycnJycg0AIABB4cEARiAAQZu+f2pBDElyIABBwb9/aiICQRVNQQBBASACdEGDgIABcRtyIABBsL5/akENSSAAQZGmf2pBA0lyIABB/9oARiAAQWBxQeDbAEZycnIgAEHWn39qQQZJIABB555/akECSXIgAEHvzAJGIABBjLN9akEKSXJyIABB4LN9akEKSXJyDQAgAEHisn1qQQJJIABBkLJ9akECSXIgAEH1r31qIgJBHE1BAEEBIAJ0QYGAgPgBcRtyDQACQCAAQf6vfWoiAkEESwRAIABBgK99akECSQ0CDAELIAJBAWsOAwAAAAELIAFBgNMCRiAAQc2sfWpBDklyIABBua19akENSSAAQdqtfWpBCElyciAAQYGufWpBC0kgAEGgrn1qQRJJciAAQcyufWpBEkkgAEGwrn1qQQpJcnJyIABB5dMCRiAAQderfWpBDklyIABBX3FBsKx9akEKSXJyDQAgAEGwq31qQQpJIABBvat9aiIBQQpNQQBBASABdEGBDHEbcg0AIABBnah9aiIBQQpNQQAgAUEIRxsNACAAQdCqfWoiAUERTUEAQQEgAXRBnYMLcRsNACAAQYWrfWpBA0kgAEGVqn1qIgFBC01BAEEBIAF0QZ8YcRtyDQAgAEFwcSIBQYD8A0YgAEGe9gNGciAAQZCofWpBCklyDQAgAUGg/ANGIABBzYN8akECSXIgAEGzg3xqQQNJciAAQfCBfGpBCklyIABBv/4DRnIPC0EBC1gBBX9BgIAEIQFBkAghAkF+IQMCQANAIANBAmoiA0HnA0sNASACKAIAIAFqIgEgAEsNASACQQRqIQQgAkEIaiECIAEgBCgCAGoiASAASQ0AC0EBIQULIAULWAEFf0GAgAQhAUGwFyECQX4hAwJAA0AgA0ECaiIDQfkBSw0BIAIoAgAgAWoiASAASw0BIAJBBGohBCACQQhqIQIgASAEKAIAaiIBIABJDQALQQEhBQsgBQvkHAEFfwJAAkAgAEG6empBDEkgAEGIfmpBygNJciAAQdZ+aiIBQRBNQQBBASABdEGBkARxG3IgAEHAfmpBF0kgAEGofmpBH0lycg0AIABBkHlqIgFBHE1BAEEBIAF0Qd/5groBcRsNACAAQfZ2akGmAUkgAEGJeGpBiwFJciAAQaB6aiIBQQ5NQQBBASABdEGfoAFxG3IgAEHyeGpBFEkgAEHdeGpB0wBJciAAQZF0akEESSAAQbB0akEbSXJyciAAQdkKRiAAQaB1akEpSXIgAEHPdWpBJklyIABBj3NqQeMASXJyDQAgAEEBciIEQe8MRiAAQeBzakErSXINACAAQe5xakEeSSAAQbZwakEhSXJBACAAQatyaiIBQTxJQoGAjLCAnIGACCABrYhCAYNQG3IgAEGxD0YgAEGzcWpB2QBJcnINACAAQYBwakEWSSAAQYxwaiIBQQZNQQBBASABdEHDAHEbcg0AAkAgAEHcb2oiAUEESwRAIABBmhBGDQIMAQsgAUEBaw4DAAAAAQsgAEH8bWpBNkkgAEHKbmpBCElyIABB4G5qQRVJIABBwG9qQRlJcnIgAEG9EkYgAEGgb2pBC0lyIABB0BJGIABBqG1qQQpJcnJyIABBj21qQRBJcg0AIABB7WxqQRZJIABB+2xqIgFBDElBAEH/GSABQf//A3F2QQFxG3INACAAQdZsakEHSSAAQYRsaiIBQRRNQQBBASABdEGB/OEAcRtyDQAgAEHObGoiAUEcTUEAQQEgAXRB8ZGAgAFxGw0AIABB7WtqQRZJIABBpGxqIgFBFU1BAEEBIAF0QbuAwAFxG3INACAAQe1qakEWSSAAQfFqakEDSXJBACAAQdZraiIBQTVJQv+2g4CAgOALIAGtiEIBg1AbciAAQY5rakEDSSAAQftqakEJSXJyDQACQAJAIABB1mpqIgFBJksEQCAAQYdqaiIBQRdLQQEgAXRBgeC/BnFFcg0BDAMLIAFBB2sOHwECAgECAgICAgEBAQIBAQEBAQEBAQEBAQEBAQEBAQECCyAAQaBqakECSQ0BCyAAQe1pakEWSQ0AAkACQCAAQY9paiIBQTNLBEAgAEHWaWoiAUETS0EBIAF0Qf/2I3FFcg0BDAMLIAFBAWsOMQEBAQEBAQEBAQEBAQEBAQEBAgECAgICAgIBAQECAgIBAgICAgEBAQICAQIBAgIBAQECCyAAQaRpaiIBQQVLDQAgAUECRw0BCyAAQdhoakEDSSAAQe5nakEXSXIgAEHyZ2pBA0kgAEH7Z2pBCElyciAAQdAXRiAAQdJoakEMSXIgAEG9GEYgAEHWZ2pBEElycnINACAAQdZmakEKSSAAQe5makEXSXJBACAAQahnaiIBQSlJQoeGgICAICABrYhCAYNQG3IgAEH7ZmpBCEkgAEHyZmpBA0lycg0AIABB+2VqIgFBC01BACABQQhHGw0AIABBy2ZqIgFBCE1BAEEBIAF0QZ8CcRsNACAAQb0aRiAAQe5lakEpSXIgAEGiZmoiAUEUTUEAQQEgAXRBjYDgAHEbciAAQc4aRiAAQc1kakEJSXIgAEHmZGpBGEkgAEH7ZGpBEklycnIgAEGGZWpBBkkgAEGsZWpBA0lyIABBoWVqQQNJcnINACAEQbMcRiAAQf9jakEwSXIgAEHDZGoiAUEKSUEAQfkHIAFB//8DcXZBAXEbciAAQcBjakEHSXINACAAQf9iaiIBQQxNQQBBASABdEHLJXEbDQAgAEF8cSIBQZQdRiAAQediakEHSXINACAAQYBgakErSSAAQfhgakEFSXJBACAAQd9iaiIDQSZJQtfsm4D5BSADrYhCAYNQG3IgAEG3YWpBJElyDQAgAEF4cSICQcAeRiAAQYAeRnIgAUHcHUZyDQAgAEGSX2pBA0kgAEHgXmpBJklyQQAgAEHBX2oiA0EoSUKBgPjDxxggA62IQgGDUBtyIABBjiFGIABBi19qQQ1JciAAQcchRiAAQc0hRnJyciAAQbZbakEESSAAQbBeakErSXIgAEGEXmpBzQJJcnINACAAQc5aakEESSAAQfBaakEhSXIgAEGwW2oiA0EJSUEAQf8CIANB//8DcXZBAXEbciAAQfZaakEESSAAQaZbakEESXIgAEGgW2pBKUlycg0AIABBgFFqQTRJIABBklFqQQNJciAAQchaaiIDQQlJQQBB/wIgA0H//wNxdkEBcRtyIABBoFFqQQ1JIABBwFFqQRJJciAAQeBRakESSSAAQfJRakEESXJyciAAQYBSakENSSAAQZJSakELSXIgAEHgUmpBywBJIABB/1JqQRpJcnIgAEGRU2pBEUkgAEH/V2pB7ARJciAAQYhYakEGSSAAQeBYakHWAElycnJyDQAgAEFwcSIDQYAnRiAAQehZakHDAElyIABB7llqQQRJIABBqFpqQTlJcnIgAEG+WmpBBEkgAEG4WmpBD0lyIABB1y9GIABB3C9GcnJyIABB4E9qQdkASSAAQYBMakEXSXIgAEHQTGpBGkkgAEGATWpBLElyciAAQZBNakEFSSAAQbBNakEeSXIgAEGATmpBH0kgAEHQTmpBxgBJcnJycg0AIABBqjFGIABBgE9qQSlJciAAQbtJakEHSSAAQftJakEvSXJyIABBpzVGIABB4EtqQTVJciAAQZdGakEESSAAQcNGakEDSXJyciAAQfBGakErSSAAQYBHakEJSXIgAEGmR2pBJEkgAEGzR2pBA0lyciAAQYBIakEkSSAAQcZIakEsSXIgBEGvN0YgAEH9SGpBHklycnJyDQEgAEGSRmoiBUEJSUEAQY8DIAVB//8DcXZBAXEbDQAgAkHQPkYgAEG4QWpBBklyIABB4EFqQSZJIABB6EFqQQZJcnIgAEGARmpBwAFJIABBgERqQZYCSXJyDQEgAEGhQWpBH0kgAEGAQWpBNUlyIABBp0FqIgJBBE1BAEEBIAJ0QRVxG3INASAAQcpAaiICQQlJQQBB/wIgAkH//wNxdkEBcRsNACAAQY5AakEDSSAAQaBAakENSXIgAUHQP0YgAEGqQGpBBklyciAAQb5AakEDSSAAQbpAakEHSXIgAEHxwABGIABBikBqQQdJcnJyIABB/8AARiAAQfC+f2pBDUlyIABBgsIARiAAQYfCAEZyciAAQZXCAEYgAEH2vX9qQQpJcnJyDQEgAEHovX9qIgJBEUlBAEG/oAUgAnZBAXEbDQAgAUG8wgBGIABB1r1/akEQSXINASAAQbu9f2oiAkEKSUEAQZ8EIAJB//8DcXZBAXEbDQAgAEGgp39qQYUBSSAAQdCnf2pBL0lyIABBoL1/akEpSSAAQYCof2pBL0lycg0BIABBlaZ/aiICQQlJQQBBjwMgAkH//wNxdkEBcRsNACAAQafaAEYgAEGApn9qQSZJciAAQa3aAEYgAEGAtn1qQY0CSXJyIABBsLZ9akEuSSAAQYDAfWpBjQlJciAAQYDkfmpB8KMBSSAAQYCYf2pBtjNJcnJyIANB8OMARiAAQeCcf2pBG0lyIABBz51/akHeAEkgAEH7nX9qQStJcnIgAUH84QBGIABB355/akHaAElyIABB5Z5/akEFSSAAQb+ff2pB1gBJcnJyciAAQciff2pBBUkgAEHPn39qQQVJciAAQd+ff2pBCUkgAEH7n39qQQNJcnIgAEGopH9qQQdJIABBsKR/akEHSXIgAEG4pH9qQQdJIABBwKR/akEHSXJyciAAQcikf2pBB0kgAEHQpH9qQQdJciAAQdikf2pBB0kgAEHgpH9qQQdJcnIgAEHv2gBGIABBgKV/akEXSXIgAEHQpX9qQThJIABB/q59akEySXJycnJyIABBwK99akE0SSAAQfSvfWpBF0lyIABB+a99akEESSAAQf2vfWpBA0lyciAAQYmwfWpBC0kgAEH1sH1qQS9JciAAQd6xfWpB5wBJIABB6bF9akEJSXJyciAAQeCyfWpB0ABJIABBgbN9akEfSXIgBEGrzAJGIABBwLN9akEvSXJyIANBkMwCRnJycg0BIABBjq59aiIBQQ1JQQBBvzQgAUH//wNxdkEBcRsNACAAQaCtfWpBHUkgAEH2rX1qQRxJciAAQdCtfWpBF0kgAEG8q31qQQhJcnIgAEHAq31qQQNJIABBgKx9akEpSXIgAEGGrH1qQQVJIABBmqx9akEKSXJyciAAQc/TAkYgAEGgrH1qQQVJciAAQfysfWpBL0kgAEGCq31qQTJJcnIgAEH61AJGIABBoKt9akEXSXJycg0BIABBz6p9aiIBQRJJQQBBsb4KIAF2QQFxGw0AIABBgIp8akEHSSAAQZCLfGpB6gBJciAAQYCOfGpB7gJJIABBtdB8akExSXJyIABB0NB8akEXSSAAQYCofWpBpNcASXIgAEGQqX1qQfMASSAAQaSpfWpBCklycnIgAEHQqX1qQStJIABB2Kl9akEHSXIgAEHgqX1qQQdJIABB76l9akEGSXJyIABBd3FB/6l9akEGSSAAQY6qfWpBA0lyIABBpap9akEDSSAAQaCqfWpBC0lycnJyDQEgAEHtiXxqIgFBC0lBAEGfCCABQf//A3F2QQFxGw0AIABB4Yl8akEKSSAAQdaJfGpBDUlyDQEgAEHIiXxqIgFBDUlBAEHfNiABQf//A3F2QQFxGw0AIABBroB8akEGSSAAQbaAfGpBBklyIABBvoB8akEGSSAAQZqBfGpB2QBJcnIgAEG/gXxqQRpJIABB34F8akEaSXIgAEGKg3xqQYcBSSAAQZCDfGpBBUlycnIgAEGQhHxqQQxJIABB7oR8akE2SXIgAEGwhXxqQcAASSAAQbqJfGpB7ABJcnJyDQEgAEGtiHxqQesCSQ0AIABBpoB8akEDSQ8LQQEPC0EBCzIAIABBgPgDcUGAsANGBH8gAEEKdEGA+D9xQaSgASgCAC8BAkH/B3FyQYCABGoFIAALC2IBAn9BASECAkAgAEH4/wNxQShGIABBRmpB//8DcUEGSXIgAEFfaiIBQQVNQQBBASABdEExcRtyDQAgAEGlf2oiAUEDTUEAIAFBAUcbDQAgAEGFf2pB//8DcUEESSECCyACC4QBAQV/QaSgASgCACEAQaigASgCACEDA38gAEECaiEBAkACQCAAIANPDQAgAS8BACIEQaR/aiICQQFNDQEgASEAIARBdmoiAkEDSw0CIAJBAWsOAgICAAtBpKABIAE2AgAQGg8LIAJBAWsEfyAAQQRqIQAMAQVBpKABIAE2AgBB3QALCxoLQwEDfwJAIAJFDQADQCAALQAAIgMgAS0AACIERgRAIAFBAWohASAAQQFqIQAgAkF/aiICDQEMAgsLIAMgBGshBQsgBQsLoRcCAEGUCAuBFwsAAAACAAAAGQAAAAIAAAASAAAAAgAAAAEAAAACAAAADgAAAAMAAAANAAAAIwAAAHoAAABGAAAANAAAAAwBAAAcAAAABAAAADAAAAAwAAAAHwAAAA4AAAAdAAAABgAAACUAAAALAAAAHQAAAAMAAAAjAAAABQAAAAcAAAACAAAABAAAACsAAACdAAAAEwAAACMAAAAFAAAAIwAAAAUAAAAnAAAACQAAADMAAACdAAAANgEAAAoAAAAVAAAACwAAAAcAAACZAAAABQAAAAMAAAAAAAAAAgAAACsAAAACAAAAAQAAAAQAAAAAAAAAAwAAABYAAAALAAAAFgAAAAoAAAAeAAAAQgAAABIAAAACAAAAAQAAAAsAAAAVAAAACwAAABkAAABHAAAANwAAAAcAAAABAAAAQQAAAAAAAAAQAAAAAwAAAAIAAAACAAAAAgAAABwAAAArAAAAHAAAAAQAAAAcAAAAJAAAAAcAAAACAAAAGwAAABwAAAA1AAAACwAAABUAAAALAAAAEgAAAA4AAAARAAAAbwAAAEgAAAA4AAAAMgAAAA4AAAAyAAAADgAAACMAAABdAQAAKQAAAAcAAAABAAAATwAAABwAAAALAAAAAAAAAAkAAAAVAAAAawAAABQAAAAcAAAAFgAAAA0AAAA0AAAATAAAACwAAAAhAAAAGAAAABsAAAAjAAAAHgAAAAAAAAADAAAAAAAAAAkAAAAiAAAABAAAAAAAAAANAAAALwAAAA8AAAADAAAAFgAAAAAAAAACAAAAAAAAACQAAAARAAAAAgAAABgAAABVAAAABgAAAAIAAAAAAAAAAgAAAAMAAAACAAAADgAAAAIAAAAJAAAACAAAAC4AAAAnAAAABwAAAAMAAAABAAAAAwAAABUAAAACAAAABgAAAAIAAAABAAAAAgAAAAQAAAAEAAAAAAAAABMAAAAAAAAADQAAAAQAAACfAAAANAAAABMAAAADAAAAFQAAAAIAAAAfAAAALwAAABUAAAABAAAAAgAAAAAAAAC5AAAALgAAACoAAAADAAAAJQAAAC8AAAAVAAAAAAAAADwAAAAqAAAADgAAAAAAAABIAAAAGgAAAOYAAAArAAAAdQAAAD8AAAAgAAAABwAAAAMAAAAAAAAAAwAAAAcAAAACAAAAAQAAAAIAAAAXAAAAEAAAAAAAAAACAAAAAAAAAF8AAAAHAAAAAwAAACYAAAARAAAAAAAAAAIAAAAAAAAAHQAAAAAAAAALAAAAJwAAAAgAAAAAAAAAFgAAAAAAAAAMAAAALQAAABQAAAAAAAAAIwAAADgAAAAIAQAACAAAAAIAAAAkAAAAEgAAAAAAAAAyAAAAHQAAAHEAAAAGAAAAAgAAAAEAAAACAAAAJQAAABYAAAAAAAAAGgAAAAUAAAACAAAAAQAAAAIAAAAfAAAADwAAAAAAAABIAQAAEgAAAL4AAAAAAAAAUAAAAJkDAABnAAAAbgAAABIAAADDAAAAvQoAAC4EAADSDwAARgIAALohAAA4AgAACAAAAB4AAAByAAAAHQAAABMAAAAvAAAAEQAAAAMAAAAgAAAAFAAAAAYAAAASAAAAsQIAAD8AAACBAAAASgAAAAYAAAAAAAAAQwAAAAwAAABBAAAAAQAAAAIAAAAAAAAAHQAAAPcXAAAJAAAA1QQAACsAAAAIAAAA+CIAAB4BAAAyAAAAAgAAABIAAAADAAAACQAAAIsBAAAFCQAAagAAAAYAAAAMAAAABAAAAAgAAAAIAAAACQAAAGcXAABUAAAAAgAAAEYAAAACAAAAAQAAAAMAAAAAAAAAAwAAAAEAAAADAAAAAwAAAAIAAAALAAAAAgAAAAAAAAACAAAABgAAAAIAAABAAAAAAgAAAAMAAAADAAAABwAAAAIAAAAGAAAAAgAAABsAAAACAAAAAwAAAAIAAAAEAAAAAgAAAAAAAAAEAAAABgAAAAIAAABTAQAAAwAAABgAAAACAAAAGAAAAAIAAAAeAAAAAgAAABgAAAACAAAAHgAAAAIAAAAYAAAAAgAAAB4AAAACAAAAGAAAAAIAAAAeAAAAAgAAABgAAAACAAAABwAAADUJAAAsAAAACwAAAAYAAAARAAAAAAAAAHIBAAArAAAAFQUAAMQAAAA8AAAAQwAAAAgAAAAAAAAAtQQAAAMAAAACAAAAGgAAAAIAAAABAAAAAgAAAAAAAAADAAAAAAAAAAIAAAAJAAAAAgAAAAMAAAACAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAFAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAgAAAAIAAAABAAAAAgAAAAAAAAADAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAMAAAADAAAAAgAAAAYAAAACAAAAAwAAAAIAAAADAAAAAgAAAAAAAAACAAAACQAAAAIAAAAQAAAABgAAAAIAAAACAAAABAAAAAIAAAAQAAAARREAAN2mAAAjAAAANBAAAAwAAADdAAAAAwAAAIEWAAAPAAAAMB0AACAMAAAdAgAA4wUAAEoTAAD9AQAAAAAAAOMAAAAAAAAAlgAAAAQAAAAmAQAACQAAAFgFAAACAAAAAgAAAAEAAAAGAAAAAwAAACkAAAACAAAABQAAAAAAAACmAAAAAQAAAD4CAAADAAAACQAAAAkAAAByAQAAAQAAAJoAAAAKAAAAsAAAAAIAAAA2AAAADgAAACAAAAAJAAAAEAAAAAMAAAAuAAAACgAAADYAAAAJAAAABwAAAAIAAAAlAAAADQAAAAIAAAAJAAAABgAAAAEAAAAtAAAAAAAAAA0AAAACAAAAMQAAAA0AAAAJAAAAAwAAAAIAAAALAAAAUwAAAAsAAAAHAAAAAAAAAKEAAAALAAAABgAAAAkAAAAHAAAAAwAAADgAAAABAAAAAgAAAAYAAAADAAAAAQAAAAMAAAACAAAACgAAAAAAAAALAAAAAQAAAAMAAAAGAAAABAAAAAQAAADBAAAAEQAAAAoAAAAJAAAABQAAAAAAAABSAAAAEwAAAA0AAAAJAAAA1gAAAAYAAAADAAAACAAAABwAAAABAAAAUwAAABAAAAAQAAAACQAAAFIAAAAMAAAACQAAAAkAAABUAAAADgAAAAUAAAAJAAAA8wAAAA4AAACmAAAACQAAAEcAAAAFAAAAAgAAAAEAAAADAAAAAwAAAAIAAAAAAAAAAgAAAAEAAAANAAAACQAAAHgAAAAGAAAAAwAAAAYAAAAEAAAAAAAAAB0AAAAJAAAAKQAAAAYAAAACAAAAAwAAAAkAAAAAAAAACgAAAAoAAAAvAAAADwAAAJYBAAAHAAAAAgAAAAcAAAARAAAACQAAADkAAAAVAAAAAgAAAA0AAAB7AAAABQAAAAQAAAAAAAAAAgAAAAEAAAACAAAABgAAAAIAAAAAAAAACQAAAAkAAAAxAAAABAAAAAIAAAABAAAAAgAAAAQAAAAJAAAACQAAAEoBAAADAAAAaksAAAkAAACHAAAABAAAADwAAAAGAAAAGgAAAAkAAAD2AwAAAAAAAAIAAAA2AAAACAAAAAMAAABSAAAAAAAAAAwAAAABAAAArEwAAAEAAADHFAAABAAAAAQAAAAFAAAACQAAAAcAAAADAAAABgAAAB8AAAADAAAAlQAAAAIAAACKBQAAMQAAAAECAAA2AAAABQAAADEAAAAJAAAAAAAAAA8AAAAAAAAAFwAAAAQAAAACAAAADgAAAFEFAAAGAAAAAgAAABAAAAADAAAABgAAAAIAAAABAAAAAgAAAAQAAAAGAQAABgAAAAoAAAAJAAAAowEAAA0AAADXBQAABgAAAG4AAAAGAAAABgAAAAkAAACXEgAACQAAAAcFDADvAEGYHwsSMIwAAAEAAAACAAAAAAQAANAf","function"==typeof atob?Uint8Array.from(atob(Q),A=>A.charCodeAt(0)):Buffer.from(Q,"base64")));var Q;const{exports:E}=await WebAssembly.instantiate(A);B=E})())} \ No newline at end of file diff --git a/deps/cjs-module-lexer/package.json b/deps/cjs-module-lexer/package.json index 9859ccaaaaca46..29e84f0a95c0b3 100755 --- a/deps/cjs-module-lexer/package.json +++ b/deps/cjs-module-lexer/package.json @@ -1,6 +1,6 @@ { "name": "cjs-module-lexer", - "version": "0.4.0", + "version": "0.4.2", "description": "Lexes CommonJS modules, returning their named exports metadata", "main": "lexer.js", "exports": { diff --git a/deps/v8/src/api/api.cc b/deps/v8/src/api/api.cc index 169c9bd7f90cea..3b6226b0f438d3 100644 --- a/deps/v8/src/api/api.cc +++ b/deps/v8/src/api/api.cc @@ -10745,7 +10745,8 @@ static i::HeapSnapshot* ToInternal(const HeapSnapshot* snapshot) { void HeapSnapshot::Delete() { i::Isolate* isolate = ToInternal(this)->profiler()->isolate(); - if (isolate->heap_profiler()->GetSnapshotsCount() > 1) { + if (isolate->heap_profiler()->GetSnapshotsCount() > 1 || + isolate->heap_profiler()->IsTakingSnapshot()) { ToInternal(this)->Delete(); } else { // If this is the last snapshot, clean up all accessory data as well. diff --git a/deps/v8/src/profiler/heap-profiler.cc b/deps/v8/src/profiler/heap-profiler.cc index f063fd1f476ad3..fc9bd00f47dd0f 100644 --- a/deps/v8/src/profiler/heap-profiler.cc +++ b/deps/v8/src/profiler/heap-profiler.cc @@ -18,7 +18,8 @@ namespace internal { HeapProfiler::HeapProfiler(Heap* heap) : ids_(new HeapObjectsMap(heap)), names_(new StringsStorage()), - is_tracking_object_moves_(false) {} + is_tracking_object_moves_(false), + is_taking_snapshot_(false) {} HeapProfiler::~HeapProfiler() = default; @@ -28,7 +29,8 @@ void HeapProfiler::DeleteAllSnapshots() { } void HeapProfiler::MaybeClearStringsStorage() { - if (snapshots_.empty() && !sampling_heap_profiler_ && !allocation_tracker_) { + if (snapshots_.empty() && !sampling_heap_profiler_ && !allocation_tracker_ && + !is_taking_snapshot_) { names_.reset(new StringsStorage()); } } @@ -66,6 +68,7 @@ HeapSnapshot* HeapProfiler::TakeSnapshot( v8::ActivityControl* control, v8::HeapProfiler::ObjectNameResolver* resolver, bool treat_global_objects_as_roots) { + is_taking_snapshot_ = true; HeapSnapshot* result = new HeapSnapshot(this, treat_global_objects_as_roots); { HeapSnapshotGenerator generator(result, control, resolver, heap()); @@ -78,6 +81,7 @@ HeapSnapshot* HeapProfiler::TakeSnapshot( } ids_->RemoveDeadEntries(); is_tracking_object_moves_ = true; + is_taking_snapshot_ = false; heap()->isolate()->debug()->feature_tracker()->Track( DebugFeatureTracker::kHeapSnapshot); @@ -138,10 +142,12 @@ void HeapProfiler::StopHeapObjectsTracking() { } } -int HeapProfiler::GetSnapshotsCount() { +int HeapProfiler::GetSnapshotsCount() const { return static_cast(snapshots_.size()); } +bool HeapProfiler::IsTakingSnapshot() const { return is_taking_snapshot_; } + HeapSnapshot* HeapProfiler::GetSnapshot(int index) { return snapshots_.at(index).get(); } diff --git a/deps/v8/src/profiler/heap-profiler.h b/deps/v8/src/profiler/heap-profiler.h index 0d964b5c5d606a..21d9bb8fcfd815 100644 --- a/deps/v8/src/profiler/heap-profiler.h +++ b/deps/v8/src/profiler/heap-profiler.h @@ -49,7 +49,8 @@ class HeapProfiler : public HeapObjectAllocationTracker { SnapshotObjectId PushHeapObjectsStats(OutputStream* stream, int64_t* timestamp_us); - int GetSnapshotsCount(); + int GetSnapshotsCount() const; + bool IsTakingSnapshot() const; HeapSnapshot* GetSnapshot(int index); SnapshotObjectId GetSnapshotObjectId(Handle obj); SnapshotObjectId GetSnapshotObjectId(NativeObject obj); @@ -93,6 +94,7 @@ class HeapProfiler : public HeapObjectAllocationTracker { std::unique_ptr names_; std::unique_ptr allocation_tracker_; bool is_tracking_object_moves_; + bool is_taking_snapshot_; base::Mutex profiler_mutex_; std::unique_ptr sampling_heap_profiler_; std::vector> diff --git a/deps/v8/test/cctest/test-heap-profiler.cc b/deps/v8/test/cctest/test-heap-profiler.cc index 63c88ae9b2b686..8a04ec4bc54c2d 100644 --- a/deps/v8/test/cctest/test-heap-profiler.cc +++ b/deps/v8/test/cctest/test-heap-profiler.cc @@ -4126,3 +4126,40 @@ TEST(Bug8373_2) { heap_profiler->StopTrackingHeapObjects(); } + +TEST(HeapSnapshotDeleteDuringTakeSnapshot) { + // Check that a heap snapshot can be deleted during GC while another one + // is being taken. + + LocalContext env; + v8::HandleScope scope(env->GetIsolate()); + v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); + int gc_calls = 0; + v8::Global handle; + + { + struct WeakData { + const v8::HeapSnapshot* snapshot; + int* gc_calls; + v8::Global* handle; + }; + WeakData* data = + new WeakData{heap_profiler->TakeHeapSnapshot(), &gc_calls, &handle}; + + v8::HandleScope scope(env->GetIsolate()); + handle.Reset(env->GetIsolate(), v8::Object::New(env->GetIsolate())); + handle.SetWeak( + data, + [](const v8::WeakCallbackInfo& data) { + std::unique_ptr weakdata{data.GetParameter()}; + const_cast(weakdata->snapshot)->Delete(); + ++*weakdata->gc_calls; + weakdata->handle->Reset(); + }, + v8::WeakCallbackType::kParameter); + } + CHECK_EQ(gc_calls, 0); + + CHECK(ValidateSnapshot(heap_profiler->TakeHeapSnapshot())); + CHECK_EQ(gc_calls, 1); +} diff --git a/doc/api/assert.md b/doc/api/assert.md index b1b77b8f3d6ea7..1fd57b6f9f901d 100644 --- a/doc/api/assert.md +++ b/doc/api/assert.md @@ -16,6 +16,7 @@ changes: - version: - v13.9.0 - v12.16.2 + pr-url: https://github.com/nodejs/node/pull/31635 description: Changed "strict mode" to "strict assertion mode" and "legacy mode" to "legacy assertion mode" to avoid confusion with the more usual meaning of "strict mode". @@ -313,17 +314,23 @@ changes: minor comparison adjustments to make the check less surprising. - version: v9.0.0 pr-url: https://github.com/nodejs/node/pull/15001 - description: The `Error` names and messages are now properly compared + description: The `Error` names and messages are now properly compared. - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/12142 - description: The `Set` and `Map` content is also compared - - version: v6.4.0, v4.7.1 + description: The `Set` and `Map` content is also compared. + - version: + - v6.4.0 + - v4.7.1 pr-url: https://github.com/nodejs/node/pull/8002 description: Typed array slices are handled correctly now. - - version: v6.1.0, v4.5.0 + - version: + - v6.1.0 + - v4.5.0 pr-url: https://github.com/nodejs/node/pull/6432 description: Objects with circular references can be used as inputs now. - - version: v5.10.1, v4.4.3 + - version: + - v5.10.1 + - v4.4.3 pr-url: https://github.com/nodejs/node/pull/5910 description: Handle non-`Uint8Array` typed arrays correctly. --> @@ -433,17 +440,21 @@ changes: comparison. - version: v8.5.0 pr-url: https://github.com/nodejs/node/pull/15001 - description: The `Error` names and messages are now properly compared + description: The `Error` names and messages are now properly compared. - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/12142 - description: The `Set` and `Map` content is also compared - - version: v6.4.0, v4.7.1 + description: The `Set` and `Map` content is also compared. + - version: + - v6.4.0 + - v4.7.1 pr-url: https://github.com/nodejs/node/pull/8002 description: Typed array slices are handled correctly now. - version: v6.1.0 pr-url: https://github.com/nodejs/node/pull/6432 description: Objects with circular references can be used as inputs now. - - version: v5.10.1, v4.4.3 + - version: + - v5.10.1 + - v4.4.3 pr-url: https://github.com/nodejs/node/pull/5910 description: Handle non-`Uint8Array` typed arrays correctly. --> @@ -665,7 +676,9 @@ assert.doesNotReject(Promise.reject(new TypeError('Wrong value'))) @@ -1052,17 +1071,21 @@ changes: comparison. - version: v9.0.0 pr-url: https://github.com/nodejs/node/pull/15001 - description: The `Error` names and messages are now properly compared + description: The `Error` names and messages are now properly compared. - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/12142 - description: The `Set` and `Map` content is also compared - - version: v6.4.0, v4.7.1 + description: The `Set` and `Map` content is also compared. + - version: + - v6.4.0 + - v4.7.1 pr-url: https://github.com/nodejs/node/pull/8002 description: Typed array slices are handled correctly now. - version: v6.1.0 pr-url: https://github.com/nodejs/node/pull/6432 description: Objects with circular references can be used as inputs now. - - version: v5.10.1, v4.4.3 + - version: + - v5.10.1 + - v4.4.3 pr-url: https://github.com/nodejs/node/pull/5910 description: Handle non-`Uint8Array` typed arrays correctly. --> @@ -1137,7 +1160,7 @@ added: v0.1.21 changes: - version: v10.0.0 pr-url: https://github.com/nodejs/node/pull/17003 - description: Used comparison changed from Strict Equality to `Object.is()` + description: Used comparison changed from Strict Equality to `Object.is()`. --> * `actual` {any} @@ -1316,7 +1339,7 @@ added: v0.1.21 changes: - version: v10.0.0 pr-url: https://github.com/nodejs/node/pull/17003 - description: Used comparison changed from Strict Equality to `Object.is()` + description: Used comparison changed from Strict Equality to `Object.is()`. --> * `actual` {any} diff --git a/doc/api/async_hooks.md b/doc/api/async_hooks.md index 0a8b8d1c5200ad..cf3fd79ffafc21 100644 --- a/doc/api/async_hooks.md +++ b/doc/api/async_hooks.md @@ -544,7 +544,7 @@ added: v8.1.0 changes: - version: v8.2.0 pr-url: https://github.com/nodejs/node/pull/13490 - description: Renamed from `currentId` + description: Renamed from `currentId`. --> * Returns: {number} The `asyncId` of the current execution context. Useful to diff --git a/doc/api/buffer.md b/doc/api/buffer.md index 4aaa59ef92853e..9240f1c53a385b 100644 --- a/doc/api/buffer.md +++ b/doc/api/buffer.md @@ -386,9 +386,9 @@ A `TypeError` will be thrown if `size` is not a number. The `Buffer` module pre-allocates an internal `Buffer` instance of size [`Buffer.poolSize`][] that is used as a pool for the fast allocation of new `Buffer` instances created using [`Buffer.allocUnsafe()`][], -[`Buffer.from(array)`][], and the deprecated `new Buffer(size)` constructor only -when `size` is less than or equal to `Buffer.poolSize >> 1` (floor of -[`Buffer.poolSize`][] divided by two). +[`Buffer.from(array)`][], [`Buffer.concat()`][], and the deprecated +`new Buffer(size)` constructor only when `size` is less than or equal +to `Buffer.poolSize >> 1` (floor of [`Buffer.poolSize`][] divided by two). Use of this pre-allocated internal memory pool is a key difference between calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. @@ -560,6 +560,9 @@ console.log(bufA.length); // Prints: 42 ``` +`Buffer.concat()` may also use the internal `Buffer` pool like +[`Buffer.allocUnsafe()`][] does. + ### Static method: `Buffer.from(array)` @@ -763,10 +766,6 @@ This is the size (in bytes) of pre-allocated internal `Buffer` instances used for pooling. This value may be modified. ### `buf[index]` - * `index` {integer} @@ -1132,7 +1131,9 @@ changes: - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/10236 description: The `value` can now be a `Uint8Array`. - - version: v5.7.0, v4.4.0 + - version: + - v5.7.0 + - v4.4.0 pr-url: https://github.com/nodejs/node/pull/4803 description: When `encoding` is being passed, the `byteOffset` parameter is no longer required. @@ -1405,7 +1406,9 @@ added: - v12.0.0 - v10.20.0 changes: - - version: v14.10.0 + - version: + - v14.10.0 + - v12.19.0 pr-url: https://github.com/nodejs/node/pull/34960 description: This function is also available as `buf.readBigUint64LE()`. --> @@ -1987,7 +1990,9 @@ console.log(buf.subarray(-5, -2).toString()); @@ -856,7 +858,9 @@ changes: - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/10653 description: The `input` option can now be a `Uint8Array`. - - version: v6.2.1, v4.5.0 + - version: + - v6.2.1 + - v4.5.0 pr-url: https://github.com/nodejs/node/pull/6939 description: The `encoding` option can now explicitly be set to `buffer`. - version: v5.7.0 diff --git a/doc/api/cli.md b/doc/api/cli.md index a5c678b30cb405..0112319a3a3ec4 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -274,7 +274,7 @@ changes: - version: v13.6.0 pr-url: https://github.com/nodejs/node/pull/30980 description: changed from `--experimental-wasi-unstable-preview0` to - `--experimental-wasi-unstable-preview1` + `--experimental-wasi-unstable-preview1`. --> Enable experimental WebAssembly System Interface (WASI) support. @@ -674,7 +674,7 @@ changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/27312 description: Changed from `--diagnostic-report-directory` to - `--report-directory` + `--report-directory`. --> Location at which the report will be generated. @@ -689,7 +689,7 @@ changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/27312 description: changed from `--diagnostic-report-filename` to - `--report-filename` + `--report-filename`. --> Name of the file to which the report will be written. @@ -704,7 +704,7 @@ changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/27312 description: changed from `--diagnostic-report-on-fatalerror` to - `--report-on-fatalerror` + `--report-on-fatalerror`. --> Enables the report to be triggered on fatal errors (internal errors within @@ -723,7 +723,7 @@ changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/27312 description: changed from `--diagnostic-report-on-signal` to - `--report-on-signal` + `--report-on-signal`. --> Enables report to be generated upon receiving the specified (or predefined) @@ -740,7 +740,7 @@ changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/27312 description: changed from `--diagnostic-report-signal` to - `--report-signal` + `--report-signal`. --> Sets or resets the signal for report generation (not supported on Windows). @@ -756,7 +756,7 @@ changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/27312 description: changed from `--diagnostic-report-uncaught-exception` to - `--report-uncaught-exception` + `--report-uncaught-exception`. --> Enables report to be generated on uncaught exceptions. Useful when inspecting diff --git a/doc/api/crypto.md b/doc/api/crypto.md index b6bd41b9fdfa1b..880d27ba1b7a59 100644 --- a/doc/api/crypto.md +++ b/doc/api/crypto.md @@ -840,13 +840,13 @@ console.log(uncompressedKey === ecdh.getPublicKey('hex')); * `otherPublicKey` {string | Buffer | TypedArray | DataView} @@ -1249,14 +1249,14 @@ changes: description: Added support for `'dh'`. - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/26960 - description: Added support for `'rsa-pss'` + description: Added support for `'rsa-pss'`. - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/26786 description: This property now returns `undefined` for KeyObject instances of unrecognized type instead of aborting. - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/26774 - description: Added support for `'x25519'` and `'x448'` + description: Added support for `'x25519'` and `'x448'`. - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/26319 description: Added support for `'ed25519'` and `'ed448'`. diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index 2f5f7bed39d0c6..16c2e95eaa3fde 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -47,8 +47,8 @@ changes: pr-url: https://github.com/nodejs/node/pull/31164 description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v1.6.0 @@ -84,10 +84,10 @@ The `_linklist` module is deprecated. Please use a userland alternative. changes: - version: v14.0.0 pr-url: https://github.com/nodejs/node/pull/31165 - description: End-of-Life + description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v0.11.15 @@ -107,11 +107,11 @@ changes: pr-url: https://github.com/nodejs/node/pull/17882 description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - - version: 0.4.0 + - version: v0.4.0 commit: 9c7f89bf56abd37a796fea621ad2e47dd33d2b82 description: Documentation-only deprecation. --> @@ -167,8 +167,8 @@ changes: pr-url: https://github.com/nodejs/node/pull/25279 description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v0.11.14 @@ -232,7 +232,7 @@ to the `constants` property exposed by the relevant module. For instance, changes: - version: v14.0.0 pr-url: https://github.com/nodejs/node/pull/31166 - description: End-of-Life (for `digest === null`) + description: End-of-Life (for `digest === null`). - version: v11.0.0 pr-url: https://github.com/nodejs/node/pull/22861 description: Runtime deprecation (for `digest === null`). @@ -268,8 +268,8 @@ changes: pr-url: https://github.com/nodejs/node/pull/21153 description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v0.11.13 @@ -289,8 +289,8 @@ changes: pr-url: https://github.com/nodejs/node/pull/21153 description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v0.11.13 @@ -310,8 +310,8 @@ changes: pr-url: https://github.com/nodejs/node/pull/15412 description: End-of-Life. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v0.11.7 @@ -346,14 +346,14 @@ changes: - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/9683 description: End-of-Life. - - version: v6.0.0 - pr-url: https://github.com/nodejs/node/pull/4525 - description: Runtime deprecation. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. + - version: v6.0.0 + pr-url: https://github.com/nodejs/node/pull/4525 + description: Runtime deprecation. - version: v0.1.96 commit: c93e0aaf062081db3ec40ac45b3e2c979d5759d6 description: Documentation-only deprecation. @@ -370,14 +370,14 @@ changes: - version: v8.0.0 pr-url: https://github.com/nodejs/node/pull/9683 description: End-of-Life. - - version: v6.0.0 - pr-url: https://github.com/nodejs/node/pull/4525 - description: Runtime deprecation. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. + - version: v6.0.0 + pr-url: https://github.com/nodejs/node/pull/4525 + description: Runtime deprecation. - version: v0.1.96 commit: c93e0aaf062081db3ec40ac45b3e2c979d5759d6 description: Documentation-only deprecation. @@ -393,7 +393,7 @@ The [`fs.readSync()`][] legacy `String` interface is deprecated. Use the changes: - version: v14.0.0 pr-url: https://github.com/nodejs/node/pull/31167 - description: End-of-Life + description: End-of-Life. - version: v6.12.0 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. @@ -444,8 +444,8 @@ changes: pr-url: https://github.com/nodejs/node/pull/26973 description: Removed functionality. - version: - - v4.8.6 - v6.12.0 + - v4.8.6 pr-url: https://github.com/nodejs/node/pull/10116 description: A deprecation code has been assigned. - version: v1.8.1 @@ -462,8 +462,8 @@ This behavior has been removed. @@ -735,8 +735,8 @@ The [`fs.exists(path, callback)`][] API is deprecated. Please use @@ -927,13 +927,13 @@ instead. @@ -946,13 +946,13 @@ The [`util.isBoolean()`][] API is deprecated. @@ -966,13 +966,13 @@ The [`util.isBuffer()`][] API is deprecated. Please use @@ -985,13 +985,13 @@ The [`util.isDate()`][] API is deprecated. @@ -1004,13 +1004,13 @@ The [`util.isError()`][] API is deprecated. @@ -1023,13 +1023,13 @@ The [`util.isFunction()`][] API is deprecated. @@ -1042,13 +1042,13 @@ The [`util.isNull()`][] API is deprecated. @@ -1061,13 +1061,13 @@ The [`util.isNullOrUndefined()`][] API is deprecated. @@ -1076,17 +1076,17 @@ Type: Documentation-only The [`util.isNumber()`][] API is deprecated. -### DEP0053 `util.isObject()` +### DEP0053: `util.isObject()` @@ -1099,13 +1099,13 @@ The [`util.isObject()`][] API is deprecated. @@ -1118,13 +1118,13 @@ The [`util.isPrimitive()`][] API is deprecated. @@ -1137,13 +1137,13 @@ The [`util.isRegExp()`][] API is deprecated. @@ -1156,13 +1156,13 @@ The [`util.isString()`][] API is deprecated. @@ -1175,13 +1175,13 @@ The [`util.isSymbol()`][] API is deprecated. @@ -1243,12 +1243,12 @@ alternative. ### DEP0062: `node --debug` Type: End-of-Life @@ -1675,12 +1675,12 @@ code modification is necessary if that is done. ### DEP0085: AsyncHooks sensitive API @@ -1694,12 +1694,12 @@ Use the `AsyncResource` API instead. See ### DEP0086: Remove `runInAsyncIdScope` @@ -1717,7 +1717,7 @@ changes: description: Deprecation revoked. - version: - v9.9.0 - - v10.0.0 + - v8.13.0 pr-url: https://github.com/nodejs/node/pull/17002 description: Documentation-only deprecation. --> @@ -1845,11 +1845,11 @@ should start using the `async_context` variant of `MakeCallback` or changes: - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/26530 - description: End-of-Life + description: End-of-Life. - version: - - v8.12.0 - - v9.6.0 - v10.0.0 + - v9.6.0 + - v8.12.0 pr-url: https://github.com/nodejs/node/pull/18632 description: Runtime deprecation. --> @@ -2059,12 +2059,12 @@ The `produceCachedData` option is deprecated. Use ### DEP0111: `process.binding()` Type: Documentation-only (supports [`--pending-deprecation`][]) @@ -2121,6 +2121,9 @@ The `crypto._toBuf()` function was not designed to be used by modules outside of Node.js core and was removed. ### DEP0115: `crypto.prng()`, `crypto.pseudoRandomBytes()`, `crypto.rng()` + + + + + Type: Documentation-only (supports [`--pending-deprecation`][]) In recent versions of Node.js, there is no difference between @@ -2423,6 +2428,7 @@ an officially supported API. changes: - version: v13.0.0 pr-url: https://github.com/nodejs/node/pull/29061 + description: Runtime deprecation. --> Type: Runtime @@ -2504,7 +2510,9 @@ purpose and is only available on CommonJS environment. ### DEP0139: `process.umask()` with no arguments @@ -2519,7 +2527,9 @@ API. ### DEP0140: Use `request.destroy()` instead of `request.abort()` @@ -2569,7 +2579,9 @@ no longer required due to simplification of the implementation. ### DEP0144: `module.parent` @@ -2623,6 +2635,20 @@ Type: Documentation-only The [`crypto.Certificate()` constructor][] is deprecated. Use [static methods of `crypto.Certificate()`][] instead. +### DEP0147: `fs.rmdir(path, { recursive: true })` + + +Type: Documentation-only + +In future versions of Node.js, `fs.rmdir(path, { recursive: true })` will throw +on nonexistent paths, or when given a file as a target. +Use `fs.rm(path, { recursive: true, force: true })` instead. + [Legacy URL API]: url.md#url_legacy_url_api [NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf [RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3 diff --git a/doc/api/dgram.md b/doc/api/dgram.md index 9c289b3fb7cca8..209c76ccdb0601 100644 --- a/doc/api/dgram.md +++ b/doc/api/dgram.md @@ -174,7 +174,8 @@ This method throws `EBADF` if called on an unbound socket. * `msg` {Buffer|TypedArray|DataView|string|Array} Message to be sent. @@ -732,16 +733,16 @@ chained. * `options` {Object} Available options are: diff --git a/doc/api/domain.md b/doc/api/domain.md index ccfbc258504e1a..c7aabd489bd27c 100644 --- a/doc/api/domain.md +++ b/doc/api/domain.md @@ -3,6 +3,7 @@ deprecated: v1.4.2 changes: - version: v8.8.0 + pr-url: https://github.com/nodejs/node/pull/15695 description: Any `Promise`s created in VM contexts no longer have a `.domain` property. Their handlers are still executed in the proper domain, however, and `Promise`s created in the main diff --git a/doc/api/errors.md b/doc/api/errors.md index 7e172d58d7fe3a..4c963210ad9c56 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -928,6 +928,11 @@ added: v14.0.0 Used when a feature that is not available to the current platform which is running Node.js is used. + +### `ERR_FS_EISDIR` + +Path is a directory. + ### `ERR_FS_FILE_TOO_LARGE` @@ -1735,8 +1740,8 @@ An attempt was made to `require()` an [ES Module][]. ### `ERR_SCRIPT_EXECUTION_INTERRUPTED` -Script execution was interrupted by `SIGINT` (For example, when Ctrl+C was -pressed). +Script execution was interrupted by `SIGINT` (For example, +Ctrl+C was pressed.) ### `ERR_SCRIPT_EXECUTION_TIMEOUT` @@ -2203,7 +2208,8 @@ changes: - version: - v11.4.0 - v10.15.0 - pr-url: https://github.com/nodejs/node/commit/186035243fad247e3955f + commit: 186035243fad247e3955f + pr-url: https://github.com/nodejs-private/node-private/pull/143 description: Max header size in `http_parser` was set to 8KB. --> diff --git a/doc/api/esm.md b/doc/api/esm.md index d28dd01a6e952e..b342349fec18cb 100644 --- a/doc/api/esm.md +++ b/doc/api/esm.md @@ -1282,7 +1282,7 @@ success! [`transformSource` hook]: #esm_transformsource_source_context_defaulttransformsource [`string`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String [`util.TextDecoder`]: util.md#util_class_util_textdecoder -[cjs-module-lexer]: https://github.com/guybedford/cjs-module-lexer/tree/0.4.0 +[cjs-module-lexer]: https://github.com/guybedford/cjs-module-lexer/tree/0.4.2 [special scheme]: https://url.spec.whatwg.org/#special-scheme [the official standard format]: https://tc39.github.io/ecma262/#sec-modules [transpiler loader example]: #esm_transpiler_loader diff --git a/doc/api/events.md b/doc/api/events.md index 77ba17f6561a5b..ba83c8ff90ad60 100644 --- a/doc/api/events.md +++ b/doc/api/events.md @@ -291,7 +291,9 @@ myEmitter.emit('event'); > Stability: 0 - Deprecated: Use [`fs.stat()`][] or [`fs.access()`][] instead. @@ -2154,6 +2154,10 @@ Synchronous fdatasync(2). Returns `undefined`. * `fd` {integer} @@ -2507,6 +2507,10 @@ Synchronous link(2). Returns `undefined`. * `path` {string|Buffer|URL} @@ -2542,14 +2542,14 @@ not the file that it refers to. * `path` {string|Buffer|URL} @@ -2922,7 +2922,7 @@ changes: - version: v13.11.0 pr-url: https://github.com/nodejs/node/pull/31402 description: Options object can be passed in - to make Buffer, offset, length and position optional + to make Buffer, offset, length and position optional. --> * `fd` {integer} * `options` {Object} @@ -3220,7 +3220,7 @@ changes: - version: v14.0.0 pr-url: https://github.com/nodejs/node/pull/32460 description: Options object can be passed in - to make offset, length and position optional + to make offset, length and position optional. --> * `fd` {integer} @@ -3508,10 +3508,10 @@ changes: * `path` {string|Buffer|URL} * `options` {Object} * `maxRetries` {integer} If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or - `EPERM` error is encountered, Node.js will retry the operation with a linear - backoff wait of `retryDelay` ms longer on each try. This option represents - the number of retries. This option is ignored if the `recursive` option is - not `true`. **Default:** `0`. + `EPERM` error is encountered, Node.js retries the operation with a linear + backoff wait of `retryDelay` milliseconds longer on each try. This option + represents the number of retries. This option is ignored if the `recursive` + option is not `true`. **Default:** `0`. * `recursive` {boolean} If `true`, perform a recursive directory removal. In recursive mode, errors are not reported if `path` does not exist, and operations are retried on failure. **Default:** `false`. @@ -3559,10 +3559,10 @@ changes: * `path` {string|Buffer|URL} * `options` {Object} * `maxRetries` {integer} If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or - `EPERM` error is encountered, Node.js will retry the operation with a linear - backoff wait of `retryDelay` ms longer on each try. This option represents - the number of retries. This option is ignored if the `recursive` option is - not `true`. **Default:** `0`. + `EPERM` error is encountered, Node.js retries the operation with a linear + backoff wait of `retryDelay` milliseconds longer on each try. This option + represents the number of retries. This option is ignored if the `recursive` + option is not `true`. **Default:** `0`. * `recursive` {boolean} If `true`, perform a recursive directory removal. In recursive mode, errors are not reported if `path` does not exist, and operations are retried on failure. **Default:** `false`. @@ -3581,10 +3581,63 @@ that represent files will be deleted. The permissive behavior of the `recursive` option is deprecated, `ENOTDIR` and `ENOENT` will be thrown in the future. +## `fs.rm(path[, options], callback)` + + +* `path` {string|Buffer|URL} +* `options` {Object} + * `force` {boolean} When `true`, exceptions will be ignored if `path` does + not exist. **Default:** `false`. + * `maxRetries` {integer} If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + `EPERM` error is encountered, Node.js will retry the operation with a linear + backoff wait of `retryDelay` milliseconds longer on each try. This option + represents the number of retries. This option is ignored if the `recursive` + option is not `true`. **Default:** `0`. + * `recursive` {boolean} If `true`, perform a recursive removal. In + recursive mode operations are retried on failure. **Default:** `false`. + * `retryDelay` {integer} The amount of time in milliseconds to wait between + retries. This option is ignored if the `recursive` option is not `true`. + **Default:** `100`. +* `callback` {Function} + * `err` {Error} + +Asynchronously removes files and directories (modeled on the standard POSIX `rm` +utility). No arguments other than a possible exception are given to the +completion callback. + +## `fs.rmSync(path[, options])` + + +* `path` {string|Buffer|URL} +* `options` {Object} + * `force` {boolean} When `true`, exceptions will be ignored if `path` does + not exist. **Default:** `false`. + * `maxRetries` {integer} If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + `EPERM` error is encountered, Node.js will retry the operation with a linear + backoff wait of `retryDelay` milliseconds longer on each try. This option + represents the number of retries. This option is ignored if the `recursive` + option is not `true`. **Default:** `0`. + * `recursive` {boolean} If `true`, perform a recursive directory removal. In + recursive mode operations are retried on failure. **Default:** `false`. + * `retryDelay` {integer} The amount of time in milliseconds to wait between + retries. This option is ignored if the `recursive` option is not `true`. + **Default:** `100`. + +Synchronously removes files and directories (modeled on the standard POSIX `rm` +utility). Returns `undefined`. + ## `fs.stat(path[, options], callback)` * `path` {string|Buffer|URL} @@ -3698,14 +3747,14 @@ Stats { * `path` {string|Buffer|URL} @@ -3720,15 +3769,15 @@ Synchronous stat(2). * `target` {string|Buffer|URL} @@ -3768,15 +3817,15 @@ example/ * `target` {string|Buffer|URL} @@ -4169,7 +4218,7 @@ changes: - version: v10.10.0 pr-url: https://github.com/nodejs/node/pull/22150 description: The `buffer` parameter can now be any `TypedArray` or a - `DataView` + `DataView`. - version: v10.0.0 pr-url: https://github.com/nodejs/node/pull/12562 description: The `callback` parameter is no longer optional. Not passing @@ -4362,8 +4411,8 @@ fs.write(fd, Buffer.from(data, options.encoding), callback); ``` The difference from directly calling `fs.write()` is that under some unusual -conditions, `fs.write()` may write only part of the buffer and will need to be -retried to write the remaining data, whereas `fs.writeFile()` will retry until +conditions, `fs.write()` might write only part of the buffer and need to be +retried to write the remaining data, whereas `fs.writeFile()` retries until the data is entirely written (or an error occurs). The implications of this are a common source of confusion. In @@ -5446,10 +5495,10 @@ changes: * `path` {string|Buffer|URL} * `options` {Object} * `maxRetries` {integer} If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or - `EPERM` error is encountered, Node.js will retry the operation with a linear - backoff wait of `retryDelay` ms longer on each try. This option represents - the number of retries. This option is ignored if the `recursive` option is - not `true`. **Default:** `0`. + `EPERM` error is encountered, Node.js retries the operation with a linear + backoff wait of `retryDelay` milliseconds longer on each try. This option + represents the number of retries. This option is ignored if the `recursive` + option is not `true`. **Default:** `0`. * `recursive` {boolean} If `true`, perform a recursive directory removal. In recursive mode, errors are not reported if `path` does not exist, and operations are retried on failure. **Default:** `false`. @@ -5471,6 +5520,29 @@ that represent files will be deleted. The permissive behavior of the `recursive` option is deprecated, `ENOTDIR` and `ENOENT` will be thrown in the future. +## `fsPromises.rm(path[, options])` + + +* `path` {string|Buffer|URL} +* `options` {Object} + * `force` {boolean} When `true`, exceptions will be ignored if `path` does + not exist. **Default:** `false`. + * `maxRetries` {integer} If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + `EPERM` error is encountered, Node.js will retry the operation with a linear + backoff wait of `retryDelay` milliseconds longer on each try. This option + represents the number of retries. This option is ignored if the `recursive` + option is not `true`. **Default:** `0`. + * `recursive` {boolean} If `true`, perform a recursive directory removal. In + recursive mode operations are retried on failure. **Default:** `false`. + * `retryDelay` {integer} The amount of time in milliseconds to wait between + retries. This option is ignored if the `recursive` option is not `true`. + **Default:** `100`. + +Removes files and directories (modeled on the standard POSIX `rm` utility). +Resolves the `Promise` with no arguments on success. + ### `fsPromises.stat(path[, options])` * `exception` {Error} @@ -1182,7 +1182,7 @@ per connection (in the case of HTTP Keep-Alive connections). added: v0.1.94 changes: - version: v10.0.0 - pr-url: v10.0.0 + pr-url: https://github.com/nodejs/node/pull/19981 description: Not listening to this event no longer causes the socket to be destroyed if a client sends an Upgrade header. --> @@ -1786,13 +1786,18 @@ the request body should be sent. See the [`'checkContinue'`][] event on diff --git a/doc/api/http2.md b/doc/api/http2.md index 4a2bcb8ce97227..133cb564f6e8d0 100644 --- a/doc/api/http2.md +++ b/doc/api/http2.md @@ -2054,6 +2054,9 @@ added: v8.4.0 changes: - version: - v14.4.0 + - v12.18.0 + - v10.21.0 + commit: 3948830ce6408be620b09a70bf66158623022af0 pr-url: https://github.com/nodejs-private/node-private/pull/204 description: Added `maxSettings` option with a default of 32. - version: @@ -2075,6 +2078,10 @@ changes: pr-url: https://github.com/nodejs/node/pull/27782 description: The `options` parameter now supports `net.createServer()` options. + - version: v9.6.0 + pr-url: https://github.com/nodejs/node/pull/15752 + description: Added the `Http1IncomingMessage` and `Http1ServerResponse` + option. - version: v8.9.3 pr-url: https://github.com/nodejs/node/pull/17105 description: Added the `maxOutstandingPings` option with a default limit of @@ -2083,10 +2090,6 @@ changes: pr-url: https://github.com/nodejs/node/pull/16676 description: Added the `maxHeaderListPairs` option with a default limit of 128 header pairs. - - version: v9.6.0 - pr-url: https://github.com/nodejs/node/pull/15752 - description: Added the `Http1IncomingMessage` and `Http1ServerResponse` - option. --> * `options` {Object} @@ -2193,6 +2196,9 @@ added: v8.4.0 changes: - version: - v14.4.0 + - v12.18.0 + - v10.21.0 + commit: 3948830ce6408be620b09a70bf66158623022af0 pr-url: https://github.com/nodejs-private/node-private/pull/204 description: Added `maxSettings` option with a default of 32. - version: @@ -2319,6 +2325,9 @@ added: v8.4.0 changes: - version: - v14.4.0 + - v12.18.0 + - v10.21.0 + commit: 3948830ce6408be620b09a70bf66158623022af0 pr-url: https://github.com/nodejs-private/node-private/pull/204 description: Added `maxSettings` option with a default of 32. - version: v13.0.0 diff --git a/doc/api/https.md b/doc/api/https.md index 050a204ef116dd..c11e103af16539 100644 --- a/doc/api/https.md +++ b/doc/api/https.md @@ -13,13 +13,13 @@ separate module. An [`Agent`][] object for HTTPS similar to [`http.Agent`][]. See diff --git a/doc/api/modules.md b/doc/api/modules.md index 0816b7257f1b89..31726a9434e4ac 100644 --- a/doc/api/modules.md +++ b/doc/api/modules.md @@ -902,7 +902,9 @@ loading. ### `module.parent` > Stability: 0 - Deprecated: Please use [`require.main`][] and diff --git a/doc/api/n-api.md b/doc/api/n-api.md index e6ff1f393fb9f2..7c09bdcbd000ef 100644 --- a/doc/api/n-api.md +++ b/doc/api/n-api.md @@ -253,46 +253,43 @@ listed as supporting a later version. 1 2 3 - 4 - 5 - 6 - 7 v6.x v6.14.2* - - - - v8.x v8.6.0** v8.10.0* v8.11.2 - v8.16.0 - - - v9.x v9.0.0* v9.3.0* v9.11.0* + + + ≥ v10.x + all releases + all releases + all releases + + + + + - - - + + + + - - - @@ -300,9 +297,6 @@ listed as supporting a later version. - - - @@ -311,20 +305,14 @@ listed as supporting a later version. - - - - + - - - @@ -333,9 +321,6 @@ listed as supporting a later version. - - -
4567
v10.xv10.0.0v10.0.0v10.0.0 v10.16.0 v10.17.0 v10.20.0
v11.xv11.0.0v11.0.0v11.0.0 v11.8.0
v12.x v12.0.0v12.0.0v12.0.0v12.0.0 v12.11.0 v12.17.0v12.19.0
v13.x v13.0.0 v13.0.0v13.0.0v13.0.0v13.0.0
v14.0.0 v14.0.0 v14.0.0v14.0.0v14.0.0v14.0.0 v14.12.0
@@ -3762,7 +3747,7 @@ if (status != napi_ok) return status; changes: - version: v14.12.0 pr-url: https://github.com/nodejs/node/pull/35214 - description: added `napi_default_method` and `napi_default_property` + description: added `napi_default_method` and `napi_default_property`. --> ```c @@ -4209,6 +4194,53 @@ this API will set the properties on the object one at a time, as defined by `DefineOwnProperty()` (described in [Section 9.1.6][] of the ECMA-262 specification). +#### napi_object_freeze + + +> Stability: 1 - Experimental + +```c +napi_status napi_object_freeze(napi_env env, + napi_value object); +``` + +* `[in] env`: The environment that the N-API call is invoked under. +* `[in] object`: The object to freeze. + +Returns `napi_ok` if the API succeeded. + +This method freezes a given object. This prevents new properties from +being added to it, existing properties from being removed, prevents +changing the enumerability, configurability, or writability of existing +properties, and prevents the values of existing properties from being changed. +It also prevents the object's prototype from being changed. This is described +in [Section 19.1.2.6](https://tc39.es/ecma262/#sec-object.freeze) of the +ECMA-262 specification. + +#### napi_object_seal + + +> Stability: 1 - Experimental + +```c +napi_status napi_object_seal(napi_env env, + napi_value object); +``` + +* `[in] env`: The environment that the N-API call is invoked under. +* `[in] object`: The object to seal. + +Returns `napi_ok` if the API succeeded. + +This method seals a given object. This prevents new properties from being +added to it, as well as marking all existing properties as non-configurable. +This is described in [Section 19.1.2.20](https://tc39.es/ecma262/#sec-object.seal) +of the ECMA-262 specification. + ## Working with JavaScript functions N-API provides a set of APIs that allow JavaScript code to @@ -5172,6 +5204,7 @@ added: v8.0.0 napiVersion: 1 changes: - version: v8.6.0 + pr-url: https://github.com/nodejs/node/pull/15189 description: Added `async_context` parameter. --> @@ -5536,8 +5569,8 @@ a specific `napi_env`. ### napi_get_uv_event_loop @@ -5751,13 +5784,12 @@ napiVersion: 4 changes: - version: v14.5.0 pr-url: https://github.com/nodejs/node/pull/33453 - description: > - Support for `napi_would_deadlock` has been reverted. + description: Support for `napi_would_deadlock` has been reverted. - version: v14.1.0 pr-url: https://github.com/nodejs/node/pull/32689 - description: > - Return `napi_would_deadlock` when called with `napi_tsfn_blocking` from - the main thread or a worker thread and the queue is full. + description: Return `napi_would_deadlock` when called with + `napi_tsfn_blocking` from the main thread or a worker thread + and the queue is full. --> ```c diff --git a/doc/api/os.md b/doc/api/os.md index 239255147d4f03..1053dd376265b3 100644 --- a/doc/api/os.md +++ b/doc/api/os.md @@ -324,7 +324,7 @@ changes: - version: v2.0.0 pr-url: https://github.com/nodejs/node/pull/747 description: This function is now cross-platform consistent and no longer - returns a path with a trailing slash on any platform + returns a path with a trailing slash on any platform. --> * Returns: {string} diff --git a/doc/api/packages.md b/doc/api/packages.md index 68dd30aca3d149..18bafb1c36685b 100644 --- a/doc/api/packages.md +++ b/doc/api/packages.md @@ -282,13 +282,53 @@ import submodule from 'es-module-package/private-module.js'; // Throws ERR_PACKAGE_PATH_NOT_EXPORTED ``` -### Subpath export patterns +### Subpath imports > Stability: 1 - Experimental -For packages with a small number of exports, we recommend explicitly listing -each exports subpath entry. But for packages that have large numbers of -subpaths, this might cause `package.json` bloat and maintenance issues. +In addition to the [`"exports"`][] field, it is possible to define internal +package import maps that only apply to import specifiers from within the package +itself. + +Entries in the imports field must always start with `#` to ensure they are +disambiguated from package specifiers. + +For example, the imports field can be used to gain the benefits of conditional +exports for internal modules: + +```json +// package.json +{ + "imports": { + "#dep": { + "node": "dep-node-native", + "default": "./dep-polyfill.js" + } + }, + "dependencies": { + "dep-node-native": "^1.0.0" + } +} +``` + +where `import '#dep'` does not get the resolution of the external package +`dep-node-native` (including its exports in turn), and instead gets the local +file `./dep-polyfill.js` relative to the package in other environments. + +Unlike the `"exports"` field, the `"imports"` field permits mapping to external +packages. + +The resolution rules for the imports field are otherwise +analogous to the exports field. + +### Subpath patterns + +> Stability: 1 - Experimental + +For packages with a small number of exports or imports, we recommend +explicitly listing each exports subpath entry. But for packages that have +large numbers of subpaths, this might cause `package.json` bloat and +maintenance issues. For these use cases, subpath export patterns can be used instead: @@ -297,6 +337,9 @@ For these use cases, subpath export patterns can be used instead: { "exports": { "./features/*": "./src/features/*.js" + }, + "imports": { + "#internal/*": "./src/internal/*.js" } } ``` @@ -311,6 +354,9 @@ import featureX from 'es-module-package/features/x'; import featureY from 'es-module-package/features/y/y'; // Loads ./node_modules/es-module-package/src/features/y/y.js + +import internalZ from '#internal/z'; +// Loads ./node_modules/es-module-package/src/internal/z.js ``` This is a direct static replacement without any special handling for file @@ -800,12 +846,12 @@ The following fields in `package.json` files are used in Node.js: ### `"name"` @@ -830,8 +876,8 @@ The `"name"` field can be used in addition to the [`"exports"`][] field to added: v12.0.0 changes: - version: - - v12.17.0 - v13.2.0 + - v12.17.0 pr-url: https://github.com/nodejs/node/pull/29866 description: Unflag `--experimental-modules`. --> @@ -882,20 +928,24 @@ as ES modules and `.cjs` files are always treated as CommonJS. added: v12.7.0 changes: - version: - - v12.16.0 - - v13.2.0 - pr-url: https://github.com/nodejs/node/pull/29978 - description: Implement conditional exports. + - v14.13.0 + pr-url: https://github.com/nodejs/node/pull/34718 + description: Add support for `"exports"` patterns. - version: + - v13.7.0 - v12.16.0 + pr-url: https://github.com/nodejs/node/pull/31008 + description: Implement logical conditional exports ordering. + - version: - v13.7.0 + - v12.16.0 pr-url: https://github.com/nodejs/node/pull/31001 description: Remove the `--experimental-conditional-exports` option. - version: + - v13.2.0 - v12.16.0 - - v13.7.0 - pr-url: https://github.com/nodejs/node/pull/31008 - description: Implement logical conditional exports ordering. + pr-url: https://github.com/nodejs/node/pull/29978 + description: Implement conditional exports. --> * Type: {Object} | {string} | {string[]} @@ -952,16 +1002,6 @@ added: v14.6.0 * Type: {Object} -In addition to the [`"exports"`][] field it is possible to define internal -package import maps that only apply to import specifiers from within the package -itself. - -Entries in the imports field must always start with `#` to ensure they are -clearly disambiguated from package specifiers. - -For example, the imports field can be used to gain the benefits of conditional -exports for internal modules: - ```json // package.json { @@ -977,15 +1017,11 @@ exports for internal modules: } ``` -where `import '#dep'` would now get the resolution of the external package -`dep-node-native` (including its exports in turn), and instead get the local -file `./dep-polyfill.js` relative to the package in other environments. +Entries in the imports field must be strings starting with `#`. -Unlike the `"exports"` field, import maps permit mapping to external packages, -providing an important use case for conditional loading scenarios. +Import maps permit mapping to external packages. -Apart from the above, the resolution rules for the imports field are otherwise -analogous to the exports field. +This field defines [subpath imports][] for the current package. [Babel]: https://babeljs.io/ [Conditional exports]: #packages_conditional_exports @@ -1003,5 +1039,6 @@ analogous to the exports field. [entry points]: #packages_package_entry_points [self-reference]: #packages_self_referencing_a_package_using_its_name [subpath exports]: #packages_subpath_exports +[subpath imports]: #packages_subpath_imports [the full specifier path]: esm.md#esm_mandatory_file_extensions [the dual CommonJS/ES module packages section]: #packages_dual_commonjs_es_module_packages diff --git a/doc/api/perf_hooks.md b/doc/api/perf_hooks.md index 6b14a23c474a26..ac7934d81d5f24 100644 --- a/doc/api/perf_hooks.md +++ b/doc/api/perf_hooks.md @@ -55,7 +55,9 @@ Performance Timeline. If `name` is provided, removes only the named mark. ### `performance.eventLoopUtilization([utilization1[, utilization2]])` * `utilization1` {Object} The result of a previous call to @@ -345,7 +347,9 @@ initialized. ### `performanceNodeTiming.idleTime` * {number} diff --git a/doc/api/process.md b/doc/api/process.md index bfe9df10d685d5..1f35dff6fb918b 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -509,11 +509,12 @@ process.on('SIGTERM', handle); installed its default behavior will be removed. * `'SIGTERM'` is not supported on Windows, it can be listened on. * `'SIGINT'` from the terminal is supported on all platforms, and can usually be - generated with `+C` (though this may be configurable). It is not - generated when [terminal raw mode][] is enabled and `+C` is used. -* `'SIGBREAK'` is delivered on Windows when `+` is pressed, on - non-Windows platforms it can be listened on, but there is no way to send or - generate it. + generated with Ctrl+C (though this may be configurable). + It is not generated when [terminal raw mode][] is enabled and + Ctrl+C is used. +* `'SIGBREAK'` is delivered on Windows when Ctrl+Break is + pressed. On non-Windows platforms, it can be listened on, but there is no way + to send or generate it. * `'SIGWINCH'` is delivered when the console has been resized. On Windows, this will only happen on write to the console when the cursor is being moved, or when a readable tty is used in raw mode. @@ -1184,7 +1185,7 @@ added: v0.1.100 * {string} The `process.execPath` property returns the absolute pathname of the executable -that started the Node.js process. +that started the Node.js process. Symbolic links, if any, are resolved. ```js @@ -1454,7 +1455,7 @@ Use care when dropping privileges: ```js console.log(process.getgroups()); // [ 0 ] -process.initgroups('bnoordhuis', 1000); // switch user +process.initgroups('nodeuser', 1000); // switch user console.log(process.getgroups()); // [ 27, 30, 46, 1000, 0 ] process.setgid(1000); // drop root gid console.log(process.getgroups()); // [ 27, 30, 46, 1000 ] @@ -1734,7 +1735,8 @@ added: * {integer} -The `process.ppid` property returns the PID of the current parent process. +The `process.ppid` property returns the PID of the parent of the +current process. ```js console.log(`The parent process is pid ${process.ppid}`); @@ -2428,7 +2430,9 @@ flag's behavior. * {Object} diff --git a/doc/api/querystring.md b/doc/api/querystring.md index 03ee78aad0a23d..34d7675a9c99cc 100644 --- a/doc/api/querystring.md +++ b/doc/api/querystring.md @@ -55,7 +55,9 @@ changes: - version: v6.0.0 pr-url: https://github.com/nodejs/node/pull/6055 description: The returned object no longer inherits from `Object.prototype`. - - version: v6.0.0, v4.2.4 + - version: + - v6.0.0 + - v4.2.4 pr-url: https://github.com/nodejs/node/pull/3807 description: The `eq` parameter may now have a length of more than `1`. --> diff --git a/doc/api/readline.md b/doc/api/readline.md index 2e82fdf91a1f10..d572eb4bb29f9b 100644 --- a/doc/api/readline.md +++ b/doc/api/readline.md @@ -471,7 +471,9 @@ changes: - version: v13.9.0 pr-url: https://github.com/nodejs/node/pull/31318 description: The `tabSize` option is supported now. - - version: v8.3.0, 6.11.4 + - version: + - v8.3.0 + - v6.11.4 pr-url: https://github.com/nodejs/node/pull/13497 description: Remove max limit of `crlfDelay` option. - version: v6.6.0 diff --git a/doc/api/stream.md b/doc/api/stream.md index 9144c3debcbf8f..eed68fcc54ea31 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -1127,7 +1127,7 @@ buffer will be returned. If the `size` argument is not specified, all of the data contained in the internal buffer will be returned. -The `size` argument must be less than or equal to 1 GB. +The `size` argument must be less than or equal to 1 GiB. The `readable.read()` method should only be called on `Readable` streams operating in paused mode. In flowing mode, `readable.read()` is called @@ -1645,15 +1645,15 @@ const cleanup = finished(rs, (err) => { * `streams` {Stream[]|Iterable[]|AsyncIterable[]|Function[]} @@ -2201,15 +2201,15 @@ constructor and implement the [`readable._read()`][] method. #### `new stream.Readable([options])` * `options` {Object} diff --git a/doc/api/tls.md b/doc/api/tls.md index cae48c345a3a06..a55847ec3c736d 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -1382,7 +1382,9 @@ changes: pr-url: https://github.com/nodejs/node/pull/11984 description: The `ALPNProtocols` option can be a `TypedArray` or `DataView` now. - - version: v5.3.0, v4.7.0 + - version: + - v5.3.0 + - v4.7.0 pr-url: https://github.com/nodejs/node/pull/4246 description: The `secureContext` option is supported now. - version: v5.0.0 diff --git a/doc/api/tracing.md b/doc/api/tracing.md index 9d1c873a3e883b..5c56360319a69c 100644 --- a/doc/api/tracing.md +++ b/doc/api/tracing.md @@ -80,9 +80,9 @@ string that supports `${rotation}` and `${pid}`: node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js ``` -Starting with Node.js 10.0.0, the tracing system uses the same time source -as the one used by `process.hrtime()` -however the trace-event timestamps are expressed in microseconds, +The tracing system uses the same time source +as the one used by `process.hrtime()`. +However the trace-event timestamps are expressed in microseconds, unlike `process.hrtime()` which returns nanoseconds. The features from this module are not available in [`Worker`][] threads. diff --git a/doc/api/url.md b/doc/api/url.md index d0cd0346b239c1..dff038976fba63 100644 --- a/doc/api/url.md +++ b/doc/api/url.md @@ -1268,7 +1268,9 @@ changes: pr-url: https://github.com/nodejs/node/pull/8215 description: The `auth` fields are now kept intact when `from` and `to` refer to the same host. - - version: v6.5.0, v4.6.2 + - version: + - v6.5.0 + - v4.6.2 pr-url: https://github.com/nodejs/node/pull/8214 description: The `port` field is copied correctly now. - version: v6.0.0 diff --git a/doc/api/util.md b/doc/api/util.md index 8d2edc244b57be..f50ef6b3b2a684 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -241,10 +241,6 @@ changes: - version: v12.11.0 pr-url: https://github.com/nodejs/node/pull/29606 description: The `%c` specifier is ignored now. - - version: v11.4.0 - pr-url: https://github.com/nodejs/node/pull/23708 - description: The `%d`, `%f` and `%i` specifiers now support Symbols - properly. - version: v12.0.0 pr-url: https://github.com/nodejs/node/pull/23162 description: The `format` argument is now only taken as such if it actually @@ -256,6 +252,10 @@ changes: first argument. This change removes previously present quotes from strings that were being output when the first argument was not a string. + - version: v11.4.0 + pr-url: https://github.com/nodejs/node/pull/23708 + description: The `%d`, `%f` and `%i` specifiers now support Symbols + properly. - version: v11.4.0 pr-url: https://github.com/nodejs/node/pull/24806 description: The `%o` specifier's `depth` has default depth of 4 again. @@ -450,7 +450,9 @@ stream.write('With ES6'); @@ -1239,7 +1241,7 @@ mark. added: v8.3.0 changes: - version: v11.0.0 - pr-url: v11.0.0 + pr-url: https://github.com/nodejs/node/pull/22281 description: The class is now available on the global object. --> diff --git a/doc/api/v8.md b/doc/api/v8.md index 54e01806079e0a..891060606f6388 100644 --- a/doc/api/v8.md +++ b/doc/api/v8.md @@ -112,13 +112,13 @@ stream.pipe(process.stdout); * Returns: {Object} diff --git a/doc/api/vm.md b/doc/api/vm.md index 34e1b2d2f004e6..c270e1f6b66e47 100644 --- a/doc/api/vm.md +++ b/doc/api/vm.md @@ -54,14 +54,14 @@ executed in specific contexts. * `code` {string} The JavaScript code to compile. @@ -811,12 +811,15 @@ const vm = require('vm'); * `code` {string} The body of the function to compile. diff --git a/doc/api/worker_threads.md b/doc/api/worker_threads.md index 025c2d9457f407..1bf76762fb269a 100644 --- a/doc/api/worker_threads.md +++ b/doc/api/worker_threads.md @@ -639,16 +639,16 @@ changes: pr-url: https://github.com/nodejs/node/pull/31664 description: The `filename` parameter can be a WHATWG `URL` object using `file:` protocol. - - version: - - v13.2.0 - - v12.16.0 - pr-url: https://github.com/nodejs/node/pull/26628 - description: The `resourceLimits` option was introduced. - version: - v13.4.0 - v12.16.0 pr-url: https://github.com/nodejs/node/pull/30559 description: The `argv` option was introduced. + - version: + - v13.2.0 + - v12.16.0 + pr-url: https://github.com/nodejs/node/pull/26628 + description: The `resourceLimits` option was introduced. --> * `filename` {string|URL} The path to the Worker’s main script or module. Must diff --git a/doc/api/zlib.md b/doc/api/zlib.md index 0370c68ef6590a..e237d644eac800 100644 --- a/doc/api/zlib.md +++ b/doc/api/zlib.md @@ -488,7 +488,9 @@ These advanced options are available for controlling decompression: