From 750865d10d48b980368d3cef313140a3cf6df0e8 Mon Sep 17 00:00:00 2001 From: everpcpc Date: Tue, 10 Dec 2024 08:54:36 +0800 Subject: [PATCH] feat(bindings/nodejs): impl Readable Stream for rows (#531) --- bindings/nodejs/README.md | 22 + bindings/nodejs/cucumber.json | 1 - bindings/nodejs/generated.js | 64 +- bindings/nodejs/index.d.ts | 28 +- bindings/nodejs/index.js | 36 +- bindings/nodejs/package.json | 16 +- bindings/nodejs/pnpm-lock.yaml | 1358 +++++++++++++++++++++++++----- bindings/nodejs/src/lib.rs | 21 +- bindings/nodejs/tests/binding.js | 50 +- 9 files changed, 1319 insertions(+), 277 deletions(-) diff --git a/bindings/nodejs/README.md b/bindings/nodejs/README.md index 888446d9b..3cff7df3b 100644 --- a/bindings/nodejs/README.md +++ b/bindings/nodejs/README.md @@ -43,6 +43,28 @@ while (row) { console.log(row.data()); row = await rows.next(); } + +// iter rows +const rows = await conn.queryIter("SELECT * FROM test"); +for await (const row of rows) { + console.log(row.values()); +} + +// pipe rows +import { Transform } from "node:stream"; +import { finished, pipeline } from "node:stream/promises"; + +const rows = await conn.queryIter("SELECT * FROM test"); +const stream = rows.stream(); +const transformer = new Transform({ + readableObjectMode: true, + writableObjectMode: true, + transform(row, _, callback) { + console.log(row.data()); + }, +}); +await pipeline(stream, transformer); +await finished(stream); ``` ## Type Mapping diff --git a/bindings/nodejs/cucumber.json b/bindings/nodejs/cucumber.json index ce3a32c86..af68bb201 100644 --- a/bindings/nodejs/cucumber.json +++ b/bindings/nodejs/cucumber.json @@ -1,6 +1,5 @@ { "default": { - "publishQuiet": true, "paths": ["tests/*.feature"], "require": ["tests/*.js"] } diff --git a/bindings/nodejs/generated.js b/bindings/nodejs/generated.js index c04c92f3e..e20528228 100644 --- a/bindings/nodejs/generated.js +++ b/bindings/nodejs/generated.js @@ -240,14 +240,72 @@ switch (platform) { } break case 'arm': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'databend-driver.linux-arm-musleabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./databend-driver.linux-arm-musleabihf.node') + } else { + nativeBinding = require('@databend-driver/lib-linux-arm-musleabihf') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'databend-driver.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./databend-driver.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('@databend-driver/lib-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + } + break + case 'riscv64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'databend-driver.linux-riscv64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./databend-driver.linux-riscv64-musl.node') + } else { + nativeBinding = require('@databend-driver/lib-linux-riscv64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'databend-driver.linux-riscv64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./databend-driver.linux-riscv64-gnu.node') + } else { + nativeBinding = require('@databend-driver/lib-linux-riscv64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 's390x': localFileExisted = existsSync( - join(__dirname, 'databend-driver.linux-arm-gnueabihf.node') + join(__dirname, 'databend-driver.linux-s390x-gnu.node') ) try { if (localFileExisted) { - nativeBinding = require('./databend-driver.linux-arm-gnueabihf.node') + nativeBinding = require('./databend-driver.linux-s390x-gnu.node') } else { - nativeBinding = require('@databend-driver/lib-linux-arm-gnueabihf') + nativeBinding = require('@databend-driver/lib-linux-s390x-gnu') } } catch (e) { loadError = e diff --git a/bindings/nodejs/index.d.ts b/bindings/nodejs/index.d.ts index 44e98097f..e5cc68b55 100644 --- a/bindings/nodejs/index.d.ts +++ b/bindings/nodejs/index.d.ts @@ -19,16 +19,16 @@ /* auto-generated by NAPI-RS */ -export class ValueOptions { +export declare class ValueOptions { variantAsObject: boolean } -export class Client { +export declare class Client { /** Create a new databend client with a given DSN. */ constructor(dsn: string, opts?: ValueOptions | undefined | null) /** Get a connection from the client. */ getConn(): Promise } -export class Connection { +export declare class Connection { /** Get the connection information. */ info(): Promise /** Get the databend version. */ @@ -49,7 +49,7 @@ export class Connection { */ streamLoad(sql: string, data: Array>): Promise } -export class ConnectionInfo { +export declare class ConnectionInfo { get handler(): string get host(): string get port(): number @@ -57,41 +57,41 @@ export class ConnectionInfo { get database(): string | null get warehouse(): string | null } -export class Schema { +export declare class Schema { fields(): Array } -export class Field { +export declare class Field { get name(): string get dataType(): string } -export class RowIterator { +export declare class RowIterator { + /** Get Schema for rows. */ + schema(): Schema /** * Fetch next row. * Returns `None` if there are no more rows. */ next(): Promise - /** Get Schema for rows. */ - schema(): Schema } -export class RowIteratorExt { +export declare class RowIteratorExt { + schema(): Schema /** * Fetch next row or stats. * Returns `None` if there are no more rows. */ next(): Promise - schema(): Schema } /** Must contain either row or stats. */ -export class RowOrStats { +export declare class RowOrStats { get row(): Row | null get stats(): ServerStats | null } -export class Row { +export declare class Row { setOpts(opts: ValueOptions): void values(): Array data(): Record } -export class ServerStats { +export declare class ServerStats { get totalRows(): bigint get totalBytes(): bigint get readRows(): bigint diff --git a/bindings/nodejs/index.js b/bindings/nodejs/index.js index aa6544966..b494736d8 100644 --- a/bindings/nodejs/index.js +++ b/bindings/nodejs/index.js @@ -16,6 +16,40 @@ /// -const { Client } = require("./generated.js"); +const { Readable } = require("node:stream"); + +const { Client, RowIterator } = require("./generated.js"); + +class RowsStream extends Readable { + constructor(reader, options) { + super({ objectMode: true, ...options }); + this.reader = reader; + } + + _read() { + this.reader + .next() + .then((item) => { + this.push(item); + }) + .catch((e) => { + this.emit("error", e); + }); + } +} + +RowIterator.prototype[Symbol.asyncIterator] = async function* () { + while (true) { + const item = await this.next(); + if (item === null) { + break; + } + yield item; + } +}; + +RowIterator.prototype.stream = function () { + return new RowsStream(this); +}; module.exports.Client = Client; diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json index c7aa02e83..bc087c36e 100644 --- a/bindings/nodejs/package.json +++ b/bindings/nodejs/package.json @@ -40,15 +40,15 @@ "LICENSE" ], "devDependencies": { - "@cucumber/cucumber": "^9.6.0", - "@napi-rs/cli": "^2.16.3", - "@types/node": "^18.14.5", - "prettier": "^3.0.3", - "typedoc": "^0.25.1", - "typescript": "^5.2.2" + "@cucumber/cucumber": "^11.1.0", + "@napi-rs/cli": "^2.18.4", + "@types/node": "^22.10.1", + "prettier": "^3.4.2", + "typedoc": "^0.27.4", + "typescript": "^5.7.2" }, "engines": { - "node": ">= 10" + "node": ">= 16" }, "scripts": { "build": "napi build --platform --target=$NAPI_TARGET --release --js generated.js && node ./scripts/header.js", @@ -72,5 +72,5 @@ "registry": "https://registry.npmjs.org/", "access": "public" }, - "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387" + "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c" } diff --git a/bindings/nodejs/pnpm-lock.yaml b/bindings/nodejs/pnpm-lock.yaml index 2f430afe6..b08b6c039 100644 --- a/bindings/nodejs/pnpm-lock.yaml +++ b/bindings/nodejs/pnpm-lock.yaml @@ -8,25 +8,39 @@ importers: .: devDependencies: "@cucumber/cucumber": - specifier: ^9.6.0 - version: 9.6.0 + specifier: ^11.1.0 + version: 11.1.0 "@napi-rs/cli": - specifier: ^2.16.3 - version: 2.16.3 + specifier: ^2.18.4 + version: 2.18.4 "@types/node": - specifier: ^18.14.5 - version: 18.14.5 + specifier: ^22.10.1 + version: 22.10.1 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.4.2 + version: 3.4.2 typedoc: - specifier: ^0.25.1 - version: 0.25.1(typescript@5.2.2) + specifier: ^0.27.4 + version: 0.27.4(typescript@5.7.2) typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.7.2 + version: 5.7.2 packages: + "@babel/code-frame@7.26.2": + resolution: + { + integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.25.9": + resolution: + { + integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==, + } + engines: { node: ">=6.9.0" } + "@colors/colors@1.5.0": resolution: { @@ -34,24 +48,24 @@ packages: } engines: { node: ">=0.1.90" } - "@cucumber/ci-environment@9.2.0": + "@cucumber/ci-environment@10.0.1": resolution: { - integrity: sha512-jLzRtVwdtNt+uAmTwvXwW9iGYLEOJFpDSmnx/dgoMGKXUWRx1UHT86Q696CLdgXO8kyTwsgJY0c6n5SW9VitAA==, + integrity: sha512-/+ooDMPtKSmvcPMDYnMZt4LuoipfFfHaYspStI4shqw8FyKcfQAmekz6G+QKWjQQrvM+7Hkljwx58MEwPCwwzg==, } - "@cucumber/cucumber-expressions@16.1.2": + "@cucumber/cucumber-expressions@17.1.0": resolution: { - integrity: sha512-CfHEbxJ5FqBwF6mJyLLz4B353gyHkoi6cCL4J0lfDZ+GorpcWw4n2OUAdxJmP7ZlREANWoTFlp4FhmkLKrCfUA==, + integrity: sha512-PCv/ppsPynniKPWJr5v566daCVe+pbxQpHGrIu/Ev57cCH9Rv+X0F6lio4Id3Z64TaG7btCRLUGewIgLwmrwOA==, } - "@cucumber/cucumber@9.6.0": + "@cucumber/cucumber@11.1.0": resolution: { - integrity: sha512-bCw2uJdGHHLg4B3RoZpLzx0RXyXURmPe+swtdK1cGoA8rs+vv+/6osifcNwvFM2sv0nQ91+gDACSrXK7AHCylg==, + integrity: sha512-INDycPL2AR1Ky3X+81n2MfChvVe8Z8we52GG6I0lld34755Dn3xsiM7a2g9eCr6wRX8+9vnOom1D7Pbc2238RQ==, } - engines: { node: 14 || 16 || >=18 } + engines: { node: 18 || 20 || 22 || >=23 } hasBin: true "@cucumber/gherkin-streams@5.0.1": @@ -65,32 +79,34 @@ packages: "@cucumber/message-streams": ">=4.0.0" "@cucumber/messages": ">=17.1.1" - "@cucumber/gherkin-utils@8.0.2": + "@cucumber/gherkin-utils@9.0.0": resolution: { - integrity: sha512-aQlziN3r3cTwprEDbLEcFoMRQajb9DTOu2OZZp5xkuNz6bjSTowSY90lHUD2pWT7jhEEckZRIREnk7MAwC2d1A==, + integrity: sha512-clk4q39uj7pztZuZtyI54V8lRsCUz0Y/p8XRjIeHh7ExeEztpWkp4ca9q1FjUOPfQQ8E7OgqFbqoQQXZ1Bx7fw==, } hasBin: true - "@cucumber/gherkin@25.0.2": + "@cucumber/gherkin@28.0.0": resolution: { - integrity: sha512-EdsrR33Y5GjuOoe2Kq5Y9DYwgNRtUD32H4y2hCrT6+AWo7ibUQu7H+oiWTgfVhwbkHsZmksxHSxXz/AwqqyCRQ==, + integrity: sha512-Ee6zJQq0OmIUPdW0mSnsCsrWA2PZAELNDPICD2pLfs0Oz7RAPgj80UsD2UCtqyAhw2qAR62aqlktKUlai5zl/A==, } - "@cucumber/gherkin@26.2.0": + "@cucumber/html-formatter@21.6.0": resolution: { - integrity: sha512-iRSiK8YAIHAmLrn/mUfpAx7OXZ7LyNlh1zT89RoziSVCbqSVDxJS6ckEzW8loxs+EEXl0dKPQOXiDmbHV+C/fA==, + integrity: sha512-Qw1tdObBJrgXgXwVjKVjB3hFhFPI8WhIFb+ULy8g5lDl5AdnKDiyDXAMvAWRX+pphnRMMNdkPCt6ZXEfWvUuAA==, } + peerDependencies: + "@cucumber/messages": ">=18" - "@cucumber/html-formatter@20.4.0": + "@cucumber/junit-xml-formatter@0.6.0": resolution: { - integrity: sha512-TnLSXC5eJd8AXHENo69f5z+SixEVtQIf7Q2dZuTpT/Y8AOkilGpGl1MQR1Vp59JIw+fF3EQSUKdf+DAThCxUNg==, + integrity: sha512-++PAuxliQhq7yr2Bn9P0fwBUo46OoKAK5f6M4PrwoHBqIsl/6pUS4mqpviuBrgZ8RD7BTrmASk4lUDJClAz/qA==, } peerDependencies: - "@cucumber/messages": ">=18" + "@cucumber/messages": "*" "@cucumber/message-streams@4.0.1": resolution: @@ -100,55 +116,107 @@ packages: peerDependencies: "@cucumber/messages": ">=17.1.1" - "@cucumber/messages@19.1.4": + "@cucumber/messages@24.1.0": + resolution: + { + integrity: sha512-hxVHiBurORcobhVk80I9+JkaKaNXkW6YwGOEFIh/2aO+apAN+5XJgUUWjng9NwqaQrW1sCFuawLB1AuzmBaNdQ==, + } + + "@cucumber/query@13.0.2": + resolution: + { + integrity: sha512-ykjwL99F5ZmJ3XnIRPe/eA8LvfSTc+C6ZZXrD5QrAfhfMRomBNpZT03MNnxrJ92ge18eDbculhclrIJQiVJCJg==, + } + peerDependencies: + "@cucumber/messages": "*" + + "@cucumber/tag-expressions@6.1.0": resolution: { - integrity: sha512-Pksl0pnDz2l1+L5Ug85NlG6LWrrklN9qkMxN5Mv+1XZ3T6u580dnE6mVaxjJRdcOq4tR17Pc0RqIDZMyVY1FlA==, + integrity: sha512-+3DwRumrCJG27AtzCIL37A/X+A/gSfxOPLg8pZaruh5SLumsTmpvilwroVWBT2fPzmno/tGXypeK5a7NHU4RzA==, } - "@cucumber/messages@22.0.0": + "@gerrit0/mini-shiki@1.24.1": resolution: { - integrity: sha512-EuaUtYte9ilkxcKmfqGF9pJsHRUU0jwie5ukuZ/1NPTuHS1LxHPsGEODK17RPRbZHOFhqybNzG2rHAwThxEymg==, + integrity: sha512-PNP/Gjv3VqU7z7DjRgO3F9Ok5frTKqtpV+LJW1RzMcr2zpRk0ulhEWnbcNGXzPC7BZyWMIHrkfQX2GZRfxrn6Q==, } - "@cucumber/tag-expressions@5.0.1": + "@isaacs/cliui@8.0.2": resolution: { - integrity: sha512-N43uWud8ZXuVjza423T9ZCIJsaZhFekmakt7S9bvogTxqdVGbRobjR663s0+uW0Rz9e+Pa8I6jUuWtoBLQD2Mw==, + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, } + engines: { node: ">=12" } - "@napi-rs/cli@2.16.3": + "@napi-rs/cli@2.18.4": resolution: { - integrity: sha512-3mLNPlbbOhpbIUKicLrJtIearlHXUuXL3UeueYyRRplpVMNkdn8xCyzY6PcYZi3JXR8bmCOiWgkVmLnrSL7DKw==, + integrity: sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==, } engines: { node: ">= 10" } hasBin: true - "@teppeis/multimaps@2.0.0": + "@pkgjs/parseargs@0.11.0": + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: ">=14" } + + "@shikijs/engine-oniguruma@1.24.1": + resolution: + { + integrity: sha512-KdrTIBIONWd+Xs61eh8HdIpfigtrseat9dpARvaOe2x0g/FNTbwbkGr3y92VSOVD1XotzEskh3v/nCzyWjkf7g==, + } + + "@shikijs/types@1.24.1": + resolution: + { + integrity: sha512-ZwZFbShFY/APfKNt3s9Gv8rhTm29GodSKsOW66X6N+HGsZuaHalE1VUEX4fv93UXHTZTLjb3uxn63F96RhGfXw==, + } + + "@shikijs/vscode-textmate@9.3.0": + resolution: + { + integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==, + } + + "@teppeis/multimaps@3.0.0": resolution: { - integrity: sha512-TL1adzq1HdxUf9WYduLcQ/DNGYiz71U31QRgbnr0Ef1cPyOUOsBojxHVWpFeOSUucB6Lrs0LxFRA14ntgtkc9w==, + integrity: sha512-ID7fosbc50TbT0MK0EG12O+gAP3W3Aa/Pz4DaTtQtEvlc9Odaqi0de+xuZ7Li2GtK4HzEX7IuRWS/JmZLksR3Q==, + } + engines: { node: ">=14" } + + "@types/hast@3.0.4": + resolution: + { + integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, } - engines: { node: ">=10.17" } - "@types/node@18.14.5": + "@types/node@22.10.1": resolution: { - integrity: sha512-CRT4tMK/DHYhw1fcCEBwME9CSaZNclxfzVMe7GsO6ULSwsttbj70wSiX6rZdIjGblu93sTJxLdhNIT85KKI7Qw==, + integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==, } - "@types/uuid@8.3.4": + "@types/normalize-package-data@2.4.4": resolution: { - integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==, + integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, } - "@types/uuid@9.0.1": + "@types/unist@3.0.3": resolution: { - integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==, + integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, + } + + "@types/uuid@9.0.8": + resolution: + { + integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==, } ansi-regex@4.1.1: @@ -165,11 +233,12 @@ packages: } engines: { node: ">=8" } - ansi-sequence-parser@1.1.1: + ansi-regex@6.1.0: resolution: { - integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==, + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, } + engines: { node: ">=12" } ansi-styles@4.3.0: resolution: @@ -178,18 +247,30 @@ packages: } engines: { node: ">=8" } + ansi-styles@6.2.1: + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, + } + engines: { node: ">=12" } + any-promise@1.3.0: resolution: { integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, } - assert-plus@1.0.0: + argparse@2.0.1: resolution: { - integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + assert@2.1.0: + resolution: + { + integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==, } - engines: { node: ">=0.8" } assertion-error-formatter@3.0.0: resolution: @@ -197,16 +278,17 @@ packages: integrity: sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==, } - balanced-match@1.0.2: + available-typed-arrays@1.0.7: resolution: { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, } + engines: { node: ">= 0.4" } - brace-expansion@1.1.11: + balanced-match@1.0.2: resolution: { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } brace-expansion@2.0.1: @@ -221,6 +303,20 @@ packages: integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, } + call-bind-apply-helpers@1.0.0: + resolution: + { + integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==, + } + engines: { node: ">= 0.4" } + + call-bind@1.0.8: + resolution: + { + integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==, + } + engines: { node: ">= 0.4" } + capital-case@1.0.4: resolution: { @@ -267,31 +363,26 @@ packages: } engines: { node: ">=14" } - commander@9.1.0: + commander@12.0.0: resolution: { - integrity: sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==, + integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==, } - engines: { node: ^12.20.0 || >=14 } + engines: { node: ">=18" } - commander@9.4.1: + commander@9.1.0: resolution: { - integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==, + integrity: sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==, } engines: { node: ^12.20.0 || >=14 } - concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } - - core-util-is@1.0.2: + cross-spawn@7.0.6: resolution: { - integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, } + engines: { node: ">= 8" } debug@4.3.5: resolution: @@ -305,6 +396,20 @@ packages: supports-color: optional: true + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + + define-properties@1.2.1: + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: ">= 0.4" } + diff@4.0.2: resolution: { @@ -312,18 +417,64 @@ packages: } engines: { node: ">=0.3.1" } + dunder-proto@1.0.0: + resolution: + { + integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==, + } + engines: { node: ">= 0.4" } + + eastasianwidth@0.2.0: + resolution: + { + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, + } + emoji-regex@8.0.0: resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, } + emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + + entities@4.5.0: + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: ">=0.12" } + + error-ex@1.3.2: + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } + error-stack-parser@2.1.4: resolution: { integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, } + es-define-property@1.0.1: + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + } + engines: { node: ">= 0.4" } + + es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: ">= 0.4" } + escape-string-regexp@1.0.5: resolution: { @@ -331,32 +482,52 @@ packages: } engines: { node: ">=0.8.0" } - extsprintf@1.4.1: + figures@3.2.0: resolution: { - integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==, + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, } - engines: { "0": node >=0.6.0 } + engines: { node: ">=8" } - figures@3.2.0: + find-up@4.1.0: resolution: { - integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, } engines: { node: ">=8" } - fs.realpath@1.0.0: + for-each@0.3.3: + resolution: + { + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, + } + + foreground-child@3.3.0: + resolution: + { + integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==, + } + engines: { node: ">=14" } + + function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + + get-intrinsic@1.2.5: resolution: { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==, } + engines: { node: ">= 0.4" } - glob@7.2.3: + glob@10.4.5: resolution: { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, } - deprecated: Glob versions prior to v9 are no longer supported + hasBin: true global-dirs@3.0.1: resolution: @@ -365,6 +536,13 @@ packages: } engines: { node: ">=10" } + gopd@1.2.0: + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + } + engines: { node: ">= 0.4" } + has-ansi@4.0.1: resolution: { @@ -379,19 +557,45 @@ packages: } engines: { node: ">=8" } - indent-string@4.0.0: + has-property-descriptors@1.0.2: resolution: { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, } - engines: { node: ">=8" } - inflight@1.0.6: + has-symbols@1.1.0: resolution: { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, } - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + engines: { node: ">= 0.4" } + + has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: ">= 0.4" } + + hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: ">= 0.4" } + + hosted-git-info@2.8.9: + resolution: + { + integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, + } + + indent-string@4.0.0: + resolution: + { + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, + } + engines: { node: ">=8" } inherits@2.0.4: resolution: @@ -406,6 +610,33 @@ packages: } engines: { node: ">=10" } + is-arguments@1.1.1: + resolution: + { + integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, + } + engines: { node: ">= 0.4" } + + is-arrayish@0.2.1: + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } + + is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + + is-core-module@2.15.1: + resolution: + { + integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==, + } + engines: { node: ">= 0.4" } + is-fullwidth-code-point@3.0.0: resolution: { @@ -413,6 +644,13 @@ packages: } engines: { node: ">=8" } + is-generator-function@1.0.10: + resolution: + { + integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, + } + engines: { node: ">= 0.4" } + is-installed-globally@0.4.0: resolution: { @@ -420,6 +658,13 @@ packages: } engines: { node: ">=10" } + is-nan@1.3.2: + resolution: + { + integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==, + } + engines: { node: ">= 0.4" } + is-path-inside@3.0.3: resolution: { @@ -434,10 +679,35 @@ packages: } engines: { node: ">=8" } - jsonc-parser@3.3.1: + is-typed-array@1.1.13: + resolution: + { + integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==, + } + engines: { node: ">= 0.4" } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + jackspeak@3.4.3: + resolution: + { + integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, + } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + json-parse-even-better-errors@2.3.1: resolution: { - integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==, + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, } knuth-shuffle-seeded@1.0.6: @@ -446,6 +716,25 @@ packages: integrity: sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==, } + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + + linkify-it@5.0.0: + resolution: + { + integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==, + } + + locate-path@5.0.0: + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: ">=8" } + lodash.merge@4.6.2: resolution: { @@ -464,6 +753,12 @@ packages: integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, } + lru-cache@10.4.3: + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } + lru-cache@6.0.0: resolution: { @@ -484,20 +779,27 @@ packages: } engines: { node: ">=12" } - marked@4.3.0: + markdown-it@14.1.0: resolution: { - integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==, + integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==, } - engines: { node: ">= 12" } hasBin: true - minimatch@3.1.2: + mdurl@2.0.0: resolution: { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==, } + mime@3.0.0: + resolution: + { + integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, + } + engines: { node: ">=10.0.0" } + hasBin: true + minimatch@9.0.5: resolution: { @@ -505,6 +807,13 @@ packages: } engines: { node: ">=16 || 14 >=14.17" } + minipass@7.1.2: + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, + } + engines: { node: ">=16 || 14 >=14.17" } + mkdirp@2.1.6: resolution: { @@ -531,6 +840,12 @@ packages: integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, } + normalize-package-data@2.5.0: + resolution: + { + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, + } + object-assign@4.1.1: resolution: { @@ -538,10 +853,52 @@ packages: } engines: { node: ">=0.10.0" } - once@1.4.0: + object-is@1.1.6: + resolution: + { + integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==, + } + engines: { node: ">= 0.4" } + + object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } + + object.assign@4.1.5: + resolution: + { + integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, + } + engines: { node: ">= 0.4" } + + p-limit@2.3.0: + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: ">=6" } + + p-locate@4.1.0: + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: ">=8" } + + p-try@2.2.0: resolution: { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: ">=6" } + + package-json-from-dist@1.0.1: + resolution: + { + integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, } pad-right@0.2.2: @@ -551,17 +908,57 @@ packages: } engines: { node: ">=0.10.0" } - path-is-absolute@1.0.1: + parse-json@5.2.0: resolution: { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, } - engines: { node: ">=0.10.0" } + engines: { node: ">=8" } - prettier@3.0.3: + path-exists@4.0.0: resolution: { - integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: ">=8" } + + path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } + + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + + path-scurry@1.11.1: + resolution: + { + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, + } + engines: { node: ">=16 || 14 >=14.18" } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + possible-typed-array-names@1.0.0: + resolution: + { + integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==, + } + engines: { node: ">= 0.4" } + + prettier@3.4.2: + resolution: + { + integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==, } engines: { node: ">=14" } hasBin: true @@ -569,21 +966,43 @@ packages: progress@2.0.3: resolution: { - integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + } + engines: { node: ">=0.4.0" } + + property-expr@2.0.6: + resolution: + { + integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==, + } + + punycode.js@2.3.1: + resolution: + { + integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==, + } + engines: { node: ">=6" } + + read-pkg-up@7.0.1: + resolution: + { + integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, } - engines: { node: ">=0.4.0" } + engines: { node: ">=8" } - property-expr@2.0.6: + read-pkg@5.2.0: resolution: { - integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==, + integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, } + engines: { node: ">=8" } - reflect-metadata@0.1.13: + reflect-metadata@0.2.1: resolution: { - integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==, + integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==, } + deprecated: This version has a critical bug in fallback handling. Please upgrade to reflect-metadata@0.2.2 or newer. regexp-match-indices@1.0.2: resolution: @@ -619,12 +1038,26 @@ packages: } engines: { node: ">=8" } + resolve@1.22.8: + resolution: + { + integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, + } + hasBin: true + seed-random@2.2.0: resolution: { integrity: sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==, } + semver@5.7.2: + resolution: + { + integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, + } + hasBin: true + semver@7.5.3: resolution: { @@ -633,11 +1066,33 @@ packages: engines: { node: ">=10" } hasBin: true - shiki@0.14.7: + set-function-length@1.2.2: resolution: { - integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==, + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, } + engines: { node: ">= 0.4" } + + shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } + + shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } source-map-support@0.5.21: resolution: @@ -652,16 +1107,40 @@ packages: } engines: { node: ">=0.10.0" } + spdx-correct@3.2.0: + resolution: + { + integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, + } + + spdx-exceptions@2.5.0: + resolution: + { + integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==, + } + + spdx-expression-parse@3.0.1: + resolution: + { + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, + } + + spdx-license-ids@3.0.20: + resolution: + { + integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==, + } + stackframe@1.3.4: resolution: { integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==, } - string-argv@0.3.2: + string-argv@0.3.1: resolution: { - integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, + integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, } engines: { node: ">=0.6.19" } @@ -672,6 +1151,13 @@ packages: } engines: { node: ">=8" } + string-width@5.1.2: + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, + } + engines: { node: ">=12" } + strip-ansi@6.0.1: resolution: { @@ -679,6 +1165,13 @@ packages: } engines: { node: ">=8" } + strip-ansi@7.1.0: + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, + } + engines: { node: ">=12" } + supports-color@7.2.0: resolution: { @@ -693,6 +1186,13 @@ packages: } engines: { node: ">=10" } + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: ">= 0.4" } + thenify-all@1.6.0: resolution: { @@ -731,6 +1231,20 @@ packages: integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==, } + type-fest@0.6.0: + resolution: + { + integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, + } + engines: { node: ">=8" } + + type-fest@0.8.1: + resolution: + { + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, + } + engines: { node: ">=8" } + type-fest@2.19.0: resolution: { @@ -738,24 +1252,43 @@ packages: } engines: { node: ">=12.20" } - typedoc@0.25.1: + type-fest@4.30.0: + resolution: + { + integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==, + } + engines: { node: ">=16" } + + typedoc@0.27.4: resolution: { - integrity: sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==, + integrity: sha512-wXPQs1AYC2Crk+1XFpNuutLIkNWleokZf1UNf/X8w9KsMnirkvT+LzxTXDvfF6ug3TSLf3Xu5ZXRKGfoXPX7IA==, } - engines: { node: ">= 16" } + engines: { node: ">= 18" } hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x - typescript@5.2.2: + typescript@5.7.2: resolution: { - integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==, + integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==, } engines: { node: ">=14.17" } hasBin: true + uc.micro@2.1.0: + resolution: + { + integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==, + } + + undici-types@6.20.0: + resolution: + { + integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==, + } + upper-case-first@2.0.2: resolution: { @@ -768,37 +1301,53 @@ packages: integrity: sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==, } - uuid@9.0.0: + util@0.12.5: + resolution: + { + integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, + } + + uuid@9.0.1: resolution: { - integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==, + integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, } hasBin: true - verror@1.10.1: + validate-npm-package-license@3.0.4: + resolution: + { + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, + } + + which-typed-array@1.1.16: resolution: { - integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==, + integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==, } - engines: { node: ">=0.6.0" } + engines: { node: ">= 0.4" } - vscode-oniguruma@1.7.0: + which@2.0.2: resolution: { - integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==, + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, } + engines: { node: ">= 8" } + hasBin: true - vscode-textmate@8.0.0: + wrap-ansi@7.0.0: resolution: { - integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==, + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, } + engines: { node: ">=10" } - wrappy@1.0.2: + wrap-ansi@8.1.0: resolution: { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, } + engines: { node: ">=12" } xmlbuilder@15.1.1: resolution: @@ -821,6 +1370,14 @@ packages: engines: { node: ">= 14" } hasBin: true + yaml@2.6.1: + resolution: + { + integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==, + } + engines: { node: ">= 14" } + hasBin: true + yup@1.2.0: resolution: { @@ -828,26 +1385,35 @@ packages: } snapshots: + "@babel/code-frame@7.26.2": + dependencies: + "@babel/helper-validator-identifier": 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + "@babel/helper-validator-identifier@7.25.9": {} + "@colors/colors@1.5.0": optional: true - "@cucumber/ci-environment@9.2.0": {} + "@cucumber/ci-environment@10.0.1": {} - "@cucumber/cucumber-expressions@16.1.2": + "@cucumber/cucumber-expressions@17.1.0": dependencies: regexp-match-indices: 1.0.2 - "@cucumber/cucumber@9.6.0": - dependencies: - "@cucumber/ci-environment": 9.2.0 - "@cucumber/cucumber-expressions": 16.1.2 - "@cucumber/gherkin": 26.2.0 - "@cucumber/gherkin-streams": 5.0.1(@cucumber/gherkin@26.2.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@22.0.0))(@cucumber/messages@22.0.0) - "@cucumber/gherkin-utils": 8.0.2 - "@cucumber/html-formatter": 20.4.0(@cucumber/messages@22.0.0) - "@cucumber/message-streams": 4.0.1(@cucumber/messages@22.0.0) - "@cucumber/messages": 22.0.0 - "@cucumber/tag-expressions": 5.0.1 + "@cucumber/cucumber@11.1.0": + dependencies: + "@cucumber/ci-environment": 10.0.1 + "@cucumber/cucumber-expressions": 17.1.0 + "@cucumber/gherkin": 28.0.0 + "@cucumber/gherkin-streams": 5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@24.1.0))(@cucumber/messages@24.1.0) + "@cucumber/gherkin-utils": 9.0.0 + "@cucumber/html-formatter": 21.6.0(@cucumber/messages@24.1.0) + "@cucumber/junit-xml-formatter": 0.6.0(@cucumber/messages@24.1.0) + "@cucumber/message-streams": 4.0.1(@cucumber/messages@24.1.0) + "@cucumber/messages": 24.1.0 + "@cucumber/tag-expressions": 6.1.0 assertion-error-formatter: 3.0.0 capital-case: 1.0.4 chalk: 4.1.2 @@ -856,7 +1422,7 @@ snapshots: debug: 4.3.5(supports-color@8.1.1) error-stack-parser: 2.1.4 figures: 3.2.0 - glob: 7.2.3 + glob: 10.4.5 has-ansi: 4.0.1 indent-string: 4.0.0 is-installed-globally: 0.4.0 @@ -865,92 +1431,142 @@ snapshots: lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 luxon: 3.2.1 + mime: 3.0.0 mkdirp: 2.1.6 mz: 2.7.0 progress: 2.0.3 + read-pkg-up: 7.0.1 resolve-pkg: 2.0.0 semver: 7.5.3 - string-argv: 0.3.2 - strip-ansi: 6.0.1 + string-argv: 0.3.1 supports-color: 8.1.1 tmp: 0.2.3 + type-fest: 4.30.0 util-arity: 1.1.0 - verror: 1.10.1 - xmlbuilder: 15.1.1 yaml: 2.4.5 yup: 1.2.0 - "@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@26.2.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@22.0.0))(@cucumber/messages@22.0.0)": + "@cucumber/gherkin-streams@5.0.1(@cucumber/gherkin@28.0.0)(@cucumber/message-streams@4.0.1(@cucumber/messages@24.1.0))(@cucumber/messages@24.1.0)": dependencies: - "@cucumber/gherkin": 26.2.0 - "@cucumber/message-streams": 4.0.1(@cucumber/messages@22.0.0) - "@cucumber/messages": 22.0.0 + "@cucumber/gherkin": 28.0.0 + "@cucumber/message-streams": 4.0.1(@cucumber/messages@24.1.0) + "@cucumber/messages": 24.1.0 commander: 9.1.0 source-map-support: 0.5.21 - "@cucumber/gherkin-utils@8.0.2": + "@cucumber/gherkin-utils@9.0.0": dependencies: - "@cucumber/gherkin": 25.0.2 - "@cucumber/messages": 19.1.4 - "@teppeis/multimaps": 2.0.0 - commander: 9.4.1 + "@cucumber/gherkin": 28.0.0 + "@cucumber/messages": 24.1.0 + "@teppeis/multimaps": 3.0.0 + commander: 12.0.0 source-map-support: 0.5.21 - "@cucumber/gherkin@25.0.2": + "@cucumber/gherkin@28.0.0": dependencies: - "@cucumber/messages": 19.1.4 + "@cucumber/messages": 24.1.0 - "@cucumber/gherkin@26.2.0": + "@cucumber/html-formatter@21.6.0(@cucumber/messages@24.1.0)": dependencies: - "@cucumber/messages": 22.0.0 + "@cucumber/messages": 24.1.0 - "@cucumber/html-formatter@20.4.0(@cucumber/messages@22.0.0)": + "@cucumber/junit-xml-formatter@0.6.0(@cucumber/messages@24.1.0)": dependencies: - "@cucumber/messages": 22.0.0 + "@cucumber/messages": 24.1.0 + "@cucumber/query": 13.0.2(@cucumber/messages@24.1.0) + "@teppeis/multimaps": 3.0.0 + xmlbuilder: 15.1.1 - "@cucumber/message-streams@4.0.1(@cucumber/messages@22.0.0)": + "@cucumber/message-streams@4.0.1(@cucumber/messages@24.1.0)": dependencies: - "@cucumber/messages": 22.0.0 + "@cucumber/messages": 24.1.0 - "@cucumber/messages@19.1.4": + "@cucumber/messages@24.1.0": dependencies: - "@types/uuid": 8.3.4 + "@types/uuid": 9.0.8 class-transformer: 0.5.1 - reflect-metadata: 0.1.13 - uuid: 9.0.0 + reflect-metadata: 0.2.1 + uuid: 9.0.1 - "@cucumber/messages@22.0.0": + "@cucumber/query@13.0.2(@cucumber/messages@24.1.0)": dependencies: - "@types/uuid": 9.0.1 - class-transformer: 0.5.1 - reflect-metadata: 0.1.13 - uuid: 9.0.0 + "@cucumber/messages": 24.1.0 + "@teppeis/multimaps": 3.0.0 + assert: 2.1.0 + + "@cucumber/tag-expressions@6.1.0": {} + + "@gerrit0/mini-shiki@1.24.1": + dependencies: + "@shikijs/engine-oniguruma": 1.24.1 + "@shikijs/types": 1.24.1 + "@shikijs/vscode-textmate": 9.3.0 + + "@isaacs/cliui@8.0.2": + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + "@napi-rs/cli@2.18.4": {} + + "@pkgjs/parseargs@0.11.0": + optional: true + + "@shikijs/engine-oniguruma@1.24.1": + dependencies: + "@shikijs/types": 1.24.1 + "@shikijs/vscode-textmate": 9.3.0 + + "@shikijs/types@1.24.1": + dependencies: + "@shikijs/vscode-textmate": 9.3.0 + "@types/hast": 3.0.4 - "@cucumber/tag-expressions@5.0.1": {} + "@shikijs/vscode-textmate@9.3.0": {} - "@napi-rs/cli@2.16.3": {} + "@teppeis/multimaps@3.0.0": {} - "@teppeis/multimaps@2.0.0": {} + "@types/hast@3.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/node@22.10.1": + dependencies: + undici-types: 6.20.0 - "@types/node@18.14.5": {} + "@types/normalize-package-data@2.4.4": {} - "@types/uuid@8.3.4": {} + "@types/unist@3.0.3": {} - "@types/uuid@9.0.1": {} + "@types/uuid@9.0.8": {} ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} - ansi-sequence-parser@1.1.1: {} + ansi-regex@6.1.0: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + any-promise@1.3.0: {} - assert-plus@1.0.0: {} + argparse@2.0.1: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.8 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 assertion-error-formatter@3.0.0: dependencies: @@ -958,12 +1574,11 @@ snapshots: pad-right: 0.2.2 repeat-string: 1.6.1 - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: + available-typed-arrays@1.0.7: dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} brace-expansion@2.0.1: dependencies: @@ -971,6 +1586,18 @@ snapshots: buffer-from@1.1.2: {} + call-bind-apply-helpers@1.0.0: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-define-property: 1.0.1 + get-intrinsic: 1.2.5 + set-function-length: 1.2.2 + capital-case@1.0.4: dependencies: no-case: 3.0.4 @@ -998,13 +1625,15 @@ snapshots: commander@10.0.1: {} - commander@9.1.0: {} - - commander@9.4.1: {} + commander@12.0.0: {} - concat-map@0.0.1: {} + commander@9.1.0: {} - core-util-is@1.0.2: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 debug@4.3.5(supports-color@8.1.1): dependencies: @@ -1012,71 +1641,185 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + diff@4.0.2: {} + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.0 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 - escape-string-regexp@1.0.5: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} - extsprintf@1.4.1: {} + escape-string-regexp@1.0.5: {} figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - fs.realpath@1.0.0: {} + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 - glob@7.2.3: + for-each@0.3.3: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + function-bind@1.1.2: {} + + get-intrinsic@1.2.5: + dependencies: + call-bind-apply-helpers: 1.0.0 + dunder-proto: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + function-bind: 1.1.2 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 global-dirs@3.0.1: dependencies: ini: 2.0.0 + gopd@1.2.0: {} + has-ansi@4.0.1: dependencies: ansi-regex: 4.1.1 has-flag@4.0.0: {} - indent-string@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 - inflight@1.0.6: + hasown@2.0.2: dependencies: - once: 1.4.0 - wrappy: 1.0.2 + function-bind: 1.1.2 + + hosted-git-info@2.8.9: {} + + indent-string@4.0.0: {} inherits@2.0.4: {} ini@2.0.0: {} + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-arrayish@0.2.1: {} + + is-callable@1.2.7: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 is-path-inside: 3.0.3 + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + is-path-inside@3.0.3: {} is-stream@2.0.1: {} - jsonc-parser@3.3.1: {} + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.16 + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + "@isaacs/cliui": 8.0.2 + optionalDependencies: + "@pkgjs/parseargs": 0.11.0 + + js-tokens@4.0.0: {} + + json-parse-even-better-errors@2.3.1: {} knuth-shuffle-seeded@1.0.6: dependencies: seed-random: 2.2.0 + lines-and-columns@1.2.4: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + lodash.merge@4.6.2: {} lodash.mergewith@4.6.2: {} @@ -1085,6 +1828,8 @@ snapshots: dependencies: tslib: 2.6.3 + lru-cache@10.4.3: {} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -1093,16 +1838,25 @@ snapshots: luxon@3.2.1: {} - marked@4.3.0: {} - - minimatch@3.1.2: + markdown-it@14.1.0: dependencies: - brace-expansion: 1.1.11 + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + mdurl@2.0.0: {} + + mime@3.0.0: {} minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 + minipass@7.1.2: {} + mkdirp@2.1.6: {} ms@2.1.2: {} @@ -1118,25 +1872,89 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.3 + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + object-assign@4.1.1: {} - once@1.4.0: + object-is@1.1.6: dependencies: - wrappy: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} pad-right@0.2.2: dependencies: repeat-string: 1.6.1 - path-is-absolute@1.0.1: {} + parse-json@5.2.0: + dependencies: + "@babel/code-frame": 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} - prettier@3.0.3: {} + possible-typed-array-names@1.0.0: {} + + prettier@3.4.2: {} progress@2.0.3: {} property-expr@2.0.6: {} - reflect-metadata@0.1.13: {} + punycode.js@2.3.1: {} + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@5.2.0: + dependencies: + "@types/normalize-package-data": 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + reflect-metadata@0.2.1: {} regexp-match-indices@1.0.2: dependencies: @@ -1152,18 +1970,36 @@ snapshots: dependencies: resolve-from: 5.0.0 + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + seed-random@2.2.0: {} + semver@5.7.2: {} + semver@7.5.3: dependencies: lru-cache: 6.0.0 - shiki@0.14.7: + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.5 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: dependencies: - ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.3.1 - vscode-oniguruma: 1.7.0 - vscode-textmate: 8.0.0 + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} source-map-support@0.5.21: dependencies: @@ -1172,9 +2008,23 @@ snapshots: source-map@0.6.1: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.20 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + + spdx-license-ids@3.0.20: {} + stackframe@1.3.4: {} - string-argv@0.3.2: {} + string-argv@0.3.1: {} string-width@4.2.3: dependencies: @@ -1182,10 +2032,20 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -1194,6 +2054,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -1210,17 +2072,28 @@ snapshots: tslib@2.6.3: {} + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + type-fest@2.19.0: {} - typedoc@0.25.1(typescript@5.2.2): + type-fest@4.30.0: {} + + typedoc@0.27.4(typescript@5.7.2): dependencies: + "@gerrit0/mini-shiki": 1.24.1 lunr: 2.3.9 - marked: 4.3.0 + markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 0.14.7 - typescript: 5.2.2 + typescript: 5.7.2 + yaml: 2.6.1 + + typescript@5.7.2: {} + + uc.micro@2.1.0: {} - typescript@5.2.2: {} + undici-types@6.20.0: {} upper-case-first@2.0.2: dependencies: @@ -1228,19 +2101,44 @@ snapshots: util-arity@1.1.0: {} - uuid@9.0.0: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.16 + + uuid@9.0.1: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 - verror@1.10.1: + which-typed-array@1.1.16: dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 - vscode-oniguruma@1.7.0: {} + which@2.0.2: + dependencies: + isexe: 2.0.0 - vscode-textmate@8.0.0: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - wrappy@1.0.2: {} + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 xmlbuilder@15.1.1: {} @@ -1248,6 +2146,8 @@ snapshots: yaml@2.4.5: {} + yaml@2.6.1: {} + yup@1.2.0: dependencies: property-expr: 2.0.6 diff --git a/bindings/nodejs/src/lib.rs b/bindings/nodejs/src/lib.rs index 0e965d634..2af84cfd5 100644 --- a/bindings/nodejs/src/lib.rs +++ b/bindings/nodejs/src/lib.rs @@ -356,6 +356,12 @@ impl RowIterator { #[napi] impl RowIterator { + /// Get Schema for rows. + #[napi] + pub fn schema(&self) -> Schema { + Schema(self.inner.schema().clone()) + } + /// Fetch next row. /// Returns `None` if there are no more rows. #[napi] @@ -366,11 +372,6 @@ impl RowIterator { .map_err(format_napi_error) }) } - /// Get Schema for rows. - #[napi] - pub fn schema(&self) -> Schema { - Schema(self.inner.schema().clone()) - } } #[napi] @@ -387,6 +388,11 @@ impl RowIteratorExt { #[napi] impl RowIteratorExt { + #[napi] + pub fn schema(&self) -> Schema { + Schema(self.inner.schema().clone()) + } + /// Fetch next row or stats. /// Returns `None` if there are no more rows. #[napi] @@ -409,11 +415,6 @@ impl RowIteratorExt { }, } } - - #[napi] - pub fn schema(&self) -> Schema { - Schema(self.inner.schema().clone()) - } } /// Must contain either row or stats. diff --git a/bindings/nodejs/tests/binding.js b/bindings/nodejs/tests/binding.js index 00c4c4b0a..392fc6cf2 100644 --- a/bindings/nodejs/tests/binding.js +++ b/bindings/nodejs/tests/binding.js @@ -14,10 +14,14 @@ * limitations under the License. */ +const { Transform } = require("node:stream"); +const { finished, pipeline } = require("node:stream/promises"); + const assert = require("assert"); -const { Client } = require("../index.js"); const { Given, When, Then } = require("@cucumber/cucumber"); +const { Client } = require("../index.js"); + const dsn = process.env.TEST_DATABEND_DSN ? process.env.TEST_DATABEND_DSN : "databend://root:@localhost:8000/default?sslmode=disable"; @@ -178,18 +182,46 @@ Then("Select numbers should iterate all rows", async function () { assert.deepEqual(ret, expected); } - // iter return with field names + // iter as async iterator + { + let rows = await this.conn.queryIter("SELECT number FROM numbers(5)"); + let ret = []; + for await (const row of rows) { + ret.push(row.values()[0]); + } + const expected = [0, 1, 2, 3, 4]; + assert.deepEqual(ret, expected); + } + + // async iter return with field names { let rows = await this.conn.queryIter("SELECT number as n FROM numbers(5)"); let ret = []; - let row = await rows.next(); - while (row) { + for await (const row of rows) { ret.push(row.data()); - row = await rows.next(); } const expected = [{ n: 0 }, { n: 1 }, { n: 2 }, { n: 3 }, { n: 4 }]; assert.deepEqual(ret, expected); } + + // pipeline transform rows as stream + { + let rows = await this.conn.queryIter("SELECT number FROM numbers(5)"); + const ret = []; + const stream = rows.stream(); + const transformer = new Transform({ + readableObjectMode: true, + writableObjectMode: true, + transform(row, _, callback) { + ret.push(row.values()[0]); + callback(); + }, + }); + await pipeline(stream, transformer); + await finished(stream); + const expected = [0, 1, 2, 3, 4]; + assert.deepEqual(ret, expected); + } }); When("Create a test table", async function () { @@ -212,10 +244,8 @@ Then("Insert and Select should be equal", async function () { (-3, 3, 3.0, '3', '2', '2016-04-04', '2016-04-04 11:30:00')`); const rows = await this.conn.queryIter("SELECT * FROM test"); const ret = []; - let row = await rows.next(); - while (row) { + for await (const row of rows) { ret.push(row.values()); - row = await rows.next(); } const expected = [ [-1, 1, 1.0, "1", "1", new Date("2011-03-06"), new Date("2011-03-06T06:20:00Z")], @@ -237,10 +267,8 @@ Then("Stream load and Select should be equal", async function () { const rows = await this.conn.queryIter("SELECT * FROM test"); const ret = []; - let row = await rows.next(); - while (row) { + for await (const row of rows) { ret.push(row.values()); - row = await rows.next(); } const expected = [ [-1, 1, 1.0, "1", "1", new Date("2011-03-06"), new Date("2011-03-06T06:20:00Z")],