From 1842ba4a3db7f7c4bc16a04b9987007ec12df89f Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Thu, 11 Jun 2026 09:26:24 +0100 Subject: [PATCH 01/18] Cleanup test runner --- integration-tests/js-compute/test.js | 567 +++++++++++++-------------- 1 file changed, 263 insertions(+), 304 deletions(-) diff --git a/integration-tests/js-compute/test.js b/integration-tests/js-compute/test.js index 4749c1a2a1..575f3427d8 100755 --- a/integration-tests/js-compute/test.js +++ b/integration-tests/js-compute/test.js @@ -31,10 +31,35 @@ async function killPortProcess(port) { const startTime = Date.now(); const __dirname = dirname(fileURLToPath(import.meta.url)); -async function sleep(seconds) { - return new Promise((resolve) => { - setTimeout(resolve, 1_000 * seconds); - }); +const green = '\u001b[32m'; +const red = '\u001b[31m'; +const reset = '\u001b[0m'; +const white = '\u001b[39m'; +const info = '\u2139'; +const tick = '\u2714'; +const cross = '\u2716'; + +function appendBuildFlag(config, flag) { + const buildArgs = config.scripts.build.split(' '); + buildArgs.splice(-1, null, flag); + config.scripts.build = buildArgs.join(' '); +} + +async function resolveFastlyApiToken() { + try { + zx.verbose = false; + process.env.FASTLY_API_TOKEN = String( + await $`fastly auth show --reveal | grep 'Token:' | cut -d ' ' -f2-`, + ).trim(); + } catch { + console.error( + 'No environment variable named FASTLY_API_TOKEN has been set and no default fastly profile exists.', + ); + console.error( + 'In order to run the tests, either create a fastly profile using `fastly profile create` or export a fastly token under the name FASTLY_API_TOKEN', + ); + process.exit(1); + } } let args = argv.slice(2); @@ -54,20 +79,7 @@ const bail = args.includes('--bail'); const ci = args.includes('--ci'); if (!local && process.env.FASTLY_API_TOKEN === undefined) { - try { - zx.verbose = false; - process.env.FASTLY_API_TOKEN = String( - await $`fastly auth show --reveal | grep 'Token:' | cut -d ' ' -f2-`, - ).trim(); - } catch { - console.error( - 'No environment variable named FASTLY_API_TOKEN has been set and no default fastly profile exists.', - ); - console.error( - 'In order to run the tests, either create a fastly profile using `fastly profile create` or export a fastly token under the name FASTLY_API_TOKEN', - ); - process.exit(1); - } + await resolveFastlyApiToken(); } const FASTLY_API_TOKEN = process.env.FASTLY_API_TOKEN; @@ -76,11 +88,7 @@ const branchName = (await zx`git branch --show-current`).stdout .trim() .replace(/[^a-zA-Z0-9_-]/g, '_'); -var fixture = 'app'; - -if (fixtureArg !== undefined) { - fixture = fixtureArg.split('=')[1]; -} +const fixture = fixtureArg !== undefined ? fixtureArg.split('=')[1] : 'app'; // Service names are carefully unique to support parallel runs const serviceName = `${GLOBAL_PREFIX}app-${branchName}${aot ? '--aot' : ''}${httpCache ? '--http' : ''}${process.env.SUFFIX_STRING ? '--' + process.env.SUFFIX_STRING : ''}`; @@ -114,27 +122,228 @@ const config = TOML.parse( ), ); config.name = serviceName; -if (aot) { - const buildArgs = config.scripts.build.split(' '); - buildArgs.splice(-1, null, '--enable-aot'); - config.scripts.build = buildArgs.join(' '); -} -if (debugBuild) { - const buildArgs = config.scripts.build.split(' '); - buildArgs.splice(-1, null, '--debug-build'); - config.scripts.build = buildArgs.join(' '); -} -if (httpCache) { - const buildArgs = config.scripts.build.split(' '); - buildArgs.splice(-1, null, '--enable-http-cache'); - config.scripts.build = buildArgs.join(' '); -} +if (aot) appendBuildFlag(config, '--enable-aot'); +if (debugBuild) appendBuildFlag(config, '--debug-build'); +if (httpCache) appendBuildFlag(config, '--enable-http-cache'); await writeFile( join(fixturePath, 'fastly.toml'), TOML.stringify(config), 'utf-8', ); +async function waitUntilServiceReady() { + // Local uses a hand-tuned backoff since we expect the build to take ~10s. + const localReadyBackoff = [ + 6000, 3000, 1500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, + // after >20s the build is unusually slow; start backing off before timeout + 1500, 3000, 6000, 12000, 24000, + ].values(); + + await Promise.all([ + retry( + 27, + local ? localReadyBackoff : expBackoff('60s', '10s'), + async () => { + const response = await request(domain); + if (response.statusCode !== 200) { + throw new Error( + `Application "${fixture}" :: Not yet available on domain: ${domain}`, + ); + } + }, + ), + // we need to wait for the service resource links to all activate, + // and we don't currently have a reliable way to poll on that + local ? null : new Promise((resolve) => setTimeout(resolve, 60_000)), + ]); +} + +async function teardownRemoteService() { + const teardownPath = join(__dirname, 'teardown.js'); + if (existsSync(teardownPath)) { + core.startGroup('Tear down the extra set-up for the service'); + await zx`${teardownPath} ${serviceId} ${ci ? serviceName : ''}`; + core.endGroup(); + } + core.startGroup('Delete service'); + try { + await $`fastly service delete --quiet --service-name "${serviceName}" --force --token $FASTLY_API_TOKEN`; + } catch (e) { + console.log('Failed to delete service:', e.message); + } + core.endGroup(); +} + +function chunks(arr, size) { + const output = []; + for (let i = 0; i < arr.length; i += size) { + output.push(arr.slice(i, i + size)); + } + return output; +} + +async function getBodyChunks(response, bodyStreaming) { + const bodyChunks = []; + let readChunks = async () => { + switch (bodyStreaming) { + case 'first-chunk-only': + for await (const chunk of response.body) { + bodyChunks.push(chunk); + response.body.on('error', () => {}); + break; + } + break; + case 'none': + response.body.on('error', () => {}); + break; + case 'full': + default: + for await (const chunk of response.body) { + bodyChunks.push(chunk); + } + } + }; + let downstreamTimeout; + let timeoutPromise = new Promise((_, reject) => { + downstreamTimeout = setTimeout(() => { + reject(new Error(`Test downstream response body chunk timeout`)); + }, 30_000); + }); + await Promise.race([readChunks(), timeoutPromise]); + clearTimeout(downstreamTimeout); + return bodyChunks; +} + +async function runLocalTest(title, test) { + const url = `${domain}${test.downstream_request.pathname}`; + return (bail || !test.flake ? (_, __, fn) => fn() : retry)( + 5, + expBackoff('10s', '1s'), + async () => { + try { + const response = await request(url, { + method: test.downstream_request.method || 'GET', + headers: test.downstream_request.headers || undefined, + body: test.downstream_request.body || undefined, + }); + const bodyChunks = await getBodyChunks(response, test.body_streaming); + await compareDownstreamResponse( + test.downstream_response, + response, + bodyChunks, + ); + return { title, test, skipped: false }; + } catch (error) { + console.error('\n' + test.downstream_request.pathname); + throw new Error(`${title} ${error.message}`, { cause: error }); + } + }, + ); +} + +async function runComputeTest(title, test) { + const url = `${domain}${test.downstream_request.pathname}`; + const onInfo = test.downstream_info + ? async (status, headers) => { + if ( + test.downstream_info.status !== undefined && + test.downstream_info.status != status + ) { + throw new Error( + `[DownstreamInfo: Status mismatch] Expected: ${test.downstream_info.status} - Got: ${status}`, + ); + } + if (headers) { + compareHeaders( + test.downstream_info.headers, + headers, + test.downstream_info.headersExhaustive, + ); + } + } + : undefined; + + return retry( + test.flake ? 15 : bail ? 1 : 4, + expBackoff(test.flake ? '60s' : '30s', test.flake ? '30s' : '1s'), + async () => { + try { + const response = await request(url, { + method: test.downstream_request.method || 'GET', + headers: test.downstream_request.headers || undefined, + body: test.downstream_request.body || undefined, + onInfo, + }); + const bodyChunks = await getBodyChunks(response, test.body_streaming); + await compareDownstreamResponse( + test.downstream_response, + response, + bodyChunks, + ); + return { title, test, skipped: false }; + } catch (error) { + console.error('\n' + test.downstream_request.pathname); + throw new Error(`${title} ${error.message}`); + } + }, + ); +} + +async function runTest(title, test) { + // Apply defaults + if (!test.downstream_request) { + const [method, pathname, extra] = title.split(' '); + if (typeof extra === 'string') + throw new Error('Cannot infer downstream_request from title'); + test.downstream_request = { method, pathname }; + } + if (!test.downstream_response) { + test.downstream_response = { status: 200 }; + } + if (!test.environments) { + test.environments = ['viceroy', 'compute']; + } + + // Basic test filtering + if ( + test.skip || + (filter.length > 0 && filter.every((f) => !title.includes(f))) + ) { + return { + title, + test, + skipped: true, + skipReason: test.skip ? 'MARKED AS SKIPPED (pending further work)' : null, + }; + } + + // Feature-based test filtering + if ( + (!httpCache && test.features?.includes('http-cache')) || + (httpCache && test.features?.includes('skip-http-cache')) + ) { + return { + title, + test, + skipped: true, + skipReason: `feature "http-cache" ${httpCache ? '' : 'not '}"enabled`, + }; + } + + if (local) { + if (!test.environments.includes('viceroy')) { + return { title, test, skipped: true, skipReason: 'no environments' }; + } + return runLocalTest(title, test); + } else { + if (!test.environments.includes('compute')) { + return { title, test, skipped: true, skipReason: 'no environments' }; + } + return runComputeTest(title, test); + } +} + let passed = 0; const failed = []; try { @@ -152,17 +361,15 @@ try { // It can take time for the new domain to show up on the list. await Promise.all([ - (async () => { - await retry(27, expBackoff('60s', '10s'), async () => { - // get the public domain of the deployed application - const domainListing = JSON.parse( - await $`fastly service domain list --quiet --version latest --json`, - )[0]; - domain = `https://${domainListing.Name}`; - serviceId = domainListing.ServiceID; - core.notice(`Service is running on ${domain}`); - }); - })(), + retry(27, expBackoff('60s', '10s'), async () => { + // get the public domain of the deployed application + const domainListing = JSON.parse( + await $`fastly service domain list --quiet --version latest --json`, + )[0]; + domain = `https://${domainListing.Name}`; + serviceId = domainListing.ServiceID; + core.notice(`Service is running on ${domain}`); + }), new Promise((resolve) => setTimeout(resolve, 60_000)), ]); } else { @@ -181,37 +388,7 @@ try { } } - await Promise.all([ - (async () => { - await retry( - 27, - local - ? [ - // we expect it to take ~10 seconds to deploy, so focus on that time - 6000, - 3000, 1500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 500, 500, 500, - // after more than 20 seconds, means we have an unusually slow build, start backoff before timeout - 1500, - 3000, 6000, 12000, 24000, - ].values() - : expBackoff('60s', '10s'), - async () => { - const response = await request(domain); - if (response.statusCode !== 200) { - throw new Error( - `Application "${fixture}" :: Not yet available on domain: ${domain}`, - ); - } - }, - ); - })(), - // we need to wait for the service resource links to all activate, - // and we don't currently have a reliable way to poll on that - // (perhaps we could poll on the highest version as seen from setup.js resource-link return output - // being fully activated?) - local ? null : new Promise((resolve) => setTimeout(resolve, 60_000)), - ]); + await waitUntilServiceReady(); core.endGroup(); @@ -221,212 +398,15 @@ try { with: { type: 'json' }, }); - function chunks(arr, size) { - const output = []; - for (let i = 0; i < arr.length; i += size) { - output.push(arr.slice(i, i + size)); - } - return output; - } - + const chunkSize = serial ? 1 : 100; + const runChunk = bail + ? Promise.all.bind(Promise) + : Promise.allSettled.bind(Promise); let results = []; - let chunkSize = serial ? 1 : 100; for (const chunk of chunks(Object.entries(tests), chunkSize)) { results.push( - ...(await ( - bail ? Promise.all.bind(Promise) : Promise.allSettled.bind(Promise) - )( - chunk.map(async ([title, test]) => { - // test defaults - if (!test.downstream_request) { - const [method, pathname, extra] = title.split(' '); - if (typeof extra === 'string') - throw new Error('Cannot infer downstream_request from title'); - test.downstream_request = { method, pathname }; - } - if (!test.downstream_response) { - test.downstream_response = { - status: 200, - }; - } - if (!test.environments) { - test.environments = ['viceroy', 'compute']; - } - - // basic test filtering - if ( - test.skip || - (filter.length > 0 && filter.every((f) => !title.includes(f))) - ) { - return { - title, - test, - skipped: true, - skipReason: test.skip - ? 'MARKED AS SKIPPED (pending further work)' - : null, // dont mention filtered tests - }; - } - // feature based test filtering - if ( - (!httpCache && - test.features && - test.features.includes('http-cache')) || - (httpCache && - test.features && - test.features.includes('skip-http-cache')) - ) { - return { - title, - test, - skipped: true, - skipReason: `feature "http-cache" ${httpCache ? '' : 'not '}"enabled`, - }; - } - async function getBodyChunks(response) { - const bodyChunks = []; - let downstreamTimeout; - await Promise.race([ - (async () => { - // This body_streaming property allows us to test different cases - // of consumer streamining behaviours. - switch (test.body_streaming) { - case 'first-chunk-only': - for await (const chunk of response.body) { - bodyChunks.push(chunk); - response.body.on('error', () => {}); - break; - } - break; - case 'none': - response.body.on('error', () => {}); - break; - case 'full': - default: - for await (const chunk of response.body) { - bodyChunks.push(chunk); - } - } - })(), - new Promise((_, reject) => { - downstreamTimeout = setTimeout(() => { - reject( - new Error(`Test downstream response body chunk timeout`), - ); - }, 30_000); - }), - ]); - clearTimeout(downstreamTimeout); - return bodyChunks; - } - let onInfoHandler = test.downstream_info - ? async (status, headers) => { - if ( - test.downstream_info.status !== undefined && - test.downstream_info.status != status - ) { - throw new Error( - `[DownstreamInfo: Status mismatch] Expected: ${configResponse.status} - Got: ${status}}`, - ); - } - if (headers) { - compareHeaders( - configResponse.headers, - headers, - configResponse.headersExhaustive, - ); - } - } - : undefined; - - if (local) { - if (test.environments.includes('viceroy')) { - return (bail || !test.flake ? (_, __, fn) => fn() : retry)( - 5, - expBackoff('10s', '1s'), - async () => { - let path = test.downstream_request.pathname; - let url = `${domain}${path}`; - try { - const response = await request(url, { - method: test.downstream_request.method || 'GET', - headers: test.downstream_request.headers || undefined, - body: test.downstream_request.body || undefined, - }); - const bodyChunks = await getBodyChunks(response); - await compareDownstreamResponse( - test.downstream_response, - response, - bodyChunks, - ); - return { - title, - test, - skipped: false, - }; - } catch (error) { - console.error('\n' + test.downstream_request.pathname); - throw new Error(`${title} ${error.message}`, { - cause: error, - }); - } - }, - ); - } else { - return { - title, - test, - skipped: true, - skipReason: 'no environments', - }; - } - } else { - if (test.environments.includes('compute')) { - return retry( - test.flake ? 15 : bail ? 1 : 4, - expBackoff( - test.flake ? '60s' : '30s', - test.flake ? '30s' : '1s', - ), - async () => { - let path = test.downstream_request.pathname; - let url = `${domain}${path}`; - try { - const response = await request(url, { - method: test.downstream_request.method || 'GET', - headers: test.downstream_request.headers || undefined, - body: test.downstream_request.body || undefined, - onInfo: onInfoHandler, - }); - const bodyChunks = await getBodyChunks(response); - await compareDownstreamResponse( - test.downstream_response, - response, - bodyChunks, - ); - return { - title, - test, - skipped: false, - }; - } catch (error) { - console.error('\n' + test.downstream_request.pathname); - throw new Error(`${title} ${error.message}`); - } - }, - ); - } else { - return { - title, - test, - skipped: true, - skipReason: 'no environments', - }; - } - } - }), - )), + ...(await runChunk(chunk.map(([title, test]) => runTest(title, test)))), ); } @@ -434,13 +414,6 @@ try { console.log('Test results'); core.startGroup('Test results'); - const green = '\u001b[32m'; - const red = '\u001b[31m'; - const reset = '\u001b[0m'; - const white = '\u001b[39m'; - const info = '\u2139'; - const tick = '\u2714'; - const cross = '\u2716'; for (const result of results) { if (result.status === 'fulfilled' || bail) { const value = bail ? result : result.value; @@ -481,21 +454,7 @@ try { } // No need to tear down the service if what failed was setting it up. if (!local && !skipTeardown && serviceId) { - const teardownPath = join(__dirname, 'teardown.js'); - if (existsSync(teardownPath)) { - core.startGroup('Tear down the extra set-up for the service'); - await zx`${teardownPath} ${serviceId} ${ci ? serviceName : ''}`; - core.endGroup(); - } - - core.startGroup('Delete service'); - // Delete the service now the tests have finished - try { - await $`fastly service delete --quiet --service-name "${serviceName}" --force --token $FASTLY_API_TOKEN`; - } catch (e) { - console.log('Failed to delete service:', e.message); - } - core.endGroup(); + await teardownRemoteService(); } if (process.exitCode == undefined || process.exitCode == 0) { console.log( From 442ded7e7723934491d624c1876d3e57a05757c2 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Wed, 25 Mar 2026 08:14:11 +0000 Subject: [PATCH 02/18] feat: Upgrade StarlingMonkey --- .github/workflows/main.yml | 20 +- .github/workflows/release-please.yml | 6 +- .gitignore | 5 +- DEVELOPMENT.md | 16 +- documentation/app/package-lock.json | 39 - documentation/package-lock.json | 18 - package-lock.json | 1265 +++++------------ package.json | 7 +- packages/wasmtime/README.md | 16 + packages/wasmtime/index.js | 10 + packages/wasmtime/package.json | 23 + packages/wasmtime/scripts/postinstall.js | 114 ++ runtime/StarlingMonkey | 2 +- runtime/fastly/CMakeLists.txt | 10 +- runtime/fastly/build-debug.sh | 2 +- runtime/fastly/build-release-weval.sh | 2 +- runtime/fastly/build-release.sh | 2 +- runtime/fastly/builtins/abort.cpp | 18 + runtime/fastly/builtins/acl.cpp | 3 +- runtime/fastly/builtins/backend.cpp | 3 +- runtime/fastly/builtins/backend.h | 2 +- runtime/fastly/builtins/cache-core.cpp | 4 +- runtime/fastly/builtins/cache-simple.cpp | 14 +- runtime/fastly/builtins/fastly.cpp | 9 +- .../fastly/builtins/fetch/request-response.h | 2 +- runtime/fastly/builtins/html-rewriter.cpp | 5 +- .../fastly/common/normalize_http_method.cpp | 3 +- runtime/fastly/host-api/fastly.h | 7 +- runtime/fastly/host-api/host_api.cpp | 24 +- runtime/fastly/host-api/host_api_fastly.h | 2 +- runtime/rust-toolchain.toml | 4 +- src/compileApplicationToWasm.ts | 28 +- .../ec_importKey.https.any.js.json | 48 +- .../sign_verify/ecdsa.https.any.js.json | 864 +++++------ .../url/url-constructor.any.js.json | 12 +- .../url/url-searchparams.any.js.json | 2 +- .../url/urlencoded-parser.any.js.json | 12 +- .../url/urlsearchparams-append.any.js.json | 2 +- .../urlsearchparams-constructor.any.js.json | 4 +- .../url/urlsearchparams-delete.any.js.json | 4 +- .../url/urlsearchparams-get.any.js.json | 4 +- .../url/urlsearchparams-has.any.js.json | 4 +- .../url/urlsearchparams-size.any.js.json | 8 +- .../urlsearchparams-stringifier.any.js.json | 2 +- 44 files changed, 1109 insertions(+), 1542 deletions(-) create mode 100644 packages/wasmtime/README.md create mode 100644 packages/wasmtime/index.js create mode 100644 packages/wasmtime/package.json create mode 100644 packages/wasmtime/scripts/postinstall.js create mode 100644 runtime/fastly/builtins/abort.cpp diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 15ae51217b..b967e62855 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -99,13 +99,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: "Install wasi-sdk-20 (linux)" + - name: "Install wasi-sdk-30 (linux)" run: | set -x - curl -sS -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz - tar xf wasi-sdk-20.0-linux.tar.gz + curl -sS -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-30/wasi-sdk-30.0-x86_64-linux.tar.gz + tar xf wasi-sdk-30.0-x86_64-linux.tar.gz sudo mkdir -p /opt/wasi-sdk - sudo mv wasi-sdk-20.0/* /opt/wasi-sdk/ + sudo mv wasi-sdk-30.0-x86_64-linux/* /opt/wasi-sdk/ ls /opt/wasi-sdk/ - run: | /opt/wasi-sdk/bin/clang-format --version @@ -171,10 +171,10 @@ jobs: with: node-version: 'lts/*' - run: npm ci - - name: Install Rust 1.81.0 + - name: Install Rust 1.88.0 run: | - rustup toolchain install 1.81.0 - rustup target add wasm32-wasip1 --toolchain 1.81.0 + rustup toolchain install 1.88.0 + rustup target add wasm32-wasip1 --toolchain 1.88.0 - name: Restore wasm-tools from cache uses: actions/cache@v3 id: wasm-tools @@ -207,10 +207,10 @@ jobs: with: node-version: 'lts/*' - run: npm ci - - name: Install Rust 1.81.0 + - name: Install Rust 1.88.0 run: | - rustup toolchain install 1.81.0 - rustup target add wasm32-wasip1 --toolchain 1.81.0 + rustup toolchain install 1.88.0 + rustup target add wasm32-wasip1 --toolchain 1.88.0 - name: Restore wasm-tools from cache uses: actions/cache@v3 id: wasm-tools diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 088e6c2c3f..7bb364fbad 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -100,10 +100,10 @@ jobs: with: node-version: 'lts/*' - run: npm ci - - name: Install Rust 1.81.0 + - name: Install Rust 1.88.0 run: | - rustup toolchain install 1.81.0 - rustup target add wasm32-wasip1 --toolchain 1.81.0 + rustup toolchain install 1.88.0 + rustup target add wasm32-wasip1 --toolchain 1.88.0 - name: Restore wasm-tools from cache uses: actions/cache@v3 id: wasm-tools diff --git a/.gitignore b/.gitignore index 88cbfa3b17..b5b72e78c3 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,8 @@ wpt-runtime.wasm docs-app/bin/main.wasm docs-app/pkg/*.tar.gz +# Local wasmtime install +/packages/wasmtime/bin + yarn-error.log -.vscode \ No newline at end of file +.vscode diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index cacce522c5..a70eacd9b0 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -41,13 +41,13 @@ To build from source, you need to have the following tools installed to successf ```sh cargo install cbindgen ``` -- [wasi-sdk, version 20](https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-20), +- [wasi-sdk, version 30](https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-30), with alternate [install instructions](https://github.com/WebAssembly/wasi-sdk#install) ```sh - curl -sS -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz - tar xf wasi-sdk-20.0-linux.tar.gz + curl -sS -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-30/wasi-sdk-30.0-x86_64-linux.tar.gz + tar xf wasi-sdk-30.0-x86_64-linux.tar.gz sudo mkdir -p /opt/wasi-sdk - sudo mv wasi-sdk-20.0/* /opt/wasi-sdk/ + sudo mv wasi-sdk-30.0-x86_64-linux/* /opt/wasi-sdk/ ``` Build the runtime using npm: @@ -101,13 +101,13 @@ npm run build cargo install --locked wasm-tools ``` -- [wasi-sdk, version 20](https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-20), +- [wasi-sdk, version 30](https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-30), with alternate [install instructions](https://github.com/WebAssembly/wasi-sdk#install) ```sh - curl -sS -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-macos.tar.gz - tar xf wasi-sdk-20.0-macos.tar.gz + curl -sS -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-30/wasi-sdk-30.0-arm64-macos.tar.gz + tar xf wasi-sdk-30.0-arm64-macos.tar.gz sudo mkdir -p /opt/wasi-sdk - sudo mv wasi-sdk-20.0/* /opt/wasi-sdk/ + sudo mv wasi-sdk-30.0-arm64-macos/* /opt/wasi-sdk/ ``` Build the runtime using npm: diff --git a/documentation/app/package-lock.json b/documentation/app/package-lock.json index 63aaaa8914..5c1067496a 100644 --- a/documentation/app/package-lock.json +++ b/documentation/app/package-lock.json @@ -1214,9 +1214,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1234,9 +1231,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1254,9 +1248,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1274,9 +1265,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1294,9 +1282,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1314,9 +1299,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1334,9 +1316,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1543,9 +1522,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1563,9 +1539,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1583,9 +1556,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1603,9 +1573,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1623,9 +1590,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1643,9 +1607,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ diff --git a/documentation/package-lock.json b/documentation/package-lock.json index 460c4ae9e6..6a549b7bce 100644 --- a/documentation/package-lock.json +++ b/documentation/package-lock.json @@ -6093,9 +6093,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6113,9 +6110,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6133,9 +6127,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6153,9 +6144,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6173,9 +6161,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6193,9 +6178,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ diff --git a/package-lock.json b/package-lock.json index a3d56fcc3a..8acf5be388 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "license": "Apache-2.0", "dependencies": { "@bytecodealliance/jco": "^1.7.0", - "@bytecodealliance/weval": "^0.3.2", - "@bytecodealliance/wizer": "^7.0.5", + "@bytecodealliance/weval": "^0.4.1", + "@fastly/wasmtime": "file:packages/wasmtime", "@jridgewell/remapping": "^2.3.5", "@jridgewell/trace-mapping": "^0.3.31", "acorn": "^8.13.0", @@ -54,8 +54,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "license": "MIT", "dependencies": { "@babel/highlight": "^7.25.7", @@ -67,8 +65,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -76,8 +72,6 @@ }, "node_modules/@babel/highlight": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.7", @@ -91,8 +85,6 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -103,8 +95,6 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -117,8 +107,6 @@ }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { "node": ">=0.8.0" @@ -126,8 +114,6 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", "engines": { "node": ">=4" @@ -135,8 +121,6 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -147,8 +131,6 @@ }, "node_modules/@bytecodealliance/componentize-js": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@bytecodealliance/componentize-js/-/componentize-js-0.13.0.tgz", - "integrity": "sha512-SBmuSiw2CQTBnmE5+944ujFG9VykovteE2q5XLsTblJgey67TAxrIjlLsygDypFbi2JUGNJJ6t9Y0HSarBgKxQ==", "workspaces": [ "." ], @@ -159,10 +141,21 @@ "es-module-lexer": "^1.5.4" } }, + "node_modules/@bytecodealliance/componentize-js/node_modules/@bytecodealliance/weval": { + "version": "0.3.4", + "license": "Apache-2.0", + "dependencies": { + "@napi-rs/lzma": "^1.1.2", + "decompress": "^4.2.1", + "decompress-tar": "^4.1.1", + "decompress-unzip": "^4.0.1" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@bytecodealliance/jco": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@bytecodealliance/jco/-/jco-1.7.0.tgz", - "integrity": "sha512-DOoYzWmCjm5N3O1WE+g9VXUHXgKEJ3OatV3KhLYgaG1t9+sj+voS3PZA0JbWuA6vEkBT73Kg4yd4bJgIe1yFXA==", "license": "(Apache-2.0 WITH LLVM-exception)", "workspaces": [ "packages/preview2-shim" @@ -183,14 +176,10 @@ }, "node_modules/@bytecodealliance/preview2-shim": { "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", - "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", "license": "(Apache-2.0 WITH LLVM-exception)" }, "node_modules/@bytecodealliance/weval": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@bytecodealliance/weval/-/weval-0.3.2.tgz", - "integrity": "sha512-yH28sdq0Y0Oc29LbbWCEx2PvRFi0D7CEhWdNHPovl/L7thzlNlFWCRcOLanB0XgXQ5rygTpVVBFH0/50tWMg2w==", + "version": "0.4.1", "license": "Apache-2.0", "dependencies": { "@napi-rs/lzma": "^1.1.2", @@ -204,8 +193,6 @@ }, "node_modules/@bytecodealliance/wizer": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer/-/wizer-7.0.5.tgz", - "integrity": "sha512-xIbLzKxmUNaPwDWorcGtdxh1mcgDiXI8fe9KiDaSICKfCl9VtUKVyXIc3ix+VpwFczBbdhek+TlMiiCf+9lpOQ==", "license": "Apache-2.0", "bin": { "wizer": "wizer.js" @@ -224,8 +211,6 @@ }, "node_modules/@bytecodealliance/wizer-darwin-arm64": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-arm64/-/wizer-darwin-arm64-7.0.5.tgz", - "integrity": "sha512-Tp0SgVQR568SVPvSfyWDT00yL4ry/w9FS2qy8ZwaP0EauYyjFSZojj6mESX6x9fpYkEnQdprgfdvhw5h1hTwCQ==", "cpu": [ "arm64" ], @@ -319,20 +304,20 @@ } }, "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.0.tgz", + "integrity": "sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==", "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.1", + "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz", + "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==", "license": "MIT", "optional": true, "dependencies": { @@ -340,9 +325,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "license": "MIT", "optional": true, "dependencies": { @@ -415,8 +400,6 @@ }, "node_modules/@esbuild/darwin-arm64": { "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", "cpu": [ "arm64" ], @@ -751,8 +734,6 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -770,8 +751,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -783,8 +762,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -793,8 +770,6 @@ }, "node_modules/@eslint/config-array": { "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -808,8 +783,6 @@ }, "node_modules/@eslint/config-helpers": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -821,8 +794,6 @@ }, "node_modules/@eslint/core": { "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -834,8 +805,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -858,8 +827,6 @@ }, "node_modules/@eslint/js": { "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", "engines": { @@ -871,8 +838,6 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -881,8 +846,6 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -893,10 +856,12 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastly/wasmtime": { + "resolved": "packages/wasmtime", + "link": true + }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -905,8 +870,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -919,8 +882,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -933,8 +894,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -947,8 +906,6 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -957,8 +914,6 @@ }, "node_modules/@jakechampion/cli-testing-library": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jakechampion/cli-testing-library/-/cli-testing-library-1.0.0.tgz", - "integrity": "sha512-3DEr4qQEOyJA7bkzzVoWeACCDOLPlRH/xRD0059oJPsfvR5qprt/VHMaDdUzAHeAq0/ChIwIwZzKtHGnJIqukw==", "dev": true, "license": "MIT", "dependencies": { @@ -967,8 +922,6 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -980,8 +933,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -994,8 +945,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1004,8 +953,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1013,8 +960,6 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1022,8 +967,6 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1032,14 +975,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1048,8 +987,6 @@ }, "node_modules/@napi-rs/lzma": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma/-/lzma-1.4.1.tgz", - "integrity": "sha512-5f8K9NHjwHjZKGm3SS+7CFxXQhz8rbg2umBm/9g0xQRXBdYEI31N5z1ACuk9bmBQOusXAq9CArGfs/ZQso2rUA==", "license": "MIT", "engines": { "node": ">= 10" @@ -1112,8 +1049,6 @@ }, "node_modules/@napi-rs/lzma-darwin-arm64": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-darwin-arm64/-/lzma-darwin-arm64-1.4.1.tgz", - "integrity": "sha512-sDfOhQQFqV8lGbpgJN9DqNLBPR7QOfYjcWUv8FOGPaVP1LPJDnrc5uCpRWWEa2zIKmTiO8P9xzIl0TDzrYmghg==", "cpu": [ "arm64" ], @@ -1181,6 +1116,9 @@ "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1197,6 +1135,9 @@ "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1213,6 +1154,9 @@ "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1229,6 +1173,9 @@ "cpu": [ "riscv64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1245,6 +1192,9 @@ "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1261,6 +1211,9 @@ "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1277,6 +1230,9 @@ "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1351,21 +1307,19 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.5.tgz", - "integrity": "sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1378,8 +1332,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1388,8 +1340,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1402,15 +1352,11 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, "license": "MIT" }, "node_modules/@tsd/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-JSSdNiS0wgd8GHhBwnMAI18Y8XPhLVN+dNelPfZCXFhy9Lb3NbnFyp9JKxxr54jSUkEJPk3cidvCoHducSaRMQ==", "dev": true, "license": "MIT", "engines": { @@ -1418,9 +1364,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "license": "MIT", "optional": true, "dependencies": { @@ -1429,8 +1375,6 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1439,8 +1383,6 @@ }, "node_modules/@types/eslint": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", "dev": true, "license": "MIT", "dependencies": { @@ -1450,29 +1392,21 @@ }, "node_modules/@types/estree": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "license": "MIT", "dependencies": { @@ -1481,23 +1415,17 @@ }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -1505,29 +1433,29 @@ }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/picomatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", "dev": true, "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, "license": "MIT" }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz", - "integrity": "sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==", "dev": true, "license": "MIT", "dependencies": { @@ -1556,8 +1484,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -1566,8 +1492,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.1.tgz", - "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", "dependencies": { @@ -1591,8 +1515,6 @@ }, "node_modules/@typescript-eslint/project-service": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.1.tgz", - "integrity": "sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==", "dev": true, "license": "MIT", "dependencies": { @@ -1613,8 +1535,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz", - "integrity": "sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==", "dev": true, "license": "MIT", "dependencies": { @@ -1631,8 +1551,6 @@ }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz", - "integrity": "sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==", "dev": true, "license": "MIT", "engines": { @@ -1648,8 +1566,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz", - "integrity": "sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==", "dev": true, "license": "MIT", "dependencies": { @@ -1673,8 +1589,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.1.tgz", - "integrity": "sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==", "dev": true, "license": "MIT", "engines": { @@ -1687,8 +1601,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz", - "integrity": "sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==", "dev": true, "license": "MIT", "dependencies": { @@ -1714,9 +1626,7 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { @@ -1725,8 +1635,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { @@ -1741,8 +1649,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.1.tgz", - "integrity": "sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==", "dev": true, "license": "MIT", "dependencies": { @@ -1765,8 +1671,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz", - "integrity": "sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1783,8 +1687,6 @@ }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -1795,8 +1697,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1805,8 +1705,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -1816,9 +1714,7 @@ } }, "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "version": "6.12.6", "dev": true, "license": "MIT", "dependencies": { @@ -1834,8 +1730,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1850,8 +1744,6 @@ }, "node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -1862,8 +1754,6 @@ }, "node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -1875,14 +1765,10 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -1891,8 +1777,6 @@ }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -1901,15 +1785,10 @@ }, "node_modules/b4a": { "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", - "dev": true, "license": "Apache-2.0" }, "node_modules/bail": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, "license": "MIT", "funding": { @@ -1919,15 +1798,10 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/bare-cov": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bare-cov/-/bare-cov-1.0.1.tgz", - "integrity": "sha512-r/qCY1ZWUvD0QY04ZHgRy8qXW/x+vD+Iofg1l/OiYmTz4h46oMF7DHWl/NkgUZBKK2X6QoE4Q/w/JvJDmh5+HQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1939,10 +1813,87 @@ "v8-to-istanbul": "^9.3.0" } }, + "node_modules/bare-events": { + "version": "2.8.3", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.1", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.9.1", + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.13.1", + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.3", + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -1961,8 +1912,6 @@ }, "node_modules/binaryen": { "version": "119.0.0", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-119.0.0.tgz", - "integrity": "sha512-DTdcs8ijrj2OIEftWVPVkYsgJ8MzlYH+uSsC8156g88E7CNaG8kEfWNGSXxb3tPlzadrm6sD3mgSEKKZJu4Q3g==", "license": "Apache-2.0", "bin": { "wasm-as": "bin/wasm-as", @@ -1978,8 +1927,6 @@ }, "node_modules/bl": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", @@ -1987,10 +1934,7 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, + "version": "1.1.12", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1999,8 +1943,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -2012,8 +1954,6 @@ }, "node_modules/brittle": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/brittle/-/brittle-3.7.0.tgz", - "integrity": "sha512-WfEnI1jqwQvvds19Hu2KN3/ducDwnBe1U/URZk1gLgKd7yh4gvsN/8mViZ4NCF2gz+oZ054LIhAMWjsvmE/WBg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2031,8 +1971,6 @@ }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -2055,8 +1993,6 @@ }, "node_modules/buffer-alloc": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", @@ -2065,14 +2001,10 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "license": "MIT", "engines": { "node": "*" @@ -2080,20 +2012,14 @@ }, "node_modules/buffer-fill": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "license": "MIT" }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "license": "MIT", "engines": { "node": ">=6" @@ -2101,8 +2027,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -2111,8 +2035,6 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -2129,8 +2051,6 @@ }, "node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -2141,8 +2061,6 @@ }, "node_modules/chalk-template": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", - "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", "license": "MIT", "dependencies": { "chalk": "^5.2.0" @@ -2156,8 +2074,6 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", "funding": { @@ -2167,8 +2083,6 @@ }, "node_modules/cli-cursor": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" @@ -2182,8 +2096,6 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "license": "MIT", "engines": { "node": ">=6" @@ -2194,8 +2106,6 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -2203,14 +2113,10 @@ }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "license": "MIT" }, "node_modules/commander": { "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", "engines": { "node": ">=18" @@ -2218,28 +2124,19 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, "node_modules/cosmiconfig": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", - "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -2264,8 +2161,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -2279,9 +2174,6 @@ }, "node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2297,8 +2189,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -2307,8 +2197,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -2324,8 +2212,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -2334,8 +2220,6 @@ }, "node_modules/decode-named-character-reference": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, "license": "MIT", "dependencies": { @@ -2348,8 +2232,6 @@ }, "node_modules/decompress": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "license": "MIT", "dependencies": { "decompress-tar": "^4.0.0", @@ -2367,8 +2249,6 @@ }, "node_modules/decompress-tar": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "license": "MIT", "dependencies": { "file-type": "^5.2.0", @@ -2381,8 +2261,6 @@ }, "node_modules/decompress-tarbz2": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "license": "MIT", "dependencies": { "decompress-tar": "^4.1.0", @@ -2397,8 +2275,6 @@ }, "node_modules/decompress-tarbz2/node_modules/file-type": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "license": "MIT", "engines": { "node": ">=4" @@ -2406,8 +2282,6 @@ }, "node_modules/decompress-targz": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "license": "MIT", "dependencies": { "decompress-tar": "^4.1.1", @@ -2420,8 +2294,6 @@ }, "node_modules/decompress-unzip": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "license": "MIT", "dependencies": { "file-type": "^3.8.0", @@ -2435,8 +2307,6 @@ }, "node_modules/decompress-unzip/node_modules/file-type": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2444,15 +2314,11 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", "engines": { @@ -2461,8 +2327,6 @@ }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { @@ -2475,8 +2339,6 @@ }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "license": "MIT", "engines": { @@ -2485,8 +2347,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -2498,14 +2358,10 @@ }, "node_modules/emoji-regex": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -2513,8 +2369,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", "engines": { "node": ">=6" @@ -2522,8 +2376,6 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -2531,8 +2383,6 @@ }, "node_modules/error-stack-parser": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2541,14 +2391,10 @@ }, "node_modules/es-module-lexer": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "license": "MIT" }, "node_modules/esbuild": { "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -2587,8 +2433,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -2597,8 +2441,6 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -2610,8 +2452,6 @@ }, "node_modules/eslint": { "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", "dependencies": { @@ -2670,8 +2510,6 @@ }, "node_modules/eslint-formatter-pretty": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2693,8 +2531,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -2703,8 +2539,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -2719,8 +2553,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -2736,8 +2568,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2749,22 +2579,16 @@ }, "node_modules/eslint-formatter-pretty/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/eslint-formatter-pretty/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/eslint-formatter-pretty/node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -2776,8 +2600,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -2793,8 +2615,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -2808,8 +2628,6 @@ }, "node_modules/eslint-formatter-pretty/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -2821,15 +2639,11 @@ }, "node_modules/eslint-rule-docs": { "version": "1.1.235", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", - "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==", "dev": true, "license": "MIT" }, "node_modules/eslint-scope": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2845,8 +2659,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2858,8 +2670,6 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -2874,8 +2684,6 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -2891,8 +2699,6 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2904,15 +2710,11 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/espree": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2929,8 +2731,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2942,8 +2742,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2955,8 +2753,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2965,32 +2761,66 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, "license": "MIT" }, + "node_modules/extract-zip": { + "version": "2.0.1", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -3006,8 +2836,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -3019,22 +2847,16 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "license": "ISC", "dependencies": { @@ -3043,8 +2865,6 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "license": "MIT", "dependencies": { "pend": "~1.2.0" @@ -3052,8 +2872,6 @@ }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -3070,8 +2888,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3083,8 +2899,6 @@ }, "node_modules/file-type": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "license": "MIT", "engines": { "node": ">=4" @@ -3092,8 +2906,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -3105,8 +2917,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -3122,8 +2932,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -3136,21 +2944,15 @@ }, "node_modules/flatted": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "license": "MIT" }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", "funding": { @@ -3159,8 +2961,6 @@ }, "node_modules/get-bin-path": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/get-bin-path/-/get-bin-path-11.0.0.tgz", - "integrity": "sha512-hvX/hynZJ6sxeItamADFBZo0WmLoG/qZBlRCLRv+J+oN8USw1ZxefIGJSFPu1GGd3OHWVFJKvCCN970wmpiHzg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3172,8 +2972,6 @@ }, "node_modules/get-east-asian-width": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "license": "MIT", "engines": { "node": ">=18" @@ -3184,8 +2982,6 @@ }, "node_modules/get-stream": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "license": "MIT", "dependencies": { "object-assign": "^4.0.1", @@ -3197,8 +2993,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -3210,8 +3004,6 @@ }, "node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -3223,8 +3015,6 @@ }, "node_modules/globbie": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/globbie/-/globbie-1.0.1.tgz", - "integrity": "sha512-gcokK9aku5LU7KgbQAmtjtxmBbp0viw7qNZr6aA3p/YqSg7G1rZXA9wx2xsUSi3F3pashx0wmUs68lMXXNbSgw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3234,8 +3024,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -3255,21 +3043,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -3278,9 +3060,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3288,8 +3067,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3301,9 +3078,6 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -3314,15 +3088,11 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -3341,8 +3111,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -3351,8 +3119,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -3367,8 +3133,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -3377,8 +3141,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -3387,14 +3149,10 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/irregular-plurals": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", "dev": true, "license": "MIT", "engines": { @@ -3403,14 +3161,10 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, "node_modules/is-core-module": { "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3425,8 +3179,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -3435,8 +3187,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -3445,8 +3195,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3458,8 +3206,6 @@ }, "node_modules/is-interactive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "license": "MIT", "engines": { "node": ">=12" @@ -3470,14 +3216,10 @@ }, "node_modules/is-natural-number": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -3486,8 +3228,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -3496,8 +3236,6 @@ }, "node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3505,8 +3243,6 @@ }, "node_modules/is-unicode-supported": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "license": "MIT", "engines": { "node": ">=18" @@ -3517,21 +3253,14 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3540,8 +3269,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3555,8 +3282,6 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -3571,8 +3296,6 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3585,8 +3308,6 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { @@ -3601,8 +3322,6 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -3617,8 +3336,6 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -3634,8 +3351,6 @@ }, "node_modules/jest-diff/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3647,15 +3362,11 @@ }, "node_modules/jest-diff/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { @@ -3664,14 +3375,10 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -3682,8 +3389,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -3694,42 +3399,30 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/keycode": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.1.tgz", - "integrity": "sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -3738,8 +3431,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -3748,8 +3439,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3762,14 +3451,10 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -3784,15 +3469,11 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -3807,8 +3488,6 @@ }, "node_modules/log-symbols/node_modules/is-unicode-supported": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "license": "MIT", "engines": { "node": ">=12" @@ -3819,8 +3498,6 @@ }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", "funding": { @@ -3830,9 +3507,6 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -3841,10 +3515,36 @@ "node": ">=10" } }, + "node_modules/lzma-native": { + "version": "8.0.6", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^3.1.0", + "node-gyp-build": "^4.2.1", + "readable-stream": "^3.6.0" + }, + "bin": { + "lzmajs": "bin/lzmajs" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lzma-native/node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/magic-string": { "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -3852,8 +3552,6 @@ }, "node_modules/make-dir": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "license": "MIT", "dependencies": { "pify": "^3.0.0" @@ -3864,8 +3562,6 @@ }, "node_modules/make-dir/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "license": "MIT", "engines": { "node": ">=4" @@ -3873,8 +3569,6 @@ }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -3886,8 +3580,6 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dev": true, "license": "MIT", "dependencies": { @@ -3911,8 +3603,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "license": "MIT", "dependencies": { @@ -3926,8 +3616,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3947,8 +3635,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "license": "MIT", "dependencies": { @@ -3961,8 +3647,6 @@ }, "node_modules/meow": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3988,8 +3672,6 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4001,8 +3683,6 @@ }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -4011,8 +3691,6 @@ }, "node_modules/micromark": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, "funding": [ { @@ -4047,8 +3725,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, "funding": [ { @@ -4082,8 +3758,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, "funding": [ { @@ -4104,8 +3778,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, "funding": [ { @@ -4127,8 +3799,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, "funding": [ { @@ -4148,8 +3818,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, "funding": [ { @@ -4171,8 +3839,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, "funding": [ { @@ -4194,8 +3860,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, "funding": [ { @@ -4215,8 +3879,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, "funding": [ { @@ -4235,8 +3897,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, "funding": [ { @@ -4257,8 +3917,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, "funding": [ { @@ -4278,8 +3936,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, "funding": [ { @@ -4298,8 +3954,6 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", "dev": true, "funding": [ { @@ -4321,8 +3975,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, "funding": [ { @@ -4338,8 +3990,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, "funding": [ { @@ -4355,8 +4005,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, "funding": [ { @@ -4375,8 +4023,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, "funding": [ { @@ -4395,8 +4041,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, "funding": [ { @@ -4417,8 +4061,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, "funding": [ { @@ -4440,8 +4082,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, "funding": [ { @@ -4457,8 +4097,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, "funding": [ { @@ -4474,8 +4112,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -4488,8 +4124,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -4501,8 +4135,6 @@ }, "node_modules/mimic-function": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "license": "MIT", "engines": { "node": ">=18" @@ -4513,8 +4145,6 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -4523,9 +4153,6 @@ }, "node_modules/minimatch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -4536,8 +4163,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -4546,8 +4171,6 @@ }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -4561,8 +4184,6 @@ }, "node_modules/mkdirp": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" @@ -4576,22 +4197,28 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "license": "MIT" + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4605,9 +4232,9 @@ } }, "node_modules/npm": { - "version": "11.14.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.14.1.tgz", - "integrity": "sha512-aopNZ0eEl6LbxoFcrXLmTEPzNBNxfiQnVgR9RmJBqzm+5h5pFoOmRljpRJbsXxocBeSl7GLcx3MoDf2UlEOjZw==", + "version": "11.16.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.16.0.tgz", + "integrity": "sha512-A74XL8OxmcegZDMWPkWb5bEQppg8HdYwW3rBD2sPoS4UQHVajfaxBkqyzLeJ3wR0kZ+5xoTjItxXaF7eIXUsyw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -4685,8 +4312,8 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.5.0", - "@npmcli/config": "^10.9.0", + "@npmcli/arborist": "^9.7.0", + "@npmcli/config": "^10.10.0", "@npmcli/fs": "^5.0.0", "@npmcli/map-workspaces": "^5.0.3", "@npmcli/metavuln-calculator": "^9.0.3", @@ -4704,22 +4331,22 @@ "fs-minipass": "^3.0.3", "glob": "^13.0.6", "graceful-fs": "^4.2.11", - "hosted-git-info": "^9.0.2", + "hosted-git-info": "^9.0.3", "ini": "^6.0.0", "init-package-json": "^8.2.5", "is-cidr": "^6.0.4", "json-parse-even-better-errors": "^5.0.0", "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.1.7", - "libnpmexec": "^10.2.7", - "libnpmfund": "^7.0.21", + "libnpmdiff": "^8.1.9", + "libnpmexec": "^10.2.9", + "libnpmfund": "^7.0.23", "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.7", - "libnpmpublish": "^11.1.3", + "libnpmpack": "^9.1.9", + "libnpmpublish": "^11.2.0", "libnpmsearch": "^9.0.1", "libnpmteam": "^8.0.2", - "libnpmversion": "^8.0.3", - "make-fetch-happen": "^15.0.5", + "libnpmversion": "^8.0.4", + "make-fetch-happen": "^15.0.6", "minimatch": "^10.2.5", "minipass": "^7.1.3", "minipass-pipeline": "^1.2.4", @@ -4739,11 +4366,11 @@ "proc-log": "^6.1.0", "qrcode-terminal": "^0.12.0", "read": "^5.0.1", - "semver": "^7.7.4", + "semver": "^7.8.1", "spdx-expression-parse": "^4.0.0", "ssri": "^13.0.1", "supports-color": "^10.2.2", - "tar": "^7.5.13", + "tar": "^7.5.15", "text-table": "~0.2.0", "tiny-relative-date": "^2.0.2", "treeverse": "^3.0.0", @@ -4783,7 +4410,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "4.0.0", + "version": "4.0.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -4798,7 +4425,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.5.0", + "version": "9.7.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -4845,7 +4472,7 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.9.0", + "version": "10.10.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5025,7 +4652,7 @@ } }, "node_modules/npm/node_modules/@sigstore/core": { - "version": "3.2.0", + "version": "3.2.1", "inBundle": true, "license": "Apache-2.0", "engines": { @@ -5069,12 +4696,12 @@ } }, "node_modules/npm/node_modules/@sigstore/verify": { - "version": "3.1.0", + "version": "3.1.1", "inBundle": true, "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", + "@sigstore/core": "^3.2.1", "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { @@ -5136,7 +4763,7 @@ } }, "node_modules/npm/node_modules/bin-links": { - "version": "6.0.0", + "version": "6.0.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -5162,7 +4789,7 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "5.0.5", + "version": "5.0.6", "inBundle": true, "license": "MIT", "dependencies": { @@ -5338,7 +4965,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "9.0.2", + "version": "9.0.3", "inBundle": true, "license": "ISC", "dependencies": { @@ -5429,7 +5056,7 @@ } }, "node_modules/npm/node_modules/ip-address": { - "version": "10.1.1", + "version": "10.2.0", "inBundle": true, "license": "MIT", "engines": { @@ -5502,11 +5129,11 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.1.7", + "version": "8.1.9", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.5.0", + "@npmcli/arborist": "^9.7.0", "@npmcli/installed-package-contents": "^4.0.0", "binary-extensions": "^3.0.0", "diff": "^8.0.2", @@ -5520,12 +5147,12 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "10.2.7", + "version": "10.2.9", "inBundle": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", - "@npmcli/arborist": "^9.5.0", + "@npmcli/arborist": "^9.7.0", "@npmcli/package-json": "^7.0.0", "@npmcli/run-script": "^10.0.0", "ci-info": "^4.0.0", @@ -5542,11 +5169,11 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.21", + "version": "7.0.23", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.5.0" + "@npmcli/arborist": "^9.7.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -5565,11 +5192,11 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "9.1.7", + "version": "9.1.9", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.5.0", + "@npmcli/arborist": "^9.7.0", "@npmcli/run-script": "^10.0.0", "npm-package-arg": "^13.0.0", "pacote": "^21.0.2" @@ -5579,7 +5206,7 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "11.1.3", + "version": "11.2.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5620,7 +5247,7 @@ } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "8.0.3", + "version": "8.0.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -5635,7 +5262,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "11.3.5", + "version": "11.5.1", "inBundle": true, "license": "BlueOak-1.0.0", "engines": { @@ -5643,7 +5270,7 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "15.0.5", + "version": "15.0.6", "inBundle": true, "license": "ISC", "dependencies": { @@ -6104,7 +5731,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.7.4", + "version": "7.8.1", "inBundle": true, "license": "ISC", "bin": { @@ -6126,16 +5753,16 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "4.1.0", + "version": "4.1.1", "inBundle": true, "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", + "@sigstore/core": "^3.2.1", "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.0", - "@sigstore/tuf": "^4.0.1", - "@sigstore/verify": "^3.1.0" + "@sigstore/sign": "^4.1.1", + "@sigstore/tuf": "^4.0.2", + "@sigstore/verify": "^3.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -6151,7 +5778,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.8", + "version": "2.8.9", "inBundle": true, "license": "MIT", "dependencies": { @@ -6218,7 +5845,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "7.5.13", + "version": "7.5.15", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -6306,7 +5933,7 @@ } }, "node_modules/npm/node_modules/undici": { - "version": "6.25.0", + "version": "6.26.0", "inBundle": true, "license": "MIT", "engines": { @@ -6369,8 +5996,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6378,8 +6003,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -6387,8 +6010,6 @@ }, "node_modules/onetime": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" @@ -6402,8 +6023,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -6420,8 +6039,6 @@ }, "node_modules/ora": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.1.0.tgz", - "integrity": "sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==", "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -6443,8 +6060,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6459,8 +6074,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -6475,8 +6088,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -6485,8 +6096,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -6497,8 +6106,6 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -6515,8 +6122,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -6525,8 +6130,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -6535,15 +6138,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -6552,20 +6151,14 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { "node": ">=12" @@ -6576,8 +6169,6 @@ }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6585,8 +6176,6 @@ }, "node_modules/pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6594,8 +6183,6 @@ }, "node_modules/pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "license": "MIT", "dependencies": { "pinkie": "^2.0.0" @@ -6606,8 +6193,6 @@ }, "node_modules/plur": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "license": "MIT", "dependencies": { @@ -6622,8 +6207,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -6632,8 +6215,6 @@ }, "node_modules/prettier": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -6648,8 +6229,6 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6663,14 +6242,18 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, + "node_modules/pump": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -6679,8 +6262,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -6700,8 +6281,6 @@ }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -6710,15 +6289,11 @@ }, "node_modules/react-is": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, "node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -6733,8 +6308,6 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -6751,8 +6324,6 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -6765,8 +6336,6 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6778,8 +6347,6 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -6794,8 +6361,6 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -6807,8 +6372,6 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6817,15 +6380,11 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6837,8 +6396,6 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -6847,8 +6404,6 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6857,8 +6412,6 @@ }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -6872,14 +6425,10 @@ }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -6892,14 +6441,10 @@ }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", - "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -6910,8 +6455,6 @@ }, "node_modules/regexpu-core": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", - "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", @@ -6927,14 +6470,10 @@ }, "node_modules/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -6945,8 +6484,6 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, "license": "MIT", "dependencies": { @@ -6962,8 +6499,6 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, "license": "MIT", "dependencies": { @@ -6978,8 +6513,6 @@ }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "license": "MIT", "dependencies": { @@ -6996,8 +6529,6 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", "engines": { "node": ">=4" @@ -7005,8 +6536,6 @@ }, "node_modules/restore-cursor": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "license": "MIT", "dependencies": { "onetime": "^7.0.0", @@ -7021,8 +6550,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { @@ -7032,8 +6559,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -7056,8 +6581,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -7076,15 +6599,11 @@ }, "node_modules/same-object": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/same-object/-/same-object-1.0.2.tgz", - "integrity": "sha512-csHWhvUsLbIOHDM/nP+KHWM+BLPsIzWkFa8HbzaI0G7BqKXgx+7FJpKTGgLXyz5amfdY2OVBcmXTqYOMEk04og==", "dev": true, "license": "MIT" }, "node_modules/seek-bzip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "license": "MIT", "dependencies": { "commander": "^2.8.1" @@ -7096,15 +6615,10 @@ }, "node_modules/seek-bzip/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7115,8 +6629,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -7128,8 +6640,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -7138,8 +6648,6 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -7150,8 +6658,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -7160,8 +6666,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -7169,8 +6673,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -7179,8 +6681,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7190,16 +6690,10 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", @@ -7208,22 +6702,15 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true, "license": "CC0-1.0" }, "node_modules/stackframe": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "dev": true, "license": "MIT" }, "node_modules/stdin-discarder": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "license": "MIT", "engines": { "node": ">=18" @@ -7232,10 +6719,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/streamx": { + "version": "2.25.0", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -7243,14 +6737,10 @@ }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -7266,8 +6756,6 @@ }, "node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -7281,8 +6769,6 @@ }, "node_modules/strip-dirs": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "license": "MIT", "dependencies": { "is-natural-number": "^4.0.1" @@ -7290,8 +6776,6 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7303,8 +6787,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -7316,9 +6798,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -7329,8 +6808,6 @@ }, "node_modules/supports-hyperlinks": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "license": "MIT", "dependencies": { @@ -7343,8 +6820,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -7354,10 +6829,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tar-fs": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/tar-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "license": "MIT", "dependencies": { "bl": "^1.0.0", @@ -7372,10 +6867,15 @@ "node": ">= 0.8.0" } }, + "node_modules/teex": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/terser": { "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7392,20 +6892,21 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, + "node_modules/text-decoder": { + "version": "1.2.7", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7421,8 +6922,6 @@ }, "node_modules/tmatch": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-5.0.0.tgz", - "integrity": "sha512-Ib9OtBkpHn07tXP04SlN1SYRxFgTk6wSM2EBmjjxug4u5RXPRVLkdFJSS1PmrQidaSB8Lru9nRtViQBsbxzE5Q==", "dev": true, "license": "ISC", "engines": { @@ -7431,14 +6930,10 @@ }, "node_modules/to-buffer": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7450,8 +6945,6 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", "engines": { @@ -7460,8 +6953,6 @@ }, "node_modules/trough": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "dev": true, "license": "MIT", "funding": { @@ -7471,8 +6962,6 @@ }, "node_modules/ts-api-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -7484,8 +6973,6 @@ }, "node_modules/tsd": { "version": "0.33.0", - "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.33.0.tgz", - "integrity": "sha512-/PQtykJFVw90QICG7zyPDMIyueOXKL7jOJVoX5pILnb3Ux+7QqynOxfVvarE+K+yi7BZyOSY4r+OZNWSWRiEwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7505,16 +6992,14 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD", "optional": true }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -7526,8 +7011,6 @@ }, "node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7539,8 +7022,6 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -7553,8 +7034,6 @@ }, "node_modules/typescript-eslint": { "version": "8.48.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.1.tgz", - "integrity": "sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==", "dev": true, "license": "MIT", "dependencies": { @@ -7577,8 +7056,6 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "license": "MIT", "dependencies": { "buffer": "^5.2.1", @@ -7587,15 +7064,11 @@ }, "node_modules/undici-types": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "license": "MIT", "engines": { "node": ">=4" @@ -7603,8 +7076,6 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -7616,8 +7087,6 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", - "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "license": "MIT", "engines": { "node": ">=4" @@ -7625,8 +7094,6 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "license": "MIT", "engines": { "node": ">=4" @@ -7634,8 +7101,6 @@ }, "node_modules/unified": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, "license": "MIT", "dependencies": { @@ -7654,8 +7119,6 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { @@ -7667,8 +7130,6 @@ }, "node_modules/unist-util-is": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "license": "MIT", "dependencies": { @@ -7681,8 +7142,6 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7695,8 +7154,6 @@ }, "node_modules/unist-util-visit": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "license": "MIT", "dependencies": { @@ -7711,8 +7168,6 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "license": "MIT", "dependencies": { @@ -7726,8 +7181,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7736,14 +7189,10 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "license": "ISC", "dependencies": { @@ -7757,8 +7206,6 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7768,8 +7215,6 @@ }, "node_modules/vfile": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7783,8 +7228,6 @@ }, "node_modules/vfile-message": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "license": "MIT", "dependencies": { @@ -7798,9 +7241,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -7814,8 +7254,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -7824,14 +7262,10 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "license": "MIT", "engines": { "node": ">=0.4" @@ -7839,15 +7273,10 @@ }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, "license": "ISC" }, "node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -7856,8 +7285,6 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", @@ -7866,8 +7293,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -7879,14 +7304,26 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } + }, + "packages/wasmtime": { + "name": "@fastly/wasmtime", + "version": "43.0.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "extract-zip": "^2.0.1", + "lzma-native": "^8.0.6", + "tar-fs": "^3.1.2" + }, + "engines": { + "node": ">=18.0.0" + } } } } diff --git a/package.json b/package.json index 9b80faa8db..a155632f24 100644 --- a/package.json +++ b/package.json @@ -57,8 +57,8 @@ }, "dependencies": { "@bytecodealliance/jco": "^1.7.0", - "@bytecodealliance/weval": "^0.3.2", - "@bytecodealliance/wizer": "^7.0.5", + "@bytecodealliance/weval": "^0.4.1", + "@fastly/wasmtime": "file:packages/wasmtime", "@jridgewell/remapping": "^2.3.5", "@jridgewell/trace-mapping": "^0.3.31", "acorn": "^8.13.0", @@ -103,5 +103,6 @@ "packageManager": { "name": "npm" } - } + }, + "allowScripts": {} } diff --git a/packages/wasmtime/README.md b/packages/wasmtime/README.md new file mode 100644 index 0000000000..90927975b5 --- /dev/null +++ b/packages/wasmtime/README.md @@ -0,0 +1,16 @@ +# @fastly/wasmtime + +Provides wasmtime binaries for Node.js applications. + +## Usage + +```javascript +import wasmtime from '@fastly/wasmtime'; + +const wasmtimePath = await wasmtime(); +// wasmtimePath contains the full path to the wasmtime binary +``` + +## License + +Apache-2.0 diff --git a/packages/wasmtime/index.js b/packages/wasmtime/index.js new file mode 100644 index 0000000000..31e1e10e06 --- /dev/null +++ b/packages/wasmtime/index.js @@ -0,0 +1,10 @@ +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export default async function wasmtime() { + const binary = process.platform === 'win32' ? 'wasmtime.exe' : 'wasmtime'; + const binPath = join(__dirname, 'bin', binary); + return binPath; +} diff --git a/packages/wasmtime/package.json b/packages/wasmtime/package.json new file mode 100644 index 0000000000..9b9c257b03 --- /dev/null +++ b/packages/wasmtime/package.json @@ -0,0 +1,23 @@ +{ + "name": "@fastly/wasmtime", + "version": "43.0.0", + "description": "Wasmtime binary distribution for Node.js", + "type": "module", + "main": "index.js", + "scripts": { + "postinstall": "node scripts/postinstall.js" + }, + "files": [ + "index.js", + "scripts/postinstall.js" + ], + "engines": { + "node": ">=18.0.0" + }, + "dependencies": { + "tar-fs": "^3.1.2", + "extract-zip": "^2.0.1", + "lzma-native": "^8.0.6" + }, + "license": "Apache-2.0" +} diff --git a/packages/wasmtime/scripts/postinstall.js b/packages/wasmtime/scripts/postinstall.js new file mode 100644 index 0000000000..195ca7fb9a --- /dev/null +++ b/packages/wasmtime/scripts/postinstall.js @@ -0,0 +1,114 @@ +#!/usr/bin/env node +import { mkdir, chmod, readFile, readdir, rename, rm } from 'node:fs/promises'; +import { createReadStream, createWriteStream } from 'node:fs'; +import { Readable } from 'node:stream'; +import { pipeline } from 'node:stream/promises'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { extract } from 'tar-fs'; +import lzma from 'lzma-native'; +import extractZip from 'extract-zip'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const binDir = join(__dirname, '..', 'bin'); + +const packageJson = JSON.parse( + await readFile(join(__dirname, '..', 'package.json'), 'utf-8') +); +const WASMTIME_VERSION = `v${packageJson.version}`; + +function getPlatformInfo() { + const platform = process.platform; + const arch = process.arch; + + if (platform === 'darwin' && arch === 'x64') { + return { file: `wasmtime-${WASMTIME_VERSION}-x86_64-macos.tar.xz`, binary: 'wasmtime' }; + } + if (platform === 'darwin' && arch === 'arm64') { + return { file: `wasmtime-${WASMTIME_VERSION}-aarch64-macos.tar.xz`, binary: 'wasmtime' }; + } + if (platform === 'linux' && arch === 'x64') { + return { file: `wasmtime-${WASMTIME_VERSION}-x86_64-linux.tar.xz`, binary: 'wasmtime' }; + } + if (platform === 'linux' && arch === 'arm64') { + return { file: `wasmtime-${WASMTIME_VERSION}-aarch64-linux.tar.xz`, binary: 'wasmtime' }; + } + if (platform === 'win32' && arch === 'x64') { + return { file: `wasmtime-${WASMTIME_VERSION}-x86_64-windows.zip`, binary: 'wasmtime.exe' }; + } + + throw new Error(`Unsupported platform: ${platform}-${arch}`); +} + +async function downloadFile(url, dest) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to download: ${response.status}`); + } + const fileStream = createWriteStream(dest); + await pipeline(Readable.fromWeb(response.body), fileStream); +} + +async function extractTarXz(archivePath, destDir) { + await pipeline( + createReadStream(archivePath), + lzma.createDecompressor(), + extract(destDir, { + strip: 1, + }) + ); +} + +async function extractZipWithStrip(archivePath, destDir) { + const tempDir = join(destDir, '.extract-temp'); + + await extractZip(archivePath, { dir: tempDir }); + + const entries = await readdir(tempDir); + if (entries.length !== 1) { + throw new Error('Expected single root directory in zip file'); + } + + const rootDir = join(tempDir, entries[0]); + const contents = await readdir(rootDir); + + for (const item of contents) { + await rename(join(rootDir, item), join(destDir, item)); + } + + await rm(tempDir, { recursive: true }); +} + +async function installWasmtime() { + try { + const { file, binary } = getPlatformInfo(); + const url = `https://github.com/bytecodealliance/wasmtime/releases/download/${WASMTIME_VERSION}/${file}`; + + console.log(`Downloading wasmtime ${WASMTIME_VERSION} for ${process.platform}-${process.arch}...`); + + await mkdir(binDir, { recursive: true }); + + const archivePath = join(binDir, file); + await downloadFile(url, archivePath); + + console.log('Extracting...'); + if (file.endsWith('.tar.xz')) { + await extractTarXz(archivePath, binDir); + } else if (file.endsWith('.zip')) { + await extractZipWithStrip(archivePath, binDir); + } + + const binaryPath = join(binDir, binary); + if (process.platform !== 'win32') { + await chmod(binaryPath, 0o755); + } + + console.log('✓ wasmtime installed successfully'); + } catch (error) { + console.error('Failed to install wasmtime:', error.message); + console.error('You may need to install wasmtime manually: https://wasmtime.dev/'); + process.exit(1); + } +} + +installWasmtime(); diff --git a/runtime/StarlingMonkey b/runtime/StarlingMonkey index 3c2dbf48f5..9dda8ba7fc 160000 --- a/runtime/StarlingMonkey +++ b/runtime/StarlingMonkey @@ -1 +1 @@ -Subproject commit 3c2dbf48f5b13792d5465de4f5f817b20de43fab +Subproject commit 9dda8ba7fcda2e17c6795d402f0478cf4c1f7f37 diff --git a/runtime/fastly/CMakeLists.txt b/runtime/fastly/CMakeLists.txt index c9db01523d..7b011b55df 100644 --- a/runtime/fastly/CMakeLists.txt +++ b/runtime/fastly/CMakeLists.txt @@ -1,8 +1,5 @@ cmake_minimum_required(VERSION 3.27) -#FIXME(1243) -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/../rust-toolchain.toml" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/../StarlingMonkey") - # Apply any local patches to StarlingMonkey before it is included as a subproject file(GLOB SM_PATCHES "${CMAKE_CURRENT_SOURCE_DIR}/patches/starlingmonkey-*.patch") foreach(patch IN LISTS SM_PATCHES) @@ -61,9 +58,7 @@ add_builtin(fastly::fetch builtins/fetch/request-response.cpp builtins/fetch/request-response.cpp ../StarlingMonkey/builtins/web/fetch/headers.cpp - ../StarlingMonkey/builtins/web/fetch/fetch-utils.cpp - DEPENDENCIES - fmt) + ../StarlingMonkey/builtins/web/fetch/fetch-utils.cpp) add_builtin(fastly::cache_override SRC builtins/cache-override.cpp) @@ -82,6 +77,9 @@ add_builtin(fastly::html_rewriter ${CMAKE_CURRENT_SOURCE_DIR}/crates/rust-lol-html/include ) +# Stub implementation of parts of `AbortSignal` depended on by the `event` StarlingMonkey builtin +add_builtin(fastly::abort SRC builtins/abort.cpp) + add_compile_definitions(PUBLIC RUNTIME_VERSION=${RUNTIME_VERSION}) if(DEFINED FASTLY_GC_FREQUENCY) diff --git a/runtime/fastly/build-debug.sh b/runtime/fastly/build-debug.sh index 5968694f1a..f27ef134fb 100755 --- a/runtime/fastly/build-debug.sh +++ b/runtime/fastly/build-debug.sh @@ -32,7 +32,7 @@ while [[ $# -gt 0 ]]; do done RUNTIME_VERSION=$(npm pkg get version --json --prefix=../../ | jq -r) -HOST_API=$(realpath host-api) cmake -B build-debug -DCMAKE_BUILD_TYPE=Debug -DENABLE_BUILTIN_WEB_FETCH=0 -DENABLE_BUILTIN_WEB_FETCH_FETCH_EVENT=0 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DRUNTIME_VERSION="\"$RUNTIME_VERSION-debug\"" -DENABLE_JS_DEBUGGER=OFF "$GC_FREQUENCY" +HOST_API=$(realpath host-api) cmake -B build-debug -DCMAKE_BUILD_TYPE=Debug -DENABLE_BUILTIN_WEB_FETCH=0 -DENABLE_BUILTIN_WEB_FETCH_FETCH_EVENT=0 -DENABLE_BUILTIN_WEB_ABORT=0 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DRUNTIME_VERSION="\"$RUNTIME_VERSION-debug\"" -DENABLE_JS_DEBUGGER=OFF "$GC_FREQUENCY" cmake --build build-debug --parallel 10 if [ "$KEEP_DEBUG_INFO" -eq 0 ]; then wasm-tools strip build-debug/starling-raw.wasm/starling-raw.wasm -d ".debug_(info|loc|ranges|abbrev|line|str)" -o ../../fastly.debug.wasm diff --git a/runtime/fastly/build-release-weval.sh b/runtime/fastly/build-release-weval.sh index 0f1d1290ed..9a2eb458fb 100755 --- a/runtime/fastly/build-release-weval.sh +++ b/runtime/fastly/build-release-weval.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash cd "$(dirname "$0")" || exit 1 RUNTIME_VERSION=$(npm pkg get version --json --prefix=../../ | jq -r) -HOST_API=$(realpath host-api) cmake -B build-release-weval -DCMAKE_BUILD_TYPE=Release -DENABLE_BUILTIN_WEB_FETCH=0 -DENABLE_BUILTIN_WEB_FETCH_FETCH_EVENT=0 -DRUNTIME_VERSION="\"$RUNTIME_VERSION\"" -DWEVAL=ON -DENABLE_JS_DEBUGGER=OFF +HOST_API=$(realpath host-api) cmake -B build-release-weval -DCMAKE_BUILD_TYPE=Release -DENABLE_BUILTIN_WEB_FETCH=0 -DENABLE_BUILTIN_WEB_FETCH_FETCH_EVENT=0 -DENABLE_BUILTIN_WEB_ABORT=0 -DRUNTIME_VERSION="\"$RUNTIME_VERSION\"" -DWEVAL=ON -DENABLE_JS_DEBUGGER=OFF cmake --build build-release-weval --parallel 8 mv build-release-weval/starling-raw.wasm/starling-raw.wasm ../../fastly-weval.wasm mv build-release-weval/starling-raw.wasm/starling-ics.wevalcache ../../fastly-ics.wevalcache diff --git a/runtime/fastly/build-release.sh b/runtime/fastly/build-release.sh index 6437ce5e92..d5e9e2b607 100755 --- a/runtime/fastly/build-release.sh +++ b/runtime/fastly/build-release.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash cd "$(dirname "$0")" || exit 1 RUNTIME_VERSION=$(npm pkg get version --json --prefix=../../ | jq -r) -HOST_API=$(realpath host-api) cmake -B build-release -DCMAKE_BUILD_TYPE=Release -DENABLE_BUILTIN_WEB_FETCH=0 -DENABLE_BUILTIN_WEB_FETCH_FETCH_EVENT=0 -DRUNTIME_VERSION="\"$RUNTIME_VERSION\"" -DENABLE_JS_DEBUGGER=OFF +HOST_API=$(realpath host-api) cmake -B build-release -DCMAKE_BUILD_TYPE=Release -DENABLE_BUILTIN_WEB_FETCH=0 -DENABLE_BUILTIN_WEB_FETCH_FETCH_EVENT=0 -DENABLE_BUILTIN_WEB_ABORT=0 -DRUNTIME_VERSION="\"$RUNTIME_VERSION\"" -DENABLE_JS_DEBUGGER=OFF cmake --build build-release mv build-release/starling-raw.wasm/starling-raw.wasm ../../fastly.wasm diff --git a/runtime/fastly/builtins/abort.cpp b/runtime/fastly/builtins/abort.cpp new file mode 100644 index 0000000000..1adb681ac0 --- /dev/null +++ b/runtime/fastly/builtins/abort.cpp @@ -0,0 +1,18 @@ + +#include "../../StarlingMonkey/builtins/web/abort/abort-signal.h" + +// StarlingMonkey's event builtin depends on parts of the abort builtin, but we don't support +// aborting fetches yet, so we don't build the abort builtin at all. To get around this, we stub the +// relevant abort signal methods that the event builtin depends on. + +namespace builtins::web::abort { +bool AbortSignal::add_algorithm(JSObject *, js::UniquePtr) { return true; } + +bool AbortSignal::is_aborted(JSObject *) { return false; } + +void AbortSignal::finalize(JS::GCContext *, JSObject *) {} +void AbortSignal::trace(JSTracer *, JSObject *) {} +} // namespace builtins::web::abort +namespace fastly::abort { +bool install(api::Engine *engine) { return true; } +} // namespace fastly::abort \ No newline at end of file diff --git a/runtime/fastly/builtins/acl.cpp b/runtime/fastly/builtins/acl.cpp index 43207d5b51..7193076480 100644 --- a/runtime/fastly/builtins/acl.cpp +++ b/runtime/fastly/builtins/acl.cpp @@ -155,8 +155,7 @@ bool install(api::Engine *engine) { return false; } - RootedObject acl_obj(engine->cx(), - JS_GetConstructor(engine->cx(), BuiltinNoConstructor::proto_obj)); + RootedObject acl_obj(engine->cx(), JS_GetConstructor(engine->cx(), Acl::proto_obj)); RootedValue acl_val(engine->cx(), ObjectValue(*acl_obj)); RootedObject acl_ns(engine->cx(), JS_NewObject(engine->cx(), nullptr)); if (!JS_SetProperty(engine->cx(), acl_ns, "Acl", acl_val)) { diff --git a/runtime/fastly/builtins/backend.cpp b/runtime/fastly/builtins/backend.cpp index c3340f924c..f5b075056a 100644 --- a/runtime/fastly/builtins/backend.cpp +++ b/runtime/fastly/builtins/backend.cpp @@ -1859,8 +1859,7 @@ bool install(api::Engine *engine) { return false; } - RootedObject backend_obj(engine->cx(), - JS_GetConstructor(engine->cx(), BuiltinImpl::proto_obj)); + RootedObject backend_obj(engine->cx(), JS_GetConstructor(engine->cx(), Backend::proto_obj)); RootedValue backend_val(engine->cx(), ObjectValue(*backend_obj)); RootedObject backend_ns(engine->cx(), JS_NewObject(engine->cx(), nullptr)); if (!JS_SetProperty(engine->cx(), backend_ns, "Backend", backend_val)) { diff --git a/runtime/fastly/builtins/backend.h b/runtime/fastly/builtins/backend.h index 176f04aabe..a7d73d8c95 100644 --- a/runtime/fastly/builtins/backend.h +++ b/runtime/fastly/builtins/backend.h @@ -6,7 +6,7 @@ namespace fastly::backend { -class Backend : public builtins::FinalizableBuiltinImpl { +class Backend : public builtins::BuiltinImpl { private: public: static constexpr const char *class_name = "Backend"; diff --git a/runtime/fastly/builtins/cache-core.cpp b/runtime/fastly/builtins/cache-core.cpp index da5cfe7a9f..f5e509643f 100644 --- a/runtime/fastly/builtins/cache-core.cpp +++ b/runtime/fastly/builtins/cache-core.cpp @@ -73,7 +73,7 @@ JS::Result parseLookupOptions(JSContext *cx, Headers::HeadersList *headers_list = Headers::get_list(cx, headers); MOZ_ASSERT(headers_list); auto res = host_api::write_headers(request_handle.headers_writable(), *headers_list); - if (auto *err = res.to_err()) { + if (res.is_err()) { return JS::Result(JS::Error()); } options.request_headers = host_api::HttpReq(request_handle); @@ -362,7 +362,7 @@ JS::Result parseInsertOptions(JSContext *cx, Headers::HeadersList *headers_list = Headers::get_list(cx, headers); MOZ_ASSERT(headers_list); auto res = host_api::write_headers(request_handle.headers_writable(), *headers_list); - if (auto *err = res.to_err()) { + if (res.is_err()) { return JS::Result(JS::Error()); } options.request_headers = host_api::HttpReq(request_handle); diff --git a/runtime/fastly/builtins/cache-simple.cpp b/runtime/fastly/builtins/cache-simple.cpp index 735be8dc0f..e3adabb065 100644 --- a/runtime/fastly/builtins/cache-simple.cpp +++ b/runtime/fastly/builtins/cache-simple.cpp @@ -333,7 +333,7 @@ bool get_or_set_then_handler(JSContext *cx, JS::HandleObject lookup_state, JS::H options.surrogate_keys = key_result.inspect(); auto inserted_res = handle.transaction_insert_and_stream_back(options); - if (auto *err = inserted_res.to_err()) { + if (inserted_res.is_err()) { return false; } @@ -344,22 +344,22 @@ bool get_or_set_then_handler(JSContext *cx, JS::HandleObject lookup_state, JS::H // source_body will only be valid when the body is a Host-backed ReadableStream if (source_body.valid()) { auto res = body.append(source_body); - if (auto *error = res.to_err()) { + if (res.is_err()) { return false; } } else { auto write_res = body.write_all_back(reinterpret_cast(buf.get()), options.length); - if (auto *error = write_res.to_err()) { + if (write_res.is_err()) { return false; } auto close_res = body.close(); - if (auto *error = close_res.to_err()) { + if (close_res.is_err()) { return false; } } auto res = inserted_handle.get_body(host_api::CacheGetBodyOptions{}); - if (auto *err = res.to_err()) { + if (res.is_err()) { return false; } @@ -424,14 +424,14 @@ bool process_pending_cache_lookup(JSContext *cx, host_api::CacheHandle::Handle h // cache under the provided `key`, and then we will resolve with a SimpleCacheEntry // containing the value. auto state_res = pending_lookup.get_state(); - if (auto *err = state_res.to_err()) { + if (state_res.is_err()) { return false; } auto state = state_res.unwrap(); if (state.is_usable()) { auto body_res = pending_lookup.get_body(host_api::CacheGetBodyOptions{}); - if (auto *err = body_res.to_err()) { + if (body_res.is_err()) { return false; } diff --git a/runtime/fastly/builtins/fastly.cpp b/runtime/fastly/builtins/fastly.cpp index 54d0233fd8..6b4883fc4a 100644 --- a/runtime/fastly/builtins/fastly.cpp +++ b/runtime/fastly/builtins/fastly.cpp @@ -1028,8 +1028,9 @@ JS::Result> convertBodyInit(JSContext *cx, // before `buf` goes out of scope.) JS::AutoCheckCannotGC noGC; bool is_shared; - auto *data = JS_GetArrayBufferViewData(bodyObj, &is_shared, noGC); - std::memcpy(buf.get(), data, length); + length = JS_GetArrayBufferViewByteLength(bodyObj); + buf = JS::UniqueChars( + reinterpret_cast(JS_GetArrayBufferViewData(bodyObj, &is_shared, noGC))); MOZ_ASSERT(!is_shared); return JS::Result>(std::make_tuple(std::move(buf), length)); } else if (bodyObj && JS::IsArrayBufferObject(bodyObj)) { @@ -1037,8 +1038,7 @@ JS::Result> convertBodyInit(JSContext *cx, uint8_t *bytes; JS::GetArrayBufferLengthAndData(bodyObj, &length, &is_shared, &bytes); MOZ_ASSERT(!is_shared); - buf.reset(reinterpret_cast(JS_malloc(cx, length))); - std::memcpy(buf.get(), bytes, length); + buf.reset(reinterpret_cast(bytes)); return JS::Result>(std::make_tuple(std::move(buf), length)); } else if (bodyObj && URLSearchParams::is_instance(bodyObj)) { jsurl::SpecSlice slice = URLSearchParams::serialize(cx, bodyObj); @@ -1047,6 +1047,7 @@ JS::Result> convertBodyInit(JSContext *cx, return JS::Result>(JS::Error()); } std::memcpy(buf.get(), slice.data, slice.len); + buf = JS::UniqueChars(reinterpret_cast(const_cast(slice.data))); length = slice.len; return JS::Result>(std::make_tuple(std::move(buf), length)); } else { diff --git a/runtime/fastly/builtins/fetch/request-response.h b/runtime/fastly/builtins/fetch/request-response.h index 4ee5b61885..d003d359e7 100644 --- a/runtime/fastly/builtins/fetch/request-response.h +++ b/runtime/fastly/builtins/fetch/request-response.h @@ -225,7 +225,7 @@ class Request final : public builtins::BuiltinImpl { static JSObject *create_instance(JSContext *cx); }; -class Response final : public builtins::FinalizableBuiltinImpl { +class Response final : public builtins::BuiltinImpl { static bool waitUntil(JSContext *cx, unsigned argc, JS::Value *vp); static bool ok_get(JSContext *cx, unsigned argc, JS::Value *vp); static bool status_get(JSContext *cx, unsigned argc, JS::Value *vp); diff --git a/runtime/fastly/builtins/html-rewriter.cpp b/runtime/fastly/builtins/html-rewriter.cpp index 5c6bbddcd2..f015ca0f45 100644 --- a/runtime/fastly/builtins/html-rewriter.cpp +++ b/runtime/fastly/builtins/html-rewriter.cpp @@ -615,9 +615,8 @@ bool install(api::Engine *engine) { return false; } - RootedObject html_rewriter_obj( - engine->cx(), - JS_GetConstructor(engine->cx(), builtins::BuiltinImpl::proto_obj)); + RootedObject html_rewriter_obj(engine->cx(), + JS_GetConstructor(engine->cx(), HTMLRewritingStream::proto_obj)); RootedValue html_rewriter_val(engine->cx(), ObjectValue(*html_rewriter_obj)); RootedObject html_rewriter_ns(engine->cx(), JS_NewObject(engine->cx(), nullptr)); if (!JS_SetProperty(engine->cx(), html_rewriter_ns, "HTMLRewritingStream", html_rewriter_val)) { diff --git a/runtime/fastly/common/normalize_http_method.cpp b/runtime/fastly/common/normalize_http_method.cpp index f63d4b15d6..d56d8f0228 100644 --- a/runtime/fastly/common/normalize_http_method.cpp +++ b/runtime/fastly/common/normalize_http_method.cpp @@ -1,5 +1,6 @@ #include #include +#include #include namespace fastly::common { @@ -25,4 +26,4 @@ bool normalize_http_method(char *method, size_t length) { std::ranges::copy(*it, method); // copy the already-uppercase canonical form return true; } -} // namespace fastly::common \ No newline at end of file +} // namespace fastly::common diff --git a/runtime/fastly/host-api/fastly.h b/runtime/fastly/host-api/fastly.h index a1b9497c21..52e0c3f5a3 100644 --- a/runtime/fastly/host-api/fastly.h +++ b/runtime/fastly/host-api/fastly.h @@ -1,13 +1,12 @@ #ifndef fastly_H #define fastly_H #ifdef __cplusplus -extern "C" { -namespace fastly { -#endif - #include #include #include +extern "C" { +namespace fastly { +#endif typedef struct fastly_world_string { uint8_t *ptr; diff --git a/runtime/fastly/host-api/host_api.cpp b/runtime/fastly/host-api/host_api.cpp index dc44a62038..614ab156ad 100644 --- a/runtime/fastly/host-api/host_api.cpp +++ b/runtime/fastly/host-api/host_api.cpp @@ -112,7 +112,7 @@ void sleep_until(uint64_t time_ns, uint64_t now) { } } -size_t api::AsyncTask::select(std::vector &tasks) { +size_t api::AsyncTask::select(std::vector> &tasks) { if (tasks.size() == 0) { TRACE_CALL() } else { @@ -136,7 +136,7 @@ size_t api::AsyncTask::select(std::vector &tasks) { uint64_t soonest_deadline = 0; size_t soonest_deadline_idx = -1; for (size_t idx = 0; idx < tasks_len; ++idx) { - auto *task = tasks.at(idx); + auto task = tasks.at(idx); uint64_t deadline; if (task->id() == IMMEDIATE_TASK_HANDLE) { if (now == 0) { @@ -529,16 +529,7 @@ int32_t MonotonicClock::subscribe(const uint64_t when, const bool absolute) { return NEVER_HANDLE; } -void MonotonicClock::unsubscribe(const int32_t handle_id){TRACE_CALL()} - -// HttpHeaders and HttpHeadersReadOnly extend Resource. -// Resource provdes handle_state_ which is a HandleState -// which gets to be fully host-defined. -Resource::~Resource() { - if (handle_state_ != nullptr) { - handle_state_ = nullptr; - } -}; +void MonotonicClock::unsubscribe(const int32_t handle_id) { TRACE_CALL() } // Fastly handle state is currently just a wrapper around // an arbitrary fastly handle, along with a bit indicating @@ -558,6 +549,15 @@ class HandleState { bool valid() const { return true; } }; +// HttpHeaders and HttpHeadersReadOnly extend Resource. +// Resource provdes handle_state_ which is a HandleState +// which gets to be fully host-defined. +Resource::~Resource() { + if (handle_state_ != nullptr) { + handle_state_ = nullptr; + } +}; + HttpHeaders *HttpHeadersReadOnly::clone() { return new HttpHeaders(*this); } const std::vector forbidden_request_headers = {}; diff --git a/runtime/fastly/host-api/host_api_fastly.h b/runtime/fastly/host-api/host_api_fastly.h index cc55140424..c2c756411b 100644 --- a/runtime/fastly/host-api/host_api_fastly.h +++ b/runtime/fastly/host-api/host_api_fastly.h @@ -376,7 +376,7 @@ struct TlsVersion { uint8_t value = 0; explicit TlsVersion(uint8_t raw); - explicit TlsVersion(){}; + explicit TlsVersion() {}; uint8_t get_version() const; double get_version_number() const; diff --git a/runtime/rust-toolchain.toml b/runtime/rust-toolchain.toml index 013ea233a5..e7a439c8f2 100644 --- a/runtime/rust-toolchain.toml +++ b/runtime/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.81.0" -targets = ["wasm32-wasip1"] +channel = "1.88.0" +targets = [ "wasm32-wasip1" ] profile = "minimal" diff --git a/src/compileApplicationToWasm.ts b/src/compileApplicationToWasm.ts index 4a22afab87..492f33869f 100644 --- a/src/compileApplicationToWasm.ts +++ b/src/compileApplicationToWasm.ts @@ -7,7 +7,7 @@ import { import { mkdir, readFile, mkdtemp } from 'node:fs/promises'; import { rmSync } from 'node:fs'; import weval from '@bytecodealliance/weval'; -import wizer from '@bytecodealliance/wizer'; +import wasmtime from '@fastly/wasmtime'; import { isDirectory, isFile } from './files.js'; import { CompilerContext } from './compilerPipeline.js'; @@ -232,15 +232,18 @@ export async function compileApplicationToWasm( } process.exitCode = wevalProcess.status; } else { + const wasmtimePath = await wasmtime(); const wizerProcess = spawnSync( - `"${wizer}"`, + `"${wasmtimePath}"`, [ - '--allow-wasi', - `--wasm-bulk-memory=true`, + 'wizer', + '-S cli', + '-S inherit-env', + '-W bulk-memory', + '-W unknown-imports-trap', `--dir="${maybeWindowsPath(process.cwd())}"`, - '--inherit-env=true', '-r _start=wizer.resume', - `-o="${output}"`, + `-o "${output}"`, `"${wasmEngine}"`, ], spawnOpts, @@ -274,16 +277,19 @@ export async function compileApplicationToWasm( } process.exitCode = wevalProcess.status; } else { + const wasmtimePath = await wasmtime(); const wizerProcess = spawnSync( - `"${wizer}"`, + `"${wasmtimePath}"`, [ - '--inherit-env=true', - '--allow-wasi', + 'wizer', + '-S inherit-env', + '-S cli', + '-W bulk-memory', + '-W unknown-imports-trap', '--dir=.', `--dir=${maybeWindowsPath(dirname(input))}`, '-r _start=wizer.resume', - `--wasm-bulk-memory=true`, - `-o="${output}"`, + `-o "${output}"`, `"${wasmEngine}"`, ], spawnOpts, diff --git a/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json b/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json index 1dd7e8e410..da0b64d605 100644 --- a/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json +++ b/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json @@ -51,7 +51,7 @@ "status": "FAIL" }, "Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign])": { "status": "FAIL" @@ -63,10 +63,10 @@ "status": "FAIL" }, "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, [verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (spki, buffer(59, compressed), {name: ECDSA, namedCurve: P-256}, false, [verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, [verify])": { "status": "PASS" @@ -93,10 +93,10 @@ "status": "FAIL" }, "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (spki, buffer(59, compressed), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { "status": "PASS" @@ -108,13 +108,13 @@ "status": "FAIL" }, "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign, sign])": { - "status": "FAIL" + "status": "PASS" }, "Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign])": { "status": "PASS" @@ -177,7 +177,7 @@ "status": "FAIL" }, "Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign])": { "status": "FAIL" @@ -189,10 +189,10 @@ "status": "FAIL" }, "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, [verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (spki, buffer(72, compressed), {name: ECDSA, namedCurve: P-384}, false, [verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, [verify])": { "status": "PASS" @@ -219,10 +219,10 @@ "status": "FAIL" }, "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (spki, buffer(72, compressed), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { "status": "PASS" @@ -234,13 +234,13 @@ "status": "FAIL" }, "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign, sign])": { - "status": "FAIL" + "status": "PASS" }, "Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign])": { "status": "PASS" @@ -303,7 +303,7 @@ "status": "FAIL" }, "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign])": { "status": "FAIL" @@ -315,10 +315,10 @@ "status": "FAIL" }, "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify])": { "status": "PASS" @@ -345,10 +345,10 @@ "status": "FAIL" }, "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { "status": "PASS" @@ -360,13 +360,13 @@ "status": "FAIL" }, "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign, sign])": { - "status": "FAIL" + "status": "PASS" }, "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [])": { - "status": "FAIL" + "status": "PASS" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign])": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/WebCryptoAPI/sign_verify/ecdsa.https.any.js.json b/tests/wpt-harness/expectations/WebCryptoAPI/sign_verify/ecdsa.https.any.js.json index d896e005b8..cd5f189cb8 100644 --- a/tests/wpt-harness/expectations/WebCryptoAPI/sign_verify/ecdsa.https.any.js.json +++ b/tests/wpt-harness/expectations/WebCryptoAPI/sign_verify/ecdsa.https.any.js.json @@ -74,185 +74,185 @@ "generate wrong key step: ECDSA P-521 with SHA-512 verifying with wrong algorithm name": { "status": "FAIL" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification with altered signature after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification with altered signature after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 with altered plaintext after call": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 with altered plaintext after call": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 using privateKey to verify": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 using privateKey to verify": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 using publicKey to sign": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 using publicKey to sign": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 using publicKey to sign": { + "status": "PASS" }, "importVectorKeys step: ECDSA P-256 with SHA-1 no verify usage": { "status": "FAIL" @@ -290,472 +290,472 @@ "importVectorKeys step: ECDSA P-521 with SHA-512 no verify usage": { "status": "FAIL" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 round trip": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 round trip": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 round trip": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 round trip": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 round trip": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 round trip": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 round trip": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 round trip": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 round trip": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 round trip": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 round trip": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 round trip": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 round trip": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification failure due to altered signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to wrong hash": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification failure due to wrong hash": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to bad hash name": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification failure due to bad hash name": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to shortened signature": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification failure due to shortened signature": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered plaintext": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 verification failure due to altered plaintext": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-1 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-1 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-256 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-256 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-384 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-384 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-256 with SHA-512 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-256 with SHA-512 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-1 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-1 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-256 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-256 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-384 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-384 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-384 with SHA-512 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-384 with SHA-512 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - The signature was made using SHA-1, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-1 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-1 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - The signature was made using SHA-256, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-256 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-256 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-512 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - The signature was made using SHA-384, however verification is being done using SHA-512 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-384 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-384 - The signature is all zeroes verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - The signature was truncated by 1 byte verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - The signature was truncated by 1 byte verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-1 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-1 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-256 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-256 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-384 verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - The signature was made using SHA-512, however verification is being done using SHA-384 verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - Signature has excess padding verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - Signature has excess padding verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - The signature is empty verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - The signature is empty verification": { + "status": "PASS" }, - "importVectorKeys step: ECDSA P-521 with SHA-512 - The signature is all zeroes verification": { - "status": "FAIL" + "ECDSA P-521 with SHA-512 - The signature is all zeroes verification": { + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/url-constructor.any.js.json b/tests/wpt-harness/expectations/url/url-constructor.any.js.json index 89a3270014..454012b015 100644 --- a/tests/wpt-harness/expectations/url/url-constructor.any.js.json +++ b/tests/wpt-harness/expectations/url/url-constructor.any.js.json @@ -1461,7 +1461,7 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -1473,19 +1473,19 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: bar> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/url/url-searchparams.any.js.json b/tests/wpt-harness/expectations/url/url-searchparams.any.js.json index 89c5a505ee..49f08a3854 100644 --- a/tests/wpt-harness/expectations/url/url-searchparams.any.js.json +++ b/tests/wpt-harness/expectations/url/url-searchparams.any.js.json @@ -9,6 +9,6 @@ "status": "PASS" }, "URL.searchParams and URL.search setters, update propagation": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlencoded-parser.any.js.json b/tests/wpt-harness/expectations/url/urlencoded-parser.any.js.json index eadbcac8ab..d681035b22 100644 --- a/tests/wpt-harness/expectations/url/urlencoded-parser.any.js.json +++ b/tests/wpt-harness/expectations/url/urlencoded-parser.any.js.json @@ -12,28 +12,28 @@ "status": "PASS" }, "request.formData() with input: test=": { - "status": "FAIL" + "status": "PASS" }, "response.formData() with input: test=": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams constructed with: %EF%BB%BFtest=%EF%BB%BF": { "status": "PASS" }, "request.formData() with input: %EF%BB%BFtest=%EF%BB%BF": { - "status": "FAIL" + "status": "PASS" }, "response.formData() with input: %EF%BB%BFtest=%EF%BB%BF": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams constructed with: %EF%BF%BF=%EF%BF%BF": { "status": "PASS" }, "request.formData() with input: %EF%BF%BF=%EF%BF%BF": { - "status": "FAIL" + "status": "PASS" }, "response.formData() with input: %EF%BF%BF=%EF%BF%BF": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams constructed with: %FE%FF": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-append.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-append.any.js.json index 686daf1a41..8e8ace2bba 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-append.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-append.any.js.json @@ -9,6 +9,6 @@ "status": "PASS" }, "Append multiple": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json index ef952e0c32..996549e8c2 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json @@ -69,10 +69,10 @@ "status": "PASS" }, "Construct with 2 unpaired surrogates (no trailing)": { - "status": "FAIL" + "status": "PASS" }, "Construct with 3 unpaired surrogates (no leading)": { - "status": "FAIL" + "status": "PASS" }, "Construct with object with NULL, non-ASCII, and surrogate keys": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json index 1220ee34b0..db3619f4a0 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json @@ -18,9 +18,9 @@ "status": "PASS" }, "Two-argument delete()": { - "status": "FAIL" + "status": "PASS" }, "Two-argument delete() respects undefined as second arg": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-get.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-get.any.js.json index 8614834a16..e16e63cd19 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-get.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-get.any.js.json @@ -1,8 +1,8 @@ { "Get basics": { - "status": "FAIL" + "status": "PASS" }, "More get() basics": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json index afa3b3333f..13bb43364a 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json @@ -6,9 +6,9 @@ "status": "PASS" }, "Two-argument has()": { - "status": "FAIL" + "status": "PASS" }, "Two-argument has() respects undefined as second arg": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json index 831902de52..a1b717de57 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json @@ -1,14 +1,14 @@ { "URLSearchParams's size and deletion": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams's size and addition": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams's size when obtained from a URL": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams's size when obtained from a URL and using .search": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-stringifier.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-stringifier.any.js.json index 0dc92645ca..39b1689c68 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-stringifier.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-stringifier.any.js.json @@ -36,7 +36,7 @@ "status": "PASS" }, "URLSearchParams connected to URL": { - "status": "FAIL" + "status": "PASS" }, "URLSearchParams must not do newline normalization": { "status": "PASS" From 174fcd6d137254e3b2d73809ccb5131247f6408b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Mon, 15 Jun 2026 10:10:07 -0700 Subject: [PATCH 03/18] Revert "Add http-cache feature for null 304 body test" This reverts commit 761fac1f74307ac170a74260a188acece3d0f1a2. --- integration-tests/js-compute/fixtures/app/tests.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/integration-tests/js-compute/fixtures/app/tests.json b/integration-tests/js-compute/fixtures/app/tests.json index 4ecb19eeb7..d8116d7769 100644 --- a/integration-tests/js-compute/fixtures/app/tests.json +++ b/integration-tests/js-compute/fixtures/app/tests.json @@ -45,8 +45,7 @@ "flake": true }, "GET /cache-override/fetch/null-304-body": { - "environments": ["compute"], - "features": ["http-cache"] + "environments": ["compute"] }, "GET /secret-store/exposed-as-global": { "flake": true From e77ad28f71d6b6994556158392d4be1d7fe845aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Mon, 15 Jun 2026 10:26:44 -0700 Subject: [PATCH 04/18] fixing patches --- package-lock.json | 15 ++++++++ runtime/fastly/builtins/html-rewriter.h | 5 +-- runtime/fastly/deps/.wpt-clone.lock | 0 .../fastly/patches/starlingmonkey-reset.patch | 36 +++++++++---------- 4 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 runtime/fastly/deps/.wpt-clone.lock diff --git a/package-lock.json b/package-lock.json index 8acf5be388..1cc11655c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1798,6 +1798,7 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "license": "MIT" }, "node_modules/bare-cov": { @@ -1935,6 +1936,7 @@ }, "node_modules/brace-expansion": { "version": "1.1.12", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -2124,6 +2126,7 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { @@ -3060,6 +3063,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3078,6 +3082,7 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", + "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -3257,6 +3262,7 @@ }, "node_modules/isexe": { "version": "2.0.0", + "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { @@ -3507,6 +3513,7 @@ }, "node_modules/lru-cache": { "version": "6.0.0", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -4153,6 +4160,7 @@ }, "node_modules/minimatch": { "version": "3.1.5", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -6619,6 +6627,7 @@ }, "node_modules/semver": { "version": "7.6.3", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6690,10 +6699,12 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", + "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", @@ -6702,6 +6713,7 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.20", + "dev": true, "license": "CC0-1.0" }, "node_modules/stackframe": { @@ -6798,6 +6810,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -7241,6 +7254,7 @@ }, "node_modules/which": { "version": "2.0.2", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -7273,6 +7287,7 @@ }, "node_modules/yallist": { "version": "4.0.0", + "dev": true, "license": "ISC" }, "node_modules/yargs-parser": { diff --git a/runtime/fastly/builtins/html-rewriter.h b/runtime/fastly/builtins/html-rewriter.h index dab097b4ad..c069b69177 100644 --- a/runtime/fastly/builtins/html-rewriter.h +++ b/runtime/fastly/builtins/html-rewriter.h @@ -33,7 +33,8 @@ class Element : public builtins::BuiltinNoConstructor { static bool replaceWith(JSContext *cx, unsigned argc, JS::Value *vp); }; -class HTMLRewritingStream : public builtins::TraceableBuiltinImpl { +class HTMLRewritingStream + : public builtins::BuiltinImpl { private: static bool transformAlgorithm(JSContext *cx, unsigned argc, JS::Value *vp); static bool flushAlgorithm(JSContext *cx, unsigned argc, JS::Value *vp); @@ -60,4 +61,4 @@ class HTMLRewritingStream : public builtins::TraceableBuiltinImplcancel(engine); + } + q.tasks.clear(); @@ -43,13 +43,13 @@ index eb4909b..2412813 100644 + } // namespace core diff --git a/runtime/event_loop.h b/runtime/event_loop.h -index 40b3696..5bf1ea3 100644 +index acca516..27838bf 100644 --- a/runtime/event_loop.h +++ b/runtime/event_loop.h -@@ -47,6 +47,12 @@ public: +@@ -41,6 +41,12 @@ public: * Remove a queued async task. */ - static bool cancel_async_task(api::Engine *engine, api::AsyncTask *task); + static bool cancel_async_task(api::Engine *engine, const RefPtr& task); + + /** + * Reset the event loop state, cancelling all pending tasks and clearing interest count. @@ -57,5 +57,5 @@ index 40b3696..5bf1ea3 100644 + */ + static void reset(api::Engine *engine); }; - + } // namespace core From e9af964c210ac651665ae98d8d0a3dcd0069d380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Thu, 18 Jun 2026 10:48:22 -0700 Subject: [PATCH 05/18] npm audit fix --- package-lock.json | 84 ++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1cc11655c7..281d0959d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1626,7 +1626,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "dev": true, "license": "MIT", "dependencies": { @@ -1714,7 +1716,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -1935,7 +1939,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", "dev": true, "license": "MIT", "dependencies": { @@ -3384,7 +3390,19 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4240,9 +4258,9 @@ } }, "node_modules/npm": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.16.0.tgz", - "integrity": "sha512-A74XL8OxmcegZDMWPkWb5bEQppg8HdYwW3rBD2sPoS4UQHVajfaxBkqyzLeJ3wR0kZ+5xoTjItxXaF7eIXUsyw==", + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.17.0.tgz", + "integrity": "sha512-PurxiZexEHDTE4SSaLI3ZrnbAGiZfeyUcQcxcP5D+hfytNAze/D1IzDuInTn9XVLIbAQUnQuSPXJx02LHjLvQw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -4320,8 +4338,8 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.7.0", - "@npmcli/config": "^10.10.0", + "@npmcli/arborist": "^9.8.0", + "@npmcli/config": "^10.11.0", "@npmcli/fs": "^5.0.0", "@npmcli/map-workspaces": "^5.0.3", "@npmcli/metavuln-calculator": "^9.0.3", @@ -4345,11 +4363,11 @@ "is-cidr": "^6.0.4", "json-parse-even-better-errors": "^5.0.0", "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.1.9", - "libnpmexec": "^10.2.9", - "libnpmfund": "^7.0.23", + "libnpmdiff": "^8.1.10", + "libnpmexec": "^10.3.0", + "libnpmfund": "^7.0.24", "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.9", + "libnpmpack": "^9.1.10", "libnpmpublish": "^11.2.0", "libnpmsearch": "^9.0.1", "libnpmteam": "^8.0.2", @@ -4359,7 +4377,7 @@ "minipass": "^7.1.3", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^12.3.0", + "node-gyp": "^12.4.0", "nopt": "^9.0.0", "npm-audit-report": "^7.0.0", "npm-install-checks": "^8.0.0", @@ -4369,16 +4387,16 @@ "npm-registry-fetch": "^19.1.1", "npm-user-validate": "^4.0.0", "p-map": "^7.0.4", - "pacote": "^21.5.0", + "pacote": "^21.5.1", "parse-conflict-json": "^5.0.1", "proc-log": "^6.1.0", "qrcode-terminal": "^0.12.0", "read": "^5.0.1", - "semver": "^7.8.1", + "semver": "^7.8.4", "spdx-expression-parse": "^4.0.0", "ssri": "^13.0.1", "supports-color": "^10.2.2", - "tar": "^7.5.15", + "tar": "^7.5.16", "text-table": "~0.2.0", "tiny-relative-date": "^2.0.2", "treeverse": "^3.0.0", @@ -4433,7 +4451,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.7.0", + "version": "9.8.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -4480,7 +4498,7 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.10.0", + "version": "10.11.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5137,11 +5155,11 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.1.9", + "version": "8.1.10", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.7.0", + "@npmcli/arborist": "^9.8.0", "@npmcli/installed-package-contents": "^4.0.0", "binary-extensions": "^3.0.0", "diff": "^8.0.2", @@ -5155,12 +5173,12 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "10.2.9", + "version": "10.3.0", "inBundle": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", - "@npmcli/arborist": "^9.7.0", + "@npmcli/arborist": "^9.8.0", "@npmcli/package-json": "^7.0.0", "@npmcli/run-script": "^10.0.0", "ci-info": "^4.0.0", @@ -5177,11 +5195,11 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.23", + "version": "7.0.24", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.7.0" + "@npmcli/arborist": "^9.8.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -5200,11 +5218,11 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "9.1.9", + "version": "9.1.10", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.7.0", + "@npmcli/arborist": "^9.8.0", "@npmcli/run-script": "^10.0.0", "npm-package-arg": "^13.0.0", "pacote": "^21.0.2" @@ -5430,7 +5448,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "12.3.0", + "version": "12.4.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -5594,7 +5612,7 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "21.5.0", + "version": "21.5.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -5652,7 +5670,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "7.1.1", + "version": "7.1.4", "inBundle": true, "license": "MIT", "dependencies": { @@ -5739,7 +5757,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.8.1", + "version": "7.8.4", "inBundle": true, "license": "ISC", "bin": { @@ -5853,7 +5871,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "7.5.15", + "version": "7.5.16", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -5878,7 +5896,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.16", + "version": "0.2.17", "inBundle": true, "license": "MIT", "dependencies": { From d6a1052e22b01c410c9addfdeb459569b3ef4209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Thu, 18 Jun 2026 14:29:22 -0700 Subject: [PATCH 06/18] use 1 instead of -1 as return value from main --- runtime/fastly/handler.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/runtime/fastly/handler.cpp b/runtime/fastly/handler.cpp index b5bfc6b8b1..c7b961e0ff 100644 --- a/runtime/fastly/handler.cpp +++ b/runtime/fastly/handler.cpp @@ -119,7 +119,7 @@ int main(int argc, const char *argv[]) { auto req = host_api::Request::downstream_get(); if (req.is_err()) { HANDLE_ERROR(ENGINE->cx(), *req.to_err()); - return -1; + return 1; } const auto max_requests = Fastly::reusableSandboxOptions.max_requests().value_or(1); @@ -133,7 +133,7 @@ int main(int argc, const char *argv[]) { printf("Request handling not successful, exiting process.\n"); fflush(stdout); } - return -1; + return 1; } requests_handled++; @@ -182,18 +182,18 @@ int main(int argc, const char *argv[]) { auto next = host_api::HttpReqPromise::downstream_next(options); if (next.is_err()) { HANDLE_ERROR(ENGINE->cx(), *next.to_err()); - return -1; + return 1; } req = next.unwrap().wait(); if (req.is_err()) { HANDLE_ERROR(ENGINE->cx(), *req.to_err()); - return -1; + return 1; } if (JS_IsExceptionPending(ENGINE->cx())) { ENGINE->dump_pending_exception("running event loop"); - return -1; + return 1; } ENGINE->reset(); } From 143a8f66ef738016518162bd0a3e62e9a5dc1289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Thu, 18 Jun 2026 14:57:03 -0700 Subject: [PATCH 07/18] more debug logging --- .../js-compute/fixtures/reusable-sandboxes/src/interleave.js | 3 +++ runtime/fastly/handler.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/integration-tests/js-compute/fixtures/reusable-sandboxes/src/interleave.js b/integration-tests/js-compute/fixtures/reusable-sandboxes/src/interleave.js index e976f4f4fb..257b372b8f 100644 --- a/integration-tests/js-compute/fixtures/reusable-sandboxes/src/interleave.js +++ b/integration-tests/js-compute/fixtures/reusable-sandboxes/src/interleave.js @@ -11,6 +11,9 @@ import { CacheOverride } from 'fastly:cache-override'; import { getGeolocationForIpAddress } from 'fastly:geolocation'; import { createFanoutHandoff } from 'fastly:fanout'; import { routes } from './routes.js'; +import { enableDebugLogging } from 'fastly:experimental'; + +enableDebugLogging(true); function timeout(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/runtime/fastly/handler.cpp b/runtime/fastly/handler.cpp index c7b961e0ff..b42056479e 100644 --- a/runtime/fastly/handler.cpp +++ b/runtime/fastly/handler.cpp @@ -181,6 +181,9 @@ int main(int argc, const char *argv[]) { auto next = host_api::HttpReqPromise::downstream_next(options); if (next.is_err()) { + if (fastly::runtime::ENGINE->debug_logging_enabled()) { + printf("HOSTCALL: downstream_next() failed with code %hhu\n", *req.to_err()); + } HANDLE_ERROR(ENGINE->cx(), *next.to_err()); return 1; } From fcf48431090253af48c7c8f1f3e205dbc8bb6283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Thu, 25 Jun 2026 15:40:26 -0700 Subject: [PATCH 08/18] Fix binding to right size --- package.json | 2 +- runtime/fastly/host-api/fastly.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 05a893acb0..02687df04f 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "test:wpt": "tests/wpt-harness/build-wpt-runtime.sh && node ./tests/wpt-harness/run-wpt.mjs -vv", "test:wpt:debug": "tests/wpt-harness/build-wpt-runtime.sh --debug-build && node ./tests/wpt-harness/run-wpt.mjs -vv", "test:types": "tsd", - "clean": "rm -rf dist/ starling.wasm fastly.wasm fastly.debug.wasm fastly-weval.wasm fastly-ics.wevalcache fastly-js-compute-*.tgz", + "clean": "rm -rf dist/ starling.wasm fastly.wasm fastly.debug.wasm fastly-weval.wasm fastly-ics.wevalcache fastly-js-compute-*.tgz runtime/fastly/build-debug runtime/fastly/build-release runtime/fastly/build-release-weval", "build": "npm run clean && npm run build:cli && npm run build:debug && npm run build:release && npm run build:weval", "build:cli": "tsc", "build:release": "./runtime/fastly/build-release.sh", diff --git a/runtime/fastly/host-api/fastly.h b/runtime/fastly/host-api/fastly.h index 52e0c3f5a3..36f3a5b7f3 100644 --- a/runtime/fastly/host-api/fastly.h +++ b/runtime/fastly/host-api/fastly.h @@ -479,7 +479,7 @@ int log_write(uint32_t endpoint_handle, const char *msg, size_t msg_len, size_t // Module fastly_http_downstream typedef struct fastly_http_downstream_next_request_options { - uint32_t timeout_ms; + uint64_t timeout_ms; } fastly_http_downstream_next_request_options; #define FASTLY_HTTP_DOWNSTREAM_NEXT_REQUEST_OPTIONS_MASK_RESERVED (1 << 0) From 61d99914b99a8caa7739bceb2500f08e2aa99cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Fri, 26 Jun 2026 10:00:29 -0700 Subject: [PATCH 09/18] fix docs generation --- .../docs/backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../docs/globals/FetchEvent/FetchEvent.mdx | 67 +- .../docs/globals/Request/Request.mdx | 9 +- .../docs/globals/Response/prototype/ip.mdx | 3 +- .../docs/globals/Response/prototype/port.mdx | 3 +- documentation/docs/globals/fetch.mdx | 11 +- documentation/package-lock.json | 852 ++++++++++-------- .../ConfigStore/prototype/get.mdx | 15 +- .../dictionary/Dictionary/Dictionary.mdx | 15 +- .../dictionary/Dictionary/prototype/get.mdx | 17 +- .../globals/FetchEvent/FetchEvent.mdx | 19 +- .../ConfigStore/prototype/get.mdx | 15 +- .../dictionary/Dictionary/Dictionary.mdx | 15 +- .../dictionary/Dictionary/prototype/get.mdx | 17 +- .../globals/FetchEvent/FetchEvent.mdx | 19 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 63 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.38.4/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 63 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.39.0/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 63 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.39.1/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 63 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.39.2/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 63 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.39.3/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 63 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.40.0/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 67 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.40.1/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 67 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.41.0/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 67 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.41.2/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 67 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.42.0/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 67 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.42.1/globals/fetch.mdx | 11 +- .../backend/Backend/Backend.mdx | 16 +- .../setDefaultDynamicBackendConfig.mdx | 17 +- .../ConfigStore/prototype/get.mdx | 12 +- .../dictionary/Dictionary/prototype/get.mdx | 14 +- .../globals/FetchEvent/FetchEvent.mdx | 67 +- .../globals/Request/Request.mdx | 9 +- .../globals/Response/prototype/ip.mdx | 3 +- .../globals/Response/prototype/port.mdx | 3 +- .../version-3.43.0/globals/fetch.mdx | 11 +- 126 files changed, 1552 insertions(+), 1384 deletions(-) diff --git a/documentation/docs/backend/Backend/Backend.mdx b/documentation/docs/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/docs/backend/Backend/Backend.mdx +++ b/documentation/docs/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/docs/backend/setDefaultDynamicBackendConfig.mdx b/documentation/docs/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/docs/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/docs/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/docs/config-store/ConfigStore/prototype/get.mdx b/documentation/docs/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/docs/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/docs/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/docs/dictionary/Dictionary/prototype/get.mdx b/documentation/docs/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/docs/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/docs/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/docs/globals/FetchEvent/FetchEvent.mdx b/documentation/docs/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/docs/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/docs/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/docs/globals/Request/Request.mdx b/documentation/docs/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/docs/globals/Request/Request.mdx +++ b/documentation/docs/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/docs/globals/Response/prototype/ip.mdx b/documentation/docs/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/docs/globals/Response/prototype/ip.mdx +++ b/documentation/docs/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/docs/globals/Response/prototype/port.mdx b/documentation/docs/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/docs/globals/Response/prototype/port.mdx +++ b/documentation/docs/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/docs/globals/fetch.mdx b/documentation/docs/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/docs/globals/fetch.mdx +++ b/documentation/docs/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/package-lock.json b/documentation/package-lock.json index 94ff55b368..78d49ca602 100644 --- a/documentation/package-lock.json +++ b/documentation/package-lock.json @@ -4,6 +4,7 @@ "requires": true, "packages": { "": { + "name": "documentation", "devDependencies": { "@cmfcmf/docusaurus-search-local": "=2.0.1", "@docusaurus/core": "=3.10.1", @@ -19,25 +20,25 @@ } }, "node_modules/@algolia/abtesting": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.21.0.tgz", - "integrity": "sha512-kGvHfBa9oQCvZh0YXeguSToBD9GNJ+gzUZQ9KPTg+KSsM36obYcsKPoX0NnlJtPflHXu7RkMaIi44xs9meR6Zw==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.21.1.tgz", + "integrity": "sha512-Wia5/mNTfiU0PIUN25UMfAGGdASkkwuCS9nBAdmhqrNPY/ff7U/6MgBVdwFDPsa3sA1msutPtO50gvOzx6MOXA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/abtesting/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -45,52 +46,52 @@ } }, "node_modules/@algolia/abtesting/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/abtesting/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz", - "integrity": "sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.9.tgz", + "integrity": "sha512-4U2JKLMWlDu0CotYyUkWakDxr8AIav3QtIUXXRpfavYN29aVWfzlwJp9T0rPKEf/dO2QCPAUc0Kq1Tj1GJxo2A==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.19.8", - "@algolia/autocomplete-shared": "1.19.8" + "@algolia/autocomplete-plugin-algolia-insights": "1.19.9", + "@algolia/autocomplete-shared": "1.19.9" } }, "node_modules/@algolia/autocomplete-js": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.19.8.tgz", - "integrity": "sha512-9Sfr9Un3vObdtnj6IqzxoD9XisjFJxA9WAyVxmOkwTD9aVluyNwDeEWeGLy12xhRyILjA5C7byto159cZcdEEA==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.19.9.tgz", + "integrity": "sha512-AXtqH+BBjDrTeoqCqOom082umhMtL/RF3+DVQSkoukh/1aaFdevNAtCqxwQSUCKQFLo0YLcDsB0cBItnl1X+bg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.19.8", - "@algolia/autocomplete-preset-algolia": "1.19.8", - "@algolia/autocomplete-shared": "1.19.8", + "@algolia/autocomplete-core": "1.19.9", + "@algolia/autocomplete-preset-algolia": "1.19.9", + "@algolia/autocomplete-shared": "1.19.9", "htm": "^3.1.1", "preact": "^10.13.2" }, @@ -100,26 +101,26 @@ } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz", - "integrity": "sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.9.tgz", + "integrity": "sha512-6mExC6X7762s2SV3eJy3QOkB8bdMmnUhQ2agvGVDuzwoGyr3PquGSY/0vPQXCfiAiCaXUz1rXn+lwghgSi0l0w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.19.8" + "@algolia/autocomplete-shared": "1.19.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.8.tgz", - "integrity": "sha512-5XhJe5uXXLrt+C1MjIv1/BfGNHZyD1xkAYMVANTjdY+PXwO4o+3YIK2XGU0MxHTGryy70G6+xVO9TB7xA+3hGQ==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.9.tgz", + "integrity": "sha512-x/vKrHNy2Swp83AJ+PX0hhxhkgUqWVNV6bk440LkqQOwT8CfK4EN3M/gHIt8L9YAwbJvOgviE/Vr3g3AOyDwsA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.19.8" + "@algolia/autocomplete-shared": "1.19.9" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -127,9 +128,9 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz", - "integrity": "sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.9.tgz", + "integrity": "sha512-YosP9Uoek6y/Ur1r1qeogk4biMe/hzkyNcgMCciw0//3XpCM7VlYLSHnyt/vOnEOGhCCc0+3v+unEiH6zz+Z1A==", "dev": true, "license": "MIT", "peerDependencies": { @@ -138,9 +139,9 @@ } }, "node_modules/@algolia/autocomplete-theme-classic": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.8.tgz", - "integrity": "sha512-FYmpeOyL5Wy444ZGp1IW57fevpMSBMewN37j+0WULMTJZGobnvTgVEKjYIgtv5Ku4/RNNp54rtEx2/OU6l8GYA==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.9.tgz", + "integrity": "sha512-MWCQXWC1qbDDXE1W0fPPGRLNNRLy8zupd6pRCabBuI6gyjR0aJaah5m3S1MucJcmXRqV9/ErkMBjnw7iKGCrvA==", "dev": true, "license": "MIT" }, @@ -172,25 +173,25 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.55.0.tgz", - "integrity": "sha512-Zt2GjIm7vsaf7K23tk5JmtcVNc38G9p0C2L2Lrm06miyLE/NL2etHtHInvuLc1DjxTp7Y2nId4X/tzwo372K8Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.55.1.tgz", + "integrity": "sha512-miW8RzAtBgNiEJ9fGEhsOPgWUpekAe64YcVufqXrlykj0Jjmo5nj0a5f/HAzRVX5ZuU1GAVd7BkzFDx7q50P3A==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -198,26 +199,26 @@ } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" @@ -260,25 +261,25 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.55.0.tgz", - "integrity": "sha512-RydkKDhx0GWTYuw0ndTXHGM8hD8hgwftKE65FfnJZb5bPc9CevOqv3qNPUQiviAwkqT9hQNH31uDGeV3yZkgfA==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.55.1.tgz", + "integrity": "sha512-OVtj9uA//+pjvKQI5INnzbyLrf3ClNv3XRbWswwJ2kHIStQNHtBfHo+LofNB/WhM9xjuXlW5ANn2aMj65UGx7w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -286,26 +287,26 @@ } }, "node_modules/@algolia/client-insights/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" @@ -324,25 +325,25 @@ } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.55.0.tgz", - "integrity": "sha512-LBEJ/q+hn1nJ0aYg5IcWgLNCPjWHTahWmpHNx1qUZMho+9CyWM6LaEnhac45UHjQm/j0m374HP685VrpL133lA==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.55.1.tgz", + "integrity": "sha512-BOVrld6vdtsFmotVDMTVQfYXwrVplJ+DUvy60JFi+tkWV698q2J9NNPKEO3dr5qxtSLKQP4vHF8n+3U5PDWhOQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -350,26 +351,26 @@ } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" @@ -395,25 +396,25 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.55.0.tgz", - "integrity": "sha512-80tKsQgxXWo+jK0v4YGCHqyTEXawhAKYyr3kOdN51ElfRqUFjZNPVhZk6vRiqSqXfvrH85ytacT3cbJR6+qolA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.55.1.tgz", + "integrity": "sha512-BXZw+C+gsWL7pZvbnhJUnCXASiDLGcQxVV7h55Pyh2DmSzwdZIVccE5xc9RVD2trtrhIqk5smuODTxtaZqd0IA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -421,26 +422,26 @@ } }, "node_modules/@algolia/ingestion/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" @@ -464,25 +465,25 @@ } }, "node_modules/@algolia/monitoring": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.55.0.tgz", - "integrity": "sha512-4UjmAL8ywGW4rCfK6Qmgw3wIjbrO2wl2s4Eq56JTiN40L2t0XTv0HZkYAmr6nfeiXO0he/2crvZRX6SATSepag==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.55.1.tgz", + "integrity": "sha512-9g/ceZrZTqA62FA3588Xj0onRPjDNfu0pVQqefK0rrHp9H6Wblph/YmzGjZ2g8uqbTh0ZGIvAGCzErU8f7MHpA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -490,26 +491,26 @@ } }, "node_modules/@algolia/monitoring/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" @@ -553,22 +554,22 @@ "license": "MIT" }, "node_modules/@algolia/requester-fetch": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.55.0.tgz", - "integrity": "sha512-6IDSB5o5dkDPQ4LdOW0Yuw/qy5MdWlO2xDHgPVZgW4YDjbxvnX5PAiV7/WWZdWyVObScZZnnHpPbiqfYs/zBLg==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.55.1.tgz", + "integrity": "sha512-ukU5zeeFs44rQkzv+TRdYard+d+3lmPGs8lPZhHtWE8rfz+LlBSF6s9kP3VQ7LeOYL8Dz0u6tZfnyTrqrumbHQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -4548,25 +4549,25 @@ } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-analytics": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.55.0.tgz", - "integrity": "sha512-7BueMuWYg/KBA2EX9zsQ+3OAleEyrJcB+SV5Al/9pLjMQq5mXB/8M5HaUPqZwN812g5kLzj9j43VThlZgWq0hg==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.55.1.tgz", + "integrity": "sha512-eR3J3kB9JX6DdCvDRi3I4KPfwO6fR9HWYRXhVke2TXIoOQafMKCRAneg33JRmIrb+DnnJ/eWApJLF1O1CLPERg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-common": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz", - "integrity": "sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.1.tgz", + "integrity": "sha512-P5ak7EurwYqgAiDyb95mgA3WRR/Zu8CPMv36lWTISvL2AmlPyqQPy2nX/KEJRTcwaeTWwrk6wJV4/M93GfjOWw==", "dev": true, "license": "MIT", "engines": { @@ -4574,100 +4575,100 @@ } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-personalization": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.55.0.tgz", - "integrity": "sha512-XiS7gdFq/COWiwdWXZ8+RHuewfEo03TkGESk44zU8zTc/Z6R8fm4DNmV52swJKkeB2N9iC7NKpgpM22OOkcgTw==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.55.1.tgz", + "integrity": "sha512-oKlVFlp+qbIEe4p7E54zSiP2gEV/vDu972Ykv8VDMFwEvreS7m0YKA3a8hGGHwc7yiBUGGiR3LlwzMLfnJmy6Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-search": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.55.0.tgz", - "integrity": "sha512-2/9jUXKH4IcdU5qxH6cbDH46ZBe46G7xr+MrcHwgEXZcUfdAvUgLSH53MAWuMgxvw0G5yoqiWMifHc62Os0fiQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.55.1.tgz", + "integrity": "sha512-GAqHl9zERhC3bbBfubwUu07G3UXO06gORvOcsiTBZB3et0s3auNUbHlYdYNp4VKa3sUZqH5AcD3OKzU/KDGXjQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/recommend": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.55.0.tgz", - "integrity": "sha512-LMpJPtIkfDsHIx5Ga+baNr22ntYbY+e2wT7MSIc/FjAnu9wnBFhx1H/GfhmP/c5/IvbThDX+3ilxPRjSfCI8aA==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.55.1.tgz", + "integrity": "sha512-cZTIrGyAP+W4A6jDVwvWM/JOaoJKQkD/2a5eLUEeNdKAD45jN7BCpsMDONyhZlosLa4UwL8uiINQzj4iFy9nqg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/client-common": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/requester-browser-xhr": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz", - "integrity": "sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.1.tgz", + "integrity": "sha512-N6I3leW0UO8Y9Zv90yo2UHgYGuxZO0mjbvzNxDIJDjO0qECEF7Z9XMvSNeUWXQh/iNDA9lr8MfEy3rmZGIcclw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/requester-node-http": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz", - "integrity": "sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.1.tgz", + "integrity": "sha512-lCwXyijwPm3vbYHpBXPRomMcD6mgiptmps27gnMCf4HK+u/AOeFPBnIFh4V3l4A5SnP9VRiKBZqwGBpUH0vaTg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.55.0" + "@algolia/client-common": "5.55.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/algoliasearch": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.55.0.tgz", - "integrity": "sha512-af+rI+tUVeS9KWHPAZQHIHPOIC3StPRR6IwQu2nz1aQoTL6Gs5Ty3KsHCgbXMHOpoh9QqSjq8F3KJ8xmaCZSBA==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.55.1.tgz", + "integrity": "sha512-FyaFnnsbVPtevQwqSj/SdxE3jAsSsY0BEH8IVLf9rXxEBdAhAmT6VKCVSMWoaPIHVN1Eufh/1w8q6k8URpIkWw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/abtesting": "1.21.0", - "@algolia/client-abtesting": "5.55.0", - "@algolia/client-analytics": "5.55.0", - "@algolia/client-common": "5.55.0", - "@algolia/client-insights": "5.55.0", - "@algolia/client-personalization": "5.55.0", - "@algolia/client-query-suggestions": "5.55.0", - "@algolia/client-search": "5.55.0", - "@algolia/ingestion": "1.55.0", - "@algolia/monitoring": "1.55.0", - "@algolia/recommend": "5.55.0", - "@algolia/requester-browser-xhr": "5.55.0", - "@algolia/requester-fetch": "5.55.0", - "@algolia/requester-node-http": "5.55.0" + "@algolia/abtesting": "1.21.1", + "@algolia/client-abtesting": "5.55.1", + "@algolia/client-analytics": "5.55.1", + "@algolia/client-common": "5.55.1", + "@algolia/client-insights": "5.55.1", + "@algolia/client-personalization": "5.55.1", + "@algolia/client-query-suggestions": "5.55.1", + "@algolia/client-search": "5.55.1", + "@algolia/ingestion": "1.55.1", + "@algolia/monitoring": "1.55.1", + "@algolia/recommend": "5.55.1", + "@algolia/requester-browser-xhr": "5.55.1", + "@algolia/requester-fetch": "5.55.1", + "@algolia/requester-node-http": "5.55.1" }, "engines": { "node": ">= 14.0.0" @@ -4953,14 +4954,14 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.7.tgz", - "integrity": "sha512-GDKuYHjP7vAI1kjBo73V+STKr9XIMZknW/xirpRW/EcShX0IKSev/ALafeRfC8Q331nodrXUFu04PugPB0MAhw==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.8.tgz", + "integrity": "sha512-YzVbwggV9452VCeHgo0bjsTaUt1O7JE0XpEsPar93nn/+RAwXk0mb1Y+f5EDJ3TRtRCFe+Ck5RuojdfB4jeHVw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.7", - "@jsonjoy.com/fs-node-utils": "4.57.7", + "@jsonjoy.com/fs-node-builtins": "4.57.8", + "@jsonjoy.com/fs-node-utils": "4.57.8", "thingies": "^2.5.0" }, "engines": { @@ -4975,15 +4976,15 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.7.tgz", - "integrity": "sha512-1rWsah2nZtRbNeP+c61QcfGfVrJXBmBD0Hm7Akvv4C9MKEasXnbiOS//iH3T3HwUSSBATGrfSp0Xi8nlNhATeQ==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.8.tgz", + "integrity": "sha512-vmClyvCQMxgqz7uamDiGtRfp4MjzOznk3pcQjCxlIwJcw7TWeyr+bF30hI0x8NxdtNOGMg1pHM74VDIXOeyjuw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.7", - "@jsonjoy.com/fs-node-builtins": "4.57.7", - "@jsonjoy.com/fs-node-utils": "4.57.7", + "@jsonjoy.com/fs-core": "4.57.8", + "@jsonjoy.com/fs-node-builtins": "4.57.8", + "@jsonjoy.com/fs-node-utils": "4.57.8", "thingies": "^2.5.0" }, "engines": { @@ -4998,17 +4999,17 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.7.tgz", - "integrity": "sha512-xhnyeyEVTiIOibFvda/5n89nChMLCPKHHM2WQ+GGDf6+U/IrQBW3Qx6x+Uq1bkDbxBkybLOdIGoBtVBrE8Nngg==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.8.tgz", + "integrity": "sha512-IPEOlDYSnTDYpjQlQg2F8h+eqxKQN3sdbroI0WrteRiQZ462HzVpBo9ZZX485njz4nAacoe3fd4iDiIhk+k5Hg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.7", - "@jsonjoy.com/fs-node-builtins": "4.57.7", - "@jsonjoy.com/fs-node-utils": "4.57.7", - "@jsonjoy.com/fs-print": "4.57.7", - "@jsonjoy.com/fs-snapshot": "4.57.7", + "@jsonjoy.com/fs-core": "4.57.8", + "@jsonjoy.com/fs-node-builtins": "4.57.8", + "@jsonjoy.com/fs-node-utils": "4.57.8", + "@jsonjoy.com/fs-print": "4.57.8", + "@jsonjoy.com/fs-snapshot": "4.57.8", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -5024,9 +5025,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.7.tgz", - "integrity": "sha512-LWqfY1m+uAosjwM1RrKhMkUnP9jcq1RUczHsNO779ovm1E9v8I/pmj04eBAcoBjhC7ltcPbNFGyRJ5JqSJ7Jdg==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.8.tgz", + "integrity": "sha512-mxXSXw8zZwRVakcjLqR2I/psy4gURFSASZS10kKJ2kJw05GC2nXGroGrWVHxwgkxXgQLsFQnB74QaLzsxzdL/w==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5041,15 +5042,15 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.7.tgz", - "integrity": "sha512-9T0zC9LKcAWXDoTLRdLMoJ0seOvJ5bgDKq1tSBoQAFQpPDstQUeV1Oe7PLypdu7F2D3ddRstmwgeNUEN/VaZ4Q==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.8.tgz", + "integrity": "sha512-AWZcT/4+H+iDl4XCukbXrarvwEgOrf/prFI5/7eg4ix9FxqVsZysIDJd1Kjd+AjlCeHKHJOaRqjLd5HiGSCJEw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.57.7", - "@jsonjoy.com/fs-node-builtins": "4.57.7", - "@jsonjoy.com/fs-node-utils": "4.57.7" + "@jsonjoy.com/fs-fsa": "4.57.8", + "@jsonjoy.com/fs-node-builtins": "4.57.8", + "@jsonjoy.com/fs-node-utils": "4.57.8" }, "engines": { "node": ">=10.0" @@ -5063,13 +5064,13 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.7.tgz", - "integrity": "sha512-jjWSDOsfcog2cZnUCwX5AHmlIq6b6wx5Pz/2LAcNjJ62Rajwg89Fy7ubN+lDHew0/1reLDa9Z5urybYadhh37g==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.8.tgz", + "integrity": "sha512-E/bJ7sQAb4pu9nbeJhbULU3WnqWrswte4N9Js/oHt7aHB746S8/XBqKlcbrqIgnD3095XluovNEZuu5ONT230g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.7" + "@jsonjoy.com/fs-node-builtins": "4.57.8" }, "engines": { "node": ">=10.0" @@ -5083,13 +5084,13 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.7.tgz", - "integrity": "sha512-mFM4P4Gjq0QQHkLnXzPYPEMFrAoe6a5Myedgb6+CmL+nGd3MKvTxYPuD7N1dLIH9RBy1fLdzxd80qvuK8xrx3Q==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.8.tgz", + "integrity": "sha512-DfzhOBpmvNu5P/KSe4NNQaOnvNliTdcf0qrh/4EReErF/XUQXYkd0vZl/OiJCm/qjEEo8DWRstliw2/JNS84dA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.57.7", + "@jsonjoy.com/fs-node-utils": "4.57.8", "tree-dump": "^1.1.0" }, "engines": { @@ -5104,14 +5105,14 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.7.tgz", - "integrity": "sha512-1GS3+plfm2giB3PqokiqyydyqYTPLcCQIKSkp0TdMNRh3KVk7rqRM6U785FLlVRG7XLmkc0KWr215OY+22K3QA==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.8.tgz", + "integrity": "sha512-L+eqKaWOHLDaiMv1dh/EWQ4hA+o6xAhWSumTo3Teg7OM18jU/KE13/e8Mfal+eAZ/pSl4wIhKHcDiwapJzC8Wg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.57.7", + "@jsonjoy.com/fs-node-utils": "4.57.8", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -5994,15 +5995,15 @@ } }, "node_modules/@swc/core": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.41.tgz", - "integrity": "sha512-03nQq/082QRJJiOvp3FGbgxTGyyxMxohPTjhk/W9bD2J0tk4ukITI7goOhOO2WbaHn/lsPmo/zf8+DIXhwpgYQ==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.43.tgz", + "integrity": "sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.26" + "@swc/types": "^0.1.27" }, "engines": { "node": ">=10" @@ -6012,18 +6013,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.41", - "@swc/core-darwin-x64": "1.15.41", - "@swc/core-linux-arm-gnueabihf": "1.15.41", - "@swc/core-linux-arm64-gnu": "1.15.41", - "@swc/core-linux-arm64-musl": "1.15.41", - "@swc/core-linux-ppc64-gnu": "1.15.41", - "@swc/core-linux-s390x-gnu": "1.15.41", - "@swc/core-linux-x64-gnu": "1.15.41", - "@swc/core-linux-x64-musl": "1.15.41", - "@swc/core-win32-arm64-msvc": "1.15.41", - "@swc/core-win32-ia32-msvc": "1.15.41", - "@swc/core-win32-x64-msvc": "1.15.41" + "@swc/core-darwin-arm64": "1.15.43", + "@swc/core-darwin-x64": "1.15.43", + "@swc/core-linux-arm-gnueabihf": "1.15.43", + "@swc/core-linux-arm64-gnu": "1.15.43", + "@swc/core-linux-arm64-musl": "1.15.43", + "@swc/core-linux-ppc64-gnu": "1.15.43", + "@swc/core-linux-s390x-gnu": "1.15.43", + "@swc/core-linux-x64-gnu": "1.15.43", + "@swc/core-linux-x64-musl": "1.15.43", + "@swc/core-win32-arm64-msvc": "1.15.43", + "@swc/core-win32-ia32-msvc": "1.15.43", + "@swc/core-win32-x64-msvc": "1.15.43" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -6035,9 +6036,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.41.tgz", - "integrity": "sha512-kREh6J5paQFvP3i7f/4FbqRNOJREutVFVOkder4GVyCBQ39YmER55cW/y1NNjwrchzFqgYswFn0mMDCqbqKzrw==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.43.tgz", + "integrity": "sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==", "cpu": [ "arm64" ], @@ -6052,9 +6053,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.41.tgz", - "integrity": "sha512-N8B56ESFazZAWZyIkecADSPCwlLEinW7QLMEeotCpv4J7VXwfH+OLkmRL8o96UZ+1355fwHxDTS6/wK7yucvkA==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.43.tgz", + "integrity": "sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==", "cpu": [ "x64" ], @@ -6069,9 +6070,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.41.tgz", - "integrity": "sha512-6XrId2fyle0mS5xxON8rU84mPd2Cq1kDJRj+4BnQKTd7u+2kSA6Ww+JkOP0iTNqOqt9OXhPOEAjBHAuonWcdCg==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.43.tgz", + "integrity": "sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==", "cpu": [ "arm" ], @@ -6086,13 +6087,16 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.41.tgz", - "integrity": "sha512-ynLIarxlkVnqHn1D0fKOVht6mNU5ks6lrH+MY3kkS+XFaGGgDxFZVjWKJlkYTKm3RCvBTfA8Ng5fLufXheMRKQ==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.43.tgz", + "integrity": "sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6103,13 +6107,16 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.41.tgz", - "integrity": "sha512-dXu/5vd4gh8symyhRF+4G7gOPkjmb4pONhh7sl+6GSiW0LOKZlfu5kXmyFbTz9smOT7jgr002qY9b1nujjXt2A==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.43.tgz", + "integrity": "sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6120,13 +6127,16 @@ } }, "node_modules/@swc/core-linux-ppc64-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.41.tgz", - "integrity": "sha512-XGO6zVPXoPE0gf/XnI4jBbafNT13AYgoh6ns0JCSdOetI/kqVf0vhpz7NuNgAzZrMVCsmieqjPoTwViDgh4mOQ==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.43.tgz", + "integrity": "sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6137,13 +6147,16 @@ } }, "node_modules/@swc/core-linux-s390x-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.41.tgz", - "integrity": "sha512-0WUglRwyZtW+iMi7J3iFdrCxreZZIKf4egTwEQfIYRsqFax69A0OrFj+NIoFSE03xBT/IFRrg+S8K6f9Ky+4hA==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.43.tgz", + "integrity": "sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6154,13 +6167,16 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.41.tgz", - "integrity": "sha512-VxkuQK59c0tHm6uJZCUrS3cyA2JhGGfdU6e41SZz0x/JS+4Sm7C1mIc97In14vkZJopEt7yXA2TouCqZDSygEA==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.43.tgz", + "integrity": "sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6171,13 +6187,16 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.41.tgz", - "integrity": "sha512-/0qXIu1ZxggLuovLb22vFfKHq2AA4n6Whw5UwmVCHk4pkw7KWnPIQpMCEqUMPsNkFJig7PPp/TSYFu8ZEb2rtQ==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.43.tgz", + "integrity": "sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -6188,9 +6207,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.41.tgz", - "integrity": "sha512-Y481sMNZM6rECh9VO4+y26N1lWEDAyxnBZskUf37fl90uHE946VHfmiVQWT0uMFOhyJJFovGTRuF4W82dwewUg==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.43.tgz", + "integrity": "sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==", "cpu": [ "arm64" ], @@ -6205,9 +6224,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.41.tgz", - "integrity": "sha512-BAchBD5qeUzy3hiPSLJtaaoSm4blCLyYffOF1bGE4ETcV+OisqjUAwDQMJj++4bTpvMCDzwC+Bj3PmQyBCtscw==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.43.tgz", + "integrity": "sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==", "cpu": [ "ia32" ], @@ -6222,9 +6241,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.41", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.41.tgz", - "integrity": "sha512-WOkA+fJ/ViVBQDsSV9JC52NACTe5PhlurA6viASDZGb7HR3KS01ZG7RZ+Bg6SVQFIoq3gSbTsskQVe6EbHFAYw==", + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.43.tgz", + "integrity": "sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==", "cpu": [ "x64" ], @@ -6484,13 +6503,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.9.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.3.tgz", - "integrity": "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==", + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.1.tgz", + "integrity": "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": ">=7.24.0 <7.24.7" + "undici-types": "~8.3.0" } }, "node_modules/@types/prismjs": { @@ -6664,9 +6683,9 @@ "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", - "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", + "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", "dev": true, "license": "ISC" }, @@ -7202,9 +7221,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", - "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.2.tgz", + "integrity": "sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==", "dev": true, "funding": [ { @@ -7222,8 +7241,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.2", - "caniuse-lite": "^1.0.30001787", + "browserslist": "^4.28.4", + "caniuse-lite": "^1.0.30001799", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -7337,9 +7356,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.37", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz", - "integrity": "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==", + "version": "2.10.40", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz", + "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7432,9 +7451,9 @@ "license": "MIT" }, "node_modules/bonjour-service": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.1.tgz", - "integrity": "sha512-9KM4QMPKnaJqaja1v7gYO/+TXZGLtzPA05NmUTqDAJjcsWeVoOXKMvU9g0gfuuoYTQqJZ924hivICd5R/bCJbA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.2.tgz", + "integrity": "sha512-lMskhnsW70yWHr4PhPeh2rvaIkLSaDpp+nmtbXBZaNKTXwxL73QOkW6HhbzqTImXjevn9TreGT4GACGBCGP9nQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7497,9 +7516,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz", + "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", "dev": true, "funding": [ { @@ -7517,10 +7536,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", + "baseline-browser-mapping": "^2.10.38", + "caniuse-lite": "^1.0.30001799", + "electron-to-chromium": "^1.5.376", + "node-releases": "^2.0.48", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -9313,9 +9332,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.373", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.373.tgz", - "integrity": "sha512-G2Hym8JIf/QreuseqkDibgH8Ci8KfJzqGDKdakbhSx9UltwRBH2cBLAWU/lBX0sCdv0TlhyxQyDCnSfxgMWsjA==", + "version": "1.5.379", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.379.tgz", + "integrity": "sha512-v/qV5aV5EUA2pGilzUCq5/eyOloZAqDZBu9UMBIzgPpLlprjSR6zswsWBTv0KpqxLGUAZEwhO95ZCt7srymNVA==", "dev": true, "license": "ISC" }, @@ -9365,9 +9384,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.0.tgz", - "integrity": "sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==", + "version": "5.24.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.1.tgz", + "integrity": "sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==", "dev": true, "license": "MIT", "dependencies": { @@ -10376,13 +10395,6 @@ "tslib": "2" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -11111,9 +11123,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz", + "integrity": "sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12571,20 +12583,20 @@ } }, "node_modules/memfs": { - "version": "4.57.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.7.tgz", - "integrity": "sha512-YZPphUQZSRGk6ddPlsNuMbztrLwsbUATFNZcqKscSbSJZ4g0+Y3vSZLJ/rfnGZaB1FFhC7SrywZXev6i8lnHgg==", + "version": "4.57.8", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.8.tgz", + "integrity": "sha512-bApYhn8BLpFAnAQmFfEl/NPN+8qx5Ar3V4Qt3ek23mVwBEElzV7c6XoPkb/PCG8ZFpowCEpHcPwMFTwHS7tSMA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.7", - "@jsonjoy.com/fs-fsa": "4.57.7", - "@jsonjoy.com/fs-node": "4.57.7", - "@jsonjoy.com/fs-node-builtins": "4.57.7", - "@jsonjoy.com/fs-node-to-fsa": "4.57.7", - "@jsonjoy.com/fs-node-utils": "4.57.7", - "@jsonjoy.com/fs-print": "4.57.7", - "@jsonjoy.com/fs-snapshot": "4.57.7", + "@jsonjoy.com/fs-core": "4.57.8", + "@jsonjoy.com/fs-fsa": "4.57.8", + "@jsonjoy.com/fs-node": "4.57.8", + "@jsonjoy.com/fs-node-builtins": "4.57.8", + "@jsonjoy.com/fs-node-to-fsa": "4.57.8", + "@jsonjoy.com/fs-node-utils": "4.57.8", + "@jsonjoy.com/fs-print": "4.57.8", + "@jsonjoy.com/fs-snapshot": "4.57.8", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -14639,6 +14651,98 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimizer-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/minimizer-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/minimizer-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -14671,9 +14775,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", "dev": true, "funding": [ { @@ -14734,9 +14838,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.47", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", - "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "version": "2.0.50", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz", + "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==", "dev": true, "license": "MIT", "engines": { @@ -16901,9 +17005,9 @@ } }, "node_modules/preact": { - "version": "10.29.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.2.tgz", - "integrity": "sha512-7tNmwg/7mzzAoB/8kSg6Hl37JraAZw3Z3A0JSY7VXlZwo82Xn0G7wKbNNs2qoF4ZEEsQGTwDAroNdqKs1ofJxQ==", + "version": "10.29.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.3.tgz", + "integrity": "sha512-D9NL1GAnJZhc3RndVs4gDdxEeU9TcHgywMrhhOsnpdlvFjdbx0gAsLUnH6JEhlJH5giL7Tx5biWPUSEXE/HPzw==", "dev": true, "license": "MIT", "funding": { @@ -17078,13 +17182,14 @@ } }, "node_modules/qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -18026,9 +18131,9 @@ } }, "node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -18324,9 +18429,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", - "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", "dev": true, "license": "MIT", "engines": { @@ -19301,9 +19406,9 @@ } }, "node_modules/undici-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", - "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "dev": true, "license": "MIT" }, @@ -19869,9 +19974,9 @@ } }, "node_modules/webpack": { - "version": "5.107.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.107.2.tgz", - "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==", + "version": "5.108.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.1.tgz", + "integrity": "sha512-UUCihHQK3O7483Woa0SulNLDeAiOhHI2PN2PAPU4fVWJqbzhv04EJ8FaWtB9WWh3i8fRt28543U7VfuJTOrpgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19884,19 +19989,18 @@ "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.22.0", + "enhanced-resolve": "^5.22.2", "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "loader-runner": "^4.3.2", "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.5.0", - "watchpack": "^2.5.1", + "watchpack": "^2.5.2", "webpack-sources": "^3.5.0" }, "bin": { @@ -20010,13 +20114,17 @@ } }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-server": { diff --git a/documentation/versioned_docs/version-1.13.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-1.13.0/config-store/ConfigStore/prototype/get.mdx index ce1cef4b49..1835410d81 100644 --- a/documentation/versioned_docs/version-1.13.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-1.13.0/config-store/ConfigStore/prototype/get.mdx @@ -4,7 +4,8 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- -import {Fiddle} from '@site/src/components/fiddle'; + +import { Fiddle } from '@site/src/components/fiddle'; # ConfigStore.prototype.get @@ -13,7 +14,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -29,7 +30,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -86,12 +87,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/Dictionary.mdx b/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/Dictionary.mdx index f3c058dc54..8774eefb87 100644 --- a/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/Dictionary.mdx +++ b/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/Dictionary.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- -import {Fiddle} from '@site/src/components/fiddle'; + +import { Fiddle } from '@site/src/components/fiddle'; # `Dictionary()` :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` ::: @@ -41,7 +42,7 @@ A new `Dictionary` object. - Thrown if no Dictionary exists with the provided name - Thrown if the provided name is longer than 255 in length - Thrown if the provided name is an empty string - - Thrown if the provided name does not start with an ascii alphabetical character + - Thrown if the provided name does not start with an ascii alphabetical character - Thrown if the provided name does not contain only ascii alphanumeric, underscore, and whitespace characters ## Examples @@ -91,12 +92,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/prototype/get.mdx index 9bdc33ae2e..9ccddf34b4 100644 --- a/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-1.13.0/dictionary/Dictionary/prototype/get.mdx @@ -4,15 +4,16 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- -import {Fiddle} from '@site/src/components/fiddle'; + +import { Fiddle } from '@site/src/components/fiddle'; # Dictionary.prototype.get :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -21,7 +22,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -94,12 +95,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-1.13.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-1.13.0/globals/FetchEvent/FetchEvent.mdx index 9e5e18d906..c8bb3f3858 100644 --- a/documentation/versioned_docs/version-1.13.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-1.13.0/globals/FetchEvent/FetchEvent.mdx @@ -4,25 +4,26 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : A [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - : Information about the downstream client that made the request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : A [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-2.5.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-2.5.0/config-store/ConfigStore/prototype/get.mdx index ce1cef4b49..1835410d81 100644 --- a/documentation/versioned_docs/version-2.5.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-2.5.0/config-store/ConfigStore/prototype/get.mdx @@ -4,7 +4,8 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- -import {Fiddle} from '@site/src/components/fiddle'; + +import { Fiddle } from '@site/src/components/fiddle'; # ConfigStore.prototype.get @@ -13,7 +14,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -29,7 +30,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -86,12 +87,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/Dictionary.mdx b/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/Dictionary.mdx index f3c058dc54..8774eefb87 100644 --- a/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/Dictionary.mdx +++ b/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/Dictionary.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- -import {Fiddle} from '@site/src/components/fiddle'; + +import { Fiddle } from '@site/src/components/fiddle'; # `Dictionary()` :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` ::: @@ -41,7 +42,7 @@ A new `Dictionary` object. - Thrown if no Dictionary exists with the provided name - Thrown if the provided name is longer than 255 in length - Thrown if the provided name is an empty string - - Thrown if the provided name does not start with an ascii alphabetical character + - Thrown if the provided name does not start with an ascii alphabetical character - Thrown if the provided name does not contain only ascii alphanumeric, underscore, and whitespace characters ## Examples @@ -91,12 +92,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/prototype/get.mdx index 9bdc33ae2e..9ccddf34b4 100644 --- a/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-2.5.0/dictionary/Dictionary/prototype/get.mdx @@ -4,15 +4,16 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- -import {Fiddle} from '@site/src/components/fiddle'; + +import { Fiddle } from '@site/src/components/fiddle'; # Dictionary.prototype.get :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -21,7 +22,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -94,12 +95,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-2.5.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-2.5.0/globals/FetchEvent/FetchEvent.mdx index 9e5e18d906..c8bb3f3858 100644 --- a/documentation/versioned_docs/version-2.5.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-2.5.0/globals/FetchEvent/FetchEvent.mdx @@ -4,25 +4,26 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : A [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - : Information about the downstream client that made the request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : A [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.38.4/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.38.4/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.38.4/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.38.4/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.38.4/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.38.4/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.38.4/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.38.4/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.38.4/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.38.4/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.38.4/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.38.4/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.38.4/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.38.4/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.38.4/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.38.4/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.38.4/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.38.4/globals/FetchEvent/FetchEvent.mdx index b6f45447bf..affa64c108 100644 --- a/documentation/versioned_docs/version-3.38.4/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.38.4/globals/FetchEvent/FetchEvent.mdx @@ -4,49 +4,50 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.38.4/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.38.4/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.38.4/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.38.4/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.38.4/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.38.4/globals/fetch.mdx b/documentation/versioned_docs/version-3.38.4/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.38.4/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.38.4/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.0/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.39.0/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.39.0/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.39.0/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.0/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.39.0/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.39.0/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.39.0/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.39.0/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.39.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.0/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.39.0/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.39.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.0/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.39.0/globals/FetchEvent/FetchEvent.mdx index b6f45447bf..affa64c108 100644 --- a/documentation/versioned_docs/version-3.39.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.39.0/globals/FetchEvent/FetchEvent.mdx @@ -4,49 +4,50 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.39.0/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.39.0/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.39.0/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.39.0/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.39.0/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.0/globals/fetch.mdx b/documentation/versioned_docs/version-3.39.0/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.39.0/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.39.0/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.1/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.39.1/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.39.1/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.39.1/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.1/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.39.1/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.39.1/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.39.1/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.1/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.39.1/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.39.1/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.1/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.1/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.39.1/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.39.1/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.1/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.1/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.39.1/globals/FetchEvent/FetchEvent.mdx index b6f45447bf..affa64c108 100644 --- a/documentation/versioned_docs/version-3.39.1/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.39.1/globals/FetchEvent/FetchEvent.mdx @@ -4,49 +4,50 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.39.1/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.39.1/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.39.1/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.39.1/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.39.1/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.1/globals/fetch.mdx b/documentation/versioned_docs/version-3.39.1/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.39.1/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.39.1/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.2/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.39.2/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.39.2/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.39.2/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.2/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.39.2/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.39.2/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.39.2/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.2/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.39.2/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.39.2/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.2/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.2/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.39.2/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.39.2/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.2/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.2/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.39.2/globals/FetchEvent/FetchEvent.mdx index b6f45447bf..affa64c108 100644 --- a/documentation/versioned_docs/version-3.39.2/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.39.2/globals/FetchEvent/FetchEvent.mdx @@ -4,49 +4,50 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.39.2/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.39.2/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.39.2/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.39.2/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.39.2/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.2/globals/fetch.mdx b/documentation/versioned_docs/version-3.39.2/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.39.2/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.39.2/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.3/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.39.3/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.39.3/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.39.3/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.3/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.39.3/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.39.3/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.39.3/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.39.3/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.39.3/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.39.3/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.3/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.3/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.39.3/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.39.3/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.39.3/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.39.3/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.39.3/globals/FetchEvent/FetchEvent.mdx index b6f45447bf..affa64c108 100644 --- a/documentation/versioned_docs/version-3.39.3/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.39.3/globals/FetchEvent/FetchEvent.mdx @@ -4,49 +4,50 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.39.3/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.39.3/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.39.3/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.39.3/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.39.3/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.39.3/globals/fetch.mdx b/documentation/versioned_docs/version-3.39.3/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.39.3/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.39.3/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.40.0/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.40.0/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.40.0/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.40.0/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.40.0/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.40.0/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.40.0/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.40.0/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.40.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.40.0/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.40.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.40.0/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.40.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.40.0/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.40.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.40.0/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.40.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.40.0/globals/FetchEvent/FetchEvent.mdx index b6f45447bf..affa64c108 100644 --- a/documentation/versioned_docs/version-3.40.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.40.0/globals/FetchEvent/FetchEvent.mdx @@ -4,49 +4,50 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.40.0/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.40.0/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.40.0/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.40.0/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.40.0/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.40.0/globals/fetch.mdx b/documentation/versioned_docs/version-3.40.0/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.40.0/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.40.0/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.40.1/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.40.1/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.40.1/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.40.1/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.40.1/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.40.1/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.40.1/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.40.1/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.40.1/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.40.1/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.40.1/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.40.1/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.40.1/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.40.1/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.40.1/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.40.1/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.40.1/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.40.1/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/versioned_docs/version-3.40.1/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.40.1/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.40.1/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.40.1/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.40.1/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.40.1/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.40.1/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.40.1/globals/fetch.mdx b/documentation/versioned_docs/version-3.40.1/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.40.1/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.40.1/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.41.0/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.41.0/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.41.0/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.41.0/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.41.0/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.41.0/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.41.0/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.41.0/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.41.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.41.0/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.41.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.41.0/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.41.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.41.0/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.41.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.41.0/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.41.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.41.0/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/versioned_docs/version-3.41.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.41.0/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.41.0/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.41.0/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.41.0/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.41.0/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.41.0/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.41.0/globals/fetch.mdx b/documentation/versioned_docs/version-3.41.0/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.41.0/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.41.0/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.41.2/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.41.2/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.41.2/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.41.2/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.41.2/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.41.2/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.41.2/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.41.2/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.41.2/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.41.2/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.41.2/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.41.2/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.41.2/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.41.2/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.41.2/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.41.2/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.41.2/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.41.2/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/versioned_docs/version-3.41.2/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.41.2/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.41.2/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.41.2/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.41.2/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.41.2/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.41.2/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.41.2/globals/fetch.mdx b/documentation/versioned_docs/version-3.41.2/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.41.2/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.41.2/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.42.0/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.42.0/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.42.0/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.42.0/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.42.0/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.42.0/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.42.0/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.42.0/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.42.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.42.0/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.42.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.42.0/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.42.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.42.0/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.42.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.42.0/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.42.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.42.0/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/versioned_docs/version-3.42.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.42.0/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.42.0/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.42.0/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.42.0/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.42.0/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.42.0/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.42.0/globals/fetch.mdx b/documentation/versioned_docs/version-3.42.0/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.42.0/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.42.0/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.42.1/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.42.1/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.42.1/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.42.1/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.42.1/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.42.1/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.42.1/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.42.1/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.42.1/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.42.1/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.42.1/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.42.1/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.42.1/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.42.1/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.42.1/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.42.1/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.42.1/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.42.1/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/versioned_docs/version-3.42.1/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.42.1/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.42.1/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.42.1/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.42.1/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.42.1/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.42.1/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.42.1/globals/fetch.mdx b/documentation/versioned_docs/version-3.42.1/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.42.1/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.42.1/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.43.0/backend/Backend/Backend.mdx b/documentation/versioned_docs/version-3.43.0/backend/Backend/Backend.mdx index 7eb81130a4..6e52340125 100644 --- a/documentation/versioned_docs/version-3.43.0/backend/Backend/Backend.mdx +++ b/documentation/versioned_docs/version-3.43.0/backend/Backend/Backend.mdx @@ -9,14 +9,14 @@ pagination_prev: null The **`Backend` constructor** lets you dynamically create new [Fastly Backends](https://developer.fastly.com/reference/api/services/backend/) for your Fastly Compute service. ->**Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. +> **Note**: Dynamic backends are by default disabled at the Fastly service level. Contact [Fastly Support](https://support.fastly.com/hc/en-us/requests/new?ticket_form_id=360000269711) to request dynamic backends on Fastly Services. To disable the usage of dynamic backends, see [enforceExplicitBackends](../enforceExplicitBackends.mdx). ## Syntax ```js -new Backend(backendConfiguration) +new Backend(backendConfiguration); ``` > **Note:** `Backend()` can only be constructed with `new`. Attempting to call it without `new` throws a [`TypeError`](../../globals/TypeError/TypeError.mdx). @@ -86,7 +86,7 @@ new Backend(backendConfiguration) - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -99,7 +99,7 @@ new Backend(backendConfiguration) - Number of probes to send to the backend before it is considered dead. - `grpc` _: boolean_ _**optional**_ - **_Experimental feature_** - - When enabled, sets that this backend is to be used for gRPC traffic. + - When enabled, sets that this backend is to be used for gRPC traffic. - _Warning: When using this experimental feature, no guarantees are provided for behaviours for backends that do not provide gRPC traffic._ All optional generic options can have their defaults set via [`setDefaultDynamicBackendConfig()`](../setDefaultDynamicBackendConfig.mdx). @@ -163,13 +163,13 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Backend } from "fastly:backend"; +import { Backend } from 'fastly:backend'; async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com", + hostOverride: 'www.fastly.com', connectTimeout: 1000, firstByteTimeout: 15000, betweenBytesTimeout: 10000, @@ -178,10 +178,10 @@ async function app() { tlsMaxVersion: 1.3, }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.43.0/backend/setDefaultDynamicBackendConfig.mdx b/documentation/versioned_docs/version-3.43.0/backend/setDefaultDynamicBackendConfig.mdx index 7dc81863b0..5db8b780d0 100644 --- a/documentation/versioned_docs/version-3.43.0/backend/setDefaultDynamicBackendConfig.mdx +++ b/documentation/versioned_docs/version-3.43.0/backend/setDefaultDynamicBackendConfig.mdx @@ -58,7 +58,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration - `certificate` _: string_ - The PEM certificate string. - `key` _: SecretStoreEntry_ - - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](../fastly:secret-store/SecretStore/fromBytes.mdx). + - The `SecretStoreEntry` to use for the key, created via [`SecretStore.prototype.get`](pathname://../fastly:secret-store/SecretStore/prototype/get.mdx) or alteratively via [`SecretStore.fromBytes`](pathname://../fastly:secret-store/SecretStore/fromBytes.mdx). - `httpKeepalive` _: number_ _**optional**_ - Enable HTTP keepalive, setting the timout in milliseconds. - `tcpKeepalive` _: boolean | object_ _**optional**_ @@ -73,7 +73,7 @@ The **`setDefaultDynamicBackendConfig()`** allows setting backend configuration ## Syntax ```js -setDefaultDynamicBackendConfig(defaultConfig) +setDefaultDynamicBackendConfig(defaultConfig); ``` ### Return value @@ -84,7 +84,6 @@ None. In this example an explicit Dynamic Backend is created and supplied to the fetch request, with timeouts and TLS options provided from the default backend configuration options. - event.respondWith(app(event))); ```js /// -import { allowDynamicBackends } from "fastly:experimental"; -import { Backend } from "fastly:backend"; +import { allowDynamicBackends } from 'fastly:experimental'; +import { Backend } from 'fastly:backend'; allowDynamicBackends(true); setDefaultDynamicBackendConfig({ connectTimeout: 1000, @@ -148,20 +147,20 @@ setDefaultDynamicBackendConfig({ betweenBytesTimeout: 10_000, useSSL: true, sslMinVersion: 1.3, - sslMaxVersion: 1.3 + sslMaxVersion: 1.3, }); async function app() { // For any request, return the fastly homepage -- without defining a backend! const backend = new Backend({ name: 'fastly', target: 'fastly.com', - hostOverride: "www.fastly.com" + hostOverride: 'www.fastly.com', }); return fetch('https://www.fastly.com/', { - backend // Here we are configuring this request to use the backend from above. + backend, // Here we are configuring this request to use the backend from above. }); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` diff --git a/documentation/versioned_docs/version-3.43.0/config-store/ConfigStore/prototype/get.mdx b/documentation/versioned_docs/version-3.43.0/config-store/ConfigStore/prototype/get.mdx index efa38f84a7..4c4fa4a10f 100644 --- a/documentation/versioned_docs/version-3.43.0/config-store/ConfigStore/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.43.0/config-store/ConfigStore/prototype/get.mdx @@ -12,7 +12,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -28,7 +28,7 @@ A `string` representing the specified ConfigStore value or `null` if the key doe Get a value for a key in the config-store. If the provided key does not exist in the ConfigStore then this returns `null`. -The `get()` method requires its `this` value to be a [`ConfigStore`](../../../fastly%3Aconfig-store/ConfigStore/ConfigStore.mdx) object. +The `get()` method requires its `this` value to be a [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) object. If the `this` value does not inherit from `ConfigStore.prototype`, a [`TypeError`](../../../globals/TypeError/TypeError.mdx) is thrown. @@ -85,12 +85,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { ConfigStore } from "fastly:config-store"; -async function app (event) { +import { ConfigStore } from 'fastly:config-store'; +async function app(event) { const config = new ConfigStore('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.43.0/dictionary/Dictionary/prototype/get.mdx b/documentation/versioned_docs/version-3.43.0/dictionary/Dictionary/prototype/get.mdx index d4d166844a..73da5f6053 100644 --- a/documentation/versioned_docs/version-3.43.0/dictionary/Dictionary/prototype/get.mdx +++ b/documentation/versioned_docs/version-3.43.0/dictionary/Dictionary/prototype/get.mdx @@ -9,9 +9,9 @@ pagination_prev: null :::info -This Class is deprecated, it has been renamed to [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` +This Class is deprecated, it has been renamed to [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) and can be imported via `import { ConfigStore } from 'fastly:config-store'` -The `get()` method exists on the [`ConfigStore`](../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. +The `get()` method exists on the [`ConfigStore`](pathname://../../../fastly:config-store/ConfigStore/ConfigStore.mdx) Class. ::: @@ -20,7 +20,7 @@ The **`get()`** method returns the value associated with the provided key in the ## Syntax ```js -get(key) +get(key); ``` ### Parameters @@ -93,12 +93,12 @@ addEventListener("fetch", event => event.respondWith(app(event))); ```js /// -import { Dictionary } from "fastly:dictionary"; -async function app (event) { +import { Dictionary } from 'fastly:dictionary'; +async function app(event) { const config = new Dictionary('animals'); return new Response(config.get('cat')); } -addEventListener("fetch", event => event.respondWith(app(event))); +addEventListener('fetch', (event) => event.respondWith(app(event))); ``` - \ No newline at end of file + diff --git a/documentation/versioned_docs/version-3.43.0/globals/FetchEvent/FetchEvent.mdx b/documentation/versioned_docs/version-3.43.0/globals/FetchEvent/FetchEvent.mdx index 833dbe52d3..3828c9075e 100644 --- a/documentation/versioned_docs/version-3.43.0/globals/FetchEvent/FetchEvent.mdx +++ b/documentation/versioned_docs/version-3.43.0/globals/FetchEvent/FetchEvent.mdx @@ -4,51 +4,52 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # FetchEvent -This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. +This is the event type for `fetch` events. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the [`event.respondWith()`](./prototype/respondWith.mdx) method, which allows us to provide a response to this fetch. ## Instance properties - `FetchEvent.request` _**readonly**_ - - : The `Request` that was received by the application. + - : The `Request` that was received by the application. - `FetchEvent.client` _**readonly**_ - - : Information about the downstream client that made the request. - While these fields are always defined on Compute, they may be *null* when not available in testing environments - such as Viceroy. - - `FetchEvent.client.requestId` _**readonly**_ - - : A UUID generated by Compute for each request. - - `FetchEvent.client.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the downstream client. - - `FetchEvent.client.geo` _**readonly**_ - - : Either `null`, or a [geolocation dictionary](../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. - - `FetchEvent.client.tlsJA3MD5` _**readonly**_ - - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. - - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ - - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. - - `FetchEvent.client.tlsProtocol` _**readonly**_ - - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. - - `FetchEvent.client.tlsClientCertificate` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. - - `FetchEvent.client.tlsClientHello` _**readonly**_ - - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. - - `FetchEvent.client.tlsJA4` _**readonly**_ - - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. - - `FetchEvent.client.h2Fingerprint` _**readonly**_ - - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. - - `FetchEvent.client.ohFingerprint` _**readonly**_ - - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. + - : Information about the downstream client that made the request. + While these fields are always defined on Compute, they may be _null_ when not available in testing environments + such as Viceroy. + - `FetchEvent.client.requestId` _**readonly**_ + - : A UUID generated by Compute for each request. + - `FetchEvent.client.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the downstream client. + - `FetchEvent.client.geo` _**readonly**_ + - : Either `null`, or a [geolocation dictionary](pathname://../../fastly:geolocation/getGeolocationForIpAddress.mdx) corresponding to the IP address of the downstream client. + - `FetchEvent.client.tlsJA3MD5` _**readonly**_ + - : Either `null` or a string representation of the JA3 hash of the TLS ClientHello message. + - `FetchEvent.client.tlsCipherOpensslName` _**readonly**_ + - : Either `null` or a string representation of the cipher suite used to secure the client TLS connection. + - `FetchEvent.client.tlsProtocol` _**readonly**_ + - : Either `null` or a string representation of the TLS protocol version used to secure the client TLS connection. + - `FetchEvent.client.tlsClientCertificate` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw client certificate in the mutual TLS handshake message. It is in PEM format. Returns an empty ArrayBuffer if this is not mTLS or available. + - `FetchEvent.client.tlsClientHello` _**readonly**_ + - : Either `null` or an ArrayBuffer containing the raw bytes sent by the client in the TLS ClientHello message. + - `FetchEvent.client.tlsJA4` _**readonly**_ + - : Either `null` or a string representation of the JA4 fingerprint of the TLS ClientHello message. + - `FetchEvent.client.h2Fingerprint` _**readonly**_ + - : Either `null` or a string representation of the HTTP/2 fingerprint for HTTP/2 connections. Returns `null` for HTTP/1.1 connections. + - `FetchEvent.client.ohFingerprint` _**readonly**_ + - : Either `null` or a string representation of the Original Header fingerprint based on the order and presence of request headers. - `FetchEvent.server` _**readonly**_ - - : Information about the server receiving the request for the Fastly Compute service. - - `FetchEvent.server.address` _**readonly**_ - - : A string representation of the IPv4 or IPv6 address of the server which received the request. + - : Information about the server receiving the request for the Fastly Compute service. + - `FetchEvent.server.address` _**readonly**_ + - : A string representation of the IPv4 or IPv6 address of the server which received the request. ## Instance methods - [`FetchEvent.respondWith()`](./prototype/respondWith.mdx) - - : Provide (a promise for) a response for this request. + - : Provide (a promise for) a response for this request. - [`FetchEvent.sendEarlyHints()`](./prototype/sendEarlyHints.mdx) - - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. + - : Send a [103 Early Hints](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103) response for this request. - [`FetchEvent.waitUntil()`](./prototype/waitUntil.mdx) - - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. + - : Extends the lifetime of the event. Used to notify the host environment of tasks that extend beyond the returning of a response, such as streaming and caching. diff --git a/documentation/versioned_docs/version-3.43.0/globals/Request/Request.mdx b/documentation/versioned_docs/version-3.43.0/globals/Request/Request.mdx index 2d450ee1fb..8c7498105c 100644 --- a/documentation/versioned_docs/version-3.43.0/globals/Request/Request.mdx +++ b/documentation/versioned_docs/version-3.43.0/globals/Request/Request.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Request() The **`Request()`** constructor creates a new @@ -12,8 +13,8 @@ The **`Request()`** constructor creates a new ## Syntax ```js -new Request(input) -new Request(input, options) +new Request(input); +new Request(input, options); ``` ### Parameters @@ -39,7 +40,7 @@ new Request(input, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, a `ReadableStream` object, a [`Blob`](../../globals/Blob/Blob.mdx) object, or a [`FormData`](../../globals/FormData/FormData.mdx) object. - `backend` _**Fastly-specific**_ - - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](../../fastly:cache-override/CacheOverride/CacheOverride.mdx). + - `cacheOverride` _**Fastly-specific**_, see [`CacheOverride`](pathname://../../fastly:cache-override/CacheOverride/CacheOverride.mdx). - `cacheKey` _**Fastly-specific**_ - `manualFramingHeaders`_: boolean_ _**optional**_ _**Fastly-specific**_ - : The default value is `false`, which means that the framing headers are automatically created based on the message body. @@ -51,4 +52,4 @@ new Request(input, options) If a `Content-Length` is permitted by the specification, but the value does not match the size of the actual body, the body will either be truncated (if it is too long), or the connection will be hung up early (if it is too short). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - - Whether to automatically gzip decompress the Response or not. \ No newline at end of file + - Whether to automatically gzip decompress the Response or not. diff --git a/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/ip.mdx b/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/ip.mdx index e028e2de2f..111290b74f 100644 --- a/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/ip.mdx +++ b/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/ip.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.ip The **`ip`** getter of the `Response` interface returns the IP address associated with the request, as either an IPv6 or IPv4 string. In the case where no IP address is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with an IP, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with an IP, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/port.mdx b/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/port.mdx index 81ac10da16..c98d88fb93 100644 --- a/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/port.mdx +++ b/documentation/versioned_docs/version-3.43.0/globals/Response/prototype/port.mdx @@ -4,13 +4,14 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # Response.port The **`port`** getter of the `Response` interface returns the port associated with the request, as a number. In the case where no port is available (say the response is cached, or was manually created), `undefined` will be returned. -To ensure an origin request with a port, pass a [`CacheOverride`](../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. +To ensure an origin request with a port, pass a [`CacheOverride`](pathname://../../../fastly:cache-override/CacheOverride/CacheOverride.mdx) value. ## Value diff --git a/documentation/versioned_docs/version-3.43.0/globals/fetch.mdx b/documentation/versioned_docs/version-3.43.0/globals/fetch.mdx index 6b9170d39f..a956d0a820 100644 --- a/documentation/versioned_docs/version-3.43.0/globals/fetch.mdx +++ b/documentation/versioned_docs/version-3.43.0/globals/fetch.mdx @@ -4,6 +4,7 @@ hide_table_of_contents: false pagination_next: null pagination_prev: null --- + # fetch() The global **`fetch()`** method starts the process of fetching a @@ -41,13 +42,13 @@ Dynamic backends are a compute feature that allow services to define backends fo If the `backend` option is not provided when making `fetch()` requests, a backend will be automatically created by extracting the protocol, host, and port from the provided URL. -In addition, custom backend configuration options can then also be provided through the [`Backend()`](../fastly:backend/Backend/Backend.mdx) constructor. +In addition, custom backend configuration options can then also be provided through the [`Backend()`](pathname://../fastly:backend/Backend/Backend.mdx) constructor. ## Syntax ```js -fetch(resource) -fetch(resource, options) +fetch(resource); +fetch(resource, options); ``` ### Parameters @@ -73,10 +74,10 @@ fetch(resource, options) - `body` - : Any body that you want to add to your request: this can be an `ArrayBuffer`, a `TypedArray`, a `DataView`, a `URLSearchParams`, string object or literal, or a `ReadableStream` object. - `backend` _**Fastly-specific**_ - - *Fastly-specific* + - _Fastly-specific_ - `cacheOverride` _**Fastly-specific**_ - `cacheKey` _**Fastly-specific**_ - - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](../fastly:image-optimizer/imageOptimizerOptions.mdx). + - `imageOptimizerOptions` _**Fastly-specific**_, see [`imageOptimizerOptions`](pathname://../fastly:image-optimizer/imageOptimizerOptions.mdx). - `fastly` _**Fastly-specific**_ - `decompressGzip`_: boolean_ _**optional**_ - Whether to automatically gzip decompress the Response or not. From 0f57a9b14a96c8009675cf7e99c9b7137e190a57 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Fri, 26 Jun 2026 20:59:54 +0100 Subject: [PATCH 10/18] fix: Allow 0 ttl for responses (#1498) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Kat Marchán --- runtime/fastly/builtins/fetch/request-response.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/runtime/fastly/builtins/fetch/request-response.cpp b/runtime/fastly/builtins/fetch/request-response.cpp index e7d9228c49..eb0fb665ac 100644 --- a/runtime/fastly/builtins/fetch/request-response.cpp +++ b/runtime/fastly/builtins/fetch/request-response.cpp @@ -4284,9 +4284,9 @@ bool Response::ttl_set(JSContext *cx, unsigned argc, JS::Value *vp) { return false; } - if (std::isnan(seconds) || seconds <= 0) { + if (std::isnan(seconds) || seconds < 0) { api::throw_error(cx, api::Errors::TypeError, "Response set", "ttl", - "be a number greater than zero"); + "be a number greater than or equal to zero"); return false; } @@ -4314,9 +4314,9 @@ bool Response::staleWhileRevalidate_set(JSContext *cx, unsigned argc, JS::Value return false; } - if (std::isnan(seconds) || seconds <= 0) { + if (std::isnan(seconds) || seconds < 0) { api::throw_error(cx, api::Errors::TypeError, "Response set", "staleWhileRevalidate", - "be a number greater than zero"); + "be a number greater than or equal to zero"); return false; } @@ -4342,9 +4342,9 @@ bool Response::staleIfError_set(JSContext *cx, unsigned argc, JS::Value *vp) { return false; } - if (std::isnan(seconds) || seconds <= 0) { + if (std::isnan(seconds) || seconds < 0) { api::throw_error(cx, api::Errors::TypeError, "Response set", "staleIfError", - "be a number greater than zero"); + "be a number greater than or equal to zero"); return false; } From e85b966ec41f50fe46cf966dcd106ee564bb4e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Mon, 29 Jun 2026 12:15:17 -0700 Subject: [PATCH 11/18] fix: reset SDK state between requests (#1488) --- .../reusable-sandboxes/src/dynamic-backend.js | 18 +++++++++++++ .../fixtures/reusable-sandboxes/src/index.js | 1 + .../fixtures/reusable-sandboxes/tests.json | 13 ++++++++++ runtime/fastly/builtins/backend.cpp | 15 +++++++++++ runtime/fastly/builtins/backend.h | 3 ++- runtime/fastly/builtins/fastly.cpp | 8 ++++++ runtime/fastly/builtins/fastly.h | 1 + runtime/fastly/handler.cpp | 26 +++++++++++++++++++ 8 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 integration-tests/js-compute/fixtures/reusable-sandboxes/src/dynamic-backend.js diff --git a/integration-tests/js-compute/fixtures/reusable-sandboxes/src/dynamic-backend.js b/integration-tests/js-compute/fixtures/reusable-sandboxes/src/dynamic-backend.js new file mode 100644 index 0000000000..be4552b636 --- /dev/null +++ b/integration-tests/js-compute/fixtures/reusable-sandboxes/src/dynamic-backend.js @@ -0,0 +1,18 @@ +/// +import { Backend } from 'fastly:backend'; +import { assert } from './assertions.js'; +import { isRunningLocally, routes } from './routes.js'; + +routes.set('/backend/ephemeral', async () => { + if (isRunningLocally()) { + return; + } + assert(!Backend.exists('ephemeral')); + new Backend({ + name: 'ephemeral', + target: 'http-me.fastly.dev', + hostOverride: 'http-me.fastly.dev', + useSSL: true, + }); + assert(Backend.exists('ephemeral')); +}); diff --git a/integration-tests/js-compute/fixtures/reusable-sandboxes/src/index.js b/integration-tests/js-compute/fixtures/reusable-sandboxes/src/index.js index 00faeb4372..21dee146fd 100644 --- a/integration-tests/js-compute/fixtures/reusable-sandboxes/src/index.js +++ b/integration-tests/js-compute/fixtures/reusable-sandboxes/src/index.js @@ -9,6 +9,7 @@ import { setReusableSandboxOptions } from 'fastly:experimental'; setReusableSandboxOptions({ maxRequests: 9001 }); +import './dynamic-backend.js'; import './interleave.js'; addEventListener('fetch', (event) => { diff --git a/integration-tests/js-compute/fixtures/reusable-sandboxes/tests.json b/integration-tests/js-compute/fixtures/reusable-sandboxes/tests.json index 949059d38d..ed496cdcc0 100644 --- a/integration-tests/js-compute/fixtures/reusable-sandboxes/tests.json +++ b/integration-tests/js-compute/fixtures/reusable-sandboxes/tests.json @@ -99,5 +99,18 @@ "QuuxName": "QuuxValue" } } + }, + + "session #3, request #1: GET /backend/ephemeral": { + "downstream_request": { + "method": "GET", + "pathname": "/backend/ephemeral" + } + }, + "session #3, request #2: GET /backend/ephemeral": { + "downstream_request": { + "method": "GET", + "pathname": "/backend/ephemeral" + } } } diff --git a/runtime/fastly/builtins/backend.cpp b/runtime/fastly/builtins/backend.cpp index f5b075056a..3b6ad60d67 100644 --- a/runtime/fastly/builtins/backend.cpp +++ b/runtime/fastly/builtins/backend.cpp @@ -1808,6 +1808,21 @@ void Backend::finalize(JS::GCContext *gcx, JSObject *obj) { free(backend); } +bool Backend::restore_global_state(JSContext *cx) { + JS::Rooted props(cx, cx); + if (!JS_Enumerate(cx, Backend::backends, &props)) { + return false; + } + JS::RootedValue backend(cx); + for (uint32_t i = 0, len = props.length(); i < len; i++) { + if (!JS_GetPropertyById(cx, Backend::backends, props[i], &backend)) { + return false; + } + JS_DeletePropertyById(cx, Backend::backends, props[i]); + } + return true; +} + bool set_default_backend_config(JSContext *cx, unsigned argc, JS::Value *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); if (!args.requireAtLeast(cx, "setDefaultDynamicBackendConfiguration", 1)) { diff --git a/runtime/fastly/builtins/backend.h b/runtime/fastly/builtins/backend.h index a7d73d8c95..1027fb69a8 100644 --- a/runtime/fastly/builtins/backend.h +++ b/runtime/fastly/builtins/backend.h @@ -1,13 +1,13 @@ #ifndef FASTLY_BACKEND_H #define FASTLY_BACKEND_H +#include "../host-api/host_api_fastly.h" #include "builtin.h" #include "extension-api.h" namespace fastly::backend { class Backend : public builtins::BuiltinImpl { -private: public: static constexpr const char *class_name = "Backend"; static const int ctor_length = 1; @@ -23,6 +23,7 @@ class Backend : public builtins::BuiltinImpl { static bool allowDynamicBackends_set(JSContext *cx, unsigned argc, JS::Value *vp); static bool inspect(JSContext *cx, unsigned argc, JS::Value *vp); static bool setReusableSandboxOptions(JSContext *cx, unsigned argc, JS::Value *vp); + static bool restore_builtin_state(JSContext *cx); }; JS::Result> convertBodyInit(JSContext *cx, diff --git a/runtime/fastly/handler.cpp b/runtime/fastly/handler.cpp index b42056479e..5b36961888 100644 --- a/runtime/fastly/handler.cpp +++ b/runtime/fastly/handler.cpp @@ -1,4 +1,5 @@ #include "../StarlingMonkey/builtins/web/performance.h" +#include "./builtins/backend.h" #include "./builtins/fastly.h" #include "./builtins/fetch-event.h" #include "./host-api/fastly.h" @@ -17,12 +18,32 @@ namespace fastly::runtime { api::Engine *ENGINE; +bool restore_builtin_state() { + JSContext *cx(ENGINE->cx()); + if (!::fastly::backend::Backend::restore_global_state(cx)) { + if (ENGINE->debug_logging_enabled()) { + fprintf(stderr, + "Warning: Failed to restore Backend state processing next request. Exiting.\n"); + } + return false; + } + if (!fastly::Fastly::restore_builtin_state(cx)) { + if (ENGINE->debug_logging_enabled()) { + fprintf(stderr, + "Warning: Failed to restore Backend state processing next request. Exiting.\n"); + } + return false; + } + return true; +} + // Install corresponds to Wizer time, so we configure the engine here bool install(api::Engine *engine) { #if defined(JS_GC_ZEAL) && defined(FASTLY_GC_FREQUENCY) JS::SetGCZeal(engine->cx(), 2, FASTLY_GC_FREQUENCY); #endif ENGINE = engine; + return true; } @@ -100,6 +121,11 @@ bool handle_incoming(host_api::Request req) { printf("Done. Total request processing time: %fms. Total compute time: %fms\n", diff / 1000, total_compute / 1000); } + + if (!restore_builtin_state()) { + return false; + } + return true; } From 0f9a75247e17d150d703fcd33a0c75293a934a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Mon, 29 Jun 2026 14:57:10 -0700 Subject: [PATCH 12/18] feat: update StarlingMonkey (#1500) This commit is a no-op due to a PR merging mistake, but the changes can be seen over at https://github.com/fastly/js-compute-runtime/pull/1490 --- package-lock.json | 3 +++ package.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/package-lock.json b/package-lock.json index 5286cc0349..f244a263d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "@fastly/js-compute", "version": "3.43.1", + "bundleDependencies": [ + "@fastly/wasmtime" + ], "license": "Apache-2.0", "dependencies": { "@bytecodealliance/jco": "^1.7.0", diff --git a/package.json b/package.json index 4c5ac76ed8..cc10b0801c 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,9 @@ "typescript-eslint": "^8.48.1", "unified": "^11.0.5" }, + "bundledDependencies": [ + "@fastly/wasmtime" + ], "peerDependencies": { "typescript": ">=5.9" }, From c90e7129b8647346c6925214dde919edddb0f5a2 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Fri, 17 Jul 2026 18:11:24 +0100 Subject: [PATCH 13/18] fix: memory safety issues in convertBodyInit (#1504) --- runtime/fastly/builtins/fastly.cpp | 40 +++++++++++++++++++----------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/runtime/fastly/builtins/fastly.cpp b/runtime/fastly/builtins/fastly.cpp index 642d7e1815..5a9cca1eec 100644 --- a/runtime/fastly/builtins/fastly.cpp +++ b/runtime/fastly/builtins/fastly.cpp @@ -1030,33 +1030,43 @@ JS::Result> convertBodyInit(JSContext *cx, if (!buf) { return JS::Result>(JS::Error()); } - // `maybeNoGC` needs to be populated for the lifetime of `buf` because - // short typed arrays have inline data which can move on GC, so assert - // that no GC happens. (Which it doesn't, because we're not allocating - // before `buf` goes out of scope.) - JS::AutoCheckCannotGC noGC; - bool is_shared; - length = JS_GetArrayBufferViewByteLength(bodyObj); - buf = JS::UniqueChars( - reinterpret_cast(JS_GetArrayBufferViewData(bodyObj, &is_shared, noGC))); - MOZ_ASSERT(!is_shared); + // `noGC` must remain in scope while we hold the raw pointer into the typed + // array's data, because short typed arrays have inline data that can move + // if the GC runs. We copy into our own JS_malloc buffer before noGC goes + // out of scope so the returned UniqueChars owns its memory. + { + JS::AutoCheckCannotGC noGC; + bool is_shared; + void *view_data = JS_GetArrayBufferViewData(bodyObj, &is_shared, noGC); + MOZ_ASSERT(!is_shared); + if (length > 0) { + std::memcpy(buf.get(), view_data, length); + } + } return JS::Result>(std::make_tuple(std::move(buf), length)); } else if (bodyObj && JS::IsArrayBufferObject(bodyObj)) { bool is_shared; uint8_t *bytes; JS::GetArrayBufferLengthAndData(bodyObj, &length, &is_shared, &bytes); MOZ_ASSERT(!is_shared); - buf.reset(reinterpret_cast(bytes)); + buf.reset(reinterpret_cast(JS_malloc(cx, length))); + if (!buf) { + return JS::Result>(JS::Error()); + } + if (length > 0) { + std::memcpy(buf.get(), bytes, length); + } return JS::Result>(std::make_tuple(std::move(buf), length)); } else if (bodyObj && URLSearchParams::is_instance(bodyObj)) { jsurl::SpecSlice slice = URLSearchParams::serialize(cx, bodyObj); - buf.reset(reinterpret_cast(JS_malloc(cx, slice.len))); + length = slice.len; + buf.reset(reinterpret_cast(JS_malloc(cx, length))); if (!buf) { return JS::Result>(JS::Error()); } - std::memcpy(buf.get(), slice.data, slice.len); - buf = JS::UniqueChars(reinterpret_cast(const_cast(slice.data))); - length = slice.len; + if (length > 0) { + std::memcpy(buf.get(), slice.data, length); + } return JS::Result>(std::make_tuple(std::move(buf), length)); } else { // Convert into a String following https://tc39.es/ecma262/#sec-tostring From 035befa0611628d9d6e57bff460105e430ee1692 Mon Sep 17 00:00:00 2001 From: Pablo Date: Fri, 17 Jul 2026 18:12:31 +0000 Subject: [PATCH 14/18] chore(docs): Update Backend.mdx (#1460) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Kat Marchán --- documentation/docs/backend/Backend/Backend.mdx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/documentation/docs/backend/Backend/Backend.mdx b/documentation/docs/backend/Backend/Backend.mdx index 6e52340125..d982e98fa3 100644 --- a/documentation/docs/backend/Backend/Backend.mdx +++ b/documentation/docs/backend/Backend/Backend.mdx @@ -110,6 +110,18 @@ This includes all configuration options above except for `name`, `target`, `host A new `Backend` object. +### Disable TLS verification + +TLS certificate verification for a backend can be disabled by leaving the following fields **unset** in your `backendConfiguration`: + +- `sniHostname` +- `caCertificate` +- `certificateHostname` + +If these fields are not configured, the Compute app does not validate the certificate presented by the backend. As a result, it will accept certificates that are expired, self-signed, issued for a different hostname or otherwise invalid. + +However, as a best practice, your origin should serve a valid TLS certificate and your Compute app should verify it to help protect backend connections from man-in-the-middle attacks. + ## Examples In this example an explicit Dynamic Backend is created and supplied to the fetch request, the response is then returned to the client. From 7b2e70c0fc441da91be57119ceb16f82df9426c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Fri, 17 Jul 2026 11:35:49 -0700 Subject: [PATCH 15/18] chore(deps): bump esbuild to latest (#1506) --- package-lock.json | 221 +++++++++++++++++++++++++--------------------- package.json | 7 +- 2 files changed, 126 insertions(+), 102 deletions(-) diff --git a/package-lock.json b/package-lock.json index f244a263d3..00e412c6d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "acorn": "^8.13.0", "acorn-walk": "^8.3.4", "cosmiconfig": "^9.0.1", - "esbuild": "^0.25.0", + "esbuild": "^0.28.1", "magic-string": "^0.30.12", "npm": "^11.14.1", "picomatch": "^4.0.4", @@ -338,9 +338,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", "cpu": [ "ppc64" ], @@ -354,9 +354,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", "cpu": [ "arm" ], @@ -370,9 +370,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", "cpu": [ "arm64" ], @@ -386,9 +386,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", "cpu": [ "x64" ], @@ -402,7 +402,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], @@ -416,9 +418,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", "cpu": [ "x64" ], @@ -432,9 +434,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", "cpu": [ "arm64" ], @@ -448,9 +450,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", "cpu": [ "x64" ], @@ -464,9 +466,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", "cpu": [ "arm" ], @@ -480,9 +482,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", "cpu": [ "arm64" ], @@ -496,9 +498,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", "cpu": [ "ia32" ], @@ -512,9 +514,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", "cpu": [ "loong64" ], @@ -528,9 +530,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", "cpu": [ "mips64el" ], @@ -544,9 +546,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", "cpu": [ "ppc64" ], @@ -560,9 +562,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", "cpu": [ "riscv64" ], @@ -576,9 +578,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", "cpu": [ "s390x" ], @@ -592,9 +594,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", "cpu": [ "x64" ], @@ -608,9 +610,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", "cpu": [ "arm64" ], @@ -624,9 +626,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", "cpu": [ "x64" ], @@ -640,9 +642,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", "cpu": [ "arm64" ], @@ -656,9 +658,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", "cpu": [ "x64" ], @@ -671,10 +673,26 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", "cpu": [ "x64" ], @@ -688,9 +706,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", "cpu": [ "arm64" ], @@ -704,9 +722,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", "cpu": [ "ia32" ], @@ -720,9 +738,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", "cpu": [ "x64" ], @@ -2406,7 +2424,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.0", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -2416,31 +2436,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escalade": { diff --git a/package.json b/package.json index cc10b0801c..0f55c67337 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "acorn": "^8.13.0", "acorn-walk": "^8.3.4", "cosmiconfig": "^9.0.1", - "esbuild": "^0.25.0", + "esbuild": "^0.28.1", "magic-string": "^0.30.12", "npm": "^11.14.1", "picomatch": "^4.0.4", @@ -107,5 +107,8 @@ "name": "npm" } }, - "allowScripts": {} + "allowScripts": {}, + "bundleDependencies": [ + "@fastly/wasmtime" + ] } From 042346700c0f8b7009e7fd2565916a63288a81f3 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Fri, 17 Jul 2026 21:18:33 +0100 Subject: [PATCH 16/18] fix: Make headers of cloned requests independent (#1482) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Kat Marchán --- .../fixtures/app/src/request-clone.js | 30 +++++++++++++++++++ .../js-compute/fixtures/app/tests.json | 1 + 2 files changed, 31 insertions(+) diff --git a/integration-tests/js-compute/fixtures/app/src/request-clone.js b/integration-tests/js-compute/fixtures/app/src/request-clone.js index 1cbc2c3a9e..982ecf249d 100644 --- a/integration-tests/js-compute/fixtures/app/src/request-clone.js +++ b/integration-tests/js-compute/fixtures/app/src/request-clone.js @@ -46,6 +46,36 @@ routes.set('/request/clone/valid', async () => { assert(newRequest.bodyUsed, false, 'newRequest.bodyUsed'); assert(newRequest.body, null, 'newRequest.body'); }); +routes.set('/request/clone/headers-are-independent', () => { + const request = new Request('https://www.fastly.com', { + headers: { 'x-foo': 'original' }, + method: 'get', + }); + const cloned = request.clone(); + + // Mutating the clone's headers must not affect the original + cloned.headers.set('x-foo', 'mutated'); + assert( + request.headers.get('x-foo'), + 'original', + 'original header unchanged after mutating clone', + ); + + // Mutating the original's headers must not affect the clone + request.headers.set('x-bar', 'added'); + assert( + cloned.headers.get('x-bar'), + null, + 'clone does not see header added to original', + ); + + // Clone must carry the headers that existed at clone time + assert( + cloned.headers.get('x-foo'), + 'mutated', + 'clone has header value set on it', + ); +}); routes.set('/request/clone/invalid', async () => { const request = new Request('https://www.fastly.com', { headers: { diff --git a/integration-tests/js-compute/fixtures/app/tests.json b/integration-tests/js-compute/fixtures/app/tests.json index b039d26ced..ccb97e620a 100644 --- a/integration-tests/js-compute/fixtures/app/tests.json +++ b/integration-tests/js-compute/fixtures/app/tests.json @@ -1221,6 +1221,7 @@ "GET /request/clone/called-as-constructor": {}, "GET /request/clone/called-unbound": {}, "GET /request/clone/valid": {}, + "GET /request/clone/headers-are-independent": {}, "GET /request/clone/invalid": {}, "POST /request/body-async-simple/no-workaround": { "environments": ["viceroy", "compute"], From b163186a0d42bd73120ba530420ebc09cd913982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Fri, 17 Jul 2026 13:42:10 -0700 Subject: [PATCH 17/18] fix(tests): only run null-304-body test when http-cache enabled (#1505) --- .../js-compute/fixtures/app/src/cache-override.js | 2 ++ integration-tests/js-compute/fixtures/app/tests.json | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/integration-tests/js-compute/fixtures/app/src/cache-override.js b/integration-tests/js-compute/fixtures/app/src/cache-override.js index 89ca275795..90f56bf529 100644 --- a/integration-tests/js-compute/fixtures/app/src/cache-override.js +++ b/integration-tests/js-compute/fixtures/app/src/cache-override.js @@ -170,6 +170,8 @@ import { isRunningLocally, routes } from './routes.js'; } }); routes.set('/cache-override/fetch/null-304-body', async (event) => { + if (isRunningLocally()) return; + const resp = await fetch( new Request('https://http-me.fastly.dev/body=foo?status=304', { method: 'POST', diff --git a/integration-tests/js-compute/fixtures/app/tests.json b/integration-tests/js-compute/fixtures/app/tests.json index ccb97e620a..0ab6adebd9 100644 --- a/integration-tests/js-compute/fixtures/app/tests.json +++ b/integration-tests/js-compute/fixtures/app/tests.json @@ -45,7 +45,8 @@ "flake": true }, "GET /cache-override/fetch/null-304-body": { - "environments": ["compute"] + "environments": ["compute"], + "features": ["http-cache"] }, "GET /secret-store/exposed-as-global": { "flake": true From 9c6261df9c7670c14d73c7bba447ec9144fa5521 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Mon, 20 Jul 2026 17:27:16 +0100 Subject: [PATCH 18/18] fix: Make cloned headers independent (#1507) --- runtime/fastly/builtins/fetch/request-response.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/runtime/fastly/builtins/fetch/request-response.cpp b/runtime/fastly/builtins/fetch/request-response.cpp index eb0fb665ac..016d162fcf 100644 --- a/runtime/fastly/builtins/fetch/request-response.cpp +++ b/runtime/fastly/builtins/fetch/request-response.cpp @@ -2472,8 +2472,14 @@ bool Request::clone(JSContext *cx, unsigned argc, JS::Value *vp) { return false; } + JS::RootedValue headers_val(cx, JS::ObjectValue(*headers)); + JS::RootedObject cloned_headers(cx, Headers::create(cx, headers_val, Headers::guard(headers))); + if (!cloned_headers) { + return false; + } + JS::SetReservedSlot(requestInstance, static_cast(Slots::Headers), - JS::ObjectValue(*headers)); + JS::ObjectValue(*cloned_headers)); JS::RootedString method(cx, Request::method(cx, self)); if (!method) {