put taler wallet RPC into taler-util, make it cross-platform

This commit is contained in:
Florian Dold 2023-01-26 12:48:35 +01:00
parent c57ba4c0ce
commit 3cc26d00f8
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
18 changed files with 178 additions and 439 deletions

View File

@ -19,7 +19,7 @@
"devDependencies": {
"ava": "^4.3.3",
"rimraf": "^3.0.2",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"@gnu-taler/taler-util": "workspace:*",

View File

@ -45,6 +45,6 @@
"jssha": "^3.2.0",
"mocha": "^9.2.0",
"sass": "1.56.1",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
}
}

View File

@ -61,7 +61,7 @@
"po2json": "^0.4.5",
"preact-render-to-string": "^5.2.6",
"sass": "1.56.1",
"typescript": "4.8.4"
"typescript": "4.9.4"
},
"pogen": {
"domain": "bank"

View File

@ -27,7 +27,7 @@
"esm": "^3.2.25",
"prettier": "^2.5.1",
"rimraf": "^3.0.2",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"tslib": "^2.4.0"

View File

@ -87,6 +87,6 @@
"script-ext-html-webpack-plugin": "^2.1.5",
"sirv-cli": "^1.0.11",
"tslib": "2.4.0",
"typescript": "4.8.4"
"typescript": "4.9.4"
}
}

View File

@ -76,6 +76,6 @@
"sass": "1.56.1",
"source-map-support": "^0.5.21",
"typedoc": "^0.20.36",
"typescript": "4.8.4"
"typescript": "4.9.4"
}
}

View File

