diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
deleted file mode 100644
index 3e8e7ecbfbcbdd..00000000000000
--- a/.devcontainer/Dockerfile
+++ /dev/null
@@ -1 +0,0 @@
-FROM nodejs/devcontainer:nightly
diff --git a/.devcontainer/.devcontainer.json b/.devcontainer/devcontainer.json
similarity index 57%
rename from .devcontainer/.devcontainer.json
rename to .devcontainer/devcontainer.json
index 2e3cde606ce422..a69b66f442b666 100644
--- a/.devcontainer/.devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,12 +1,12 @@
{
"name": "Node.js Core Developer Environment",
"extensions": [
- "github.vscode-pull-request-github",
- "ms-vsliveshare.vsliveshare",
- "vscode-icons-team.vscode-icons",
- "visualstudioexptteam.vscodeintellicode"
+ "github.vscode-pull-request-github",
+ "ms-vsliveshare.vsliveshare",
+ "vscode-icons-team.vscode-icons",
+ "visualstudioexptteam.vscodeintellicode"
],
- "dockerFile": "Dockerfile",
+ "image": "nodejs/devcontainer:nightly",
"initializeCommand": "docker system prune -f -a",
"settings": {
"terminal.integrated.profiles.linux": {
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index ab2287a7abd15c..a00875881ab59c 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -17,6 +17,7 @@
/CONTRIBUTING.md @nodejs/tsc
/doc/contributing/*.md @nodejs/tsc
/GOVERNANCE.md @nodejs/tsc
+/SECURITY.md @nodejs/tsc
/LICENSE @nodejs/tsc
/onboarding.md @nodejs/tsc
diff --git a/.github/workflows/build-tarball.yml b/.github/workflows/build-tarball.yml
index c941a88cd43fbd..c1c66477ae666d 100644
--- a/.github/workflows/build-tarball.yml
+++ b/.github/workflows/build-tarball.yml
@@ -57,7 +57,7 @@ jobs:
mkdir tarballs
mv *.tar.gz tarballs
- name: Upload tarball artifact
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0
with:
name: tarballs
path: tarballs
@@ -75,7 +75,7 @@ jobs:
- name: Environment Information
run: npx envinfo
- name: Download tarball
- uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
+ uses: actions/download-artifact@f44cd7b40bfd40b6aa1cc1b9b5b7bf03d3c67110 # v4.1.0
with:
name: tarballs
path: tarballs
diff --git a/.github/workflows/daily-wpt-fyi.yml b/.github/workflows/daily-wpt-fyi.yml
index 96947ca22eb561..a37015a2fa00dc 100644
--- a/.github/workflows/daily-wpt-fyi.yml
+++ b/.github/workflows/daily-wpt-fyi.yml
@@ -121,10 +121,10 @@ jobs:
run: cp wptreport.json wptreport-${{ steps.setup-node.outputs.node-version }}.json
- name: Upload GitHub Actions artifact
if: ${{ env.WPT_REPORT != '' }}
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0
with:
path: out/wpt/wptreport-*.json
- name: WPT Reports
+ name: WPT Report for ${{ steps.setup-node.outputs.node-version }}
if-no-files-found: error
- name: Upload WPT Report to wpt.fyi API
if: ${{ env.WPT_REPORT != '' }}
diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index ffb21dc8540d20..a374ef0b5dd2bd 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -35,7 +35,7 @@ jobs:
run: npx envinfo
- name: Build
run: NODE=$(command -v node) make doc-only
- - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ - uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0
with:
name: docs
path: out/doc
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 7905b2185eaca5..200894aa671be7 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -65,7 +65,7 @@ jobs:
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: Upload artifact
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0
with:
name: SARIF file
path: results.sarif
diff --git a/.github/workflows/timezone-update.yml b/.github/workflows/timezone-update.yml
index 12b93abceed7d0..00158082692fc6 100644
--- a/.github/workflows/timezone-update.yml
+++ b/.github/workflows/timezone-update.yml
@@ -34,12 +34,22 @@ jobs:
- name: Record new version
run: echo "new_version=$(ls icu-data/tzdata/icunew | tail -1)" >> $GITHUB_ENV
+ - name: Record current version
+ run: echo "current_version=$(cat ./test/fixtures/tz-version.txt)" >> $GITHUB_ENV
+
+ - name: Compare versions
+ run: |
+ echo "Comparing current version ${{ env.current_version }} to new version ${{ env.new_version }}"
+
- run: ./tools/update-timezone.mjs
+ if: ${{ env.new_version != env.current_version }}
- name: Update the expected timezone version in test
+ if: ${{ env.new_version != env.current_version }}
run: echo "${{ env.new_version }}" > test/fixtures/tz-version.txt
- name: Open Pull Request
+ if: ${{ env.new_version != env.current_version }}
uses: gr2m/create-or-update-pull-request-action@77596e3166f328b24613f7082ab30bf2d93079d5 # Create a PR or update the Action's existing PR
env:
GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95d5ad1ebd0e05..2789b6b5c810b0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,7 +36,8 @@ release.
-21.5.0
+21.6.0
+21.5.0
21.4.0
21.3.0
21.2.0
diff --git a/LICENSE b/LICENSE
index f4395bd0ea1df9..fb7c9d3abe9215 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1285,7 +1285,7 @@ The externally maintained libraries used by Node.js are:
- zlib, located at deps/zlib, is licensed as follows:
"""
zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.3, August 18th, 2023
+ version 1.3.0.1, August xxth, 2023
Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
@@ -1972,6 +1972,35 @@ The externally maintained libraries used by Node.js are:
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
+- gypi_to_gn.py, located at tools/gypi_to_gn.py, is licensed as follows:
+ """
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Google LLC nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
- ESLint, located at tools/node_modules/eslint, is licensed as follows:
"""
Copyright OpenJS Foundation and other contributors,
diff --git a/SECURITY.md b/SECURITY.md
index 85c185df6006cb..f5b17eb626987d 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -124,6 +124,8 @@ lead to a loss of confidentiality, integrity, or availability.
end being on the local machine or remote.
6. The file system when requiring a module.
See .
+7. The `node:wasi` module does not currently provide the comprehensive file
+ system security properties provided by some WASI runtimes.
Any unexpected behavior from the data manipulation from Node.js Internal
functions may be considered a vulnerability if they are exploitable via
diff --git a/benchmark/buffers/buffer-bytelength-string.js b/benchmark/buffers/buffer-bytelength-string.js
index fc0c005e7f9e6a..143da0215a613b 100644
--- a/benchmark/buffers/buffer-bytelength-string.js
+++ b/benchmark/buffers/buffer-bytelength-string.js
@@ -2,7 +2,8 @@
const common = require('../common');
const bench = common.createBenchmark(main, {
- type: ['one_byte', 'two_bytes', 'three_bytes', 'four_bytes'],
+ type: ['one_byte', 'two_bytes', 'three_bytes',
+ 'four_bytes', 'latin1'],
encoding: ['utf8', 'base64'],
repeat: [1, 2, 16, 256], // x16
n: [4e6],
@@ -14,6 +15,8 @@ const chars = {
two_bytes: 'ΰαβγδεζηθικλμνξο',
three_bytes: '挰挱挲挳挴挵挶挷挸挹挺挻挼挽挾挿',
four_bytes: '𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢',
+ latin1: 'Un homme sage est supérieur à toutes ' +
+ 'les insultes qui peuvent lui être adressées, et la meilleure réponse est la patience et la modération.',
};
function getInput(type, repeat, encoding) {
diff --git a/benchmark/error/system-error-instantiation.js b/benchmark/error/system-error-instantiation.js
new file mode 100644
index 00000000000000..0ecdc36a357086
--- /dev/null
+++ b/benchmark/error/system-error-instantiation.js
@@ -0,0 +1,64 @@
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ n: [1e6],
+ code: [
+ 'built-in',
+ 'ERR_FS_CP_DIR_TO_NON_DIR',
+ ],
+ stackTraceLimit: [0, 10],
+}, {
+ flags: ['--expose-internals'],
+});
+
+function getErrorFactory(code) {
+ const {
+ ERR_FS_CP_DIR_TO_NON_DIR,
+ } = require('internal/errors').codes;
+
+ switch (code) {
+ case 'built-in':
+ return (n) => new Error();
+ case 'ERR_FS_CP_DIR_TO_NON_DIR':
+ return (n) => new ERR_FS_CP_DIR_TO_NON_DIR({
+ message: 'cannot overwrite directory',
+ path: 'dest',
+ syscall: 'cp',
+ errno: 21,
+ code: 'EISDIR',
+ });
+ default:
+ throw new Error(`${code} not supported`);
+ }
+}
+
+function main({ n, code, stackTraceLimit }) {
+ const getError = getErrorFactory(code);
+
+ Error.stackTraceLimit = stackTraceLimit;
+
+ // Warm up.
+ const length = 1024;
+ const array = [];
+ for (let i = 0; i < length; ++i) {
+ array.push(getError(i));
+ }
+
+ bench.start();
+
+ for (let i = 0; i < n; ++i) {
+ const index = i % length;
+ array[index] = getError(index);
+ }
+
+ bench.end(n);
+
+ // Verify the entries to prevent dead code elimination from making
+ // the benchmark invalid.
+ for (let i = 0; i < length; ++i) {
+ assert.strictEqual(typeof array[i], 'object');
+ }
+}
diff --git a/benchmark/fs/bench-mkdtempSync.js b/benchmark/fs/bench-mkdtempSync.js
new file mode 100644
index 00000000000000..afb342366bbfdf
--- /dev/null
+++ b/benchmark/fs/bench-mkdtempSync.js
@@ -0,0 +1,43 @@
+'use strict';
+
+const common = require('../common');
+const fs = require('fs');
+const assert = require('assert');
+const tmpdir = require('../../test/common/tmpdir');
+
+const bench = common.createBenchmark(main, {
+ type: ['valid-string', 'valid-buffer', 'invalid'],
+ n: [1e4],
+});
+
+function main({ n, type }) {
+ tmpdir.refresh();
+ const options = { encoding: 'utf8' };
+ let prefix;
+ let out = true;
+
+ switch (type) {
+ case 'valid-string':
+ prefix = tmpdir.resolve(`${Date.now()}`);
+ break;
+ case 'valid-buffer':
+ prefix = Buffer.from(tmpdir.resolve(`${Date.now()}`));
+ break;
+ case 'invalid':
+ prefix = tmpdir.resolve('non-existent', 'foo', 'bar');
+ break;
+ default:
+ new Error('Invalid type');
+ }
+
+ bench.start();
+ for (let i = 0; i < n; i++) {
+ try {
+ out = fs.mkdtempSync(prefix, options);
+ } catch {
+ // do nothing
+ }
+ }
+ bench.end(n);
+ assert.ok(out);
+}
diff --git a/benchmark/misc/startup-cli-version.js b/benchmark/misc/startup-cli-version.js
index 52ab6bc9f582f3..4dbeb81fc70740 100644
--- a/benchmark/misc/startup-cli-version.js
+++ b/benchmark/misc/startup-cli-version.js
@@ -1,6 +1,7 @@
'use strict';
const common = require('../common.js');
const { spawnSync } = require('child_process');
+const { existsSync } = require('fs');
const path = require('path');
// This benchmarks the startup of various CLI tools that are already
@@ -11,6 +12,7 @@ const path = require('path');
const bench = common.createBenchmark(main, {
cli: [
'tools/node_modules/eslint/bin/eslint.js',
+ 'deps/npm/bin/npx-cli.js',
'deps/npm/bin/npm-cli.js',
'deps/corepack/dist/corepack.js',
],
@@ -45,6 +47,10 @@ function spawnProcess(cli, bench, state) {
function main({ count, cli }) {
cli = path.resolve(__dirname, '../../', cli);
+ if (!existsSync(cli)) {
+ return;
+ }
+
const warmup = 3;
const state = { count, finished: -warmup };
spawnProcess(cli, bench, state);
diff --git a/benchmark/perf_hooks/histogram-record.js b/benchmark/perf_hooks/histogram-record.js
new file mode 100644
index 00000000000000..c3f7e89e171b1b
--- /dev/null
+++ b/benchmark/perf_hooks/histogram-record.js
@@ -0,0 +1,26 @@
+'use strict';
+
+const assert = require('assert');
+const common = require('../common.js');
+
+const { createHistogram } = require('perf_hooks');
+
+const bench = common.createBenchmark(main, {
+ n: [1e5],
+});
+
+function main({ n }) {
+ const histogram = createHistogram();
+ bench.start();
+ for (let i = 0; i < n; i++) {
+ histogram.record(i + 1);
+ /* eslint-disable no-unused-expressions */
+ histogram.max;
+ histogram.mean;
+ /* eslint-enable no-unused-expressions */
+ }
+ bench.end(n);
+
+ // Avoid V8 deadcode (elimination)
+ assert.ok(histogram);
+}
diff --git a/common.gypi b/common.gypi
index c6b9fa05b44c96..b8c5cf1da767aa 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.18',
+ 'v8_embedder_string': '-node.19',
##### V8 defaults for Node.js #####
diff --git a/configure.py b/configure.py
index 84b016cd853080..5e014bf7a75e2a 100755
--- a/configure.py
+++ b/configure.py
@@ -1273,9 +1273,7 @@ def configure_node(o):
o['variables']['want_separate_host_toolset'] = int(cross_compiling)
- # Enable branch protection for arm64
if target_arch == 'arm64':
- o['cflags']+=['-msign-return-address=all']
o['variables']['arm_fpu'] = options.arm_fpu or 'neon'
if options.node_snapshot_main is not None:
diff --git a/deps/acorn/acorn-walk/CHANGELOG.md b/deps/acorn/acorn-walk/CHANGELOG.md
index 30ec5a5eec9911..0b4eea8a95d3ed 100644
--- a/deps/acorn/acorn-walk/CHANGELOG.md
+++ b/deps/acorn/acorn-walk/CHANGELOG.md
@@ -1,3 +1,17 @@
+## 8.3.1 (2023-12-06)
+
+### Bug fixes
+
+Add `Function` and `Class` to the `AggregateType` type, so that they can be used in walkers without raising a type error.
+
+Visitor functions are now called in such a way that their `this` refers to the object they are part of.
+
+## 8.3.0 (2023-10-26)
+
+### New features
+
+Use a set of new, much more precise, TypeScript types.
+
## 8.2.0 (2021-09-06)
### New features
diff --git a/deps/acorn/acorn-walk/README.md b/deps/acorn/acorn-walk/README.md
index e192baced005ac..3c18a2c76a938e 100644
--- a/deps/acorn/acorn-walk/README.md
+++ b/deps/acorn/acorn-walk/README.md
@@ -10,9 +10,7 @@ Acorn is open source software released under an
You are welcome to
[report bugs](https://github.com/acornjs/acorn/issues) or create pull
-requests on [github](https://github.com/acornjs/acorn). For questions
-and discussion, please use the
-[Tern discussion forum](https://discuss.ternjs.net).
+requests on [github](https://github.com/acornjs/acorn).
## Installation
@@ -68,7 +66,7 @@ const acorn = require("acorn")
const walk = require("acorn-walk")
walk.ancestor(acorn.parse("foo('hi')"), {
- Literal(_, ancestors) {
+ Literal(_node, _state, ancestors) {
console.log("This literal's ancestors are:", ancestors.map(n => n.type))
}
})
diff --git a/deps/acorn/acorn-walk/dist/walk.d.mts b/deps/acorn/acorn-walk/dist/walk.d.mts
new file mode 100644
index 00000000000000..7bc8c9790fd1a7
--- /dev/null
+++ b/deps/acorn/acorn-walk/dist/walk.d.mts
@@ -0,0 +1,172 @@
+import * as acorn from "acorn"
+
+export type FullWalkerCallback = (
+ node: acorn.Node,
+ state: TState,
+ type: string
+) => void
+
+export type FullAncestorWalkerCallback = (
+ node: acorn.Node,
+ state: TState,
+ ancestors: acorn.Node[],
+ type: string
+) => void
+
+type AggregateType = {
+ Expression: acorn.Expression,
+ Statement: acorn.Statement,
+ Function: acorn.Function,
+ Class: acorn.Class,
+ Pattern: acorn.Pattern,
+ ForInit: acorn.VariableDeclaration | acorn.Expression
+}
+
+export type SimpleVisitors = {
+ [type in acorn.AnyNode["type"]]?: (node: Extract, state: TState) => void
+} & {
+ [type in keyof AggregateType]?: (node: AggregateType[type], state: TState) => void
+}
+
+export type AncestorVisitors = {
+ [type in acorn.AnyNode["type"]]?: ( node: Extract, state: TState, ancestors: acorn.Node[]
+) => void
+} & {
+ [type in keyof AggregateType]?: (node: AggregateType[type], state: TState, ancestors: acorn.Node[]) => void
+}
+
+export type WalkerCallback = (node: acorn.Node, state: TState) => void
+
+export type RecursiveVisitors = {
+ [type in acorn.AnyNode["type"]]?: ( node: Extract, state: TState, callback: WalkerCallback) => void
+} & {
+ [type in keyof AggregateType]?: (node: AggregateType[type], state: TState, callback: WalkerCallback) => void
+}
+
+export type FindPredicate = (type: string, node: acorn.Node) => boolean
+
+export interface Found {
+ node: acorn.Node,
+ state: TState
+}
+
+/**
+ * does a 'simple' walk over a tree
+ * @param node the AST node to walk
+ * @param visitors an object with properties whose names correspond to node types in the {@link https://github.com/estree/estree | ESTree spec}. The properties should contain functions that will be called with the node object and, if applicable the state at that point.
+ * @param base a walker algorithm
+ * @param state a start state. The default walker will simply visit all statements and expressions and not produce a meaningful state. (An example of a use of state is to track scope at each point in the tree.)
+ */
+export function simple(
+ node: acorn.Node,
+ visitors: SimpleVisitors,
+ base?: RecursiveVisitors,
+ state?: TState
+): void
+
+/**
+ * does a 'simple' walk over a tree, building up an array of ancestor nodes (including the current node) and passing the array to the callbacks as a third parameter.
+ * @param node
+ * @param visitors
+ * @param base
+ * @param state
+ */
+export function ancestor(
+ node: acorn.Node,
+ visitors: AncestorVisitors,
+ base?: RecursiveVisitors,
+ state?: TState
+ ): void
+
+/**
+ * does a 'recursive' walk, where the walker functions are responsible for continuing the walk on the child nodes of their target node.
+ * @param node
+ * @param state the start state
+ * @param functions contain an object that maps node types to walker functions
+ * @param base provides the fallback walker functions for node types that aren't handled in the {@link functions} object. If not given, the default walkers will be used.
+ */
+export function recursive(
+ node: acorn.Node,
+ state: TState,
+ functions: RecursiveVisitors,
+ base?: RecursiveVisitors
+): void
+
+/**
+ * does a 'full' walk over a tree, calling the {@link callback} with the arguments (node, state, type) for each node
+ * @param node
+ * @param callback
+ * @param base
+ * @param state
+ */
+export function full(
+ node: acorn.Node,
+ callback: FullWalkerCallback,
+ base?: RecursiveVisitors,
+ state?: TState
+): void
+
+/**
+ * does a 'full' walk over a tree, building up an array of ancestor nodes (including the current node) and passing the array to the callbacks as a third parameter.
+ * @param node
+ * @param callback
+ * @param base
+ * @param state
+ */
+export function fullAncestor(
+ node: acorn.Node,
+ callback: FullAncestorWalkerCallback,
+ base?: RecursiveVisitors,
+ state?: TState
+): void
+
+/**
+ * builds a new walker object by using the walker functions in {@link functions} and filling in the missing ones by taking defaults from {@link base}.
+ * @param functions
+ * @param base
+ */
+export function make(
+ functions: RecursiveVisitors,
+ base?: RecursiveVisitors
+): RecursiveVisitors
+
+/**
+ * tries to locate a node in a tree at the given start and/or end offsets, which satisfies the predicate test. {@link start} and {@link end} can be either `null` (as wildcard) or a `number`. {@link test} may be a string (indicating a node type) or a function that takes (nodeType, node) arguments and returns a boolean indicating whether this node is interesting. {@link base} and {@link state} are optional, and can be used to specify a custom walker. Nodes are tested from inner to outer, so if two nodes match the boundaries, the inner one will be preferred.
+ * @param node
+ * @param start
+ * @param end
+ * @param type
+ * @param base
+ * @param state
+ */
+export function findNodeAt(
+ node: acorn.Node,
+ start: number | undefined,
+ end?: number | undefined,
+ type?: FindPredicate | string,
+ base?: RecursiveVisitors,
+ state?: TState
+): Found | undefined
+
+/**
+ * like {@link findNodeAt}, but will match any node that exists 'around' (spanning) the given position.
+ * @param node
+ * @param start
+ * @param type
+ * @param base
+ * @param state
+ */
+export function findNodeAround(
+ node: acorn.Node,
+ start: number | undefined,
+ type?: FindPredicate | string,
+ base?: RecursiveVisitors,
+ state?: TState
+): Found | undefined
+
+/**
+ * similar to {@link findNodeAround}, but will match all nodes after the given position (testing outer nodes before inner nodes).
+ */
+export const findNodeAfter: typeof findNodeAround
+
+export const base: RecursiveVisitors
diff --git a/deps/acorn/acorn-walk/dist/walk.d.ts b/deps/acorn/acorn-walk/dist/walk.d.ts
index 2d81f01c166875..7bc8c9790fd1a7 100644
--- a/deps/acorn/acorn-walk/dist/walk.d.ts
+++ b/deps/acorn/acorn-walk/dist/walk.d.ts
@@ -1,114 +1,172 @@
-import {Node} from 'acorn';
-
-declare module "acorn-walk" {
- type FullWalkerCallback = (
- node: Node,
- state: TState,
- type: string
- ) => void;
-
- type FullAncestorWalkerCallback = (
- node: Node,
- state: TState | Node[],
- ancestors: Node[],
- type: string
- ) => void;
- type WalkerCallback = (node: Node, state: TState) => void;
-
- type SimpleWalkerFn = (
- node: Node,
- state: TState
- ) => void;
-
- type AncestorWalkerFn = (
- node: Node,
- state: TState| Node[],
- ancestors: Node[]
- ) => void;
-
- type RecursiveWalkerFn = (
- node: Node,
- state: TState,
- callback: WalkerCallback
- ) => void;
-
- type SimpleVisitors = {
- [type: string]: SimpleWalkerFn
- };
-
- type AncestorVisitors = {
- [type: string]: AncestorWalkerFn
- };
-
- type RecursiveVisitors = {
- [type: string]: RecursiveWalkerFn
- };
-
- type FindPredicate = (type: string, node: Node) => boolean;
-
- interface Found {
- node: Node,
- state: TState
- }
-
- export function simple(
- node: Node,
- visitors: SimpleVisitors,
- base?: RecursiveVisitors,
- state?: TState
- ): void;
+import * as acorn from "acorn"
+
+export type FullWalkerCallback = (
+ node: acorn.Node,
+ state: TState,
+ type: string
+) => void
+
+export type FullAncestorWalkerCallback = (
+ node: acorn.Node,
+ state: TState,
+ ancestors: acorn.Node[],
+ type: string
+) => void
+
+type AggregateType = {
+ Expression: acorn.Expression,
+ Statement: acorn.Statement,
+ Function: acorn.Function,
+ Class: acorn.Class,
+ Pattern: acorn.Pattern,
+ ForInit: acorn.VariableDeclaration | acorn.Expression
+}
- export function ancestor(
- node: Node,
- visitors: AncestorVisitors,
- base?: RecursiveVisitors,
- state?: TState
- ): void;
-
- export function recursive(
- node: Node,
- state: TState,
- functions: RecursiveVisitors,
- base?: RecursiveVisitors
- ): void;
-
- export function full(
- node: Node,
- callback: FullWalkerCallback,
- base?: RecursiveVisitors,
- state?: TState
- ): void;
+export type SimpleVisitors = {
+ [type in acorn.AnyNode["type"]]?: (node: Extract, state: TState) => void
+} & {
+ [type in keyof AggregateType]?: (node: AggregateType[type], state: TState) => void
+}
- export function fullAncestor(
- node: Node,
- callback: FullAncestorWalkerCallback,
- base?: RecursiveVisitors,
- state?: TState
- ): void;
-
- export function make(
- functions: RecursiveVisitors,
- base?: RecursiveVisitors
- ): RecursiveVisitors;
-
- export function findNodeAt(
- node: Node,
- start: number | undefined,
- end?: number | undefined,
- type?: FindPredicate | string,
- base?: RecursiveVisitors,
- state?: TState
- ): Found | undefined;
+export type AncestorVisitors = {
+ [type in acorn.AnyNode["type"]]?: ( node: Extract, state: TState, ancestors: acorn.Node[]
+) => void
+} & {
+ [type in keyof AggregateType]?: (node: AggregateType[type], state: TState, ancestors: acorn.Node[]) => void
+}
- export function findNodeAround(
- node: Node,
- start: number | undefined,
- type?: FindPredicate | string,
- base?: RecursiveVisitors,
- state?: TState
- ): Found | undefined;
+export type WalkerCallback = (node: acorn.Node, state: TState) => void
- export const findNodeAfter: typeof findNodeAround;
+export type RecursiveVisitors = {
+ [type in acorn.AnyNode["type"]]?: ( node: Extract, state: TState, callback: WalkerCallback) => void
+} & {
+ [type in keyof AggregateType]?: (node: AggregateType[type], state: TState, callback: WalkerCallback) => void
+}
- export const base: RecursiveVisitors;
+export type FindPredicate = (type: string, node: acorn.Node) => boolean
+
+export interface Found {
+ node: acorn.Node,
+ state: TState
}
+
+/**
+ * does a 'simple' walk over a tree
+ * @param node the AST node to walk
+ * @param visitors an object with properties whose names correspond to node types in the {@link https://github.com/estree/estree | ESTree spec}. The properties should contain functions that will be called with the node object and, if applicable the state at that point.
+ * @param base a walker algorithm
+ * @param state a start state. The default walker will simply visit all statements and expressions and not produce a meaningful state. (An example of a use of state is to track scope at each point in the tree.)
+ */
+export function simple(
+ node: acorn.Node,
+ visitors: SimpleVisitors,
+ base?: RecursiveVisitors,
+ state?: TState
+): void
+
+/**
+ * does a 'simple' walk over a tree, building up an array of ancestor nodes (including the current node) and passing the array to the callbacks as a third parameter.
+ * @param node
+ * @param visitors
+ * @param base
+ * @param state
+ */
+export function ancestor(
+ node: acorn.Node,
+ visitors: AncestorVisitors,
+ base?: RecursiveVisitors,
+ state?: TState
+ ): void
+
+/**
+ * does a 'recursive' walk, where the walker functions are responsible for continuing the walk on the child nodes of their target node.
+ * @param node
+ * @param state the start state
+ * @param functions contain an object that maps node types to walker functions
+ * @param base provides the fallback walker functions for node types that aren't handled in the {@link functions} object. If not given, the default walkers will be used.
+ */
+export function recursive(
+ node: acorn.Node,
+ state: TState,
+ functions: RecursiveVisitors,
+ base?: RecursiveVisitors
+): void
+
+/**
+ * does a 'full' walk over a tree, calling the {@link callback} with the arguments (node, state, type) for each node
+ * @param node
+ * @param callback
+ * @param base
+ * @param state
+ */
+export function full(
+ node: acorn.Node,
+ callback: FullWalkerCallback,
+ base?: RecursiveVisitors,
+ state?: TState
+): void
+
+/**
+ * does a 'full' walk over a tree, building up an array of ancestor nodes (including the current node) and passing the array to the callbacks as a third parameter.
+ * @param node
+ * @param callback
+ * @param base
+ * @param state
+ */
+export function fullAncestor(
+ node: acorn.Node,
+ callback: FullAncestorWalkerCallback,
+ base?: RecursiveVisitors,
+ state?: TState
+): void
+
+/**
+ * builds a new walker object by using the walker functions in {@link functions} and filling in the missing ones by taking defaults from {@link base}.
+ * @param functions
+ * @param base
+ */
+export function make(
+ functions: RecursiveVisitors,
+ base?: RecursiveVisitors
+): RecursiveVisitors
+
+/**
+ * tries to locate a node in a tree at the given start and/or end offsets, which satisfies the predicate test. {@link start} and {@link end} can be either `null` (as wildcard) or a `number`. {@link test} may be a string (indicating a node type) or a function that takes (nodeType, node) arguments and returns a boolean indicating whether this node is interesting. {@link base} and {@link state} are optional, and can be used to specify a custom walker. Nodes are tested from inner to outer, so if two nodes match the boundaries, the inner one will be preferred.
+ * @param node
+ * @param start
+ * @param end
+ * @param type
+ * @param base
+ * @param state
+ */
+export function findNodeAt(
+ node: acorn.Node,
+ start: number | undefined,
+ end?: number | undefined,
+ type?: FindPredicate | string,
+ base?: RecursiveVisitors,
+ state?: TState
+): Found | undefined
+
+/**
+ * like {@link findNodeAt}, but will match any node that exists 'around' (spanning) the given position.
+ * @param node
+ * @param start
+ * @param type
+ * @param base
+ * @param state
+ */
+export function findNodeAround(
+ node: acorn.Node,
+ start: number | undefined,
+ type?: FindPredicate | string,
+ base?: RecursiveVisitors,
+ state?: TState
+): Found | undefined
+
+/**
+ * similar to {@link findNodeAround}, but will match all nodes after the given position (testing outer nodes before inner nodes).
+ */
+export const findNodeAfter: typeof findNodeAround
+
+export const base: RecursiveVisitors
diff --git a/deps/acorn/acorn-walk/dist/walk.js b/deps/acorn/acorn-walk/dist/walk.js
index a7f81b0061a750..580df6413725f8 100644
--- a/deps/acorn/acorn-walk/dist/walk.js
+++ b/deps/acorn/acorn-walk/dist/walk.js
@@ -1,10 +1,10 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (global = global || self, factory((global.acorn = global.acorn || {}, global.acorn.walk = {})));
-}(this, (function (exports) { 'use strict';
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.acorn = global.acorn || {}, global.acorn.walk = {})));
+})(this, (function (exports) { 'use strict';
- // AST walker module for Mozilla Parser API compatible trees
+ // AST walker module for ESTree compatible trees
// A simple walk is one where you simply specify callbacks to be
// called on specific nodes. The last two arguments are optional. A
@@ -14,7 +14,7 @@
// Expression: function(node) { ... }
// });
//
- // to do something with all expressions. All Parser API node types
+ // to do something with all expressions. All ESTree node types
// can be used to identify node types, as well as Expression and
// Statement, which denote categories of nodes.
//
@@ -25,9 +25,9 @@
function simple(node, visitors, baseVisitor, state, override) {
if (!baseVisitor) { baseVisitor = base
; }(function c(node, st, override) {
- var type = override || node.type, found = visitors[type];
+ var type = override || node.type;
baseVisitor[type](node, st, c);
- if (found) { found(node, st); }
+ if (visitors[type]) { visitors[type](node, st); }
})(node, state, override);
}
@@ -38,11 +38,11 @@
var ancestors = [];
if (!baseVisitor) { baseVisitor = base
; }(function c(node, st, override) {
- var type = override || node.type, found = visitors[type];
+ var type = override || node.type;
var isNew = node !== ancestors[ancestors.length - 1];
if (isNew) { ancestors.push(node); }
baseVisitor[type](node, st, c);
- if (found) { found(node, st || ancestors, ancestors); }
+ if (visitors[type]) { visitors[type](node, st || ancestors, ancestors); }
if (isNew) { ancestors.pop(); }
})(node, state, override);
}
@@ -458,6 +458,4 @@
exports.recursive = recursive;
exports.simple = simple;
- Object.defineProperty(exports, '__esModule', { value: true });
-
-})));
+}));
diff --git a/deps/acorn/acorn-walk/dist/walk.mjs b/deps/acorn/acorn-walk/dist/walk.mjs
index 89dd1f1f4f3557..19eebc0e70f598 100644
--- a/deps/acorn/acorn-walk/dist/walk.mjs
+++ b/deps/acorn/acorn-walk/dist/walk.mjs
@@ -1,4 +1,4 @@
-// AST walker module for Mozilla Parser API compatible trees
+// AST walker module for ESTree compatible trees
// A simple walk is one where you simply specify callbacks to be
// called on specific nodes. The last two arguments are optional. A
@@ -8,7 +8,7 @@
// Expression: function(node) { ... }
// });
//
-// to do something with all expressions. All Parser API node types
+// to do something with all expressions. All ESTree node types
// can be used to identify node types, as well as Expression and
// Statement, which denote categories of nodes.
//
@@ -19,9 +19,9 @@
function simple(node, visitors, baseVisitor, state, override) {
if (!baseVisitor) { baseVisitor = base
; }(function c(node, st, override) {
- var type = override || node.type, found = visitors[type];
+ var type = override || node.type;
baseVisitor[type](node, st, c);
- if (found) { found(node, st); }
+ if (visitors[type]) { visitors[type](node, st); }
})(node, state, override);
}
@@ -32,11 +32,11 @@ function ancestor(node, visitors, baseVisitor, state, override) {
var ancestors = [];
if (!baseVisitor) { baseVisitor = base
; }(function c(node, st, override) {
- var type = override || node.type, found = visitors[type];
+ var type = override || node.type;
var isNew = node !== ancestors[ancestors.length - 1];
if (isNew) { ancestors.push(node); }
baseVisitor[type](node, st, c);
- if (found) { found(node, st || ancestors, ancestors); }
+ if (visitors[type]) { visitors[type](node, st || ancestors, ancestors); }
if (isNew) { ancestors.pop(); }
})(node, state, override);
}
diff --git a/deps/acorn/acorn-walk/package.json b/deps/acorn/acorn-walk/package.json
index 8d75b9711c2e35..393c87a39255a0 100644
--- a/deps/acorn/acorn-walk/package.json
+++ b/deps/acorn/acorn-walk/package.json
@@ -16,8 +16,10 @@
],
"./package.json": "./package.json"
},
- "version": "8.2.0",
- "engines": {"node": ">=0.4.0"},
+ "version": "8.3.1",
+ "engines": {
+ "node": ">=0.4.0"
+ },
"maintainers": [
{
"name": "Marijn Haverbeke",
diff --git a/deps/acorn/acorn/CHANGELOG.md b/deps/acorn/acorn/CHANGELOG.md
index 02a4b546153973..eb848a58b8a091 100644
--- a/deps/acorn/acorn/CHANGELOG.md
+++ b/deps/acorn/acorn/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 8.11.3 (2023-12-29)
+
+### Bug fixes
+
+Add `Function` and `Class` to the `AggregateType` type, so that they can be used in walkers without raising a type error.
+
+Make sure `onToken` get an `import` keyword token when parsing `import.meta`.
+
+Fix a bug where `.loc.start` could be undefined for `new.target` `meta` nodes.
+
## 8.11.2 (2023-10-27)
### Bug fixes
diff --git a/deps/acorn/acorn/dist/acorn.js b/deps/acorn/acorn/dist/acorn.js
index de0096ec9a6a31..3a6a3a2aeed54c 100644
--- a/deps/acorn/acorn/dist/acorn.js
+++ b/deps/acorn/acorn/dist/acorn.js
@@ -2942,12 +2942,14 @@
// Consume `import` as an identifier for `import.meta`.
// Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.
if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword import"); }
- var meta = this.parseIdent(true);
+ this.next();
if (this.type === types$1.parenL && !forNew) {
return this.parseDynamicImport(node)
} else if (this.type === types$1.dot) {
- node.meta = meta;
+ var meta = this.startNodeAt(node.start, node.loc && node.loc.start);
+ meta.name = "import";
+ node.meta = this.finishNode(meta, "Identifier");
return this.parseImportMeta(node)
} else {
this.unexpected();
@@ -3097,7 +3099,7 @@
var node = this.startNode();
this.next();
if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {
- var meta = this.startNodeAt(node.start, node.startLoc);
+ var meta = this.startNodeAt(node.start, node.loc && node.loc.start);
meta.name = "new";
node.meta = this.finishNode(meta, "Identifier");
this.next();
@@ -5925,7 +5927,7 @@
// [walk]: util/walk.js
- var version = "8.11.2";
+ var version = "8.11.3";
Parser.acorn = {
Parser: Parser,
@@ -5950,11 +5952,10 @@
};
// The main exported interface (under `self.acorn` when in the
- // browser) is a `parse` function that takes a code string and
- // returns an abstract syntax tree as specified by [Mozilla parser
- // API][api].
+ // browser) is a `parse` function that takes a code string and returns
+ // an abstract syntax tree as specified by the [ESTree spec][estree].
//
- // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
+ // [estree]: https://github.com/estree/estree
function parse(input, options) {
return Parser.parse(input, options)
diff --git a/deps/acorn/acorn/dist/acorn.mjs b/deps/acorn/acorn/dist/acorn.mjs
index 01a49ef94da2a7..d1f81ef48511a4 100644
--- a/deps/acorn/acorn/dist/acorn.mjs
+++ b/deps/acorn/acorn/dist/acorn.mjs
@@ -2936,12 +2936,14 @@ pp$5.parseExprImport = function(forNew) {
// Consume `import` as an identifier for `import.meta`.
// Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.
if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword import"); }
- var meta = this.parseIdent(true);
+ this.next();
if (this.type === types$1.parenL && !forNew) {
return this.parseDynamicImport(node)
} else if (this.type === types$1.dot) {
- node.meta = meta;
+ var meta = this.startNodeAt(node.start, node.loc && node.loc.start);
+ meta.name = "import";
+ node.meta = this.finishNode(meta, "Identifier");
return this.parseImportMeta(node)
} else {
this.unexpected();
@@ -3091,7 +3093,7 @@ pp$5.parseNew = function() {
var node = this.startNode();
this.next();
if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {
- var meta = this.startNodeAt(node.start, node.startLoc);
+ var meta = this.startNodeAt(node.start, node.loc && node.loc.start);
meta.name = "new";
node.meta = this.finishNode(meta, "Identifier");
this.next();
@@ -5919,7 +5921,7 @@ pp.readWord = function() {
// [walk]: util/walk.js
-var version = "8.11.2";
+var version = "8.11.3";
Parser.acorn = {
Parser: Parser,
@@ -5944,11 +5946,10 @@ Parser.acorn = {
};
// The main exported interface (under `self.acorn` when in the
-// browser) is a `parse` function that takes a code string and
-// returns an abstract syntax tree as specified by [Mozilla parser
-// API][api].
+// browser) is a `parse` function that takes a code string and returns
+// an abstract syntax tree as specified by the [ESTree spec][estree].
//
-// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
+// [estree]: https://github.com/estree/estree
function parse(input, options) {
return Parser.parse(input, options)
diff --git a/deps/acorn/acorn/package.json b/deps/acorn/acorn/package.json
index 430603dc8c3d57..1b8dc76afc3cf5 100644
--- a/deps/acorn/acorn/package.json
+++ b/deps/acorn/acorn/package.json
@@ -16,7 +16,7 @@
],
"./package.json": "./package.json"
},
- "version": "8.11.2",
+ "version": "8.11.3",
"engines": {
"node": ">=0.4.0"
},
diff --git a/deps/ada/unofficial.gni b/deps/ada/unofficial.gni
index d3d14193c5a154..ab7dc27de3e304 100644
--- a/deps/ada/unofficial.gni
+++ b/deps/ada/unofficial.gni
@@ -1,7 +1,3 @@
-# Copyright 2023 Microsoft Inc.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
# This file is used by GN for building, which is NOT the build system used for
# building official binaries.
# Please edit the gyp files if you are making changes to build system.
diff --git a/deps/base64/unofficial.gni b/deps/base64/unofficial.gni
index 269c62d976d6ad..5c46dea5d90d90 100644
--- a/deps/base64/unofficial.gni
+++ b/deps/base64/unofficial.gni
@@ -1,9 +1,3 @@
-# Copyright (c) 2013-2022 GitHub Inc.
-# Copyright 2022 the V8 project authors. All rights reserved.
-# Copyright 2023 Microsoft Inc.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
# This file is used by GN for building, which is NOT the build system used for
# building official binaries.
# Please edit the gyp files if you are making changes to build system.
diff --git a/deps/brotli/brotli.gyp b/deps/brotli/brotli.gyp
index 9fc9bcdfd54ece..f82660d82c6cfa 100644
--- a/deps/brotli/brotli.gyp
+++ b/deps/brotli/brotli.gyp
@@ -6,6 +6,7 @@
'c/common/context.c',
'c/common/dictionary.c',
'c/common/platform.c',
+ 'c/common/shared_dictionary.c',
'c/common/transform.c',
# Decoder
@@ -22,6 +23,7 @@
'c/enc/brotli_bit_stream.c',
'c/enc/cluster.c',
'c/enc/command.c',
+ 'c/enc/compound_dictionary.c',
'c/enc/compress_fragment.c',
'c/enc/compress_fragment_two_pass.c',
'c/enc/dictionary_hash.c',
diff --git a/deps/brotli/c/common/constants.c b/deps/brotli/c/common/constants.c
index 6bad9f613ca5d4..89866b150503c6 100644
--- a/deps/brotli/c/common/constants.c
+++ b/deps/brotli/c/common/constants.c
@@ -4,7 +4,7 @@
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
*/
-#include "./constants.h"
+#include "constants.h"
const BrotliPrefixCodeRange
_kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
diff --git a/deps/brotli/c/common/constants.h b/deps/brotli/c/common/constants.h
index e848195a0dc20f..31e5bd376e90fc 100644
--- a/deps/brotli/c/common/constants.h
+++ b/deps/brotli/c/common/constants.h
@@ -12,10 +12,11 @@
#ifndef BROTLI_COMMON_CONSTANTS_H_
#define BROTLI_COMMON_CONSTANTS_H_
-#include "./platform.h"
#include
#include
+#include "platform.h"
+
/* Specification: 7.3. Encoding of the context map */
#define BROTLI_CONTEXT_MAP_MAX_RLE 16
diff --git a/deps/brotli/c/common/context.c b/deps/brotli/c/common/context.c
index 2c2dceba9b6229..7f9c95869917b3 100644
--- a/deps/brotli/c/common/context.c
+++ b/deps/brotli/c/common/context.c
@@ -1,4 +1,4 @@
-#include "./context.h"
+#include "context.h"
#include
diff --git a/deps/brotli/c/common/dictionary.bin b/deps/brotli/c/common/dictionary.bin
deleted file mode 100644
index a585c0e292eba1..00000000000000
--- a/deps/brotli/c/common/dictionary.bin
+++ /dev/null
@@ -1,432 +0,0 @@
-timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0"stopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid="sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnearironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamseesjson', 'contT21: RSSloopasiamoonsoulLINEfortcartT14:80px!--<9px;T04:mike:46ZniceinchYorkricezh:�'));puremageparatonebond:37Z_of_']);000,zh:�tankyardbowlbush:56ZJava30px
-|}
-%C3%:34ZjeffEXPIcashvisagolfsnowzh:�quer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;
-}
-exit:35Zvarsbeat'});diet999;anne}}[i].Langkm²wiretoysaddssealalex;
- }echonine.org005)tonyjewssandlegsroof000) 200winegeardogsbootgarycutstyletemption.xmlcockgang$('.50pxPh.Dmiscalanloandeskmileryanunixdisc);}
-dustclip).
-
-70px-200DVDs7]>sonyguysfuckpipe|-
-!002)ndow[1];[];
-Log salt
- bangtrimbath){
-00px
-});ko:�feesad>
s:// [];tollplug(){
-{
- .js'200pdualboat.JPG);
-}quot);
-
-');
-
-}
201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomásesteestaperotodohacecadaañobiendíaasívidacasootroforosolootracualdijosidograntipotemadebealgoquéestonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiзанаомрарутанепоотизнодотожеонихНаеебымыВысовывоНообПолиниРФНеМытыОнимдаЗаДаНуОбтеИзейнуммТыужفيأنمامعكلأورديافىهولملكاولهبسالإنهيأيقدهلثمبهلوليبلايبكشيامأمنتبيلنحبهممشوشfirstvideolightworldmediawhitecloseblackrightsmallbooksplacemusicfieldorderpointvalueleveltableboardhousegroupworksyearsstatetodaywaterstartstyledeathpowerphonenighterrorinputabouttermstitletoolseventlocaltimeslargewordsgamesshortspacefocusclearmodelblockguideradiosharewomenagainmoneyimagenamesyounglineslatercolorgreenfront&watchforcepricerulesbeginaftervisitissueareasbelowindextotalhourslabelprintpressbuiltlinksspeedstudytradefoundsenseundershownformsrangeaddedstillmovedtakenaboveflashfixedoftenotherviewschecklegalriveritemsquickshapehumanexistgoingmoviethirdbasicpeacestagewidthloginideaswrotepagesusersdrivestorebreaksouthvoicesitesmonthwherebuildwhichearthforumthreesportpartyClicklowerlivesclasslayerentrystoryusagesoundcourtyour birthpopuptypesapplyImagebeinguppernoteseveryshowsmeansextramatchtrackknownearlybegansuperpapernorthlearngivennamedendedTermspartsGroupbrandusingwomanfalsereadyaudiotakeswhile.com/livedcasesdailychildgreatjudgethoseunitsneverbroadcoastcoverapplefilescyclesceneplansclickwritequeenpieceemailframeolderphotolimitcachecivilscaleenterthemetheretouchboundroyalaskedwholesincestock namefaithheartemptyofferscopeownedmightalbumthinkbloodarraymajortrustcanonunioncountvalidstoneStyleLoginhappyoccurleft:freshquitefilmsgradeneedsurbanfightbasishoverauto;route.htmlmixedfinalYour slidetopicbrownalonedrawnsplitreachRightdatesmarchquotegoodsLinksdoubtasyncthumballowchiefyouthnovel10px;serveuntilhandsCheckSpacequeryjamesequaltwice0,000Startpanelsongsroundeightshiftworthpostsleadsweeksavoidthesemilesplanesmartalphaplantmarksratesplaysclaimsalestextsstarswrongthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue"crossspentblogsbox">notedleavechinasizesguestrobotheavytrue,sevengrandcrimesignsawaredancephase>
-
-
-name=diegopage swiss-->
-
-#fff;">Log.com"treatsheet) && 14px;sleepntentfiledja:�id="cName"worseshots-box-delta
-<bears:48Z spendbakershops= "";php">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg" ")[0]MTopBType"newlyDanskczechtrailknowsfaq">zh-cn10);
--1");type=bluestrulydavis.js';>
-
-form jesus100% menu.
-
-walesrisksumentddingb-likteachgif" vegasdanskeestishqipsuomisobredesdeentretodospuedeañosestátienehastaotrospartedondenuevohacerformamismomejormundoaquídíassóloayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaísnuevasaludforosmedioquienmesespoderchileserávecesdecirjoséestarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocómoenerojuegoperúhaberestoynuncamujervalorfueralibrogustaigualvotoscasosguíapuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleónplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenáreadiscopedrocercapuedapapelmenorútilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniñoquedapasarbancohijosviajepabloéstevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallíjovendichaestantalessalirsuelopesosfinesllamabuscoéstalleganegroplazahumorpagarjuntadobleislasbolsabañohablaluchaÁreadicenjugarnotasvalleallácargadolorabajoestégustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother" id="marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo" bottomlist">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout islandPhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera
-_form"leavesstress" />
-.gif" onloadloaderOxfordsistersurvivlistenfemaleDesignsize="appealtext">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople wonderpricesturned|| {};main">inlinesundaywrap">failedcensusminutebeaconquotes150px|estateremoteemail"linkedright;signalformal1.htmlsignupprincefloat:.png" forum.AccesspaperssoundsextendHeightsliderUTF-8"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome">headerensurebranchpiecesblock;statedtop">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline">body">
-* TheThoughseeingjerseyNews
-System DavidcancertablesprovedApril reallydriveritem">more">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php" assumelayerswilsonstoresreliefswedenCustomeasily your String
-
-Whiltaylorclear:resortfrenchthough") + "buyingbrandsMembername">oppingsector5px;">vspacepostermajor coffeemartinmaturehappenkansaslink">Images=falsewhile hspace0&
-
-In powerPolski-colorjordanBottomStart -count2.htmlnews">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml" rights.html-blockregExp:hoverwithinvirginphones |
using
- var >');
-
-
-bahasabrasilgalegomagyarpolskisrpskiردو中文简体繁體信息中国我们一个公司管理论坛可以服务时间个人产品自己企业查看工作联系没有网站所有评论中心文章用户首页作者技术问题相关下载搜索使用软件在线主题资料视频回复注册网络收藏内容推荐市场消息空间发布什么好友生活图片发展如果手机新闻最新方式北京提供关于更多这个系统知道游戏广告其他发表安全第一会员进行点击版权电子世界设计免费教育加入活动他们商品博客现在上海如何已经留言详细社区登录本站需要价格支持国际链接国家建设朋友阅读法律位置经济选择这样当前分类排行因为交易最后音乐不能通过行业科技可能设备合作大家社会研究专业全部项目这里还是开始情况电脑文件品牌帮助文化资源大学学习地址浏览投资工程要求怎么时候功能主要目前资讯城市方法电影招聘声明任何健康数据美国汽车介绍但是交流生产所以电话显示一些单位人员分析地图旅游工具学生系列网友帖子密码频道控制地区基本全国网上重要第二喜欢进入友情这些考试发现培训以上政府成为环境香港同时娱乐发送一定开发作品标准欢迎解决地方一下以及责任或者客户代表积分女人数码销售出现离线应用列表不同编辑统计查询不要有关机构很多播放组织政策直接能力来源時間看到热门关键专区非常英语百度希望美女比较知识规定建议部门意见精彩日本提高发言方面基金处理权限影片银行还有分享物品经营添加专家这种话题起来业务公告记录简介质量男人影响引用报告部分快速咨询时尚注意申请学校应该历史只是返回购买名称为了成功说明供应孩子专题程序一般會員只有其它保护而且今天窗口动态状态特别认为必须更新小说我們作为媒体包括那么一样国内是否根据电视学院具有过程由于人才出来不过正在明星故事关系标题商务输入一直基础教学了解建筑结果全球通知计划对于艺术相册发生真的建立等级类型经验实现制作来自标签以下原创无法其中個人一切指南关闭集团第三关注因此照片深圳商业广州日期高级最近综合表示专辑行为交通评价觉得精华家庭完成感觉安装得到邮件制度食品虽然转载报价记者方案行政人民用品东西提出酒店然后付款热点以前完全发帖设置领导工业医院看看经典原因平台各种增加材料新增之后职业效果今年论文我国告诉版主修改参与打印快乐机械观点存在精神获得利用继续你们这么模式语言能够雅虎操作风格一起科学体育短信条件治疗运动产业会议导航先生联盟可是問題结构作用调查資料自动负责农业访问实施接受讨论那个反馈加强女性范围服務休闲今日客服觀看参加的话一点保证图书有效测试移动才能决定股票不断需求不得办法之间采用营销投诉目标爱情摄影有些複製文学机会数字装修购物农村全面精品其实事情水平提示上市谢谢普通教师上传类别歌曲拥有创新配件只要时代資訊达到人生订阅老师展示心理贴子網站主題自然级别简单改革那些来说打开代码删除证券节目重点次數多少规划资金找到以后大全主页最佳回答天下保障现代检查投票小时沒有正常甚至代理目录公开复制金融幸福版本形成准备行情回到思想怎样协议认证最好产生按照服装广东动漫采购新手组图面板参考政治容易天地努力人们升级速度人物调整流行造成文字韩国贸易开展相關表现影视如此美容大小报道条款心情许多法规家居书店连接立即举报技巧奥运登入以来理论事件自由中华办公妈妈真正不错全文合同价值别人监督具体世纪团队创业承担增长有人保持商家维修台湾左右股份答案实际电信经理生命宣传任务正式特色下来协会只能当然重新內容指导运行日志賣家超过土地浙江支付推出站长杭州执行制造之一推广现场描述变化传统歌手保险课程医疗经过过去之前收入年度杂志美丽最高登陆未来加工免责教程版块身体重庆出售成本形式土豆出價东方邮箱南京求职取得职位相信页面分钟网页确定图例网址积极错误目的宝贝机关风险授权病毒宠物除了評論疾病及时求购站点儿童每天中央认识每个天津字体台灣维护本页个性官方常见相机战略应当律师方便校园股市房屋栏目员工导致突然道具本网结合档案劳动另外美元引起改变第四会计說明隐私宝宝规范消费共同忘记体系带来名字發表开放加盟受到二手大量成人数量共享区域女孩原则所在结束通信超级配置当时优秀性感房产遊戲出口提交就业保健程度参数事业整个山东情感特殊分類搜尋属于门户财务声音及其财经坚持干部成立利益考虑成都包装用戶比赛文明招商完整真是眼睛伙伴威望领域卫生优惠論壇公共良好充分符合附件特点不可英文资产根本明显密碼公众民族更加享受同学启动适合原来问答本文美食绿色稳定终于生物供求搜狐力量严重永远写真有限竞争对象费用不好绝对十分促进点评影音优势不少欣赏并且有点方向全新信用设施形象资格突破随着重大于是毕业智能化工完美商城统一出版打造產品概况用于保留因素中國存储贴图最愛长期口价理财基地安排武汉里面创建天空首先完善驱动下面不再诚信意义阳光英国漂亮军事玩家群众农民即可名稱家具动画想到注明小学性能考研硬件观看清楚搞笑首頁黄金适用江苏真实主管阶段註冊翻译权利做好似乎通讯施工狀態也许环保培养概念大型机票理解匿名cuandoenviarmadridbuscariniciotiempoporquecuentaestadopuedenjuegoscontraestánnombretienenperfilmaneraamigosciudadcentroaunquepuedesdentroprimerpreciosegúnbuenosvolverpuntossemanahabíaagostonuevosunidoscarlosequiponiñosmuchosalgunacorreoimagenpartirarribamaríahombreempleoverdadcambiomuchasfueronpasadolíneaparecenuevascursosestabaquierolibroscuantoaccesomiguelvarioscuatrotienesgruposseráneuropamediosfrenteacercademásofertacochesmodeloitalialetrasalgúncompracualesexistecuerposiendoprensallegarviajesdineromurciapodrápuestodiariopuebloquieremanuelpropiocrisisciertoseguromuertefuentecerrargrandeefectopartesmedidapropiaofrecetierrae-mailvariasformasfuturoobjetoseguirriesgonormasmismosúnicocaminositiosrazóndebidopruebatoledoteníajesúsesperococinaorigentiendacientocádizhablarseríalatinafuerzaestiloguerraentraréxitolópezagendavídeoevitarpaginametrosjavierpadresfácilcabezaáreassalidaenvíojapónabusosbienestextosllevarpuedanfuertecomúnclaseshumanotenidobilbaounidadestáseditarcreadoдлячтокакилиэтовсеегопритакещеужеКакбезбылониВсеподЭтотомчемнетлетразонагдемнеДляПринаснихтемктогодвоттамСШАмаяЧтовасвамемуТакдванамэтиэтуВамтехпротутнаддняВоттринейВаснимсамтотрубОнимирнееОООлицэтаОнанемдоммойдвеоносудकेहैकीसेकाकोऔरपरनेएककिभीइसकरतोहोआपहीयहयातकथाjagranआजजोअबदोगईजागएहमइनवहयेथेथीघरजबदीकईजीवेनईनएहरउसमेकमवोलेसबमईदेओरआमबसभरबनचलमनआगसीलीعلىإلىهذاآخرعددالىهذهصورغيركانولابينعرضذلكهنايومقالعليانالكنحتىقبلوحةاخرفقطعبدركنإذاكمااحدإلافيهبعضكيفبحثومنوهوأناجدالهاسلمعندليسعبرصلىمنذبهاأنهمثلكنتالاحيثمصرشرححولوفياذالكلمرةانتالفأبوخاصأنتانهاليعضووقدابنخيربنتلكمشاءوهيابوقصصومارقمأحدنحنعدمرأياحةكتبدونيجبمنهتحتجهةسنةيتمكرةغزةنفسبيتللهلناتلكقلبلماعنهأولشيءنورأمافيكبكلذاترتببأنهمسانكبيعفقدحسنلهمشعرأهلشهرقطرطلبprofileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashion