From b0ef2a9624124989f02de1526e57dd8c0ad97740 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Fri, 23 Aug 2024 21:13:59 +0100 Subject: [PATCH 01/27] Slight rearranging --- package.json | 2 +- src/core/init.js | 3 +- src/core/main.js | 30 +++++++++---------- src/core/p5.Renderer.js | 4 +-- src/core/p5.Renderer2D.js | 6 ++-- src/core/rendering.js | 1 + src/webgl/p5.RendererGL.js | 6 ++-- utils/{sample-linter.js => sample-linter.mjs} | 16 ++++------ 8 files changed, 30 insertions(+), 38 deletions(-) rename utils/{sample-linter.js => sample-linter.mjs} (95%) diff --git a/package.json b/package.json index e4102238c8..e6c9b32e30 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "tasks/**/*.js": "eslint", "src/**/*.js": [ "eslint", - "node --require @babel/register ./utils/sample-linter.js" + "node ./utils/sample-linter.mjs" ] }, "version": "1.9.4", diff --git a/src/core/init.js b/src/core/init.js index 15196a32b7..88922bbd71 100644 --- a/src/core/init.js +++ b/src/core/init.js @@ -2,9 +2,8 @@ import p5 from '../core/main'; import { initialize as initTranslator } from './internationalization'; /** - * _globalInit + * This file setup global mode automatic instantiation * - * TODO: ??? * if sketch is on window * assume "global" mode * and instantiate p5 automatically diff --git a/src/core/main.js b/src/core/main.js index 615a21c19b..576cddedb7 100644 --- a/src/core/main.js +++ b/src/core/main.js @@ -30,6 +30,11 @@ import * as constants from './constants'; * @return {p5} a p5 instance */ class p5 { + static VERSION = constants.VERSION; + // This is a pointer to our global mode p5 instance, if we're in + // global mode. + static instance = null; + constructor(sketch, node) { ////////////////////////////////////////////// // PRIVATE p5 PROPERTIES AND METHODS @@ -68,6 +73,7 @@ class p5 { keydown: null, keyup: null, keypress: null, + wheel: null, touchstart: null, touchmove: null, touchend: null, @@ -80,10 +86,9 @@ class p5 { this.touchend = false; // States used in the custom random generators - this._lcg_random_state = null; - this._gaussian_previous = false; + this._lcg_random_state = null; // NOTE: move to random.js + this._gaussian_previous = false; // NOTE: move to random.js - this._events.wheel = null; this._loadingScreenId = 'p5_loading'; // Allows methods to be registered on an instance that @@ -492,6 +497,7 @@ class p5 { window.removeEventListener('blur', blurHandler); }); + // Initialization complete, start runtime if (document.readyState === 'complete') { this._start(); } else { @@ -635,6 +641,11 @@ class p5 { } } +// attach constants to p5 prototype +for (const k in constants) { + p5.prototype[k] = constants[k]; +} + ////////////////////////////////////////////// // PUBLIC p5 PROPERTIES AND METHODS ////////////////////////////////////////////// @@ -875,10 +886,6 @@ class p5 { * */ -// This is a pointer to our global mode p5 instance, if we're in -// global mode. -p5.instance = null; - /** * Turns off the parts of the Friendly Error System (FES) that impact performance. * @@ -914,15 +921,6 @@ p5.instance = null; */ p5.disableFriendlyErrors = false; -// attach constants to p5 prototype -for (const k in constants) { - p5.prototype[k] = constants[k]; -} - -// makes the `VERSION` constant available on the p5 object -// in instance mode, even if it hasn't been instantiated yet -p5.VERSION = constants.VERSION; - // functions that cause preload to wait // more can be added by using registerPreloadMethod(func) p5.prototype._preloadMethods = { diff --git a/src/core/p5.Renderer.js b/src/core/p5.Renderer.js index e297c3f6f5..8351ee1fa0 100644 --- a/src/core/p5.Renderer.js +++ b/src/core/p5.Renderer.js @@ -22,7 +22,6 @@ p5.Renderer = class Renderer extends p5.Element { constructor(elt, pInst, isMainCanvas) { super(elt, pInst); this.canvas = elt; - this._pixelsState = pInst; if (isMainCanvas) { this._isMainCanvas = true; // for pixel method sharing with pimage @@ -133,8 +132,7 @@ p5.Renderer = class Renderer extends p5.Element { } get (x, y, w, h) { - const pixelsState = this._pixelsState; - const pd = pixelsState._pixelDensity; + const pd = this._pInst._pixelDensity; const canvas = this.canvas; if (typeof x === 'undefined' && typeof y === 'undefined') { diff --git a/src/core/p5.Renderer2D.js b/src/core/p5.Renderer2D.js index 0476224559..408abb56c7 100644 --- a/src/core/p5.Renderer2D.js +++ b/src/core/p5.Renderer2D.js @@ -414,7 +414,7 @@ class Renderer2D extends Renderer { } loadPixels() { - const pixelsState = this._pixelsState; // if called by p5.Image + const pixelsState = this._pInst; // if called by p5.Image const pd = pixelsState._pixelDensity; const w = this.width * pd; @@ -430,7 +430,7 @@ class Renderer2D extends Renderer { // round down to get integer numbers x = Math.floor(x); y = Math.floor(y); - const pixelsState = this._pixelsState; + const pixelsState = this._pInst; if (imgOrCol instanceof p5.Image) { this.drawingContext.save(); this.drawingContext.setTransform(1, 0, 0, 1, 0, 0); @@ -503,7 +503,7 @@ class Renderer2D extends Renderer { } updatePixels(x, y, w, h) { - const pixelsState = this._pixelsState; + const pixelsState = this._pInst; const pd = pixelsState._pixelDensity; if ( x === undefined && diff --git a/src/core/rendering.js b/src/core/rendering.js index 162f75b651..26d33a0d57 100644 --- a/src/core/rendering.js +++ b/src/core/rendering.js @@ -224,6 +224,7 @@ p5.prototype.createCanvas = function (w, h, renderer, canvas) { this._setProperty('_renderer', new renderers[r](c, this, true)); this._defaultGraphicsCreated = true; this._elements.push(this._renderer); + // Instead of resize, just create with the right size in the first place this._renderer.resize(w, h); this._renderer._applyDefaults(); return this._renderer; diff --git a/src/webgl/p5.RendererGL.js b/src/webgl/p5.RendererGL.js index 3320cb3e7b..2cb035a12e 100644 --- a/src/webgl/p5.RendererGL.js +++ b/src/webgl/p5.RendererGL.js @@ -1355,7 +1355,7 @@ p5.RendererGL = class RendererGL extends Renderer { */ loadPixels() { - const pixelsState = this._pixelsState; + const pixelsState = this._pInst; //@todo_FES if (this._pInst._glAttributes.preserveDrawingBuffer !== true) { @@ -1387,7 +1387,7 @@ p5.RendererGL = class RendererGL extends Renderer { updatePixels() { const fbo = this._getTempFramebuffer(); - fbo.pixels = this._pixelsState.pixels; + fbo.pixels = this._pInst.pixels; fbo.updatePixels(); this._pInst.push(); this._pInst.resetMatrix(); @@ -1452,7 +1452,7 @@ p5.RendererGL = class RendererGL extends Renderer { this._curCamera._resize(); //resize pixels buffer - const pixelsState = this._pixelsState; + const pixelsState = this._pInst; if (typeof pixelsState.pixels !== 'undefined') { pixelsState._setProperty( 'pixels', diff --git a/utils/sample-linter.js b/utils/sample-linter.mjs similarity index 95% rename from utils/sample-linter.js rename to utils/sample-linter.mjs index 4a39c99cab..5862add25e 100644 --- a/utils/sample-linter.js +++ b/utils/sample-linter.mjs @@ -1,7 +1,7 @@ 'use strict'; const EOL = '\n'; import { ESLint } from 'eslint'; -import dataDoc from '../docs/reference/data.min.json'; +import dataDoc from '../docs/reference/data.min.json' assert {type: 'json'}; // envs: ['eslint-samples/p5'], const itemtypes = ['method', 'property']; @@ -217,8 +217,6 @@ async function eslintFiles(opts, filesSrc) { }; } -module.exports.eslintFiles = eslintFiles; - function splitLines(text) { const lines = []; @@ -248,10 +246,8 @@ function splitLines(text) { return lines; } -if (!module.parent) { - eslintFiles(null, process.argv.slice(2)) - .then(result => { - console.log(result.output); - process.exit(result.report.errorCount === 0 ? 0 : 1); - }); -} +eslintFiles(null, process.argv.slice(2)) + .then(result => { + console.log(result.output); + process.exit(result.report.errorCount === 0 ? 0 : 1); + }); From 7d672a1ae8fa5001c5dc8c66ea3eb0bc71a94690 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 10:21:26 +0100 Subject: [PATCH 02/27] Remove preload functionality --- src/app.js | 2 +- src/core/main.js | 670 ++++++++++++++++++++++---------------------- src/core/preload.js | 69 +++++ 3 files changed, 401 insertions(+), 340 deletions(-) diff --git a/src/app.js b/src/app.js index 9791f6be8b..b1282da4e5 100644 --- a/src/app.js +++ b/src/app.js @@ -9,7 +9,7 @@ import './core/friendly_errors/fes_core'; import './core/friendly_errors/sketch_reader'; import './core/helpers'; import './core/legacy'; -import './core/preload'; +// import './core/preload'; import './core/p5.Element'; import './core/p5.Graphics'; // import './core/p5.Renderer'; diff --git a/src/core/main.js b/src/core/main.js index 576cddedb7..3acd6494c6 100644 --- a/src/core/main.js +++ b/src/core/main.js @@ -41,7 +41,7 @@ class p5 { ////////////////////////////////////////////// this._setupDone = false; - this._preloadDone = false; + // this._preloadDone = false; // for handling hidpi this._pixelDensity = Math.ceil(window.devicePixelRatio) || 1; this._maxAllowedPixelDimensions = 0; @@ -50,7 +50,7 @@ class p5 { this._elements = []; this._glAttributes = null; this._requestAnimId = 0; - this._preloadCount = 0; + // this._preloadCount = 0; this._isGlobal = false; this._loop = true; this._startListener = null; @@ -109,317 +109,55 @@ class p5 { this._events.devicemotion = null; } - // Function to invoke registered hooks before or after events such as preload, setup, and pre/post draw. - p5.prototype.callRegisteredHooksFor = function (hookName) { - const target = this || p5.prototype; - const context = this._isGlobal ? window : this; - if (target._registeredMethods.hasOwnProperty(hookName)) { - const methods = target._registeredMethods[hookName]; - for (const method of methods) { - if (typeof method === 'function') { - method.call(context); - } - } - } - }; - - this._start = async () => { - // Find node if id given - if (this._userNode) { - if (typeof this._userNode === 'string') { - this._userNode = document.getElementById(this._userNode); - } - } - - const context = this._isGlobal ? window : this; - if (context.preload) { - this.callRegisteredHooksFor('beforePreload'); - // Setup loading screen - // Set loading screen into dom if not present - // Otherwise displays and removes user provided loading screen - let loadingScreen = document.getElementById(this._loadingScreenId); - if (!loadingScreen) { - loadingScreen = document.createElement('div'); - loadingScreen.innerHTML = 'Loading...'; - loadingScreen.style.position = 'absolute'; - loadingScreen.id = this._loadingScreenId; - const node = this._userNode || document.body; - node.appendChild(loadingScreen); - } - const methods = this._preloadMethods; - for (const method in methods) { - // default to p5 if no object defined - methods[method] = methods[method] || p5; - let obj = methods[method]; - //it's p5, check if it's global or instance - if (obj === p5.prototype || obj === p5) { - if (this._isGlobal) { - window[method] = this._wrapPreload(this, method); - } - obj = this; - } - this._registeredPreloadMethods[method] = obj[method]; - obj[method] = this._wrapPreload(obj, method); - } - - context.preload(); - this._runIfPreloadsAreDone(); - } else { - await this._setup(); - if (!this._recording) { - this._draw(); - } - } - }; - - this._runIfPreloadsAreDone = function() { - const context = this._isGlobal ? window : this; - if (context._preloadCount === 0) { - const loadingScreen = document.getElementById(context._loadingScreenId); - if (loadingScreen) { - loadingScreen.parentNode.removeChild(loadingScreen); - } - this.callRegisteredHooksFor('afterPreload'); - if (!this._setupDone) { - this._lastTargetFrameTime = window.performance.now(); - this._lastRealFrameTime = window.performance.now(); - context._setup(); - if (!this._recording) { - context._draw(); - } - } - } - }; - - this._decrementPreload = function() { - const context = this._isGlobal ? window : this; - if (!context._preloadDone && typeof context.preload === 'function') { - context._setProperty('_preloadCount', context._preloadCount - 1); - context._runIfPreloadsAreDone(); - } - }; - - this._wrapPreload = function(obj, fnName) { - return (...args) => { - //increment counter - this._incrementPreload(); - //call original function - return this._registeredPreloadMethods[fnName].apply(obj, args); - }; - }; - - this._incrementPreload = function() { - const context = this._isGlobal ? window : this; - // Do nothing if we tried to increment preloads outside of `preload` - if (context._preloadDone) return; - context._setProperty('_preloadCount', context._preloadCount + 1); - }; - - this._setup = async () => { - this.callRegisteredHooksFor('beforeSetup'); - // Always create a default canvas. - // Later on if the user calls createCanvas, this default one - // will be replaced - this.createCanvas( - this._defaultCanvasSize.width, - this._defaultCanvasSize.height, - constants.P2D - ); - - // return preload functions to their normal vals if switched by preload - const context = this._isGlobal ? window : this; - if (typeof context.preload === 'function') { - for (const f in this._preloadMethods) { - context[f] = this._preloadMethods[f][f]; - if (context[f] && this) { - context[f] = context[f].bind(this); - } - } - } - - // Record the time when sketch starts - this._millisStart = window.performance.now(); - - context._preloadDone = true; - - // Short-circuit on this, in case someone used the library in "global" - // mode earlier - if (typeof context.setup === 'function') { - await context.setup(); - } - - // unhide any hidden canvases that were created - const canvases = document.getElementsByTagName('canvas'); - - for (const k of canvases) { - if (k.dataset.hidden === 'true') { - k.style.visibility = ''; - delete k.dataset.hidden; - } - } - - this._lastTargetFrameTime = window.performance.now(); - this._lastRealFrameTime = window.performance.now(); - this._setupDone = true; - if (this._accessibleOutputs.grid || this._accessibleOutputs.text) { - this._updateAccsOutput(); - } - this.callRegisteredHooksFor('afterSetup'); - }; - - this._draw = requestAnimationFrameTimestamp => { - const now = requestAnimationFrameTimestamp || window.performance.now(); - const time_since_last = now - this._lastTargetFrameTime; - const target_time_between_frames = 1000 / this._targetFrameRate; - - // only draw if we really need to; don't overextend the browser. - // draw if we're within 5ms of when our next frame should paint - // (this will prevent us from giving up opportunities to draw - // again when it's really about time for us to do so). fixes an - // issue where the frameRate is too low if our refresh loop isn't - // in sync with the browser. note that we have to draw once even - // if looping is off, so we bypass the time delay if that - // is the case. - const epsilon = 5; - if ( - !this._loop || - time_since_last >= target_time_between_frames - epsilon - ) { - //mandatory update values(matrixes and stack) - this.deltaTime = now - this._lastRealFrameTime; - this._setProperty('deltaTime', this.deltaTime); - this._frameRate = 1000.0 / this.deltaTime; - this.redraw(); - this._lastTargetFrameTime = Math.max(this._lastTargetFrameTime - + target_time_between_frames, now); - this._lastRealFrameTime = now; - - // If the user is actually using mouse module, then update - // coordinates, otherwise skip. We can test this by simply - // checking if any of the mouse functions are available or not. - // NOTE : This reflects only in complete build or modular build. - if (typeof this._updateMouseCoords !== 'undefined') { - this._updateMouseCoords(); - - //reset delta values so they reset even if there is no mouse event to set them - // for example if the mouse is outside the screen - this._setProperty('movedX', 0); - this._setProperty('movedY', 0); - } - } - - // get notified the next time the browser gives us - // an opportunity to draw. - if (this._loop) { - this._requestAnimId = window.requestAnimationFrame(this._draw); - } - }; - - this._setProperty = (prop, value) => { - this[prop] = value; - if (this._isGlobal) { - window[prop] = value; - } - }; - - /** - * Removes the sketch from the web page. - * - * Calling `remove()` stops the draw loop and removes any HTML elements - * created by the sketch, including the canvas. A new sketch can be - * created by using the p5() constructor, as in - * `new p5()`. - * - * @example - *
- * - * // Double-click to remove the canvas. - * - * function setup() { - * createCanvas(100, 100); - * - * describe( - * 'A white circle on a gray background. The circle follows the mouse as the user moves. The sketch disappears when the user double-clicks.' - * ); - * } - * - * function draw() { - * // Paint the background repeatedly. - * background(200); - * - * // Draw circles repeatedly. - * circle(mouseX, mouseY, 40); - * } - * - * // Remove the sketch when the user double-clicks. - * function doubleClicked() { - * remove(); - * } - * - *
- */ - this.remove = () => { - // Remove start listener to prevent orphan canvas being created - if(this._startListener){ - window.removeEventListener('load', this._startListener, false); - } - const loadingScreen = document.getElementById(this._loadingScreenId); - if (loadingScreen) { - loadingScreen.parentNode.removeChild(loadingScreen); - // Add 1 to preload counter to prevent the sketch ever executing setup() - this._incrementPreload(); - } - if (this._curElement) { - // stop draw - this._loop = false; - if (this._requestAnimId) { - window.cancelAnimationFrame(this._requestAnimId); - } - - // unregister events sketch-wide - for (const ev in this._events) { - window.removeEventListener(ev, this._events[ev]); - } - - // remove DOM elements created by p5, and listeners - for (const e of this._elements) { - if (e.elt && e.elt.parentNode) { - e.elt.parentNode.removeChild(e.elt); - } - for (const elt_ev in e._events) { - e.elt.removeEventListener(elt_ev, e._events[elt_ev]); - } - } - - // call any registered remove functions - const self = this; - this._registeredMethods.remove.forEach(f => { - if (typeof f !== 'undefined') { - f.call(self); - } - }); - } - // remove window bound properties and methods - if (this._isGlobal) { - for (const p in p5.prototype) { - try { - delete window[p]; - } catch (x) { - window[p] = undefined; - } - } - for (const p2 in this) { - if (this.hasOwnProperty(p2)) { - try { - delete window[p2]; - } catch (x) { - window[p2] = undefined; - } - } - } - p5.instance = null; - } - }; + // this._runIfPreloadsAreDone = function() { + // const context = this._isGlobal ? window : this; + // if (context._preloadCount === 0) { + // const loadingScreen = document.getElementById(context._loadingScreenId); + // if (loadingScreen) { + // loadingScreen.parentNode.removeChild(loadingScreen); + // } + // this.callRegisteredHooksFor('afterPreload'); + // if (!this._setupDone) { + // this._lastTargetFrameTime = window.performance.now(); + // this._lastRealFrameTime = window.performance.now(); + // context._setup(); + // if (!this._recording) { + // context._draw(); + // } + // } + // } + // }; + + // this._decrementPreload = function() { + // const context = this._isGlobal ? window : this; + // if (!context._preloadDone && typeof context.preload === 'function') { + // context._setProperty('_preloadCount', context._preloadCount - 1); + // context._runIfPreloadsAreDone(); + // } + // }; + + // this._wrapPreload = function(obj, fnName) { + // return (...args) => { + // //increment counter + // this._incrementPreload(); + // //call original function + // return this._registeredPreloadMethods[fnName].apply(obj, args); + // }; + // }; + + // this._incrementPreload = function() { + // const context = this._isGlobal ? window : this; + // // Do nothing if we tried to increment preloads outside of `preload` + // if (context._preloadDone) return; + // context._setProperty('_preloadCount', context._preloadCount + 1); + // }; + + // this._setProperty = (prop, value) => { + // this[prop] = value; + // if (this._isGlobal) { + // window[prop] = value; + // } + // }; // ensure correct reporting of window dimensions this._updateWindowSize(); @@ -431,7 +169,7 @@ class p5 { } }, this); // Set up promise preloads - this._setupPromisePreloads(); + // this._setupPromisePreloads(); const friendlyBindGlobal = this._createFriendlyGlobalFunctionBinder(); @@ -441,6 +179,7 @@ class p5 { this._isGlobal = true; p5.instance = this; // Loop through methods on the prototype and attach them to the window + // NOTE: need to skip some for (const p in p5.prototype) { if (typeof p5.prototype[p] === 'function') { const ev = p.substring(2); @@ -499,9 +238,9 @@ class p5 { // Initialization complete, start runtime if (document.readyState === 'complete') { - this._start(); + this.#_start(); } else { - this._startListener = this._start.bind(this); + this._startListener = this.#_start.bind(this); window.addEventListener('load', this._startListener, false); } } @@ -510,7 +249,269 @@ class p5 { const lifecycles = {}; addon(p5, p5.prototype, lifecycles); - // Handle lifecycle hooks + // NOTE: Handle lifecycle hooks + } + + async #_start() { + // Find node if id given + if (this._userNode) { + if (typeof this._userNode === 'string') { + this._userNode = document.getElementById(this._userNode); + } + } + + // const context = this._isGlobal ? window : this; + // if (context.preload) { + // this.callRegisteredHooksFor('beforePreload'); + // // Setup loading screen + // // Set loading screen into dom if not present + // // Otherwise displays and removes user provided loading screen + // let loadingScreen = document.getElementById(this._loadingScreenId); + // if (!loadingScreen) { + // loadingScreen = document.createElement('div'); + // loadingScreen.innerHTML = 'Loading...'; + // loadingScreen.style.position = 'absolute'; + // loadingScreen.id = this._loadingScreenId; + // const node = this._userNode || document.body; + // node.appendChild(loadingScreen); + // } + // const methods = this._preloadMethods; + // for (const method in methods) { + // // default to p5 if no object defined + // methods[method] = methods[method] || p5; + // let obj = methods[method]; + // //it's p5, check if it's global or instance + // if (obj === p5.prototype || obj === p5) { + // if (this._isGlobal) { + // window[method] = this._wrapPreload(this, method); + // } + // obj = this; + // } + // this._registeredPreloadMethods[method] = obj[method]; + // obj[method] = this._wrapPreload(obj, method); + // } + + // context.preload(); + // this._runIfPreloadsAreDone(); + // } else { + await this.#_setup(); + if (!this._recording) { + this.#_draw(); + } + // } + } + + async #_setup() { + this.callRegisteredHooksFor('beforeSetup'); + // Always create a default canvas. + // Later on if the user calls createCanvas, this default one + // will be replaced + this.createCanvas( + this._defaultCanvasSize.width, + this._defaultCanvasSize.height, + constants.P2D + ); + + // return preload functions to their normal vals if switched by preload + const context = this._isGlobal ? window : this; + // if (typeof context.preload === 'function') { + // for (const f in this._preloadMethods) { + // context[f] = this._preloadMethods[f][f]; + // if (context[f] && this) { + // context[f] = context[f].bind(this); + // } + // } + // } + + // Record the time when sketch starts + this._millisStart = window.performance.now(); + + // context._preloadDone = true; + + // Short-circuit on this, in case someone used the library in "global" + // mode earlier + if (typeof context.setup === 'function') { + await context.setup(); + } + + // unhide any hidden canvases that were created + const canvases = document.getElementsByTagName('canvas'); + + for (const k of canvases) { + if (k.dataset.hidden === 'true') { + k.style.visibility = ''; + delete k.dataset.hidden; + } + } + + this._lastTargetFrameTime = window.performance.now(); + this._lastRealFrameTime = window.performance.now(); + this._setupDone = true; + if (this._accessibleOutputs.grid || this._accessibleOutputs.text) { + this._updateAccsOutput(); + } + this.callRegisteredHooksFor('afterSetup'); + } + + #_draw(requestAnimationFrameTimestamp) { + const now = requestAnimationFrameTimestamp || window.performance.now(); + const time_since_last = now - this._lastTargetFrameTime; + const target_time_between_frames = 1000 / this._targetFrameRate; + + // only draw if we really need to; don't overextend the browser. + // draw if we're within 5ms of when our next frame should paint + // (this will prevent us from giving up opportunities to draw + // again when it's really about time for us to do so). fixes an + // issue where the frameRate is too low if our refresh loop isn't + // in sync with the browser. note that we have to draw once even + // if looping is off, so we bypass the time delay if that + // is the case. + const epsilon = 5; + if ( + !this._loop || + time_since_last >= target_time_between_frames - epsilon + ) { + //mandatory update values(matrixes and stack) + this.deltaTime = now - this._lastRealFrameTime; + this._setProperty('deltaTime', this.deltaTime); + this._frameRate = 1000.0 / this.deltaTime; + this.redraw(); + this._lastTargetFrameTime = Math.max(this._lastTargetFrameTime + + target_time_between_frames, now); + this._lastRealFrameTime = now; + + // If the user is actually using mouse module, then update + // coordinates, otherwise skip. We can test this by simply + // checking if any of the mouse functions are available or not. + // NOTE : This reflects only in complete build or modular build. + if (typeof this._updateMouseCoords !== 'undefined') { + this._updateMouseCoords(); + + //reset delta values so they reset even if there is no mouse event to set them + // for example if the mouse is outside the screen + this._setProperty('movedX', 0); + this._setProperty('movedY', 0); + } + } + + // get notified the next time the browser gives us + // an opportunity to draw. + if (this._loop) { + this._requestAnimId = window.requestAnimationFrame(this.#_draw); + } + } + + /** + * Removes the sketch from the web page. + * + * Calling `remove()` stops the draw loop and removes any HTML elements + * created by the sketch, including the canvas. A new sketch can be + * created by using the p5() constructor, as in + * `new p5()`. + * + * @example + *
+ * + * // Double-click to remove the canvas. + * + * function setup() { + * createCanvas(100, 100); + * + * describe( + * 'A white circle on a gray background. The circle follows the mouse as the user moves. The sketch disappears when the user double-clicks.' + * ); + * } + * + * function draw() { + * // Paint the background repeatedly. + * background(200); + * + * // Draw circles repeatedly. + * circle(mouseX, mouseY, 40); + * } + * + * // Remove the sketch when the user double-clicks. + * function doubleClicked() { + * remove(); + * } + * + *
+ */ + remove() { + // Remove start listener to prevent orphan canvas being created + if(this._startListener){ + window.removeEventListener('load', this._startListener, false); + } + const loadingScreen = document.getElementById(this._loadingScreenId); + if (loadingScreen) { + loadingScreen.parentNode.removeChild(loadingScreen); + // Add 1 to preload counter to prevent the sketch ever executing setup() + // this._incrementPreload(); + } + if (this._curElement) { + // stop draw + this._loop = false; + if (this._requestAnimId) { + window.cancelAnimationFrame(this._requestAnimId); + } + + // unregister events sketch-wide + for (const ev in this._events) { + window.removeEventListener(ev, this._events[ev]); + } + + // remove DOM elements created by p5, and listeners + for (const e of this._elements) { + if (e.elt && e.elt.parentNode) { + e.elt.parentNode.removeChild(e.elt); + } + for (const elt_ev in e._events) { + e.elt.removeEventListener(elt_ev, e._events[elt_ev]); + } + } + + // call any registered remove functions + const self = this; + this._registeredMethods.remove.forEach(f => { + if (typeof f !== 'undefined') { + f.call(self); + } + }); + } + // remove window bound properties and methods + if (this._isGlobal) { + for (const p in p5.prototype) { + try { + delete window[p]; + } catch (x) { + window[p] = undefined; + } + } + for (const p2 in this) { + if (this.hasOwnProperty(p2)) { + try { + delete window[p2]; + } catch (x) { + window[p2] = undefined; + } + } + } + p5.instance = null; + } + } + + // Function to invoke registered hooks before or after events such as preload, setup, and pre/post draw. + callRegisteredHooksFor(hookName) { + const target = this || p5.prototype; + const context = this._isGlobal ? window : this; + if (target._registeredMethods.hasOwnProperty(hookName)) { + const methods = target._registeredMethods[hookName]; + for (const method of methods) { + if (typeof method === 'function') { + method.call(context); + } + } + } } _initializeInstanceVariables() { @@ -536,13 +537,20 @@ class p5 { this._downKeys = {}; //Holds the key codes of currently pressed keys } - registerPreloadMethod(fnString, obj) { - // obj = obj || p5.prototype; - if (!p5.prototype._preloadMethods.hasOwnProperty(fnString)) { - p5.prototype._preloadMethods[fnString] = obj; + _setProperty(prop, value) { + this[prop] = value; + if (this._isGlobal) { + window[prop] = value; } } + // registerPreloadMethod(fnString, obj) { + // // obj = obj || p5.prototype; + // if (!p5.prototype._preloadMethods.hasOwnProperty(fnString)) { + // p5.prototype._preloadMethods[fnString] = obj; + // } + // } + registerMethod(name, m) { const target = this || p5.prototype; if (!target._registeredMethods.hasOwnProperty(name)) { @@ -589,8 +597,8 @@ class p5 { if ( !p5.disableFriendlyErrors && typeof IS_MINIFIED === 'undefined' && - typeof value === 'function' && - !(prop in p5.prototype._preloadMethods) + typeof value === 'function' + // !(prop in p5.prototype._preloadMethods) ) { try { // Because p5 has so many common function names, it's likely @@ -921,22 +929,6 @@ for (const k in constants) { */ p5.disableFriendlyErrors = false; -// functions that cause preload to wait -// more can be added by using registerPreloadMethod(func) -p5.prototype._preloadMethods = { - loadJSON: p5.prototype, - loadImage: p5.prototype, - loadStrings: p5.prototype, - loadXML: p5.prototype, - loadBytes: p5.prototype, - loadTable: p5.prototype, - loadFont: p5.prototype, - loadModel: p5.prototype, - loadShader: p5.prototype -}; - p5.prototype._registeredMethods = { init: [], pre: [], post: [], remove: [] }; -p5.prototype._registeredPreloadMethods = {}; - export default p5; diff --git a/src/core/preload.js b/src/core/preload.js index f7155d361c..a2a845229f 100644 --- a/src/core/preload.js +++ b/src/core/preload.js @@ -1,5 +1,21 @@ import p5 from './main'; +// functions that cause preload to wait +// more can be added by using registerPreloadMethod(func) +p5.prototype._preloadMethods = { + loadJSON: p5.prototype, + loadImage: p5.prototype, + loadStrings: p5.prototype, + loadXML: p5.prototype, + loadBytes: p5.prototype, + loadTable: p5.prototype, + loadFont: p5.prototype, + loadModel: p5.prototype, + loadShader: p5.prototype +}; + +p5.prototype._registeredPreloadMethods = {}; + p5.prototype._promisePreloads = [ /* Example object { @@ -16,6 +32,9 @@ p5.prototype._promisePreloads = [ */ ]; +p5.prototype._preloadDone = false; +p5.prototype._preloadCount = 0; + p5.prototype.registerPromisePreload = function(setup) { p5.prototype._promisePreloads.push(setup); }; @@ -134,3 +153,53 @@ p5.prototype._legacyPreloadGenerator = function( } return returnedFunction; }; + +p5.prototype._decrementPreload = function() { + const context = this._isGlobal ? window : this; + if (!context._preloadDone && typeof context.preload === 'function') { + context._setProperty('_preloadCount', context._preloadCount - 1); + context._runIfPreloadsAreDone(); + } +}; + +p5.prototype._wrapPreload = function(obj, fnName) { + return (...args) => { + //increment counter + this._incrementPreload(); + //call original function + return this._registeredPreloadMethods[fnName].apply(obj, args); + }; +}; + +p5.prototype._incrementPreload = function() { + const context = this._isGlobal ? window : this; + // Do nothing if we tried to increment preloads outside of `preload` + if (context._preloadDone) return; + context._setProperty('_preloadCount', context._preloadCount + 1); +}; + +p5.prototype._runIfPreloadsAreDone = function() { + const context = this._isGlobal ? window : this; + if (context._preloadCount === 0) { + const loadingScreen = document.getElementById(context._loadingScreenId); + if (loadingScreen) { + loadingScreen.parentNode.removeChild(loadingScreen); + } + this.callRegisteredHooksFor('afterPreload'); + if (!this._setupDone) { + this._lastTargetFrameTime = window.performance.now(); + this._lastRealFrameTime = window.performance.now(); + context._setup(); + if (!this._recording) { + context._draw(); + } + } + } +}; + +p5.prototype.registerPreloadMethod = function(fnString, obj) { + // obj = obj || p5.prototype; + if (!p5.prototype._preloadMethods.hasOwnProperty(fnString)) { + p5.prototype._preloadMethods[fnString] = obj; + } +}; From 92f55cbe1a1e8e7954245dffd86f6e4395227451 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 10:34:38 +0100 Subject: [PATCH 03/27] Pre/post setup hooks --- src/core/main.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/core/main.js b/src/core/main.js index 3acd6494c6..7402e09cff 100644 --- a/src/core/main.js +++ b/src/core/main.js @@ -34,6 +34,14 @@ class p5 { // This is a pointer to our global mode p5 instance, if we're in // global mode. static instance = null; + #lifecycleHooks = { + init: [], + presetup: [], + postsetup: [], + predraw: [], + postdraw: [], + remove: [] + }; constructor(sketch, node) { ////////////////////////////////////////////// @@ -294,6 +302,7 @@ class p5 { // context.preload(); // this._runIfPreloadsAreDone(); // } else { + await this.#_setup(); if (!this._recording) { this.#_draw(); @@ -302,7 +311,11 @@ class p5 { } async #_setup() { - this.callRegisteredHooksFor('beforeSetup'); + // Run `presetup` hooks + for(const hook of this.#lifecycleHooks.presetup){ + await hook.call(this); + } + // Always create a default canvas. // Later on if the user calls createCanvas, this default one // will be replaced @@ -350,7 +363,11 @@ class p5 { if (this._accessibleOutputs.grid || this._accessibleOutputs.text) { this._updateAccsOutput(); } - this.callRegisteredHooksFor('afterSetup'); + + // Run `postsetup` hooks + for(const hook of this.#lifecycleHooks.postsetup){ + await hook.call(this); + } } #_draw(requestAnimationFrameTimestamp) { From 5c7478f8ea1f6de52215654922138d7d01042641 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 10:37:11 +0100 Subject: [PATCH 04/27] Clean up commented out preload init code Preload compat addon can reference this commit for needed init code if necessary --- src/core/main.js | 158 -------------------------------------------- src/core/preload.js | 47 +++++++++++++ 2 files changed, 47 insertions(+), 158 deletions(-) diff --git a/src/core/main.js b/src/core/main.js index 7402e09cff..35bef753b3 100644 --- a/src/core/main.js +++ b/src/core/main.js @@ -49,7 +49,6 @@ class p5 { ////////////////////////////////////////////// this._setupDone = false; - // this._preloadDone = false; // for handling hidpi this._pixelDensity = Math.ceil(window.devicePixelRatio) || 1; this._maxAllowedPixelDimensions = 0; @@ -58,7 +57,6 @@ class p5 { this._elements = []; this._glAttributes = null; this._requestAnimId = 0; - // this._preloadCount = 0; this._isGlobal = false; this._loop = true; this._startListener = null; @@ -117,56 +115,6 @@ class p5 { this._events.devicemotion = null; } - // this._runIfPreloadsAreDone = function() { - // const context = this._isGlobal ? window : this; - // if (context._preloadCount === 0) { - // const loadingScreen = document.getElementById(context._loadingScreenId); - // if (loadingScreen) { - // loadingScreen.parentNode.removeChild(loadingScreen); - // } - // this.callRegisteredHooksFor('afterPreload'); - // if (!this._setupDone) { - // this._lastTargetFrameTime = window.performance.now(); - // this._lastRealFrameTime = window.performance.now(); - // context._setup(); - // if (!this._recording) { - // context._draw(); - // } - // } - // } - // }; - - // this._decrementPreload = function() { - // const context = this._isGlobal ? window : this; - // if (!context._preloadDone && typeof context.preload === 'function') { - // context._setProperty('_preloadCount', context._preloadCount - 1); - // context._runIfPreloadsAreDone(); - // } - // }; - - // this._wrapPreload = function(obj, fnName) { - // return (...args) => { - // //increment counter - // this._incrementPreload(); - // //call original function - // return this._registeredPreloadMethods[fnName].apply(obj, args); - // }; - // }; - - // this._incrementPreload = function() { - // const context = this._isGlobal ? window : this; - // // Do nothing if we tried to increment preloads outside of `preload` - // if (context._preloadDone) return; - // context._setProperty('_preloadCount', context._preloadCount + 1); - // }; - - // this._setProperty = (prop, value) => { - // this[prop] = value; - // if (this._isGlobal) { - // window[prop] = value; - // } - // }; - // ensure correct reporting of window dimensions this._updateWindowSize(); @@ -176,8 +124,6 @@ class p5 { f.call(this); } }, this); - // Set up promise preloads - // this._setupPromisePreloads(); const friendlyBindGlobal = this._createFriendlyGlobalFunctionBinder(); @@ -268,46 +214,10 @@ class p5 { } } - // const context = this._isGlobal ? window : this; - // if (context.preload) { - // this.callRegisteredHooksFor('beforePreload'); - // // Setup loading screen - // // Set loading screen into dom if not present - // // Otherwise displays and removes user provided loading screen - // let loadingScreen = document.getElementById(this._loadingScreenId); - // if (!loadingScreen) { - // loadingScreen = document.createElement('div'); - // loadingScreen.innerHTML = 'Loading...'; - // loadingScreen.style.position = 'absolute'; - // loadingScreen.id = this._loadingScreenId; - // const node = this._userNode || document.body; - // node.appendChild(loadingScreen); - // } - // const methods = this._preloadMethods; - // for (const method in methods) { - // // default to p5 if no object defined - // methods[method] = methods[method] || p5; - // let obj = methods[method]; - // //it's p5, check if it's global or instance - // if (obj === p5.prototype || obj === p5) { - // if (this._isGlobal) { - // window[method] = this._wrapPreload(this, method); - // } - // obj = this; - // } - // this._registeredPreloadMethods[method] = obj[method]; - // obj[method] = this._wrapPreload(obj, method); - // } - - // context.preload(); - // this._runIfPreloadsAreDone(); - // } else { - await this.#_setup(); if (!this._recording) { this.#_draw(); } - // } } async #_setup() { @@ -325,22 +235,11 @@ class p5 { constants.P2D ); - // return preload functions to their normal vals if switched by preload const context = this._isGlobal ? window : this; - // if (typeof context.preload === 'function') { - // for (const f in this._preloadMethods) { - // context[f] = this._preloadMethods[f][f]; - // if (context[f] && this) { - // context[f] = context[f].bind(this); - // } - // } - // } // Record the time when sketch starts this._millisStart = window.performance.now(); - // context._preloadDone = true; - // Short-circuit on this, in case someone used the library in "global" // mode earlier if (typeof context.setup === 'function') { @@ -462,8 +361,6 @@ class p5 { const loadingScreen = document.getElementById(this._loadingScreenId); if (loadingScreen) { loadingScreen.parentNode.removeChild(loadingScreen); - // Add 1 to preload counter to prevent the sketch ever executing setup() - // this._incrementPreload(); } if (this._curElement) { // stop draw @@ -561,13 +458,6 @@ class p5 { } } - // registerPreloadMethod(fnString, obj) { - // // obj = obj || p5.prototype; - // if (!p5.prototype._preloadMethods.hasOwnProperty(fnString)) { - // p5.prototype._preloadMethods[fnString] = obj; - // } - // } - registerMethod(name, m) { const target = this || p5.prototype; if (!target._registeredMethods.hasOwnProperty(name)) { @@ -615,7 +505,6 @@ class p5 { !p5.disableFriendlyErrors && typeof IS_MINIFIED === 'undefined' && typeof value === 'function' - // !(prop in p5.prototype._preloadMethods) ) { try { // Because p5 has so many common function names, it's likely @@ -675,53 +564,6 @@ for (const k in constants) { // PUBLIC p5 PROPERTIES AND METHODS ////////////////////////////////////////////// -/** - * A function that's called once to load assets before the sketch runs. - * - * Declaring the function `preload()` sets a code block to run once - * automatically before setup() or - * draw(). It's used to load assets including - * multimedia files, fonts, data, and 3D models: - * - * ```js - * function preload() { - * // Code to run before the rest of the sketch. - * } - * ``` - * - * Functions such as loadImage(), - * loadFont(), - * loadJSON(), and - * loadModel() are guaranteed to either - * finish loading or raise an error if they're called within `preload()`. - * Doing so ensures that assets are available when the sketch begins - * running. - * - * @method preload - * @for p5 - * - * @example - *
- * - * let img; - * - * // Load an image and create a p5.Image object. - * function preload() { - * img = loadImage('assets/bricks.jpg'); - * } - * - * function setup() { - * createCanvas(100, 100); - * - * // Draw the image. - * image(img, 0, 0); - * - * describe('A red brick wall.'); - * } - * - *
- */ - /** * A function that's called once when the sketch begins running. * diff --git a/src/core/preload.js b/src/core/preload.js index a2a845229f..2e4718da04 100644 --- a/src/core/preload.js +++ b/src/core/preload.js @@ -1,5 +1,52 @@ import p5 from './main'; +/** + * A function that's called once to load assets before the sketch runs. + * + * Declaring the function `preload()` sets a code block to run once + * automatically before setup() or + * draw(). It's used to load assets including + * multimedia files, fonts, data, and 3D models: + * + * ```js + * function preload() { + * // Code to run before the rest of the sketch. + * } + * ``` + * + * Functions such as loadImage(), + * loadFont(), + * loadJSON(), and + * loadModel() are guaranteed to either + * finish loading or raise an error if they're called within `preload()`. + * Doing so ensures that assets are available when the sketch begins + * running. + * + * @method preload + * @for p5 + * + * @example + *
+ * + * let img; + * + * // Load an image and create a p5.Image object. + * function preload() { + * img = loadImage('assets/bricks.jpg'); + * } + * + * function setup() { + * createCanvas(100, 100); + * + * // Draw the image. + * image(img, 0, 0); + * + * describe('A red brick wall.'); + * } + * + *
+ */ + // functions that cause preload to wait // more can be added by using registerPreloadMethod(func) p5.prototype._preloadMethods = { From d2bc7e2bf1e7389b6a86f9209436641748b67f9f Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 14:38:25 +0100 Subject: [PATCH 05/27] Correct some buggy initialization behavior Skip binding properties and methods with name starting with '_' to window. Fix draw context not being bound correctly, reduce need for 'context' value. --- src/core/main.js | 30 ++++++++++++++++++------------ src/core/shim.js | 0 src/core/structure.js | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) delete mode 100644 src/core/shim.js diff --git a/src/core/main.js b/src/core/main.js index 35bef753b3..463ee3a53b 100644 --- a/src/core/main.js +++ b/src/core/main.js @@ -126,15 +126,17 @@ class p5 { }, this); const friendlyBindGlobal = this._createFriendlyGlobalFunctionBinder(); - // If the user has created a global setup or draw function, // assume "global" mode and make everything global (i.e. on the window) if (!sketch) { this._isGlobal = true; p5.instance = this; + // Loop through methods on the prototype and attach them to the window - // NOTE: need to skip some - for (const p in p5.prototype) { + // All methods and properties with name starting with '_' will be skipped + for (const p of Object.getOwnPropertyNames(p5.prototype)) { + if(p[0] === '_') continue; + if (typeof p5.prototype[p] === 'function') { const ev = p.substring(2); if (!this._events.hasOwnProperty(ev)) { @@ -150,10 +152,12 @@ class p5 { friendlyBindGlobal(p, p5.prototype[p]); } } + // Attach its properties to the window - for (const p2 in this) { - if (this.hasOwnProperty(p2)) { - friendlyBindGlobal(p2, this[p2]); + for (const p in this) { + if (this.hasOwnProperty(p)) { + if(p[0] === '_') continue; + friendlyBindGlobal(p, this[p]); } } } else { @@ -167,7 +171,6 @@ class p5 { } // Bind events to window (not using container div bc key events don't work) - for (const e in this._events) { const f = this[`_on${e}`]; if (f) { @@ -271,8 +274,8 @@ class p5 { #_draw(requestAnimationFrameTimestamp) { const now = requestAnimationFrameTimestamp || window.performance.now(); - const time_since_last = now - this._lastTargetFrameTime; - const target_time_between_frames = 1000 / this._targetFrameRate; + const timeSinceLastFrame = now - this._lastTargetFrameTime; + const targetTimeBetweenFrames = 1000 / this._targetFrameRate; // only draw if we really need to; don't overextend the browser. // draw if we're within 5ms of when our next frame should paint @@ -285,7 +288,7 @@ class p5 { const epsilon = 5; if ( !this._loop || - time_since_last >= target_time_between_frames - epsilon + timeSinceLastFrame >= targetTimeBetweenFrames - epsilon ) { //mandatory update values(matrixes and stack) this.deltaTime = now - this._lastRealFrameTime; @@ -293,7 +296,7 @@ class p5 { this._frameRate = 1000.0 / this.deltaTime; this.redraw(); this._lastTargetFrameTime = Math.max(this._lastTargetFrameTime - + target_time_between_frames, now); + + targetTimeBetweenFrames, now); this._lastRealFrameTime = now; // If the user is actually using mouse module, then update @@ -313,7 +316,9 @@ class p5 { // get notified the next time the browser gives us // an opportunity to draw. if (this._loop) { - this._requestAnimId = window.requestAnimationFrame(this.#_draw); + this._requestAnimId = window.requestAnimationFrame( + this.#_draw.bind(this) + ); } } @@ -417,6 +422,7 @@ class p5 { // Function to invoke registered hooks before or after events such as preload, setup, and pre/post draw. callRegisteredHooksFor(hookName) { const target = this || p5.prototype; + // NOTE: is this really necessary? const context = this._isGlobal ? window : this; if (target._registeredMethods.hasOwnProperty(hookName)) { const methods = target._registeredMethods[hookName]; diff --git a/src/core/shim.js b/src/core/shim.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/core/structure.js b/src/core/structure.js index 309f4380c5..3533fb02e3 100644 --- a/src/core/structure.js +++ b/src/core/structure.js @@ -943,7 +943,7 @@ p5.prototype.redraw = function(n) { if (context._renderer.isP3D) { context._renderer._update(); } - context._setProperty('frameCount', context.frameCount + 1); + this._setProperty('frameCount', context.frameCount + 1); this.callRegisteredHooksFor('pre'); this._inUserDraw = true; try { From df318180d64bae55d629c066bb603acda62f439b Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 16:46:30 +0100 Subject: [PATCH 06/27] Implement new lifecycle hooks structure --- src/core/main.js | 107 ++++++++++-------------------------------- src/core/preload.js | 2 +- src/core/structure.js | 8 ++-- 3 files changed, 30 insertions(+), 87 deletions(-) diff --git a/src/core/main.js b/src/core/main.js index 463ee3a53b..e23fd29849 100644 --- a/src/core/main.js +++ b/src/core/main.js @@ -34,8 +34,7 @@ class p5 { // This is a pointer to our global mode p5 instance, if we're in // global mode. static instance = null; - #lifecycleHooks = { - init: [], + static lifecycleHooks = { presetup: [], postsetup: [], predraw: [], @@ -97,17 +96,6 @@ class p5 { this._loadingScreenId = 'p5_loading'; - // Allows methods to be registered on an instance that - // are instance-specific. - this._registeredMethods = {}; - const methods = Object.getOwnPropertyNames(p5.prototype._registeredMethods); - - for (const prop of methods) { - this._registeredMethods[prop] = p5.prototype._registeredMethods[ - prop - ].slice(); - } - if (window.DeviceOrientationEvent) { this._events.deviceorientation = null; } @@ -118,13 +106,6 @@ class p5 { // ensure correct reporting of window dimensions this._updateWindowSize(); - // call any registered init functions - this._registeredMethods.init.forEach(function(f) { - if (typeof f !== 'undefined') { - f.call(this); - } - }, this); - const friendlyBindGlobal = this._createFriendlyGlobalFunctionBinder(); // If the user has created a global setup or draw function, // assume "global" mode and make everything global (i.e. on the window) @@ -188,7 +169,7 @@ class p5 { }; window.addEventListener('focus', focusHandler); window.addEventListener('blur', blurHandler); - this.registerMethod('remove', () => { + p5.lifecycleHooks.remove.push(function() { window.removeEventListener('focus', focusHandler); window.removeEventListener('blur', blurHandler); }); @@ -206,7 +187,12 @@ class p5 { const lifecycles = {}; addon(p5, p5.prototype, lifecycles); - // NOTE: Handle lifecycle hooks + const validLifecycles = Object.keys(p5.lifecycleHooks); + for(const name of validLifecycles){ + if(typeof lifecycles[name] === 'function'){ + p5.lifecycleHooks[name].push(lifecycles[name]); + } + } } async #_start() { @@ -225,9 +211,7 @@ class p5 { async #_setup() { // Run `presetup` hooks - for(const hook of this.#lifecycleHooks.presetup){ - await hook.call(this); - } + await this._runLifecycleHook('presetup'); // Always create a default canvas. // Later on if the user calls createCanvas, this default one @@ -238,13 +222,10 @@ class p5 { constants.P2D ); - const context = this._isGlobal ? window : this; - // Record the time when sketch starts this._millisStart = window.performance.now(); - // Short-circuit on this, in case someone used the library in "global" - // mode earlier + const context = this._isGlobal ? window : this; if (typeof context.setup === 'function') { await context.setup(); } @@ -267,12 +248,15 @@ class p5 { } // Run `postsetup` hooks - for(const hook of this.#lifecycleHooks.postsetup){ - await hook.call(this); - } + await this._runLifecycleHook('postsetup'); } - #_draw(requestAnimationFrameTimestamp) { + // While '#_draw' here is async, it is not awaited as 'requestAnimationFrame' + // does not await its callback. Thus it is not recommended for 'draw()` to be + // async and use await within as the next frame may start rendering before the + // current frame finish awaiting. The same goes for lifecycle hooks 'predraw' + // and 'postdraw'. + async #_draw(requestAnimationFrameTimestamp) { const now = requestAnimationFrameTimestamp || window.performance.now(); const timeSinceLastFrame = now - this._lastTargetFrameTime; const targetTimeBetweenFrames = 1000 / this._targetFrameRate; @@ -294,7 +278,7 @@ class p5 { this.deltaTime = now - this._lastRealFrameTime; this._setProperty('deltaTime', this.deltaTime); this._frameRate = 1000.0 / this.deltaTime; - this.redraw(); + await this.redraw(); this._lastTargetFrameTime = Math.max(this._lastTargetFrameTime + targetTimeBetweenFrames, now); this._lastRealFrameTime = now; @@ -358,7 +342,7 @@ class p5 { * * */ - remove() { + async remove() { // Remove start listener to prevent orphan canvas being created if(this._startListener){ window.removeEventListener('load', this._startListener, false); @@ -389,14 +373,10 @@ class p5 { } } - // call any registered remove functions - const self = this; - this._registeredMethods.remove.forEach(f => { - if (typeof f !== 'undefined') { - f.call(self); - } - }); + // Run `remove` hooks + await this._runLifecycleHook('remove'); } + // remove window bound properties and methods if (this._isGlobal) { for (const p in p5.prototype) { @@ -419,18 +399,9 @@ class p5 { } } - // Function to invoke registered hooks before or after events such as preload, setup, and pre/post draw. - callRegisteredHooksFor(hookName) { - const target = this || p5.prototype; - // NOTE: is this really necessary? - const context = this._isGlobal ? window : this; - if (target._registeredMethods.hasOwnProperty(hookName)) { - const methods = target._registeredMethods[hookName]; - for (const method of methods) { - if (typeof method === 'function') { - method.call(context); - } - } + async _runLifecycleHook(hookName) { + for(const hook of p5.lifecycleHooks[hookName]){ + await hook.call(this); } } @@ -464,32 +435,6 @@ class p5 { } } - registerMethod(name, m) { - const target = this || p5.prototype; - if (!target._registeredMethods.hasOwnProperty(name)) { - target._registeredMethods[name] = []; - } - target._registeredMethods[name].push(m); - } - - unregisterMethod(name, m) { - const target = this || p5.prototype; - if (target._registeredMethods.hasOwnProperty(name)) { - const methods = target._registeredMethods[name]; - const indexesToRemove = []; - // Find all indexes of the method `m` in the array of registered methods - for (let i = 0; i < methods.length; i++) { - if (methods[i] === m) { - indexesToRemove.push(i); - } - } - // Remove all instances of the method `m` from the array - for (let i = indexesToRemove.length - 1; i >= 0; i--) { - methods.splice(indexesToRemove[i], 1); - } - } - } - // create a function which provides a standardized process for binding // globals; this is implemented as a factory primarily so that there's a // way to redefine what "global" means for the binding function so it @@ -794,6 +739,4 @@ for (const k in constants) { */ p5.disableFriendlyErrors = false; -p5.prototype._registeredMethods = { init: [], pre: [], post: [], remove: [] }; - export default p5; diff --git a/src/core/preload.js b/src/core/preload.js index 2e4718da04..8381ae1b91 100644 --- a/src/core/preload.js +++ b/src/core/preload.js @@ -232,7 +232,7 @@ p5.prototype._runIfPreloadsAreDone = function() { if (loadingScreen) { loadingScreen.parentNode.removeChild(loadingScreen); } - this.callRegisteredHooksFor('afterPreload'); + // this.callRegisteredHooksFor('afterPreload'); if (!this._setupDone) { this._lastTargetFrameTime = window.performance.now(); this._lastRealFrameTime = window.performance.now(); diff --git a/src/core/structure.js b/src/core/structure.js index 3533fb02e3..5539ec0c4c 100644 --- a/src/core/structure.js +++ b/src/core/structure.js @@ -920,7 +920,7 @@ p5.prototype.pop = function() { * * */ -p5.prototype.redraw = function(n) { +p5.prototype.redraw = async function(n) { if (this._inUserDraw || !this._setupDone) { return; } @@ -944,14 +944,14 @@ p5.prototype.redraw = function(n) { context._renderer._update(); } this._setProperty('frameCount', context.frameCount + 1); - this.callRegisteredHooksFor('pre'); + await this._runLifecycleHook('predraw'); this._inUserDraw = true; try { - context.draw(); + await context.draw(); } finally { this._inUserDraw = false; } - this.callRegisteredHooksFor('post'); + await this._runLifecycleHook('postdraw'); } } }; From c964b4e4c9ee842b132f3b703fc1a8dd70bb6c9d Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 23:11:43 +0100 Subject: [PATCH 07/27] Replace version number --- package-lock.json | 22 ++++++++++++++++++++++ package.json | 1 + rollup.config.mjs | 18 ++++++++++++++---- src/core/constants.js | 3 +-- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index b385ba2d32..94b5bccce8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^5.0.7", "@rollup/plugin-terser": "^0.4.4", "@vitest/browser": "^2.0.4", "all-contributors-cli": "^6.19.0", @@ -1520,6 +1521,27 @@ } } }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz", + "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-terser": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", diff --git a/package.json b/package.json index e6c9b32e30..b34eb57712 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^5.0.7", "@rollup/plugin-terser": "^0.4.4", "@vitest/browser": "^2.0.4", "all-contributors-cli": "^6.19.0", diff --git a/rollup.config.mjs b/rollup.config.mjs index c2f0f8af28..6cb478cca5 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -5,7 +5,8 @@ import commonjs from '@rollup/plugin-commonjs'; import terser from '@rollup/plugin-terser'; import pkg from './package.json' assert { type: 'json' }; import dayjs from 'dayjs'; -import { visualizer } from "rollup-plugin-visualizer"; +import { visualizer } from 'rollup-plugin-visualizer'; +import replace from '@rollup/plugin-replace'; const plugins = [ commonjs(), @@ -35,7 +36,10 @@ export default [ name: 'p5', banner, plugins: [ - bundleSize("p5.js") + bundleSize("p5.js"), + replace({ + 'VERSION_WILL_BE_REPLACED_BY_BUILD': pkg.version + }) ] }, { @@ -43,7 +47,10 @@ export default [ format: 'esm', banner, plugins: [ - bundleSize("p5.esm.js") + bundleSize("p5.esm.js"), + replace({ + 'VERSION_WILL_BE_REPLACED_BY_BUILD': pkg.version + }) ] }, { @@ -63,7 +70,10 @@ export default [ comments: false } }), - bundleSize("p5.min.js", true) + bundleSize("p5.min.js", true), + replace({ + 'VERSION_WILL_BE_REPLACED_BY_BUILD': pkg.version + }) ] } ], diff --git a/src/core/constants.js b/src/core/constants.js index b5a8e4c4fb..bb120fa712 100644 --- a/src/core/constants.js +++ b/src/core/constants.js @@ -11,8 +11,7 @@ const _PI = Math.PI; * @property {String} VERSION * @final */ -export const VERSION = - 'VERSION_CONST_WILL_BE_REPLACED_BY_BROWSERIFY_BUILD_PROCESS'; +export const VERSION = 'VERSION_WILL_BE_REPLACED_BY_BUILD'; // GRAPHICS RENDERER /** From 07d8ab22e48f66a5326dd0d40d0ba11c120f507b Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Mon, 2 Sep 2024 23:40:06 +0100 Subject: [PATCH 08/27] Fix package-lock.json --- package-lock.json | 684 ---------------------------------------------- 1 file changed, 684 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94b5bccce8..c10961c1ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -403,262 +403,6 @@ "tough-cookie": "^4.1.4" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/linux-x64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", @@ -675,102 +419,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1586,149 +1234,6 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.18.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", @@ -1755,45 +1260,6 @@ "linux" ] }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sindresorhus/is": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", @@ -1845,91 +1311,6 @@ } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.28.tgz", - "integrity": "sha512-sP6g63ybzIdOWNDbn51tyHN8EMt7Mb4RMeHQEsXB7wQfDvzhpWB+AbfK6Gs3Q8fwP/pmWIrWW9csKOc1K2Mmkg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.28.tgz", - "integrity": "sha512-Bd/agp/g7QocQG5AuorOzSC78t8OzeN+pCN/QvJj1CvPhvppjJw6e1vAbOR8vO2vvGi2pvtf3polrYQStJtSiA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.28.tgz", - "integrity": "sha512-Wr3TwPGIveS9/OBWm0r9VAL8wkCR0zQn46J8K01uYCmVhUNK3Muxjs0vQBZaOrGu94mqbj9OXY+gB3W7aDvGdA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.28.tgz", - "integrity": "sha512-8G1ZwVTuLgTAVTMPD+M97eU6WeiRIlGHwKZ5fiJHPBcz1xqIC7jQcEh7XBkobkYoU5OILotls3gzjRt8CMNyDQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.28.tgz", - "integrity": "sha512-0Ajdzb5Fzvz+XUbN5ESeHAz9aHHSYiQcm+vmsDi0TtPHmsalfnqEPZmnK0zPALPJPLQP2dDo4hELeDg3/c3xgA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/core-linux-x64-gnu": { "version": "1.5.28", "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.28.tgz", @@ -1964,57 +1345,6 @@ "node": ">=10" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.28.tgz", - "integrity": "sha512-JezwCGavZ7CkNXx4yInI4kpb71L0zxzxA9BFlmnsGKEEjVQcKc3hFpmIzfFVs+eotlBUwDNb0+Yo9m6Cb7lllA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.28.tgz", - "integrity": "sha512-q8tW5J4RkOkl7vYShnWS//VAb2Ngolfm9WOMaF2GRJUr2Y/Xeb/+cNjdsNOqea2BzW049D5vdP7XPmir3/zUZw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.28.tgz", - "integrity": "sha512-jap6EiB3wG1YE1hyhNr9KLPpH4PGm+5tVMfN0l7fgKtV0ikgpcEN/YF94tru+z5m2HovqYW009+Evq9dcVGmpg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -5409,20 +4739,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", From 615e7d86f456c902a37ac6a22c7b983da385b1e8 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 20:03:58 +0100 Subject: [PATCH 09/27] Regenerate package-lock.json --- package-lock.json | 4671 ++++++++++++++++++++------------------------- 1 file changed, 2100 insertions(+), 2571 deletions(-) diff --git a/package-lock.json b/package-lock.json index c10961c1ca..780061526b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,30 +69,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -108,12 +108,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -123,14 +123,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -138,43 +138,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", @@ -189,16 +152,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -220,22 +182,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -251,22 +201,22 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dev": true, "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -287,11 +237,85 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -300,9 +324,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -311,40 +335,31 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -353,67 +368,410 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.9.0" + } + }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", + "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@bundled-es-modules/cookie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", - "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "cookie": "^0.5.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@bundled-es-modules/statuses": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", - "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "statuses": "^2.0.1" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@bundled-es-modules/statuses/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/@bundled-es-modules/tough-cookie": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", - "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@types/tough-cookie": "^4.0.5", - "tough-cookie": "^4.1.4" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "linux" + "win32" ], "engines": { "node": ">=12" @@ -435,9 +793,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -550,28 +908,28 @@ "dev": true }, "node_modules/@inquirer/confirm": { - "version": "3.1.17", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.17.tgz", - "integrity": "sha512-qCpt/AABzPynz8tr69VDvhcjwmzAryipWXtW8Vi6m651da4H/d0Bdn55LkxXD7Rp2gfgxvxzTdb66AhIA8gzBA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", + "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", "dev": true, "dependencies": { - "@inquirer/core": "^9.0.5", - "@inquirer/type": "^1.5.1" + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" }, "engines": { "node": ">=18" } }, "node_modules/@inquirer/core": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", - "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.1.0.tgz", + "integrity": "sha512-RZVfH//2ytTjmaBIzeKT1zefcQZzuruwkpTwwbe/i2jTl4o9M+iML5ChULzz6iw1Ok8iUBBsRCjY2IEbD8Ft4w==", "dev": true, "dependencies": { "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.1", + "@inquirer/type": "^1.5.3", "@types/mute-stream": "^0.0.4", - "@types/node": "^20.14.11", + "@types/node": "^22.5.2", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "cli-spinners": "^2.9.2", @@ -586,21 +944,6 @@ "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@inquirer/core/node_modules/cli-width": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", @@ -610,24 +953,6 @@ "node": ">= 12" } }, - "node_modules/@inquirer/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@inquirer/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@inquirer/core/node_modules/mute-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", @@ -661,9 +986,9 @@ } }, "node_modules/@inquirer/type": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.1.tgz", - "integrity": "sha512-m3YgGQlKNS0BM+8AFiJkCsTqHEFCWn6s/Rqye3mYwvqY6LdfUv12eSwbsgNzrYyrLXiy7IrrjDLPysaSBwEfhw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.3.tgz", + "integrity": "sha512-xUQ14WQGR/HK5ei+2CvgcwoH9fQ4PgPGmVFSN0pc1+fVyDL3MREhyAY7nxEErSu6CkllBM3D7e3e+kOvtu+eIg==", "dev": true, "dependencies": { "mute-stream": "^1.0.0" @@ -820,9 +1145,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "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 }, "node_modules/@jridgewell/trace-mapping": { @@ -926,9 +1251,9 @@ "dev": true }, "node_modules/@promptbook/utils": { - "version": "0.50.0-10", - "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.50.0-10.tgz", - "integrity": "sha512-Z94YoY/wcZb5m1QoXgmIC1rVeDguGK5bWmUTYdWCqh/LHVifRdJ1C+tBzS0h+HMOD0XzMjZhBQ/mBgTZ/QNW/g==", + "version": "0.70.0-1", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.70.0-1.tgz", + "integrity": "sha512-qd2lLRRN+sE6UuNMi2tEeUUeb4zmXnxY5EMdfHVXNE+bqBDpUC7/aEfXgA3jnUXEr+xFjQ8PTFQgWvBMaKvw0g==", "dev": true, "funding": [ { @@ -941,24 +1266,7 @@ } ], "dependencies": { - "moment": "2.30.1", - "prettier": "2.8.1", - "spacetrim": "0.11.25" - } - }, - "node_modules/@promptbook/utils/node_modules/prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "spacetrim": "0.11.39" } }, "node_modules/@puppeteer/browsers": { @@ -982,21 +1290,6 @@ "node": ">=16.3.0" } }, - "node_modules/@puppeteer/browsers/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@puppeteer/browsers/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1011,24 +1304,6 @@ "node": ">=12" } }, - "node_modules/@puppeteer/browsers/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@puppeteer/browsers/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@puppeteer/browsers/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1174,70 +1449,213 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz", "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rollup/plugin-terser": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", - "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", "cpu": [ "x64" ], @@ -1248,9 +1666,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", "cpu": [ "x64" ], @@ -1260,6 +1678,45 @@ "linux" ] }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sindresorhus/is": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", @@ -1273,15 +1730,15 @@ } }, "node_modules/@swc/core": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.28.tgz", - "integrity": "sha512-muCdNIqOTURUgYeyyOLYE3ShL8SZO6dw6bhRm6dCvxWzCZOncPc5fB0kjcPXTML+9KJoHL7ks5xg+vsQK+v6ig==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.23.tgz", + "integrity": "sha512-VDNkpDvDlreGh2E3tlDj8B3piiuLhhQA/7rIVZpiLUvG1YpucAa6N7iDXA7Gc/+Hah8spaCg/qvEaBkCmcIYCQ==", "dev": true, "hasInstallScript": true, "peer": true, "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.8" + "@swc/types": "^0.1.12" }, "engines": { "node": ">=10" @@ -1291,16 +1748,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.5.28", - "@swc/core-darwin-x64": "1.5.28", - "@swc/core-linux-arm-gnueabihf": "1.5.28", - "@swc/core-linux-arm64-gnu": "1.5.28", - "@swc/core-linux-arm64-musl": "1.5.28", - "@swc/core-linux-x64-gnu": "1.5.28", - "@swc/core-linux-x64-musl": "1.5.28", - "@swc/core-win32-arm64-msvc": "1.5.28", - "@swc/core-win32-ia32-msvc": "1.5.28", - "@swc/core-win32-x64-msvc": "1.5.28" + "@swc/core-darwin-arm64": "1.7.23", + "@swc/core-darwin-x64": "1.7.23", + "@swc/core-linux-arm-gnueabihf": "1.7.23", + "@swc/core-linux-arm64-gnu": "1.7.23", + "@swc/core-linux-arm64-musl": "1.7.23", + "@swc/core-linux-x64-gnu": "1.7.23", + "@swc/core-linux-x64-musl": "1.7.23", + "@swc/core-win32-arm64-msvc": "1.7.23", + "@swc/core-win32-ia32-msvc": "1.7.23", + "@swc/core-win32-x64-msvc": "1.7.23" }, "peerDependencies": { "@swc/helpers": "*" @@ -1311,10 +1768,95 @@ } } }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.23.tgz", + "integrity": "sha512-yyOHPfti6yKlQulfVWMt7BVKst+SyEZYCWuQSGMn1KgmNCH/bYufRWfQXIhkGSj44ZkEepJmsJ8tDyIb4k5WyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.23.tgz", + "integrity": "sha512-GzqHwQ0Y1VyjdI/bBKFX2GKm5HD3PIB6OhuAQtWZMTtEr2yIrlT0YK2T+XKh7oIg31JwxGBeQdBk3KTI7DARmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.23.tgz", + "integrity": "sha512-qwX4gB41OS6/OZkHcpTqLFGsdmvoZyffnJIlgB/kZKwH3lfeJWzv6vx57zXtNpM/t7GoQEe0VZUVdmNjxSxBZw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.23.tgz", + "integrity": "sha512-TsrbUZdMaUwzI7+g/8rHPLWbntMKYSu5Bn5IBSqVKPeyqaXxNnlIUnWXgXcUcRAc+T+Y8ADfr7EiFz9iz5DuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.23.tgz", + "integrity": "sha512-JEdtwdthazKq4PBz53KSubwwK8MvqODAihGSAzc8u3Unq4ojcvaS8b0CwLBeD+kTQ78HpxOXTt3DsFIxpgaCAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.28.tgz", - "integrity": "sha512-ueQ9VejnQUM2Pt+vT0IAKoF4vYBWUP6n1KHGdILpoGe3LuafQrqu7RoyQ15C7/AYii7hAeNhTFdf6gLbg8cjFg==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.23.tgz", + "integrity": "sha512-V51gFPWaVAHbI1yg9ahsoya3aB4uawye3SZ5uQWgcP7wdCdiv60dw4F5nuPJf5Z1oXD3U/BslXuamv8Oh9vXqQ==", "cpu": [ "x64" ], @@ -1329,9 +1871,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.28.tgz", - "integrity": "sha512-G5th8Mg0az8CbY4GQt9/m5hg2Y0kGIwvQBeVACuLQB6q2Y4txzdiTpjmFqUUhEvvl7Klyx1IHvNhfXs3zpt7PA==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.23.tgz", + "integrity": "sha512-BBqQi4+UdeRqag3yM4IJjaHG4yc1o3l9ksENHToE0o/u2DT0FY5+K/DiYGZLC1JHbSFzNqRCYsa7DIzRtZ0A1A==", "cpu": [ "x64" ], @@ -1345,6 +1887,57 @@ "node": ">=10" } }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.23.tgz", + "integrity": "sha512-JPk6pvCKncL6bXG7p+NLZf8PWx4FakVvKNdwGeMrYunb+yk1IZf7qf9LJk8+GDGF5QviDXPs8opZrTrfsW80fA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.23.tgz", + "integrity": "sha512-2Whxi8d+bLQBzJcQ5qYPHlk02YYVGsMVav0fWk+FnX2z1QRREIu1L1xvrpi7gBpjXp6BIU40ya8GiKeekNT2bg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.23.tgz", + "integrity": "sha512-82fARk4/yJ40kwWKY/gdKDisPdtgJE9jgpl/vkNG3alyJxrCzuNM7+CtiKoYbXLeqM8GQTS3wlvCaJu9oQ8dag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -1353,9 +1946,9 @@ "peer": true }, "node_modules/@swc/types": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.8.tgz", - "integrity": "sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", + "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", "dev": true, "peer": true, "dependencies": { @@ -1393,76 +1986,6 @@ "node": ">=18" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/user-event": { "version": "14.5.2", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", @@ -1555,12 +2078,12 @@ } }, "node_modules/@types/node": { - "version": "20.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", - "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "version": "22.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", + "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/normalize-package-data": { @@ -1606,9 +2129,9 @@ "dev": true }, "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true }, "node_modules/@types/which": { @@ -1624,9 +2147,9 @@ "dev": true }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -1649,16 +2172,16 @@ "dev": true }, "node_modules/@vitest/browser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.0.4.tgz", - "integrity": "sha512-QsIkbqPqHsXvgxjCjjgKjuWKmrC0VJgpaDkuEmOy5gTnErhhifWIfp3HpH92K7cscfaIao+RlKv5f8nUMgjfmA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.0.5.tgz", + "integrity": "sha512-VbOYtu/6R3d7ASZREcrJmRY/sQuRFO9wMVsEDqfYbWiJRh2fDNi8CL1Csn7Ux31pOcPmmM5QvzFCMpiojvVh8g==", "dev": true, "dependencies": { - "@testing-library/dom": "^10.3.1", + "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.5.2", - "@vitest/utils": "2.0.4", + "@vitest/utils": "2.0.5", "magic-string": "^0.30.10", - "msw": "^2.3.1", + "msw": "^2.3.2", "sirv": "^2.0.4", "ws": "^8.18.0" }, @@ -1667,7 +2190,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "2.0.4", + "vitest": "2.0.5", "webdriverio": "*" }, "peerDependenciesMeta": { @@ -1682,35 +2205,14 @@ } } }, - "node_modules/@vitest/browser/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/@vitest/expect": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.4.tgz", - "integrity": "sha512-39jr5EguIoanChvBqe34I8m1hJFI4+jxvdOpD7gslZrVQBKhh8H9eD7J/LJX4zakrw23W+dITQTDqdt43xVcJw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", "dev": true, "dependencies": { - "@vitest/spy": "2.0.4", - "@vitest/utils": "2.0.4", + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -1719,9 +2221,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.4.tgz", - "integrity": "sha512-RYZl31STbNGqf4l2eQM1nvKPXE0NhC6Eq0suTTePc4mtMQ1Fn8qZmjV4emZdEdG2NOWGKSCrHZjmTqDCDoeFBw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", "dev": true, "dependencies": { "tinyrainbow": "^1.2.0" @@ -1731,12 +2233,12 @@ } }, "node_modules/@vitest/runner": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.4.tgz", - "integrity": "sha512-Gk+9Su/2H2zNfNdeJR124gZckd5st4YoSuhF1Rebi37qTXKnqYyFCd9KP4vl2cQHbtuVKjfEKrNJxHHCW8thbQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", + "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", "dev": true, "dependencies": { - "@vitest/utils": "2.0.4", + "@vitest/utils": "2.0.5", "pathe": "^1.1.2" }, "funding": { @@ -1744,12 +2246,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.4.tgz", - "integrity": "sha512-or6Mzoz/pD7xTvuJMFYEtso1vJo1S5u6zBTinfl+7smGUhqybn6VjzCDMhmTyVOFWwkCMuNjmNNxnyXPgKDoPw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", + "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.0.4", + "@vitest/pretty-format": "2.0.5", "magic-string": "^0.30.10", "pathe": "^1.1.2" }, @@ -1758,9 +2260,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.4.tgz", - "integrity": "sha512-uTXU56TNoYrTohb+6CseP8IqNwlNdtPwEO0AWl+5j7NelS6x0xZZtP0bDWaLvOfUbaYwhhWp1guzXUxkC7mW7Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" @@ -1770,12 +2272,12 @@ } }, "node_modules/@vitest/utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.4.tgz", - "integrity": "sha512-Zc75QuuoJhOBnlo99ZVUkJIuq4Oj0zAkrQ2VzCqNCx6wAwViHEh5Fnp4fiJTE9rA+sAoXRf00Z9xGgfEzV6fzQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.0.4", + "@vitest/pretty-format": "2.0.5", "estree-walker": "^3.0.3", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" @@ -1794,75 +2296,75 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", - "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz", + "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==", "dev": true, "optional": true, "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.27", + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.0", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", - "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz", + "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==", "dev": true, "optional": true, "dependencies": { - "@vue/compiler-core": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-core": "3.5.0", + "@vue/shared": "3.5.0" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", - "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz", + "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==", "dev": true, "optional": true, "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.27", - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27", + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.0", + "@vue/compiler-dom": "3.5.0", + "@vue/compiler-ssr": "3.5.0", + "@vue/shared": "3.5.0", "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38", + "magic-string": "^0.30.11", + "postcss": "^8.4.44", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", - "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz", + "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==", "dev": true, "optional": true, "dependencies": { - "@vue/compiler-dom": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-dom": "3.5.0", + "@vue/shared": "3.5.0" } }, "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz", + "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==", "dev": true, "optional": true }, "node_modules/@wdio/config": { - "version": "8.38.2", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.38.2.tgz", - "integrity": "sha512-xlnapTr1vOA0h5HsHTIqj47729FbG3WjxmgHweDEQvcT4C1g9l+WKf+N3FM7DNNoIsAqxKi6rOHG02rJADQJtw==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.3.tgz", + "integrity": "sha512-HIi+JnHEDAExhzGRQuZOXw1HWIpe/bsVFHwNISJhY6wS4Nijaigmegs2p14Rv16ydOF19hGrxdKsl8k5STIP2A==", "dev": true, "dependencies": { "@wdio/logger": "8.38.0", - "@wdio/types": "8.38.2", - "@wdio/utils": "8.38.2", + "@wdio/types": "8.40.3", + "@wdio/utils": "8.40.3", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -1881,48 +2383,30 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@wdio/config/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@wdio/config/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@wdio/config/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1989,44 +2473,44 @@ } }, "node_modules/@wdio/protocols": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.38.0.tgz", - "integrity": "sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", + "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", "dev": true }, "node_modules/@wdio/repl": { - "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.24.12.tgz", - "integrity": "sha512-321F3sWafnlw93uRTSjEBVuvWCxTkWNDs7ektQS15drrroL3TMeFOynu4rDrIz0jXD9Vas0HCD2Tq/P0uxFLdw==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.40.3.tgz", + "integrity": "sha512-mWEiBbaC7CgxvSd2/ozpbZWebnRIc8KRu/J81Hlw/txUWio27S7IpXBlZGVvhEsNzq0+cuxB/8gDkkXvMPbesw==", "dev": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/types": { - "version": "8.38.2", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.38.2.tgz", - "integrity": "sha512-+wj1c1OSLdnN4WO5b44Ih4263dTl/eSwMGSI4/pCgIyXIuYQH38JQ+6WRa+c8vJEskUzboq2cSgEQumVZ39ozQ==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz", + "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==", "dev": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/utils": { - "version": "8.38.2", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.38.2.tgz", - "integrity": "sha512-y5AnBwsGcu/XuCBGCgKmlvKdwEIFyzLA+Cr+denySxY3jbWDONtPUcGaVdFALwsIa5jcIjcATqGmZcCPGnkd7g==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz", + "integrity": "sha512-pv/848KGfPN3YXU4QRfTYGkAu4/lejIfoGzGpvGNDcACiVxgZhyRZkJ2xVaSnGaXzF0R7pMozrkU5/DnEhcxMg==", "dev": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.38.0", - "@wdio/types": "8.38.2", + "@wdio/types": "8.40.3", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.5.0", @@ -2043,9 +2527,9 @@ } }, "node_modules/@zip.js/zip.js": { - "version": "2.7.45", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.45.tgz", - "integrity": "sha512-Mm2EXF33DJQ/3GWWEWeP1UCqzpQ5+fiMvT3QWspsXY05DyqqxWu7a9awSzU4/spHMHVFrTjani1PR0vprgZpow==", + "version": "2.7.52", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.52.tgz", + "integrity": "sha512-+5g7FQswvrCHwYKNMd/KFxZSObctLSsQOgqBSi0LzwHo3li9Eh1w5cF5ndjQw9Zbr3ajVnd2+XyiX85gAetx1Q==", "dev": true, "engines": { "bun": ">=0.7.0", @@ -2066,11 +2550,10 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2142,76 +2625,6 @@ "prettier": "^2" } }, - "node_modules/all-contributors-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/all-contributors-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/all-contributors-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/all-contributors-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/all-contributors-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/all-contributors-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -2237,15 +2650,18 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -2301,172 +2717,56 @@ "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/archiver-utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "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/archiver-utils/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/archiver-utils/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/archiver/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "dev": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "balanced-match": "^1.0.0" } }, - "node_modules/archiver/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=0.8.x" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/argparse": { @@ -2506,15 +2806,15 @@ } }, "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "node_modules/b4a": { @@ -2540,16 +2840,16 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz", - "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", "dev": true, "optional": true }, "node_modules/bare-fs": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", - "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.3.tgz", + "integrity": "sha512-7RYKL+vZVCyAsMLi5SPu7QGauGGT8avnP/HO571ndEuV4MYdGXvLhtW67FuLPeEI8EiIY7zbbRR9x7x7HU0kgw==", "dev": true, "optional": true, "dependencies": { @@ -2559,9 +2859,9 @@ } }, "node_modules/bare-os": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz", - "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.2.tgz", + "integrity": "sha512-HZoJwzC+rZ9lqEemTMiO0luOePoGYNBgsLLgegKR/cljiJvcDNhDZQkzC+NC5Oh0aHbdBNSOHpghwMuB5tqhjg==", "dev": true, "optional": true }, @@ -2576,12 +2876,13 @@ } }, "node_modules/bare-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.2.tgz", - "integrity": "sha512-az/7TFOh4Gk9Tqs1/xMFq5FuFoeZ9hZ3orsM2x69u8NXVUDXZnpdhG8mZY/Pv6DF954MGn+iIt4rFrG34eQsvg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.2.1.tgz", + "integrity": "sha512-YTB47kHwBW9zSG8LD77MIBAAQXjU2WjAkMHeeb7hUplVs6+IoM5I7uEVQNPMB7lj9r8I76UMdoMkGnCodHOLqg==", "dev": true, "optional": true, "dependencies": { + "b4a": "^1.6.6", "streamx": "^2.18.0" } }, @@ -2649,9 +2950,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -2668,10 +2969,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -2681,13 +2982,27 @@ } }, "node_modules/buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "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.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "node_modules/buffer-crc32": { @@ -2793,10 +3108,19 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001632", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz", - "integrity": "sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==", + "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", "dev": true, "funding": [ { @@ -2840,17 +3164,19 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/character-entities": { @@ -2923,12 +3249,13 @@ } }, "node_modules/chromium-bidi": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.8.tgz", + "integrity": "sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==", "dev": true, "dependencies": { - "mitt": "3.0.0" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0" }, "peerDependencies": { "devtools-protocol": "*" @@ -2993,15 +3320,15 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -3050,22 +3377,21 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cliui/node_modules/color-convert": { + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -3077,41 +3403,12 @@ "node": ">=7.0.0" } }, - "node_modules/cliui/node_modules/color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -3170,39 +3467,6 @@ "node": ">= 14" } }, - "node_modules/compress-commons/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "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/compress-commons/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/compress-commons/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3215,22 +3479,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3308,55 +3556,6 @@ "node": ">= 14" } }, - "node_modules/crc32-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "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/crc32-stream/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/crc32-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -3402,9 +3601,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "dev": true }, "node_modules/de-indent": { @@ -3415,9 +3614,9 @@ "optional": true }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -3575,9 +3774,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1302984", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1302984.tgz", - "integrity": "sha512-Rgh2Sk5fUSCtEx4QGH9iwTyECdFPySG2nlz5J8guGh2Wlha6uzSOCq/DCEC8faHlLaMPZJMuZ4ovgcX4LvOkKA==", + "version": "0.0.1342118", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", + "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==", "dev": true }, "node_modules/didyoumean": { @@ -3667,26 +3866,11 @@ "documentation": "bin/documentation.js" }, "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "@vue/compiler-sfc": "^3.2.37", - "vue-template-compiler": "^2.7.8" - } - }, - "node_modules/documentation/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "optionalDependencies": { + "@vue/compiler-sfc": "^3.2.37", + "vue-template-compiler": "^2.7.8" } }, "node_modules/documentation/node_modules/chalk": { @@ -3715,24 +3899,6 @@ "node": ">=12" } }, - "node_modules/documentation/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/documentation/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/documentation/node_modules/pify": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/pify/-/pify-6.1.0.tgz", @@ -3827,16 +3993,17 @@ } }, "node_modules/edgedriver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.6.0.tgz", - "integrity": "sha512-IeJXEczG+DNYBIa9gFgVYTqrawlxmc9SUqUsWU2E98jOsO/amA7wzabKOS8Bwgr/3xWoyXCJ6yGFrbFKrilyyQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.6.1.tgz", + "integrity": "sha512-3Ve9cd5ziLByUdigw6zovVeWJjVs8QHVmqOB0sJ0WNeVPcwf4p18GnxMmVvlFmYRloUwf5suNuorea4QzwBIOA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@wdio/logger": "^8.28.0", - "@zip.js/zip.js": "^2.7.44", + "@wdio/logger": "^8.38.0", + "@zip.js/zip.js": "^2.7.48", "decamelize": "^6.0.0", "edge-paths": "^3.0.5", + "fast-xml-parser": "^4.4.1", "node-fetch": "^3.3.2", "which": "^4.0.0" }, @@ -3896,9 +4063,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.798", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.798.tgz", - "integrity": "sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", "dev": true }, "node_modules/emoji-regex": { @@ -3929,6 +4096,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3960,9 +4139,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "bin": { @@ -3972,47 +4151,50 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -4036,15 +4218,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4126,15 +4299,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -4147,83 +4311,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4251,81 +4338,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -4338,18 +4350,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -4367,18 +4367,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -4393,9 +4381,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -4404,15 +4392,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -4425,7 +4404,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -4464,6 +4443,15 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, + "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/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -4507,18 +4495,6 @@ "node": ">=4" } }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -4578,6 +4554,28 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -4634,6 +4632,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4663,6 +4670,22 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-versions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", @@ -4698,6 +4721,22 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -4733,12 +4772,35 @@ "node": ">=14.14" } }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4749,17 +4811,17 @@ } }, "node_modules/geckodriver": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.4.1.tgz", - "integrity": "sha512-nnAdIrwLkMcDu4BitWXF23pEMeZZ0Cj7HaWWFdSpeedBP9z6ft150JYiGO2mwzw6UiR823Znk1JeIf07RyzloA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.4.4.tgz", + "integrity": "sha512-0zaw19tcmWeluqx7+Y559JGBtidu1D0Lb8ElYKiNEQu8r3sCfrLUf5V10xypl8u29ZLbgRV7WflxCJVTCkCMFA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@wdio/logger": "^8.28.0", - "@zip.js/zip.js": "^2.7.44", + "@wdio/logger": "^9.0.0", + "@zip.js/zip.js": "^2.7.48", "decamelize": "^6.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.5", "node-fetch": "^3.3.2", "tar-fs": "^3.0.6", "which": "^4.0.0" @@ -4771,6 +4833,45 @@ "node": "^16.13 || >=18 || >=20" } }, + "node_modules/geckodriver/node_modules/@wdio/logger": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.0.4.tgz", + "integrity": "sha512-b6gcu0PTVb3fgK4kyAH/k5UUWN5FOUdAfhA4PAY/IZvxZTMFYMqnrZb0WRWWWqL6nu9pcrOVtCOdPBvj0cb+Nw==", + "dev": true, + "dependencies": { + "chalk": "^5.1.2", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/geckodriver/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/geckodriver/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/geckodriver/node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -4807,6 +4908,21 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/geckodriver/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/geckodriver/node_modules/tar-fs": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", @@ -5098,22 +5214,13 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/graphql": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", - "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -5317,9 +5424,9 @@ "dev": true }, "node_modules/highlight.js": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", - "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", "dev": true, "engines": { "node": ">=12.0.0" @@ -5337,280 +5444,116 @@ "node": ">=10" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/husky": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", - "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "husky-run": "bin/run.js", - "husky-upgrade": "lib/upgrader/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/husky" - } - }, - "node_modules/husky/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/husky/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/husky/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/husky/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/husky/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/husky/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, - "node_modules/husky/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/husky/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.19.0" } }, - "node_modules/husky/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "agent-base": "^7.0.2", + "debug": "4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/husky/node_modules/pkg-dir": { + "node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, "engines": { - "node": ">=10" + "node": ">=16.17.0" } }, - "node_modules/husky/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/husky": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", + "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", "dev": true, + "hasInstallScript": true, "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^4.0.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "husky-run": "bin/run.js", + "husky-upgrade": "lib/upgrader/bin.js" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/husky/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/husky" } }, "node_modules/i18next": { @@ -5631,6 +5574,18 @@ "@babel/runtime": "^7.5.5" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -5652,9 +5607,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -5751,76 +5706,6 @@ "node": ">=8.0.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -5865,6 +5750,29 @@ "node": ">=8" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/is-builtin-module": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", @@ -5881,12 +5789,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6042,9 +5953,27 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6052,16 +5981,13 @@ "dev": true }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -6125,76 +6051,6 @@ "node": ">=10" } }, - "node_modules/json-fixer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/json-fixer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/json-fixer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/json-fixer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/json-fixer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/json-fixer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -6237,6 +6093,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -6249,6 +6114,36 @@ "setimmediate": "^1.0.5" } }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/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 + }, + "node_modules/jszip/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" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -6301,6 +6196,36 @@ "node": ">= 0.6.3" } }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/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 + }, + "node_modules/lazystream/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" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6347,21 +6272,21 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", - "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", - "micromatch": "~4.0.7", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -6386,9 +6311,9 @@ } }, "node_modules/lint-staged/node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -6398,16 +6323,16 @@ } }, "node_modules/listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -6424,9 +6349,9 @@ } }, "node_modules/locate-app": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.4.15.tgz", - "integrity": "sha512-oAGHATXPUHSQ74Om+3dXBRNYtCzU7Wzuhlj/WIZchqHb/5/TGJRzLEtHipMDOak0UZG9U365RMXyBzgV/fhOww==", + "version": "2.4.38", + "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.4.38.tgz", + "integrity": "sha512-fJNTsDQZSiy+bn98RicvVX8e7HwH3YqZnRRisircGDGPpf0eZ2x57Ev7LGs0pCBO7hzjINVtVr5QFfK8KH7hjg==", "dev": true, "funding": [ { @@ -6439,7 +6364,7 @@ } ], "dependencies": { - "@promptbook/utils": "0.50.0-10", + "@promptbook/utils": "0.70.0-1", "type-fest": "2.13.0", "userhome": "1.0.0" } @@ -6456,6 +6381,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -6481,14 +6421,14 @@ "dev": true }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -6500,12 +6440,15 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6536,15 +6479,15 @@ } }, "node_modules/log-update/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6565,52 +6508,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/log-update/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", @@ -6711,12 +6639,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/map-cache": { @@ -7606,9 +7534,9 @@ ] }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -7630,6 +7558,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", @@ -7664,9 +7604,9 @@ } }, "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true }, "node_modules/mkdirp-classic": { @@ -7675,15 +7615,6 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -7709,9 +7640,9 @@ "dev": true }, "node_modules/msw": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.4.tgz", - "integrity": "sha512-sHMlwrajgmZSA2l1o7qRSe+azm/I+x9lvVVcOxAzi4vCtH8uVPJk1K5BQYDkzGl+tt0RvM9huEXXdeGrgcc79g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.1.tgz", + "integrity": "sha512-HXcoQPzYTwEmVk+BGIcRa0vLabBT+J20SSSeYh/QfajaK5ceA6dlD4ZZjfz2dqGEq4vRNCPLP6eXsB94KllPFg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -7724,62 +7655,34 @@ "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", "chalk": "^4.1.2", - "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", - "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", - "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", - "yargs": "^17.7.2" - }, - "bin": { - "msw": "cli/index.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mswjs" - }, - "peerDependencies": { - "typescript": ">= 4.7.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/msw/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/msw/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-node-process": "^1.2.0", + "outvariant": "^1.4.2", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "graphql": ">= 16.8.x", + "typescript": ">= 4.7.x" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + }, + "typescript": { + "optional": true + } } }, "node_modules/msw/node_modules/cliui": { @@ -7796,49 +7699,10 @@ "node": ">=12" } }, - "node_modules/msw/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/msw/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/msw/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/msw/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/msw/node_modules/type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.0.tgz", + "integrity": "sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==", "dev": true, "engines": { "node": ">=16" @@ -7979,9 +7843,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "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 }, "node_modules/normalize-package-data": { @@ -8000,9 +7864,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -8060,10 +7924,13 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8114,18 +7981,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/opencollective-postinstall": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", @@ -8192,15 +8047,30 @@ } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8216,9 +8086,9 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "dev": true, "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", @@ -8226,9 +8096,9 @@ "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" @@ -8247,6 +8117,12 @@ "node": ">= 14" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -8321,6 +8197,15 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -8383,13 +8268,10 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/path-to-regexp": { "version": "6.2.2", @@ -8440,9 +8322,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "dev": true }, "node_modules/picomatch": { @@ -8481,6 +8363,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", @@ -8491,9 +8385,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.44", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz", + "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==", "dev": true, "funding": [ { @@ -8511,7 +8405,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -8659,215 +8553,80 @@ "once": "^1.3.1" } }, - "node_modules/puppeteer-core": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "1.4.6", - "chromium-bidi": "0.4.16", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1147663", - "ws": "8.13.0" - }, - "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/@puppeteer/browsers": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", - "dev": true, - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.0", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=16.3.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/puppeteer-core/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/puppeteer-core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/puppeteer-core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/puppeteer-core/node_modules/debug": { - "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" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", - "dev": true - }, - "node_modules/puppeteer-core/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/puppeteer-core/node_modules/proxy-agent": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/puppeteer-core/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=6" } }, - "node_modules/puppeteer-core/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/puppeteer-core": { + "version": "21.11.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.11.0.tgz", + "integrity": "sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==", "dev": true, + "dependencies": { + "@puppeteer/browsers": "1.9.1", + "chromium-bidi": "0.5.8", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1232444", + "ws": "8.16.0" + }, "engines": { - "node": ">=10" + "node": ">=16.13.2" } }, - "node_modules/puppeteer-core/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "ms": "2.1.2" }, "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/puppeteer-core/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.1232444", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz", + "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "dependencies": { "side-channel": "^1.0.6" @@ -9061,6 +8820,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/read-pkg/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -9074,39 +8845,19 @@ } }, "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readable-stream/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==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/readdir-glob": { @@ -9151,6 +8902,12 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "node_modules/remark": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.3.tgz", @@ -9397,9 +9154,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rgb2hex": { @@ -9446,9 +9203,9 @@ } }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -9461,22 +9218,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", "fsevents": "~2.3.2" } }, @@ -9515,21 +9272,6 @@ } } }, - "node_modules/rollup-plugin-visualizer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/rollup-plugin-visualizer/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -9544,33 +9286,6 @@ "node": ">=12" } }, - "node_modules/rollup-plugin-visualizer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/rollup-plugin-visualizer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/rollup-plugin-visualizer/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, - "engines": { - "node": ">= 8" - } - }, "node_modules/rollup-plugin-visualizer/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -9958,19 +9673,28 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", - "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dev": true, "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, + "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, + "engines": { + "node": ">= 8" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -10010,9 +9734,9 @@ } }, "node_modules/spacetrim": { - "version": "0.11.25", - "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.11.25.tgz", - "integrity": "sha512-SWxXDROciuJs9YEYXUBjot5k/cqNGPPbT3QmkInFne4AGc1y+76It+jqU8rfsXKt57RRiunzZn1m9+KfuuNklw==", + "version": "0.11.39", + "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.11.39.tgz", + "integrity": "sha512-S/baW29azJ7py5ausQRE2S6uEDQnlxgMHOEEq4V770ooBDD1/9kZnxRcco/tjZYuDuqYXblCk/r3N13ZmvHZ2g==", "dev": true, "funding": [ { @@ -10052,9 +9776,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true }, "node_modules/split2": { @@ -10078,6 +9802,15 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/std-env": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", @@ -10085,9 +9818,9 @@ "dev": true }, "node_modules/streamx": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.0.tgz", + "integrity": "sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ==", "dev": true, "dependencies": { "fast-fifo": "^1.3.2", @@ -10237,16 +9970,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -10284,9 +10023,9 @@ } }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -10301,18 +10040,6 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -10320,9 +10047,9 @@ "dev": true }, "node_modules/text-decoder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", - "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", + "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", "dev": true, "dependencies": { "b4a": "^1.6.4" @@ -10346,15 +10073,15 @@ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, "engines": { "node": "^18.0.0 || >=20.0.0" @@ -10435,24 +10162,6 @@ "node": ">=6" } }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/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==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -10519,6 +10228,30 @@ "through": "^2.3.8" } }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "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.1.13" + } + }, "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -10529,9 +10262,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, "node_modules/unified": { @@ -10553,29 +10286,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unified/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, "node_modules/unist-builder": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.1.tgz", @@ -10668,59 +10378,46 @@ } }, "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">= 4.0.0" } }, "node_modules/unplugin": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz", - "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.3.tgz", + "integrity": "sha512-my8DH0/T/Kx33KO+6QXAqdeMYgyy0GktlOpdQjpagfHKw5DrD0ctPr7SHUyOT3g4ZVpzCQGt/qcpuoKJ/pniHA==", "dev": true, "dependencies": { - "acorn": "^8.11.3", - "chokidar": "^3.6.0", + "acorn": "^8.12.1", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.6.1" + "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/unplugin-swc": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/unplugin-swc/-/unplugin-swc-1.4.5.tgz", - "integrity": "sha512-ltkJ70kjL53onJrypaMmKDiOvhghNUCbCxjxT6Ir0eAMIBsOfRhPt6vQtxB8R/6wYk/TfIJ2gCgdx2uKNPJRHA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/unplugin-swc/-/unplugin-swc-1.5.1.tgz", + "integrity": "sha512-/ZLrPNjChhGx3Z95pxJ4tQgfI6rWqukgYHKflrNB4zAV1izOQuDhkTn55JWeivpBxDCoK7M/TStb2aS/14PS/g==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.1.0", "load-tsconfig": "^0.2.5", - "unplugin": "^1.10.1" + "unplugin": "^1.11.0" }, "peerDependencies": { "@swc/core": "^1.2.108" } }, - "node_modules/unplugin/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -10756,15 +10453,6 @@ "punycode": "^2.1.0" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -10775,6 +10463,12 @@ "requires-port": "^1.0.0" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true + }, "node_modules/userhome": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.0.tgz", @@ -10972,38 +10666,15 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, "node_modules/vite": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", - "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", "dev": true, "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -11022,6 +10693,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -11039,6 +10711,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -11051,9 +10726,9 @@ } }, "node_modules/vite-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.4.tgz", - "integrity": "sha512-ZpJVkxcakYtig5iakNeL7N3trufe3M6vGuzYAr4GsbCTwobDeyPJpE4cjDhhPluv8OvQCFzu2LWp6GkoKRITXA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", + "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -11085,18 +10760,18 @@ } }, "node_modules/vitest": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.4.tgz", - "integrity": "sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", + "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.4", - "@vitest/pretty-format": "^2.0.4", - "@vitest/runner": "2.0.4", - "@vitest/snapshot": "2.0.4", - "@vitest/spy": "2.0.4", - "@vitest/utils": "2.0.4", + "@vitest/expect": "2.0.5", + "@vitest/pretty-format": "^2.0.5", + "@vitest/runner": "2.0.5", + "@vitest/snapshot": "2.0.5", + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", "chai": "^5.1.1", "debug": "^4.3.5", "execa": "^8.0.1", @@ -11107,7 +10782,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.4", + "vite-node": "2.0.5", "why-is-node-running": "^2.3.0" }, "bin": { @@ -11122,8 +10797,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.4", - "@vitest/ui": "2.0.4", + "@vitest/browser": "2.0.5", + "@vitest/ui": "2.0.5", "happy-dom": "*", "jsdom": "*" }, @@ -11176,55 +10851,6 @@ "node": ">=10" } }, - "node_modules/wait-port/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wait-port/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/wait-port/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wait-port/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wait-port/node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", @@ -11234,27 +10860,6 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/wait-port/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wait-port/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -11275,18 +10880,18 @@ } }, "node_modules/webdriver": { - "version": "8.38.2", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.38.2.tgz", - "integrity": "sha512-NGfjW0BDYwFgOIzeojOcWGn3tYloQdvHr+Y2xKKYVqa9Rs0x1mzlTjU1kWtC4DaV8DltskwaPa7o+s8hTNpuyA==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.40.3.tgz", + "integrity": "sha512-mc/pxLpgAQphnIaWvix/QXzp9CJpEvIA3YeF9t5plPaTbvbEaCAYYWkTP6e3vYPYWvx57krjGaYkNUnDCBNolA==", "dev": true, "dependencies": { - "@types/node": "^20.1.0", + "@types/node": "^22.2.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.38.2", + "@wdio/config": "8.40.3", "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.38.0", - "@wdio/types": "8.38.2", - "@wdio/utils": "8.38.2", + "@wdio/protocols": "8.40.3", + "@wdio/types": "8.40.3", + "@wdio/utils": "8.40.3", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -11297,23 +10902,23 @@ } }, "node_modules/webdriverio": { - "version": "8.38.2", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.38.2.tgz", - "integrity": "sha512-r09y5UfivyYh5JOzT2SpJJ1zDmQl/R4OTH12opUqkjvp21BibCQm/uu1mrxGy4lzSHljrvqSVrrcGI+6UA1O8w==", + "version": "8.40.5", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.40.5.tgz", + "integrity": "sha512-fKzaAF8lbgVFWIP8i0eGk22MpjactVVTWP8qtUXDob5Kdo8ffrg1lCKP8mcyrz6fiZM1OY1m6dvkbFelf23Nxw==", "dev": true, "dependencies": { - "@types/node": "^20.1.0", - "@wdio/config": "8.38.2", + "@types/node": "^22.2.0", + "@wdio/config": "8.40.3", "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.38.0", - "@wdio/repl": "8.24.12", - "@wdio/types": "8.38.2", - "@wdio/utils": "8.38.2", + "@wdio/protocols": "8.40.3", + "@wdio/repl": "8.40.3", + "@wdio/types": "8.40.3", + "@wdio/utils": "8.40.3", "archiver": "^7.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1302984", + "devtools-protocol": "^0.0.1342118", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", @@ -11321,12 +10926,12 @@ "lodash.clonedeep": "^4.5.0", "lodash.zip": "^4.2.0", "minimatch": "^9.0.0", - "puppeteer-core": "^20.9.0", + "puppeteer-core": "^21.11.0", "query-selector-shadow-dom": "^1.0.0", "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.38.2" + "webdriver": "8.40.3" }, "engines": { "node": "^16.13 || >=18" @@ -11350,9 +10955,9 @@ } }, "node_modules/webdriverio/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -11485,39 +11090,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -11543,15 +11115,15 @@ } }, "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -11587,9 +11159,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" @@ -11650,15 +11222,28 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { "node": ">=6" } }, + "node_modules/yargs-parser/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/yargs/node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -11693,38 +11278,31 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/yauzl": { @@ -11747,12 +11325,12 @@ } }, "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11784,55 +11362,6 @@ "node": ">= 14" } }, - "node_modules/zip-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "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/zip-stream/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/zip-stream/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", From 7e93e39902b499060d4605a7cf6a793a7a652a71 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 21:03:50 +0100 Subject: [PATCH 10/27] Generate parameter data before test --- .github/workflows/ci-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index ebf61a1d3f..d6400dd4bd 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -22,6 +22,8 @@ jobs: run: npm ci env: CI: true + - name: Build parameter data + run: npm run docs - name: build and test run: npm test env: From 24fea6b633fea3d11ecff49d0fd704d1f354e134 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 21:08:33 +0100 Subject: [PATCH 11/27] Create folder before writing file --- utils/convert.js | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/convert.js b/utils/convert.js index ee386ae144..0569eec02a 100644 --- a/utils/convert.js +++ b/utils/convert.js @@ -549,6 +549,7 @@ function buildParamDocs(docs) { out.end(); } +fs.mkdirSync(path.join(__dirname, '../docs/reference'), { recursive: true }); fs.writeFileSync(path.join(__dirname, '../docs/reference/data.json'), JSON.stringify(converted, null, 2)); fs.writeFileSync(path.join(__dirname, '../docs/reference/data.min.json'), JSON.stringify(converted)); buildParamDocs(JSON.parse(JSON.stringify(converted))); From ff80188c0625f92f322e982e5c68d6d7bc03188c Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 22:25:31 +0100 Subject: [PATCH 12/27] Remove unnecessary test cases FES should not be tested in individual module but for itself --- test/unit/color/creating_reading.js | 100 --- test/unit/core/2d_primitives.js | 112 +-- test/unit/core/curves.js | 18 - test/unit/core/error_helpers.js | 1205 --------------------------- test/unit/core/main.js | 160 ---- test/unit/core/preload.js | 288 ------- test/unit/core/vertex.js | 18 - test/unit/image/downloading.js | 111 --- test/unit/image/pixels.js | 43 - test/unit/io/files.js | 64 -- test/unit/io/saveTable.js | 20 - test/unit/webgl/3d_primitives.js | 171 ---- test/unit/webgl/interaction.js | 18 - 13 files changed, 2 insertions(+), 2326 deletions(-) delete mode 100644 test/unit/core/error_helpers.js delete mode 100644 test/unit/core/preload.js diff --git a/test/unit/color/creating_reading.js b/test/unit/color/creating_reading.js index 4a9a8ccd18..00a36135fd 100644 --- a/test/unit/color/creating_reading.js +++ b/test/unit/color/creating_reading.js @@ -28,118 +28,18 @@ suite('color/CreatingReading', function() { beforeEach(function() { myp5.colorMode(myp5.RGB); }); - test('no friendly-err-msg I', function() { - assert.doesNotThrow( - function() { - var string = 'magenta'; - c = myp5.color(string); - val = myp5.alpha(c); - assert.approximately(val, 255, 0.01); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg II', function() { - assert.doesNotThrow( - function() { - c = myp5.color('hsba(160, 100%, 50%, 0.5)'); - val = myp5.alpha(c); - assert.approximately(val, 127.5, 0.01); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.red, green, blue', function() { beforeEach(function() { myp5.colorMode(myp5.RGB); }); - test('red(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('hsl(126, 100%, 60%)'); - val = myp5.red(c); - assert.approximately(val, 51, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); - test('green(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('hsl(126, 100%, 60%)'); - val = myp5.green(c); - assert.approximately(val, 255, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); - test('blue(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('hsl(126, 100%, 60%)'); - val = myp5.blue(c); - assert.approximately(val, 71, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.hue, brightness, lightness, saturation', function() { beforeEach(function() { myp5.colorMode(myp5.HSL); }); - test('hue(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('#7fffd4'); - val = myp5.hue(c); - assert.approximately(val, 160, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); - test('brightness(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('#7fffd4'); - val = myp5.brightness(c); - assert.approximately(val, 100, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); - test('lightness(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('#7fffd4'); - val = myp5.lightness(c); - assert.approximately(val, 75, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); - test('saturation(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - c = myp5.color('#7fffd4'); - val = myp5.saturation(c); - assert.approximately(val, 100, 0.5); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.lerpColor', function() { diff --git a/test/unit/core/2d_primitives.js b/test/unit/core/2d_primitives.js index 49a1c7e682..523e549900 100644 --- a/test/unit/core/2d_primitives.js +++ b/test/unit/core/2d_primitives.js @@ -11,8 +11,8 @@ suite('2D Primitives', function() { }); }); - afterAll(function() { - myp5.remove(); + afterAll(async function() { + await myp5.remove(); }); suite('p5.prototype.arc', function() { @@ -20,15 +20,6 @@ suite('2D Primitives', function() { assert.ok(myp5.arc); assert.typeOf(myp5.arc, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.arc(1, 1, 10.5, 10, 0, Math.PI, 'pie'); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.ellipse', function() { @@ -36,15 +27,6 @@ suite('2D Primitives', function() { assert.ok(myp5.ellipse); assert.typeOf(myp5.ellipse, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.ellipse(0, 0, 100); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.line', function() { @@ -52,24 +34,6 @@ suite('2D Primitives', function() { assert.ok(myp5.line); assert.typeOf(myp5.line, 'function'); }); - test('no friendly-err-msg, 2D', function() { - assert.doesNotThrow( - function() { - myp5.line(0, 0, 100, 100); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg, 3D', function() { - assert.doesNotThrow( - function() { - myp5.line(0, 0, 100, 100, 20, Math.PI); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.point', function() { @@ -77,24 +41,6 @@ suite('2D Primitives', function() { assert.ok(myp5.point); assert.typeOf(myp5.point, 'function'); }); - test('no friendly-err-msg, 2D', function() { - assert.doesNotThrow( - function() { - myp5.point(Math.PI, 0); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg, 3D', function() { - assert.doesNotThrow( - function() { - myp5.point(Math.PI, 0, 100); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.quad', function() { @@ -102,15 +48,6 @@ suite('2D Primitives', function() { assert.ok(myp5.quad); assert.typeOf(myp5.quad, 'function'); }); - test('no friendly-err-msg, 2D', function() { - assert.doesNotThrow( - function() { - myp5.quad(Math.PI, 0, Math.PI, 5.1, 10, 5.1, 10, 0); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.rect', function() { @@ -118,24 +55,6 @@ suite('2D Primitives', function() { assert.ok(myp5.rect); assert.typeOf(myp5.rect, 'function'); }); - test('no friendly-err-msg, format I', function() { - assert.doesNotThrow( - function() { - myp5.rect(0, 0, 100); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg, format II', function() { - assert.doesNotThrow( - function() { - myp5.rect(0, 0, 100, 100, 1, Math.PI, 1, Math.PI); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.triangle', function() { @@ -143,39 +62,12 @@ suite('2D Primitives', function() { assert.ok(myp5.triangle); assert.typeOf(myp5.triangle, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.triangle(Math.PI, 0, Math.PI, 5.1, 10, 5.1); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.square', function() { test('should be a function', function() { assert.ok(myp5.square); assert.typeOf(myp5.square, 'function'); }); - test('no friendly-err-msg, format I', function() { - assert.doesNotThrow( - function() { - myp5.square(0, 0, 100); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg, format II', function() { - assert.doesNotThrow( - function() { - myp5.square(0, 0, 100, 100, Math.PI); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype._normalizeArcAngles', function() { diff --git a/test/unit/core/curves.js b/test/unit/core/curves.js index 606dd8da4b..c2fb72a36f 100644 --- a/test/unit/core/curves.js +++ b/test/unit/core/curves.js @@ -20,15 +20,6 @@ suite('Curves', function() { assert.ok(myp5.bezier); assert.typeOf(myp5.bezier, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.bezier(85, 20, 10, 10, 90, 90, 15, 80); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.bezierPoint', function() { @@ -61,15 +52,6 @@ suite('Curves', function() { assert.ok(myp5.curve); assert.typeOf(myp5.curve, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.curve(5, 26, 5, 26, 73, 24, 73, 61); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.curvePoint', function() { diff --git a/test/unit/core/error_helpers.js b/test/unit/core/error_helpers.js deleted file mode 100644 index 5f8457c842..0000000000 --- a/test/unit/core/error_helpers.js +++ /dev/null @@ -1,1205 +0,0 @@ -import p5 from '../../../src/app.js'; - -import { testUnMinified, createP5Iframe, P5_SCRIPT_TAG } from '../../js/p5_helpers'; -import '../../js/chai_helpers'; - -suite('Error Helpers', function() { - var myp5; - - beforeEach(function() { - new p5(function(p) { - p.setup = function() { - myp5 = p; - p5._clearValidateParamsCache(); - }; - }); - }); - - afterEach(function() { - myp5.remove(); - }); - - suite('friendly error logger', function() { - test('basic', function() { - assert.doesNotThrow( - function() { - p5._friendlyError('basic', 'basic'); - }, - Error, - 'got unwanted exception' - ); - }); - }); - - // unit tests for validateParameters - suite('validateParameters: Numbers + optional Constant', function() { - test('arc(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - p5._validateParameters('arc', [1, 1, 10.5, 10, 0, Math.PI, 'pie']); - }, - Error, - 'got unwanted exception' - ); - }); - test('arc(): missing param #4, #5', function() { - assert.validationError(function() { - p5._validateParameters('arc', [1, 1, 10.5, 10]); - }); - }); - test('arc(): missing param #0', function() { - assert.validationError(function() { - p5._validateParameters('arc', [ - undefined, - 1, - 10.5, - 10, - 0, - Math.PI, - 'pie' - ]); - }); - }); - test('arc(): missing param #4', function() { - assert.validationError(function() { - p5._validateParameters('arc', [ - 1, - 1, - 10.5, - 10, - undefined, - Math.PI, - 'pie' - ]); - }); - }); - test('arc(): missing param #5', function() { - assert.validationError(function() { - p5._validateParameters('arc', [1, 1, 10.5, 10, 0, undefined, 'pie']); - }); - }); - test('arc(): missing param #6, no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - p5._validateParameters('arc', [1, 1, 10.5, 10, 0, Math.PI]); - }, - Error, - 'got unwanted exception' - ); - }); - test('arc(): wrong param type at #0', function() { - assert.validationError(function() { - p5._validateParameters('arc', ['a', 1, 10.5, 10, 0, Math.PI, 'pie']); - }); - }); - }); - - suite('validateParameters: Numbers + optional Constant', function() { - test('rect(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - p5._validateParameters('rect', [1, 1, 10.5, 10]); - }, - Error, - 'got unwanted exception' - ); - }); - test('rect(): wrong param type at #0', function() { - assert.validationError(function() { - p5._validateParameters('rect', ['a', 1, 10.5, 10, 0, Math.PI]); - }); - }); - }); - - suite( - 'validateParameters: class, multi-types + optional Numbers', - function() { - test('ambientLight(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - var c = myp5.color(255, 204, 0); - p5._validateParameters('ambientLight', [c]); - }, - Error, - 'got unwanted exception' - ); - }); - } - ); - - suite('validateParameters: a few edge cases', function() { - // testing for edge cases mentioned in - // https://github.com/processing/p5.js/issues/2740 - testUnMinified('color: wrong type for optional parameter', function() { - let err = assert.throws(function() { - p5._validateParameters('color', [0, 0, 0, 'A']); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'WRONG_TYPE', - 'ValidationError type is correct' - ); - }); - - testUnMinified('color: superfluous parameter', function() { - assert.throws(function() { - p5._validateParameters('color', [[0, 0, 0], 0]); - }, p5.ValidationError); - // not performing a type check here as it could reasonably fit as - // either WRONG_TYPE or TOO_MANY_ARGUMENTS - }); - - testUnMinified('color: wrong element types', function() { - let err = assert.throws(function() { - p5._validateParameters('color', [['A', 'B', 'C']]); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'WRONG_TYPE', - 'ValidationError type is correct' - ); - }); - - testUnMinified('rect: null, non-trailing, optional parameter', function() { - let err = assert.throws(function() { - p5._validateParameters('rect', [0, 0, 0, 0, null, 0, 0, 0]); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'EMPTY_VAR', - 'ValidationError type is correct' - ); - }); - - testUnMinified('color: too many args + wrong types too', function() { - let err = assert.throws(function() { - p5._validateParameters('color', ['A', 'A', 0, 0, 0, 0, 0, 0, 0, 0]); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'TOO_MANY_ARGUMENTS', - 'ValidationError type is correct' - ); - }); - - testUnMinified('line: null string given', function() { - let err = assert.throws(function() { - p5._validateParameters('line', [1, 2, 4, 'null']); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'WRONG_TYPE', - 'ValidationError type is correct' - ); - }); - - testUnMinified('line: NaN value given', function() { - let err = assert.throws(function() { - p5._validateParameters('line', [1, 2, 4, NaN]); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'WRONG_TYPE', - 'ValidationError type is correct' - ); - }); - }); - - suite('validateParameters: trailing undefined arguments', function() { - // see https://github.com/processing/p5.js/issues/4571 for details - - test('color: missing params #1 #2', function() { - // even though color can also be called with one argument, if 3 args - // are passed, it is likely that them being undefined is an accident - assert.validationError(function() { - p5._validateParameters('color', [12, undefined, undefined]); - }); - }); - - test('random: missing params #0 #1 (both optional)', function() { - // even though the undefined params are optional, since they are passed - // to the function, it is more likely that the user wanted to call the - // function with 2 arguments. - assert.validationError(function() { - p5._validateParameters('random', [undefined, undefined]); - }); - }); - - // compuslory argument trailing undefined - testUnMinified('circle: missing compulsory param #2', function() { - // should throw an EMPTY_VAR error instead of a TOO_FEW_ARGUMENTS error - let err = assert.throws(function() { - p5._validateParameters('circle', [5, 5, undefined]); - }, p5.ValidationError); - assert.strictEqual( - err.type, - 'EMPTY_VAR', - 'ValidationError type is correct' - ); - }); - }); - - suite('validateParameters: argument tree', function() { - // should not throw a validation error for the same kind of wrong args - // more than once. This prevents repetetive validation logs for a - // function that is called in a loop or draw() - testUnMinified( - 'no repeated validation error for the same wrong arguments', - function() { - assert.validationError(function() { - myp5.color(); - }); - - assert.doesNotThrow( - function() { - myp5.color(); // Same type of wrong arguments as above - }, - p5.ValidationError, - 'got unwanted ValidationError' - ); - } - ); - - testUnMinified( - 'should throw validation errors for different wrong args', - function() { - assert.validationError(function() { - myp5.color(); - }); - - assert.validationError(function() { - myp5.color(false); - }); - } - ); - - testUnMinified('arg tree is built properly', function() { - let myArgTree = p5._getValidateParamsArgTree(); - myp5.random(); - myp5.random(50); - myp5.random([50, 70, 10]); - assert.strictEqual( - myArgTree.random.seen, - true, - 'tree built correctly for random()' - ); - assert.strictEqual( - myArgTree.random.number.seen, - true, - 'tree built correctly for random(min: Number)' - ); - assert.strictEqual( - myArgTree.random.as.number.number.number.seen, - true, - 'tree built correctly for random(choices: Array)' - ); - - let c = myp5.color(10); - myp5.alpha(c); - assert.strictEqual( - myArgTree.color.number.seen, - true, - 'tree built correctly for color(gray: Number)' - ); - assert.strictEqual( - myArgTree.alpha.Color.seen, - true, - 'tree built correctly for alpha(color: p5.Color)' - ); - }); - }); - - suite('validateParameters: multi-format', function() { - test('color(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - p5._validateParameters('color', [65]); - }, - Error, - 'got unwanted exception' - ); - }); - test('color(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - p5._validateParameters('color', [65, 0.5]); - }, - Error, - 'got unwanted exception' - ); - }); - test('color(): no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - p5._validateParameters('color', [255, 204, 0]); - }, - Error, - 'got unwanted exception' - ); - }); - test('color(): optional parameter, incorrect type', function() { - assert.validationError(function() { - p5._validateParameters('color', [0, 0, 0, 'A']); - }); - }); - test('color(): extra parameter', function() { - assert.validationError(function() { - p5._validateParameters('color', [[0, 0, 0], 0]); - }); - }); - test('color(): incorrect element type', function() { - assert.validationError(function() { - p5._validateParameters('color', [['A', 'B', 'C']]); - }); - }); - test('color(): incorrect parameter count', function() { - assert.validationError(function() { - p5._validateParameters('color', ['A', 'A', 0, 0, 0, 0, 0, 0]); - }); - }); - }); - - suite('validateParameters: union types', function() { - testUnMinified('set() with Number', function() { - assert.doesNotThrow(function() { - p5._validateParameters('set', [0, 0, 0]); - }); - }); - testUnMinified('set() with Number[]', function() { - assert.doesNotThrow(function() { - p5._validateParameters('set', [0, 0, [0, 0, 0, 255]]); - }); - }); - testUnMinified('set() with Object', function() { - assert.doesNotThrow(function() { - p5._validateParameters('set', [0, 0, myp5.color(0)]); - }); - }); - testUnMinified('set() with Boolean', function() { - assert.validationError(function() { - p5._validateParameters('set', [0, 0, true]); - }); - }); - }); - - suite('validateParameters: specific constants', function() { - testUnMinified('endShape() with no args', function() { - assert.doesNotThrow(function() { - p5._validateParameters('endShape', []); - }); - }); - testUnMinified('endShape() with CLOSE', function() { - assert.doesNotThrow(function() { - p5._validateParameters('endShape', [myp5.CLOSE]); - }); - }); - testUnMinified('endShape() with unrelated constant', function() { - assert.validationError(function() { - p5._validateParameters('endShape', [myp5.RADIANS]); - }); - }); - }); - - suite('helpForMisusedAtTopLevelCode', function() { - var help = function(msg) { - var log = []; - var logger = function(msg) { - log.push(msg); - }; - - p5.prototype._helpForMisusedAtTopLevelCode({ message: msg }, logger); - assert.equal(log.length, 1); - return log[0]; - }; - - test('help for constants is shown', function() { - assert.match( - help("'HALF_PI' is undefined"), - /Did you just try to use p5\.js's HALF_PI constant\?/ - ); - }); - - test('help for functions is shown', function() { - assert.match( - help("'smooth' is undefined"), - /Did you just try to use p5\.js's smooth\(\) function\?/ - ); - }); - - test('help for variables is shown', function() { - assert.match( - help("'focused' is undefined"), - /Did you just try to use p5\.js's focused variable\?/ - ); - }); - }); - - suite('misspelling detection', function() { - let log = []; - const logger = function(err) { - log.push(err); - }; - let help = function(err) { - p5._fesErrorMonitor(err); - assert.equal(log.length, 1); - return log[0]; - }; - - beforeAll(function() { - log = []; - p5._fesLogger = logger; - }); - - afterAll(function() { - p5._fesLogger = null; - }); - - testUnMinified('detects capitalization mistakes', function() { - const logMsg = help(new ReferenceError('MouseX is not defined')); - assert.match( - logMsg, - /It seems that you may have accidentally written "MouseX"/ - ); - assert.match(logMsg, /mouseX/); - }); - - testUnMinified('detects spelling mistakes', function() { - const logMsg = help(new ReferenceError('colour is not defined')); - assert.match( - logMsg, - /It seems that you may have accidentally written "colour"/ - ); - assert.match(logMsg, /color/); - }); - - testUnMinified( - 'can give more than one closest matches, if applicable', - function() { - const logMsg = help(new ReferenceError('strok is not defined')); - assert.match( - logMsg, - /It seems that you may have accidentally written "strok"/ - ); - assert.match(logMsg, /stroke/); - assert.match(logMsg, /STROKE/); - } - ); - - testUnMinified('detects spelling + captialization mistakes', function() { - const logMsg = help(new ReferenceError('RandomGossian is not defined')); - assert.match( - logMsg, - /It seems that you may have accidentally written "RandomGossian"/ - ); - assert.match(logMsg, /randomGaussian/); - }); - }); - - suite('caps mistakes for user-defined functions (instance mode)', function() { - let myp5; - let log; - const logger = function(err) { - log.push(err); - }; - beforeAll(function() { - log = []; - p5._fesLogger = logger; - return new Promise(resolve => { - new p5(function(p) { - // intentional capitalization mistake - p.preLoad = function() {}; - p.setup = function() { - myp5 = p; - p._fesLogger = logger; - resolve(); - }; - }); - }); - }); - - afterAll(function() { - p5._fesLogger = null; - myp5.remove(); - }); - - testUnMinified( - 'detects capitatilization mistake in instance mode', - function() { - assert.strictEqual(log.length, 1, 'One message is displayed'); - assert.match( - log[0], - /It seems that you may have accidentally written preLoad instead of preload/ - ); - } - ); - }); - - suite('caps mistakes for user-defined functions (global mode)', function() { - let log; - const logger = function(err) { - log.push(err); - }; - testUnMinified( - 'detects capitatilization mistake in global mode', - function() { - return new Promise(function(resolve) { - const iframe = createP5Iframe( - [ - P5_SCRIPT_TAG, - '' - ].join('\n') - ); - log = []; - iframe.elt.contentWindow.logger = logger; - iframe.elt.contentWindow.afterSetup = resolve; - }).then(function() { - //let log = iframe.elt.contentWindow.log; - assert.strictEqual(log.length, 1); - assert.match( - log[0], - /It seems that you may have accidentally written DRAW instead of draw/ - ); - }); - } - ); - }); -}); - -// seperating in another suite because these don't need to initialize myp5 -// for each test. Instead they initialize p5 in the iframe. These tests are -// also slower than the above ones. -suite('Global Error Handling', function() { - let log; - const WAIT_AND_RESOLVE = [ - '' - ].join('\n'); - const logger = function(err) { - log.push(err); - }; - beforeAll(function() { - log = []; - p5._fesLogger = logger; - }); - - afterAll(function() { - p5._fesLogger = null; - }); - - const prepSyntaxTest = (arr, resolve) => { - const iframe = createP5Iframe( - [P5_SCRIPT_TAG, WAIT_AND_RESOLVE, ''].join( - '\n' - ) - ); - log = []; - iframe.elt.contentWindow.logger = logger; - iframe.elt.contentWindow.afterSetup = resolve; - return iframe; - }; - - testUnMinified('identifies errors happenning internally', function() { - return new Promise(function(resolve) { - // quite an unusual way to test, but the error listener doesn't work - // under mocha. Also the stacktrace gets filled with mocha internal - // function calls. Using this method solves both of these problems. - // This method also allows us to test for SyntaxError without messing - // with flow of the other tests - prepSyntaxTest( - [ - 'function setup() {', - 'let cnv = createCanvas(400, 400);', - 'cnv.mouseClicked();', // Error in p5 library as no callback passed - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /inside the p5js library/); - assert.match(log[0], /mouseClicked/); - }); - }); - - testUnMinified( - 'identifies errors happenning internally in ES6 classes', - function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'let cnv = createCanvas(10, 10, WEBGL);', - 'let fbo = createFramebuffer();', - 'fbo.draw();', // Error in p5 library as no callback passed - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /inside the p5js library/); - assert.match(log[0], /draw/); - }); - } - ); - - testUnMinified('identifies errors in preload', function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function preload() {', - 'circle(5, 5, 2);', // error - '}', - 'function setup() {', - 'createCanvas(10, 10);', - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /"circle" being called from preload/); - }); - }); - - testUnMinified("identifies TypeError 'notDefined'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'let x = asdfg + 5;', // ReferenceError: asdfg is not defined - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /asdfg/); - assert.match(log[0], /not defined in the current scope/); - }); - }); - - testUnMinified( - "identifies SyntaxError 'Invalid or unexpected Token'", - function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'let x = “not a string”', // SyntaxError: Invalid or unexpected token - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Syntax Error/); - assert.match(log[0], /JavaScript doesn't recognize/); - }); - } - ); - - testUnMinified("identifies SyntaxError 'unexpectedToken'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'for (let i = 0; i < 5,; ++i) {}', // SyntaxError: Unexpected token - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Syntax Error/); - assert.match(log[0], /typo/); - }); - }); - - testUnMinified("identifies TypeError 'notFunc'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'let asdfg = 5', - 'asdfg()', // TypeError: asdfg is not a function - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /"asdfg" could not be called as a function/); - }); - }); - - testUnMinified("identifies TypeError 'notFuncObj'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'let asdfg = {}', - 'asdfg.abcd()', // TypeError: abcd is not a function - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /"abcd" could not be called as a function/); - assert.match(log[0], /"asdfg" has "abcd" in it/); - }); - }); - - testUnMinified("identifies ReferenceError 'cannotAccess'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'console.log(x)', // ReferenceError: Cannot access 'x' before initialization - 'let x = 100', - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Error/); - assert.match(log[0], /used before declaration/); - }); - }); - - testUnMinified("identifies SyntaxError 'badReturnOrYield'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - ['function setup() {', 'let x = 100;', '}', 'return;'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Syntax Error/); - assert.match(log[0], /lies outside of a function/); - }); - }); - - testUnMinified("identifies SyntaxError 'missingInitializer'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'const x;', //SyntaxError: Missing initializer in const declaration - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Syntax Error/); - assert.match(log[0], /but not initialized/); - }); - }); - - testUnMinified("identifies SyntaxError 'redeclaredVariable'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'let x=100;', - 'let x=99;', //SyntaxError: Identifier 'x' has already been declared - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Syntax Error/); - assert.match(log[0], /JavaScript doesn't allow/); - }); - }); - - testUnMinified("identifies TypeError 'constAssign'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'const x = 100;', - 'x = 10;', //TypeError: Assignment to constant variable - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Error/); - assert.match(log[0], /const variable is being/); - }); - }); - - testUnMinified("identifies TypeError 'readFromNull'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'const x = null;', - 'console.log(x.prop);', //TypeError: Cannot read property 'prop' of null - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Error/); - assert.match(log[0], /property of null/); - }); - }); - - testUnMinified("identifies TypeError 'readFromUndefined'", function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function setup() {', - 'const x = undefined;', - 'console.log(x.prop);', //TypeError: Cannot read property 'prop' of undefined - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /Error/); - assert.match(log[0], /property of undefined/); - }); - }); - - testUnMinified('builds friendlyStack', function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function myfun(){', - 'asdfg()', // ReferenceError - '}', - 'function setup() {', - 'myfun()', - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 2); - let temp = log[1].split('\n'); - temp = temp.filter(e => e.trim().length > 0); - assert.strictEqual(temp.length, 4); - assert.match(log[0], /"asdfg" is not defined/); - assert.match(temp[1], /Error at/); - assert.match(temp[1], /myfun/); - assert.match(temp[3], /Called from/); - assert.match(temp[3], /setup/); - }); - }); - - testUnMinified('indentifies internal error - instance mode', function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function sketch(p) {', - ' p.setup = function() {', - ' p.stroke();', // error - ' }', - '}', - 'new p5(sketch);' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /stroke/); - assert.match(log[0], /inside the p5js library/); - }); - }); - - testUnMinified('indentifies error in preload - instance mode', function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function sketch(p) {', - ' p.preload = function() {', - ' p.circle(2, 2, 2);', // error - ' }', - ' p.setup = function() {', - ' p.createCanvas(5, 5);', - ' }', - '}', - 'new p5(sketch);' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /"circle" being called from preload/); - }); - }); - - testUnMinified('indentifies error in user code - instance mode', function() { - return new Promise(function(resolve) { - prepSyntaxTest( - [ - 'function sketch(p) {', - ' p.setup = function() {', - ' myfun();', // ReferenceError: myfun is not defined - ' }', - '}', - 'new p5(sketch);' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /myfun/); - assert.match(log[0], /is not defined in the current scope/); - }); - }); -}); - -suite('Tests for p5.js sketch_reader', function() { - const WAIT_AND_RESOLVE = [ - '' - ].join('\n'); - - let log; - const logger = function(err) { - log.push(err); - }; - - const prepSketchReaderTest = (arr, resolve) => { - const iframe = createP5Iframe( - [P5_SCRIPT_TAG, WAIT_AND_RESOLVE, ''].join( - '\n' - ) - ); - log = []; - iframe.elt.contentWindow.logger = logger; - iframe.elt.contentWindow.afterSetup = resolve; - return iframe; - }; - - testUnMinified( - 'detects reassignment of p5.js constant inside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['function setup() {', 'let PI = 100', '}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved variable/); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js function inside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['function setup() {', 'let text = 100', '}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved function/); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js constant outside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest(['let PI = 100', 'function setup() {}'], resolve); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved variable/); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js function (text) outside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['let text = 100', 'function setup() {}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved function/); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js function (textSize from Typography) outside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['let textSize = 100', 'function setup() {}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved function/); - }); - } - ); - - testUnMinified( - 'does not detect reassignment of p5.js function (size from TypedDict or Dom) outside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['let size = 100', 'function setup() {}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 0); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js function (point from shape) outside setup', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['let point = 100', 'function setup() {}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved function/); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js functions in declaration lists', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['function setup() {', 'let x = 2, text = 2;', '}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved function/); - }); - } - ); - - testUnMinified( - 'detects reassignment of p5.js functions in declaration lists after function calls', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - [ - 'function setup() {', - 'let x = constrain(frameCount, 0, 1000), text = 2;', - '}' - ], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 1); - assert.match(log[0], /you have used a p5.js reserved function/); - }); - } - ); - - testUnMinified( - 'ignores p5.js functions used in the right hand side of assignment expressions', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - // This will still log an error, as `text` isn't being used correctly - // here, but the important part is that it doesn't say that we're - // trying to reassign a reserved function. - ['function draw() {', 'let x = constrain(100, 0, text);', '}'], - resolve - ); - }).then(function() { - assert.ok( - !log.some(line => - line.match(/you have used a p5.js reserved function/) - ) - ); - }); - } - ); - - testUnMinified( - 'ignores p5.js function names used as function arguments', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - ['function draw() {', 'let myLog = (text) => print(text);', '}'], - resolve - ); - }).then(function() { - assert.strictEqual(log.length, 0); - }); - } - ); - - testUnMinified( - 'fails gracefully on inputs too complicated to parse', - function() { - return new Promise(function(resolve) { - prepSketchReaderTest( - // This technically is redefining text, but it should stop parsing - // after the double nested brackets rather than try and possibly - // give a false positive error. This particular assignment will get - // caught at runtime regardless by - // `_createFriendlyGlobalFunctionBinder`. - [ - 'function draw() {', - 'let x = constrain(millis(), 0, text = 100)', - '}' - ], - resolve - ); - }).then(function() { - console.log(log); - assert.strictEqual(log.length, 0); - }); - } - ); -}); diff --git a/test/unit/core/main.js b/test/unit/core/main.js index 0c0152389e..16decc2ef2 100644 --- a/test/unit/core/main.js +++ b/test/unit/core/main.js @@ -3,127 +3,6 @@ import { createP5Iframe, P5_SCRIPT_TAG, P5_SCRIPT_URL } from '../../js/p5_helper import { vi } from 'vitest'; suite('Core', function () { - suite('p5.prototype.registerMethod', function () { - afterAll(function() { - p5.prototype._registeredMethods.init = []; - p5.prototype._registeredMethods.beforePreload = []; - p5.prototype._registeredMethods.preload = []; - p5.prototype._registeredMethods.afterPreload = []; - p5.prototype._registeredMethods.beforeSetup = []; - p5.prototype._registeredMethods.setup = []; - p5.prototype._registeredMethods.afterSetup = []; - p5.prototype._registeredMethods.pre = []; - p5.prototype._registeredMethods.draw = []; - p5.prototype._registeredMethods.post = []; - }); - test('should register and call "init" methods', function () { - var myp5, myInitCalled; - p5.prototype.registerMethod('init', function myInit() { - assert( - !myInitCalled, - 'myInit should only be called once during test suite' - ); - myInitCalled = true; - - this.myInitCalled = true; - }); - - myp5 = new p5(function (sketch) { - assert(sketch.hasOwnProperty('myInitCalled')); - assert(sketch.myInitCalled); - - sketch.sketchFunctionCalled = true; - }); - - assert(myp5.sketchFunctionCalled); - }); - test('should register and call before and after "preload" hooks', function () { - return new Promise(resolve => { - let beforePreloadCalled = false; - let preloadCalled = false; - let afterPreloadCalled = false; - - p5.prototype.registerMethod('beforePreload', () => { - beforePreloadCalled = true; - }); - - p5.prototype.registerMethod('preload', () => { - assert.equal(beforePreloadCalled, true); - preloadCalled = true; - }); - - p5.prototype.registerMethod('afterPreload', () => { - if (beforePreloadCalled && preloadCalled) afterPreloadCalled = true; - }); - - myp5 = new p5(function (sketch) { - sketch.preload = () => {}; - sketch.setup = () => { - assert.equal(afterPreloadCalled, true); - resolve(); - }; - }); - }); - }); - test('should register and call before and after "setup" hooks', function () { - return new Promise(resolve => { - let beforeSetupCalled = false; - let setupCalled = false; - let afterSetupCalled = false; - - p5.prototype.registerMethod('beforeSetup', () => { - beforeSetupCalled = true; - }); - - p5.prototype.registerMethod('setup', () => { - assert.equal(beforeSetupCalled, true); - setupCalled = true; - }); - - p5.prototype.registerMethod('afterSetup', () => { - if (beforeSetupCalled && setupCalled) afterSetupCalled = true; - }); - - myp5 = new p5(function (sketch) { - sketch.setup = () => {}; - sketch.draw = () => { - assert.equal(afterSetupCalled, true); - resolve(); - }; - }); - }); - }); - test('should register and call pre and post "draw" hooks', function () { - return new Promise(resolve => { - let preDrawCalled = false; - let drawCalled = false; - let postDrawCalled = false; - - p5.prototype.registerMethod('pre', () => { - preDrawCalled = true; - }); - - p5.prototype.registerMethod('draw', () => { - assert.equal(preDrawCalled, true); - drawCalled = true; - }); - - p5.prototype.registerMethod('post', () => { - if (preDrawCalled && drawCalled) postDrawCalled = true; - }); - - myp5 = new p5(function (sketch) { - sketch.draw = () => { - if (sketch.frameCount === 2) { - assert.equal(postDrawCalled, true); - resolve(); - } - }; - }); - }); - }); - }); - suite('new p5() / global mode', function () { var iframe; @@ -292,50 +171,11 @@ suite('Core', function () { assert.isUndefined(logMsg); }); - // This is a regression test for - // https://github.com/processing/p5.js/issues/1350. - test('should not warn about overwriting preload methods', function () { - globalObject.loadJSON = function () { - throw new Error(); - }; - bind('loadJSON', noop); - assert.equal(globalObject.loadJSON, noop); - assert.isUndefined(logMsg); - }); - test('should not warn about overwriting non-functions', function () { bind('mouseX', 5); globalObject.mouseX = 50; assert.equal(globalObject.mouseX, 50); assert.isUndefined(logMsg); }); - - test('instance preload is independent of window', function () { - // callback for p5 instance mode. - // It does not define a preload. - // This tests that we don't call the global preload accidentally. - function cb(s) { - s.setup = function () { - window.afterSetup(); - }; - } - return new Promise(function (resolve) { - iframe = createP5Iframe( - [ - P5_SCRIPT_TAG, - '' - ].join('\n') - ); - iframe.elt.contentWindow.afterSetup = resolve; - }).then(function () { - var win = iframe.elt.contentWindow; - assert.strictEqual(win.globalPreloads, 1); - }); - }); }); }); diff --git a/test/unit/core/preload.js b/test/unit/core/preload.js deleted file mode 100644 index ef8859d0c9..0000000000 --- a/test/unit/core/preload.js +++ /dev/null @@ -1,288 +0,0 @@ -import p5 from '../../../src/app.js'; -import { promisedSketch } from '../../js/p5_helpers'; - -suite('preloads', () => { - let preloadCache = null; - beforeAll(() => { - preloadCache = p5.prototype._promisePreloads; - p5.prototype._promisePreloads = [...preloadCache]; - }); - - afterAll(() => { - p5.prototype._promisePreloads = preloadCache; - }); - - suite('From external sources', () => { - test('Extension preload causes setup to wait', () => { - let resolved = false; - const target = { - async testPreloadFunction() { - await new Promise(res => setTimeout(res, 10)); - resolved = true; - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction' - }); - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target.testPreloadFunction(); - }; - - sketch.setup = () => { - if (resolved) { - resolve(); - } else { - reject(new Error('Sketch enetered setup too early.')); - } - }; - }); - }); - - test('Extension preload error causes setup to not execute', () => { - const target = { - async testPreloadFunction() { - throw new Error('Testing Error'); - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction' - }); - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target.testPreloadFunction(); - setTimeout(resolve, 10); - }; - - sketch.setup = () => { - reject('Sketch should not enter setup'); - }; - }); - }); - - suite('addCallbacks', () => { - test('Extension is passed all arguments when not using addCallbacks', () => { - const target = { - async testPreloadFunction(...args) { - assert.lengthOf(args, 3); - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - addCallbacks: false - }); - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target - .testPreloadFunction(() => {}, () => {}, () => {}) - .catch(reject); - }; - - sketch.setup = resolve; - }); - }); - - test('Extension gets stripped arguments when using addCallbacks', () => { - const target = { - async testPreloadFunction(...args) { - assert.lengthOf(args, 1); - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - addCallbacks: true - }); - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target - .testPreloadFunction(() => {}, () => {}, () => {}) - .catch(reject); - }; - - sketch.setup = resolve; - }); - }); - - test('Extension with addCallbacks supports success callback', () => { - const target = { - async testPreloadFunction(...args) { - assert.lengthOf(args, 1); - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - addCallbacks: true - }); - - let success = 0; - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target - .testPreloadFunction(0, () => { - success++; - }) - .catch(reject); - target - .testPreloadFunction( - () => {}, - () => { - success++; - }, - () => { - reject(new Error('Failure callback executed')); - } - ) - .catch(reject); - }; - - sketch.setup = () => { - if (success !== 2) { - reject( - new Error(`Not all success callbacks were run: ${success}/2`) - ); - } - resolve(); - }; - }); - }); - }); - - suite('legacyPreload', () => { - test('Extension legacy preload causes setup to wait', () => { - let resolved = false; - const target = { - async testPreloadFunction() { - await new Promise(res => setTimeout(res, 10)); - resolved = true; - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - legacyPreloadSetup: { - method: 'testPreloadLegacy' - } - }); - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target.testPreloadLegacy(); - }; - - sketch.setup = () => { - if (resolved) { - resolve(); - } else { - reject(new Error('Sketch enetered setup too early.')); - } - }; - }); - }); - - test('Extension legacy preload error causes setup to not execute', () => { - const target = { - async testPreloadFunction() { - throw new Error('Testing Error'); - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - legacyPreloadSetup: { - method: 'testPreloadLegacy' - } - }); - - return promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - target.testPreloadLegacy(); - setTimeout(resolve, 10); - }; - - sketch.setup = () => { - reject('Sketch should not enter setup'); - }; - }); - }); - - test('Extension legacy preload returns objects correctly', async () => { - let testItem = { - test: true, - otherTest: [] - }; - const target = { - async testPreloadFunction() { - return testItem; - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - legacyPreloadSetup: { - method: 'testPreloadLegacy' - } - }); - - let testResult; - - await promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - testResult = target.testPreloadLegacy(); - }; - - sketch.setup = resolve(); - }); - - assert.deepEqual(testResult, testItem); - }); - - test('Extension legacy preload returns arrays correctly', async () => { - let testItem = [true, [], {}]; - const target = { - async testPreloadFunction() { - return testItem; - } - }; - - p5.prototype._promisePreloads.push({ - target, - method: 'testPreloadFunction', - legacyPreloadSetup: { - method: 'testPreloadLegacy', - createBaseObject: () => [] - } - }); - - let testResult; - - await promisedSketch((sketch, resolve, reject) => { - sketch.preload = () => { - testResult = target.testPreloadLegacy(); - }; - - sketch.setup = resolve(); - }); - - assert.deepEqual(testResult, testItem); - }); - }); - }); -}); diff --git a/test/unit/core/vertex.js b/test/unit/core/vertex.js index 4b3331bcb9..eed414a2e1 100644 --- a/test/unit/core/vertex.js +++ b/test/unit/core/vertex.js @@ -24,15 +24,6 @@ suite('Vertex', function() { assert.ok(myp5.beginShape); assert.typeOf(myp5.beginShape, 'function'); }); - test('no friendly-err-msg. missing param #0', function() { - assert.doesNotThrow( - function() { - myp5.beginShape(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.quadraticVertex', function() { @@ -69,15 +60,6 @@ suite('Vertex', function() { assert.ok(myp5.endShape); assert.typeOf(myp5.endShape, 'function'); }); - test('no friendly-err-msg. missing param #0', function() { - assert.doesNotThrow( - function() { - myp5.endShape(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.vertex', function() { diff --git a/test/unit/image/downloading.js b/test/unit/image/downloading.js index 0727380968..9b333cce93 100644 --- a/test/unit/image/downloading.js +++ b/test/unit/image/downloading.js @@ -80,96 +80,6 @@ suite('p5.prototype.saveCanvas', function() { assert.typeOf(myp5.saveCanvas, 'function'); }); - // Why use testWithDownload for 'no friendly-err' tests here? - // saveCanvas uses htmlcanvas.toBlob which uses a callback - // mechanism and the download is triggered in its callback. - // It may happen that the test get out of sync and the only way - // to know if the callback has been called is if the blob has - // been made available to us - testWithDownload( - 'no friendly-err-msg I', - async function(blc) { - assert.doesNotThrow( - function() { - myp5.saveCanvas(); - }, - Error, - 'got unwanted exception' - ); - await waitForBlob(blc); - }, - true - ); - testWithDownload( - 'no friendly-err-msg II', - async function(blc) { - assert.doesNotThrow( - function() { - myp5.saveCanvas('filename'); - }, - Error, - 'got unwanted exception' - ); - await waitForBlob(blc); - }, - true - ); - testWithDownload( - 'no friendly-err-msg III', - async function(blc) { - assert.doesNotThrow( - function() { - myp5.saveCanvas('filename', 'png'); - }, - Error, - 'got unwanted exception' - ); - await waitForBlob(blc); - }, - true - ); - testWithDownload( - 'no friendly-err-msg IV', - async function(blc) { - assert.doesNotThrow( - function() { - myp5.saveCanvas(myCanvas, 'filename'); - }, - Error, - 'got unwanted exception' - ); - await waitForBlob(blc); - }, - true - ); - testWithDownload( - 'no friendly-err-msg V', - async function(blc) { - assert.doesNotThrow( - function() { - myp5.saveCanvas(myCanvas, 'filename', 'png'); - }, - Error, - 'got unwanted exception' - ); - }, - true - ); - testWithDownload( - 'no friendly-err-msg VI', - async function(blc) { - assert.doesNotThrow( - function() { - myp5.saveCanvas(myCanvas, 'filename', 'png'); - }, - Error, - 'got unwanted exception' - ); - await waitForBlob(blc); - }, - true - ); - testWithDownload( 'should download a png file', async function(blobContainer) { @@ -230,27 +140,6 @@ suite('p5.prototype.saveFrames', function() { assert.typeOf(myp5.saveFrames, 'function'); }); - test('no friendly-err-msg I', function() { - assert.doesNotThrow( - function() { - myp5.saveFrames('out', 'png', 0.1, 25); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg II', function(done) { - assert.doesNotThrow( - function() { - myp5.saveFrames('out', 'png', 0.1, 25, () => { - done(); - }); - }, - Error, - 'got unwanted exception' - ); - }); - test('should get frames in callback (png)', function(done) { myp5.saveFrames('aaa', 'png', 0.5, 25, function cb1(arr) { assert.typeOf(arr, 'array', 'we got an array'); diff --git a/test/unit/image/pixels.js b/test/unit/image/pixels.js index 55f3c01a1a..d8e1332f8d 100644 --- a/test/unit/image/pixels.js +++ b/test/unit/image/pixels.js @@ -152,31 +152,6 @@ suite('pixels', function() { } } }); - - test('no friendly-err-msg. missing param #0', function() { - assert.doesNotThrow( - function() { - let img = myp5.createImage(50, 50); - img.blend(0, 0, 10, 10, 10, 0, 10, 10, myp5.OVERLAY); - }, - Error, - 'got unwanted exception' - ); - }); - - test('missing parameter at #3 ', function() { - assert.throw(function() { - let img = myp5.createImage(50, 50); - img.blend(0, 0, 10, 10, 0, 10, 10, myp5.OVERLAY); - }); - }); - - test('missing parameter at #8 ', function() { - assert.throw(function() { - let img = myp5.createImage(50, 50); - img.blend(0, 0, 10, 10, 10, 0, 10, 10); - }); - }); }); suite('p5.Image.copy', function() { @@ -206,23 +181,5 @@ suite('pixels', function() { } } }); - - test('no friendly-err-msg. missing param #0', function() { - assert.doesNotThrow( - function() { - let img = myp5.createImage(50, 50); - img.copy(0, 0, 10, 10, 10, 0, 10, 10); - }, - Error, - 'got unwanted exception' - ); - }); - - test('missing parameter at #3 ', function() { - assert.throw(function() { - let img = myp5.createImage(50, 50); - img.copy(0, 0, 10, 10, 0, 10, 10); - }); - }); }); }); diff --git a/test/unit/io/files.js b/test/unit/io/files.js index 1fdee84eb9..969d328c0e 100644 --- a/test/unit/io/files.js +++ b/test/unit/io/files.js @@ -106,38 +106,6 @@ suite('Files', function() { assert.typeOf(myp5.saveStrings, 'function'); }); - test('no friendly-err-msg I', function() { - assert.doesNotThrow( - function() { - let strings = ['some', 'words']; - myp5.saveStrings(strings, 'myfile'); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg II', function() { - assert.doesNotThrow( - function() { - let strings = ['some', 'words']; - myp5.saveStrings(strings, 'myfile', 'txt'); - }, - Error, - 'got unwanted exception' - ); - }); - - test('no friendly-err-msg III', function() { - assert.doesNotThrow( - function() { - let strings = ['some', 'words']; - myp5.saveStrings(strings, 'myfile', 'txt', true); - }, - Error, - 'got unwanted exception' - ); - }); - testWithDownload( 'should download a file with expected contents', async function(blobContainer) { @@ -175,38 +143,6 @@ suite('Files', function() { assert.typeOf(myp5.saveJSON, 'function'); }); - test('no friendly-err-msg I', function() { - assert.doesNotThrow( - function() { - let myObj = { hi: 'hello' }; - myp5.saveJSON(myObj, 'myfile'); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg II', function() { - assert.doesNotThrow( - function() { - let myObj = [{ hi: 'hello' }]; - myp5.saveJSON(myObj, 'myfile'); - }, - Error, - 'got unwanted exception' - ); - }); - - test('no friendly-err-msg III', function() { - assert.doesNotThrow( - function() { - let myObj = { hi: 'hello' }; - myp5.saveJSON(myObj, 'myfile', true); - }, - Error, - 'got unwanted exception' - ); - }); - testWithDownload( 'should download a file with expected contents', async function(blobContainer) { diff --git a/test/unit/io/saveTable.js b/test/unit/io/saveTable.js index 69503c03c5..9b7f2a1b0e 100644 --- a/test/unit/io/saveTable.js +++ b/test/unit/io/saveTable.js @@ -32,26 +32,6 @@ suite('saveTable', function() { assert.typeOf(myp5.saveTable, 'function'); }); - test('no friendly-err-msg I', function() { - assert.doesNotThrow( - function() { - myp5.saveTable(myTable, 'myfile'); - }, - Error, - 'got unwanted exception' - ); - }); - - test('no friendly-err-msg II', function() { - assert.doesNotThrow( - function() { - myp5.saveTable(myTable, 'myfile', 'csv'); - }, - Error, - 'got unwanted exception' - ); - }); - testWithDownload( 'should download a file with expected contents', async function(blobContainer) { diff --git a/test/unit/webgl/3d_primitives.js b/test/unit/webgl/3d_primitives.js index 54eb893461..19e7926af2 100644 --- a/test/unit/webgl/3d_primitives.js +++ b/test/unit/webgl/3d_primitives.js @@ -20,24 +20,6 @@ suite('3D Primitives', function() { assert.ok(myp5.plane); assert.typeOf(myp5.plane, 'function'); }); - test('no friendly-err-msg. missing height param #1.', function() { - assert.doesNotThrow( - function() { - myp5.plane(20); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.plane(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.box', function() { @@ -45,33 +27,6 @@ suite('3D Primitives', function() { assert.ok(myp5.box); assert.typeOf(myp5.box, 'function'); }); - test('no friendly-err-msg. missing height, depth; param #1, #2.', function() { - assert.doesNotThrow( - function() { - myp5.box(20, 20); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. missing depth param #2.', function() { - assert.doesNotThrow( - function() { - myp5.box(20, 20); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.box(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.sphere', function() { @@ -79,15 +34,6 @@ suite('3D Primitives', function() { assert.ok(myp5.sphere); assert.typeOf(myp5.sphere, 'function'); }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.sphere(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.cylinder', function() { @@ -95,24 +41,6 @@ suite('3D Primitives', function() { assert.ok(myp5.cylinder); assert.typeOf(myp5.cylinder, 'function'); }); - test('no friendly-err-msg. missing height; param #1', function() { - assert.doesNotThrow( - function() { - myp5.cylinder(20); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.cylinder(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.cone', function() { @@ -120,24 +48,6 @@ suite('3D Primitives', function() { assert.ok(myp5.cone); assert.typeOf(myp5.cone, 'function'); }); - test('no friendly-err-msg. missing height; param #1', function() { - assert.doesNotThrow( - function() { - myp5.cone(20); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.cone(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.ellipsoid', function() { @@ -145,24 +55,6 @@ suite('3D Primitives', function() { assert.ok(myp5.ellipsoid); assert.typeOf(myp5.ellipsoid, 'function'); }); - test('no friendly-err-msg. missing param #1 #2', function() { - assert.doesNotThrow( - function() { - myp5.ellipsoid(10); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.ellipsoid(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.torus', function() { @@ -170,24 +62,6 @@ suite('3D Primitives', function() { assert.ok(myp5.torus); assert.typeOf(myp5.torus, 'function'); }); - test('no friendly-err-msg. missing param #1', function() { - assert.doesNotThrow( - function() { - myp5.torus(30); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. no parameters', function() { - assert.doesNotThrow( - function() { - myp5.torus(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.RendererGL.prototype.ellipse', function() { @@ -195,24 +69,6 @@ suite('3D Primitives', function() { assert.ok(myp5._renderer.ellipse); assert.typeOf(myp5._renderer.ellipse, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.ellipse(0, 0, 100); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. detail parameter > 50', function() { - assert.doesNotThrow( - function() { - myp5.ellipse(50, 50, 120, 30, 51); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.RendererGL.prototype.arc', function() { @@ -220,32 +76,5 @@ suite('3D Primitives', function() { assert.ok(myp5._renderer.arc); assert.typeOf(myp5._renderer.arc, 'function'); }); - test('no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.arc(1, 1, 10.5, 10, 0, Math.PI, 'pie'); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. detail parameter > 50', function() { - assert.doesNotThrow( - function() { - myp5.arc(1, 1, 100, 100, 0, Math.PI / 2, 'chord', 51); - }, - Error, - 'got unwanted exception' - ); - }); - test('no friendly-err-msg. default mode', function() { - assert.doesNotThrow( - function() { - myp5.arc(1, 1, 100, 100, Math.PI / 4, Math.PI / 3); - }, - Error, - 'got unwanted exception' - ); - }); }); }); diff --git a/test/unit/webgl/interaction.js b/test/unit/webgl/interaction.js index c3aaf3eaea..f03433d841 100644 --- a/test/unit/webgl/interaction.js +++ b/test/unit/webgl/interaction.js @@ -20,15 +20,6 @@ suite('Interaction', function() { assert.ok(myp5.orbitControl); assert.typeOf(myp5.orbitControl, 'function'); }); - test('missing params. no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.orbitControl(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.debugMode', function() { @@ -36,15 +27,6 @@ suite('Interaction', function() { assert.ok(myp5.debugMode); assert.typeOf(myp5.debugMode, 'function'); }); - test('missing params. no friendly-err-msg', function() { - assert.doesNotThrow( - function() { - myp5.debugMode(); - }, - Error, - 'got unwanted exception' - ); - }); }); suite('p5.prototype.noDebugMode', function() { From dc1d9367a009c9668aab2798e8d3f645cb5bf0dc Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 22:53:36 +0100 Subject: [PATCH 13/27] Comment out image loading using preload test --- test/unit/image/loading.js | 308 ++++++++++++++++++------------------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/test/unit/image/loading.js b/test/unit/image/loading.js index 6aab449ce0..69dcd86615 100644 --- a/test/unit/image/loading.js +++ b/test/unit/image/loading.js @@ -198,96 +198,96 @@ suite('loading images', function() { */ // Test loading image in preload() with success callback - test('Test in preload() with success callback'); - test('Test in setup() after preload()'); + // test('Test in preload() with success callback'); + // test('Test in setup() after preload()'); // These tests don't work correctly (You can't use suite and test like that) // they simply get added at the root level. - var mySketch = function(this_p5) { - var myImage; - this_p5.preload = function() { - suite('Test in preload() with success callback', function() { - test('Load asynchronously and use success callback', function(done) { - myImage = this_p5.loadImage('unit/assets/cat.jpg', function() { - assert.ok(myImage); - done(); - }); - }); - }); - }; - - this_p5.setup = function() { - suite('setup() after preload() with success callback', function() { - test('should be loaded if preload() finished', function(done) { - assert.isTrue(myImage instanceof p5.Image); - assert.isTrue(myImage.width > 0 && myImage.height > 0); - done(); - }); - }); - }; - }; - new p5(mySketch, null, false); - - // Test loading image in preload() without success callback - mySketch = function(this_p5) { - var myImage; - this_p5.preload = function() { - myImage = this_p5.loadImage('unit/assets/cat.jpg'); - }; - - this_p5.setup = function() { - suite('setup() after preload() without success callback', function() { - test('should be loaded now preload() finished', function(done) { - assert.isTrue(myImage instanceof p5.Image); - assert.isTrue(myImage.width > 0 && myImage.height > 0); - done(); - }); - }); - }; - }; - new p5(mySketch, null, false); - - // Test loading image failure in preload() without failure callback - mySketch = function(this_p5) { - this_p5.preload = function() { - this_p5.loadImage('', function() { - throw new Error('Should not be called'); - }); - }; - - this_p5.setup = function() { - throw new Error('Should not be called'); - }; - }; - new p5(mySketch, null, false); - - // Test loading image failure in preload() with failure callback - mySketch = function(this_p5) { - var myImage; - this_p5.preload = function() { - suite('Test loading image failure in preload() with failure callback', function() { - test('Load fail and use failure callback', function(done) { - myImage = this_p5.loadImage('', function() { - assert.fail(); - done(); - }, function() { - assert.ok(myImage); - done(); - }); - }); - }); - }; - - this_p5.setup = function() { - suite('setup() after preload() failure with failure callback', function() { - test('should be loaded now preload() finished', function(done) { - assert.isTrue(myImage instanceof p5.Image); - assert.isTrue(myImage.width === 1 && myImage.height === 1); - done(); - }); - }); - }; - }; - new p5(mySketch, null, false); + // var mySketch = function(this_p5) { + // var myImage; + // this_p5.preload = function() { + // suite('Test in preload() with success callback', function() { + // test('Load asynchronously and use success callback', function(done) { + // myImage = this_p5.loadImage('unit/assets/cat.jpg', function() { + // assert.ok(myImage); + // done(); + // }); + // }); + // }); + // }; + + // this_p5.setup = function() { + // suite('setup() after preload() with success callback', function() { + // test('should be loaded if preload() finished', function(done) { + // assert.isTrue(myImage instanceof p5.Image); + // assert.isTrue(myImage.width > 0 && myImage.height > 0); + // done(); + // }); + // }); + // }; + // }; + // new p5(mySketch, null, false); + + // // Test loading image in preload() without success callback + // mySketch = function(this_p5) { + // var myImage; + // this_p5.preload = function() { + // myImage = this_p5.loadImage('unit/assets/cat.jpg'); + // }; + + // this_p5.setup = function() { + // suite('setup() after preload() without success callback', function() { + // test('should be loaded now preload() finished', function(done) { + // assert.isTrue(myImage instanceof p5.Image); + // assert.isTrue(myImage.width > 0 && myImage.height > 0); + // done(); + // }); + // }); + // }; + // }; + // new p5(mySketch, null, false); + + // // Test loading image failure in preload() without failure callback + // mySketch = function(this_p5) { + // this_p5.preload = function() { + // this_p5.loadImage('', function() { + // throw new Error('Should not be called'); + // }); + // }; + + // this_p5.setup = function() { + // throw new Error('Should not be called'); + // }; + // }; + // new p5(mySketch, null, false); + + // // Test loading image failure in preload() with failure callback + // mySketch = function(this_p5) { + // var myImage; + // this_p5.preload = function() { + // suite('Test loading image failure in preload() with failure callback', function() { + // test('Load fail and use failure callback', function(done) { + // myImage = this_p5.loadImage('', function() { + // assert.fail(); + // done(); + // }, function() { + // assert.ok(myImage); + // done(); + // }); + // }); + // }); + // }; + + // this_p5.setup = function() { + // suite('setup() after preload() failure with failure callback', function() { + // test('should be loaded now preload() finished', function(done) { + // assert.isTrue(myImage instanceof p5.Image); + // assert.isTrue(myImage.width === 1 && myImage.height === 1); + // done(); + // }); + // }); + // }; + // }; + // new p5(mySketch, null, false); }); suite('loading animated gif images', function() { @@ -330,72 +330,72 @@ suite('loading animated gif images', function() { }); }); - test('should construct gifProperties correctly after preload', function() { - var mySketch = function(this_p5) { - var gifImage; - this_p5.preload = function() { - suite('Test in preload() with success callback', function() { - test('Load asynchronously and use success callback', function(done) { - gifImage = this_p5.loadImage(imagePath, function() { - assert.ok(gifImage); - done(); - }); - }); - }); - }; - - this_p5.setup = function() { - suite('setup() after preload() with success callback', function() { - test('should be loaded if preload() finished', function(done) { - assert.isTrue(gifImage instanceof p5.Image); - assert.isTrue(gifImage.width > 0 && gifImage.height > 0); - done(); - }); - test('gifProperties should be correct after preload', function done() { - assert.isTrue(gifImage instanceof p5.Image); - var nyanCatGifProperties = { - displayIndex: 0, - loopCount: 0, - loopLimit: null, - numFrames: 6, - playing: true, - timeDisplayed: 0 - }; - assert.isTrue(gifImage.gifProperties !== null); - for (var prop in nyanCatGifProperties) { - assert.deepEqual( - gifImage.gifProperties[prop], - nyanCatGifProperties[prop] - ); - } - assert.deepEqual( - gifImage.gifProperties.numFrames, - gifImage.gifProperties.frames.length - ); - for (var i = 0; i < gifImage.gifProperties.numFrames; i++) { - assert.isTrue( - gifImage.gifProperties.frames[i].image instanceof ImageData - ); - assert.isTrue(gifImage.gifProperties.frames[i].delay === 100); - } - }); - test('should be able to modify gifProperties state', function() { - assert.isTrue(gifImage.gifProperties.timeDisplayed === 0); - gifImage.pause(); - assert.isTrue(gifImage.gifProperties.playing === false); - gifImage.play(); - assert.isTrue(gifImage.gifProperties.playing === true); - gifImage.setFrame(2); - assert.isTrue(gifImage.gifProperties.displayIndex === 2); - gifImage.reset(); - assert.isTrue(gifImage.gifProperties.displayIndex === 0); - assert.isTrue(gifImage.gifProperties.timeDisplayed === 0); - }); - }); - }; - }; - new p5(mySketch, null, false); - }); + // test('should construct gifProperties correctly after preload', function() { + // var mySketch = function(this_p5) { + // var gifImage; + // this_p5.preload = function() { + // suite('Test in preload() with success callback', function() { + // test('Load asynchronously and use success callback', function(done) { + // gifImage = this_p5.loadImage(imagePath, function() { + // assert.ok(gifImage); + // done(); + // }); + // }); + // }); + // }; + + // this_p5.setup = function() { + // suite('setup() after preload() with success callback', function() { + // test('should be loaded if preload() finished', function(done) { + // assert.isTrue(gifImage instanceof p5.Image); + // assert.isTrue(gifImage.width > 0 && gifImage.height > 0); + // done(); + // }); + // test('gifProperties should be correct after preload', function done() { + // assert.isTrue(gifImage instanceof p5.Image); + // var nyanCatGifProperties = { + // displayIndex: 0, + // loopCount: 0, + // loopLimit: null, + // numFrames: 6, + // playing: true, + // timeDisplayed: 0 + // }; + // assert.isTrue(gifImage.gifProperties !== null); + // for (var prop in nyanCatGifProperties) { + // assert.deepEqual( + // gifImage.gifProperties[prop], + // nyanCatGifProperties[prop] + // ); + // } + // assert.deepEqual( + // gifImage.gifProperties.numFrames, + // gifImage.gifProperties.frames.length + // ); + // for (var i = 0; i < gifImage.gifProperties.numFrames; i++) { + // assert.isTrue( + // gifImage.gifProperties.frames[i].image instanceof ImageData + // ); + // assert.isTrue(gifImage.gifProperties.frames[i].delay === 100); + // } + // }); + // test('should be able to modify gifProperties state', function() { + // assert.isTrue(gifImage.gifProperties.timeDisplayed === 0); + // gifImage.pause(); + // assert.isTrue(gifImage.gifProperties.playing === false); + // gifImage.play(); + // assert.isTrue(gifImage.gifProperties.playing === true); + // gifImage.setFrame(2); + // assert.isTrue(gifImage.gifProperties.displayIndex === 2); + // gifImage.reset(); + // assert.isTrue(gifImage.gifProperties.displayIndex === 0); + // assert.isTrue(gifImage.gifProperties.timeDisplayed === 0); + // }); + // }); + // }; + // }; + // new p5(mySketch, null, false); + // }); }); suite('displaying images', function() { From 24128917b1ae4cead89c99ac55078684beb0a25b Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 23:15:51 +0100 Subject: [PATCH 14/27] Make old parameter validation no op to pass tests --- src/core/friendly_errors/validate_params.js | 894 ++++++++++---------- 1 file changed, 448 insertions(+), 446 deletions(-) diff --git a/src/core/friendly_errors/validate_params.js b/src/core/friendly_errors/validate_params.js index 6b2622dd7c..8444f2f105 100644 --- a/src/core/friendly_errors/validate_params.js +++ b/src/core/friendly_errors/validate_params.js @@ -5,33 +5,33 @@ import p5 from '../main'; import * as constants from '../constants'; import { translator } from '../internationalization'; -import dataDoc from '../../../docs/parameterData.json'; +// import dataDoc from '../../../docs/parameterData.json'; if (typeof IS_MINIFIED !== 'undefined') { p5._validateParameters = p5._clearValidateParamsCache = () => {}; } else { // for parameter validation - const arrDoc = JSON.parse(JSON.stringify(dataDoc)); - - const docCache = {}; - const builtinTypes = new Set([ - 'null', - 'number', - 'string', - 'boolean', - 'constant', - 'function', - 'any', - 'integer' - ]); - - const basicTypes = { - number: true, - boolean: true, - string: true, - function: true, - undefined: true - }; + // const arrDoc = JSON.parse(JSON.stringify(dataDoc)); + + // const docCache = {}; + // const builtinTypes = new Set([ + // 'null', + // 'number', + // 'string', + // 'boolean', + // 'constant', + // 'function', + // 'any', + // 'integer' + // ]); + + // const basicTypes = { + // number: true, + // boolean: true, + // string: true, + // function: true, + // undefined: true + // }; // reverse map of all constants const constantsReverseMap = {}; @@ -49,7 +49,7 @@ if (typeof IS_MINIFIED !== 'undefined') { // For speedup over many runs. funcSpecificConstructors[func] only has the // constructors for types which were seen earlier as args of "func" - const funcSpecificConstructors = {}; + // const funcSpecificConstructors = {}; window.addEventListener('load', () => { // Make a list of all p5 classes to be used for argument validation // This must be done only when everything has loaded otherwise we get @@ -98,67 +98,67 @@ if (typeof IS_MINIFIED !== 'undefined') { * @method addType * @private */ - const addType = (value, obj, func) => { - let type = typeof value; - if (basicTypes[type]) { - if (constantsReverseMap[value]) { - // check if the value is a p5 constant and if it is, we would want the - // value itself to be stored in the tree instead of the type - obj = obj[value] || (obj[value] = {}); - } else { - obj = obj[type] || (obj[type] = {}); - } - } else if (value === null) { - // typeof null -> "object". don't want that - obj = obj['null'] || (obj['null'] = {}); - } else { - // objects which are instances of p5 classes have nameless constructors. - // native objects have a constructor named "Object". This check - // differentiates between the two so that we dont waste time finding the - // p5 class if we just have a native object - if (value.constructor && value.constructor.name) { - obj = obj[value.constructor.name] || (obj[value.constructor.name] = {}); - return obj; - } - - // constructors for types defined in p5 do not have a name property. - // e.constructor.name gives "". Code in this segment is a workaround for it - - // p5C will only have the name: constructor mapping for types - // which were already seen as args of "func" - let p5C = funcSpecificConstructors[func]; - // p5C would contain much fewer items than p5Constructors. if we find our - // answer in p5C, we don't have to scan through p5Constructors - - if (p5C === undefined) { - // if there isn't an entry yet for func - // make an entry of empty object - p5C = funcSpecificConstructors[func] = {}; - } - - for (let key in p5C) { - // search on the constructors we have already seen (smaller search space) - if (value instanceof p5C[key]) { - obj = obj[key] || (obj[key] = {}); - return obj; - } - } - - for (let key in p5Constructors) { - // if the above search didn't work, search on all p5 constructors - if (value instanceof p5Constructors[key]) { - obj = obj[key] || (obj[key] = {}); - // if found, add to known constructors for this function - p5C[key] = p5Constructors[key]; - return obj; - } - } - // nothing worked, put the type as it is - obj = obj[type] || (obj[type] = {}); - } - - return obj; - }; + // const addType = (value, obj, func) => { + // let type = typeof value; + // if (basicTypes[type]) { + // if (constantsReverseMap[value]) { + // // check if the value is a p5 constant and if it is, we would want the + // // value itself to be stored in the tree instead of the type + // obj = obj[value] || (obj[value] = {}); + // } else { + // obj = obj[type] || (obj[type] = {}); + // } + // } else if (value === null) { + // // typeof null -> "object". don't want that + // obj = obj['null'] || (obj['null'] = {}); + // } else { + // // objects which are instances of p5 classes have nameless constructors. + // // native objects have a constructor named "Object". This check + // // differentiates between the two so that we dont waste time finding the + // // p5 class if we just have a native object + // if (value.constructor && value.constructor.name) { + // obj = obj[value.constructor.name] || (obj[value.constructor.name] = {}); + // return obj; + // } + + // // constructors for types defined in p5 do not have a name property. + // // e.constructor.name gives "". Code in this segment is a workaround for it + + // // p5C will only have the name: constructor mapping for types + // // which were already seen as args of "func" + // let p5C = funcSpecificConstructors[func]; + // // p5C would contain much fewer items than p5Constructors. if we find our + // // answer in p5C, we don't have to scan through p5Constructors + + // if (p5C === undefined) { + // // if there isn't an entry yet for func + // // make an entry of empty object + // p5C = funcSpecificConstructors[func] = {}; + // } + + // for (let key in p5C) { + // // search on the constructors we have already seen (smaller search space) + // if (value instanceof p5C[key]) { + // obj = obj[key] || (obj[key] = {}); + // return obj; + // } + // } + + // for (let key in p5Constructors) { + // // if the above search didn't work, search on all p5 constructors + // if (value instanceof p5Constructors[key]) { + // obj = obj[key] || (obj[key] = {}); + // // if found, add to known constructors for this function + // p5C[key] = p5Constructors[key]; + // return obj; + // } + // } + // // nothing worked, put the type as it is + // obj = obj[type] || (obj[type] = {}); + // } + + // return obj; + // }; /** * Build the argument type tree, argumentTree @@ -168,31 +168,31 @@ if (typeof IS_MINIFIED !== 'undefined') { * @method buildArgTypeCache * @private */ - const buildArgTypeCache = (func, arr) => { - // get the if an argument tree for current function already exists - let obj = argumentTree[func]; - if (obj === undefined) { - // if it doesn't, create an empty tree - obj = argumentTree[func] = {}; - } - - for (let i = 0, len = arr.length; i < len; ++i) { - let value = arr[i]; - if (value instanceof Array) { - // an array is passed as an argument, expand it and get the type of - // each of its element. We distinguish the start of an array with 'as' - // or arraystart. This would help distinguish between the arguments - // (number, number, number) and (number, [number, number]) - obj = obj['as'] || (obj['as'] = {}); - for (let j = 0, lenA = value.length; j < lenA; ++j) { - obj = addType(value[j], obj, func); - } - } else { - obj = addType(value, obj, func); - } - } - return obj; - }; + // const buildArgTypeCache = (func, arr) => { + // // get the if an argument tree for current function already exists + // let obj = argumentTree[func]; + // if (obj === undefined) { + // // if it doesn't, create an empty tree + // obj = argumentTree[func] = {}; + // } + + // for (let i = 0, len = arr.length; i < len; ++i) { + // let value = arr[i]; + // if (value instanceof Array) { + // // an array is passed as an argument, expand it and get the type of + // // each of its element. We distinguish the start of an array with 'as' + // // or arraystart. This would help distinguish between the arguments + // // (number, number, number) and (number, [number, number]) + // obj = obj['as'] || (obj['as'] = {}); + // for (let j = 0, lenA = value.length; j < lenA; ++j) { + // obj = addType(value[j], obj, func); + // } + // } else { + // obj = addType(value, obj, func); + // } + // } + // return obj; + // }; /** * Query data.json @@ -200,151 +200,151 @@ if (typeof IS_MINIFIED !== 'undefined') { * @method lookupParamDoc * @private */ - const lookupParamDoc = func => { - // look for the docs in the `data.json` datastructure - - const ichDot = func.lastIndexOf('.'); - const funcName = func.slice(ichDot + 1); - const funcClass = func.slice(0, ichDot !== -1 ? ichDot : 0) || 'p5'; - - const classitems = arrDoc; - let queryResult = classitems[funcClass][funcName]; - - // different JSON structure for funct with multi-format - const overloads = []; - if (queryResult.hasOwnProperty('overloads')) { - // add all the overloads - for (let i = 0; i < queryResult.overloads.length; i++) { - overloads.push({ formats: queryResult.overloads[i].params }); - } - } else { - // no overloads, just add the main method definition - overloads.push({ formats: queryResult.params || [] }); - } - - // parse the parameter types for each overload - const mapConstants = {}; - let maxParams = 0; - overloads.forEach(overload => { - const formats = overload.formats; - - // keep a record of the maximum number of arguments - // this method requires. - if (maxParams < formats.length) { - maxParams = formats.length; - } - - // calculate the minimum number of arguments - // this overload requires. - let minParams = formats.length; - while (minParams > 0 && formats[minParams - 1].optional) { - minParams--; - } - overload.minParams = minParams; - - // loop through each parameter position, and parse its types - formats.forEach(format => { - // split this parameter's types - format.types = format.type.split('|').map(function ct(type) { - // array - if (type.slice(-2) === '[]') { - return { - name: type, - array: ct(type.slice(0, -2)) - }; - } - - let lowerType = type.toLowerCase(); - - // constant - if (lowerType === 'constant') { - let constant; - if (mapConstants.hasOwnProperty(format.name)) { - constant = mapConstants[format.name]; - } else { - // parse possible constant values from description - const myRe = /either\s+(?:[A-Z0-9_]+\s*,?\s*(?:or)?\s*)+/g; - const values = {}; - const names = []; - - constant = mapConstants[format.name] = { - values, - names - }; - - const myArray = myRe.exec(format.description); - if (func === 'endShape' && format.name === 'mode') { - values[constants.CLOSE] = true; - names.push('CLOSE'); - } else { - const match = myArray[0]; - const reConst = /[A-Z0-9_]+/g; - let matchConst; - while ((matchConst = reConst.exec(match)) !== null) { - const name = matchConst[0]; - if (name in constants) { - values[constants[name]] = true; - names.push(name); - } - } - } - } - return { - name: type, - builtin: lowerType, - names: constant.names, - values: constant.values - }; - } - - // Handle specific constants in types, e.g. in endShape: - // @param {CLOSE} [close] - // Rather than trying to parse the types out of the description, we - // can use the constant directly from the type - if (type in constants) { - return { - name: type, - builtin: 'constant', - names: [type], - values: { [constants[type]]: true } - }; - } - - // function - if (lowerType.slice(0, 'function'.length) === 'function') { - lowerType = 'function'; - } - // builtin - if (builtinTypes.has(lowerType)) { - return { name: type, builtin: lowerType }; - } - - // find type's prototype - let t = window; - const typeParts = type.split('.'); - - // special-case 'p5' since it may be non-global - if (typeParts[0] === 'p5') { - t = p5; - typeParts.shift(); - } - - typeParts.forEach(p => { - t = t && t[p]; - }); - if (t) { - return { name: type, prototype: t }; - } - - return { name: type, type: lowerType }; - }); - }); - }); - return { - overloads, - maxParams - }; - }; + // const lookupParamDoc = func => { + // // look for the docs in the `data.json` datastructure + + // const ichDot = func.lastIndexOf('.'); + // const funcName = func.slice(ichDot + 1); + // const funcClass = func.slice(0, ichDot !== -1 ? ichDot : 0) || 'p5'; + + // const classitems = arrDoc; + // let queryResult = classitems[funcClass][funcName]; + + // // different JSON structure for funct with multi-format + // const overloads = []; + // if (queryResult.hasOwnProperty('overloads')) { + // // add all the overloads + // for (let i = 0; i < queryResult.overloads.length; i++) { + // overloads.push({ formats: queryResult.overloads[i].params }); + // } + // } else { + // // no overloads, just add the main method definition + // overloads.push({ formats: queryResult.params || [] }); + // } + + // // parse the parameter types for each overload + // const mapConstants = {}; + // let maxParams = 0; + // overloads.forEach(overload => { + // const formats = overload.formats; + + // // keep a record of the maximum number of arguments + // // this method requires. + // if (maxParams < formats.length) { + // maxParams = formats.length; + // } + + // // calculate the minimum number of arguments + // // this overload requires. + // let minParams = formats.length; + // while (minParams > 0 && formats[minParams - 1].optional) { + // minParams--; + // } + // overload.minParams = minParams; + + // // loop through each parameter position, and parse its types + // formats.forEach(format => { + // // split this parameter's types + // format.types = format.type.split('|').map(function ct(type) { + // // array + // if (type.slice(-2) === '[]') { + // return { + // name: type, + // array: ct(type.slice(0, -2)) + // }; + // } + + // let lowerType = type.toLowerCase(); + + // // constant + // if (lowerType === 'constant') { + // let constant; + // if (mapConstants.hasOwnProperty(format.name)) { + // constant = mapConstants[format.name]; + // } else { + // // parse possible constant values from description + // const myRe = /either\s+(?:[A-Z0-9_]+\s*,?\s*(?:or)?\s*)+/g; + // const values = {}; + // const names = []; + + // constant = mapConstants[format.name] = { + // values, + // names + // }; + + // const myArray = myRe.exec(format.description); + // if (func === 'endShape' && format.name === 'mode') { + // values[constants.CLOSE] = true; + // names.push('CLOSE'); + // } else { + // const match = myArray[0]; + // const reConst = /[A-Z0-9_]+/g; + // let matchConst; + // while ((matchConst = reConst.exec(match)) !== null) { + // const name = matchConst[0]; + // if (name in constants) { + // values[constants[name]] = true; + // names.push(name); + // } + // } + // } + // } + // return { + // name: type, + // builtin: lowerType, + // names: constant.names, + // values: constant.values + // }; + // } + + // // Handle specific constants in types, e.g. in endShape: + // // @param {CLOSE} [close] + // // Rather than trying to parse the types out of the description, we + // // can use the constant directly from the type + // if (type in constants) { + // return { + // name: type, + // builtin: 'constant', + // names: [type], + // values: { [constants[type]]: true } + // }; + // } + + // // function + // if (lowerType.slice(0, 'function'.length) === 'function') { + // lowerType = 'function'; + // } + // // builtin + // if (builtinTypes.has(lowerType)) { + // return { name: type, builtin: lowerType }; + // } + + // // find type's prototype + // let t = window; + // const typeParts = type.split('.'); + + // // special-case 'p5' since it may be non-global + // if (typeParts[0] === 'p5') { + // t = p5; + // typeParts.shift(); + // } + + // typeParts.forEach(p => { + // t = t && t[p]; + // }); + // if (t) { + // return { name: type, prototype: t }; + // } + + // return { name: type, type: lowerType }; + // }); + // }); + // }); + // return { + // overloads, + // maxParams + // }; + // }; /** * Checks whether input type is Number @@ -354,80 +354,80 @@ if (typeof IS_MINIFIED !== 'undefined') { * * @returns {Boolean} a boolean indicating whether input type is Number */ - const isNumber = param => { - if (isNaN(parseFloat(param))) return false; - switch (typeof param) { - case 'number': - return true; - case 'string': - return !isNaN(param); - default: - return false; - } - }; + // const isNumber = param => { + // if (isNaN(parseFloat(param))) return false; + // switch (typeof param) { + // case 'number': + // return true; + // case 'string': + // return !isNaN(param); + // default: + // return false; + // } + // }; /** * Test type for non-object type parameter validation * @method testParamType * @private */ - const testParamType = (param, type) => { - const isArray = param instanceof Array; - let matches = true; - if (type.array && isArray) { - for (let i = 0; i < param.length; i++) { - const error = testParamType(param[i], type.array); - if (error) return error / 2; // half error for elements - } - } else if (type.prototype) { - matches = param instanceof type.prototype; - } else if (type.builtin) { - switch (type.builtin) { - case 'number': - matches = isNumber(param); - break; - case 'integer': - matches = isNumber(param) && Number(param) === Math.floor(param); - break; - case 'boolean': - case 'any': - matches = true; - break; - case 'array': - matches = isArray; - break; - case 'string': - matches = /*typeof param === 'number' ||*/ typeof param === 'string'; - break; - case 'constant': - matches = type.values.hasOwnProperty(param); - break; - case 'function': - matches = param instanceof Function; - break; - case 'null': - matches = param === null; - break; - } - } else { - matches = typeof param === type.t; - } - return matches ? 0 : 1; - }; + // const testParamType = (param, type) => { + // const isArray = param instanceof Array; + // let matches = true; + // if (type.array && isArray) { + // for (let i = 0; i < param.length; i++) { + // const error = testParamType(param[i], type.array); + // if (error) return error / 2; // half error for elements + // } + // } else if (type.prototype) { + // matches = param instanceof type.prototype; + // } else if (type.builtin) { + // switch (type.builtin) { + // case 'number': + // matches = isNumber(param); + // break; + // case 'integer': + // matches = isNumber(param) && Number(param) === Math.floor(param); + // break; + // case 'boolean': + // case 'any': + // matches = true; + // break; + // case 'array': + // matches = isArray; + // break; + // case 'string': + // matches = /*typeof param === 'number' ||*/ typeof param === 'string'; + // break; + // case 'constant': + // matches = type.values.hasOwnProperty(param); + // break; + // case 'function': + // matches = param instanceof Function; + // break; + // case 'null': + // matches = param === null; + // break; + // } + // } else { + // matches = typeof param === type.t; + // } + // return matches ? 0 : 1; + // }; /** * Test type for multiple parameters * @method testParamTypes * @private */ - const testParamTypes = (param, types) => { - let minScore = 9999; - for (let i = 0; minScore > 0 && i < types.length; i++) { - const score = testParamType(param, types[i]); - if (minScore > score) minScore = score; - } - return minScore; - }; + // const testParamTypes = (param, types) => { + // let minScore = 9999; + // for (let i = 0; minScore > 0 && i < types.length; i++) { + // const score = testParamType(param, types[i]); + // if (minScore > score) minScore = score; + // } + // return minScore; + // }; /** * generate a score (higher is worse) for applying these args to @@ -435,91 +435,91 @@ if (typeof IS_MINIFIED !== 'undefined') { * @method scoreOverload * @private */ - const scoreOverload = (args, argCount, overload, minScore) => { - let score = 0; - const formats = overload.formats; - const minParams = overload.minParams; - - // check for too few/many args - // the score is double number of extra/missing args - if (argCount < minParams) { - score = (minParams - argCount) * 2; - } else if (argCount > formats.length) { - score = (argCount - formats.length) * 2; - } - - // loop through the formats, adding up the error score for each arg. - // quit early if the score gets higher than the previous best overload. - for (let p = 0; score <= minScore && p < formats.length; p++) { - const arg = args[p]; - const format = formats[p]; - // '== null' checks for 'null' and typeof 'undefined' - if (arg == null) { - // handle undefined args - if (!format.optional || p < minParams || p < argCount) { - score += 1; - } - } else { - score += testParamTypes(arg, format.types); - } - } - return score; - }; + // const scoreOverload = (args, argCount, overload, minScore) => { + // let score = 0; + // const formats = overload.formats; + // const minParams = overload.minParams; + + // // check for too few/many args + // // the score is double number of extra/missing args + // if (argCount < minParams) { + // score = (minParams - argCount) * 2; + // } else if (argCount > formats.length) { + // score = (argCount - formats.length) * 2; + // } + + // // loop through the formats, adding up the error score for each arg. + // // quit early if the score gets higher than the previous best overload. + // for (let p = 0; score <= minScore && p < formats.length; p++) { + // const arg = args[p]; + // const format = formats[p]; + // // '== null' checks for 'null' and typeof 'undefined' + // if (arg == null) { + // // handle undefined args + // if (!format.optional || p < minParams || p < argCount) { + // score += 1; + // } + // } else { + // score += testParamTypes(arg, format.types); + // } + // } + // return score; + // }; /** * Gets a list of errors for this overload * @method getOverloadErrors * @private */ - const getOverloadErrors = (args, argCount, overload) => { - const formats = overload.formats; - const minParams = overload.minParams; - - // check for too few/many args - if (argCount < minParams) { - return [ - { - type: 'TOO_FEW_ARGUMENTS', - argCount, - minParams - } - ]; - } else if (argCount > formats.length) { - return [ - { - type: 'TOO_MANY_ARGUMENTS', - argCount, - maxParams: formats.length - } - ]; - } - - const errorArray = []; - for (let p = 0; p < formats.length; p++) { - const arg = args[p]; - const format = formats[p]; - // '== null' checks for 'null' and typeof 'undefined' - if (arg == null) { - // handle undefined args - if (!format.optional || p < minParams || p < argCount) { - errorArray.push({ - type: 'EMPTY_VAR', - position: p, - format - }); - } - } else if (testParamTypes(arg, format.types) > 0) { - errorArray.push({ - type: 'WRONG_TYPE', - position: p, - format, - arg - }); - } - } - - return errorArray; - }; + // const getOverloadErrors = (args, argCount, overload) => { + // const formats = overload.formats; + // const minParams = overload.minParams; + + // // check for too few/many args + // if (argCount < minParams) { + // return [ + // { + // type: 'TOO_FEW_ARGUMENTS', + // argCount, + // minParams + // } + // ]; + // } else if (argCount > formats.length) { + // return [ + // { + // type: 'TOO_MANY_ARGUMENTS', + // argCount, + // maxParams: formats.length + // } + // ]; + // } + + // const errorArray = []; + // for (let p = 0; p < formats.length; p++) { + // const arg = args[p]; + // const format = formats[p]; + // // '== null' checks for 'null' and typeof 'undefined' + // if (arg == null) { + // // handle undefined args + // if (!format.optional || p < minParams || p < argCount) { + // errorArray.push({ + // type: 'EMPTY_VAR', + // position: p, + // format + // }); + // } + // } else if (testParamTypes(arg, format.types) > 0) { + // errorArray.push({ + // type: 'WRONG_TYPE', + // position: p, + // format, + // arg + // }); + // } + // } + + // return errorArray; + // }; /** * a custom error type, used by the mocha @@ -717,57 +717,59 @@ if (typeof IS_MINIFIED !== 'undefined') { * received "foo" instead." */ p5._validateParameters = function validateParameters(func, args) { - if (p5.disableFriendlyErrors) { - return; // skip FES - } - - // query / build the argument type tree and check if this sequence - // has already been seen before. - let obj = buildArgTypeCache(func, args); - if (obj.seen) { - return; - } - // mark this sequence as seen - obj.seen = true; - // lookup the docs in the 'data.json' file - const docs = docCache[func] || (docCache[func] = lookupParamDoc(func)); - const overloads = docs.overloads; - - let argCount = args.length; - - // the following line ignores trailing undefined arguments, commenting - // it to resolve https://github.com/processing/p5.js/issues/4571 - // '== null' checks for 'null' and typeof 'undefined' - // while (argCount > 0 && args[argCount - 1] == null) argCount--; - - // find the overload with the best score - let minScore = 99999; - let minOverload; - for (let i = 0; i < overloads.length; i++) { - const score = scoreOverload(args, argCount, overloads[i], minScore); - if (score === 0) { - return; // done! - } else if (minScore > score) { - // this score is better that what we have so far... - minScore = score; - minOverload = i; - } - } - - // this should _always_ be true here... - if (minScore > 0) { - // get the errors for the best overload - const errorArray = getOverloadErrors( - args, - argCount, - overloads[minOverload] - ); - - // generate err msg - for (let n = 0; n < errorArray.length; n++) { - p5._friendlyParamError(errorArray[n], func); - } - } + // NOTE: no-op for later removal + return; + // if (p5.disableFriendlyErrors) { + // return; // skip FES + // } + + // // query / build the argument type tree and check if this sequence + // // has already been seen before. + // let obj = buildArgTypeCache(func, args); + // if (obj.seen) { + // return; + // } + // // mark this sequence as seen + // obj.seen = true; + // // lookup the docs in the 'data.json' file + // const docs = docCache[func] || (docCache[func] = lookupParamDoc(func)); + // const overloads = docs.overloads; + + // let argCount = args.length; + + // // the following line ignores trailing undefined arguments, commenting + // // it to resolve https://github.com/processing/p5.js/issues/4571 + // // '== null' checks for 'null' and typeof 'undefined' + // // while (argCount > 0 && args[argCount - 1] == null) argCount--; + + // // find the overload with the best score + // let minScore = 99999; + // let minOverload; + // for (let i = 0; i < overloads.length; i++) { + // const score = scoreOverload(args, argCount, overloads[i], minScore); + // if (score === 0) { + // return; // done! + // } else if (minScore > score) { + // // this score is better that what we have so far... + // minScore = score; + // minOverload = i; + // } + // } + + // // this should _always_ be true here... + // if (minScore > 0) { + // // get the errors for the best overload + // const errorArray = getOverloadErrors( + // args, + // argCount, + // overloads[minOverload] + // ); + + // // generate err msg + // for (let n = 0; n < errorArray.length; n++) { + // p5._friendlyParamError(errorArray[n], func); + // } + // } }; p5.prototype._validateParameters = p5.validateParameters; } From f88e6e74f61b75efa252eaacd6a5a97d5338289c Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 23:26:35 +0100 Subject: [PATCH 15/27] Try switching test provider --- package-lock.json | 45 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 ++- vite.config.mjs | 4 ++-- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 21b8a9d994..317f59b921 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "i18next": "^19.0.2", "i18next-browser-languagedetector": "^4.0.1", "lint-staged": "^15.1.0", + "playwright": "^1.46.1", "rollup": "^4.9.6", "rollup-plugin-string": "^3.0.0", "rollup-plugin-visualizer": "^5.12.0", @@ -8378,6 +8379,50 @@ "node": ">=10" } }, + "node_modules/playwright": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.1.tgz", + "integrity": "sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==", + "dev": true, + "dependencies": { + "playwright-core": "1.46.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.46.1.tgz", + "integrity": "sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", diff --git a/package.json b/package.json index 51c716e534..6663333db6 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "i18next": "^19.0.2", "i18next-browser-languagedetector": "^4.0.1", "lint-staged": "^15.1.0", + "playwright": "^1.46.1", "rollup": "^4.9.6", "rollup-plugin-string": "^3.0.0", "rollup-plugin-visualizer": "^5.12.0", @@ -82,4 +83,4 @@ "pre-commit": "lint-staged" } } -} \ No newline at end of file +} diff --git a/vite.config.mjs b/vite.config.mjs index 876c381eb7..5b526fc463 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -24,8 +24,8 @@ export default defineConfig({ globals: true, browser: { enabled: true, - name: 'chrome', - provider: 'webdriverio' + name: 'chromium', + provider: 'playwright' } } }); From e727b1edaf46dd46b877e865ac7a75b53debef8c Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 23:34:25 +0100 Subject: [PATCH 16/27] Install playwright browsers in CI --- .github/workflows/ci-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index d6400dd4bd..52fa09e77f 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -22,6 +22,8 @@ jobs: run: npm ci env: CI: true + - name: Install Playwright browsers + run: npx playwright install - name: Build parameter data run: npm run docs - name: build and test From e969ccacbd87636e67821dcb922b5d522f9c978e Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 23:44:40 +0100 Subject: [PATCH 17/27] Try minimal test case --- .github/workflows/ci-test.yml | 4 ++-- vite.config.mjs | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 52fa09e77f..213d0a285f 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -22,8 +22,8 @@ jobs: run: npm ci env: CI: true - - name: Install Playwright browsers - run: npx playwright install + # - name: Install Playwright browsers + # run: npx playwright install - name: Build parameter data run: npm run docs - name: build and test diff --git a/vite.config.mjs b/vite.config.mjs index 5b526fc463..08fef8dfc5 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -13,7 +13,8 @@ export default defineConfig({ test: { root: './', include: [ - './test/unit/**/*.js' + // './test/unit/**/*.js' + './test/unit/utilities/**/*.js' ], exclude: [ './test/unit/spec.js', @@ -24,8 +25,8 @@ export default defineConfig({ globals: true, browser: { enabled: true, - name: 'chromium', - provider: 'playwright' + name: 'chrome', + provider: 'webdriverio' } } }); From b41044f39b39fde836fa50a0ceb53b9b40081868 Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Tue, 3 Sep 2024 23:46:47 +0100 Subject: [PATCH 18/27] Add another failing test case --- vite.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.mjs b/vite.config.mjs index 08fef8dfc5..e5b98c5564 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -14,6 +14,7 @@ export default defineConfig({ root: './', include: [ // './test/unit/**/*.js' + './test/unit/math/**/*.js', './test/unit/utilities/**/*.js' ], exclude: [ From 2a2a4886bcfb142043825316f50355f5e730076e Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Wed, 4 Sep 2024 13:18:29 +0100 Subject: [PATCH 19/27] Try out shorter timeout --- package-lock.json | 1045 ++++++++++++++++++++++----------------------- package.json | 2 +- vite.config.mjs | 5 +- 3 files changed, 507 insertions(+), 545 deletions(-) diff --git a/package-lock.json b/package-lock.json index 317f59b921..a502e21934 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "vite": "^5.0.2", "vite-plugin-string": "^1.2.2", "vitest": "^2.0.4", - "webdriverio": "^8.38.2", + "webdriverio": "^9.0.7", "zod": "^3.23.8" } }, @@ -1274,24 +1274,25 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", - "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.1.tgz", + "integrity": "sha512-uK7o3hHkK+naEobMSJ+2ySYyXtQkBxIH8Gn4MK9ciePjNV+Pf+PgY/W7iPzn2MTjl3stcYB5AlcTmPYw7AXDwA==", "dev": true, "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.3.1", - "tar-fs": "3.0.4", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.3.6", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" } }, "node_modules/@puppeteer/browsers/node_modules/cliui": { @@ -1308,21 +1309,16 @@ "node": ">=12" } }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "ms": "2.1.2" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=10" } }, "node_modules/@puppeteer/browsers/node_modules/wrap-ansi": { @@ -1721,18 +1717,6 @@ "win32" ] }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, "node_modules/@swc/core": { "version": "1.7.23", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.23.tgz", @@ -1959,18 +1943,6 @@ "@swc/counter": "^0.1.3" } }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, "node_modules/@testing-library/dom": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", @@ -2051,12 +2023,6 @@ "@types/unist": "^2" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true - }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", @@ -2114,6 +2080,12 @@ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "dev": true + }, "node_modules/@types/statuses": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", @@ -2361,21 +2333,21 @@ "optional": true }, "node_modules/@wdio/config": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.3.tgz", - "integrity": "sha512-HIi+JnHEDAExhzGRQuZOXw1HWIpe/bsVFHwNISJhY6wS4Nijaigmegs2p14Rv16ydOF19hGrxdKsl8k5STIP2A==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.0.6.tgz", + "integrity": "sha512-WsACM5QjT3ZsoPVqHroYt8pOkZx4/6PTdNKm45VL8NHhQe5w9IFbl1fKxFHQ7ZkPI3F+EFvFvubO8puJ0OcSmQ==", "dev": true, "dependencies": { - "@wdio/logger": "8.38.0", - "@wdio/types": "8.40.3", - "@wdio/utils": "8.40.3", + "@wdio/logger": "9.0.4", + "@wdio/types": "9.0.4", + "@wdio/utils": "9.0.6", "decamelize": "^6.0.0", - "deepmerge-ts": "^5.0.0", + "deepmerge-ts": "^7.0.3", "glob": "^10.2.2", "import-meta-resolve": "^4.0.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" } }, "node_modules/@wdio/config/node_modules/brace-expansion": { @@ -2423,9 +2395,9 @@ } }, "node_modules/@wdio/logger": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", - "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.0.4.tgz", + "integrity": "sha512-b6gcu0PTVb3fgK4kyAH/k5UUWN5FOUdAfhA4PAY/IZvxZTMFYMqnrZb0WRWWWqL6nu9pcrOVtCOdPBvj0cb+Nw==", "dev": true, "dependencies": { "chalk": "^5.1.2", @@ -2434,7 +2406,7 @@ "strip-ansi": "^7.1.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" } }, "node_modules/@wdio/logger/node_modules/ansi-regex": { @@ -2477,57 +2449,75 @@ } }, "node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.0.4.tgz", + "integrity": "sha512-T9v8Jkp94NxLLil5J7uJ/+YHk5/7fhOggzGcN+LvuCHS6jbJFZ/11c4SUEuXw27Yqk01fFXPBbF6TwcTTOuW/Q==", "dev": true }, "node_modules/@wdio/repl": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.40.3.tgz", - "integrity": "sha512-mWEiBbaC7CgxvSd2/ozpbZWebnRIc8KRu/J81Hlw/txUWio27S7IpXBlZGVvhEsNzq0+cuxB/8gDkkXvMPbesw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.0.4.tgz", + "integrity": "sha512-5Bc5ARjWA7t6MZNnVJ9WvO1iDsy6iOsrSDWiP7APWAdaF/SJCP3SFE2c+PdQJpJWhr2Kk0fRGuyDM+GdsmZhwg==", "dev": true, "dependencies": { - "@types/node": "^22.2.0" + "@types/node": "^20.1.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" + } + }, + "node_modules/@wdio/repl/node_modules/@types/node": { + "version": "20.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.3.tgz", + "integrity": "sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" } }, "node_modules/@wdio/types": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.40.3.tgz", - "integrity": "sha512-zK17uyON3Ise3m+XwiF5VrrdZcXXmvqB8AWXoKe88DiksFUPMVoCOuVL2SSX1KnA2YLlZBA55qcFZT99GORVKQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.0.4.tgz", + "integrity": "sha512-MN7O4Uk3zPWvkN8d6SNdIjd7qHUlTxS7j0QfRPu6TdlYbHu6BJJ8Rr84y7GcUzCnTAJ1nOIpvUyR8MY3hOaVKg==", "dev": true, "dependencies": { - "@types/node": "^22.2.0" + "@types/node": "^20.1.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" + } + }, + "node_modules/@wdio/types/node_modules/@types/node": { + "version": "20.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.3.tgz", + "integrity": "sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" } }, "node_modules/@wdio/utils": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz", - "integrity": "sha512-pv/848KGfPN3YXU4QRfTYGkAu4/lejIfoGzGpvGNDcACiVxgZhyRZkJ2xVaSnGaXzF0R7pMozrkU5/DnEhcxMg==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.0.6.tgz", + "integrity": "sha512-cnPXeW/sfqyKFuRRmADRZDNvFwEBMr7j7wwWLO6q5opoW++dwOdJW4WV0wDZbPcXTtGFCSrGCDLLdGcTAWMb3A==", "dev": true, "dependencies": { - "@puppeteer/browsers": "^1.6.0", - "@wdio/logger": "8.38.0", - "@wdio/types": "8.40.3", + "@puppeteer/browsers": "^2.2.0", + "@wdio/logger": "9.0.4", + "@wdio/types": "9.0.4", "decamelize": "^6.0.0", - "deepmerge-ts": "^5.1.0", - "edgedriver": "^5.5.0", - "geckodriver": "^4.3.1", + "deepmerge-ts": "^7.0.3", + "edgedriver": "^5.6.1", + "geckodriver": "^4.3.3", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", - "locate-app": "^2.1.0", - "safaridriver": "^0.1.0", + "locate-app": "^2.2.24", + "safaridriver": "^0.1.2", "split2": "^4.2.0", - "wait-port": "^1.0.4" + "wait-port": "^1.1.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" } }, "node_modules/@zip.js/zip.js": { @@ -2931,6 +2921,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3045,45 +3041,6 @@ "node": ">=8" } }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -3228,6 +3185,60 @@ "node": ">= 16" } }, + "node_modules/cheerio": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=18.17" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -3252,19 +3263,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chromium-bidi": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.8.tgz", - "integrity": "sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==", - "dev": true, - "dependencies": { - "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -3560,15 +3558,6 @@ "node": ">= 14" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3583,6 +3572,22 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-shorthand-properties": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", @@ -3595,6 +3600,18 @@ "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", "dev": true }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", @@ -3659,33 +3676,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -3711,23 +3701,14 @@ } }, "node_modules/deepmerge-ts": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", - "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.0.tgz", + "integrity": "sha512-q6bNsfNBtgr8ZOQqmZbl94MmYWm+QcDNIkqCxVWiw1vKvf+y/N2dZQKdnDXn4c5Ygt/y63tDof6OCN+2YwWVEg==", "dev": true, "engines": { "node": ">=16.0.0" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3777,12 +3758,6 @@ "node": ">=6" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1342118", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", - "integrity": "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w==", - "dev": true - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -3974,6 +3949,61 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -4015,6 +4045,45 @@ "edgedriver": "bin/edgedriver.js" } }, + "node_modules/edgedriver/node_modules/@wdio/logger": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", + "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", + "dev": true, + "dependencies": { + "chalk": "^5.1.2", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/edgedriver/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/edgedriver/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/edgedriver/node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -4051,6 +4120,21 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/edgedriver/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/edgedriver/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -4078,6 +4162,31 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/encoding-sniffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", + "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4092,7 +4201,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "optional": true, "engines": { "node": ">=0.12" }, @@ -4741,15 +4849,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, - "engines": { - "node": ">= 14.17" - } - }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -4833,47 +4932,8 @@ "bin": { "geckodriver": "bin/geckodriver.js" }, - "engines": { - "node": "^16.13 || >=18 || >=20" - } - }, - "node_modules/geckodriver/node_modules/@wdio/logger": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.0.4.tgz", - "integrity": "sha512-b6gcu0PTVb3fgK4kyAH/k5UUWN5FOUdAfhA4PAY/IZvxZTMFYMqnrZb0WRWWWqL6nu9pcrOVtCOdPBvj0cb+Nw==", - "dev": true, - "dependencies": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/geckodriver/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/geckodriver/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": "^16.13 || >=18 || >=20" } }, "node_modules/geckodriver/node_modules/data-uri-to-buffer": { @@ -4912,35 +4972,6 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/geckodriver/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/geckodriver/node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, "node_modules/geckodriver/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -5163,43 +5194,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -5476,12 +5470,31 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "node_modules/htmlfy": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/htmlfy/-/htmlfy-0.2.1.tgz", + "integrity": "sha512-HoomFHQ3av1uhq+7FxJTq4Ns0clAD+tGbQNrSd0WFY3UAjjUk6G3LaWEqdgmIXYkY4pexZiyZ3ykZJhQlM0J5A==", "dev": true }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -5495,19 +5508,6 @@ "node": ">= 14" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, "node_modules/https-proxy-agent": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", @@ -6176,18 +6176,6 @@ "@babel/traverse": "^7.10.5" } }, - "node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -6612,18 +6600,6 @@ "get-func-name": "^2.0.1" } }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -7574,18 +7550,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7607,18 +7571,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -7888,18 +7840,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", @@ -7927,6 +7867,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -8041,15 +7993,6 @@ "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", "dev": true }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8201,6 +8144,55 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8552,15 +8544,15 @@ "dev": true }, "node_modules/proxy-agent": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dev": true, "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", @@ -8610,67 +8602,6 @@ "node": ">=6" } }, - "node_modules/puppeteer-core": { - "version": "21.11.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.11.0.tgz", - "integrity": "sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "1.9.1", - "chromium-bidi": "0.5.8", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1232444", - "ws": "8.16.0" - }, - "engines": { - "node": ">=16.13.2" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "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" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1232444", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1232444.tgz", - "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==", - "dev": true - }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -8724,18 +8655,6 @@ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -9103,12 +9022,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -9118,21 +9031,6 @@ "node": ">=4" } }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/resq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", @@ -10049,14 +9947,17 @@ } }, "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dev": true, "dependencies": { - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { @@ -10322,6 +10223,15 @@ "node": ">=0.10.0" } }, + "node_modules/undici": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", + "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", + "dev": true, + "engines": { + "node": ">=18.17" + } + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -10941,71 +10851,89 @@ } }, "node_modules/webdriver": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.40.3.tgz", - "integrity": "sha512-mc/pxLpgAQphnIaWvix/QXzp9CJpEvIA3YeF9t5plPaTbvbEaCAYYWkTP6e3vYPYWvx57krjGaYkNUnDCBNolA==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.0.7.tgz", + "integrity": "sha512-0PN4omqCGlgi3RG0LyrQXr0RUmlDCenNtpN+dfzikfYoV+CHiCw2GMnZp2XCuYUnU01MaCKgRQxLuGobyZov+A==", "dev": true, "dependencies": { - "@types/node": "^22.2.0", + "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.40.3", - "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.40.3", - "@wdio/types": "8.40.3", - "@wdio/utils": "8.40.3", - "deepmerge-ts": "^5.1.0", - "got": "^12.6.1", - "ky": "^0.33.0", + "@wdio/config": "9.0.6", + "@wdio/logger": "9.0.4", + "@wdio/protocols": "9.0.4", + "@wdio/types": "9.0.4", + "@wdio/utils": "9.0.6", + "deepmerge-ts": "^7.0.3", "ws": "^8.8.0" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" + } + }, + "node_modules/webdriver/node_modules/@types/node": { + "version": "20.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.3.tgz", + "integrity": "sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" } }, "node_modules/webdriverio": { - "version": "8.40.5", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.40.5.tgz", - "integrity": "sha512-fKzaAF8lbgVFWIP8i0eGk22MpjactVVTWP8qtUXDob5Kdo8ffrg1lCKP8mcyrz6fiZM1OY1m6dvkbFelf23Nxw==", - "dev": true, - "dependencies": { - "@types/node": "^22.2.0", - "@wdio/config": "8.40.3", - "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.40.3", - "@wdio/repl": "8.40.3", - "@wdio/types": "8.40.3", - "@wdio/utils": "8.40.3", - "archiver": "^7.0.0", - "aria-query": "^5.0.0", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.0.7.tgz", + "integrity": "sha512-/6CvJkKpUWYbX/59PNJCHXGLPwulQ/bXZwlIUrsF6MWKdf8Eb6yTaXkMJBaBy5x496b50PQcXkbe+qpfsnqXsg==", + "dev": true, + "dependencies": { + "@types/node": "^20.11.30", + "@types/sinonjs__fake-timers": "^8.1.5", + "@wdio/config": "9.0.6", + "@wdio/logger": "9.0.4", + "@wdio/protocols": "9.0.4", + "@wdio/repl": "9.0.4", + "@wdio/types": "9.0.4", + "@wdio/utils": "9.0.6", + "archiver": "^7.0.1", + "aria-query": "^5.3.0", + "cheerio": "^1.0.0-rc.12", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1342118", - "grapheme-splitter": "^1.0.2", + "grapheme-splitter": "^1.0.4", + "htmlfy": "^0.2.1", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", "jszip": "^3.10.1", "lodash.clonedeep": "^4.5.0", "lodash.zip": "^4.2.0", - "minimatch": "^9.0.0", - "puppeteer-core": "^21.11.0", - "query-selector-shadow-dom": "^1.0.0", - "resq": "^1.9.1", + "minimatch": "^9.0.3", + "query-selector-shadow-dom": "^1.0.1", + "resq": "^1.11.0", "rgb2hex": "0.2.5", - "serialize-error": "^11.0.1", - "webdriver": "8.40.3" + "serialize-error": "^11.0.3", + "urlpattern-polyfill": "^10.0.0", + "webdriver": "9.0.7" }, "engines": { - "node": "^16.13 || >=18" + "node": ">=18" }, "peerDependencies": { - "devtools": "^8.14.0" + "puppeteer-core": "^22.3.0" }, "peerDependenciesMeta": { - "devtools": { + "puppeteer-core": { "optional": true } } }, + "node_modules/webdriverio/node_modules/@types/node": { + "version": "20.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.3.tgz", + "integrity": "sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, "node_modules/webdriverio/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -11051,6 +10979,39 @@ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 6663333db6..c2a1740fca 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "vite": "^5.0.2", "vite-plugin-string": "^1.2.2", "vitest": "^2.0.4", - "webdriverio": "^8.38.2", + "webdriverio": "^9.0.7", "zod": "^3.23.8" }, "license": "LGPL-2.1", diff --git a/vite.config.mjs b/vite.config.mjs index e5b98c5564..94e850c1b4 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -22,12 +22,13 @@ export default defineConfig({ './test/unit/assets/*', './test/unit/visual/*' ], - testTimeout: 5000, + testTimeout: 1000, globals: true, browser: { enabled: true, name: 'chrome', - provider: 'webdriverio' + provider: 'webdriverio', + screenshotFailures: false } } }); From f75154f64529911252f5650eec8a9bfaa41d712a Mon Sep 17 00:00:00 2001 From: limzykenneth Date: Wed, 4 Sep 2024 13:21:26 +0100 Subject: [PATCH 20/27] Re-enable all tests --- preview/index.html | 62 ++++++++++++++++++++++++++++++++++++++++++++-- vite.config.mjs | 4 +-- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/preview/index.html b/preview/index.html index 2a18318054..fa1706323c 100644 --- a/preview/index.html +++ b/preview/index.html @@ -16,16 +16,74 @@