@ -12,7 +12,7 @@
},
"devDependencies": {
"po2json": "^0.4.5",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"@types/node": "^18.11.17",

View File

@ -31,10 +31,10 @@
],
"devDependencies": {
"@types/node": "^18.11.17",
"esbuild": "^0.15.13",
"prettier": "^2.5.1",
"rimraf": "^3.0.2",
"typescript": "^4.8.4",
"esbuild": "^0.15.13"
"typescript": "^4.9.4"
},
"dependencies": {
"@gnu-taler/taler-util": "workspace:*",

View File

@ -12,6 +12,15 @@
"node": "./lib/index.node.js",
"browser": "./lib/index.browser.js",
"default": "./lib/index.js"
},
"./twrpc": {
"default": "./lib/twrpc.js"
}
},
"imports": {
"#twrpc-impl": {
"node": "./lib/twrpc-impl.node.js",
"default": "./lib/twrpc-impl.missing.js"
}
},
"scripts": {
@ -27,7 +36,7 @@
"esbuild": "^0.14.21",
"prettier": "^2.5.1",
"rimraf": "^3.0.2",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"big-integer": "^1.6.51",

View File

@ -4,11 +4,11 @@
"composite": true,
"declaration": true,
"declarationMap": false,
"target": "ES6",
"module": "ESNext",
"moduleResolution": "Node16",
"target": "ES2020",
"module": "ES2020",
"moduleResolution": "node16",
"sourceMap": true,
"lib": ["es6"],
"lib": ["ES2020"],
"types": ["node"],
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,

View File

@ -42,7 +42,7 @@
"rollup-plugin-sourcemaps": "^0.6.3",
"rollup-plugin-terser": "^7.0.2",
"typedoc": "^0.23.16",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"@gnu-taler/taler-util": "workspace:*",

View File

@ -24,7 +24,6 @@ import {
clk,
codecForList,
codecForString,
CoreApiMessageEnvelope,
CoreApiRequestEnvelope,
CoreApiResponse,
decodeCrock,
@ -45,7 +44,6 @@ import {
openPromise,
TalerCryptoInterface,
TalerError,
WalletCoreResponseType,
} from "@gnu-taler/taler-wallet-core";
import {
CryptoDispatcher,
@ -64,7 +62,11 @@ import {
} from "@gnu-taler/taler-wallet-core";
import fs from "fs";
import os from "os";
import { connectRpc, JsonMessage, runRpcServer } from "./rpc.js";
import {
connectRpc,
JsonMessage,
runRpcServer,
} from "@gnu-taler/taler-util/twrpc";
// This module also serves as the entry point for the crypto
// thread worker, and thus must expose these two handlers.

View File

@ -1,266 +0,0 @@
/*
This file is part of GNU Taler
(C) 2023 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* Implementation for the wallet-core IPC protocol.
*
* Currently the protcol is completely unstable and only used internally
* by the wallet for testing purposes.
*/
/**
* Imports.
*/
import * as net from "node:net";
import * as fs from "node:fs";
import { bytesToString, Logger, typedArrayConcat } from "@gnu-taler/taler-util";
const logger = new Logger("rpc.ts");
export type JsonMessage =
| string
| number
| boolean
| null
| JsonMessage[]
| { [key: string]: JsonMessage };
export interface RpcServerClientHandlers {
onMessage(msg: JsonMessage): void;
onDisconnect(): void;
}
export interface RpcServerClient {
sendResponse(message: JsonMessage): void;
}
export interface RpcServerArgs {
socketFilename: string;
onConnect(client: RpcServerClient): RpcServerClientHandlers;
}
export interface RpcClientServerConnection {
sendMessage(m: JsonMessage): void;
close(): void;
}
export interface RpcConnectArgs<T> {
socketFilename: string;
onEstablished(connection: RpcClientServerConnection): {
result: T;
onDisconnect(): void;
onMessage(m: JsonMessage): void;
};
}
export interface ReadLinewiseArgs {
onLine(lineData: Uint8Array): void;
sock: net.Socket;
}
function readStreamLinewise(args: ReadLinewiseArgs): void {
let chunks: Uint8Array[] = [];
args.sock.on("data", (buf: Uint8Array) => {
logger.info(`received ${buf.length} bytes`);
// Process all newlines in the newly received buffer
while (1) {
const newlineIdx = buf.indexOf("\n".charCodeAt(0));
if (newlineIdx >= 0) {
let left = buf.subarray(0, newlineIdx + 1);
let right = buf.subarray(newlineIdx + 1);
chunks.push(left);
const line = typedArrayConcat(chunks);
args.onLine(line);
chunks = [];
buf = right;
} else {
chunks.push(buf);
break;
}
}
});
}
export async function connectRpc<T>(args: RpcConnectArgs<T>): Promise<T> {
let sockFilename = args.socketFilename;
return new Promise((resolve, reject) => {
const client = net.createConnection(sockFilename);
client.on("connect", () => {
let parsingBody: string | undefined = undefined;
let bodyChunks: string[] = [];
logger.info("connected!");
client.write("%hello-from-client\n");
const res = args.onEstablished({
sendMessage(m) {
client.write("%request\n");
client.write(JSON.stringify(m));
client.write("\n");
client.write("%end\n");
},
close() {
client.destroy();
},
});
readStreamLinewise({
sock: client,
onLine(line) {
const lineStr = bytesToString(line);
logger.info(`got line from server: ${lineStr}`);
// Are we currently parsing the body of a request?
if (!parsingBody) {
const strippedLine = lineStr.trim();
if (strippedLine == "%message") {
logger.info("got message start");
parsingBody = "message";
} else if (strippedLine == "%hello-from-server") {
logger.info("got hello from server");
} else if (strippedLine.startsWith("%error:")) {
logger.info("got error from server, disconnecting");
client.end();
res.onDisconnect();
} else {
logger.info("got unknown request");
client.write("%error: invalid message\n");
client.end();
}
} else if (parsingBody == "message") {
const strippedLine = lineStr.trim();
if (strippedLine == "%end") {
logger.info("finished request");
let req = bodyChunks.join("");
let reqJson: any = undefined;
try {
reqJson = JSON.parse(req);
} catch (e) {
logger.warn("JSON request was invalid");
}
if (reqJson !== undefined) {
logger.info(`request: ${req}`);
res.onMessage(reqJson);
} else {
client.write("%error: invalid JSON");
client.end();
}
bodyChunks = [];
} else {
bodyChunks.push(lineStr);
}
} else {
logger.info("invalid parser state");
client.write("%error: internal error\n");
client.end();
}
},
});
client.on("close", () => {
res.onDisconnect();
});
client.on("data", () => {});
resolve(res.result);
});
});
}
export async function runRpcServer(args: RpcServerArgs): Promise<void> {
let sockFilename = args.socketFilename;
try {
fs.unlinkSync(sockFilename);
} catch (e) {
// Do nothing!
}
return new Promise((resolve, reject) => {
const server = net.createServer((sock) => {
// Are we currently parsing the body of a request?
let parsingBody: string | undefined = undefined;
let bodyChunks: string[] = [];
logger.info("got new connection");
sock.write("%hello-from-server\n");
const handlers = args.onConnect({
sendResponse(message) {
sock.write("%message\n");
sock.write(JSON.stringify(message));
sock.write("\n");
sock.write("%end\n");
},
});
sock.on("error", (err) => {
logger.info(`connection error: ${err}`);
});
function processLine(line: Uint8Array) {
const lineStr = bytesToString(line);
logger.info(`got line: ${lineStr}`);
if (!parsingBody) {
const strippedLine = lineStr.trim();
if (strippedLine == "%request") {
logger.info("got request start");
parsingBody = "request";
} else if (strippedLine === "%hello-from-client") {
console.log("got hello from client");
} else if (strippedLine.startsWith("%error:")) {
console.log("got error from client");
sock.end();
handlers.onDisconnect();
} else {
logger.info("got unknown request");
sock.write("%error: invalid request\n");
sock.end();
}
} else if (parsingBody == "request") {
const strippedLine = lineStr.trim();
if (strippedLine == "%end") {
logger.info("finished request");
let req = bodyChunks.join("");
let reqJson: any = undefined;
try {
reqJson = JSON.parse(req);
} catch (e) {
logger.warn("JSON request was invalid");
}
if (reqJson !== undefined) {
logger.info(`request: ${req}`);
handlers.onMessage(reqJson);
} else {
sock.write("%error: invalid JSON");
sock.end();
}
bodyChunks = [];
} else {
bodyChunks.push(lineStr);
}
} else {
logger.info("invalid parser state");
sock.write("%error: internal error\n");
sock.end();
}
}
readStreamLinewise({
sock,
onLine: processLine,
});
sock.on("close", (hadError: boolean) => {
logger.info(`connection closed, hadError=${hadError}`);
handlers.onDisconnect();
});
});
server.listen("wallet-core.sock");
});
}

View File

@ -21,7 +21,7 @@
"baseUrl": "./src",
"typeRoots": ["./node_modules/@types"]
},
"include": ["src/**/*"],
"include": ["src/**/*", "../taler-util/src/twrpc.ts"],
"references": [
{
"path": "../taler-wallet-core/"

View File

@ -56,7 +56,7 @@
"prettier": "^2.5.1",
"rimraf": "^3.0.2",
"typedoc": "^0.23.16",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"@gnu-taler/idb-bridge": "workspace:*",

View File

@ -39,7 +39,7 @@
"rollup": "^2.79.0",
"rollup-plugin-sourcemaps": "^0.6.3",
"rollup-plugin-terser": "^7.0.2",
"typescript": "^4.8.4"
"typescript": "^4.9.4"
},
"dependencies": {
"@gnu-taler/idb-bridge": "workspace:*",

View File

@ -39,7 +39,7 @@
"rimraf": "^3.0.2",
"swr": "1.3.0",
"tslib": "^2.4.0",
"typescript": "^4.8.4",
"typescript": "^4.9.4",
"ws": "7.4.5"
}
}

View File

@ -32,7 +32,7 @@ importers:
node-fetch: ^3.2.0
rimraf: ^3.0.2
tslib: ^2.4.0
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@gnu-taler/taler-util': link:../taler-util
fetch-ponyfill: 7.1.0
@ -43,7 +43,7 @@ importers:
devDependencies:
ava: 4.3.3
rimraf: 3.0.2
typescript: 4.8.4
typescript: 4.9.4
packages/anastasis-webui:
specifiers:
@ -66,7 +66,7 @@ importers:
preact-router: ^3.2.1
qrcode-generator: ^1.4.4
sass: 1.56.1
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@gnu-taler/anastasis-core': link:../anastasis-core
'@gnu-taler/taler-util': link:../taler-util
@ -88,7 +88,7 @@ importers:
jssha: 3.3.0
mocha: 9.2.2
sass: 1.56.1
typescript: 4.8.4
typescript: 4.9.4
packages/demobank-ui:
specifiers:
@ -120,7 +120,7 @@ importers:
qrcode-generator: ^1.4.4
sass: 1.56.1
swr: 1.3.0
typescript: 4.8.4
typescript: 4.9.4
dependencies:
'@gnu-taler/taler-util': link:../taler-util
'@gnu-taler/web-util': link:../web-util
@ -138,20 +138,20 @@ importers:
'@types/history': 4.7.11
'@types/mocha': 10.0.1
'@types/node': 18.11.17
'@typescript-eslint/eslint-plugin': 5.41.0_2dmizcyfdgb4npqs6z4fehioli
'@typescript-eslint/parser': 5.41.0_typescript@4.8.4
'@typescript-eslint/eslint-plugin': 5.41.0_2kpzrn7ygxrevwp2scfdydbp5u
'@typescript-eslint/parser': 5.41.0_typescript@4.9.4
async_hooks: 1.0.0
bulma: 0.9.4
bulma-checkbox: 1.2.1
bulma-radio: 1.2.0
chai: 4.3.6
esbuild: 0.15.12
eslint-config-preact: 1.3.0_qqbgcrpnpybc6dh47gt272vyy4
eslint-config-preact: 1.3.0_lil2cmm3hdnj5md4t7zvysxria
mocha: 9.2.2
po2json: 0.4.5
preact-render-to-string: 5.2.6_preact@10.11.3
sass: 1.56.1
typescript: 4.8.4
typescript: 4.9.4
packages/idb-bridge:
specifiers:
@ -161,7 +161,7 @@ importers:
prettier: ^2.5.1
rimraf: ^3.0.2
tslib: ^2.4.0
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
tslib: 2.4.0
devDependencies:
@ -170,7 +170,7 @@ importers:
esm: 3.2.25
prettier: 2.7.1
rimraf: 3.0.2
typescript: 4.8.4
typescript: 4.9.4
packages/merchant-backend-ui:
specifiers:
@ -220,7 +220,7 @@ importers:
sirv-cli: ^1.0.11
swr: ^0.5.5
tslib: 2.4.0
typescript: 4.8.4
typescript: 4.9.4
yup: ^0.32.9
dependencies:
'@gnu-taler/taler-util': link:../taler-util
@ -250,16 +250,16 @@ importers:
'@rollup/plugin-image': 2.1.1_rollup@2.79.1
'@rollup/plugin-json': 4.1.0_rollup@2.79.1
'@rollup/plugin-replace': 3.1.0_rollup@2.79.1
'@rollup/plugin-typescript': 11.0.0_hafrwlgfjmvsm7253l3bfjzhnq
'@rollup/plugin-typescript': 11.0.0_ds5km5eydjug3un6mvhihxeysu
'@types/history': 4.7.11
'@types/mocha': 8.2.3
'@types/mustache': 4.2.1
'@typescript-eslint/eslint-plugin': 4.33.0_k4l66av2tbo6kxzw52jzgbfzii
'@typescript-eslint/parser': 4.33.0_3rubbgt5ekhqrcgx4uwls3neim
'@typescript-eslint/eslint-plugin': 4.33.0_thyv6urrmcfyirt6hwk42bhgva
'@typescript-eslint/parser': 4.33.0_yfqovispp7u7jaktymfaqwl2py
babel-loader: 8.2.5_@babel+core@7.18.9
base64-inline-loader: 1.1.1
eslint: 7.32.0
eslint-config-preact: 1.3.0_pycg7frr72nxxf2dj537ozbyqq
eslint-config-preact: 1.3.0_5pwk54o5tlhc4soplldymjdyka
eslint-plugin-header: 3.1.1_eslint@7.32.0
mustache: 4.2.0
po2json: 0.4.5
@ -271,7 +271,7 @@ importers:
script-ext-html-webpack-plugin: 2.1.5
sirv-cli: 1.0.14
tslib: 2.4.0
typescript: 4.8.4
typescript: 4.9.4
packages/merchant-backoffice-ui:
specifiers:
@ -315,7 +315,7 @@ importers:
source-map-support: ^0.5.21
swr: 1.3.0
typedoc: ^0.20.36
typescript: 4.8.4
typescript: 4.9.4
yup: ^0.32.9
dependencies:
'@gnu-taler/taler-util': link:../taler-util
@ -335,8 +335,8 @@ importers:
'@types/history': 4.7.11
'@types/mocha': 8.2.3
'@types/node': 18.11.17
'@typescript-eslint/eslint-plugin': 4.33.0_k4l66av2tbo6kxzw52jzgbfzii
'@typescript-eslint/parser': 4.33.0_3rubbgt5ekhqrcgx4uwls3neim
'@typescript-eslint/eslint-plugin': 4.33.0_thyv6urrmcfyirt6hwk42bhgva
'@typescript-eslint/parser': 4.33.0_yfqovispp7u7jaktymfaqwl2py
base64-inline-loader: 1.1.1
bulma: 0.9.4
bulma-checkbox: 1.2.1
@ -348,7 +348,7 @@ importers:
chai: 4.3.6
dotenv: 8.6.0
eslint: 7.32.0
eslint-config-preact: 1.3.0_pycg7frr72nxxf2dj537ozbyqq
eslint-config-preact: 1.3.0_5pwk54o5tlhc4soplldymjdyka
eslint-plugin-header: 3.1.1_eslint@7.32.0
html-webpack-inline-chunk-plugin: 1.1.1
html-webpack-inline-source-plugin: 0.0.10
@ -359,21 +359,21 @@ importers:
rimraf: 3.0.2
sass: 1.56.1
source-map-support: 0.5.21
typedoc: 0.20.37_typescript@4.8.4
typescript: 4.8.4
typedoc: 0.20.37_typescript@4.9.4
typescript: 4.9.4
packages/pogen:
specifiers:
'@types/node': ^18.11.17
glob: ^7.2.0
po2json: ^0.4.5
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@types/node': 18.11.17
glob: 7.2.3
devDependencies:
po2json: 0.4.5
typescript: 4.8.4
typescript: 4.9.4
packages/taler-harness:
specifiers:
@ -385,7 +385,7 @@ importers:
prettier: ^2.5.1
rimraf: ^3.0.2
tslib: ^2.4.0
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@gnu-taler/taler-util': link:../taler-util
'@gnu-taler/taler-wallet-core': link:../taler-wallet-core
@ -396,7 +396,7 @@ importers:
esbuild: 0.15.13
prettier: 2.7.1
rimraf: 3.0.2
typescript: 4.8.4
typescript: 4.9.4
packages/taler-util:
specifiers:
@ -409,7 +409,7 @@ importers:
prettier: ^2.5.1
rimraf: ^3.0.2
tslib: ^2.4.0
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
big-integer: 1.6.51
fflate: 0.7.4
@ -421,7 +421,7 @@ importers:
esbuild: 0.14.54
prettier: 2.7.1
rimraf: 3.0.2
typescript: 4.8.4
typescript: 4.9.4
packages/taler-wallet-cli:
specifiers:
@ -439,7 +439,7 @@ importers:
rollup-plugin-terser: ^7.0.2
tslib: ^2.4.0
typedoc: ^0.23.16
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@gnu-taler/taler-util': link:../taler-util
'@gnu-taler/taler-wallet-core': link:../taler-wallet-core
@ -455,8 +455,8 @@ importers:
rollup: 2.79.1
rollup-plugin-sourcemaps: 0.6.3_bipou45jdaxtftg6fcql4vnhdm
rollup-plugin-terser: 7.0.2_rollup@2.79.1
typedoc: 0.23.18_typescript@4.8.4
typescript: 4.8.4
typedoc: 0.23.18_typescript@4.9.4
typescript: 4.9.4
packages/taler-wallet-core:
specifiers:
@ -484,7 +484,7 @@ importers:
rimraf: ^3.0.2
tslib: ^2.4.0
typedoc: ^0.23.16
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@gnu-taler/idb-bridge': link:../idb-bridge
'@gnu-taler/taler-util': link:../taler-util
@ -496,8 +496,8 @@ importers:
devDependencies:
'@ava/typescript': 3.0.1
'@gnu-taler/pogen': link:../pogen
'@typescript-eslint/eslint-plugin': 5.41.0_huremdigmcnkianavgfk3x6iou
'@typescript-eslint/parser': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/eslint-plugin': 5.41.0_b5xhfrgxhcelhgpcwhcuffyfeu
'@typescript-eslint/parser': 5.41.0_v5bglvupnukcksncywgdzapdrq
ava: 4.3.3_@ava+typescript@3.0.1
c8: 7.12.0
eslint: 8.26.0
@ -510,8 +510,8 @@ importers:
po2json: 0.4.5
prettier: 2.7.1
rimraf: 3.0.2
typedoc: 0.23.18_typescript@4.8.4
typescript: 4.8.4
typedoc: 0.23.18_typescript@4.9.4
typescript: 4.9.4
packages/taler-wallet-embedded:
specifiers:
@ -529,7 +529,7 @@ importers:
rollup-plugin-sourcemaps: ^0.6.3
rollup-plugin-terser: ^7.0.2
tslib: ^2.4.0
typescript: ^4.8.4
typescript: ^4.9.4
dependencies:
'@gnu-taler/idb-bridge': link:../idb-bridge
'@gnu-taler/taler-util': link:../taler-util
@ -546,7 +546,7 @@ importers:
rollup: 2.79.1
rollup-plugin-sourcemaps: 0.6.3_bipou45jdaxtftg6fcql4vnhdm
rollup-plugin-terser: 7.0.2_rollup@2.79.1
typescript: 4.8.4
typescript: 4.9.4
packages/taler-wallet-webextension:
specifiers:
@ -642,7 +642,7 @@ importers:
rimraf: ^3.0.2
swr: 1.3.0
tslib: ^2.4.0
typescript: ^4.8.4
typescript: ^4.9.4
ws: 7.4.5
devDependencies:
'@gnu-taler/taler-util': link:../taler-util
@ -660,7 +660,7 @@ importers:
rimraf: 3.0.2
swr: 1.3.0
tslib: 2.4.1
typescript: 4.8.4
typescript: 4.9.4
ws: 7.4.5
packages:
@ -3646,7 +3646,7 @@ packages:
rollup: 2.79.1
dev: true
/@rollup/plugin-typescript/11.0.0_hafrwlgfjmvsm7253l3bfjzhnq:
/@rollup/plugin-typescript/11.0.0_ds5km5eydjug3un6mvhihxeysu:
resolution: {integrity: sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -3663,7 +3663,7 @@ packages:
resolve: 1.22.1
rollup: 2.79.1
tslib: 2.4.0
typescript: 4.8.4
typescript: 4.9.4
dev: true
/@rollup/pluginutils/3.1.0_rollup@2.79.1:
@ -3963,7 +3963,7 @@ packages:
'@types/node': 18.11.17
dev: true
/@typescript-eslint/eslint-plugin/4.33.0_k4l66av2tbo6kxzw52jzgbfzii:
/@typescript-eslint/eslint-plugin/4.33.0_thyv6urrmcfyirt6hwk42bhgva:
resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==}
engines: {node: ^10.12.0 || >=12.0.0}
peerDependencies:
@ -3974,8 +3974,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/experimental-utils': 4.33.0_3rubbgt5ekhqrcgx4uwls3neim
'@typescript-eslint/parser': 4.33.0_3rubbgt5ekhqrcgx4uwls3neim
'@typescript-eslint/experimental-utils': 4.33.0_yfqovispp7u7jaktymfaqwl2py
'@typescript-eslint/parser': 4.33.0_yfqovispp7u7jaktymfaqwl2py
'@typescript-eslint/scope-manager': 4.33.0
debug: 4.3.4
eslint: 7.32.0
@ -3983,13 +3983,13 @@ packages:
ignore: 5.2.0
regexpp: 3.2.0
semver: 7.3.8
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/eslint-plugin/5.41.0_2dmizcyfdgb4npqs6z4fehioli:
/@typescript-eslint/eslint-plugin/5.41.0_2kpzrn7ygxrevwp2scfdydbp5u:
resolution: {integrity: sha512-DXUS22Y57/LAFSg3x7Vi6RNAuLpTXwxB9S2nIA7msBb/Zt8p7XqMwdpdc1IU7CkOQUPgAqR5fWvxuKCbneKGmA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4000,21 +4000,21 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': 5.41.0_typescript@4.8.4
'@typescript-eslint/parser': 5.41.0_typescript@4.9.4
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/type-utils': 5.41.0_typescript@4.8.4
'@typescript-eslint/utils': 5.41.0_typescript@4.8.4
'@typescript-eslint/type-utils': 5.41.0_typescript@4.9.4
'@typescript-eslint/utils': 5.41.0_typescript@4.9.4
debug: 4.3.4
ignore: 5.2.0
regexpp: 3.2.0
semver: 7.3.8
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/eslint-plugin/5.41.0_huremdigmcnkianavgfk3x6iou:
/@typescript-eslint/eslint-plugin/5.41.0_b5xhfrgxhcelhgpcwhcuffyfeu:
resolution: {integrity: sha512-DXUS22Y57/LAFSg3x7Vi6RNAuLpTXwxB9S2nIA7msBb/Zt8p7XqMwdpdc1IU7CkOQUPgAqR5fWvxuKCbneKGmA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4025,22 +4025,22 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/parser': 5.41.0_v5bglvupnukcksncywgdzapdrq
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/type-utils': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/utils': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/type-utils': 5.41.0_v5bglvupnukcksncywgdzapdrq
'@typescript-eslint/utils': 5.41.0_v5bglvupnukcksncywgdzapdrq
debug: 4.3.4
eslint: 8.26.0
ignore: 5.2.0
regexpp: 3.2.0
semver: 7.3.8
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/experimental-utils/4.33.0_3rubbgt5ekhqrcgx4uwls3neim:
/@typescript-eslint/experimental-utils/4.33.0_yfqovispp7u7jaktymfaqwl2py:
resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==}
engines: {node: ^10.12.0 || >=12.0.0}
peerDependencies:
@ -4049,7 +4049,7 @@ packages:
'@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 4.33.0
'@typescript-eslint/types': 4.33.0
'@typescript-eslint/typescript-estree': 4.33.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 4.33.0_typescript@4.9.4
eslint: 7.32.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@7.32.0
@ -4058,32 +4058,32 @@ packages:
- typescript
dev: true
/@typescript-eslint/experimental-utils/5.41.0_3rubbgt5ekhqrcgx4uwls3neim:
/@typescript-eslint/experimental-utils/5.41.0_typescript@4.9.4:
resolution: {integrity: sha512-/qxT2Kd2q/A22JVIllvws4rvc00/3AT4rAo/0YgEN28y+HPhbJbk6X4+MAHEoZzpNyAOugIT7D/OLnKBW8FfhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@typescript-eslint/utils': 5.41.0_3rubbgt5ekhqrcgx4uwls3neim
'@typescript-eslint/utils': 5.41.0_typescript@4.9.4
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/experimental-utils/5.41.0_yfqovispp7u7jaktymfaqwl2py:
resolution: {integrity: sha512-/qxT2Kd2q/A22JVIllvws4rvc00/3AT4rAo/0YgEN28y+HPhbJbk6X4+MAHEoZzpNyAOugIT7D/OLnKBW8FfhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@typescript-eslint/utils': 5.41.0_yfqovispp7u7jaktymfaqwl2py
eslint: 7.32.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/experimental-utils/5.41.0_typescript@4.8.4:
resolution: {integrity: sha512-/qxT2Kd2q/A22JVIllvws4rvc00/3AT4rAo/0YgEN28y+HPhbJbk6X4+MAHEoZzpNyAOugIT7D/OLnKBW8FfhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@typescript-eslint/utils': 5.41.0_typescript@4.8.4
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/parser/4.33.0_3rubbgt5ekhqrcgx4uwls3neim:
/@typescript-eslint/parser/4.33.0_yfqovispp7u7jaktymfaqwl2py:
resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==}
engines: {node: ^10.12.0 || >=12.0.0}
peerDependencies:
@ -4095,15 +4095,15 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 4.33.0
'@typescript-eslint/types': 4.33.0
'@typescript-eslint/typescript-estree': 4.33.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 4.33.0_typescript@4.9.4
debug: 4.3.4
eslint: 7.32.0
typescript: 4.8.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser/5.41.0_typescript@4.8.4:
/@typescript-eslint/parser/5.41.0_typescript@4.9.4:
resolution: {integrity: sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4115,14 +4115,14 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/types': 5.41.0
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
debug: 4.3.4
typescript: 4.8.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser/5.41.0_wyqvi574yv7oiwfeinomdzmc3m:
/@typescript-eslint/parser/5.41.0_v5bglvupnukcksncywgdzapdrq:
resolution: {integrity: sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4134,10 +4134,10 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/types': 5.41.0
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
debug: 4.3.4
eslint: 8.26.0
typescript: 4.8.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
@ -4158,7 +4158,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.41.0
dev: true
/@typescript-eslint/type-utils/5.41.0_typescript@4.8.4:
/@typescript-eslint/type-utils/5.41.0_typescript@4.9.4:
resolution: {integrity: sha512-L30HNvIG6A1Q0R58e4hu4h+fZqaO909UcnnPbwKiN6Rc3BUEx6ez2wgN7aC0cBfcAjZfwkzE+E2PQQ9nEuoqfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4168,16 +4168,16 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
'@typescript-eslint/utils': 5.41.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
'@typescript-eslint/utils': 5.41.0_typescript@4.9.4
debug: 4.3.4
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/type-utils/5.41.0_wyqvi574yv7oiwfeinomdzmc3m:
/@typescript-eslint/type-utils/5.41.0_v5bglvupnukcksncywgdzapdrq:
resolution: {integrity: sha512-L30HNvIG6A1Q0R58e4hu4h+fZqaO909UcnnPbwKiN6Rc3BUEx6ez2wgN7aC0cBfcAjZfwkzE+E2PQQ9nEuoqfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4187,12 +4187,12 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
'@typescript-eslint/utils': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
'@typescript-eslint/utils': 5.41.0_v5bglvupnukcksncywgdzapdrq
debug: 4.3.4
eslint: 8.26.0
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
@ -4207,7 +4207,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/typescript-estree/4.33.0_typescript@4.8.4:
/@typescript-eslint/typescript-estree/4.33.0_typescript@4.9.4:
resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==}
engines: {node: ^10.12.0 || >=12.0.0}
peerDependencies:
@ -4222,13 +4222,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.8
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/typescript-estree/5.41.0_typescript@4.8.4:
/@typescript-eslint/typescript-estree/5.41.0_typescript@4.9.4:
resolution: {integrity: sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4243,13 +4243,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.8
tsutils: 3.21.0_typescript@4.8.4
typescript: 4.8.4
tsutils: 3.21.0_typescript@4.9.4
typescript: 4.9.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils/5.41.0_3rubbgt5ekhqrcgx4uwls3neim:
/@typescript-eslint/utils/5.41.0_typescript@4.9.4:
resolution: {integrity: sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4259,27 +4259,7 @@ packages:
'@types/semver': 7.3.12
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/types': 5.41.0
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
eslint: 7.32.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@7.32.0
semver: 7.3.8
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/utils/5.41.0_typescript@4.8.4:
resolution: {integrity: sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@types/json-schema': 7.0.11
'@types/semver': 7.3.12
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/types': 5.41.0
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
eslint-scope: 5.1.1
eslint-utils: 3.0.0
semver: 7.3.8
@ -4288,7 +4268,7 @@ packages:
- typescript
dev: true
/@typescript-eslint/utils/5.41.0_wyqvi574yv7oiwfeinomdzmc3m:
/@typescript-eslint/utils/5.41.0_v5bglvupnukcksncywgdzapdrq:
resolution: {integrity: sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4298,7 +4278,7 @@ packages:
'@types/semver': 7.3.12
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/types': 5.41.0
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.8.4
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
eslint: 8.26.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.26.0
@ -4308,6 +4288,26 @@ packages:
- typescript
dev: true
/@typescript-eslint/utils/5.41.0_yfqovispp7u7jaktymfaqwl2py:
resolution: {integrity: sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@types/json-schema': 7.0.11
'@types/semver': 7.3.12
'@typescript-eslint/scope-manager': 5.41.0
'@typescript-eslint/types': 5.41.0
'@typescript-eslint/typescript-estree': 5.41.0_typescript@4.9.4
eslint: 7.32.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@7.32.0
semver: 7.3.8
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/visitor-keys/4.33.0:
resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==}
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
@ -8074,14 +8074,14 @@ packages:
eslint: ^7.32.0 || ^8.2.0
eslint-plugin-import: ^2.25.3
dependencies:
'@typescript-eslint/eslint-plugin': 5.41.0_huremdigmcnkianavgfk3x6iou
'@typescript-eslint/parser': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/eslint-plugin': 5.41.0_b5xhfrgxhcelhgpcwhcuffyfeu
'@typescript-eslint/parser': 5.41.0_v5bglvupnukcksncywgdzapdrq
eslint: 8.26.0
eslint-config-airbnb-base: 15.0.0_mynvxvmq5qtyojffiqgev4x7mm
eslint-plugin-import: 2.26.0_c2flhriocdzler6lrwbyxxyoca
dev: true
/eslint-config-preact/1.3.0_pycg7frr72nxxf2dj537ozbyqq:
/eslint-config-preact/1.3.0_5pwk54o5tlhc4soplldymjdyka:
resolution: {integrity: sha512-yHYXg5qNzEJd3D/30AmsIW0W8MuY858KpApXp7xxBF08IYUljSKCOqMx+dVucXHQnAm7+11wOnMkgVHIBAechw==}
peerDependencies:
eslint: 6.x || 7.x || 8.x
@ -8093,7 +8093,7 @@ packages:
'@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.9
eslint: 7.32.0
eslint-plugin-compat: 4.0.2_eslint@7.32.0
eslint-plugin-jest: 25.7.0_pycg7frr72nxxf2dj537ozbyqq
eslint-plugin-jest: 25.7.0_5pwk54o5tlhc4soplldymjdyka
eslint-plugin-react: 7.31.10_eslint@7.32.0
eslint-plugin-react-hooks: 4.6.0_eslint@7.32.0
transitivePeerDependencies:
@ -8103,7 +8103,7 @@ packages:
- typescript
dev: true
/eslint-config-preact/1.3.0_qqbgcrpnpybc6dh47gt272vyy4:
/eslint-config-preact/1.3.0_lil2cmm3hdnj5md4t7zvysxria:
resolution: {integrity: sha512-yHYXg5qNzEJd3D/30AmsIW0W8MuY858KpApXp7xxBF08IYUljSKCOqMx+dVucXHQnAm7+11wOnMkgVHIBAechw==}
peerDependencies:
eslint: 6.x || 7.x || 8.x
@ -8114,7 +8114,7 @@ packages:
'@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.18.9
'@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.9
eslint-plugin-compat: 4.0.2
eslint-plugin-jest: 25.7.0_qqbgcrpnpybc6dh47gt272vyy4
eslint-plugin-jest: 25.7.0_lil2cmm3hdnj5md4t7zvysxria
eslint-plugin-react: 7.31.10
eslint-plugin-react-hooks: 4.6.0
transitivePeerDependencies:
@ -8163,7 +8163,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/parser': 5.41.0_v5bglvupnukcksncywgdzapdrq
debug: 3.2.7
eslint: 8.26.0
eslint-import-resolver-node: 0.3.6
@ -8222,7 +8222,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.41.0_wyqvi574yv7oiwfeinomdzmc3m
'@typescript-eslint/parser': 5.41.0_v5bglvupnukcksncywgdzapdrq
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
@ -8243,7 +8243,7 @@ packages:
- supports-color
dev: true
/eslint-plugin-jest/25.7.0_pycg7frr72nxxf2dj537ozbyqq:
/eslint-plugin-jest/25.7.0_5pwk54o5tlhc4soplldymjdyka:
resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
peerDependencies:
@ -8256,15 +8256,15 @@ packages:
jest:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 4.33.0_k4l66av2tbo6kxzw52jzgbfzii
'@typescript-eslint/experimental-utils': 5.41.0_3rubbgt5ekhqrcgx4uwls3neim
'@typescript-eslint/eslint-plugin': 4.33.0_thyv6urrmcfyirt6hwk42bhgva
'@typescript-eslint/experimental-utils': 5.41.0_yfqovispp7u7jaktymfaqwl2py
eslint: 7.32.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/eslint-plugin-jest/25.7.0_qqbgcrpnpybc6dh47gt272vyy4:
/eslint-plugin-jest/25.7.0_lil2cmm3hdnj5md4t7zvysxria:
resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
peerDependencies:
@ -8277,8 +8277,8 @@ packages:
jest:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 5.41.0_2dmizcyfdgb4npqs6z4fehioli
'@typescript-eslint/experimental-utils': 5.41.0_typescript@4.8.4
'@typescript-eslint/eslint-plugin': 5.41.0_2kpzrn7ygxrevwp2scfdydbp5u
'@typescript-eslint/experimental-utils': 5.41.0_typescript@4.9.4
transitivePeerDependencies:
- supports-color
- typescript
@ -14977,14 +14977,14 @@ packages:
/tslib/2.4.1:
resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
/tsutils/3.21.0_typescript@4.8.4:
/tsutils/3.21.0_typescript@4.9.4:
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies:
tslib: 1.14.1
typescript: 4.8.4
typescript: 4.9.4
dev: true
/tty-browserify/0.0.0:
@ -15062,7 +15062,7 @@ packages:
engines: {node: '>= 8'}
dev: true
/typedoc/0.20.37_typescript@4.8.4:
/typedoc/0.20.37_typescript@4.9.4:
resolution: {integrity: sha512-9+qDhdc4X00qTNOtii6QX2z7ndAeWVOso7w3MPSoSJdXlVhpwPfm1yEp4ooKuWA9fiQILR8FKkyjmeqa13hBbw==}
engines: {node: '>= 10.8.0'}
hasBin: true
@ -15080,10 +15080,10 @@ packages:
shelljs: 0.8.5
shiki: 0.9.15
typedoc-default-themes: 0.12.10
typescript: 4.8.4
typescript: 4.9.4
dev: true
/typedoc/0.23.18_typescript@4.8.4:
/typedoc/0.23.18_typescript@4.9.4:
resolution: {integrity: sha512-0Tq/uFkUuWyRYyjOShTkhsOm6u5E8wf0i6L76/k5znEaxvWKHGeT2ywZThGrDrryV/skO/REM824D1gm8ccQuA==}
engines: {node: '>= 14.14'}
hasBin: true
@ -15094,7 +15094,7 @@ packages:
marked: 4.1.1
minimatch: 5.1.0
shiki: 0.11.1
typescript: 4.8.4
typescript: 4.9.4
dev: true
/typescript/4.6.4:
@ -15103,12 +15103,6 @@ packages:
hasBin: true
dev: true
/typescript/4.8.4:
resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
/typescript/4.9.4:
resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
engines: {node: '>=4.2.0'}