From 5a0d00e066799ee8eaa53b5e1a3a1fb2e9d449ab Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Tue, 29 Oct 2024 12:59:49 +0000 Subject: [PATCH 01/35] Fix inability to execute probably caused by change in Jupyter extension --- src/api.ts | 15 ++++----------- src/api/contents.ts | 1 + src/api/kernels.ts | 3 ++- src/api/sessions.ts | 16 +++++----------- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/api.ts b/src/api.ts index 893f29d..a9a43c6 100644 --- a/src/api.ts +++ b/src/api.ts @@ -28,19 +28,12 @@ export interface IProcess extends JupyterServerAPI.IKernel { executionCount: number } -export interface IRouteGeneric extends RouteGenericInterface { - Params: { - serverNamespace: string // server:namespace - }, - - Body: string +export interface IParams { + serverNamespace: string // server:namespace } export interface IRequestGeneric extends RequestGenericInterface { - Params: { - serverNamespace: string // server:namespace - }, - + Params: IParams, Body: string } @@ -108,7 +101,7 @@ export abstract class ApiBase { await targetExtension.activate(); } const api = targetExtension.exports; - + if (!api) { return undefined; } diff --git a/src/api/contents.ts b/src/api/contents.ts index ecb90b3..b131b8e 100644 --- a/src/api/contents.ts +++ b/src/api/contents.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { FastifyInstance, FastifyRequest } from "fastify"; import { ApiBase, IRequestGeneric } from "../api"; import { logChannel } from "../extension"; diff --git a/src/api/kernels.ts b/src/api/kernels.ts index 83a1dc4..39ccbc9 100644 --- a/src/api/kernels.ts +++ b/src/api/kernels.ts @@ -1,7 +1,8 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { FastifyInstance, FastifyRequest } from "fastify"; import * as FastifyWS from "@fastify/websocket"; import * as nteract from "@nteract/messaging"; -import { ApiBase, IRequestGeneric, IRouteGeneric } from "../api"; +import { ApiBase, IRequestGeneric } from "../api"; import { JupyterServerAPI } from "../jupyterServerAPI"; import { ServerNamespaceMgr } from "../serverNamespaceMgr"; import console = require("console"); diff --git a/src/api/sessions.ts b/src/api/sessions.ts index 378e483..efda352 100644 --- a/src/api/sessions.ts +++ b/src/api/sessions.ts @@ -1,5 +1,6 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { FastifyInstance, FastifyRequest } from "fastify"; -import { ApiBase, IRequestGeneric } from "../api"; +import { ApiBase, IRequestGeneric, IParams } from "../api"; import { JupyterServerAPI } from "../jupyterServerAPI"; import { ServerNamespaceMgr } from "../serverNamespaceMgr"; import { IRISConnection } from '../iris'; @@ -22,7 +23,7 @@ export class SessionsApi extends ApiBase { return result; }); - fastify.post('/:serverNamespace/api/sessions', (request: FastifyRequest, reply) => { + fastify.post<{ Body: JupyterServerAPI.ISession, Params: IParams }>('/:serverNamespace/api/sessions', (request, reply) => { const { serverNamespace } = request.params; const serverNamespaceMgr = ServerNamespaceMgr.get(serverNamespace); if (!serverNamespaceMgr?.target.serverSpec) { @@ -30,15 +31,8 @@ export class SessionsApi extends ApiBase { return {}; } const target = serverNamespaceMgr.target; - var session: JupyterServerAPI.ISession; - try { - session = JSON.parse(request.body); - } - catch (error) { - reply.code(400); - return {}; - } - const { name, type, path, kernel } = session; + var session: JupyterServerAPI.ISession = request.body; + const { name, kernel } = session; const existingSession = serverNamespaceMgr?.getSession(name); if (existingSession) { From bc083b18bd8ff52b24036464dd20338b18a5c9b2 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Tue, 29 Oct 2024 13:06:42 +0000 Subject: [PATCH 02/35] Update dependencies and start using Jupyter extension's API --- package-lock.json | 1874 +++++++++++++++++++++++---------------------- package.json | 1 + src/extension.ts | 9 + 3 files changed, 949 insertions(+), 935 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7284c43..92b5b60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.38.1", "@typescript-eslint/parser": "^5.38.1", + "@vscode/jupyter-extension": "^1.1.1", "@vscode/test-electron": "^2.1.5", "eslint": "^8.24.0", "glob": "^8.0.3", @@ -76,9 +77,10 @@ } }, "node_modules/@fastify/ajv-compiler": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.3.1.tgz", - "integrity": "sha512-IRnids8lblQ8e1i8h4JLyfJmebXE+ohcj8x8X/+Ew6ZB4H0Ui05z5YL6q5FOcl0zItVpu4adRzeyVNNUwmduIg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", + "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", + "license": "MIT", "dependencies": { "ajv": "^8.11.0", "ajv-formats": "^2.1.1", @@ -86,41 +88,55 @@ } }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/@fastify/deepmerge": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.1.0.tgz", - "integrity": "sha512-E8Hfdvs1bG6u0N4vN5Nty6JONUfTdOciyD5rn8KnEsLKIenvOVcr210BQR9t34PRkNyjqnMLGk3e0BsaxRdL+g==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/@fastify/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.0.0.tgz", - "integrity": "sha512-dPRyT40GiHRzSCll3/Jn2nPe25+E1VXc9tDwRAIKwFCxd5Np5wzgz1tmooWG3sV0qKgrBibihVoCna2ru4SEFg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", + "license": "MIT" }, "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.1.0.tgz", - "integrity": "sha512-cTKBV2J9+u6VaKDhX7HepSfPSzw+F+TSd+k0wzifj4rG+4E5PjSFJCk19P8R6tr/72cuzgGd+mbB3jFT6lvAgw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "license": "MIT", "dependencies": { - "fast-json-stringify": "^5.0.0" + "fast-json-stringify": "^5.7.0" + } + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" } }, "node_modules/@fastify/websocket": { @@ -172,61 +188,67 @@ "dev": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -329,31 +351,12 @@ "node": ">= 6" } }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/glob": { "version": "8.0.0", @@ -607,6 +610,13 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vscode/jupyter-extension": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vscode/jupyter-extension/-/jupyter-extension-1.1.1.tgz", + "integrity": "sha512-wQ7bEbrHSe9gfdT3PCNE/ayC+w8aFFXpJBlUjMN3WMZpO4fWXZv2O8gCf3w80a465uEhMDiSmuRYl0OR6RR25Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@vscode/test-electron": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.0.tgz", @@ -623,148 +633,163 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", - "dev": true + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", - "dev": true + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", - "dev": true + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", - "dev": true + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", - "dev": true + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -808,24 +833,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } + "dev": true, + "license": "Apache-2.0" }, "node_modules/abstract-logging": { "version": "2.0.1", @@ -833,10 +849,11 @@ "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -844,11 +861,12 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -894,6 +912,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -907,30 +926,39 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats/node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -981,11 +1009,6 @@ "node": ">= 8" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1018,18 +1041,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/avvio": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.0.tgz", - "integrity": "sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", + "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", + "license": "MIT", "dependencies": { - "archy": "^1.0.0", - "debug": "^4.0.0", - "fastq": "^1.6.1" + "@fastify/error": "^3.3.0", + "fastq": "^1.17.1" } }, "node_modules/axios": { @@ -1063,25 +1087,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -1139,12 +1144,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1157,9 +1163,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -1169,13 +1175,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -1184,34 +1195,12 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", @@ -1253,9 +1242,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001481", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "version": "1.0.30001674", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz", + "integrity": "sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==", "dev": true, "funding": [ { @@ -1270,7 +1259,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chainsaw": { "version": "0.1.0", @@ -1401,7 +1391,8 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -1409,18 +1400,11 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1449,6 +1433,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1522,10 +1507,11 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.371", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.371.tgz", - "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==", - "dev": true + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -1543,10 +1529,11 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1574,10 +1561,11 @@ "dev": true }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1798,26 +1786,26 @@ "node": ">=0.10.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "engines": { "node": ">=0.8.x" } }, + "node_modules/fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", + "license": "MIT" + }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -1859,37 +1847,64 @@ "dev": true }, "node_modules/fast-json-stringify": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.4.0.tgz", - "integrity": "sha512-PIzon53oX/zEGLrGbu4DpfNcYiV4K4rk+JsVrawRPO/G8cNBEMZ3KlIk2BCGqN+m1KCCA4zt5E7Hh3GG9ojRVA==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", + "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "license": "MIT", "dependencies": { - "@fastify/deepmerge": "^1.0.0", + "@fastify/merge-json-schemas": "^0.1.0", "ajv": "^8.10.0", - "ajv-formats": "^2.1.1", + "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" } }, "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/fast-json-stringify/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -1898,25 +1913,28 @@ "dev": true }, "node_modules/fast-querystring": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.0.0.tgz", - "integrity": "sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/fast-redact": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", - "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/fast-uri": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.1.0.tgz", - "integrity": "sha512-qKRta6N7BWEFVlyonVY/V+BMLgFqktCUV0QjT259ekAIlbVrMaFnFLxJ4s/JPl4tou56S1BzPufI60bLe29fHA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -1928,25 +1946,37 @@ } }, "node_modules/fastify": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.10.2.tgz", - "integrity": "sha512-0T+4zI6N3S8ex0LCZi3H4FasJR4AzWw834fUkPWvV8r6GBJkLmAOfFxH8f5V29Plef24IK0QSQD/tz1Nx+1UOA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", + "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "@fastify/ajv-compiler": "^3.3.1", - "@fastify/error": "^3.0.0", - "@fastify/fast-json-stringify-compiler": "^4.1.0", + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", "abstract-logging": "^2.0.1", - "avvio": "^8.2.0", - "content-type": "^1.0.4", - "find-my-way": "^7.3.0", - "light-my-request": "^5.6.1", - "pino": "^8.5.0", - "process-warning": "^2.0.0", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^9.0.0", + "process-warning": "^3.0.0", "proxy-addr": "^2.0.7", "rfdc": "^1.3.0", - "secure-json-parse": "^2.5.0", - "semver": "^7.3.7", - "tiny-lru": "^10.0.0" + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" } }, "node_modules/fastify-plugin": { @@ -1955,9 +1985,10 @@ "integrity": "sha512-M3+i368lV0OYTJ5TfClIoPKEKSOF7112iiPdwgfSR0gN98BjA1Nk+c6oBHtfcVt9KiMxl+EQKHC1QNWo3ZOpYQ==" }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -1975,10 +2006,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1987,13 +2019,14 @@ } }, "node_modules/find-my-way": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.3.1.tgz", - "integrity": "sha512-kGvM08SOkqvheLcuQ8GW9t/H901Qb9rZEbcNWbXopzy4jDRoaJpJoObPSKf4MnQLZ20ZTp7rL5MpF6rf+pqmyg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", + "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^2.0.0" + "safe-regex2": "^3.1.0" }, "engines": { "node": ">=14" @@ -2044,15 +2077,16 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -2187,7 +2221,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", @@ -2246,10 +2281,11 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -2314,25 +2350,6 @@ "node": ">= 6" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -2483,6 +2500,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2563,6 +2581,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -2577,6 +2596,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2611,6 +2631,15 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2657,12 +2686,13 @@ } }, "node_modules/light-my-request": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.6.1.tgz", - "integrity": "sha512-sbJnC1UBRivi9L1kICr3CESb82pNiPNB3TvtdIrZZqW0Qh8uDXvoywMmWKZlihDcmw952CMICCzM+54LDf+E+g==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", + "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", + "license": "BSD-3-Clause", "dependencies": { - "cookie": "^0.5.0", - "process-warning": "^2.0.0", + "cookie": "^0.7.0", + "process-warning": "^3.0.0", "set-cookie-parser": "^2.4.1" } }, @@ -2752,7 +2782,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -2764,12 +2795,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -2947,7 +2979,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.3", @@ -2993,10 +3026,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -3008,9 +3042,13 @@ } }, "node_modules/on-exit-leak-free": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", - "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/once": { "version": "1.4.0", @@ -3132,10 +3170,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -3161,53 +3200,47 @@ } }, "node_modules/pino": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.7.0.tgz", - "integrity": "sha512-l9sA5uPxmZzwydhMWUcm1gI0YxNnYl8MfSr2h8cwLvOAzQLBLewzF247h/vqHe3/tt6fgtXeG9wdjjoetdI/vA==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", + "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.0.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.1.0", - "thread-stream": "^2.0.0" + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "node_modules/pino-abstract-transport": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", - "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", "dependencies": { - "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, - "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", - "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/pino-std-serializers": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.0.0.tgz", - "integrity": "sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/pino/node_modules/process-warning": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", + "license": "MIT" }, "node_modules/pkg-dir": { "version": "4.2.0", @@ -3282,14 +3315,6 @@ "node": ">= 0.8.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -3297,9 +3322,10 @@ "dev": true }, "node_modules/process-warning": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.0.0.tgz", - "integrity": "sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -3354,7 +3380,8 @@ "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", @@ -3402,6 +3429,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -3443,6 +3471,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3500,11 +3529,12 @@ } }, "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", + "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/reusify": { @@ -3517,9 +3547,10 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", @@ -3611,26 +3642,29 @@ ] }, "node_modules/safe-regex2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", - "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", + "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "license": "MIT", "dependencies": { - "ret": "~0.2.0" + "ret": "~0.4.0" } }, "node_modules/safe-stable-stringify": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", - "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -3645,9 +3679,10 @@ } }, "node_modules/secure-json-parse": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.5.0.tgz", - "integrity": "sha512-ZQruFgZnIWH+WyO9t5rWt4ZEGqCKPwhiw+YbzTwpmT9elgLrLcfuyUiSnwwjUiVy9r4VM3urtbNF1xmEh9IL2w==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" }, "node_modules/semver": { "version": "7.5.4", @@ -3673,9 +3708,10 @@ } }, "node_modules/set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" }, "node_modules/setimmediate": { "version": "1.0.5", @@ -3726,9 +3762,10 @@ } }, "node_modules/sonic-boom": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.2.0.tgz", - "integrity": "sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -3738,6 +3775,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3747,15 +3785,17 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -3847,13 +3887,14 @@ } }, "node_modules/terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -3865,16 +3906,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -3899,10 +3941,11 @@ } }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -3914,26 +3957,20 @@ "dev": true }, "node_modules/thread-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.2.0.tgz", - "integrity": "sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } }, - "node_modules/tiny-lru": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-10.0.1.tgz", - "integrity": "sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA==", - "engines": { - "node": ">=6" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3941,6 +3978,15 @@ "node": ">=8.0" } }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -4067,9 +4113,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -4085,9 +4131,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -4100,6 +4147,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -4128,10 +4176,11 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -4141,34 +4190,34 @@ } }, "node_modules/webpack": { - "version": "5.80.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", - "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, + "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -4265,19 +4314,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4338,15 +4374,16 @@ "dev": true }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -4451,9 +4488,9 @@ } }, "@fastify/ajv-compiler": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.3.1.tgz", - "integrity": "sha512-IRnids8lblQ8e1i8h4JLyfJmebXE+ohcj8x8X/+Ew6ZB4H0Ui05z5YL6q5FOcl0zItVpu4adRzeyVNNUwmduIg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", + "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", "requires": { "ajv": "^8.11.0", "ajv-formats": "^2.1.1", @@ -4461,14 +4498,21 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" + }, + "dependencies": { + "fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" + } } }, "json-schema-traverse": { @@ -4478,22 +4522,25 @@ } } }, - "@fastify/deepmerge": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.1.0.tgz", - "integrity": "sha512-E8Hfdvs1bG6u0N4vN5Nty6JONUfTdOciyD5rn8KnEsLKIenvOVcr210BQR9t34PRkNyjqnMLGk3e0BsaxRdL+g==" - }, "@fastify/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.0.0.tgz", - "integrity": "sha512-dPRyT40GiHRzSCll3/Jn2nPe25+E1VXc9tDwRAIKwFCxd5Np5wzgz1tmooWG3sV0qKgrBibihVoCna2ru4SEFg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" }, "@fastify/fast-json-stringify-compiler": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.1.0.tgz", - "integrity": "sha512-cTKBV2J9+u6VaKDhX7HepSfPSzw+F+TSd+k0wzifj4rG+4E5PjSFJCk19P8R6tr/72cuzgGd+mbB3jFT6lvAgw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "requires": { + "fast-json-stringify": "^5.7.0" + } + }, + "@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", "requires": { - "fast-json-stringify": "^5.0.0" + "fast-deep-equal": "^3.1.3" } }, "@fastify/websocket": { @@ -4535,52 +4582,52 @@ "dev": true }, "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@nodelib/fs.scandir": { @@ -4668,30 +4715,10 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, "@types/glob": { @@ -4857,6 +4884,12 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@vscode/jupyter-extension": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vscode/jupyter-extension/-/jupyter-extension-1.1.1.tgz", + "integrity": "sha512-wQ7bEbrHSe9gfdT3PCNE/ayC+w8aFFXpJBlUjMN3WMZpO4fWXZv2O8gCf3w80a465uEhMDiSmuRYl0OR6RR25Q==", + "dev": true + }, "@vscode/test-electron": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.0.tgz", @@ -4870,148 +4903,148 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -5050,29 +5083,21 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "abstract-logging": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "requires": {} }, @@ -5113,16 +5138,21 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, + "fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -5168,11 +5198,6 @@ "picomatch": "^2.0.4" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5206,13 +5231,12 @@ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, "avvio": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.0.tgz", - "integrity": "sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", + "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", "requires": { - "archy": "^1.0.0", - "debug": "^4.0.0", - "fastq": "^1.6.1" + "@fastify/error": "^3.3.0", + "fastq": "^1.17.1" } }, "axios": { @@ -5238,11 +5262,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, "big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -5288,12 +5307,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browser-stdout": { @@ -5303,24 +5322,15 @@ "dev": true }, "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" } }, "buffer-from": { @@ -5354,9 +5364,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001481", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", - "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "version": "1.0.30001674", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz", + "integrity": "sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==", "dev": true }, "chainsaw": { @@ -5466,15 +5476,10 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" }, "core-util-is": { "version": "1.0.3", @@ -5497,6 +5502,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -5547,9 +5553,9 @@ } }, "electron-to-chromium": { - "version": "1.4.371", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.371.tgz", - "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==", + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", "dev": true }, "emoji-regex": { @@ -5565,9 +5571,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -5587,9 +5593,9 @@ "dev": true }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, "escape-string-regexp": { @@ -5753,15 +5759,16 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" }, "fast-decode-uri-component": { "version": "1.0.1", @@ -5804,27 +5811,43 @@ "dev": true }, "fast-json-stringify": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.4.0.tgz", - "integrity": "sha512-PIzon53oX/zEGLrGbu4DpfNcYiV4K4rk+JsVrawRPO/G8cNBEMZ3KlIk2BCGqN+m1KCCA4zt5E7Hh3GG9ojRVA==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", + "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", "requires": { - "@fastify/deepmerge": "^1.0.0", + "@fastify/merge-json-schemas": "^0.1.0", "ajv": "^8.10.0", - "ajv-formats": "^2.1.1", + "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" + }, + "dependencies": { + "fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" + } + } + }, + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "requires": { + "ajv": "^8.0.0" } }, "json-schema-traverse": { @@ -5841,22 +5864,22 @@ "dev": true }, "fast-querystring": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.0.0.tgz", - "integrity": "sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "requires": { "fast-decode-uri-component": "^1.0.1" } }, "fast-redact": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", - "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==" }, "fast-uri": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.1.0.tgz", - "integrity": "sha512-qKRta6N7BWEFVlyonVY/V+BMLgFqktCUV0QjT259ekAIlbVrMaFnFLxJ4s/JPl4tou56S1BzPufI60bLe29fHA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==" }, "fastest-levenshtein": { "version": "1.0.16", @@ -5865,25 +5888,26 @@ "dev": true }, "fastify": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.10.2.tgz", - "integrity": "sha512-0T+4zI6N3S8ex0LCZi3H4FasJR4AzWw834fUkPWvV8r6GBJkLmAOfFxH8f5V29Plef24IK0QSQD/tz1Nx+1UOA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", + "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", "requires": { - "@fastify/ajv-compiler": "^3.3.1", - "@fastify/error": "^3.0.0", - "@fastify/fast-json-stringify-compiler": "^4.1.0", + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", "abstract-logging": "^2.0.1", - "avvio": "^8.2.0", - "content-type": "^1.0.4", - "find-my-way": "^7.3.0", - "light-my-request": "^5.6.1", - "pino": "^8.5.0", - "process-warning": "^2.0.0", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^9.0.0", + "process-warning": "^3.0.0", "proxy-addr": "^2.0.7", "rfdc": "^1.3.0", - "secure-json-parse": "^2.5.0", - "semver": "^7.3.7", - "tiny-lru": "^10.0.0" + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" } }, "fastify-plugin": { @@ -5892,9 +5916,9 @@ "integrity": "sha512-M3+i368lV0OYTJ5TfClIoPKEKSOF7112iiPdwgfSR0gN98BjA1Nk+c6oBHtfcVt9KiMxl+EQKHC1QNWo3ZOpYQ==" }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "requires": { "reusify": "^1.0.4" } @@ -5909,22 +5933,22 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-my-way": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.3.1.tgz", - "integrity": "sha512-kGvM08SOkqvheLcuQ8GW9t/H901Qb9rZEbcNWbXopzy4jDRoaJpJoObPSKf4MnQLZ20ZTp7rL5MpF6rf+pqmyg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", + "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", "requires": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^2.0.0" + "safe-regex2": "^3.1.0" } }, "find-up": { @@ -5960,9 +5984,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" }, "forwarded": { "version": "0.2.0", @@ -6103,9 +6127,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "grapheme-splitter": { @@ -6156,11 +6180,6 @@ "debug": "4" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -6363,6 +6382,14 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6397,12 +6424,12 @@ } }, "light-my-request": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.6.1.tgz", - "integrity": "sha512-sbJnC1UBRivi9L1kICr3CESb82pNiPNB3TvtdIrZZqW0Qh8uDXvoywMmWKZlihDcmw952CMICCzM+54LDf+E+g==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", + "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", "requires": { - "cookie": "^0.5.0", - "process-warning": "^2.0.0", + "cookie": "^0.7.0", + "process-warning": "^3.0.0", "set-cookie-parser": "^2.4.1" } }, @@ -6480,12 +6507,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -6622,7 +6649,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "nanoid": { "version": "3.3.3", @@ -6652,9 +6680,9 @@ } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "normalize-path": { @@ -6664,9 +6692,9 @@ "dev": true }, "on-exit-leak-free": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", - "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==" }, "once": { "version": "1.4.0", @@ -6755,9 +6783,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "picomatch": { @@ -6772,49 +6800,42 @@ "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" }, "pino": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.7.0.tgz", - "integrity": "sha512-l9sA5uPxmZzwydhMWUcm1gI0YxNnYl8MfSr2h8cwLvOAzQLBLewzF247h/vqHe3/tt6fgtXeG9wdjjoetdI/vA==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", + "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", "requires": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.0.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.1.0", - "thread-stream": "^2.0.0" + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "dependencies": { + "process-warning": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==" + } } }, "pino-abstract-transport": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", - "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", "requires": { - "readable-stream": "^4.0.0", "split2": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", - "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - } } }, "pino-std-serializers": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.0.0.tgz", - "integrity": "sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==" }, "pkg-dir": { "version": "4.2.0", @@ -6870,11 +6891,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6882,9 +6898,9 @@ "dev": true }, "process-warning": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.0.0.tgz", - "integrity": "sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" }, "proxy-addr": { "version": "2.0.7", @@ -7033,9 +7049,9 @@ "dev": true }, "ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", + "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==" }, "reusify": { "version": "1.0.4", @@ -7043,9 +7059,9 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" }, "rimraf": { "version": "3.0.2", @@ -7096,22 +7112,22 @@ "dev": true }, "safe-regex2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", - "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", + "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", "requires": { - "ret": "~0.2.0" + "ret": "~0.4.0" } }, "safe-stable-stringify": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", - "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" }, "schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -7120,9 +7136,9 @@ } }, "secure-json-parse": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.5.0.tgz", - "integrity": "sha512-ZQruFgZnIWH+WyO9t5rWt4ZEGqCKPwhiw+YbzTwpmT9elgLrLcfuyUiSnwwjUiVy9r4VM3urtbNF1xmEh9IL2w==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "semver": { "version": "7.5.4", @@ -7142,9 +7158,9 @@ } }, "set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" }, "setimmediate": { "version": "1.0.5", @@ -7183,9 +7199,9 @@ "dev": true }, "sonic-boom": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.2.0.tgz", - "integrity": "sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", "requires": { "atomic-sleep": "^1.0.0" } @@ -7207,9 +7223,9 @@ } }, "split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" }, "string_decoder": { "version": "1.1.1", @@ -7276,34 +7292,34 @@ "dev": true }, "terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" } }, "terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" + "terser": "^5.26.0" }, "dependencies": { "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -7318,18 +7334,13 @@ "dev": true }, "thread-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.2.0.tgz", - "integrity": "sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", "requires": { "real-require": "^0.2.0" } }, - "tiny-lru": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-10.0.1.tgz", - "integrity": "sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7339,6 +7350,11 @@ "is-number": "^7.0.0" } }, + "toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==" + }, "tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -7427,19 +7443,20 @@ } }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" } }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -7465,9 +7482,9 @@ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -7475,47 +7492,34 @@ } }, "webpack": { - "version": "5.80.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", - "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" - }, - "dependencies": { - "enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - } } }, "webpack-cli": { @@ -7607,9 +7611,9 @@ "dev": true }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "requires": {} }, "y18n": { diff --git a/package.json b/package.json index eecd2a9..bc351a9 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.38.1", "@typescript-eslint/parser": "^5.38.1", + "@vscode/jupyter-extension": "^1.1.1", "@vscode/test-electron": "^2.1.5", "eslint": "^8.24.0", "glob": "^8.0.3", diff --git a/src/extension.ts b/src/extension.ts index cba4239..c148cb3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,6 +1,7 @@ import * as vscode from 'vscode'; import Fastify from 'fastify'; import * as FastifyWS from '@fastify/websocket'; +import { Jupyter } from '@vscode/jupyter-extension'; import { KernelsApi } from './api/kernels'; import { MiscApi } from './api'; import { SessionsApi } from './api/sessions'; @@ -15,6 +16,14 @@ export function activate(context: vscode.ExtensionContext) { logChannel = vscode.window.createOutputChannel('IRIS Jupyter Server Proxy', { log: true}); logChannel.info('Extension activated'); + const jupyterExt = vscode.extensions.getExtension('ms-toolsai.jupyter'); + if (!jupyterExt) { + throw new Error('Jupyter Extension not installed'); + } + if (!jupyterExt.isActive) { + jupyterExt.activate(); + } + const fastify = Fastify({ //logger: true }); From bc78801526047b3280f127d5077b91d0125652da Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Tue, 29 Oct 2024 15:56:44 +0000 Subject: [PATCH 03/35] Update and reduce dependencies --- package-lock.json | 865 +++++++++++++++++++---------------------- package.json | 20 +- src/api.ts | 4 +- src/api/kernels.ts | 16 +- src/makeRESTRequest.ts | 59 ++- 5 files changed, 453 insertions(+), 511 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92b5b60..f56c429 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,14 +9,12 @@ "version": "0.0.7-SNAPSHOT", "license": "MIT", "dependencies": { - "@fastify/websocket": "^7.1.1", + "@fastify/websocket": "^11.0.1", "@nteract/messaging": "7.0.20", "async-mutex": "^0.4.0", - "axios": "^0.24.0", - "axios-cookiejar-support": "^1.0.1", - "fastify": "^4.9.2", + "axios": "^1.7.7", + "fastify": "^5.0.0", "json5": "^2.2.3", - "tough-cookie": "^4.0.0", "uuid": "^9.0.0" }, "devDependencies": { @@ -35,8 +33,8 @@ "glob": "^8.0.3", "mocha": "^10.0.0", "node-loader": "^2.0.0", - "ts-loader": "^9.4.1", - "typescript": "^4.8.4", + "ts-loader": "^9.5.1", + "typescript": "^5.6.3", "webpack": "^5.80.0", "webpack-cli": "^4.10.0" }, @@ -77,14 +75,14 @@ } }, "node_modules/@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz", + "integrity": "sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==", "license": "MIT", "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" } }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { @@ -103,12 +101,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "license": "BSD-3-Clause" - }, "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -116,18 +108,18 @@ "license": "MIT" }, "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==", "license": "MIT" }, "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz", + "integrity": "sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA==", "license": "MIT", "dependencies": { - "fast-json-stringify": "^5.7.0" + "fast-json-stringify": "^6.0.0" } }, "node_modules/@fastify/merge-json-schemas": { @@ -140,12 +132,14 @@ } }, "node_modules/@fastify/websocket": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@fastify/websocket/-/websocket-7.1.1.tgz", - "integrity": "sha512-8lvB/E6p/o3MlmHzM2NJ19ixteI6Ckw0xOebLfoHoORPmpvCWqSp8+HLz4Gc6HrChH4vM9VcSWAK8jYuTT08hQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@fastify/websocket/-/websocket-11.0.1.tgz", + "integrity": "sha512-44yam5+t1I9v09hWBYO+ezV88+mb9Se2BjgERtzB/68+0mGeTfFkjBeDBe2y+ZdiPpeO2rhevhdnfrBm5mqH+Q==", + "license": "MIT", "dependencies": { - "fastify-plugin": "^4.0.0", - "ws": "^8.0.0" + "duplexify": "^4.1.3", + "fastify-plugin": "^5.0.0", + "ws": "^8.16.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -398,12 +392,6 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, - "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "peer": true - }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -909,9 +897,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -941,12 +929,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats/node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "license": "BSD-3-Clause" - }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -1037,6 +1019,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", @@ -1047,38 +1035,24 @@ } }, "node_modules/avvio": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", - "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", "license": "MIT", "dependencies": { - "@fastify/error": "^3.3.0", + "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "node_modules/axios-cookiejar-support": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", - "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { - "is-redirect": "^1.0.0", - "pify": "^5.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@types/tough-cookie": ">=2.3.3", - "axios": ">=0.16.2", - "tough-cookie": ">=2.3.3" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/balanced-match": { @@ -1387,6 +1361,18 @@ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -1401,12 +1387,12 @@ "dev": true }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.1.tgz", + "integrity": "sha512-Xd8lFX4LM9QEEwxQpF9J9NTUh8pmdJO0cyRJhFiDoLTk2eH8FXlRv2IFGYVadZpqI3j8fhNrSdKCeYPxiAhLXw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" } }, "node_modules/core-util-is": { @@ -1464,6 +1450,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -1506,6 +1501,32 @@ "readable-stream": "^2.0.2" } }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.49", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", @@ -1528,6 +1549,15 @@ "node": ">= 4" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -1795,12 +1825,6 @@ "node": ">=0.8.x" } }, - "node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "license": "MIT" - }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", @@ -1847,16 +1871,16 @@ "dev": true }, "node_modules/fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz", + "integrity": "sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==", "license": "MIT", "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", + "@fastify/merge-json-schemas": "^0.1.1", + "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", + "fast-uri": "^2.3.0", "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" } @@ -1877,29 +1901,18 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/fast-json-stringify/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", "license": "BSD-3-Clause" }, + "node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" + }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -1931,10 +1944,10 @@ } }, "node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", - "license": "MIT" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -1946,9 +1959,9 @@ } }, "node_modules/fastify": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", - "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.0.0.tgz", + "integrity": "sha512-Qe4dU+zGOzg7vXjw4EvcuyIbNnMwTmcuOhlOrOJsgwzvjEZmsM/IeHulgJk+r46STjdJS/ZJbxO8N70ODXDMEQ==", "funding": [ { "type": "github", @@ -1961,28 +1974,28 @@ ], "license": "MIT", "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", "pino": "^9.0.0", - "process-warning": "^3.0.0", + "process-warning": "^4.0.0", "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" + "semver": "^7.6.0", + "toad-cache": "^3.7.0" } }, "node_modules/fastify-plugin": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.3.0.tgz", - "integrity": "sha512-M3+i368lV0OYTJ5TfClIoPKEKSOF7112iiPdwgfSR0gN98BjA1Nk+c6oBHtfcVt9KiMxl+EQKHC1QNWo3ZOpYQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz", + "integrity": "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==", + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", @@ -2019,14 +2032,14 @@ } }, "node_modules/find-my-way": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", - "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz", + "integrity": "sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^3.1.0" + "safe-regex2": "^4.0.0" }, "engines": { "node": ">=14" @@ -2096,6 +2109,20 @@ } } }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2421,8 +2448,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/interpret": { "version": "2.2.0", @@ -2535,14 +2561,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -2686,14 +2704,14 @@ } }, "node_modules/light-my-request": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", - "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.3.0.tgz", + "integrity": "sha512-bWTAPJmeWQH5suJNYwG0f5cs0p6ho9e6f1Ppoxv5qMosY+s9Ir2+ZLvvHcgA7VTDop4zl/NCHhOVVqU+kd++Ow==", "license": "BSD-3-Clause", "dependencies": { - "cookie": "^0.7.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" } }, "node_modules/listenercount": { @@ -2767,17 +2785,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -2812,7 +2819,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -2821,7 +2827,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -3054,7 +3059,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -3188,17 +3192,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pino": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", @@ -3236,12 +3229,6 @@ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", "license": "MIT" }, - "node_modules/pino/node_modules/process-warning": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", - "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", - "license": "MIT" - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -3322,9 +3309,9 @@ "dev": true }, "node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", "license": "MIT" }, "node_modules/proxy-addr": { @@ -3339,24 +3326,21 @@ "node": ">= 0.10" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3476,11 +3460,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -3529,9 +3508,9 @@ } }, "node_modules/ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", "license": "MIT", "engines": { "node": ">=10" @@ -3642,12 +3621,12 @@ ] }, "node_modules/safe-regex2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz", + "integrity": "sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==", "license": "MIT", "dependencies": { - "ret": "~0.4.0" + "ret": "~0.5.0" } }, "node_modules/safe-stable-stringify": { @@ -3685,12 +3664,10 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3800,11 +3777,16 @@ "node": ">= 10.x" } }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -3812,8 +3794,7 @@ "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/string-width": { "version": "4.2.3", @@ -3987,20 +3968,6 @@ "node": ">=12" } }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -4011,15 +3978,17 @@ } }, "node_modules/ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", - "semver": "^7.3.4" + "semver": "^7.3.4", + "source-map": "^0.7.4" }, "engines": { "node": ">=12.0.0" @@ -4029,6 +3998,16 @@ "webpack": "^5.0.0" } }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -4074,24 +4053,17 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" + "node": ">=14.17" } }, "node_modules/unzipper": { @@ -4152,20 +4124,10 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "9.0.0", @@ -4370,8 +4332,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.18.0", @@ -4403,11 +4364,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -4488,13 +4444,13 @@ } }, "@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz", + "integrity": "sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==", "requires": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" }, "dependencies": { "ajv": { @@ -4506,13 +4462,6 @@ "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" - }, - "dependencies": { - "fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" - } } }, "json-schema-traverse": { @@ -4523,16 +4472,16 @@ } }, "@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==" }, "@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz", + "integrity": "sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA==", "requires": { - "fast-json-stringify": "^5.7.0" + "fast-json-stringify": "^6.0.0" } }, "@fastify/merge-json-schemas": { @@ -4544,12 +4493,13 @@ } }, "@fastify/websocket": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@fastify/websocket/-/websocket-7.1.1.tgz", - "integrity": "sha512-8lvB/E6p/o3MlmHzM2NJ19ixteI6Ckw0xOebLfoHoORPmpvCWqSp8+HLz4Gc6HrChH4vM9VcSWAK8jYuTT08hQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@fastify/websocket/-/websocket-11.0.1.tgz", + "integrity": "sha512-44yam5+t1I9v09hWBYO+ezV88+mb9Se2BjgERtzB/68+0mGeTfFkjBeDBe2y+ZdiPpeO2rhevhdnfrBm5mqH+Q==", "requires": { - "fastify-plugin": "^4.0.0", - "ws": "^8.0.0" + "duplexify": "^4.1.3", + "fastify-plugin": "^5.0.0", + "ws": "^8.16.0" } }, "@humanwhocodes/config-array": { @@ -4761,12 +4711,6 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, - "@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "peer": true - }, "@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -5130,9 +5074,9 @@ } }, "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "requires": { "ajv": "^8.0.0" }, @@ -5148,11 +5092,6 @@ "require-from-string": "^2.0.2" } }, - "fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -5225,35 +5164,33 @@ } } }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, "avvio": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", - "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", "requires": { - "@fastify/error": "^3.3.0", + "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "requires": { - "follow-redirects": "^1.14.4" - } - }, - "axios-cookiejar-support": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", - "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "requires": { - "is-redirect": "^1.0.0", - "pify": "^5.0.0" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "balanced-match": { @@ -5464,6 +5401,14 @@ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -5477,9 +5422,9 @@ "dev": true }, "cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.1.tgz", + "integrity": "sha512-Xd8lFX4LM9QEEwxQpF9J9NTUh8pmdJO0cyRJhFiDoLTk2eH8FXlRv2IFGYVadZpqI3j8fhNrSdKCeYPxiAhLXw==" }, "core-util-is": { "version": "1.0.3", @@ -5519,6 +5464,11 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -5552,6 +5502,29 @@ "readable-stream": "^2.0.2" } }, + "duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "electron-to-chromium": { "version": "1.5.49", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", @@ -5570,6 +5543,14 @@ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -5765,11 +5746,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" - }, "fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", @@ -5811,15 +5787,15 @@ "dev": true }, "fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz", + "integrity": "sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==", "requires": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", + "@fastify/merge-json-schemas": "^0.1.1", + "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", + "fast-uri": "^2.3.0", "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" }, @@ -5842,13 +5818,10 @@ } } }, - "ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "requires": { - "ajv": "^8.0.0" - } + "fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==" }, "json-schema-traverse": { "version": "1.0.0", @@ -5877,9 +5850,9 @@ "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==" }, "fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" }, "fastest-levenshtein": { "version": "1.0.16", @@ -5888,32 +5861,31 @@ "dev": true }, "fastify": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", - "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.0.0.tgz", + "integrity": "sha512-Qe4dU+zGOzg7vXjw4EvcuyIbNnMwTmcuOhlOrOJsgwzvjEZmsM/IeHulgJk+r46STjdJS/ZJbxO8N70ODXDMEQ==", "requires": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", "pino": "^9.0.0", - "process-warning": "^3.0.0", + "process-warning": "^4.0.0", "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" + "semver": "^7.6.0", + "toad-cache": "^3.7.0" } }, "fastify-plugin": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.3.0.tgz", - "integrity": "sha512-M3+i368lV0OYTJ5TfClIoPKEKSOF7112iiPdwgfSR0gN98BjA1Nk+c6oBHtfcVt9KiMxl+EQKHC1QNWo3ZOpYQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz", + "integrity": "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==" }, "fastq": { "version": "1.17.1", @@ -5942,13 +5914,13 @@ } }, "find-my-way": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", - "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz", + "integrity": "sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw==", "requires": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^3.1.0" + "safe-regex2": "^4.0.0" } }, "find-up": { @@ -5988,6 +5960,16 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" }, + "form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6230,8 +6212,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "interpret": { "version": "2.2.0", @@ -6310,11 +6291,6 @@ "isobject": "^3.0.1" } }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==" - }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -6424,13 +6400,13 @@ } }, "light-my-request": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", - "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.3.0.tgz", + "integrity": "sha512-bWTAPJmeWQH5suJNYwG0f5cs0p6ho9e6f1Ppoxv5qMosY+s9Ir2+ZLvvHcgA7VTDop4zl/NCHhOVVqU+kd++Ow==", "requires": { - "cookie": "^0.7.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" } }, "listenercount": { @@ -6486,14 +6462,6 @@ "is-unicode-supported": "^0.1.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6519,14 +6487,12 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -6700,7 +6666,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -6794,11 +6759,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" - }, "pino": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", @@ -6815,13 +6775,6 @@ "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" - }, - "dependencies": { - "process-warning": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", - "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==" - } } }, "pino-abstract-transport": { @@ -6898,9 +6851,9 @@ "dev": true }, "process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==" }, "proxy-addr": { "version": "2.0.7", @@ -6911,20 +6864,16 @@ "ipaddr.js": "1.9.1" } }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "queue-microtask": { "version": "1.2.3", @@ -7009,11 +6958,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -7049,9 +6993,9 @@ "dev": true }, "ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==" }, "reusify": { "version": "1.0.4", @@ -7112,11 +7056,11 @@ "dev": true }, "safe-regex2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz", + "integrity": "sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==", "requires": { - "ret": "~0.4.0" + "ret": "~0.5.0" } }, "safe-stable-stringify": { @@ -7141,12 +7085,9 @@ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "serialize-javascript": { "version": "6.0.0", @@ -7227,11 +7168,15 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" }, + "stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" }, @@ -7239,8 +7184,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -7355,17 +7299,6 @@ "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==" }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -7373,15 +7306,24 @@ "dev": true }, "ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "requires": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", - "semver": "^7.3.4" + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } } }, "tslib": { @@ -7414,16 +7356,11 @@ "dev": true }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - }, "unzipper": { "version": "0.10.11", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", @@ -7461,20 +7398,10 @@ "punycode": "^2.1.0" } }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { "version": "9.0.0", @@ -7607,8 +7534,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { "version": "8.18.0", @@ -7622,11 +7548,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index bc351a9..77fd7bf 100644 --- a/package.json +++ b/package.json @@ -68,16 +68,14 @@ "package:linux-x64": "npm run package-prep && node -e \"require('fs').cpSync('./intersystems-iris-native/bin/lnxubuntux64/', './dist/', { recursive: true, filter: (f) => !f.endsWith('irisnative.node') })\" && vsce package --target linux-x64" }, "dependencies": { - "fastify": "^4.9.2", - "@fastify/websocket": "^7.1.1", + "fastify": "^5.0.0", + "@fastify/websocket": "^11.0.1", "@nteract/messaging": "7.0.20", - "uuid": "^9.0.0", + "async-mutex": "^0.4.0", + "axios": "^1.7.7", "json5": "^2.2.3", - "axios": "^0.24.0", - "axios-cookiejar-support": "^1.0.1", - "tough-cookie": "^4.0.0", - "async-mutex": "^0.4.0" -}, + "uuid": "^9.0.0" + }, "devDependencies": { "@intersystems-community/intersystems-servermanager": "latest", "@types/glob": "^8.0.0", @@ -88,14 +86,14 @@ "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.38.1", "@typescript-eslint/parser": "^5.38.1", - "@vscode/jupyter-extension": "^1.1.1", + "@vscode/jupyter-extension": "^1.1.1", "@vscode/test-electron": "^2.1.5", "eslint": "^8.24.0", "glob": "^8.0.3", "mocha": "^10.0.0", "node-loader": "^2.0.0", - "ts-loader": "^9.4.1", - "typescript": "^4.8.4", + "ts-loader": "^9.5.1", + "typescript": "^5.6.3", "webpack": "^5.80.0", "webpack-cli": "^4.10.0" } diff --git a/src/api.ts b/src/api.ts index a9a43c6..3b63e05 100644 --- a/src/api.ts +++ b/src/api.ts @@ -5,7 +5,7 @@ // the target is a Jupyter Hub. See https://github.com/microsoft/vscode-jupyter/blob/d52654ed850fba4ff241b4aa2e9f62cb082b3f71/src/kernels/jupyter/launcher/jupyterPasswordConnect.ts#L412-L419 import * as vscode from 'vscode'; -import { FastifyInstance, FastifyRequest, RequestGenericInterface, RouteGenericInterface } from 'fastify'; +import { FastifyInstance, FastifyRequest, RequestGenericInterface } from 'fastify'; import { IRISConnection } from './iris'; import * as serverManager from '@intersystems-community/intersystems-servermanager'; import { IServerSpec, Server } from './server'; @@ -230,7 +230,7 @@ export abstract class ApiBase { export class MiscApi extends ApiBase { - static addRoutes(fastify:FastifyInstance) { + static addRoutes(fastify: FastifyInstance) { fastify.get('/:serverNamespace/hub/api', (request: FastifyRequest, reply) => { const { serverNamespace } = request.params; diff --git a/src/api/kernels.ts b/src/api/kernels.ts index 39ccbc9..21c0157 100644 --- a/src/api/kernels.ts +++ b/src/api/kernels.ts @@ -132,7 +132,7 @@ export class KernelsApi extends ApiBase { // Provides https://jupyter-client.readthedocs.io/en/stable/messaging.html as JSON over a websocket fastify.get('/:serverNamespace/api/kernels/:kernelId/channels', { websocket: true }, - (connection: FastifyWS.SocketStream, request: FastifyRequest) => { + (socket: FastifyWS.WebSocket, request: FastifyRequest) => { const serverNamespace = request.params.serverNamespace; const kernelId = request.params.kernelId; const clientSessionId = request.query.session_id; @@ -142,7 +142,7 @@ export class KernelsApi extends ApiBase { // servicing kernelId restarts, because the kernelId won't change but the session property of the header object within its messages must change. const kernelSessionId = kernelId; - connection.socket.on('message', (rawData) => { + socket.on('message', (rawData) => { logChannel.debug(`WS message arrived: ${rawData.toString('utf8')}`); let message: nteract.JupyterMessage = JSON.parse(rawData.toString('utf8')); @@ -150,7 +150,7 @@ export class KernelsApi extends ApiBase { const msg = nteract.createMessage('status', { parent_header: message.header, content: { 'execution_state': status } }); msg.header.session = kernelSessionId; msg.header.username = 'iris-jupyter-server'; - connection.socket.send(JSON.stringify(msg), () => { + socket.send(JSON.stringify(msg), () => { logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}, status ${status}: ${JSON.stringify(msg)}`); }); }; @@ -204,7 +204,7 @@ export class KernelsApi extends ApiBase { }); msg.header.session = kernelSessionId; msg.header.username = 'iris-jupyter-server'; - connection.socket.send(JSON.stringify(msg), () => { + socket.send(JSON.stringify(msg), () => { logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}: ${JSON.stringify(msg)}`); }); }; @@ -221,7 +221,7 @@ export class KernelsApi extends ApiBase { }); msg.header.session = kernelSessionId; msg.header.username = 'iris-jupyter-server'; - connection.socket.send(JSON.stringify(msg), () => { + socket.send(JSON.stringify(msg), () => { logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}: ${JSON.stringify(msg)}`); }); }; @@ -231,7 +231,7 @@ export class KernelsApi extends ApiBase { const originalChannel = msg.channel; msg.channel = 'iopub'; const outString = JSON.stringify(msg); - connection.socket.send(outString, () => { + socket.send(outString, () => { logChannel.debug(` > kernel '${kernelId}' socket message was broadcast on IOPub: ${outString}`); }); msg.channel = originalChannel; @@ -332,7 +332,7 @@ export class KernelsApi extends ApiBase { inputMsg.header.session = kernelSessionId; inputMsg.header.username = 'iris-jupyter-server'; inputMsg.parent_header = message.header; - connection.socket.send(JSON.stringify(inputMsg), () => { + socket.send(JSON.stringify(inputMsg), () => { logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${inputMsg.channel}, type ${inputMsg.header.msg_type}: ${JSON.stringify(inputMsg)}`); }); } @@ -407,7 +407,7 @@ export class KernelsApi extends ApiBase { if (reply) { reply.header.session = kernelSessionId; reply.header.username = 'iris-jupyter-server'; - connection.socket.send(JSON.stringify(reply), () => { + socket.send(JSON.stringify(reply), () => { logChannel.debug(` > Sent reply: ${JSON.stringify(reply)}`); sendStatus('idle'); }); diff --git a/src/makeRESTRequest.ts b/src/makeRESTRequest.ts index 394fcbb..9c3c32f 100644 --- a/src/makeRESTRequest.ts +++ b/src/makeRESTRequest.ts @@ -1,20 +1,18 @@ +/* eslint-disable @typescript-eslint/naming-convention */ // Derived from // https://github.com/intersystems-community/intersystems-servermanager/blob/3e1fdbf66f40111767eb7b4ab8be42656187a7b9/src/makeRESTRequest.ts import axios, { AxiosResponse } from "axios"; -import axiosCookieJarSupport from "axios-cookiejar-support"; import * as https from "https"; -import tough = require("tough-cookie"); import * as vscode from "vscode"; import { IServerSpec } from "@intersystems-community/intersystems-servermanager"; import { logChannel } from "./extension"; -axiosCookieJarSupport(axios); interface IServerSession { serverName: string; username: string; - cookieJar: tough.CookieJar; + cookies: string[]; } export const serverRESTSessions = new Map(); @@ -25,6 +23,23 @@ interface IAtelierRESTEndpoint { path: string; } +function updateCookies(oldCookies: string[], newCookies: string[]): string[] { + newCookies.forEach((cookie) => { + const [cookieName] = cookie.split("="); + const index = oldCookies.findIndex((el) => el.startsWith(cookieName)); + if (index >= 0) { + oldCookies[index] = cookie; + } else { + oldCookies.push(cookie); + } + }); + return oldCookies; +} + +function getCookies(server: IServerSpec): string[] { + return serverRESTSessions.get(server.name)?.cookies ?? []; +} + /** * Make a REST request to an InterSystems server. * @@ -43,10 +58,8 @@ export async function makeRESTRequest( // Create the HTTPS agent const httpsAgent = new https.Agent({ rejectUnauthorized: vscode.workspace.getConfiguration("http").get("proxyStrictSSL") }); - let cookieJar = serverRESTSessions.get(server.name)?.cookieJar; - if (!cookieJar) { - cookieJar = new tough.CookieJar(); - } + // Get the cookies + let cookies: string[] = getCookies(server); // Build the URL let url = server.webServer.scheme + "://" + server.webServer.host + ":" + String(server.webServer.port); @@ -70,8 +83,8 @@ export async function makeRESTRequest( data, headers: { "Content-Type": "application/json", + "Cookie": cookies.join(" ") }, - jar: cookieJar, method, url: encodeURI(url), validateStatus: (status) => { @@ -94,7 +107,6 @@ export async function makeRESTRequest( headers: { "Content-Type": "application/json", }, - jar: cookieJar, method, url: encodeURI(url), withCredentials: true, @@ -107,8 +119,10 @@ export async function makeRESTRequest( respdata = await axios.request( { httpsAgent, - jar: cookieJar, method, + headers: { + "Cookie": cookies.join(" ") + }, url: encodeURI(url), validateStatus: (status) => { return status < 500; @@ -126,7 +140,6 @@ export async function makeRESTRequest( password: server.password, username: server.username, }, - jar: cookieJar, method, url: encodeURI(url), withCredentials: true, @@ -136,9 +149,15 @@ export async function makeRESTRequest( } } - // Only store the session for a serverName the first time because subsequent requests to a server with no username defined must not lose initially-recorded username - if (!serverRESTSessions.get(server.name)) { - serverRESTSessions.set(server.name, { serverName: server.name, username: server.username || '', cookieJar }); + cookies = updateCookies(cookies, respdata.headers['set-cookie'] || []); + + // Only store the session for a serverName the first time because subsequent requests + // to a server with no username defined must not lose initially-recorded username + const session = serverRESTSessions.get(server.name); + if (!session) { + serverRESTSessions.set(server.name, { serverName: server.name, username: server.username || '', cookies }); + } else { + serverRESTSessions.set(server.name, { ...session, cookies }); } return respdata; } catch (error) { @@ -154,14 +173,16 @@ export async function makeRESTRequest( */ export async function logoutREST(server: IServerSpec) { - const cookieJar = serverRESTSessions.get(server.name)?.cookieJar; - if (!cookieJar) { + if (!serverRESTSessions.get(server.name)) { return; } // Create the HTTPS agent const httpsAgent = new https.Agent({ rejectUnauthorized: vscode.workspace.getConfiguration("http").get("proxyStrictSSL") }); + // Get the cookies + let cookies: string[] = getCookies(server); + // Build the URL let url = server.webServer.scheme + "://" + server.webServer.host + ":" + String(server.webServer.port); const pathPrefix = server.webServer.pathPrefix; @@ -175,8 +196,10 @@ export async function logoutREST(server: IServerSpec) { await axios.request( { httpsAgent, - jar: cookieJar, method: "HEAD", + headers: { + "Cookie": cookies.join(" ") + }, url: encodeURI(url), validateStatus: (status) => { return status < 500; From ee43487364276b8c9ad2d2ae6dd3f8380ef3f01c Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 4 Nov 2024 11:00:54 +0000 Subject: [PATCH 04/35] WIP --- package-lock.json | 17 +++--- package.json | 33 +++++++++- src/api/kernels.ts | 146 +++++++++++++++++++++++++++++++------------- src/api/sessions.ts | 12 +++- src/extension.ts | 138 +++++++++++++++++++++++++++++++++++++++-- 5 files changed, 287 insertions(+), 59 deletions(-) diff --git a/package-lock.json b/package-lock.json index f56c429..67021dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "uuid": "^9.0.0" }, "devDependencies": { - "@intersystems-community/intersystems-servermanager": "latest", + "@intersystems-community/intersystems-servermanager": "^3.4.1", "@types/glob": "^8.0.0", "@types/mocha": "^10.0.0", "@types/node": "16.x", @@ -176,10 +176,11 @@ "dev": true }, "node_modules/@intersystems-community/intersystems-servermanager": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.0.4.tgz", - "integrity": "sha512-WbPbBxmYyCwij3FJJ3uAMFeSIjOS6tWApVUl4AD96BpOUpMCSLTJx+CE5rYlH0VRUUeqL4LuWYkkLqZ7RIab6g==", - "dev": true + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.4.1.tgz", + "integrity": "sha512-H3Kro3f/OcM+wXRhZpo9MPEEk4A4He+mVnGXEh2MYdwBEaOH83bfI6b9orJqFq7q4Vww9+1mZfs6IGEQydV/QQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", @@ -4526,9 +4527,9 @@ "dev": true }, "@intersystems-community/intersystems-servermanager": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.0.4.tgz", - "integrity": "sha512-WbPbBxmYyCwij3FJJ3uAMFeSIjOS6tWApVUl4AD96BpOUpMCSLTJx+CE5rYlH0VRUUeqL4LuWYkkLqZ7RIab6g==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.4.1.tgz", + "integrity": "sha512-H3Kro3f/OcM+wXRhZpo9MPEEk4A4He+mVnGXEh2MYdwBEaOH83bfI6b9orJqFq7q4Vww9+1mZfs6IGEQydV/QQ==", "dev": true }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 77fd7bf..b9b9ee3 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,36 @@ "Polyglot IRIS notebook" ] } - ] + ], + "configuration": { + "title": "IRIS Jupyter Server", + "properties": { + "iris-jupyter-server.hosts": { + "type": "object", + "markdownDescription": "`server:NAMESPACE` targets for running Jupyter notebooks on InterSystems IRIS servers, which are themselves defined in `#intersystems.servers#`.", + "scope": "resource", + "patternProperties": { + "[a-z0-9-_~]+:[%A-Z][A-Z\\-_]*": { + "type": "object", + "markdownDescription": "Define a host to connect to. Format is `server:NAMESPACE` where `server` is an entry in `intersystems.servers` and `NAMESPACE` is a namespace on that server. The `intersystems.servers` entry must have a `superServer` object property defined.", + "description": "server:NAMESPACE", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable this host.", + "default": true + } + }, + "default": { + "enabled": true + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + } }, "scripts": { "vscode:prepublish": "npm run webpack", @@ -77,7 +106,7 @@ "uuid": "^9.0.0" }, "devDependencies": { - "@intersystems-community/intersystems-servermanager": "latest", + "@intersystems-community/intersystems-servermanager": "^3.4.1", "@types/glob": "^8.0.0", "@types/mocha": "^10.0.0", "@types/node": "16.x", diff --git a/src/api/kernels.ts b/src/api/kernels.ts index 21c0157..59b9de9 100644 --- a/src/api/kernels.ts +++ b/src/api/kernels.ts @@ -142,17 +142,85 @@ export class KernelsApi extends ApiBase { // servicing kernelId restarts, because the kernelId won't change but the session property of the header object within its messages must change. const kernelSessionId = kernelId; - socket.on('message', (rawData) => { - logChannel.debug(`WS message arrived: ${rawData.toString('utf8')}`); - let message: nteract.JupyterMessage = JSON.parse(rawData.toString('utf8')); + socket.on('message', (rawData: any) => { + const rawBuffer = Buffer.from(rawData); + // See https://jupyter-server.readthedocs.io/en/latest/developers/websocket-protocols.html#v1-kernel-websocket-jupyter-org-protocol + const offsetCount = rawBuffer.readUInt32LE(0); + const offsets: number[] = []; + for (let i = 1; i <= offsetCount; i ++) { + offsets.push(rawBuffer.readUInt32LE(i * 8)); + } + const buffers: Buffer[] = []; + for (let i = 5; i < (offsetCount - 1); i ++) { + const start = offsets[i]; + const end = offsets[i + 1]; + buffers.push(rawBuffer.slice(start, end)); + } + let messageObj: nteract.JupyterMessage = { + channel: rawBuffer.toString('utf8', offsets[0], offsets[1]), + header: JSON.parse(rawBuffer.toString('utf8', offsets[1], offsets[2])), + parent_header: JSON.parse(rawBuffer.toString('utf8', offsets[2], offsets[3])), + metadata: JSON.parse(rawBuffer.toString('utf8', offsets[3], offsets[4])), + content: JSON.parse(rawBuffer.toString('utf8', offsets[4], offsets[5])), + buffers + }; + + const sendMessage = (msg: nteract.JupyterMessage, newStatus?: string) => { + const offsetCount = 5 + (msg.buffers?.length || 0); + const offsetsBuffer = Buffer.alloc((offsetCount + 1) * 8); + let offset = (offsetCount + 1) * 8; + offsetsBuffer.writeUInt32LE(offsetCount + 1, 0); + + let chunkNumber = 0; + let chunk = msg.channel; + let outString = chunk; + offset += Buffer.byteLength(chunk); + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + + chunk = JSON.stringify(msg.header); + outString += chunk; + offset += Buffer.byteLength(chunk); + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + + chunk = JSON.stringify(msg.parent_header); + outString += chunk; + offset += Buffer.byteLength(chunk); + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + + chunk = JSON.stringify(msg.metadata); + outString += chunk; + offset += Buffer.byteLength(chunk); + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + + chunk = JSON.stringify(msg.content); + outString += chunk; + offset += Buffer.byteLength(chunk); + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + + for (const buffer of msg.buffers || []) { + if (buffer instanceof ArrayBuffer) { + outString += buffer; + offset += buffer.byteLength; + } else { + outString += buffer.buffer; + offset += buffer.buffer.byteLength; + } + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + } + + socket.send(offsetsBuffer + outString, () => { + logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}: ${JSON.stringify(msg)}`); + if (newStatus) { + sendStatus(newStatus); + } + }); + }; const sendStatus = (status: string) => { - const msg = nteract.createMessage('status', { parent_header: message.header, content: { 'execution_state': status } }); + const msg = nteract.createMessage('status', { parent_header: messageObj.header, content: { 'execution_state': status } }); msg.header.session = kernelSessionId; msg.header.username = 'iris-jupyter-server'; - socket.send(JSON.stringify(msg), () => { - logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}, status ${status}: ${JSON.stringify(msg)}`); - }); + sendMessage(msg); }; const sendResult = (output: string, executionCount: number) => { @@ -195,7 +263,7 @@ export class KernelsApi extends ApiBase { } } const msg = nteract.createMessage('execute_result', { - parent_header: message.header, + parent_header: messageObj.header, content: { execution_count: executionCount, data, @@ -204,14 +272,12 @@ export class KernelsApi extends ApiBase { }); msg.header.session = kernelSessionId; msg.header.username = 'iris-jupyter-server'; - socket.send(JSON.stringify(msg), () => { - logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}: ${JSON.stringify(msg)}`); - }); + sendMessage(msg); }; const sendError = (text: string) => { const msg = nteract.createMessage('error', { - parent_header: message.header, + parent_header: messageObj.header, content: { ename: 'errName (does this appear?)', evalue: 'error message (does this appear?)', @@ -221,35 +287,30 @@ export class KernelsApi extends ApiBase { }); msg.header.session = kernelSessionId; msg.header.username = 'iris-jupyter-server'; - socket.send(JSON.stringify(msg), () => { - logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}: ${JSON.stringify(msg)}`); - }); + sendMessage(msg); }; /* const broadcast = (msg: nteract.JupyterMessage) => { const originalChannel = msg.channel; msg.channel = 'iopub'; - const outString = JSON.stringify(msg); - socket.send(outString, () => { - logChannel.debug(` > kernel '${kernelId}' socket message was broadcast on IOPub: ${outString}`); - }); + sendMessage(msg); msg.channel = originalChannel; }; */ - logChannel.debug(` < kernel '${kernelId}' socket message received, channel ${message.channel}, type ${message.header.msg_type} message=${JSON.stringify(message)}`); + logChannel.debug(` < kernel '${kernelId}' socket message received, channel ${messageObj.channel}, type ${messageObj.header.msg_type} message=${JSON.stringify(messageObj)}`); - sendStatus('busy'); + //sendStatus('busy'); - //broadcast(message); + ////broadcast(message); let reply: any; - if (message.channel === 'shell') { - switch (message.header.msg_type) { + if (messageObj.channel === 'shell') { + switch (messageObj.header.msg_type) { case 'kernel_info_request': reply = nteract.createMessage('kernel_info_reply', { - parent_header: message.header, + parent_header: messageObj.header, content: { status: 'ok', protocol_version: '5.2', @@ -272,7 +333,7 @@ export class KernelsApi extends ApiBase { if (!irisConn) { sendError('No connection'); reply = nteract.createMessage('execute_reply', { - parent_header: message.header, + parent_header: messageObj.header, content: { 'status': 'error', 'execution_count': 0 @@ -282,7 +343,7 @@ export class KernelsApi extends ApiBase { } let language = 'cos'; - let code: string = message.content.code; + let code: string = messageObj.content.code; switch (process.name) { case 'iris-python': language = 'python'; @@ -332,9 +393,7 @@ export class KernelsApi extends ApiBase { inputMsg.header.session = kernelSessionId; inputMsg.header.username = 'iris-jupyter-server'; inputMsg.parent_header = message.header; - socket.send(JSON.stringify(inputMsg), () => { - logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${inputMsg.channel}, type ${inputMsg.header.msg_type}: ${JSON.stringify(inputMsg)}`); - }); + sendMessage(inputMsg); } */ @@ -343,7 +402,7 @@ export class KernelsApi extends ApiBase { if (!result.status) { sendError(result.out); reply = nteract.createMessage('execute_reply', { - parent_header: message.header, + parent_header: messageObj.header, content: { status: 'error', execution_count: ++process.executionCount @@ -354,7 +413,7 @@ export class KernelsApi extends ApiBase { sendResult(result.out, ++process.executionCount); reply = nteract.createMessage('execute_reply', { - parent_header: message.header, + parent_header: messageObj.header, content: { status: 'ok', execution_count: process.executionCount @@ -370,11 +429,11 @@ export class KernelsApi extends ApiBase { break; } } - else if (message.channel === 'control') { + else if (messageObj.channel === 'control') { // Either the Jupyter extension doesn't use the control channel yet (December 2022), // or we don't get these messages because the nteract messaging package we use implements too early a version of // the Jupyter Messaging API. - switch (message.header.msg_type) { + switch (messageObj.header.msg_type) { case 'shutdown_request': break; @@ -385,8 +444,8 @@ export class KernelsApi extends ApiBase { break; } } - else if (message.channel === 'iopub') { - switch (message.header.msg_type) { + else if (messageObj.channel === 'iopub') { + switch (messageObj.header.msg_type) { case 'iopub': break; @@ -394,8 +453,8 @@ export class KernelsApi extends ApiBase { break; } } - else if (message.channel === 'stdin') { - switch (message.header.msg_type) { + else if (messageObj.channel === 'stdin') { + switch (messageObj.header.msg_type) { case 'input_reply': break; @@ -407,16 +466,17 @@ export class KernelsApi extends ApiBase { if (reply) { reply.header.session = kernelSessionId; reply.header.username = 'iris-jupyter-server'; - socket.send(JSON.stringify(reply), () => { - logChannel.debug(` > Sent reply: ${JSON.stringify(reply)}`); - sendStatus('idle'); - }); + //sendMessage(reply, 'idle'); } else { - sendStatus('idle'); + //sendStatus('idle'); } }); + + socket.on('error', (error) => { + logChannel.debug(`WSget for kernelId '${kernelId}' channels on '${serverNamespace}' error: ${JSON.stringify(error)}`); + }); return; } ); diff --git a/src/api/sessions.ts b/src/api/sessions.ts index efda352..a7870ba 100644 --- a/src/api/sessions.ts +++ b/src/api/sessions.ts @@ -23,7 +23,7 @@ export class SessionsApi extends ApiBase { return result; }); - fastify.post<{ Body: JupyterServerAPI.ISession, Params: IParams }>('/:serverNamespace/api/sessions', (request, reply) => { + fastify.post('/:serverNamespace/api/sessions', (request: FastifyRequest, reply) => { const { serverNamespace } = request.params; const serverNamespaceMgr = ServerNamespaceMgr.get(serverNamespace); if (!serverNamespaceMgr?.target.serverSpec) { @@ -31,7 +31,15 @@ export class SessionsApi extends ApiBase { return {}; } const target = serverNamespaceMgr.target; - var session: JupyterServerAPI.ISession = request.body; + + var session: JupyterServerAPI.ISession; + try { + session = JSON.parse(request.body); + } + catch (error) { + reply.code(400); + return {}; + } const { name, kernel } = session; const existingSession = serverNamespaceMgr?.getSession(name); diff --git a/src/extension.ts b/src/extension.ts index c148cb3..8e033bf 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,16 +1,20 @@ import * as vscode from 'vscode'; import Fastify from 'fastify'; import * as FastifyWS from '@fastify/websocket'; -import { Jupyter } from '@vscode/jupyter-extension'; +import * as ServerManager from '@intersystems-community/intersystems-servermanager'; +import { Jupyter, JupyterServer } from '@vscode/jupyter-extension'; import { KernelsApi } from './api/kernels'; import { MiscApi } from './api'; import { SessionsApi } from './api/sessions'; +import { makeRESTRequest } from './makeRESTRequest'; //import { ContentsApi } from './api/contents'; export let extensionUri: vscode.Uri; export let logChannel: vscode.LogOutputChannel; -export function activate(context: vscode.ExtensionContext) { +let serverManagerApi: any; + +export async function activate(context: vscode.ExtensionContext) { extensionUri = context.extensionUri; logChannel = vscode.window.createOutputChannel('IRIS Jupyter Server Proxy', { log: true}); @@ -18,12 +22,21 @@ export function activate(context: vscode.ExtensionContext) { const jupyterExt = vscode.extensions.getExtension('ms-toolsai.jupyter'); if (!jupyterExt) { - throw new Error('Jupyter Extension not installed'); + throw new Error('Jupyter extension not installed'); } if (!jupyterExt.isActive) { - jupyterExt.activate(); + await jupyterExt.activate(); + } + const serverManagerExt = vscode.extensions.getExtension(ServerManager.EXTENSION_ID); + if (!serverManagerExt) { + throw new Error('Server Manager extension not installed'); + } + if (!serverManagerExt.isActive) { + await serverManagerExt.activate(); } + serverManagerApi = serverManagerExt.exports; + // Create the Jupyter Server Proxy const fastify = Fastify({ //logger: true }); @@ -67,6 +80,123 @@ export function activate(context: vscode.ExtensionContext) { }; start(); + const serverCollection = jupyterExt.exports.createJupyterServerCollection( + `${context.extension.id}:targets`, + 'IRIS Notebook Servers...', + { + provideJupyterServers: async () => { + const servers: JupyterServer[] = []; + const hosts = vscode.workspace.getConfiguration('iris-jupyter-server').get<{ enabled: boolean }[]>('hosts'); + if (typeof hosts === 'object' && hosts) { + for (const key in hosts) { + if (hosts[key].enabled === false) { + continue; + } + servers.push(jupyterServer(key)); + } + } + return servers; + }, + resolveJupyterServer: ((server) => server), + } + ); + context.subscriptions.push(serverCollection); + + // Command provider + const ADD_HOST_COMMAND_LABEL = 'Add IRIS Notebook Host...'; + serverCollection.commandProvider = { + provideCommands: () => { + return [ + { + label: ADD_HOST_COMMAND_LABEL, + description: 'Configure an IRIS server:namespace as a Jupyter Notebook host', + canBeAutoSelected: true, + }, + ]; + }, + handleCommand: async (command, token) => { + if (command.label === ADD_HOST_COMMAND_LABEL) { + + const disposables: vscode.Disposable[] = []; + const serverNamespace = await new Promise(async (resolve, reject) => { + + const servers: ServerManager.IServerName[] = await serverManagerApi.getServerNames(); + const promisesOfEligibleServers = servers.map(async (server): Promise => { + const serverSpec: ServerManager.IServerSpec | undefined = await serverManagerApi.getServerSpec(server.name); + return (serverSpec?.superServer?.port === undefined) + ? null + : { name: server.name, description: server.description, detail: `${serverSpec.superServer.host}:${serverSpec.superServer.port}` }; + }); + const eligibleServers = (await Promise.all( + promisesOfEligibleServers + )).filter((server): server is ServerManager.IServerName => server !== null); + + const quickPick = vscode.window.createQuickPick(); + disposables.push(quickPick); + quickPick.title = 'Choose IRIS Server'; + quickPick.placeholder = 'Pick from your IRIS server definitions that specify a superserver port'; + quickPick.matchOnDescription = true; + quickPick.items = eligibleServers.map((serverName) => ({ label: serverName.name, description: `${serverName.detail}${serverName.description ? ` - ${serverName.description}` : ''}` })); + quickPick.buttons = [vscode.QuickInputButtons.Back]; + quickPick.onDidTriggerButton((e) => { + if (e === vscode.QuickInputButtons.Back) { + // The user has opted to go back to the previous UI in the workflow, + // Returning `undefined` to Jupyter extension as part of `handleCommand` + // will trigger Jupyter Extension to display the previous UI + resolve(undefined); + quickPick.hide(); + } + }, disposables); + quickPick.onDidHide(() => { + // The user has opted to get out of this workflow, + // Throwing cancellation error will exit the Kernel Picker completely. + reject(new vscode.CancellationError()); + }, disposables); + quickPick.onDidAccept(async () => { + const serverName = quickPick.selectedItems[0].label; + const serverSpec = await serverManagerApi.getServerSpec(serverName); + if (!serverSpec) { + vscode.window.showErrorMessage(`Server '${serverName}' is not defined`); + return undefined; + } + + const response = await makeRESTRequest("GET", serverSpec); + if (response?.status !== 200) { + vscode.window.showErrorMessage(`Server '${serverName}' is not available`); + return undefined; + } else { + const namespaces = response.data.result.content.namespaces; + if (namespaces.length === 0) { + vscode.window.showErrorMessage(`No namespaces available to you on '${serverName}'`); + return undefined; + } + //TODO choose from namespaces + const serverNamespace = `${serverName}:${namespaces[0]}`; + + resolve(serverNamespace); + } + }, disposables); + + // Start the picker + quickPick.show(); + }).finally(() => vscode.Disposable.from(...disposables).dispose()); + + // Return server back to the Jupyter Extension. + return serverNamespace ? jupyterServer(serverNamespace) : undefined; + } + }, + }; + + function jupyterServer(serverNamespace: string): JupyterServer { + return { + id: `${context.extension.id}:${serverNamespace}`, + label: serverNamespace, + connectionInformation: { + baseUrl: vscode.Uri.parse(`http://localhost:50773/${serverNamespace}`), + token: '1', + }, + }; + } } export function deactivate() {} From e1b652e09fbb2956c970de9a8e7cff5324695bbf Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Wed, 6 Nov 2024 15:02:23 +0000 Subject: [PATCH 05/35] WIP --- .vscode/settings.json | 2 +- irisapp/Dockerfile | 2 +- src/api/kernels.ts | 63 +++++++++++++------- src/extension.ts | 4 +- src/serverNamespaceMgr.ts | 14 +++++ test/test-iris-jupyter-server.code-workspace | 2 +- 6 files changed, 59 insertions(+), 28 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 857d664..1e7ff8c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,6 +15,6 @@ "mapped": false }, "objectscript.conn": { - "active": true + "active": false }, } diff --git a/irisapp/Dockerfile b/irisapp/Dockerfile index ce52c9e..cffcbce 100644 --- a/irisapp/Dockerfile +++ b/irisapp/Dockerfile @@ -1,5 +1,5 @@ #ARG IMAGE=containers.intersystems.com/intersystems/iris-community:2022.3.0.606.0 -ARG IMAGE=containers.intersystems.com/intersystems/iris-community:2023.1.0.229.0 +ARG IMAGE=containers.intersystems.com/intersystems/iris-community:2024.2 FROM $IMAGE diff --git a/src/api/kernels.ts b/src/api/kernels.ts index 59b9de9..063f59d 100644 --- a/src/api/kernels.ts +++ b/src/api/kernels.ts @@ -71,18 +71,29 @@ export class KernelsApi extends ApiBase { // TODO const serverNamespace = request.params.serverNamespace; const kernelId = request.params.kernelId; - const kernel = ServerNamespaceMgr.get(serverNamespace)?.getKernel(kernelId); - if (!kernel) { + const mgr = ServerNamespaceMgr.get(serverNamespace); + if (!mgr) { reply.code(404); - return; + return {}; + } + const kernel = mgr.getKernel(kernelId); + const process = mgr.getProcess(kernelId); + if (!kernel || !process) { + // Nothing to do + reply.code(204); + return {}; } - //TODO Delete - reply.code(404); - return; - - reply.code(204); - return kernel; + const jobNumber = process.connection.iris.classMethodValue('%SYSTEM.SYS', 'ProcessID'); + const result = process.connection.iris.classMethodValue('%SYSTEM.Process', 'Terminate', jobNumber); + if (result === 1) { + reply.code(204); + mgr.deleteKernel(kernelId); + } + else { + reply.code(404); + } + return {}; }); fastify.post('/:serverNamespace/api/kernels/:kernelId/interrupt', (request: FastifyRequest, reply) => { @@ -93,7 +104,7 @@ export class KernelsApi extends ApiBase { const process = ServerNamespaceMgr.get(serverNamespace)?.getProcess(kernelId); if (!process) { reply.code(404); - return; + return {}; } //TODO - Blocked by Node.js Native API not being async @@ -101,11 +112,12 @@ export class KernelsApi extends ApiBase { const result = process.connection.iris.classMethodValue('%SYSTEM.Process', 'Terminate', jobNumber); if (result === 1) { reply.code(204); + ServerNamespaceMgr.get(serverNamespace)?.deleteKernel(kernelId); } else { reply.code(404); } - return; + return {}; }); fastify.post('/:serverNamespace/api/kernels/:kernelId/restart', (request: FastifyRequest, reply) => { @@ -166,38 +178,39 @@ export class KernelsApi extends ApiBase { }; const sendMessage = (msg: nteract.JupyterMessage, newStatus?: string) => { - const offsetCount = 5 + (msg.buffers?.length || 0); + const offsetCount = 6 + (msg.buffers?.length || 0); const offsetsBuffer = Buffer.alloc((offsetCount + 1) * 8); + offsetsBuffer.writeUInt32LE(offsetCount, 0); let offset = (offsetCount + 1) * 8; - offsetsBuffer.writeUInt32LE(offsetCount + 1, 0); let chunkNumber = 0; let chunk = msg.channel; let outString = chunk; - offset += Buffer.byteLength(chunk); offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + offset += Buffer.byteLength(chunk); chunk = JSON.stringify(msg.header); outString += chunk; - offset += Buffer.byteLength(chunk); offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + offset += Buffer.byteLength(chunk); chunk = JSON.stringify(msg.parent_header); outString += chunk; - offset += Buffer.byteLength(chunk); offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + offset += Buffer.byteLength(chunk); chunk = JSON.stringify(msg.metadata); outString += chunk; - offset += Buffer.byteLength(chunk); offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + offset += Buffer.byteLength(chunk); chunk = JSON.stringify(msg.content); outString += chunk; - offset += Buffer.byteLength(chunk); offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + offset += Buffer.byteLength(chunk); for (const buffer of msg.buffers || []) { + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); if (buffer instanceof ArrayBuffer) { outString += buffer; offset += buffer.byteLength; @@ -205,10 +218,14 @@ export class KernelsApi extends ApiBase { outString += buffer.buffer; offset += buffer.buffer.byteLength; } - offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); } - socket.send(offsetsBuffer + outString, () => { + // The final offset is for an imaginary additional chunk + offsetsBuffer.writeUInt32LE(offset, ++chunkNumber * 8); + + const outBuffer = Buffer.from(outString); + + socket.send(Buffer.concat([offsetsBuffer, outBuffer]), () => { logChannel.debug(` > kernel '${kernelId}' socket message sent, channel ${msg.channel}, type ${msg.header.msg_type}: ${JSON.stringify(msg)}`); if (newStatus) { sendStatus(newStatus); @@ -301,7 +318,7 @@ export class KernelsApi extends ApiBase { logChannel.debug(` < kernel '${kernelId}' socket message received, channel ${messageObj.channel}, type ${messageObj.header.msg_type} message=${JSON.stringify(messageObj)}`); - //sendStatus('busy'); + sendStatus('busy'); ////broadcast(message); @@ -466,10 +483,10 @@ export class KernelsApi extends ApiBase { if (reply) { reply.header.session = kernelSessionId; reply.header.username = 'iris-jupyter-server'; - //sendMessage(reply, 'idle'); + sendMessage(reply, 'idle'); } else { - //sendStatus('idle'); + sendStatus('idle'); } }); diff --git a/src/extension.ts b/src/extension.ts index 8e033bf..2f8dc1e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -97,7 +97,7 @@ export async function activate(context: vscode.ExtensionContext) { } return servers; }, - resolveJupyterServer: ((server) => server), + resolveJupyterServer: ((server: any) => server), } ); context.subscriptions.push(serverCollection); @@ -114,7 +114,7 @@ export async function activate(context: vscode.ExtensionContext) { }, ]; }, - handleCommand: async (command, token) => { + handleCommand: async (command: any, token: any) => { if (command.label === ADD_HOST_COMMAND_LABEL) { const disposables: vscode.Disposable[] = []; diff --git a/src/serverNamespaceMgr.ts b/src/serverNamespaceMgr.ts index 5dd759c..9fb96cb 100644 --- a/src/serverNamespaceMgr.ts +++ b/src/serverNamespaceMgr.ts @@ -60,6 +60,20 @@ export class ServerNamespaceMgr extends Disposable { return session; } + deleteKernel(kernelId: string) { + logChannel.debug(`ServerNamespaceMgr: delete kernel ${kernelId}`); + + const process = this._augmentedKernelMap.get(kernelId); + if (!process) { + return; + } + + process.connection.dispose(); + const sessionName = process.sessionName; + this._sessionMap.delete(sessionName); + this._augmentedKernelMap.delete(kernelId); + } + restartKernel(kernelId: string): string { logChannel.debug(`ServerNamespaceMgr: restart kernel ${kernelId}`); diff --git a/test/test-iris-jupyter-server.code-workspace b/test/test-iris-jupyter-server.code-workspace index eb9301d..9afc142 100644 --- a/test/test-iris-jupyter-server.code-workspace +++ b/test/test-iris-jupyter-server.code-workspace @@ -10,7 +10,7 @@ ], "settings": { "objectscript.conn": { - "active": true + "active": false } } } From aaf319c363124139bd5c72af4fc0ccb7d025cba4 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Wed, 6 Nov 2024 18:35:30 +0000 Subject: [PATCH 06/35] WIP --- src/jupyterServerAPI.ts | 1 + src/serverNamespaceMgr.ts | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/jupyterServerAPI.ts b/src/jupyterServerAPI.ts index 4fc9194..fbd6eca 100644 --- a/src/jupyterServerAPI.ts +++ b/src/jupyterServerAPI.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ // Our version of Jupyter Server API types export namespace JupyterServerAPI { diff --git a/src/serverNamespaceMgr.ts b/src/serverNamespaceMgr.ts index 9fb96cb..4b2d1c7 100644 --- a/src/serverNamespaceMgr.ts +++ b/src/serverNamespaceMgr.ts @@ -31,12 +31,12 @@ export class ServerNamespaceMgr extends Disposable { return Array.from(this._augmentedKernelMap.values()); } - getKernel(id: string): JupyterServerAPI.IKernel | undefined { - return this._augmentedKernelMap.get(id); + getKernel(kernelId: string): JupyterServerAPI.IKernel | undefined { + return this._augmentedKernelMap.get(kernelId); } - getProcess(id: string): IProcess | undefined { - return this._augmentedKernelMap.get(id); + getProcess(kernelId: string): IProcess | undefined { + return this._augmentedKernelMap.get(kernelId); } allSessions(): JupyterServerAPI.ISession[] { From e6689d654a372c9b8407f7f0d1d5da7fc86e4e7c Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 8 Nov 2024 14:03:13 +0000 Subject: [PATCH 07/35] WIP --- src/api.ts | 80 ++++++++------- src/extension.ts | 260 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 229 insertions(+), 111 deletions(-) diff --git a/src/api.ts b/src/api.ts index 3b63e05..d883ba0 100644 --- a/src/api.ts +++ b/src/api.ts @@ -86,8 +86,51 @@ export abstract class ApiBase { let serverName = parts[0].toLowerCase(); let namespace = parts[1].toUpperCase(); + + // Check existence of server-side support class, and install it if absent + const checkNamespace = (async (serverSpec: IServerSpec) => { + const runQuery = ((serverSpec: IServerSpec) => { + return makeRESTRequest( + 'POST', + serverSpec, + { apiVersion: 1, namespace, path: '/action/query' }, + { query: 'SELECT PolyglotKernel.CodeExecutor_HostName() AS Host, PolyglotKernel.CodeExecutor_SuperServerPort() AS Port', parameters: [] } + ); + }); + try { + let response = await runQuery(serverSpec); + if (response !== undefined) { + if (response.data.result.content === undefined) { + if (response.data.status?.errors[0]?.code !== 5540) { + throw new Error(response.data.status.summary); + } + // Class is missing, so load and compile it, then re-run the query + const choice = await vscode.window.showInformationMessage(`Polyglot.CodeExecutor class not found in ${serverSpec.name}:${namespace}. Load it now?`, { modal: true }, { title: 'Yes' }, { title: 'No', isCloseAffordance: true }); + if (choice?.title !== 'Yes') { + throw new Error('Polyglot.CodeExecutor class not available'); + } + await loadAndCompile(serverSpec, namespace); + response = await runQuery(serverSpec); + if (response?.data.result.content === undefined) { + throw new Error(`Retry failed after class load: ${response?.data.status.summary ?? 'Unknown'}`); + } + } + const host = serverSpec.superServer?.host ?? response.data.result.content[0].Host; + const port = serverSpec.superServer?.port ?? response.data.result.content[0].Port; + serverSpec.superServer = { host, port }; + } + } catch (error) { + throw error; + } finally { + await logoutREST(serverSpec); + } + }); + let serverSpec = Server.get(serverName); if (serverSpec) { + if (!ServerNamespaceMgr.get(serverNamespace)) { + await checkNamespace(serverSpec); + } return { server: serverName, namespace, serverSpec }; } if (serverName === '') { @@ -174,44 +217,11 @@ export abstract class ApiBase { } // Check existence of server-side support class, and install it if absent - const runQuery = ((serverSpec: IServerSpec) => { - return makeRESTRequest( - 'POST', - serverSpec, - { apiVersion: 1, namespace, path: '/action/query' }, - { query: 'SELECT PolyglotKernel.CodeExecutor_HostName() AS Host, PolyglotKernel.CodeExecutor_SuperServerPort() AS Port', parameters: [] } - ); - }); - try { - let response = await runQuery(serverSpec); - if (response !== undefined) { - if (response.data.result.content === undefined) { - if (response.data.status?.errors[0]?.code !== 5540) { - throw new Error(response.data.status.summary); - } - // Class is missing, so load and compile it, then re-run the query - const choice = await vscode.window.showInformationMessage(`Polyglot.CodeExecutor class not found in ${serverSpec.name}:${namespace}. Load it now?`, { modal: true }, { title: 'Yes' }, { title: 'No', isCloseAffordance: true }); - if (choice?.title !== 'Yes') { - throw new Error('Polyglot.CodeExecutor class not available'); - } - await loadAndCompile(serverSpec, namespace); - response = await runQuery(serverSpec); - if (response?.data.result.content === undefined) { - throw new Error(`Retry failed after class load: ${response?.data.status.summary ?? 'Unknown'}`); - } - } - const host = serverSpec.superServer?.host ?? response.data.result.content[0].Host; - const port = serverSpec.superServer?.port ?? response.data.result.content[0].Port; - serverSpec.superServer = { host, port }; - } - } catch (error) { - throw error; - } finally { - await logoutREST(serverSpec); - } + await checkNamespace(serverSpec); return { server: serverName, namespace, serverSpec }; }); + const target = await resolveTarget(); if (target.serverSpec) { if (!Server.get(serverNamespace)) { diff --git a/src/extension.ts b/src/extension.ts index 2f8dc1e..afe29f2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,7 +2,7 @@ import * as vscode from 'vscode'; import Fastify from 'fastify'; import * as FastifyWS from '@fastify/websocket'; import * as ServerManager from '@intersystems-community/intersystems-servermanager'; -import { Jupyter, JupyterServer } from '@vscode/jupyter-extension'; +import { Jupyter, JupyterServer, JupyterServerCommand } from '@vscode/jupyter-extension'; import { KernelsApi } from './api/kernels'; import { MiscApi } from './api'; import { SessionsApi } from './api/sessions'; @@ -68,25 +68,32 @@ export async function activate(context: vscode.ExtensionContext) { }); // Run the server, listening only on loopback interface - const start = async () => { + const started = await new Promise(async (resolve) => { const port = 50773; + const displayName = context.extension.packageJSON.displayName; try { await fastify.listen({ port }); - logChannel.info(`Listening on port ${port}`); + logChannel.info(`${displayName} is listening on local port ${port}`); + resolve(true); } catch (err) { fastify.log.error(err); logChannel.error(err as Error); + vscode.window.showErrorMessage(`Failed to start ${displayName} on local port ${port} (${(err as Error).message})`); + resolve(false); } - }; - start(); + }); + if (!started) { + return; + } + // Add ourself as type of server const serverCollection = jupyterExt.exports.createJupyterServerCollection( `${context.extension.id}:targets`, 'IRIS Notebook Servers...', { - provideJupyterServers: async () => { + provideJupyterServers: () => { const servers: JupyterServer[] = []; - const hosts = vscode.workspace.getConfiguration('iris-jupyter-server').get<{ enabled: boolean }[]>('hosts'); + const hosts = vscode.workspace.getConfiguration('iris-jupyter-server', vscode.window.activeNotebookEditor?.notebook.uri).get<{ enabled: boolean }[]>('hosts'); if (typeof hosts === 'object' && hosts) { for (const key in hosts) { if (hosts[key].enabled === false) { @@ -97,96 +104,197 @@ export async function activate(context: vscode.ExtensionContext) { } return servers; }, - resolveJupyterServer: ((server: any) => server), + resolveJupyterServer: (async (server: JupyterServer) => { + if (server.connectionInformation) { + return server; + } + const serverNamespace = server.id.split(':').slice(-2).join(':'); + return jupyterServer(serverNamespace); + }), } ); context.subscriptions.push(serverCollection); - // Command provider - const ADD_HOST_COMMAND_LABEL = 'Add IRIS Notebook Host...'; + // Add commands to the bottom of our list of servers (aka IRIS Notebook Hosts) + const ADD_USER_HOST_COMMAND_LABEL = 'Add IRIS Notebook Host...'; + const ADD_WORKSPACE_HOST_COMMAND_LABEL = 'Add IRIS Notebook Host for Workspace...'; + const ADD_FOLDER_HOST_COMMAND_LABEL = 'Add IRIS Notebook Host for Notebook\'s Folder...'; serverCollection.commandProvider = { provideCommands: () => { - return [ - { - label: ADD_HOST_COMMAND_LABEL, - description: 'Configure an IRIS server:namespace as a Jupyter Notebook host', - canBeAutoSelected: true, - }, - ]; + const commands: JupyterServerCommand[] = []; + commands.push({ + label: ADD_USER_HOST_COMMAND_LABEL, + canBeAutoSelected: true, + description: 'User-level setting', + }); + if (vscode.workspace.workspaceFile) { + const fileName = vscode.workspace.workspaceFile.path.split('/').pop(); + const caption = fileName?.endsWith('.code-workspace') ? fileName : 'Untitled'; + commands.push({ + label: ADD_WORKSPACE_HOST_COMMAND_LABEL, + description: `Workspace-level setting (${caption})`, + }); + } + const activeNotebookUri = vscode.window.activeNotebookEditor?.notebook.uri; + if (activeNotebookUri) { + const folder = vscode.workspace.getWorkspaceFolder(activeNotebookUri); + if (folder) { + commands.push({ + label: ADD_FOLDER_HOST_COMMAND_LABEL, + description: `Folder-level setting (${folder.name})`, + }); + } + } + return commands; }, handleCommand: async (command: any, token: any) => { - if (command.label === ADD_HOST_COMMAND_LABEL) { + const disposables: vscode.Disposable[] = []; + const serverNamespace = await new Promise(async (resolve, reject) => { - const disposables: vscode.Disposable[] = []; - const serverNamespace = await new Promise(async (resolve, reject) => { + const servers: ServerManager.IServerName[] = await serverManagerApi.getServerNames(); + const promisesOfEligibleServers = servers.map(async (server): Promise => { + const serverSpec: ServerManager.IServerSpec | undefined = await serverManagerApi.getServerSpec(server.name); + return (serverSpec?.superServer?.port === undefined) + ? null + : { name: server.name, description: server.description, detail: `${serverSpec.superServer.host}:${serverSpec.superServer.port}` }; + }); + const eligibleServers = (await Promise.all( + promisesOfEligibleServers + )).filter((server): server is ServerManager.IServerName => server !== null); - const servers: ServerManager.IServerName[] = await serverManagerApi.getServerNames(); - const promisesOfEligibleServers = servers.map(async (server): Promise => { - const serverSpec: ServerManager.IServerSpec | undefined = await serverManagerApi.getServerSpec(server.name); - return (serverSpec?.superServer?.port === undefined) - ? null - : { name: server.name, description: server.description, detail: `${serverSpec.superServer.host}:${serverSpec.superServer.port}` }; - }); - const eligibleServers = (await Promise.all( - promisesOfEligibleServers - )).filter((server): server is ServerManager.IServerName => server !== null); - - const quickPick = vscode.window.createQuickPick(); - disposables.push(quickPick); - quickPick.title = 'Choose IRIS Server'; - quickPick.placeholder = 'Pick from your IRIS server definitions that specify a superserver port'; - quickPick.matchOnDescription = true; - quickPick.items = eligibleServers.map((serverName) => ({ label: serverName.name, description: `${serverName.detail}${serverName.description ? ` - ${serverName.description}` : ''}` })); - quickPick.buttons = [vscode.QuickInputButtons.Back]; - quickPick.onDidTriggerButton((e) => { - if (e === vscode.QuickInputButtons.Back) { - // The user has opted to go back to the previous UI in the workflow, - // Returning `undefined` to Jupyter extension as part of `handleCommand` - // will trigger Jupyter Extension to display the previous UI + const quickPick = vscode.window.createQuickPick(); + disposables.push(quickPick); + quickPick.title = 'Choose IRIS Server'; + quickPick.placeholder = 'Pick from your IRIS server definitions that specify a superserver port'; + quickPick.matchOnDescription = true; + quickPick.items = eligibleServers.map((serverName) => ({ label: serverName.name, description: `${serverName.detail}${serverName.description ? ` - ${serverName.description}` : ''}` })); + quickPick.buttons = [vscode.QuickInputButtons.Back]; + quickPick.onDidTriggerButton((e) => { + if (e === vscode.QuickInputButtons.Back) { + // The user has opted to go back to the previous UI in the workflow, + // Returning `undefined` to Jupyter extension as part of `handleCommand` + // will trigger Jupyter Extension to display the previous UI + resolve(undefined); + } + }, disposables); + const didHide = quickPick.onDidHide(() => { + // The user has opted to get out of this workflow, + // Throwing cancellation error will exit the Kernel Picker completely. + reject(new vscode.CancellationError()); + }, disposables); + quickPick.onDidAccept(() => { + didHide.dispose(); // No longer need to listen for the hide event + resolve(quickPick.selectedItems[0].label); + }, disposables); + + // Start the picker + quickPick.show(); + }) + .then(async (serverName) => { + return await new Promise(async (resolve, reject) => { + const serverSpec = await serverManagerApi.getServerSpec(serverName); + if (!serverSpec) { + vscode.window.showErrorMessage(`Server '${serverName}' is not defined`); + resolve(undefined); + } + if (typeof serverSpec.password === 'undefined') { + const scopes = [serverSpec.name, serverSpec.username || '']; + let session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { silent: true }); + if (!session) { + session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true }); + } + if (session) { + serverSpec.username = session.scopes[1]; + serverSpec.password = session.accessToken; + } + } + + const response = await makeRESTRequest("GET", serverSpec); + if (response?.status !== 200) { + vscode.window.showErrorMessage(`Server '${serverName}' is not available`); + resolve(undefined); + } + else { + const namespaces = response.data.result.content.namespaces; + if (namespaces.length === 0) { + vscode.window.showErrorMessage(`No namespaces available to you on '${serverName}'`); resolve(undefined); - quickPick.hide(); } - }, disposables); - quickPick.onDidHide(() => { - // The user has opted to get out of this workflow, - // Throwing cancellation error will exit the Kernel Picker completely. - reject(new vscode.CancellationError()); - }, disposables); - quickPick.onDidAccept(async () => { - const serverName = quickPick.selectedItems[0].label; - const serverSpec = await serverManagerApi.getServerSpec(serverName); - if (!serverSpec) { - vscode.window.showErrorMessage(`Server '${serverName}' is not defined`); - return undefined; + const namespace = await vscode.window.showQuickPick(namespaces, { placeHolder: `Choose a namespace on '${serverName}'` }); + if (namespace === undefined) { + // Throwing cancellation error will exit the Kernel Picker completely. + reject(new vscode.CancellationError()); } + resolve(`${serverName}:${namespace}`); + } + }); + }) + .finally(() => vscode.Disposable.from(...disposables).dispose()); + + if (serverNamespace) { + + // Ensure support class is installed + await KernelsApi.getTarget(serverNamespace); + + // Add to the configuration if not already there + interface IHosts { + [key: string]: { enabled: boolean }; + } + const inspectedSetting = vscode.workspace.getConfiguration('iris-jupyter-server', vscode.window.activeNotebookEditor?.notebook.uri).inspect('hosts') || { key: 'iris-jupyter-server.hosts' }; - const response = await makeRESTRequest("GET", serverSpec); - if (response?.status !== 200) { - vscode.window.showErrorMessage(`Server '${serverName}' is not available`); - return undefined; - } else { - const namespaces = response.data.result.content.namespaces; - if (namespaces.length === 0) { - vscode.window.showErrorMessage(`No namespaces available to you on '${serverName}'`); - return undefined; - } - //TODO choose from namespaces - const serverNamespace = `${serverName}:${namespaces[0]}`; - - resolve(serverNamespace); + // Add to the appropriate configuration if not already there, or if disabled + let higherLevels = ''; + switch (command.label) { + case ADD_USER_HOST_COMMAND_LABEL: + higherLevels = 'workspace-level or folder-level'; + inspectedSetting.globalValue = inspectedSetting.globalValue || {}; + if (!inspectedSetting.globalValue[serverNamespace]?.enabled) { + inspectedSetting.globalValue[serverNamespace] = { enabled: true }; + await vscode.workspace.getConfiguration('iris-jupyter-server').update('hosts', inspectedSetting.globalValue, vscode.ConfigurationTarget.Global); } - }, disposables); + break; - // Start the picker - quickPick.show(); - }).finally(() => vscode.Disposable.from(...disposables).dispose()); + case ADD_WORKSPACE_HOST_COMMAND_LABEL: + higherLevels = 'folder-level'; + inspectedSetting.workspaceValue = inspectedSetting.workspaceValue || {}; + if (!inspectedSetting.workspaceValue[serverNamespace]?.enabled) { + inspectedSetting.workspaceValue[serverNamespace] = { enabled: true }; + await vscode.workspace.getConfiguration('iris-jupyter-server').update('hosts', inspectedSetting.workspaceValue, vscode.ConfigurationTarget.Workspace); + } + break; + + case ADD_FOLDER_HOST_COMMAND_LABEL: + inspectedSetting.workspaceFolderValue = inspectedSetting.workspaceFolderValue || {}; + if (!inspectedSetting.workspaceFolderValue[serverNamespace]?.enabled) { + inspectedSetting.workspaceFolderValue[serverNamespace] = { enabled: true }; + await vscode.workspace.getConfiguration('iris-jupyter-server').update('hosts', inspectedSetting.workspaceFolderValue, vscode.ConfigurationTarget.WorkspaceFolder); + } + break; + + default: + vscode.window.showErrorMessage(`Unhandled command: ${command.label}`, { modal: true }); + break; + } + const hosts = vscode.workspace.getConfiguration('iris-jupyter-server', vscode.window.activeNotebookEditor?.notebook.uri).get<{ enabled: boolean }[]>('hosts'); + if (typeof hosts === 'object' && hosts) { + for (const key in hosts) { + if (key === serverNamespace && hosts[key].enabled === false) { + vscode.window.showErrorMessage(`Added host '${serverNamespace}' cannot be used because it is masked by a disabled ${higherLevels} definition.`, { modal: true }); + + // Abort kernel selection instead of backtracking to previous pick step + throw new vscode.CancellationError(); + } + } + } - // Return server back to the Jupyter Extension. - return serverNamespace ? jupyterServer(serverNamespace) : undefined; } + + // Return target back to the Jupyter Extension. + return serverNamespace ? jupyterServer(serverNamespace) : undefined; }, }; + // Return the JupyterServer object for a given server:NAMESPACE function jupyterServer(serverNamespace: string): JupyterServer { return { id: `${context.extension.id}:${serverNamespace}`, From 2335592d70d803ed60a15554af40266dc3381a3d Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 8 Nov 2024 17:02:52 +0000 Subject: [PATCH 08/35] Require VSCode 1.93 minimum so we can specify account for authentication --- package-lock.json | 19 ++++++++++--------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 67021dc..bcef757 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@types/mocha": "^10.0.0", "@types/node": "16.x", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.78.0", + "@types/vscode": "^1.93.0", "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.38.1", "@typescript-eslint/parser": "^5.38.1", @@ -39,7 +39,7 @@ "webpack-cli": "^4.10.0" }, "engines": { - "vscode": "^1.78.0" + "vscode": "^1.93.0" } }, "node_modules/@discoveryjs/json-ext": { @@ -399,10 +399,11 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "node_modules/@types/vscode": { - "version": "1.78.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.78.1.tgz", - "integrity": "sha512-wEA+54axejHu7DhcUfnFBan1IqFD1gBDxAFz8LoX06NbNDMRJv/T6OGthOs52yZccasKfN588EyffHWABkR0fg==", - "dev": true + "version": "1.95.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.95.0.tgz", + "integrity": "sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.3", @@ -4718,9 +4719,9 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "@types/vscode": { - "version": "1.78.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.78.1.tgz", - "integrity": "sha512-wEA+54axejHu7DhcUfnFBan1IqFD1gBDxAFz8LoX06NbNDMRJv/T6OGthOs52yZccasKfN588EyffHWABkR0fg==", + "version": "1.95.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.95.0.tgz", + "integrity": "sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==", "dev": true }, "@types/ws": { diff --git a/package.json b/package.json index b9b9ee3..af862d1 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ } ], "engines": { - "vscode": "^1.78.0" + "vscode": "^1.93.0" }, "categories": [ "Other" @@ -111,7 +111,7 @@ "@types/mocha": "^10.0.0", "@types/node": "16.x", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.78.0", + "@types/vscode": "^1.93.0", "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.38.1", "@typescript-eslint/parser": "^5.38.1", From 65fae169ec22d9416b8c1fba727612f0b94591c5 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 8 Nov 2024 18:00:13 +0000 Subject: [PATCH 09/35] Pass account when getting authentication session Prevents unwanted quickpick(s) --- src/api.ts | 7 ++++--- src/extension.ts | 6 ++++-- src/server.ts | 7 ++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/api.ts b/src/api.ts index d883ba0..4d25ed5 100644 --- a/src/api.ts +++ b/src/api.ts @@ -8,7 +8,7 @@ import * as vscode from 'vscode'; import { FastifyInstance, FastifyRequest, RequestGenericInterface } from 'fastify'; import { IRISConnection } from './iris'; import * as serverManager from '@intersystems-community/intersystems-servermanager'; -import { IServerSpec, Server } from './server'; +import { getAccount, IServerSpec, Server } from './server'; import { ServerNamespaceMgr } from './serverNamespaceMgr'; import { JupyterServerAPI } from './jupyterServerAPI'; import { logoutREST, makeRESTRequest } from './makeRESTRequest'; @@ -202,9 +202,10 @@ export abstract class ApiBase { } if (typeof serverSpec.password === 'undefined') { const scopes = [serverSpec.name, serverSpec.username || '']; - let session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { silent: true }); + const account = getAccount(serverSpec); + let session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { silent: true, account }); if (!session) { - session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true }); + session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true, account }); } if (session) { serverSpec.username = session.scopes[1]; diff --git a/src/extension.ts b/src/extension.ts index afe29f2..2de673a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,6 +7,7 @@ import { KernelsApi } from './api/kernels'; import { MiscApi } from './api'; import { SessionsApi } from './api/sessions'; import { makeRESTRequest } from './makeRESTRequest'; +import { getAccount } from './server'; //import { ContentsApi } from './api/contents'; export let extensionUri: vscode.Uri; @@ -199,9 +200,10 @@ export async function activate(context: vscode.ExtensionContext) { } if (typeof serverSpec.password === 'undefined') { const scopes = [serverSpec.name, serverSpec.username || '']; - let session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { silent: true }); + const account = getAccount(serverSpec); + let session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { silent: true, account }); if (!session) { - session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true }); + session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true, account }); } if (session) { serverSpec.username = session.scopes[1]; diff --git a/src/server.ts b/src/server.ts index 63bbfdb..76c3ce0 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,5 +1,5 @@ import * as serverManager from '@intersystems-community/intersystems-servermanager'; -import { Disposable } from 'vscode'; +import { AuthenticationSessionAccountInformation, Disposable } from 'vscode'; // Server Manager interfaces @@ -12,6 +12,11 @@ export interface IServerSpec extends serverManager.IServerSpec { superServer?: ISuperServerSpec; } +export function getAccount(serverSpec: IServerSpec): AuthenticationSessionAccountInformation | undefined { + const accountId = serverSpec.username ? `${serverSpec.name}/${serverSpec.username.toLowerCase()}` : undefined; + return accountId ? { id: accountId, label: '' } : undefined; +} + var serverMap = new Map(); export class Server extends Disposable { From 1d43f9495e0a1661f5a2acf8472c531c2f71cc25 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Sun, 10 Nov 2024 01:16:50 +0000 Subject: [PATCH 10/35] Add to Server Manager tree --- package.json | 22 ++++++++++++++++++++++ src/extension.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/package.json b/package.json index af862d1..b6e2127 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,28 @@ ] } ], + "commands": [ + { + "command": "iris-jupyter-server.intersystems-servermanager.newNotebook", + "title": "New Notebook", + "icon": "$(notebook)" + } + ], + "menus": { + "view/item/context": [ + { + "command": "iris-jupyter-server.intersystems-servermanager.newNotebook", + "when": "view == intersystems-community_servermanager && viewItem =~ /namespace$/", + "group": "inline@26" + } + ], + "commandPalette": [ + { + "command": "iris-jupyter-server.intersystems-servermanager.newNotebook", + "when": "false" + } + ] + }, "configuration": { "title": "IRIS Jupyter Server", "properties": { diff --git a/src/extension.ts b/src/extension.ts index 2de673a..2b5d033 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import * as vscode from 'vscode'; import Fastify from 'fastify'; import * as FastifyWS from '@fastify/websocket'; @@ -14,6 +15,8 @@ export let extensionUri: vscode.Uri; export let logChannel: vscode.LogOutputChannel; let serverManagerApi: any; +let jupyterApi: any; +let jupyterKernelService: any; export async function activate(context: vscode.ExtensionContext) { @@ -28,6 +31,8 @@ export async function activate(context: vscode.ExtensionContext) { if (!jupyterExt.isActive) { await jupyterExt.activate(); } + jupyterApi = jupyterExt.exports; + const serverManagerExt = vscode.extensions.getExtension(ServerManager.EXTENSION_ID); if (!serverManagerExt) { throw new Error('Server Manager extension not installed'); @@ -296,6 +301,41 @@ export async function activate(context: vscode.ExtensionContext) { }, }; + + // The command we add to the Server Manager tree at the namespace level + context.subscriptions.push(vscode.commands.registerCommand('iris-jupyter-server.intersystems-servermanager.newNotebook', async (serverTreeItem) => { + const idArray: string[] = serverTreeItem.id.split(':'); + const serverId = idArray[1]; + const namespace = idArray[3]; + const serverNamespace = `${serverId}:${namespace}`; + + if (!jupyterKernelService) { + jupyterKernelService = await jupyterApi.getKernelService(); + if (!jupyterKernelService) { + vscode.window.showErrorMessage('Cannot access jupyterApi.getKernelService() - try using VS Code Insiders'); + return; + } + } + + const kernelConnectionMetadataArray = await jupyterKernelService.getKernelSpecifications(); + + await vscode.commands.executeCommand('ipynb.newUntitledIpynb'); + const nb = vscode.window.activeNotebookEditor?.notebook; + if (!nb) { + return; + } + + const kind = 'startUsingRemoteKernelSpec'; + const baseUrl = jupyterServer(serverNamespace).connectionInformation?.baseUrl?.toString(true) || ''; + const kernelSpecName = 'iris-objectscript'; + const kernelConnectionMetadata = kernelConnectionMetadataArray.find((item: any) => item.kind === kind && item.baseUrl === baseUrl && item.kernelSpec.name === kernelSpecName); + if (!kernelConnectionMetadata) { + vscode.window.showErrorMessage(`Cannot yet find kernelSpec '${kernelSpecName}' on '${serverNamespace}'`); + return; + } + jupyterApi.openNotebook(nb.uri, kernelConnectionMetadata.id); + })); + // Return the JupyterServer object for a given server:NAMESPACE function jupyterServer(serverNamespace: string): JupyterServer { return { From 48175f8aeaa277f0ff2e991faea6784969a9f382 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 11 Nov 2024 07:15:50 +0000 Subject: [PATCH 11/35] Improve new notebook launch from Server Manager --- src/extension.ts | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 2b5d033..11dc826 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -308,32 +308,63 @@ export async function activate(context: vscode.ExtensionContext) { const serverId = idArray[1]; const namespace = idArray[3]; const serverNamespace = `${serverId}:${namespace}`; + let firstCall = false; if (!jupyterKernelService) { + firstCall = true; jupyterKernelService = await jupyterApi.getKernelService(); if (!jupyterKernelService) { vscode.window.showErrorMessage('Cannot access jupyterApi.getKernelService() - try using VS Code Insiders'); return; } + jupyterKernelService.onDidChangeKernelSpecifications(() => { + console.log('Kernel specs changed'); + }); } - const kernelConnectionMetadataArray = await jupyterKernelService.getKernelSpecifications(); - await vscode.commands.executeCommand('ipynb.newUntitledIpynb'); - const nb = vscode.window.activeNotebookEditor?.notebook; - if (!nb) { + const nbEditor = vscode.window.activeNotebookEditor; + if (!nbEditor) { return; } + const nbUri = nbEditor.notebook.uri; + + const SECONDS_TO_WAIT = 10; + if (firstCall) { + const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `Please wait ${SECONDS_TO_WAIT} seconds while your first IRIS notebook initializes...`, 'markdown'); + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [waitMessageCell])]); + await vscode.workspace.applyEdit(workspaceEdit); + await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: `Waiting ${SECONDS_TO_WAIT} seconds for IRIS Notebook Servers to be ready...` }, async (progress) => { + for (let i = 0; i < SECONDS_TO_WAIT; i++) { + progress.report({ increment: Math.ceil(100 / SECONDS_TO_WAIT) }); + await new Promise(resolve => setTimeout(resolve, 1_000)); + } + }); + } + + const kernelConnectionMetadataArray = await jupyterKernelService.getKernelSpecifications(); + // What to find const kind = 'startUsingRemoteKernelSpec'; const baseUrl = jupyterServer(serverNamespace).connectionInformation?.baseUrl?.toString(true) || ''; const kernelSpecName = 'iris-objectscript'; + + // Find it const kernelConnectionMetadata = kernelConnectionMetadataArray.find((item: any) => item.kind === kind && item.baseUrl === baseUrl && item.kernelSpec.name === kernelSpecName); if (!kernelConnectionMetadata) { - vscode.window.showErrorMessage(`Cannot yet find kernelSpec '${kernelSpecName}' on '${serverNamespace}'`); + if (!kernelConnectionMetadata) { + vscode.window.showErrorMessage(`Cannot yet find kernelSpec '${kernelSpecName}' on '${serverNamespace}'`); + } return; } - jupyterApi.openNotebook(nb.uri, kernelConnectionMetadata.id); + await jupyterApi.openNotebook(nbUri, kernelConnectionMetadata.id); + const welcomeMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `New IRIS ObjectScript notebook connected to **${serverNamespace}**`, 'markdown'); + const infoCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, ' WRITE "Process ", $JOB, " in namespace ", $NAMESPACE, " on server ", $SYSTEM, " (", $ZVERSION, ")",!', 'objectscript-int'); + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [welcomeMessageCell, infoCell])]); + await vscode.workspace.applyEdit(workspaceEdit); + await vscode.commands.executeCommand('notebook.execute'); })); // Return the JupyterServer object for a given server:NAMESPACE From 53a3e5011261347264141ae8a9a27b49d534efee Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 11 Nov 2024 17:40:00 +0000 Subject: [PATCH 12/35] Walk user through first connect --- src/extension.ts | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 11dc826..6141ae8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,6 +11,10 @@ import { makeRESTRequest } from './makeRESTRequest'; import { getAccount } from './server'; //import { ContentsApi } from './api/contents'; +interface IHosts { + [key: string]: { enabled: boolean }; +} + export let extensionUri: vscode.Uri; export let logChannel: vscode.LogOutputChannel; @@ -244,9 +248,6 @@ export async function activate(context: vscode.ExtensionContext) { await KernelsApi.getTarget(serverNamespace); // Add to the configuration if not already there - interface IHosts { - [key: string]: { enabled: boolean }; - } const inspectedSetting = vscode.workspace.getConfiguration('iris-jupyter-server', vscode.window.activeNotebookEditor?.notebook.uri).inspect('hosts') || { key: 'iris-jupyter-server.hosts' }; // Add to the appropriate configuration if not already there, or if disabled @@ -329,7 +330,7 @@ export async function activate(context: vscode.ExtensionContext) { } const nbUri = nbEditor.notebook.uri; - const SECONDS_TO_WAIT = 10; + const SECONDS_TO_WAIT = 5; if (firstCall) { const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `Please wait ${SECONDS_TO_WAIT} seconds while your first IRIS notebook initializes...`, 'markdown'); const workspaceEdit = new vscode.WorkspaceEdit(); @@ -354,7 +355,23 @@ export async function activate(context: vscode.ExtensionContext) { const kernelConnectionMetadata = kernelConnectionMetadataArray.find((item: any) => item.kind === kind && item.baseUrl === baseUrl && item.kernelSpec.name === kernelSpecName); if (!kernelConnectionMetadata) { if (!kernelConnectionMetadata) { - vscode.window.showErrorMessage(`Cannot yet find kernelSpec '${kernelSpecName}' on '${serverNamespace}'`); + const mdMessage = +`# First Time Use on ${serverNamespace} +The IRIS Notebook Host **${serverNamespace}** must initially be accessed from the notebook kernel picker. + +## Instructions +1. Click the button in the top right of this notebook, captioned either **Select Kernel** or **Detecting Kernels**. +2. If the next picker is titled 'Select Kernel' choose **IRIS Notebook Servers...**. Otherwise choose **Select Another Kernel...**, then choose **IRIS Notebook Servers...** from that picker. +4. Choose **${serverNamespace}** from the picker titled 'Select a Jupyter Server'. +5. When the picker titled 'Select a Kernel from ${serverNamespace}' is populated wait a couple of seconds, then press the 'Esc' key while focus is on its input field. +6. Back on the INTERSYSTEMS: SERVERS view click again on the **New Notebook** button of the **${namespace}** namespace folder under the **${serverId}** server. + +You can then close and discard the original notebook containing these instructions. +`; + const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, mdMessage, 'markdown'); + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [waitMessageCell])]); + await vscode.workspace.applyEdit(workspaceEdit); } return; } From c41caf620fa9f4da054b57488f23a0e1a039b9a9 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 11 Nov 2024 18:00:49 +0000 Subject: [PATCH 13/35] Add setting automatically; detect missing superServer port; bump version --- package.json | 2 +- src/extension.ts | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index b6e2127..2ec5bbf 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "iris-jupyter-server", "displayName": "Jupyter Server Proxy for InterSystems IRIS", "description": "Run a local Jupyter Server acting as a proxy for InterSystems IRIS servers defined in InterSystems Server Manager", - "version": "0.0.7-SNAPSHOT", + "version": "0.1.0-SNAPSHOT", "preview": true, "publisher": "intersystems-community", "icon": "images/logo.png", diff --git a/src/extension.ts b/src/extension.ts index 6141ae8..83551d9 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -354,8 +354,22 @@ export async function activate(context: vscode.ExtensionContext) { // Find it const kernelConnectionMetadata = kernelConnectionMetadataArray.find((item: any) => item.kind === kind && item.baseUrl === baseUrl && item.kernelSpec.name === kernelSpecName); if (!kernelConnectionMetadata) { - if (!kernelConnectionMetadata) { - const mdMessage = + + const hosts = vscode.workspace.getConfiguration('iris-jupyter-server').get('hosts') || {}; + if (!hosts[serverNamespace]?.enabled) { + const serverSpec = await serverManagerApi.getServerSpec(serverId); + if (!serverSpec?.superServer?.port) { + const errorMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `To operate as an IRIS Notebook Host the **${serverId}** server definition requires its superserver port number.`, 'markdown'); + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [errorMessageCell])]); + await vscode.workspace.applyEdit(workspaceEdit); + return; + } + await vscode.workspace.getConfiguration('iris-jupyter-server').update('hosts', { ...hosts, [serverNamespace]: { enabled: true } }, vscode.ConfigurationTarget.Global); + } + + + const mdMessage = `# First Time Use on ${serverNamespace} The IRIS Notebook Host **${serverNamespace}** must initially be accessed from the notebook kernel picker. @@ -368,11 +382,10 @@ The IRIS Notebook Host **${serverNamespace}** must initially be accessed from th You can then close and discard the original notebook containing these instructions. `; - const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, mdMessage, 'markdown'); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [waitMessageCell])]); - await vscode.workspace.applyEdit(workspaceEdit); - } + const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, mdMessage, 'markdown'); + const workspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [waitMessageCell])]); + await vscode.workspace.applyEdit(workspaceEdit); return; } await jupyterApi.openNotebook(nbUri, kernelConnectionMetadata.id); From d2186ef08a28b692e124ae81f78438eec8dd98f3 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Tue, 12 Nov 2024 22:16:52 +0000 Subject: [PATCH 14/35] Use Server Manager 3.8.0 types --- package-lock.json | 18 +++++++++--------- package.json | 2 +- src/api.ts | 16 ++++++++-------- src/extension.ts | 11 +++++++---- src/server.ts | 18 +----------------- 5 files changed, 26 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index bcef757..81d2860 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "iris-jupyter-server", - "version": "0.0.7-SNAPSHOT", + "version": "0.1.0-SNAPSHOT", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "iris-jupyter-server", - "version": "0.0.7-SNAPSHOT", + "version": "0.1.0-SNAPSHOT", "license": "MIT", "dependencies": { "@fastify/websocket": "^11.0.1", @@ -18,7 +18,7 @@ "uuid": "^9.0.0" }, "devDependencies": { - "@intersystems-community/intersystems-servermanager": "^3.4.1", + "@intersystems-community/intersystems-servermanager": "^3.8.0", "@types/glob": "^8.0.0", "@types/mocha": "^10.0.0", "@types/node": "16.x", @@ -176,9 +176,9 @@ "dev": true }, "node_modules/@intersystems-community/intersystems-servermanager": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.4.1.tgz", - "integrity": "sha512-H3Kro3f/OcM+wXRhZpo9MPEEk4A4He+mVnGXEh2MYdwBEaOH83bfI6b9orJqFq7q4Vww9+1mZfs6IGEQydV/QQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.8.0.tgz", + "integrity": "sha512-D3/LoQXOsApLo07BLHipuibUYIQLz5MK57GWLtmtYIiNa2gJ0Igaz0Fv5SuZ+gdPL3tlN1g88iQ4vJ7E+arRiQ==", "dev": true, "license": "MIT" }, @@ -4528,9 +4528,9 @@ "dev": true }, "@intersystems-community/intersystems-servermanager": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.4.1.tgz", - "integrity": "sha512-H3Kro3f/OcM+wXRhZpo9MPEEk4A4He+mVnGXEh2MYdwBEaOH83bfI6b9orJqFq7q4Vww9+1mZfs6IGEQydV/QQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@intersystems-community/intersystems-servermanager/-/intersystems-servermanager-3.8.0.tgz", + "integrity": "sha512-D3/LoQXOsApLo07BLHipuibUYIQLz5MK57GWLtmtYIiNa2gJ0Igaz0Fv5SuZ+gdPL3tlN1g88iQ4vJ7E+arRiQ==", "dev": true }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 2ec5bbf..dfc29e1 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "uuid": "^9.0.0" }, "devDependencies": { - "@intersystems-community/intersystems-servermanager": "^3.4.1", + "@intersystems-community/intersystems-servermanager": "^3.8.0", "@types/glob": "^8.0.0", "@types/mocha": "^10.0.0", "@types/node": "16.x", diff --git a/src/api.ts b/src/api.ts index 4d25ed5..c6896eb 100644 --- a/src/api.ts +++ b/src/api.ts @@ -8,18 +8,18 @@ import * as vscode from 'vscode'; import { FastifyInstance, FastifyRequest, RequestGenericInterface } from 'fastify'; import { IRISConnection } from './iris'; import * as serverManager from '@intersystems-community/intersystems-servermanager'; -import { getAccount, IServerSpec, Server } from './server'; import { ServerNamespaceMgr } from './serverNamespaceMgr'; import { JupyterServerAPI } from './jupyterServerAPI'; import { logoutREST, makeRESTRequest } from './makeRESTRequest'; import { extensionUri, logChannel } from './extension'; import { Mutex } from 'async-mutex'; +import { Server } from './server'; // Our interfaces export interface ITarget { server: string, namespace: string, - serverSpec?: IServerSpec + serverSpec?: serverManager.IServerSpec } export interface IProcess extends JupyterServerAPI.IKernel { @@ -38,7 +38,7 @@ export interface IRequestGeneric extends RequestGenericInterface { } // The Server Manager API handle -let serverManagerApi: any; +let serverManagerApi: serverManager.ServerManagerAPI; export abstract class ApiBase { @@ -51,7 +51,7 @@ export abstract class ApiBase { return serverNamespaceMgr.target; } - const loadAndCompile = (async (serverSpec: IServerSpec, namespace: string): Promise => { + const loadAndCompile = (async (serverSpec: serverManager.IServerSpec, namespace: string): Promise => { const fileUri = vscode.Uri.joinPath(extensionUri, 'server/src/PolyglotKernel/CodeExecutor.cls'); const name = 'PolyglotKernel.CodeExecutor.cls'; const content = (await vscode.workspace.fs.readFile(fileUri)).toString().split('\n').map((line) => line.replace('\r', '')); @@ -88,8 +88,8 @@ export abstract class ApiBase { let namespace = parts[1].toUpperCase(); // Check existence of server-side support class, and install it if absent - const checkNamespace = (async (serverSpec: IServerSpec) => { - const runQuery = ((serverSpec: IServerSpec) => { + const checkNamespace = (async (serverSpec: serverManager.IServerSpec) => { + const runQuery = ((serverSpec: serverManager.IServerSpec) => { return makeRESTRequest( 'POST', serverSpec, @@ -196,13 +196,13 @@ export abstract class ApiBase { } serverManagerApi = extension.exports; } - serverSpec = await serverManagerApi.getServerSpec(serverName) as serverManager.IServerSpec; + serverSpec = await serverManagerApi.getServerSpec(serverName); if (!serverSpec) { return { server: serverName, namespace }; } if (typeof serverSpec.password === 'undefined') { const scopes = [serverSpec.name, serverSpec.username || '']; - const account = getAccount(serverSpec); + const account = serverManagerApi.getAccount(serverSpec); let session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { silent: true, account }); if (!session) { session = await vscode.authentication.getSession(serverManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true, account }); diff --git a/src/extension.ts b/src/extension.ts index 83551d9..000cb0d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -8,7 +8,6 @@ import { KernelsApi } from './api/kernels'; import { MiscApi } from './api'; import { SessionsApi } from './api/sessions'; import { makeRESTRequest } from './makeRESTRequest'; -import { getAccount } from './server'; //import { ContentsApi } from './api/contents'; interface IHosts { @@ -18,7 +17,7 @@ interface IHosts { export let extensionUri: vscode.Uri; export let logChannel: vscode.LogOutputChannel; -let serverManagerApi: any; +let serverManagerApi: ServerManager.ServerManagerAPI; let jupyterApi: any; let jupyterKernelService: any; @@ -201,15 +200,19 @@ export async function activate(context: vscode.ExtensionContext) { quickPick.show(); }) .then(async (serverName) => { + if (serverName === undefined) { + return; + } return await new Promise(async (resolve, reject) => { const serverSpec = await serverManagerApi.getServerSpec(serverName); - if (!serverSpec) { + if (serverSpec === undefined) { vscode.window.showErrorMessage(`Server '${serverName}' is not defined`); resolve(undefined); + return; } if (typeof serverSpec.password === 'undefined') { const scopes = [serverSpec.name, serverSpec.username || '']; - const account = getAccount(serverSpec); + const account = serverManagerApi.getAccount(serverSpec); let session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { silent: true, account }); if (!session) { session = await vscode.authentication.getSession(ServerManager.AUTHENTICATION_PROVIDER, scopes, { createIfNone: true, account }); diff --git a/src/server.ts b/src/server.ts index 76c3ce0..83cc07d 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,22 +1,6 @@ -import * as serverManager from '@intersystems-community/intersystems-servermanager'; +import { IServerSpec } from '@intersystems-community/intersystems-servermanager'; import { AuthenticationSessionAccountInformation, Disposable } from 'vscode'; -// Server Manager interfaces - -export interface ISuperServerSpec { - host?: string; - port: number; -} - -export interface IServerSpec extends serverManager.IServerSpec { - superServer?: ISuperServerSpec; -} - -export function getAccount(serverSpec: IServerSpec): AuthenticationSessionAccountInformation | undefined { - const accountId = serverSpec.username ? `${serverSpec.name}/${serverSpec.username.toLowerCase()}` : undefined; - return accountId ? { id: accountId, label: '' } : undefined; -} - var serverMap = new Map(); export class Server extends Disposable { From af855bcf95f63877c6cef2fa94ffaee9d4b47b84 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 15:08:06 +0000 Subject: [PATCH 15/35] Remove Server Manager tree integration experiment It used unstable API from the Jupyter extension which isn't likely to stabilize (see https://github.com/microsoft/vscode-jupyter/issues/16221) --- package.json | 22 ------------ src/extension.ts | 94 ------------------------------------------------ 2 files changed, 116 deletions(-) diff --git a/package.json b/package.json index dfc29e1..8cc43ff 100644 --- a/package.json +++ b/package.json @@ -50,28 +50,6 @@ ] } ], - "commands": [ - { - "command": "iris-jupyter-server.intersystems-servermanager.newNotebook", - "title": "New Notebook", - "icon": "$(notebook)" - } - ], - "menus": { - "view/item/context": [ - { - "command": "iris-jupyter-server.intersystems-servermanager.newNotebook", - "when": "view == intersystems-community_servermanager && viewItem =~ /namespace$/", - "group": "inline@26" - } - ], - "commandPalette": [ - { - "command": "iris-jupyter-server.intersystems-servermanager.newNotebook", - "when": "false" - } - ] - }, "configuration": { "title": "IRIS Jupyter Server", "properties": { diff --git a/src/extension.ts b/src/extension.ts index 000cb0d..cbdc484 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -306,100 +306,6 @@ export async function activate(context: vscode.ExtensionContext) { }; - // The command we add to the Server Manager tree at the namespace level - context.subscriptions.push(vscode.commands.registerCommand('iris-jupyter-server.intersystems-servermanager.newNotebook', async (serverTreeItem) => { - const idArray: string[] = serverTreeItem.id.split(':'); - const serverId = idArray[1]; - const namespace = idArray[3]; - const serverNamespace = `${serverId}:${namespace}`; - let firstCall = false; - - if (!jupyterKernelService) { - firstCall = true; - jupyterKernelService = await jupyterApi.getKernelService(); - if (!jupyterKernelService) { - vscode.window.showErrorMessage('Cannot access jupyterApi.getKernelService() - try using VS Code Insiders'); - return; - } - jupyterKernelService.onDidChangeKernelSpecifications(() => { - console.log('Kernel specs changed'); - }); - } - - await vscode.commands.executeCommand('ipynb.newUntitledIpynb'); - const nbEditor = vscode.window.activeNotebookEditor; - if (!nbEditor) { - return; - } - const nbUri = nbEditor.notebook.uri; - - const SECONDS_TO_WAIT = 5; - if (firstCall) { - const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `Please wait ${SECONDS_TO_WAIT} seconds while your first IRIS notebook initializes...`, 'markdown'); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [waitMessageCell])]); - await vscode.workspace.applyEdit(workspaceEdit); - await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: `Waiting ${SECONDS_TO_WAIT} seconds for IRIS Notebook Servers to be ready...` }, async (progress) => { - for (let i = 0; i < SECONDS_TO_WAIT; i++) { - progress.report({ increment: Math.ceil(100 / SECONDS_TO_WAIT) }); - await new Promise(resolve => setTimeout(resolve, 1_000)); - } - }); - } - - const kernelConnectionMetadataArray = await jupyterKernelService.getKernelSpecifications(); - - // What to find - const kind = 'startUsingRemoteKernelSpec'; - const baseUrl = jupyterServer(serverNamespace).connectionInformation?.baseUrl?.toString(true) || ''; - const kernelSpecName = 'iris-objectscript'; - - // Find it - const kernelConnectionMetadata = kernelConnectionMetadataArray.find((item: any) => item.kind === kind && item.baseUrl === baseUrl && item.kernelSpec.name === kernelSpecName); - if (!kernelConnectionMetadata) { - - const hosts = vscode.workspace.getConfiguration('iris-jupyter-server').get('hosts') || {}; - if (!hosts[serverNamespace]?.enabled) { - const serverSpec = await serverManagerApi.getServerSpec(serverId); - if (!serverSpec?.superServer?.port) { - const errorMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `To operate as an IRIS Notebook Host the **${serverId}** server definition requires its superserver port number.`, 'markdown'); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [errorMessageCell])]); - await vscode.workspace.applyEdit(workspaceEdit); - return; - } - await vscode.workspace.getConfiguration('iris-jupyter-server').update('hosts', { ...hosts, [serverNamespace]: { enabled: true } }, vscode.ConfigurationTarget.Global); - } - - - const mdMessage = -`# First Time Use on ${serverNamespace} -The IRIS Notebook Host **${serverNamespace}** must initially be accessed from the notebook kernel picker. - -## Instructions -1. Click the button in the top right of this notebook, captioned either **Select Kernel** or **Detecting Kernels**. -2. If the next picker is titled 'Select Kernel' choose **IRIS Notebook Servers...**. Otherwise choose **Select Another Kernel...**, then choose **IRIS Notebook Servers...** from that picker. -4. Choose **${serverNamespace}** from the picker titled 'Select a Jupyter Server'. -5. When the picker titled 'Select a Kernel from ${serverNamespace}' is populated wait a couple of seconds, then press the 'Esc' key while focus is on its input field. -6. Back on the INTERSYSTEMS: SERVERS view click again on the **New Notebook** button of the **${namespace}** namespace folder under the **${serverId}** server. - -You can then close and discard the original notebook containing these instructions. -`; - const waitMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, mdMessage, 'markdown'); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [waitMessageCell])]); - await vscode.workspace.applyEdit(workspaceEdit); - return; - } - await jupyterApi.openNotebook(nbUri, kernelConnectionMetadata.id); - const welcomeMessageCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Markup, `New IRIS ObjectScript notebook connected to **${serverNamespace}**`, 'markdown'); - const infoCell = new vscode.NotebookCellData(vscode.NotebookCellKind.Code, ' WRITE "Process ", $JOB, " in namespace ", $NAMESPACE, " on server ", $SYSTEM, " (", $ZVERSION, ")",!', 'objectscript-int'); - const workspaceEdit = new vscode.WorkspaceEdit(); - workspaceEdit.set(nbUri, [new vscode.NotebookEdit(new vscode.NotebookRange(0, nbEditor.notebook.cellCount), [welcomeMessageCell, infoCell])]); - await vscode.workspace.applyEdit(workspaceEdit); - await vscode.commands.executeCommand('notebook.execute'); - })); - // Return the JupyterServer object for a given server:NAMESPACE function jupyterServer(serverNamespace: string): JupyterServer { return { From 6194941d278b03c25e5b6c2b96690f0c5cfa7a40 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 15:41:51 +0000 Subject: [PATCH 16/35] Update README --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 252f9a2..c1ede1d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # intersystems-community.iris-jupyter-server -This VS Code extension is an alpha-quality proof of concept. It leverages [Microsoft's Jupyter extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter) to bring the notebook paradigm to developers working with InterSystems IRIS servers, both local and remote. +This VS Code extension leverages [Microsoft's Jupyter extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter) to bring the notebook paradigm to developers working with InterSystems IRIS servers, both local and remote. ## Getting Started @@ -9,12 +9,19 @@ This VS Code extension is an alpha-quality proof of concept. It leverages [Micro > **Note:** IRIS developers who already use the `objectscript.conn` settings object and don't want to adopt Server Manager should consult a later section of this document for information applicable to them. 3. From VS Code's `File` menu select `New File...`. This option is also available on the Welcome page. 4. When a quickpick appears, choose `Jupyter Notebook`. -5. Click the `Detecting Kernels` button in the upper right of the notebook. -6. In the quickpick titled "Select Kernel" choose `Existing Jupyter Server...`. -7. In the next quickpick ("Select a Jupyter Server") choose `Enter the URL of the running Jupyter server`. -8. Enter `http://localhost:50773/`_servername_`:`_namespace_`?token=1` when prompted. Replace _servername_ with the name of the Server Manager definition you previously created. Replace _namespace_ with the target namespace on that server. Do not omit the colon between these two elements. For example `http://localhost:50773/iris231:USER?token=1` -9. On the next prompt ("Change Server Display Name") enter a suitable name, for example `IRIS231 USER`. Don't leave this blank, else the display name will default to `localhost`, meaning you won't be able to distinguish between entries you create for different **_servername_:_namespace_** combinations. -10. When you connect to a namespace for the first time you will be asked to allow the installation of a support class named `PolyglotKernel.CodeExecutor`. Choose `Yes`. +5. Click the button in the upper right of the notebook captioned `Detecting Kernels` or `Select Kernel`. +6. If the next picker is titled 'Select Kernel' choose `IRIS Notebook Servers...`. Otherwise choose `Select Another Kernel...`, then choose `IRIS Notebook Servers...` from that picker. +7. In the next quickpick ("Select a Jupyter Server") choose `Add IRIS Notebook Host...`. +8. The next quickpick ("Choose IRIS Server"), pick your target. +> **Note:** If your target is missing from the list, do the following: +> - Open your `settings.json` file. One way is to run `Preferences: Open User Settings (JSON)` from Command Palette. +> - Add the `superServer` property to the server's definition within the `intersystems.servers` settings object. +> - The `superServer` property is an object with a required `port` property. The default superserver port for an IRIS instance is 1972. Change this if necessary. +> - If your target's `webServer` property's `host` property doesn't point to the IRIS instance's host but instead to a separate web server then you must also name the IRIS host in the optional `host` property of `superServer`. +> +> Go back to step 5 above. +9. On the next quickpick choose your target namespace. +10. When you connect a notebook to a namespace for the first time you will be asked to allow the installation of a support class named `PolyglotKernel.CodeExecutor`. Choose `Yes`. > **Tip:** To avoid having to load this class into other namespaces on the same server you can add a %ALL package mapping of the `PolyglotKernel` package to the default code database of the namespace you initially connected to. 11. On the kernel selector, choose the `IRIS ObjectScript INT` kernel. 12. The kernel indicator in the upper right of the notebook will display your choice, and the initial notebook cell will show the corresponding language (ObjectScript INT) in the lower right corner. From a549cb409c1fa3a7b0650875326644da77f4f0d5 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 17:47:31 +0000 Subject: [PATCH 17/35] Support `objectscript.conn` --- README.md | 49 +++++++++++++++++++++++------------------------- src/extension.ts | 35 +++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index c1ede1d..fa936db 100644 --- a/README.md +++ b/README.md @@ -6,20 +6,13 @@ This VS Code extension leverages [Microsoft's Jupyter extension](https://marketp 1. Install the extension. This will also install the Jupyter and ObjectScript extension packs if you don't already have them. 2. Use [InterSystems Server Manager](https://marketplace.visualstudio.com/items?itemName=intersystems-community.servermanager) to define a connection to an IRIS server. -> **Note:** IRIS developers who already use the `objectscript.conn` settings object and don't want to adopt Server Manager should consult a later section of this document for information applicable to them. +> **Note:** IRIS developers who already use the `objectscript.conn` settings object and don't want to adopt Server Manager's `intersystems.servers` object for their server definitions are not required to do so. However `objectscript.conn` must contain values for `username` and `password`. Switching to use Server Manager would mean that plaintext password could be avoided. 3. From VS Code's `File` menu select `New File...`. This option is also available on the Welcome page. 4. When a quickpick appears, choose `Jupyter Notebook`. 5. Click the button in the upper right of the notebook captioned `Detecting Kernels` or `Select Kernel`. 6. If the next picker is titled 'Select Kernel' choose `IRIS Notebook Servers...`. Otherwise choose `Select Another Kernel...`, then choose `IRIS Notebook Servers...` from that picker. -7. In the next quickpick ("Select a Jupyter Server") choose `Add IRIS Notebook Host...`. -8. The next quickpick ("Choose IRIS Server"), pick your target. -> **Note:** If your target is missing from the list, do the following: -> - Open your `settings.json` file. One way is to run `Preferences: Open User Settings (JSON)` from Command Palette. -> - Add the `superServer` property to the server's definition within the `intersystems.servers` settings object. -> - The `superServer` property is an object with a required `port` property. The default superserver port for an IRIS instance is 1972. Change this if necessary. -> - If your target's `webServer` property's `host` property doesn't point to the IRIS instance's host but instead to a separate web server then you must also name the IRIS host in the optional `host` property of `superServer`. -> -> Go back to step 5 above. +7. The first time you use the extension you will be taken directly to the next step below (#8). On subsequent uses you are asked to "Select a Jupyter Server" and can pick a previously-used _server:NAMESPACE_ entry, then proceed at step #11 below. Alternatively choose `Add IRIS Notebook Host...` and proceed at step #8. +8. On the "Choose IRIS Server" quickpick, choose your target. 9. On the next quickpick choose your target namespace. 10. When you connect a notebook to a namespace for the first time you will be asked to allow the installation of a support class named `PolyglotKernel.CodeExecutor`. Choose `Yes`. > **Tip:** To avoid having to load this class into other namespaces on the same server you can add a %ALL package mapping of the `PolyglotKernel` package to the default code database of the namespace you initially connected to. @@ -51,29 +44,33 @@ print('Hello world') > **Note:** Cells of a Polyglot IRIS notebook are not language-aware, so they lack syntax coloring, completions etc. The so-called 'cell magics' tell the server-side code executor class which language to run, but the Jupyter notebook extension is not currently able to use them to vary the cell language in the editor. -## Use With `objectscript.conn` - -If you already use the `objectscript.conn` settings object to connect VS Code to your IRIS server, you can reference that connection definition in your Jupyter Server URL. - -- Enter `http://localhost:50773/:?token=1` to connect to the namespace set in the `ns` property of your `objectscript.conn` settings object. -- Enter `http://localhost:50773/:`_namespace_`?token=1` to connect to a different namespace. - -Your `objectscript.conn` must have one of the following formats: -- `{ "active": true, "host": "xxx", "port": nn, "username": "uuu", "password": "***", "ns": "YYY" }` -- `{ "active": true, "server": "xxx", "ns": "YYY" }` - -The first format requires a password to be stored as plaintext. The second format avoids this risk by leveraging Server Manager's secure credential storage. - -Both formats may optionally specify `"https": true`. - ## Other Resources The [Jupyter PowerToys](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.vscode-jupyter-powertoys) extension adds a Kernels view to a dedicated Jupyter view container. Access this from its activity bar icon to explore remote servers, kernelspecs and active kernels (sessions). +## Configuration Settings +The `iris-jupyter-server.hosts` object in your settings file contains the _server:NAMESPACE_ entries that you defined as you connected for the first time. + +For example: + +```json + "iris-jupyter-server.hosts": { + "irislatest:USER": { + "enabled": true + }, + "iris231:USER": { + "enabled": true + }, + "doh-vvm:USER": { + "enabled": true + } + }, +``` + ## Known Issues 1. The InterSystems IRIS Node Native API connectivity we use operates only in synchronous mode. Consequently the output from a long-running cell does not stream, so you have to wait for all the work to complete before you see any results for the cell. -2. The Jupyter Server proxy launched by the extension always listens on port 50773. +2. The Jupyter Server proxy launched by the extension always listens on port 50773. If this port is unavailable it will fail to start. ## Feedback diff --git a/src/extension.ts b/src/extension.ts index cbdc484..283e163 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -102,7 +102,8 @@ export async function activate(context: vscode.ExtensionContext) { { provideJupyterServers: () => { const servers: JupyterServer[] = []; - const hosts = vscode.workspace.getConfiguration('iris-jupyter-server', vscode.window.activeNotebookEditor?.notebook.uri).get<{ enabled: boolean }[]>('hosts'); + const scope = vscode.window.activeNotebookEditor?.notebook.uri; + const hosts = vscode.workspace.getConfiguration('iris-jupyter-server', scope).get<{ enabled: boolean }[]>('hosts'); if (typeof hosts === 'object' && hosts) { for (const key in hosts) { if (hosts[key].enabled === false) { @@ -111,6 +112,19 @@ export async function activate(context: vscode.ExtensionContext) { servers.push(jupyterServer(key)); } } + const objectscriptConn = vscode.workspace.getConfiguration('objectscript', scope).get<{ active: boolean, ns: string, server: string, host: string, port: number, username: string, password: string, }>('conn'); + if (objectscriptConn?.active && objectscriptConn.ns) { + const { ns, server, host, port, username, password } = objectscriptConn; + if (server && ns) { + const serverNamespace = `${server}:${ns.toUpperCase()}`; + if (!servers.find((server) => server.label === serverNamespace)) { + servers.push(jupyterServer(serverNamespace, `[${server}]:${ns.toUpperCase()}`)); + } + } + else if (host && port && username && password && ns) { + servers.push(jupyterServer(':', `[${host}:${port}]:${ns.toUpperCase()}`)); + } + } return servers; }, resolveJupyterServer: (async (server: JupyterServer) => { @@ -160,23 +174,14 @@ export async function activate(context: vscode.ExtensionContext) { const disposables: vscode.Disposable[] = []; const serverNamespace = await new Promise(async (resolve, reject) => { - const servers: ServerManager.IServerName[] = await serverManagerApi.getServerNames(); - const promisesOfEligibleServers = servers.map(async (server): Promise => { - const serverSpec: ServerManager.IServerSpec | undefined = await serverManagerApi.getServerSpec(server.name); - return (serverSpec?.superServer?.port === undefined) - ? null - : { name: server.name, description: server.description, detail: `${serverSpec.superServer.host}:${serverSpec.superServer.port}` }; - }); - const eligibleServers = (await Promise.all( - promisesOfEligibleServers - )).filter((server): server is ServerManager.IServerName => server !== null); + const servers: ServerManager.IServerName[] = serverManagerApi.getServerNames(); const quickPick = vscode.window.createQuickPick(); disposables.push(quickPick); quickPick.title = 'Choose IRIS Server'; - quickPick.placeholder = 'Pick from your IRIS server definitions that specify a superserver port'; + quickPick.placeholder = 'Pick from your IRIS server definitions'; quickPick.matchOnDescription = true; - quickPick.items = eligibleServers.map((serverName) => ({ label: serverName.name, description: `${serverName.detail}${serverName.description ? ` - ${serverName.description}` : ''}` })); + quickPick.items = servers.map((serverName) => ({ label: serverName.name, description: `${serverName.detail}${serverName.description ? ` - ${serverName.description}` : ''}` })); quickPick.buttons = [vscode.QuickInputButtons.Back]; quickPick.onDidTriggerButton((e) => { if (e === vscode.QuickInputButtons.Back) { @@ -307,10 +312,10 @@ export async function activate(context: vscode.ExtensionContext) { // Return the JupyterServer object for a given server:NAMESPACE - function jupyterServer(serverNamespace: string): JupyterServer { + function jupyterServer(serverNamespace: string, label?: string): JupyterServer { return { id: `${context.extension.id}:${serverNamespace}`, - label: serverNamespace, + label: label ?? serverNamespace, connectionInformation: { baseUrl: vscode.Uri.parse(`http://localhost:50773/${serverNamespace}`), token: '1', From f8e9e858d20df6e4c0bbe836c1a3582e9abe9366 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 18:12:03 +0000 Subject: [PATCH 18/35] Make port number configurable --- README.md | 5 +++-- package.json | 6 ++++++ src/extension.ts | 10 +++++----- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fa936db..e1a0485 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,9 @@ print('Hello world') The [Jupyter PowerToys](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.vscode-jupyter-powertoys) extension adds a Kernels view to a dedicated Jupyter view container. Access this from its activity bar icon to explore remote servers, kernelspecs and active kernels (sessions). ## Configuration Settings -The `iris-jupyter-server.hosts` object in your settings file contains the _server:NAMESPACE_ entries that you defined as you connected for the first time. +The optional `iris-jupyter-server.port` setting defines the local port to listen on. Default is 50773. + +The `iris-jupyter-server.hosts` settings object contains the _server:NAMESPACE_ entries that you defined as you connected for the first time. For example: @@ -70,7 +72,6 @@ For example: ## Known Issues 1. The InterSystems IRIS Node Native API connectivity we use operates only in synchronous mode. Consequently the output from a long-running cell does not stream, so you have to wait for all the work to complete before you see any results for the cell. -2. The Jupyter Server proxy launched by the extension always listens on port 50773. If this port is unavailable it will fail to start. ## Feedback diff --git a/package.json b/package.json index 8cc43ff..39f5e53 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,12 @@ "configuration": { "title": "IRIS Jupyter Server", "properties": { + "iris-jupyter-server.port": { + "type": "number", + "markdownDescription": "Local port to use for running Jupyter notebooks on InterSystems IRIS servers. Restart the extension after changing this setting.", + "scope": "window", + "default": 50773 + }, "iris-jupyter-server.hosts": { "type": "object", "markdownDescription": "`server:NAMESPACE` targets for running Jupyter notebooks on InterSystems IRIS servers, which are themselves defined in `#intersystems.servers#`.", diff --git a/src/extension.ts b/src/extension.ts index 283e163..7911d05 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -77,17 +77,17 @@ export async function activate(context: vscode.ExtensionContext) { }); // Run the server, listening only on loopback interface + const proxyPort = vscode.workspace.getConfiguration('iris-jupyter-server').get('port') || 50773; const started = await new Promise(async (resolve) => { - const port = 50773; const displayName = context.extension.packageJSON.displayName; try { - await fastify.listen({ port }); - logChannel.info(`${displayName} is listening on local port ${port}`); + await fastify.listen({ port: proxyPort }); + logChannel.info(`${displayName} is listening on local port ${proxyPort}`); resolve(true); } catch (err) { fastify.log.error(err); logChannel.error(err as Error); - vscode.window.showErrorMessage(`Failed to start ${displayName} on local port ${port} (${(err as Error).message})`); + vscode.window.showErrorMessage(`Failed to start ${displayName} on local port ${proxyPort} (${(err as Error).message})`); resolve(false); } }); @@ -317,7 +317,7 @@ export async function activate(context: vscode.ExtensionContext) { id: `${context.extension.id}:${serverNamespace}`, label: label ?? serverNamespace, connectionInformation: { - baseUrl: vscode.Uri.parse(`http://localhost:50773/${serverNamespace}`), + baseUrl: vscode.Uri.parse(`http://localhost:${proxyPort}/${serverNamespace}`), token: '1', }, }; From 3679fee9f7f2d765510533072c3fb79194d70c4a Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 18:49:21 +0000 Subject: [PATCH 19/35] Add CI --- .github/pull_request_template.md | 1 + .github/workflows/main.yml | 169 +++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/main.yml diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..513e907 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1 @@ +This PR fixes # \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..81fda16 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,169 @@ +name: CI + +on: + push: + branches: + - main + paths-ignore: + - ".vscode/**" + - ".github/**" + - "*.md" + - "**/*.md" + pull_request: + branches: + - main + release: + types: + - released + +concurrency: + group: ${{ github.workflow }}-${{ github.base_ref || github.run_id }} + cancel-in-progress: false + +jobs: + build: + timeout-minutes: 10 + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + outputs: + taggedbranch: ${{ steps.find-branch.outputs.taggedbranch }} + steps: + - uses: actions/checkout@v3 + - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* + - name: Find which branch the release tag points at + id: find-branch + if: github.event_name == 'release' && runner.os == 'Linux' + shell: bash + run: | + git fetch --depth=1 origin +refs/heads/*:refs/heads/* + set -x + TAGGEDBRANCH=$(git for-each-ref --points-at=${{github.sha}} --format='%(refname:lstrip=2)' refs/heads/) + echo "taggedbranch=$TAGGEDBRANCH" >> $GITHUB_OUTPUT + - name: Set an output + id: set-version + if: runner.os == 'Linux' + run: | + set -x + VERSION=$(jq -r '.version' package.json | cut -d- -f1) + [ $GITHUB_EVENT_NAME == 'release' ] && VERSION=${{ github.event.release.tag_name }} && VERSION=${VERSION/v/} + CHANGELOG=$(cat CHANGELOG.md | sed -n "/## \[${VERSION}\]/,/## /p" | sed '/^$/d;1d;$d') + CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" + echo "changelog=$CHANGELOG" >> $GITHUB_OUTPUT + git tag -l | cat + [ $GITHUB_EVENT_NAME == 'push' ] && VERSION+=-beta && VERSION+=.$(($(git tag -l "v$VERSION.*" | sort -nt. -k4 2>/dev/null | tail -1 | cut -d. -f4)+1)) + [ $GITHUB_EVENT_NAME == 'pull_request' ] && VERSION+=-dev.${{ github.event.pull_request.number }} + echo "version=$VERSION" >> $GITHUB_OUTPUT + NAME=$(jq -r '.name' package.json)-$VERSION + echo "name=$NAME" >> $GITHUB_OUTPUT + tmp=$(mktemp) + jq --arg version "$VERSION" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json + mkdir dist + echo $VERSION > meta.version + echo $NAME > meta.name + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - run: npm install + - name: lint + if: runner.os == 'Linux-NOSUCH' + run: npm run lint + - run: npm run compile + - name: npm test + uses: coactions/setup-xvfb@v1 + with: + run: npm run test + - name: Build package + if: runner.os == 'Linux' + run: | + npx vsce package -o ${{ steps.set-version.outputs.name }}.vsix + - uses: actions/upload-artifact@v4 + if: (runner.os == 'Linux') && (github.event_name != 'release') + with: + name: ${{ steps.set-version.outputs.name }}.vsix + path: ${{ steps.set-version.outputs.name }}.vsix + - uses: actions/upload-artifact@v4 + if: runner.os == 'Linux' + with: + name: meta + path: | + meta.name + meta.version + beta: + if: (github.event_name == 'push') + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/download-artifact@v4 + with: + name: meta + path: . + - name: Set an output + id: set-version + if: runner.os == 'Linux' + run: | + set -x + echo "version=`cat meta.version`" >> $GITHUB_OUTPUT + echo "name=`cat meta.name`" >> $GITHUB_OUTPUT + - uses: actions/download-artifact@v4 + with: + name: ${{ steps.set-version.outputs.name }}.vsix + - name: Create Release + id: create-release + uses: softprops/action-gh-release@v1 + if: runner.os == 'Linux' + with: + tag_name: v${{ steps.set-version.outputs.version }} + prerelease: ${{ github.event_name != 'release' }} + files: ${{ steps.set-version.outputs.name }}.vsix + token: ${{ secrets.GITHUB_TOKEN }} + publish: + needs: build + if: github.event_name == 'release' && needs.build.outputs.taggedbranch == 'main' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: main + token: ${{ secrets.TOKEN }} + - uses: actions/download-artifact@v4 + with: + name: meta + path: . + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Prepare build + id: set-version + run: | + VERSION=`cat meta.version` + NEXT_VERSION=`cat meta.version | awk -F. '/[0-9]+\./{$NF++;print}' OFS=.` + echo "name=`cat meta.name`" >> $GITHUB_OUTPUT + tmp=$(mktemp) + git config --global user.name 'ProjectBot' + git config --global user.email 'bot@users.noreply.github.com' + jq --arg version "${NEXT_VERSION}-SNAPSHOT" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json + git add package.json + git commit -m 'auto bump version with release' + jq --arg version "$VERSION" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json + npm install + jq 'del(.enableProposedApi,.enabledApiProposals)' package.json > "$tmp" && mv "$tmp" package.json + git push + - name: Build package + run: | + npx vsce package -o ${{ steps.set-version.outputs.name }}.vsix + - name: Upload Release Asset + id: upload-release-asset + uses: softprops/action-gh-release@v1 + if: runner.os == 'Linux' + with: + tag_name: ${{ github.event.release.tag_name }} + files: ${{ steps.set-version.outputs.name }}.vsix + token: ${{ secrets.GITHUB_TOKEN }} + - name: Publish to VSCode Marketplace + run: | + [ -n "${{ secrets.VSCE_TOKEN }}" ] && \ + npx vsce publish --packagePath ${{ steps.set-version.outputs.name }}.vsix -p ${{ secrets.VSCE_TOKEN }} || true From 3a3eb7cba51a76e02e8eb9deedab5b89157da123 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 18:54:05 +0000 Subject: [PATCH 20/35] Minor edit to test CI triggering --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 39f5e53..d1ba882 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "properties": { "iris-jupyter-server.port": { "type": "number", - "markdownDescription": "Local port to use for running Jupyter notebooks on InterSystems IRIS servers. Restart the extension after changing this setting.", + "markdownDescription": "Local port to use for running Jupyter notebooks on InterSystems IRIS servers. Restart the extension after you change this setting.", "scope": "window", "default": 50773 }, From a216d07070e69414c3aedfa7186066a48d3bf124 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 19:09:41 +0000 Subject: [PATCH 21/35] CI test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1ba882..39f5e53 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "properties": { "iris-jupyter-server.port": { "type": "number", - "markdownDescription": "Local port to use for running Jupyter notebooks on InterSystems IRIS servers. Restart the extension after you change this setting.", + "markdownDescription": "Local port to use for running Jupyter notebooks on InterSystems IRIS servers. Restart the extension after changing this setting.", "scope": "window", "default": 50773 }, From ba621d297e23981409ada539568434a611a4b711 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 19:11:48 +0000 Subject: [PATCH 22/35] Correct CI branch name --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 81fda16..1567298 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,7 +3,7 @@ name: CI on: push: branches: - - main + - master paths-ignore: - ".vscode/**" - ".github/**" @@ -11,7 +11,7 @@ on: - "**/*.md" pull_request: branches: - - main + - master release: types: - released @@ -121,12 +121,12 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} publish: needs: build - if: github.event_name == 'release' && needs.build.outputs.taggedbranch == 'main' + if: github.event_name == 'release' && needs.build.outputs.taggedbranch == 'master' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: - ref: main + ref: master token: ${{ secrets.TOKEN }} - uses: actions/download-artifact@v4 with: From 29406d4196c16a9301746cb192ef605f573f8b93 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 19:17:01 +0000 Subject: [PATCH 23/35] Try to fix CI --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1567298..a024a27 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: outputs: taggedbranch: ${{ steps.find-branch.outputs.taggedbranch }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Find which branch the release tag points at id: find-branch @@ -65,7 +65,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 16 - run: npm install - name: lint if: runner.os == 'Linux-NOSUCH' @@ -124,7 +124,7 @@ jobs: if: github.event_name == 'release' && needs.build.outputs.taggedbranch == 'master' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: master token: ${{ secrets.TOKEN }} @@ -135,7 +135,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 16 - name: Prepare build id: set-version run: | From 21ec1938b099cb2f3b5bf64ec9914220d4439082 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 19:20:29 +0000 Subject: [PATCH 24/35] Disable broken `npm test` in CI --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a024a27..df30cd7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -72,6 +72,7 @@ jobs: run: npm run lint - run: npm run compile - name: npm test + if: runner.os == 'Linux-NOSUCH' uses: coactions/setup-xvfb@v1 with: run: npm run test From f828cd819f61497a3c4398c03b4fe74f45f8514a Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 15 Nov 2024 19:23:16 +0000 Subject: [PATCH 25/35] Try CI with node 18 --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index df30cd7..926de4a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -65,7 +65,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18 - run: npm install - name: lint if: runner.os == 'Linux-NOSUCH' @@ -136,7 +136,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18 - name: Prepare build id: set-version run: | From 6b761a84cdadcdb85fdcc28189cb9fe1a2994956 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 11:59:31 +0000 Subject: [PATCH 26/35] CI - platform-specific builds --- .github/workflows/main.yml | 44 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 926de4a..70fdfe9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,10 +23,30 @@ concurrency: jobs: build: timeout-minutes: 10 - runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + include: + - os: windows-latest + platform: win32 + arch: x64 + npm_config_arch: x64 + ISC_PLATFORM: winx64 + - os: ubuntu-latest + platform: linux + arch: x64 + npm_config_arch: x64 + ISC_PLATFORM: lnxubuntux64 + - os: macos-latest + platform: darwin + arch: x64 + npm_config_arch: x64 + ISC_PLATFORM: macx64 + - os: macos-latest + platform: darwin + arch: arm64 + npm_config_arch: arm64 + ISC_PLATFORM: macos + runs-on: ${{ matrix.os }} outputs: taggedbranch: ${{ steps.find-branch.outputs.taggedbranch }} steps: @@ -43,9 +63,9 @@ jobs: echo "taggedbranch=$TAGGEDBRANCH" >> $GITHUB_OUTPUT - name: Set an output id: set-version - if: runner.os == 'Linux' run: | set -x + echo "target=${{ matrix.platform }}-${{ matrix.arch }}" >> $env:GITHUB_ENV VERSION=$(jq -r '.version' package.json | cut -d- -f1) [ $GITHUB_EVENT_NAME == 'release' ] && VERSION=${{ github.event.release.tag_name }} && VERSION=${VERSION/v/} CHANGELOG=$(cat CHANGELOG.md | sed -n "/## \[${VERSION}\]/,/## /p" | sed '/^$/d;1d;$d') @@ -55,7 +75,7 @@ jobs: [ $GITHUB_EVENT_NAME == 'push' ] && VERSION+=-beta && VERSION+=.$(($(git tag -l "v$VERSION.*" | sort -nt. -k4 2>/dev/null | tail -1 | cut -d. -f4)+1)) [ $GITHUB_EVENT_NAME == 'pull_request' ] && VERSION+=-dev.${{ github.event.pull_request.number }} echo "version=$VERSION" >> $GITHUB_OUTPUT - NAME=$(jq -r '.name' package.json)-$VERSION + NAME=$(jq -r '.name' package.json)-${{ matrix.platform }}-${{ matrix.arch }}-$VERSION echo "name=$NAME" >> $GITHUB_OUTPUT tmp=$(mktemp) jq --arg version "$VERSION" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json @@ -68,25 +88,25 @@ jobs: node-version: 18 - run: npm install - name: lint - if: runner.os == 'Linux-NOSUCH' + if: runner.os == 'Linux-IGNORE' run: npm run lint - run: npm run compile - name: npm test - if: runner.os == 'Linux-NOSUCH' + if: runner.os == 'Linux-IGNORE' uses: coactions/setup-xvfb@v1 with: run: npm run test - name: Build package - if: runner.os == 'Linux' run: | - npx vsce package -o ${{ steps.set-version.outputs.name }}.vsix + node -e "require('fs').cpSync('./intersystems-iris-native/bin/${{ matrix.ISC_PLATFORM }}/', './dist/', { recursive: true, filter: (f) => !f.endsWith('irisnative.node') })" + npx vsce package --target ${{ env.target }} -o ${{ steps.set-version.outputs.name }}.vsix - uses: actions/upload-artifact@v4 - if: (runner.os == 'Linux') && (github.event_name != 'release') + if: (github.event_name != 'release') with: name: ${{ steps.set-version.outputs.name }}.vsix path: ${{ steps.set-version.outputs.name }}.vsix - uses: actions/upload-artifact@v4 - if: runner.os == 'Linux' + # if: runner.os == 'Linux' with: name: meta path: | @@ -103,7 +123,7 @@ jobs: path: . - name: Set an output id: set-version - if: runner.os == 'Linux' + if: runner.os == 'LinuxTODO' run: | set -x echo "version=`cat meta.version`" >> $GITHUB_OUTPUT @@ -159,7 +179,7 @@ jobs: - name: Upload Release Asset id: upload-release-asset uses: softprops/action-gh-release@v1 - if: runner.os == 'Linux' + if: runner.os == 'LinuxTODO' with: tag_name: ${{ github.event.release.tag_name }} files: ${{ steps.set-version.outputs.name }}.vsix From 1c0538cfd41b8701b3b9e8cd783312e41ac3e9c6 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 12:06:59 +0000 Subject: [PATCH 27/35] WIP --- .github/workflows/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 70fdfe9..3b8f08b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -65,7 +65,6 @@ jobs: id: set-version run: | set -x - echo "target=${{ matrix.platform }}-${{ matrix.arch }}" >> $env:GITHUB_ENV VERSION=$(jq -r '.version' package.json | cut -d- -f1) [ $GITHUB_EVENT_NAME == 'release' ] && VERSION=${{ github.event.release.tag_name }} && VERSION=${VERSION/v/} CHANGELOG=$(cat CHANGELOG.md | sed -n "/## \[${VERSION}\]/,/## /p" | sed '/^$/d;1d;$d') @@ -99,7 +98,7 @@ jobs: - name: Build package run: | node -e "require('fs').cpSync('./intersystems-iris-native/bin/${{ matrix.ISC_PLATFORM }}/', './dist/', { recursive: true, filter: (f) => !f.endsWith('irisnative.node') })" - npx vsce package --target ${{ env.target }} -o ${{ steps.set-version.outputs.name }}.vsix + npx vsce package --target ${{ matrix.platform }}-${{ matrix.arch }} -o ${{ steps.set-version.outputs.name }}.vsix - uses: actions/upload-artifact@v4 if: (github.event_name != 'release') with: From 70a2a591f6bd50c038ee58c40dfd5bd2b35156d3 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 12:12:46 +0000 Subject: [PATCH 28/35] WIP --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3b8f08b..4441108 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -63,6 +63,7 @@ jobs: echo "taggedbranch=$TAGGEDBRANCH" >> $GITHUB_OUTPUT - name: Set an output id: set-version + shell: pwsh run: | set -x VERSION=$(jq -r '.version' package.json | cut -d- -f1) From 629c32e0494e118c35d20fcb6a521f63c2e31f43 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 12:15:30 +0000 Subject: [PATCH 29/35] WIP --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4441108..41e0836 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -55,7 +55,7 @@ jobs: - name: Find which branch the release tag points at id: find-branch if: github.event_name == 'release' && runner.os == 'Linux' - shell: bash + shell: pwsh run: | git fetch --depth=1 origin +refs/heads/*:refs/heads/* set -x From 3fa36d3de41da521b42a39fb0c40b35060a02c7b Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 12:50:10 +0000 Subject: [PATCH 30/35] WIP --- .github/workflows/main.yml | 72 ++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 41e0836..ab4f2ae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,45 +23,34 @@ concurrency: jobs: build: timeout-minutes: 10 + runs-on: ubuntu-latest strategy: matrix: include: - - os: windows-latest - platform: win32 - arch: x64 - npm_config_arch: x64 + - platarch: win32-x64 ISC_PLATFORM: winx64 - - os: ubuntu-latest - platform: linux - arch: x64 - npm_config_arch: x64 + - platarch: linux-x64 ISC_PLATFORM: lnxubuntux64 - - os: macos-latest - platform: darwin - arch: x64 - npm_config_arch: x64 + - platarch: darwin-x64 ISC_PLATFORM: macx64 - - os: macos-latest - platform: darwin - arch: arm64 - npm_config_arch: arm64 + - platarch: darwin-arm64 ISC_PLATFORM: macos - runs-on: ${{ matrix.os }} outputs: taggedbranch: ${{ steps.find-branch.outputs.taggedbranch }} steps: - - uses: actions/checkout@v4 - - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* + - name: Check out repository + uses: actions/checkout@v4 + - name: Fetch tags + run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Find which branch the release tag points at id: find-branch - if: github.event_name == 'release' && runner.os == 'Linux' - shell: pwsh + if: github.event_name == 'release' && matrix.platarch == 'LinuxTODO' run: | git fetch --depth=1 origin +refs/heads/*:refs/heads/* set -x TAGGEDBRANCH=$(git for-each-ref --points-at=${{github.sha}} --format='%(refname:lstrip=2)' refs/heads/) echo "taggedbranch=$TAGGEDBRANCH" >> $GITHUB_OUTPUT - - name: Set an output + - name: Set package name and version id: set-version shell: pwsh run: | @@ -75,7 +64,7 @@ jobs: [ $GITHUB_EVENT_NAME == 'push' ] && VERSION+=-beta && VERSION+=.$(($(git tag -l "v$VERSION.*" | sort -nt. -k4 2>/dev/null | tail -1 | cut -d. -f4)+1)) [ $GITHUB_EVENT_NAME == 'pull_request' ] && VERSION+=-dev.${{ github.event.pull_request.number }} echo "version=$VERSION" >> $GITHUB_OUTPUT - NAME=$(jq -r '.name' package.json)-${{ matrix.platform }}-${{ matrix.arch }}-$VERSION + NAME=$(jq -r '.name' package.json)-$VERSION-${{ matrix.platarch }} echo "name=$NAME" >> $GITHUB_OUTPUT tmp=$(mktemp) jq --arg version "$VERSION" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json @@ -88,57 +77,56 @@ jobs: node-version: 18 - run: npm install - name: lint - if: runner.os == 'Linux-IGNORE' + if: matrix.platarch == 'Linux-IGNORE' run: npm run lint - run: npm run compile - name: npm test - if: runner.os == 'Linux-IGNORE' + if: matrix.platarch == 'Linux-IGNORE' uses: coactions/setup-xvfb@v1 with: run: npm run test - name: Build package run: | node -e "require('fs').cpSync('./intersystems-iris-native/bin/${{ matrix.ISC_PLATFORM }}/', './dist/', { recursive: true, filter: (f) => !f.endsWith('irisnative.node') })" - npx vsce package --target ${{ matrix.platform }}-${{ matrix.arch }} -o ${{ steps.set-version.outputs.name }}.vsix - - uses: actions/upload-artifact@v4 + npx vsce package --target ${{ matrix.platarch }} -o ${{ steps.set-version.outputs.name }}.vsix + - name: Upload package + uses: actions/upload-artifact@v4 if: (github.event_name != 'release') with: name: ${{ steps.set-version.outputs.name }}.vsix path: ${{ steps.set-version.outputs.name }}.vsix - - uses: actions/upload-artifact@v4 - # if: runner.os == 'Linux' + - name: Upload metadata + uses: actions/upload-artifact@v4 + if: matrix.platarch == 'linux-x64' with: name: meta - path: | - meta.name - meta.version + path: meta.version beta: - if: (github.event_name == 'push') runs-on: ubuntu-latest needs: build + if: success() && github.event_name == 'push' steps: - - uses: actions/download-artifact@v4 + - name: Download metadata + uses: actions/download-artifact@v4 with: name: meta path: . - - name: Set an output + - name: Set version output id: set-version - if: runner.os == 'LinuxTODO' run: | set -x echo "version=`cat meta.version`" >> $GITHUB_OUTPUT - echo "name=`cat meta.name`" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v4 + - name: Download packages + uses: actions/download-artifact@v4 with: - name: ${{ steps.set-version.outputs.name }}.vsix + pattern: '**/*.vsix' - name: Create Release id: create-release - uses: softprops/action-gh-release@v1 - if: runner.os == 'Linux' + uses: softprops/action-gh-release@v2 with: tag_name: v${{ steps.set-version.outputs.version }} prerelease: ${{ github.event_name != 'release' }} - files: ${{ steps.set-version.outputs.name }}.vsix + files: '**/*.vsix' token: ${{ secrets.GITHUB_TOKEN }} publish: needs: build From 52bf681d5aa95a801b4354eb6cdf659f429d96ce Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 12:52:18 +0000 Subject: [PATCH 31/35] WIP --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ab4f2ae..3eb4898 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,7 +52,6 @@ jobs: echo "taggedbranch=$TAGGEDBRANCH" >> $GITHUB_OUTPUT - name: Set package name and version id: set-version - shell: pwsh run: | set -x VERSION=$(jq -r '.version' package.json | cut -d- -f1) From b66769664af11eed0efbc53e260906dcb945a76a Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 13:07:31 +0000 Subject: [PATCH 32/35] Adopt CI from intersystems/language-server --- .github/workflows/main.yml | 68 ++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3eb4898..03c7ecd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,8 +22,8 @@ concurrency: jobs: build: - timeout-minutes: 10 runs-on: ubuntu-latest + timeout-minutes: 10 strategy: matrix: include: @@ -127,16 +127,48 @@ jobs: prerelease: ${{ github.event_name != 'release' }} files: '**/*.vsix' token: ${{ secrets.GITHUB_TOKEN }} + publish: + runs-on: ubuntu-latest needs: build - if: github.event_name == 'release' && needs.build.outputs.taggedbranch == 'master' + if: success() && github.event_name == 'release' + steps: + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + - run: npm install -g @vscode/vsce + - name: Download packages + uses: actions/download-artifact@v4 + - name: Attach packages to release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.event.release.tag_name }} + files: '**/*.vsix' + body: See CHANGELOG for details + token: ${{ secrets.GITHUB_TOKEN }} + - name: Publish to VS Code Marketplace + env: + VSCE_PAT: ${{ secrets.VSCE_TOKEN }} + if: env.VSCE_PAT != null + run: vsce publish --packagePath $(find . -iname "*.vsix" -type f) + - name: Publish to Open VSX Registry + env: + OVSX_PAT: ${{ secrets.OVSX_TOKEN }} + if: env.OVSX_PAT != null + timeout-minutes: 5 + run: find . -iname "*.vsix" -type f -exec npx ovsx publish {} \; + bump_version: runs-on: ubuntu-latest + needs: [build, publish] + if: github.event_name == 'release' steps: - - uses: actions/checkout@v4 + - name: Check out repository + uses: actions/checkout@v4 with: ref: master - token: ${{ secrets.TOKEN }} - - uses: actions/download-artifact@v4 + - name: Download metadata + uses: actions/download-artifact@v4 with: name: meta path: . @@ -144,34 +176,14 @@ jobs: uses: actions/setup-node@v4 with: node-version: 18 - - name: Prepare build - id: set-version + - name: Create commit run: | VERSION=`cat meta.version` NEXT_VERSION=`cat meta.version | awk -F. '/[0-9]+\./{$NF++;print}' OFS=.` - echo "name=`cat meta.name`" >> $GITHUB_OUTPUT tmp=$(mktemp) git config --global user.name 'ProjectBot' git config --global user.email 'bot@users.noreply.github.com' jq --arg version "${NEXT_VERSION}-SNAPSHOT" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json git add package.json - git commit -m 'auto bump version with release' - jq --arg version "$VERSION" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json - npm install - jq 'del(.enableProposedApi,.enabledApiProposals)' package.json > "$tmp" && mv "$tmp" package.json - git push - - name: Build package - run: | - npx vsce package -o ${{ steps.set-version.outputs.name }}.vsix - - name: Upload Release Asset - id: upload-release-asset - uses: softprops/action-gh-release@v1 - if: runner.os == 'LinuxTODO' - with: - tag_name: ${{ github.event.release.tag_name }} - files: ${{ steps.set-version.outputs.name }}.vsix - token: ${{ secrets.GITHUB_TOKEN }} - - name: Publish to VSCode Marketplace - run: | - [ -n "${{ secrets.VSCE_TOKEN }}" ] && \ - npx vsce publish --packagePath ${{ steps.set-version.outputs.name }}.vsix -p ${{ secrets.VSCE_TOKEN }} || true + git commit -m 'auto bump version with release [skip ci]' + git push \ No newline at end of file From 71ac49edf8317c963f2308d7b551689a1aa67867 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 18 Nov 2024 13:29:54 +0000 Subject: [PATCH 33/35] Fix bug on linux platform --- intersystems-iris-native/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intersystems-iris-native/index.js b/intersystems-iris-native/index.js index b3bd3b1..08ef182 100644 --- a/intersystems-iris-native/index.js +++ b/intersystems-iris-native/index.js @@ -17,7 +17,7 @@ if (process.platform == "win32" && process.arch == "x64") { } } else if (process.platform == "linux") { let distro = getLinuxDistro() - logChannel.debug('platform = ' + process.platform + ': ' + distro + ': ' + process.arch); + console.log('intersystems-iris-native:index.js(linux): platform = ' + process.platform + ': ' + distro + ': ' + process.arch); if (distro == 'ubuntu') { if (process.arch == "x64") { native = require('./bin/lnxubuntux64/irisnative.node'); From 206c05090fd5dd55388dcdaf4d7d9e0aee4339d5 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Thu, 2 Jan 2025 10:12:10 +0000 Subject: [PATCH 34/35] CI: remove unused taggedbranch stuff --- .github/workflows/main.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 03c7ecd..c0c8e4b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -35,21 +35,11 @@ jobs: ISC_PLATFORM: macx64 - platarch: darwin-arm64 ISC_PLATFORM: macos - outputs: - taggedbranch: ${{ steps.find-branch.outputs.taggedbranch }} steps: - name: Check out repository uses: actions/checkout@v4 - name: Fetch tags run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* - - name: Find which branch the release tag points at - id: find-branch - if: github.event_name == 'release' && matrix.platarch == 'LinuxTODO' - run: | - git fetch --depth=1 origin +refs/heads/*:refs/heads/* - set -x - TAGGEDBRANCH=$(git for-each-ref --points-at=${{github.sha}} --format='%(refname:lstrip=2)' refs/heads/) - echo "taggedbranch=$TAGGEDBRANCH" >> $GITHUB_OUTPUT - name: Set package name and version id: set-version run: | @@ -127,7 +117,7 @@ jobs: prerelease: ${{ github.event_name != 'release' }} files: '**/*.vsix' token: ${{ secrets.GITHUB_TOKEN }} - + publish: runs-on: ubuntu-latest needs: build @@ -186,4 +176,4 @@ jobs: jq --arg version "${NEXT_VERSION}-SNAPSHOT" '.version = $version' package.json > "$tmp" && mv "$tmp" package.json git add package.json git commit -m 'auto bump version with release [skip ci]' - git push \ No newline at end of file + git push From 76a985a82bbb50f8d758d8e817763a80165f4d6a Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Thu, 2 Jan 2025 10:14:28 +0000 Subject: [PATCH 35/35] npm audit fix --- package-lock.json | 375 +++++++++++++++++----------------------------- 1 file changed, 136 insertions(+), 239 deletions(-) diff --git a/package-lock.json b/package-lock.json index 81d2860..789f9c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -948,10 +948,11 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1404,10 +1405,11 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1418,12 +1420,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1462,10 +1465,11 @@ } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2216,10 +2220,12 @@ } }, "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2870,32 +2876,32 @@ } }, "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", @@ -2903,49 +2909,24 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2953,21 +2934,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -2984,22 +2950,11 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -3678,10 +3633,11 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -3923,16 +3879,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4309,10 +4255,11 @@ } }, "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -4385,10 +4332,11 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -5109,9 +5057,9 @@ "requires": {} }, "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true }, "ansi-regex": { @@ -5435,9 +5383,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -5446,12 +5394,12 @@ } }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -5472,9 +5420,9 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true }, "dir-glob": { @@ -6040,9 +5988,9 @@ "dev": true }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6524,85 +6472,51 @@ } }, "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "balanced-match": "^1.0.0" } }, "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -6615,15 +6529,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "natural-compare": { @@ -7092,9 +7000,9 @@ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -7260,17 +7168,6 @@ "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.26.0" - }, - "dependencies": { - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } } }, "text-table": { @@ -7517,9 +7414,9 @@ "dev": true }, "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true }, "wrap-ansi": { @@ -7566,9 +7463,9 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "yargs-unparser": {