From a79c2f1c0627fc4e07af4876177738ab02dd970e Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Thu, 5 Jun 2025 17:12:13 +0530 Subject: [PATCH 01/28] context-aware hinter code --- .../IDE/components/contextAwareHinter.js | 100 ++++ .../modules/IDE/components/finalScopeMap.json | 474 ++++++++++++++++++ client/modules/IDE/components/parseCode.js | 50 ++ 3 files changed, 624 insertions(+) create mode 100644 client/modules/IDE/components/contextAwareHinter.js create mode 100644 client/modules/IDE/components/finalScopeMap.json create mode 100644 client/modules/IDE/components/parseCode.js diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js new file mode 100644 index 0000000000..ac4ca6452c --- /dev/null +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -0,0 +1,100 @@ +import CodeMirror from 'codemirror'; +import parseCode from './parseCode'; + +const scopeMap = require('./finalScopeMap.json'); + +export default function contextAwareHinter(cm, options = {}) { + const { hinter } = options; + if (!hinter || typeof hinter.search !== 'function') { + console.warn('Hinter is not available or invalid.'); + return { list: [], from: cm.getCursor(), to: cm.getCursor() }; + } + + const { line, ch } = cm.getCursor(); // getCursor has line, ch, sticky + console.log('cm.getcursor ', cm.getCursor()); + const { start, end, string } = cm.getTokenAt({ line, ch }); + // console.log('cm.gettokenat', cm.getTokenAt()); + const currentWord = string.trim(); + console.log('currentwork ', currentWord); + + const context = parseCode(cm); // e.g. 'draw' + const allHints = hinter.search(currentWord); // <- from options, not cm.hinter + const whitelist = scopeMap[context]?.whitelist || []; + const blacklist = scopeMap[context]?.blacklist || []; + console.log('allhints: ', allHints); + + // for each hint, only keep ones that match the typed prefix + const filteredHints = allHints + .filter( + (h) => + h && + h.item && + typeof h.item.text === 'string' && + h.item.text.startsWith(currentWord) + ) + .map((h) => { + const name = h.item.text; + const isWhitelisted = whitelist.includes(name); + const isBlacklisted = blacklist.includes(name); + + const from = CodeMirror.Pos(line, start); + const to = CodeMirror.Pos(line, end); + + let className = ''; + if (isBlacklisted) { + className = 'blacklisted-hint'; + } else if (isWhitelisted) { + className = 'whitelisted-hint'; + } + + return { + text: name, // Ensure `text` is explicitly defined + displayText: h.item.displayText || name, + className, + from, + to, + render: (el, self, data) => { + el.innerText = data.text; + if (isBlacklisted) { + el.style.color = 'red'; + el.style.opacity = 0.6; + } else if (isWhitelisted) { + el.style.fontWeight = 'bold'; + } + }, + hint: (editor, data, completion) => { + const { from: fromPos, to: toPos } = completion; + + if (!completion.text || typeof completion.text !== 'string') { + console.error('Invalid completion.text:', completion); + return; + } + + editor.replaceRange(completion.text, fromPos, toPos); + + if (blacklist.includes(completion.text)) { + console.warn( + `Using "${completion.text}" inside "${context}" is not recommended.` + ); + } + } + }; + }); + + console.log('filtered hints: ', filteredHints); + + const sorted = filteredHints.sort((a, b) => { + const score = (name) => { + if (whitelist.includes(name)) return 0; + if (blacklist.includes(name)) return 2; + return 1; + }; + return score(a.text) - score(b.text) || a.text.localeCompare(b.text); + }); + + return { + list: sorted, + from: CodeMirror.Pos(line, start), + to: CodeMirror.Pos(line, end) + }; +} diff --git a/client/modules/IDE/components/finalScopeMap.json b/client/modules/IDE/components/finalScopeMap.json new file mode 100644 index 0000000000..9b6c09abde --- /dev/null +++ b/client/modules/IDE/components/finalScopeMap.json @@ -0,0 +1,474 @@ +{ + "setup": { + "whitelist": [ + "acos", + "alpha", + "angleMode", + "append", + "arc", + "asin", + "atan", + "background", + "baseColorShader", + "beginClip", + "beginContour", + "beginGeometry", + "beginShape", + "bezier", + "bezierDetail", + "bezierPoint", + "bezierTangent", + "bezierVertex", + "blend", + "blendMode", + "blue", + "boolean", + "brightness", + "buildGeometry", + "byte", + "ceil", + "changed", + "char", + "circle", + "class", + "clip", + "color", + "colorMode", + "concat", + "cone", + "copy", + "cos", + "createA", + "createAudio", + "createButton", + "createCamera", + "createCanvas", + "createCapture", + "createCheckbox", + "createColorPicker", + "createDiv", + "createElement", + "createFileInput", + "createFilterShader", + "createFramebuffer", + "createGraphics", + "createImage", + "createImg", + "createInput", + "createModel", + "createNumberDict", + "createP", + "createRadio", + "createSelect", + "createShader", + "createSlider", + "createSpan", + "createStringDict", + "createVector", + "createVideo", + "curve", + "curveDetail", + "curvePoint", + "curveTangent", + "curveVertex", + "day", + "debugMode", + "degrees", + "describe", + "describeElement", + "dist", + "ellipse", + "ellipseMode", + "endClip", + "endContour", + "endGeometry", + "endShape", + "erase", + "exp", + "fill", + "filter", + "float", + "floor", + "fract", + "frameRate", + "freeGeometry", + "get", + "getAudioContext", + "getURL", + "getURLParams", + "getURLPath", + "green", + "gridOutput", + "hex", + "hour", + "hue", + "image", + "imageMode", + "input", + "int", + "join", + "lerp", + "lerpColor", + "lightness", + "lights", + "line", + "loadFont", + "loadImage", + "loadPixels", + "log", + "loop", + "mag", + "map", + "match", + "matchAll", + "max", + "millis", + "min", + "minute", + "model", + "month", + "mousePressed", + "nf", + "nfc", + "nfp", + "nfs", + "noCanvas", + "noCursor", + "noErase", + "noFill", + "noLoop", + "noSmooth", + "noStroke", + "noTint", + "noise", + "noiseDetail", + "noiseSeed", + "pixelDensity", + "plane", + "point", + "pop", + "pow", + "print", + "push", + "quad", + "quadraticVertex", + "radians", + "random", + "randomSeed", + "rect", + "rectMode", + "red", + "reverse", + "rotate", + "rotateX", + "rotateY", + "round", + "saturation", + "saveCanvas", + "scale", + "second", + "select", + "selectAll", + "set", + "setAttributes", + "setCamera", + "setMoveThreshold", + "setShakeThreshold", + "shader", + "shorten", + "shuffle", + "sin", + "sort", + "splice", + "split", + "splitTokens", + "sq", + "sqrt", + "square", + "storeItem", + "str", + "stroke", + "strokeCap", + "strokeJoin", + "strokeWeight", + "subset", + "tan", + "text", + "textAlign", + "textAscent", + "textDescent", + "textFont", + "textLeading", + "textOutput", + "textSize", + "textStyle", + "textWidth", + "textWrap", + "tint", + "torus", + "translate", + "triangle", + "trim", + "unchar", + "unhex", + "updatePixels", + "vertex", + "year" + ], + "blacklist":[ + "draw", + "setup", + "preload" + ] + }, + "draw": { + "whitelist": [ + "abs", + "ambientLight", + "ambientMaterial", + "applyMatrix", + "arc", + "atan2", + "background", + "beginClip", + "beginContour", + "beginShape", + "bezier", + "bezierPoint", + "bezierVertex", + "box", + "camera", + "circle", + "clear", + "clearDepth", + "clip", + "color", + "cone", + "constrain", + "cos", + "createVector", + "cursor", + "curve", + "curvePoint", + "curveTightness", + "curveVertex", + "cylinder", + "describe", + "directionalLight", + "ellipse", + "ellipsoid", + "emissiveMaterial", + "endClip", + "endContour", + "endShape", + "exp", + "fill", + "filter", + "frameRate", + "frustum", + "getAudioContext", + "getItem", + "getTargetFrameRate", + "gridOutput", + "image", + "imageLight", + "keyIsDown", + "lerp", + "lightFalloff", + "lights", + "line", + "log", + "map", + "metalness", + "millis", + "model", + "noFill", + "noLights", + "noLoop", + "noStroke", + "noise", + "norm", + "normal", + "normalMaterial", + "orbitControl", + "ortho", + "paletteLerp", + "panorama", + "perspective", + "plane", + "point", + "pointLight", + "pop", + "push", + "quad", + "quadraticVertex", + "radians", + "random", + "randomGaussian", + "rect", + "resetMatrix", + "resetShader", + "rotate", + "rotateX", + "rotateY", + "rotateZ", + "scale", + "shader", + "shearX", + "shearY", + "shininess", + "sin", + "specularColor", + "specularMaterial", + "sphere", + "spotLight", + "sq", + "sqrt", + "square", + "stroke", + "strokeWeight", + "tan", + "text", + "textAlign", + "textFont", + "textOutput", + "textSize", + "texture", + "textureMode", + "textureWrap", + "tint", + "torus", + "translate", + "triangle", + "vertex" + ], + "blacklist":[ + "createCanvas", "let","const", "var", "loadJSON", "loadStrings","loadShader","loadTable","loadXML","save","draw", "setup", "preload" + ] + }, + "global": { + "whitelist": [ + "arrayCopy", + "createCanvas", + "createElement", + "createGraphics", + "createImage", + "describe", + "print", + "random", + "save", + "text", + "textAlign", + "textSize", + "let" + ] + }, + "mousePressed": { + "whitelist": [ + "background", + "circle", + "clear", + "displayDensity", + "dist", + "fill", + "fullscreen", + "httpPost", + "image", + "noStroke", + "pixelDensity", + "removeElements", + "resizeCanvas", + "saveFrames", + "setAttributes", + "stroke", + "strokeWeight", + "text", + "userStartAudio" + ] + }, + "preload": { + "whitelist": [ + "createConvolver", + "createVideo", + "httpDo", + "httpGet", + "loadBytes", + "loadFont", + "loadImage", + "loadJSON", + "loadModel", + "loadShader", + "loadSound", + "loadStrings", + "loadTable", + "loadXML", + "soundFormats" + ] + }, + "doubleClicked": { + "whitelist": [ + "clearStorage", + "createWriter", + "dist", + "exitPointerLock", + "fill", + "image", + "isLooping", + "linePerspective", + "loop", + "noDebugMode", + "noLoop", + "print", + "redraw", + "remove", + "removeElements", + "removeItem", + "requestPointerLock", + "resizeCanvas", + "saveJSON", + "saveStrings", + "setCamera" + ] + }, + "mouseReleased": { + "whitelist": [ + "fill", + "noStroke", + "setAttributes", + "stroke" + ] + }, + "mouseClicked": { + "whitelist": [ + "fill", + "strokeWeight" + ] + }, + "windowResized": { + "whitelist": [ + "resizeCanvas" + ] + }, + "keyPressed": { + "whitelist": [ + "saveFrames", + "saveGif" + ] + }, + "deviceMoved": { + "whitelist": [ + "setMoveThreshold", + "setShakeThreshold" + ] + }, + "touchStarted": { + "whitelist": [ + "random" + ] + }, + "touchEnded": { + "whitelist": [ + "random" + ] + } +} \ No newline at end of file diff --git a/client/modules/IDE/components/parseCode.js b/client/modules/IDE/components/parseCode.js new file mode 100644 index 0000000000..bcaaf9f0ac --- /dev/null +++ b/client/modules/IDE/components/parseCode.js @@ -0,0 +1,50 @@ +// parseCode.js +// import * as acorn from 'acorn'; +// import * as walk from 'acorn-walk'; +const acorn = require('acorn'); +const walk = require('acorn-walk'); + +export default function parseCode(_cm) { + const code = _cm.getValue(); + const cursor = _cm.getCursor(); + const offset = _cm.indexFromPos(cursor); + + let ast; + try { + ast = acorn.parse(code, { + ecmaVersion: 'latest', + sourceType: 'script' + }); + } catch (e) { + console.warn('Failed to parse code', e.message); + return 'global'; + } + + let context = 'global'; + + walk.fullAncestor(ast, (node, ancestors) => { + if ( + node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression' || + node.type === 'ArrowFunctionExpression' + ) { + if (offset >= node.start && offset <= node.end) { + if (node.id && node.id.name) { + context = node.id.name; + } else { + const parent = ancestors[ancestors.length - 2]; + if ( + parent?.type === 'VariableDeclarator' && + parent.id.type === 'Identifier' + ) { + context = parent.id.name; + } else { + context = '(anonymous)'; + } + } + } + } + }); + + return context; +} From 9c4bc52acdf0a3a431ed50d13694d06c96028b09 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Thu, 5 Jun 2025 17:18:21 +0530 Subject: [PATCH 02/28] context-aware hinter code --- .../modules/IDE/components/Editor/index.jsx | 35 ++++++---- client/modules/IDE/components/show-hint.js | 66 +++++++++++++++---- 2 files changed, 76 insertions(+), 25 deletions(-) diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 90a0b450fb..cce09bd721 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -73,6 +73,8 @@ import { EditorContainer, EditorHolder } from './MobileEditor'; import { FolderIcon } from '../../../../common/icons'; import IconButton from '../../../../common/IconButton'; +import contextAwareHinter from '../contextAwareHinter'; + emmet(CodeMirror); window.JSHINT = JSHINT; @@ -462,22 +464,27 @@ class Editor extends React.Component { // JavaScript CodeMirror.showHint( _cm, - () => { - const c = _cm.getCursor(); - const token = _cm.getTokenAt(c); - - const hints = this.hinter - .search(token.string) - .filter((h) => h.item.text[0] === token.string[0]); - - return { - list: hints, - from: CodeMirror.Pos(c.line, token.start), - to: CodeMirror.Pos(c.line, c.ch) - }; - }, + (cm, options) => contextAwareHinter(cm, { hinter: this.hinter }), hintOptions ); + // CodeMirror.showHint( + // _cm, + // () => { + // const c = _cm.getCursor(); + // const token = _cm.getTokenAt(c); + + // const hints = this.hinter + // .search(token.string) + // .filter((h) => h.item.text[0] === token.string[0]); + + // return { + // list: hints, + // from: CodeMirror.Pos(c.line, token.start), + // to: CodeMirror.Pos(c.line, c.ch) + // }; + // }, + // hintOptions + // ); } else if (_cm.options.mode === 'css') { // CSS CodeMirror.showHint(_cm, CodeMirror.hint.css, hintOptions); diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 99f7552006..79da770057 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -7,6 +7,11 @@ // declare global: DOMRect +// The first function (mod) is a wrapper to support different JavaScript environments. +// The second function (inside) contains the actual implementation. +import parseCode from './parseCode'; +import CodeMirror from 'codemirror'; + (function (mod) { if (typeof exports == 'object' && typeof module == 'object') // CommonJS @@ -16,6 +21,8 @@ define(['codemirror'], mod); // Plain browser env else mod(CodeMirror); + + // This part uptill here makes the code compatible with multiple JavaScript environments, so it can run in different places })(function (CodeMirror) { 'use strict'; @@ -25,16 +32,23 @@ // This is the old interface, kept around for now to stay // backwards-compatible. CodeMirror.showHint = function (cm, getHints, options) { - if (!getHints) return cm.showHint(options); + console.log('showhint was called: ', getHints, options); + if (!getHints) return cm.showHint(options); // if not getHints function passed, it assumes youre using the newer interface + // restructured options to call the new c.showHint() method if (options && options.async) getHints.async = true; var newOpts = { hint: getHints }; if (options) for (var prop in options) newOpts[prop] = options[prop]; + console.log('newopts: ', newOpts); + const context = parseCode(cm); + console.log('Cursor context =', context); return cm.showHint(newOpts); }; + // this adds a method called showHint to every cm editor instance (editor.showHint()) CodeMirror.defineExtension('showHint', function (options) { options = parseOptions(this, this.getCursor('start'), options); var selections = this.listSelections(); + console.log('selections are: ', selections); if (selections.length > 1) return; // By default, don't allow completion when something is selected. // A hint function can have a `supportsSelection` property to @@ -42,18 +56,20 @@ if (this.somethingSelected()) { if (!options.hint.supportsSelection) return; // Don't try with cross-line selections + // if selection spans multiple lines, bail out for (var i = 0; i < selections.length; i++) if (selections[i].head.line != selections[i].anchor.line) return; } - if (this.state.completionActive) this.state.completionActive.close(); + if (this.state.completionActive) this.state.completionActive.close(); // close an already active autocomplete session if active + // create a new completion object and saves it to this.state.completionActive var completion = (this.state.completionActive = new Completion( this, options )); - if (!completion.options.hint) return; + if (!completion.options.hint) return; // safety check to ensure hint is valid - CodeMirror.signal(this, 'startCompletion', this); + CodeMirror.signal(this, 'startCompletion', this); // emits a signal; fires a startCompletion event on editor instance completion.update(true); }); @@ -61,19 +77,22 @@ if (this.state.completionActive) this.state.completionActive.close(); }); + // defines a constructor function function Completion(cm, options) { this.cm = cm; this.options = options; - this.widget = null; + this.widget = null; // will hold a reference to the dropdown menu that shows suggestions this.debounce = 0; this.tick = 0; - this.startPos = this.cm.getCursor('start'); + this.startPos = this.cm.getCursor('start'); // startPos is a {line,ch} object used to remember where hinting started + // startLen is the len of the line minus length of any selected text this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; if (this.options.updateOnCursorActivity) { - var self = this; + var self = this; // stores ref to this as self so it can be accessed inside the nested function + // adds an event listener to the editor; called when the cursor moves cm.on( 'cursorActivity', (this.activityFunc = function () { @@ -95,12 +114,14 @@ if (!this.active()) return; this.cm.state.completionActive = null; this.tick = null; + // removes the current activity listener if (this.options.updateOnCursorActivity) { this.cm.off('cursorActivity', this.activityFunc); } - + // signals and removes the widget if (this.widget && this.data) CodeMirror.signal(this.data, 'close'); if (this.widget) this.widget.close(); + // emits a completition end event CodeMirror.signal(this.cm, 'endCompletion', this.cm); }, @@ -109,6 +130,7 @@ }, pick: function (data, i) { + // selects an item from the suggestion list var completion = data.list[i], self = this; this.cm.operation(function () { @@ -120,15 +142,18 @@ completion.to || data.to, 'complete' ); + // signals that a hint was picked and scrolls to it CodeMirror.signal(data, 'pick', completion); self.cm.scrollIntoView(); }); + // closes widget if closeOnPick is enabled if (this.options.closeOnPick) { this.close(); } }, cursorActivity: function () { + // if a debounce is scheduled, cancel it to avoid outdated updates if (this.debounce) { cancelAnimationFrame(this.debounce); this.debounce = 0; @@ -149,6 +174,7 @@ !pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)) ) { + console.log('this.close called'); this.close(); } else { var self = this; @@ -192,6 +218,7 @@ function parseOptions(cm, pos, options) { var editor = cm.options.hintOptions; var out = {}; + // copies all default hint settings into out for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; if (editor) for (var prop in editor) @@ -200,14 +227,16 @@ for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop]; if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); + console.log('out is ', out); return out; } - + // extracts the visible text from a completion entry function getText(completion) { if (typeof completion === 'string') return completion; else return completion.item.text; } + // builds a key mapping object to define keyboard behavior for autocomplete function buildKeyMap(completion, handle) { var baseMap = { Up: function () { @@ -232,7 +261,7 @@ Tab: handle.pick, Esc: handle.close }; - + // checks if the user is on macOS and adds shortcuts accordingly var mac = /Mac/.test(navigator.platform); if (mac) { @@ -244,6 +273,7 @@ }; } + // user defined custom key bindings var custom = completion.options.customKeys; var ourMap = custom ? {} : baseMap; function addBinding(key, val) { @@ -257,6 +287,7 @@ else bound = val; ourMap[key] = bound; } + // apply all custom key bindings and extraKeys if (custom) for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); @@ -267,15 +298,20 @@ return ourMap; } + // hintsElement is the parent for hints and el is the clicked element within that container function getHintElement(hintsElement, el) { + console.log('el is ', el); while (el && el != hintsElement) { - if (el.nodeName.toUpperCase() === 'LI' && el.parentNode == hintsElement) + if (el.nodeName.toUpperCase() === 'LI' && el.parentNode == hintsElement) { + console.log('new el is ', el); return el; + } el = el.parentNode; } } function displayHint(name, type, p5) { + console.log('name is', name, type, p5); return `

\ ${name}\ , \ @@ -293,7 +329,9 @@ ${ } function getInlineHintSuggestion(focus, tokenLength) { + console.log('the focus is: ', focus, tokenLength); const suggestionItem = focus.item; + // builds the remainder of the suggestion excluding what user already typed const baseCompletion = `${suggestionItem.text.slice( tokenLength )}`; @@ -310,6 +348,7 @@ ${ ); } + // clears existing inline hint (like the part is suggested) function removeInlineHint(cm) { if (cm.state.inlineHint) { cm.state.inlineHint.clear(); @@ -341,7 +380,12 @@ ${ } } + // defines the autocomplete dropdown ui + // completition = the autocomplete context having cm and options + // data = object with the list of suggestions function Widget(completion, data) { + console.log('widget completetition= ', completion); + console.log('widget data= ', data); this.id = 'cm-complete-' + Math.floor(Math.random(1e6)); this.completion = completion; this.data = data; From cf71058959f3691c2cf10b77cadc935ed34c10c1 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sun, 8 Jun 2025 12:30:20 +0530 Subject: [PATCH 03/28] parse code with babel and warn when blacklisted function focused --- .../modules/IDE/components/Editor/index.jsx | 18 ++++++-- client/modules/IDE/components/parseCode.js | 3 -- .../modules/IDE/components/parseCodeBabel.js | 46 +++++++++++++++++++ client/modules/IDE/components/show-hint.js | 32 +++++++++---- client/modules/IDE/components/warn.js | 19 ++++++++ 5 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 client/modules/IDE/components/parseCodeBabel.js create mode 100644 client/modules/IDE/components/warn.js diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index cce09bd721..494d7c2052 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -464,19 +464,31 @@ class Editor extends React.Component { // JavaScript CodeMirror.showHint( _cm, - (cm, options) => contextAwareHinter(cm, { hinter: this.hinter }), + () => { + const c = _cm.getCursor(); + const token = _cm.getTokenAt(c); + const hints = contextAwareHinter(_cm, { hinter: this.hinter }); + console.log('hints= ', hints); + return { + list: hints, + from: CodeMirror.Pos(c.line, token.start), + to: CodeMirror.Pos(c.line, c.ch) + }; + }, hintOptions ); + // CodeMirror.showHint( // _cm, // () => { // const c = _cm.getCursor(); // const token = _cm.getTokenAt(c); - // const hints = this.hinter // .search(token.string) // .filter((h) => h.item.text[0] === token.string[0]); - + // console.log('c= ', c); + // console.log('token= ', token); + // console.log('hints= ', hints); // return { // list: hints, // from: CodeMirror.Pos(c.line, token.start), diff --git a/client/modules/IDE/components/parseCode.js b/client/modules/IDE/components/parseCode.js index bcaaf9f0ac..dc066b9ae2 100644 --- a/client/modules/IDE/components/parseCode.js +++ b/client/modules/IDE/components/parseCode.js @@ -1,6 +1,3 @@ -// parseCode.js -// import * as acorn from 'acorn'; -// import * as walk from 'acorn-walk'; const acorn = require('acorn'); const walk = require('acorn-walk'); diff --git a/client/modules/IDE/components/parseCodeBabel.js b/client/modules/IDE/components/parseCodeBabel.js new file mode 100644 index 0000000000..14e50d2e14 --- /dev/null +++ b/client/modules/IDE/components/parseCodeBabel.js @@ -0,0 +1,46 @@ +// parseCodeWithBabel.js +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; + +export default function parseCode(_cm) { + const code = _cm.getValue(); + const cursor = _cm.getCursor(); + const offset = _cm.indexFromPos(cursor); + + let ast; + try { + ast = parser.parse(code, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] // add plugins as needed + }); + } catch (e) { + console.warn('Failed to parse code with Babel:', e.message); + return 'global'; + } + + let context = 'global'; + + traverse(ast, { + Function(path) { + const { node } = path; + if (offset >= node.start && offset <= node.end) { + if (node.id && node.id.name) { + context = node.id.name; + } else { + const parent = path.parentPath.node; + if ( + parent.type === 'VariableDeclarator' && + parent.id.type === 'Identifier' + ) { + context = parent.id.name; + } else { + context = '(anonymous)'; + } + } + path.stop(); // Stop traversal once we found the function context + } + } + }); + + return context; +} diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 79da770057..ed08af3e1e 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -11,6 +11,7 @@ // The second function (inside) contains the actual implementation. import parseCode from './parseCode'; import CodeMirror from 'codemirror'; +import warnIfBlacklisted from './warn'; (function (mod) { if (typeof exports == 'object' && typeof module == 'object') @@ -32,7 +33,7 @@ import CodeMirror from 'codemirror'; // This is the old interface, kept around for now to stay // backwards-compatible. CodeMirror.showHint = function (cm, getHints, options) { - console.log('showhint was called: ', getHints, options); + console.log('showhint was called: ', cm, getHints, options); if (!getHints) return cm.showHint(options); // if not getHints function passed, it assumes youre using the newer interface // restructured options to call the new c.showHint() method if (options && options.async) getHints.async = true; @@ -47,6 +48,7 @@ import CodeMirror from 'codemirror'; // this adds a method called showHint to every cm editor instance (editor.showHint()) CodeMirror.defineExtension('showHint', function (options) { options = parseOptions(this, this.getCursor('start'), options); + console.log('options are: '); var selections = this.listSelections(); console.log('selections are: ', selections); if (selections.length > 1) return; @@ -131,17 +133,27 @@ import CodeMirror from 'codemirror'; pick: function (data, i) { // selects an item from the suggestion list + console.log('data, i= ', data, i); var completion = data.list[i], self = this; + this.cm.operation(function () { - if (completion.hint) completion.hint(self.cm, data, completion); - else + // this is how cm allows custom behavior per suggestion + // if hint is provided on a hint object, it will be called instead of the default replace range + const name = completion.item?.text; + if (name) warnIfBlacklisted(self.cm, name); + + if (completion.hint) { + completion.hint(self.cm, data, completion); + } else { + console.log('gettext(C)= ', getText(completion)); self.cm.replaceRange( getText(completion), completion.from || data.from, completion.to || data.to, 'complete' ); + } // signals that a hint was picked and scrolls to it CodeMirror.signal(data, 'pick', completion); self.cm.scrollIntoView(); @@ -232,6 +244,7 @@ import CodeMirror from 'codemirror'; } // extracts the visible text from a completion entry function getText(completion) { + console.log('gettext called'); if (typeof completion === 'string') return completion; else return completion.item.text; } @@ -328,8 +341,10 @@ ${ }

`; } - function getInlineHintSuggestion(focus, tokenLength) { - console.log('the focus is: ', focus, tokenLength); + function getInlineHintSuggestion(cm, focus, tokenLength) { + const name = focus.item?.text; + console.log('the focus is: ', focus, name); + if (name) warnIfBlacklisted(cm, name); const suggestionItem = focus.item; // builds the remainder of the suggestion excluding what user already typed const baseCompletion = `${suggestionItem.text.slice( @@ -365,6 +380,7 @@ ${ if (token && focus.item) { const suggestionHTML = getInlineHintSuggestion( + cm, focus, token.string.length ); @@ -380,8 +396,8 @@ ${ } } - // defines the autocomplete dropdown ui - // completition = the autocomplete context having cm and options + // defines the autocomplete dropdown ui; renders the suggestions + // completion = the autocomplete context having cm and options // data = object with the list of suggestions function Widget(completion, data) { console.log('widget completetition= ', completion); @@ -409,7 +425,6 @@ ${ changeInlineHint(cm, data.list[this.selectedHint]); var completions = data.list; - for (var i = 0; i < completions.length; ++i) { var elt = hints.appendChild(ownerDocument.createElement('li')), cur = completions[i]; @@ -427,6 +442,7 @@ ${ const name = getText(cur); if (cur.item && cur.item.type) { + console.log('display hint calllllled'); cur.displayText = displayHint(name, cur.item.type, cur.item.p5); } diff --git a/client/modules/IDE/components/warn.js b/client/modules/IDE/components/warn.js new file mode 100644 index 0000000000..78ffe5e7a4 --- /dev/null +++ b/client/modules/IDE/components/warn.js @@ -0,0 +1,19 @@ +import parseCode from './parseCode'; + +const scopeMap = require('./finalScopeMap.json'); + +/** + * Checks if a completion is blacklisted in the current context and logs a warning if so. + * @param {CodeMirror.Editor} cm - The CodeMirror instance + * @param {string} text - The name of the selected function + */ +export default function warnIfBlacklisted(cm, text) { + const context = parseCode(cm); + const blacklist = scopeMap[context]?.blacklist || []; + + if (blacklist.includes(text)) { + console.warn( + `⚠️ Function "${text}" is usually not used in "${context}" context. Please be careful.` + ); + } +} From e8bf7526a3aa442c1c2bfee95743ebe9e9401def Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Fri, 13 Jun 2025 12:41:22 +0530 Subject: [PATCH 04/28] updated the hinter to suggest class methods --- .../components/class-with-methods-map.json | 661 +++++++ .../IDE/components/contextAwareHinter.js | 193 +- .../IDE/components/parseCodeVariables.js | 64 + client/modules/IDE/components/show-hint.js | 120 +- client/modules/IDE/components/warn.js | 4 +- client/styles/components/_hints.scss | 58 +- client/utils/p5-hinter.js | 1733 ++++++++++++++++- 7 files changed, 2729 insertions(+), 104 deletions(-) create mode 100644 client/modules/IDE/components/class-with-methods-map.json create mode 100644 client/modules/IDE/components/parseCodeVariables.js diff --git a/client/modules/IDE/components/class-with-methods-map.json b/client/modules/IDE/components/class-with-methods-map.json new file mode 100644 index 0000000000..2e96ed4205 --- /dev/null +++ b/client/modules/IDE/components/class-with-methods-map.json @@ -0,0 +1,661 @@ +{ + "p5.Color": { + "createMethods": [ + "color", + "p5.Color" + ], + "methods": [ + "setAlpha", + "setBlue", + "setGreen", + "setRed", + "toString" + ] + }, + "p5.Geometry": { + "createMethods": [ + "beginGeometry", + "buildGeometry", + "endGeometry", + "freeGeometry", + "loadModel" + ], + "methods": [ + "calculateBoundingBox", + "clearColors", + "computeFaces", + "computeNormals", + "faces", + "flipU", + "flipV", + "normalize", + "saveObj", + "saveStl", + "uvs", + "vertexNormals", + "vertices" + ] + }, + "p5.MediaElement": { + "createMethods": [ + "createAudio", + "createCapture", + "createVideo", + "p5.MediaElement" + ], + "methods": [ + "addCue", + "autoplay", + "clearCues", + "connect", + "disconnect", + "duration", + "hideControls", + "loop", + "noLoop", + "onended", + "pause", + "play", + "removeCue", + "showControls", + "speed", + "src", + "stop", + "time", + "volume" + ] + }, + "p5.Camera": { + "createMethods": [ + "createCamera", + "p5.Camera" + ], + "methods": [ + "camera", + "centerX", + "centerY", + "centerZ", + "eyeX", + "eyeY", + "eyeZ", + "frustum", + "lookAt", + "move", + "ortho", + "pan", + "perspective", + "roll", + "set", + "setPosition", + "slerp", + "tilt", + "upX", + "upY", + "upZ" + ] + }, + "p5.Element": { + "createMethods": [ + "createCheckbox", + "createColorPicker", + "createElement", + "createImg", + "createRadio", + "createSelect", + "p5.Element", + "select", + "selectAll" + ], + "methods": [ + "addClass", + "attribute", + "center", + "child", + "class", + "doubleClicked", + "dragLeave", + "dragOver", + "draggable", + "drop", + "elt", + "hasClass", + "height", + "hide", + "html", + "id", + "mouseClicked", + "mouseMoved", + "mouseOut", + "mouseOver", + "mousePressed", + "mouseReleased", + "mouseWheel", + "parent", + "position", + "remove", + "removeAttribute", + "removeClass", + "show", + "size", + "style", + "toggleClass", + "touchEnded", + "touchMoved", + "touchStarted", + "value", + "width" + ] + }, + "p5.File": { + "createMethods": [ + "createFileInput", + "p5.File" + ], + "methods": [ + "data", + "file", + "name", + "size", + "subtype", + "type" + ] + }, + "p5.Shader": { + "createMethods": [ + "createFilterShader", + "createShader", + "loadShader", + "p5.Shader", + "shader" + ], + "methods": [ + "copyToContext", + "inspectHooks", + "modify", + "setUniform" + ] + }, + "p5.Framebuffer": { + "createMethods": [ + "createFramebuffer", + "p5.Framebuffer" + ], + "methods": [ + "autoSized", + "begin", + "color", + "createCamera", + "depth", + "draw", + "end", + "get", + "loadPixels", + "pixelDensity", + "pixels", + "remove", + "resize", + "updatePixels" + ] + }, + "p5.Graphics": { + "createMethods": [ + "createGraphics", + "p5.Graphics" + ], + "methods": [ + "createFramebuffer", + "remove", + "reset" + ] + }, + "p5.Image": { + "createMethods": [ + "createImage", + "get", + "loadImage", + "p5.Image" + ], + "methods": [ + "blend", + "copy", + "delay", + "filter", + "get", + "getCurrentFrame", + "height", + "loadPixels", + "mask", + "numFrames", + "pause", + "pixelDensity", + "pixels", + "play", + "reset", + "resize", + "save", + "set", + "setFrame", + "updatePixels", + "width" + ] + }, + "p5.NumberDict": { + "createMethods": [ + "createNumberDict" + ], + "methods": [ + "add", + "div", + "maxKey", + "maxValue", + "minKey", + "minValue", + "mult", + "sub" + ] + }, + "p5.StringDict": { + "createMethods": [ + "createStringDict" + ], + "methods": [] + }, + "p5.Vector": { + "createMethods": [ + "createVector", + "p5.Vector" + ], + "methods": [ + "add", + "angleBetween", + "array", + "clampToZero", + "copy", + "cross", + "dist", + "div", + "dot", + "equals", + "fromAngle", + "fromAngles", + "heading", + "lerp", + "limit", + "mag", + "magSq", + "mult", + "normalize", + "random2D", + "random3D", + "reflect", + "rem", + "rotate", + "set", + "setHeading", + "setMag", + "slerp", + "sub", + "toString", + "x", + "y", + "z" + ] + }, + "p5.PrintWriter": { + "createMethods": [ + "createWriter", + "p5.PrintWriter" + ], + "methods": [ + "clear", + "close", + "print", + "write" + ] + }, + "p5.Font": { + "createMethods": [ + "loadFont" + ], + "methods": [ + "font", + "textBounds", + "textToPoints" + ] + }, + "p5.Table": { + "createMethods": [ + "loadTable" + ], + "methods": [ + "addColumn", + "addRow", + "clearRows", + "columns", + "findRow", + "findRows", + "get", + "getArray", + "getColumn", + "getColumnCount", + "getNum", + "getObject", + "getRow", + "getRowCount", + "getRows", + "getString", + "matchRow", + "matchRows", + "removeColumn", + "removeRow", + "removeTokens", + "rows", + "set", + "setNum", + "setString", + "trim" + ] + }, + "p5.XML": { + "createMethods": [ + "loadXML" + ], + "methods": [ + "addChild", + "getAttributeCount", + "getChild", + "getChildren", + "getContent", + "getName", + "getNum", + "getParent", + "getString", + "hasAttribute", + "hasChildren", + "listAttributes", + "listChildren", + "removeChild", + "serialize", + "setAttribute", + "setContent", + "setName" + ] + }, + "p5.Envelope": { + "createMethods": [], + "methods": [ + "add", + "attackLevel", + "attackTime", + "decayLevel", + "decayTime", + "mult", + "play", + "ramp", + "releaseLevel", + "releaseTime", + "scale", + "set", + "setADSR", + "setExp", + "setInput", + "setRange", + "triggerAttack", + "triggerRelease" + ] + }, + "p5.FFT": { + "createMethods": [], + "methods": [ + "analyze", + "getCentroid", + "getEnergy", + "getOctaveBands", + "linAverages", + "logAverages", + "setInput", + "smooth", + "waveform" + ] + }, + "p5.Filter": { + "createMethods": [], + "methods": [ + "biquadFilter", + "freq", + "gain", + "process", + "res", + "set", + "setType", + "toggle" + ] + }, + "p5.Gain": { + "createMethods": [], + "methods": [ + "amp", + "connect", + "disconnect", + "setInput" + ] + }, + "p5.MonoSynth": { + "createMethods": [], + "methods": [ + "amp", + "attack", + "connect", + "disconnect", + "dispose", + "play", + "setADSR", + "triggerAttack", + "triggerRelease" + ] + }, + "p5.Noise": { + "createMethods": [], + "methods": [ + "setType" + ] + }, + "p5.Oscillator": { + "createMethods": [], + "methods": [ + "add", + "amp", + "connect", + "disconnect", + "freq", + "getAmp", + "getFreq", + "getPan", + "getType", + "mult", + "pan", + "phase", + "scale", + "setType", + "start", + "stop" + ] + }, + "p5.Panner3D": { + "createMethods": [], + "methods": [ + "maxDist", + "orient", + "orientX", + "orientY", + "orientZ", + "panner", + "positionX", + "positionY", + "positionZ", + "process", + "rollof", + "set", + "setFalloff" + ] + }, + "p5.Part": { + "createMethods": [], + "methods": [ + "addPhrase", + "getBPM", + "getPhrase", + "loop", + "noLoop", + "onStep", + "pause", + "removePhrase", + "replaceSequence", + "setBPM", + "start", + "stop" + ] + }, + "p5.PeakDetect": { + "createMethods": [], + "methods": [ + "onPeak", + "update" + ] + }, + "p5.Phrase": { + "createMethods": [], + "methods": [ + "sequence" + ] + }, + "p5.PolySynth": { + "createMethods": [], + "methods": [ + "AudioVoice", + "connect", + "disconnect", + "dispose", + "noteADSR", + "noteAttack", + "noteRelease", + "notes", + "play", + "polyvalue", + "setADSR" + ] + }, + "p5.Pulse": { + "createMethods": [], + "methods": [ + "width" + ] + }, + "p5.Reverb": { + "createMethods": [], + "methods": [ + "amp", + "connect", + "disconnect", + "process", + "set" + ] + }, + "p5.Score": { + "createMethods": [], + "methods": [ + "loop", + "noLoop", + "pause", + "setBPM", + "start", + "stop" + ] + }, + "p5.SoundFile": { + "createMethods": [], + "methods": [ + "addCue", + "channels", + "clearCues", + "connect", + "currentTime", + "disconnect", + "duration", + "frames", + "getBlob", + "getPan", + "getPeaks", + "isLoaded", + "isLooping", + "isPaused", + "isPlaying", + "jump", + "loop", + "onended", + "pan", + "pause", + "play", + "playMode", + "rate", + "removeCue", + "reverseBuffer", + "sampleRate", + "save", + "setBuffer", + "setLoop", + "setPath", + "setVolume", + "stop" + ] + }, + "p5.SoundLoop": { + "createMethods": [], + "methods": [ + "bpm", + "interval", + "iterations", + "maxIterations", + "musicalTimeMode", + "pause", + "start", + "stop", + "syncedStart", + "timeSignature" + ] + }, + "p5.SoundRecorder": { + "createMethods": [], + "methods": [ + "record", + "setInput", + "stop" + ] + }, + "p5.TableRow": { + "createMethods": [], + "methods": [ + "get", + "getNum", + "getString", + "set", + "setNum", + "setString" + ] + }, + "p5.TypedDict": { + "createMethods": [], + "methods": [ + "clear", + "create", + "get", + "hasKey", + "print", + "remove", + "saveJSON", + "saveTable", + "set", + "size" + ] + } +} \ No newline at end of file diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index ac4ca6452c..0a4b08e9f8 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -1,100 +1,161 @@ import CodeMirror from 'codemirror'; import parseCode from './parseCode'; +import parseCodeVars from './parseCodeVariables'; +import classMap from './class-with-methods-map.json'; const scopeMap = require('./finalScopeMap.json'); +function formatHintDisplay(name, isBlacklisted) { + return ` +
+ ${name} + ${ + isBlacklisted + ? `
⚠️ "${name}" is discouraged in this context.
` + : '' + } +
+ `; +} + +function getExpressionBeforeCursor(cm) { + const cursor = cm.getCursor(); + const line = cm.getLine(cursor.line); + const uptoCursor = line.slice(0, cursor.ch); + console.log('the line is: ', line); + console.log('the line uptocursor is: ', uptoCursor); + + const match = uptoCursor.match( + /([a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*)\.(?:[a-zA-Z_$][\w$]*)?$/ + ); + return match ? match[1] : null; +} + export default function contextAwareHinter(cm, options = {}) { + const variableTypes = parseCodeVars(cm); + console.log('var types= ', variableTypes); + const { hinter } = options; if (!hinter || typeof hinter.search !== 'function') { console.warn('Hinter is not available or invalid.'); - return { list: [], from: cm.getCursor(), to: cm.getCursor() }; + return []; } - const { line, ch } = cm.getCursor(); // getCursor has line, ch, sticky - console.log('cm.getcursor ', cm.getCursor()); - const { start, end, string } = cm.getTokenAt({ line, ch }); - // console.log('cm.gettokenat', cm.getTokenAt()); + const baseExpression = getExpressionBeforeCursor(cm); + const className = variableTypes[baseExpression]; // e.g., p5.XML + console.log('base expression is= ', baseExpression); + + // If we're completing after a dot + if (baseExpression && className) { + console.log('Detected object expression:', baseExpression); + + console.log('Class of', baseExpression, '=', className); + + const methods = classMap[className]?.methods || []; + console.log('Available methods for class:', methods); + + const cursor = cm.getCursor(); + const lineText = cm.getLine(cursor.line); + const dotMatch = lineText + .slice(0, cursor.ch) + .match(/\.([a-zA-Z_$][\w$]*)?$/); + + let from = cursor; + if (dotMatch) { + const fullMatch = dotMatch[0]; + const methodStart = cursor.ch - fullMatch.length + 1; // +1 to skip the dot itself + from = { line: cursor.line, ch: methodStart }; + } else { + from = cursor; + } + + console.log('fromm, dotmatch= ', from, dotMatch); + + const to = { line: cursor.line, ch: cursor.ch }; + let tokenLength = 0; + if (dotMatch) { + const typed = dotMatch[1] || ''; // what's typed after the dot + tokenLength = typed.length; + } + + const typed = dotMatch?.[1]?.toLowerCase() || ''; + + const methodHints = methods + .filter((method) => method.toLowerCase().startsWith(typed)) + .map((method) => ({ + item: { + text: method, + type: 'fun' + }, + displayText: method, + from, + to + })); + + return methodHints; + } + + const { line, ch } = cm.getCursor(); + const { string } = cm.getTokenAt({ line, ch }); const currentWord = string.trim(); - console.log('currentwork ', currentWord); + console.log('current word= ', currentWord); + + const context = parseCode(cm); + const allHints = hinter.search(currentWord); - const context = parseCode(cm); // e.g. 'draw' - const allHints = hinter.search(currentWord); // <- from options, not cm.hinter const whitelist = scopeMap[context]?.whitelist || []; const blacklist = scopeMap[context]?.blacklist || []; - console.log('allhints: ', allHints); - // for each hint, only keep ones that match the typed prefix + const lowerCurrentWord = currentWord.toLowerCase(); + const filteredHints = allHints .filter( (h) => h && h.item && typeof h.item.text === 'string' && - h.item.text.startsWith(currentWord) + h.item.text.toLowerCase().startsWith(lowerCurrentWord) ) - .map((h) => { - const name = h.item.text; - const isWhitelisted = whitelist.includes(name); + .map((hint) => { + const name = hint.item?.text || ''; const isBlacklisted = blacklist.includes(name); - const from = CodeMirror.Pos(line, start); - const to = CodeMirror.Pos(line, end); - - let className = ''; - if (isBlacklisted) { - className = 'blacklisted-hint'; - } else if (isWhitelisted) { - className = 'whitelisted-hint'; - } - return { - text: name, // Ensure `text` is explicitly defined - displayText: h.item.displayText || name, - className, - from, - to, - render: (el, self, data) => { - el.innerText = data.text; - if (isBlacklisted) { - el.style.color = 'red'; - el.style.opacity = 0.6; - } else if (isWhitelisted) { - el.style.fontWeight = 'bold'; - } - }, - hint: (editor, data, completion) => { - const { from: fromPos, to: toPos } = completion; - - if (!completion.text || typeof completion.text !== 'string') { - console.error('Invalid completion.text:', completion); - return; - } - - editor.replaceRange(completion.text, fromPos, toPos); - - if (blacklist.includes(completion.text)) { - console.warn( - `Using "${completion.text}" inside "${context}" is not recommended.` - ); - } - } + ...hint, + isBlacklisted, + displayText: formatHintDisplay(name, isBlacklisted) }; }); - console.log('filtered hints: ', filteredHints); + const typePriority = { + fun: 0, + var: 1, + keyword: 2, + other: 3 + }; const sorted = filteredHints.sort((a, b) => { - const score = (name) => { - if (whitelist.includes(name)) return 0; - if (blacklist.includes(name)) return 2; - return 1; - }; - return score(a.text) - score(b.text) || a.text.localeCompare(b.text); + const nameA = a.item?.text || ''; + const nameB = b.item?.text || ''; + const typeA = a.item?.type || 'other'; + const typeB = b.item?.type || 'other'; + + const isBlacklistedA = a.isBlacklisted ? 1 : 0; + const isBlacklistedB = b.isBlacklisted ? 1 : 0; + + const typeScoreA = typePriority[typeA] ?? typePriority.other; + const typeScoreB = typePriority[typeB] ?? typePriority.other; + + if (isBlacklistedA !== isBlacklistedB) { + return isBlacklistedA - isBlacklistedB; + } + + if (typeScoreA !== typeScoreB) { + return typeScoreA - typeScoreB; + } + + return nameA.localeCompare(nameB); }); - return { - list: sorted, - from: CodeMirror.Pos(line, start), - to: CodeMirror.Pos(line, end) - }; + return sorted; } diff --git a/client/modules/IDE/components/parseCodeVariables.js b/client/modules/IDE/components/parseCodeVariables.js new file mode 100644 index 0000000000..c7a29f0e68 --- /dev/null +++ b/client/modules/IDE/components/parseCodeVariables.js @@ -0,0 +1,64 @@ +import * as acorn from 'acorn'; +import * as walk from 'acorn-walk'; +import classMap from './class-with-methods-map.json'; + +const functionToClass = {}; + +Object.entries(classMap).forEach(([className, classData]) => { + const createMethods = classData.createMethods || []; + createMethods.forEach((fnName) => { + functionToClass[fnName] = className; + }); +}); + +export default function parseCodeVariables(_cm) { + const code = _cm.getValue(); + let ast; + + try { + ast = acorn.parse(code, { + ecmaVersion: 'latest', + sourceType: 'script' + }); + } catch (e) { + console.warn('Failed to parse code', e.message); + return {}; + } + + const variableMap = {}; + + walk.simple(ast, { + AssignmentExpression(node) { + if ( + node.left.type === 'Identifier' && + node.right.type === 'CallExpression' && + node.right.callee.type === 'Identifier' + ) { + const varName = node.left.name; + const fnName = node.right.callee.name; + const cls = functionToClass[fnName]; + if (cls) { + variableMap[varName] = cls; + } + } + }, + + VariableDeclarator(node) { + if ( + node.id.type === 'Identifier' && + node.init?.type === 'CallExpression' && + node.init.callee.type === 'Identifier' + ) { + const varName = node.id.name; + const fnName = node.init.callee.name; + const cls = functionToClass[fnName]; + if (cls) { + variableMap[varName] = cls; + } + } + } + }); + console.log('varmap= ', variableMap); + + return variableMap; +} diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index ed08af3e1e..308dbd6bed 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -198,6 +198,7 @@ import warnIfBlacklisted from './warn'; }, update: function (first) { + console.log('update called'); if (this.tick == null) return; var self = this, myTick = ++this.tick; @@ -323,22 +324,56 @@ import warnIfBlacklisted from './warn'; } } - function displayHint(name, type, p5) { - console.log('name is', name, type, p5); - return `

\ -${name}\ -, \ -${type}\ -, \ -${ - p5 - ? `\ -open ${name} reference\ -` - : `no reference for ${name}` -}

`; + // function displayHint(name, type, p5, isBlacklistedFunction) { + // console.log('name is', name, type, p5, isBlacklistedFunction); + // return `

\ + // ${name}\ + // , \ + // ${type}\ + // , \ + // ${ + // p5 + // ? `\ + // open ${name} reference\ + // ` + // : `no reference for ${name}` + // }

`; + // } + + function displayHint(name, type, p5, isBlacklistedFunction) { + console.log('name is', name, type, p5, isBlacklistedFunction); + + const linkOrPlaceholder = p5 + ? ` + open ${name} reference + + ` + : ` + no reference for ${name} + `; + + const hintHTML = ` +
+ ${name} + ${type} + ${linkOrPlaceholder} +
+ `; + + const warningHTML = isBlacklistedFunction + ? `
⚠️ Be careful — this function is discouraged in this context.
` + : ''; + + return `
+ ${hintHTML} + ${warningHTML} +
`; } function getInlineHintSuggestion(cm, focus, tokenLength) { @@ -352,6 +387,13 @@ ${ )}
`; if (suggestionItem.type !== 'fun') return baseCompletion; + console.log( + 'tokenLength =', + tokenLength, + 'suggestion =', + suggestionItem.text + ); + // for functions return ( baseCompletion + @@ -372,7 +414,6 @@ ${ } function changeInlineHint(cm, focus) { - // Copilot-style inline suggestion for autocomplete feature removeInlineHint(cm); const cursor = cm.getCursor(); @@ -391,7 +432,6 @@ ${ const widget = cm.setBookmark(cursor, { widget: widgetElement }); cm.state.inlineHint = widget; - cm.setCursor(cursor); } } @@ -426,31 +466,40 @@ ${ var completions = data.list; for (var i = 0; i < completions.length; ++i) { - var elt = hints.appendChild(ownerDocument.createElement('li')), - cur = completions[i]; - var className = + const cur = completions[i]; + + const elt = ownerDocument.createElement('li'); + elt.className = HINT_ELEMENT_CLASS + - (i != this.selectedHint ? '' : ' ' + ACTIVE_HINT_ELEMENT_CLASS); - if (cur.className != null) className = cur.className + ' ' + className; - elt.className = className; - if (i == this.selectedHint) elt.setAttribute('aria-selected', 'true'); + (i !== this.selectedHint ? '' : ' ' + ACTIVE_HINT_ELEMENT_CLASS) + + (cur.isBlacklisted ? ' blacklisted' : ''); + + if (cur.className != null) + elt.className = cur.className + ' ' + elt.className; + + if (i === this.selectedHint) elt.setAttribute('aria-selected', 'true'); elt.id = this.id + '-' + i; elt.setAttribute('role', 'option'); - if (cur.render) cur.render(elt, data, cur); - else { - const e = ownerDocument.createElement('p'); - const name = getText(cur); + elt.hintId = i; + if (cur.render) { + cur.render(elt, data, cur); + } else { + const name = getText(cur); if (cur.item && cur.item.type) { - console.log('display hint calllllled'); - cur.displayText = displayHint(name, cur.item.type, cur.item.p5); + cur.displayText = displayHint( + name, + cur.item.type, + cur.item.p5, + cur.isBlacklisted + ); } - elt.appendChild(e); - e.outerHTML = - cur.displayText || `${name}`; + elt.innerHTML = + cur.displayText || `${name}`; } - elt.hintId = i; + + hints.appendChild(elt); } var container = completion.options.container || ownerDocument.body; @@ -761,6 +810,7 @@ ${ hint(cm, callback, options); } else { var result = hint(cm, options); + console.log('fetchhints result= ', result); if (result && result.then) result.then(callback); else callback(result); } diff --git a/client/modules/IDE/components/warn.js b/client/modules/IDE/components/warn.js index 78ffe5e7a4..4e377b616e 100644 --- a/client/modules/IDE/components/warn.js +++ b/client/modules/IDE/components/warn.js @@ -11,9 +11,11 @@ export default function warnIfBlacklisted(cm, text) { const context = parseCode(cm); const blacklist = scopeMap[context]?.blacklist || []; - if (blacklist.includes(text)) { + const isBlacklisted = blacklist.includes(text); + if (isBlacklisted) { console.warn( `⚠️ Function "${text}" is usually not used in "${context}" context. Please be careful.` ); } + return isBlacklisted; } diff --git a/client/styles/components/_hints.scss b/client/styles/components/_hints.scss index 6c01abb721..5cf58ff3b3 100644 --- a/client/styles/components/_hints.scss +++ b/client/styles/components/_hints.scss @@ -29,8 +29,59 @@ border-bottom: #{math.div(1, $base-font-size)}rem solid getThemifyVariable('hint-item-border-bottom-color'); } - .hint-name { + .hint-container { + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; height: 100%; + + // Widen the entire row only if a warning is present + &.has-warning { + width: 100%; // Let it fill the parent .CodeMirror-hint width + max-width: 24rem; + } + } + + .hint-main { + display: flex; + justify-content: space-between; + align-items: center; + flex-grow: 1; + padding: 0 0.5rem; + width: 100%; + height: 100%; + } + + .hint-name { + font-size: 1.2rem; + font-weight: bold; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .hint-type { + font-size: 1rem; + font-weight: normal; + color: #999; + margin-left: 1rem; + margin-right: 2.5rem; // leaves space for the arrow icon + white-space: nowrap; + flex-shrink: 0; + } + + // Warning box + .blacklist-warning { + background-color: #fff3cd; + border: 1px solid #ffc107; + color: #856404; + padding: 6px 10px; + border-radius: 4px; + font-size: 0.85rem; + margin: 0.25rem 0.5rem 0 0.5rem; + width: calc(100% - 1rem); // Match padding + box-sizing: border-box; } .fun-name, .obj-name { @@ -174,6 +225,11 @@ outline: 0; } } + + .CodeMirror-hint.blacklisted { + height: auto; + min-height: 3.2rem; // enough to show the warning + content + } } // Inline hinter diff --git a/client/utils/p5-hinter.js b/client/utils/p5-hinter.js index 7f20031df5..25d68c59f2 100644 --- a/client/utils/p5-hinter.js +++ b/client/utils/p5-hinter.js @@ -1,3 +1,1734 @@ /* eslint-disable */ /* generated: do not edit! helper file for hinter. generated by update-p5-hinter script */ -exports.p5Hinter = [{"text":"describe","type":"fun","params":[{"p":"text","o":false},{"p":"display","o":true}],"p5":true},{"text":"describeElement","type":"fun","params":[{"p":"name","o":false},{"p":"text","o":false},{"p":"display","o":true}],"p5":true},{"text":"textOutput","type":"fun","params":[{"p":"display","o":true}],"p5":true},{"text":"gridOutput","type":"fun","params":[{"p":"display","o":true}],"p5":true},{"text":"alpha","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"blue","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"brightness","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"color","type":"fun","p5":true},{"text":"green","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"hue","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"lerpColor","type":"fun","params":[{"p":"c1","o":false},{"p":"c2","o":false},{"p":"amt","o":false}],"p5":true},{"text":"lightness","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"red","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"saturation","type":"fun","params":[{"p":"color","o":false}],"p5":true},{"text":"beginClip","type":"fun","params":[{"p":"options","o":true}],"p5":true},{"text":"endClip","type":"fun","p5":true},{"text":"clip","type":"fun","params":[{"p":"callback","o":false},{"p":"options","o":true}],"p5":true},{"text":"background","type":"fun","p5":true},{"text":"clear","type":"fun","params":[{"p":"r","o":true},{"p":"g","o":true},{"p":"b","o":true},{"p":"a","o":true}],"p5":true},{"text":"colorMode","type":"fun","p5":true},{"text":"fill","type":"fun","p5":true},{"text":"noFill","type":"fun","p5":true},{"text":"noStroke","type":"fun","p5":true},{"text":"stroke","type":"fun","p5":true},{"text":"erase","type":"fun","params":[{"p":"strengthFill","o":true},{"p":"strengthStroke","o":true}],"p5":true},{"text":"noErase","type":"fun","p5":true},{"text":"arc","type":"fun","params":[{"p":"x","o":false},{"p":"y","o":false},{"p":"w","o":false},{"p":"h","o":false},{"p":"start","o":false},{"p":"stop","o":false},{"p":"mode","o":true},{"p":"detail","o":true}],"p5":true},{"text":"ellipse","type":"fun","p5":true},{"text":"circle","type":"fun","params":[{"p":"x","o":false},{"p":"y","o":false},{"p":"d","o":false}],"p5":true},{"text":"line","type":"fun","p5":true},{"text":"point","type":"fun","p5":true},{"text":"quad","type":"fun","p5":true},{"text":"rect","type":"fun","p5":true},{"text":"square","type":"fun","params":[{"p":"x","o":false},{"p":"y","o":false},{"p":"s","o":false},{"p":"tl","o":true},{"p":"tr","o":true},{"p":"br","o":true},{"p":"bl","o":true}],"p5":true},{"text":"triangle","type":"fun","params":[{"p":"x1","o":false},{"p":"y1","o":false},{"p":"x2","o":false},{"p":"y2","o":false},{"p":"x3","o":false},{"p":"y3","o":false}],"p5":true},{"text":"ellipseMode","type":"fun","params":[{"p":"mode","o":false}],"p5":true},{"text":"noSmooth","type":"fun","p5":true},{"text":"rectMode","type":"fun","params":[{"p":"mode","o":false}],"p5":true},{"text":"smooth","type":"fun","p5":true},{"text":"strokeCap","type":"fun","params":[{"p":"cap","o":false}],"p5":true},{"text":"strokeJoin","type":"fun","params":[{"p":"join","o":false}],"p5":true},{"text":"strokeWeight","type":"fun","params":[{"p":"weight","o":false}],"p5":true},{"text":"bezier","type":"fun","p5":true},{"text":"bezierDetail","type":"fun","params":[{"p":"detail","o":false}],"p5":true},{"text":"bezierPoint","type":"fun","params":[{"p":"a","o":false},{"p":"b","o":false},{"p":"c","o":false},{"p":"d","o":false},{"p":"t","o":false}],"p5":true},{"text":"bezierTangent","type":"fun","params":[{"p":"a","o":false},{"p":"b","o":false},{"p":"c","o":false},{"p":"d","o":false},{"p":"t","o":false}],"p5":true},{"text":"curve","type":"fun","p5":true},{"text":"curveDetail","type":"fun","params":[{"p":"resolution","o":false}],"p5":true},{"text":"curveTightness","type":"fun","params":[{"p":"amount","o":false}],"p5":true},{"text":"curvePoint","type":"fun","params":[{"p":"a","o":false},{"p":"b","o":false},{"p":"c","o":false},{"p":"d","o":false},{"p":"t","o":false}],"p5":true},{"text":"curveTangent","type":"fun","params":[{"p":"a","o":false},{"p":"b","o":false},{"p":"c","o":false},{"p":"d","o":false},{"p":"t","o":false}],"p5":true},{"text":"beginContour","type":"fun","p5":true},{"text":"beginShape","type":"fun","params":[{"p":"kind","o":true}],"p5":true},{"text":"bezierVertex","type":"fun","p5":true},{"text":"curveVertex","type":"fun","p5":true},{"text":"endContour","type":"fun","p5":true},{"text":"endShape","type":"fun","params":[{"p":"mode","o":true},{"p":"count","o":true}],"p5":true},{"text":"quadraticVertex","type":"fun","p5":true},{"text":"vertex","type":"fun","p5":true},{"text":"normal","type":"fun","p5":true},{"text":"VERSION","type":"var","params":[],"p5":true},{"text":"P2D","type":"var","params":[],"p5":true},{"text":"WEBGL","type":"var","params":[],"p5":true},{"text":"WEBGL2","type":"var","params":[],"p5":true},{"text":"ARROW","type":"var","params":[],"p5":true},{"text":"CROSS","type":"var","params":[],"p5":true},{"text":"HAND","type":"var","params":[],"p5":true},{"text":"MOVE","type":"var","params":[],"p5":true},{"text":"TEXT","type":"var","params":[],"p5":true},{"text":"WAIT","type":"var","params":[],"p5":true},{"text":"HALF_PI","type":"var","params":[],"p5":true},{"text":"PI","type":"var","params":[],"p5":true},{"text":"QUARTER_PI","type":"var","params":[],"p5":true},{"text":"TAU","type":"var","params":[],"p5":true},{"text":"TWO_PI","type":"var","params":[],"p5":true},{"text":"DEGREES","type":"var","params":[],"p5":true},{"text":"RADIANS","type":"var","params":[],"p5":true},{"text":"CORNER","type":"var","params":[],"p5":true},{"text":"CORNERS","type":"var","params":[],"p5":true},{"text":"RADIUS","type":"var","params":[],"p5":true},{"text":"RIGHT","type":"var","params":[],"p5":true},{"text":"LEFT","type":"var","params":[],"p5":true},{"text":"CENTER","type":"var","params":[],"p5":true},{"text":"TOP","type":"var","params":[],"p5":true},{"text":"BOTTOM","type":"var","params":[],"p5":true},{"text":"BASELINE","type":"var","params":[],"p5":true},{"text":"POINTS","type":"var","params":[],"p5":true},{"text":"LINES","type":"var","params":[],"p5":true},{"text":"LINE_STRIP","type":"var","params":[],"p5":true},{"text":"LINE_LOOP","type":"var","params":[],"p5":true},{"text":"TRIANGLES","type":"var","params":[],"p5":true},{"text":"TRIANGLE_FAN","type":"var","params":[],"p5":true},{"text":"TRIANGLE_STRIP","type":"var","params":[],"p5":true},{"text":"QUADS","type":"var","params":[],"p5":true},{"text":"QUAD_STRIP","type":"var","params":[],"p5":true},{"text":"TESS","type":"var","params":[],"p5":true},{"text":"CLOSE","type":"var","params":[],"p5":true},{"text":"OPEN","type":"var","params":[],"p5":true},{"text":"CHORD","type":"var","params":[],"p5":true},{"text":"PIE","type":"var","params":[],"p5":true},{"text":"PROJECT","type":"var","params":[],"p5":true},{"text":"SQUARE","type":"var","params":[],"p5":true},{"text":"ROUND","type":"var","params":[],"p5":true},{"text":"BEVEL","type":"var","params":[],"p5":true},{"text":"MITER","type":"var","params":[],"p5":true},{"text":"RGB","type":"var","params":[],"p5":true},{"text":"HSB","type":"var","params":[],"p5":true},{"text":"HSL","type":"var","params":[],"p5":true},{"text":"AUTO","type":"var","params":[],"p5":true},{"text":"ALT","type":"var","params":[],"p5":true},{"text":"BACKSPACE","type":"var","params":[],"p5":true},{"text":"CONTROL","type":"var","params":[],"p5":true},{"text":"DELETE","type":"var","params":[],"p5":true},{"text":"DOWN_ARROW","type":"var","params":[],"p5":true},{"text":"ENTER","type":"var","params":[],"p5":true},{"text":"ESCAPE","type":"var","params":[],"p5":true},{"text":"LEFT_ARROW","type":"var","params":[],"p5":true},{"text":"OPTION","type":"var","params":[],"p5":true},{"text":"RETURN","type":"var","params":[],"p5":true},{"text":"RIGHT_ARROW","type":"var","params":[],"p5":true},{"text":"SHIFT","type":"var","params":[],"p5":true},{"text":"TAB","type":"var","params":[],"p5":true},{"text":"UP_ARROW","type":"var","params":[],"p5":true},{"text":"BLEND","type":"var","params":[],"p5":true},{"text":"REMOVE","type":"var","params":[],"p5":true},{"text":"ADD","type":"var","params":[],"p5":true},{"text":"DARKEST","type":"var","params":[],"p5":true},{"text":"LIGHTEST","type":"var","params":[],"p5":true},{"text":"DIFFERENCE","type":"var","params":[],"p5":true},{"text":"SUBTRACT","type":"var","params":[],"p5":true},{"text":"EXCLUSION","type":"var","params":[],"p5":true},{"text":"MULTIPLY","type":"var","params":[],"p5":true},{"text":"SCREEN","type":"var","params":[],"p5":true},{"text":"REPLACE","type":"var","params":[],"p5":true},{"text":"OVERLAY","type":"var","params":[],"p5":true},{"text":"HARD_LIGHT","type":"var","params":[],"p5":true},{"text":"SOFT_LIGHT","type":"var","params":[],"p5":true},{"text":"DODGE","type":"var","params":[],"p5":true},{"text":"BURN","type":"var","params":[],"p5":true},{"text":"THRESHOLD","type":"var","params":[],"p5":true},{"text":"GRAY","type":"var","params":[],"p5":true},{"text":"OPAQUE","type":"var","params":[],"p5":true},{"text":"INVERT","type":"var","params":[],"p5":true},{"text":"POSTERIZE","type":"var","params":[],"p5":true},{"text":"DILATE","type":"var","params":[],"p5":true},{"text":"ERODE","type":"var","params":[],"p5":true},{"text":"BLUR","type":"var","params":[],"p5":true},{"text":"NORMAL","type":"var","params":[],"p5":true},{"text":"ITALIC","type":"var","params":[],"p5":true},{"text":"BOLD","type":"var","params":[],"p5":true},{"text":"BOLDITALIC","type":"var","params":[],"p5":true},{"text":"CHAR","type":"var","params":[],"p5":true},{"text":"WORD","type":"var","params":[],"p5":true},{"text":"LINEAR","type":"var","params":[],"p5":true},{"text":"QUADRATIC","type":"var","params":[],"p5":true},{"text":"BEZIER","type":"var","params":[],"p5":true},{"text":"CURVE","type":"var","params":[],"p5":true},{"text":"STROKE","type":"var","params":[],"p5":true},{"text":"FILL","type":"var","params":[],"p5":true},{"text":"TEXTURE","type":"var","params":[],"p5":true},{"text":"IMMEDIATE","type":"var","params":[],"p5":true},{"text":"IMAGE","type":"var","params":[],"p5":true},{"text":"NEAREST","type":"var","params":[],"p5":true},{"text":"REPEAT","type":"var","params":[],"p5":true},{"text":"CLAMP","type":"var","params":[],"p5":true},{"text":"MIRROR","type":"var","params":[],"p5":true},{"text":"FLAT","type":"var","params":[],"p5":true},{"text":"SMOOTH","type":"var","params":[],"p5":true},{"text":"LANDSCAPE","type":"var","params":[],"p5":true},{"text":"PORTRAIT","type":"var","params":[],"p5":true},{"text":"GRID","type":"var","params":[],"p5":true},{"text":"AXES","type":"var","params":[],"p5":true},{"text":"LABEL","type":"var","params":[],"p5":true},{"text":"FALLBACK","type":"var","params":[],"p5":true},{"text":"CONTAIN","type":"var","params":[],"p5":true},{"text":"COVER","type":"var","params":[],"p5":true},{"text":"UNSIGNED_BYTE","type":"var","params":[],"p5":true},{"text":"UNSIGNED_INT","type":"var","params":[],"p5":true},{"text":"FLOAT","type":"var","params":[],"p5":true},{"text":"HALF_FLOAT","type":"var","params":[],"p5":true},{"text":"RGBA","type":"var","params":[],"p5":true},{"text":"print","type":"fun","params":[{"p":"contents","o":false}],"p5":true},{"text":"frameCount","type":"var","params":[],"p5":true},{"text":"deltaTime","type":"var","params":[],"p5":true},{"text":"focused","type":"var","params":[],"p5":true},{"text":"cursor","type":"fun","params":[{"p":"type","o":false},{"p":"x","o":true},{"p":"y","o":true}],"p5":true},{"text":"frameRate","type":"fun","p5":true},{"text":"getTargetFrameRate","type":"fun","p5":true},{"text":"noCursor","type":"fun","p5":true},{"text":"webglVersion","type":"var","params":[],"p5":true},{"text":"displayWidth","type":"var","params":[],"p5":true},{"text":"displayHeight","type":"var","params":[],"p5":true},{"text":"windowWidth","type":"var","params":[],"p5":true},{"text":"windowHeight","type":"var","params":[],"p5":true},{"text":"windowResized","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"width","type":"var","params":[],"p5":true},{"text":"height","type":"var","params":[],"p5":true},{"text":"fullscreen","type":"fun","params":[{"p":"val","o":true}],"p5":true},{"text":"pixelDensity","type":"fun","p5":true},{"text":"displayDensity","type":"fun","p5":true},{"text":"getURL","type":"fun","p5":true},{"text":"getURLPath","type":"fun","p5":true},{"text":"getURLParams","type":"fun","p5":true},{"text":"preload","type":"fun","p5":true},{"text":"setup","type":"fun","p5":true},{"text":"draw","type":"fun","p5":true},{"text":"remove","type":"fun","p5":true},{"text":"disableFriendlyErrors","type":"var","params":[],"p5":true},{"text":"createCanvas","type":"fun","p5":true},{"text":"resizeCanvas","type":"fun","params":[{"p":"width","o":false},{"p":"height","o":false},{"p":"noRedraw","o":true}],"p5":true},{"text":"noCanvas","type":"fun","p5":true},{"text":"createGraphics","type":"fun","p5":true},{"text":"createFramebuffer","type":"fun","params":[{"p":"options","o":true}],"p5":true},{"text":"clearDepth","type":"fun","params":[{"p":"depth","o":true}],"p5":true},{"text":"blendMode","type":"fun","params":[{"p":"mode","o":false}],"p5":true},{"text":"drawingContext","type":"var","params":[],"p5":true},{"text":"noLoop","type":"fun","p5":true},{"text":"loop","type":"fun","p5":true},{"text":"isLooping","type":"fun","p5":true},{"text":"push","type":"fun","p5":true},{"text":"pop","type":"fun","p5":true},{"text":"redraw","type":"fun","params":[{"p":"n","o":true}],"p5":true},{"text":"p5","type":"fun","params":[{"p":"sketch","o":false},{"p":"node","o":false}],"p5":true},{"text":"applyMatrix","type":"fun","p5":true},{"text":"resetMatrix","type":"fun","p5":true},{"text":"rotate","type":"fun","params":[{"p":"angle","o":false},{"p":"axis","o":true}],"p5":true},{"text":"rotateX","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"rotateY","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"rotateZ","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"scale","type":"fun","p5":true},{"text":"shearX","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"shearY","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"translate","type":"fun","p5":true},{"text":"storeItem","type":"fun","params":[{"p":"key","o":false},{"p":"value","o":false}],"p5":true},{"text":"getItem","type":"fun","params":[{"p":"key","o":false}],"p5":true},{"text":"clearStorage","type":"fun","p5":true},{"text":"removeItem","type":"fun","params":[{"p":"key","o":false}],"p5":true},{"text":"createStringDict","type":"fun","p5":true},{"text":"createNumberDict","type":"fun","p5":true},{"text":"select","type":"fun","params":[{"p":"selectors","o":false},{"p":"container","o":true}],"p5":true},{"text":"selectAll","type":"fun","params":[{"p":"selectors","o":false},{"p":"container","o":true}],"p5":true},{"text":"removeElements","type":"fun","p5":true},{"text":"changed","type":"fun","params":[{"p":"fxn","o":false}],"p5":true},{"text":"input","type":"fun","params":[{"p":"fxn","o":false}],"p5":true},{"text":"createDiv","type":"fun","params":[{"p":"html","o":true}],"p5":true},{"text":"createP","type":"fun","params":[{"p":"html","o":true}],"p5":true},{"text":"createSpan","type":"fun","params":[{"p":"html","o":true}],"p5":true},{"text":"createImg","type":"fun","p5":true},{"text":"createA","type":"fun","params":[{"p":"href","o":false},{"p":"html","o":false},{"p":"target","o":true}],"p5":true},{"text":"createSlider","type":"fun","params":[{"p":"min","o":false},{"p":"max","o":false},{"p":"value","o":true},{"p":"step","o":true}],"p5":true},{"text":"createButton","type":"fun","params":[{"p":"label","o":false},{"p":"value","o":true}],"p5":true},{"text":"createCheckbox","type":"fun","params":[{"p":"label","o":true},{"p":"value","o":true}],"p5":true},{"text":"createSelect","type":"fun","p5":true},{"text":"createRadio","type":"fun","p5":true},{"text":"createColorPicker","type":"fun","params":[{"p":"value","o":true}],"p5":true},{"text":"createInput","type":"fun","p5":true},{"text":"createFileInput","type":"fun","params":[{"p":"callback","o":false},{"p":"multiple","o":true}],"p5":true},{"text":"createVideo","type":"fun","params":[{"p":"src","o":false},{"p":"callback","o":true}],"p5":true},{"text":"createAudio","type":"fun","params":[{"p":"src","o":true},{"p":"callback","o":true}],"p5":true},{"text":"createCapture","type":"fun","params":[{"p":"type","o":true},{"p":"flipped","o":true},{"p":"callback","o":true}],"p5":true},{"text":"createElement","type":"fun","params":[{"p":"tag","o":false},{"p":"content","o":true}],"p5":true},{"text":"deviceOrientation","type":"var","params":[],"p5":true},{"text":"accelerationX","type":"var","params":[],"p5":true},{"text":"accelerationY","type":"var","params":[],"p5":true},{"text":"accelerationZ","type":"var","params":[],"p5":true},{"text":"pAccelerationX","type":"var","params":[],"p5":true},{"text":"pAccelerationY","type":"var","params":[],"p5":true},{"text":"pAccelerationZ","type":"var","params":[],"p5":true},{"text":"rotationX","type":"var","params":[],"p5":true},{"text":"rotationY","type":"var","params":[],"p5":true},{"text":"rotationZ","type":"var","params":[],"p5":true},{"text":"pRotationX","type":"var","params":[],"p5":true},{"text":"pRotationY","type":"var","params":[],"p5":true},{"text":"pRotationZ","type":"var","params":[],"p5":true},{"text":"turnAxis","type":"var","params":[],"p5":true},{"text":"setMoveThreshold","type":"fun","params":[{"p":"value","o":false}],"p5":true},{"text":"setShakeThreshold","type":"fun","params":[{"p":"value","o":false}],"p5":true},{"text":"deviceMoved","type":"fun","p5":true},{"text":"deviceTurned","type":"fun","p5":true},{"text":"deviceShaken","type":"fun","p5":true},{"text":"keyIsPressed","type":"var","params":[],"p5":true},{"text":"key","type":"var","params":[],"p5":true},{"text":"keyCode","type":"var","params":[],"p5":true},{"text":"keyPressed","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"keyReleased","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"keyTyped","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"keyIsDown","type":"fun","params":[{"p":"code","o":false}],"p5":true},{"text":"movedX","type":"var","params":[],"p5":true},{"text":"movedY","type":"var","params":[],"p5":true},{"text":"mouseX","type":"var","params":[],"p5":true},{"text":"mouseY","type":"var","params":[],"p5":true},{"text":"pmouseX","type":"var","params":[],"p5":true},{"text":"pmouseY","type":"var","params":[],"p5":true},{"text":"winMouseX","type":"var","params":[],"p5":true},{"text":"winMouseY","type":"var","params":[],"p5":true},{"text":"pwinMouseX","type":"var","params":[],"p5":true},{"text":"pwinMouseY","type":"var","params":[],"p5":true},{"text":"mouseButton","type":"var","params":[],"p5":true},{"text":"mouseIsPressed","type":"var","params":[],"p5":true},{"text":"mouseMoved","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"mouseDragged","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"mousePressed","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"mouseReleased","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"mouseClicked","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"doubleClicked","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"mouseWheel","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"requestPointerLock","type":"fun","p5":true},{"text":"exitPointerLock","type":"fun","p5":true},{"text":"touches","type":"var","params":[],"p5":true},{"text":"touchStarted","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"touchMoved","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"touchEnded","type":"fun","params":[{"p":"event","o":true}],"p5":true},{"text":"createImage","type":"fun","params":[{"p":"width","o":false},{"p":"height","o":false}],"p5":true},{"text":"saveCanvas","type":"fun","p5":true},{"text":"saveFrames","type":"fun","params":[{"p":"filename","o":false},{"p":"extension","o":false},{"p":"duration","o":false},{"p":"framerate","o":false},{"p":"callback","o":true}],"p5":true},{"text":"loadImage","type":"fun","params":[{"p":"path","o":false},{"p":"successCallback","o":true},{"p":"failureCallback","o":true}],"p5":true},{"text":"saveGif","type":"fun","params":[{"p":"filename","o":false},{"p":"duration","o":false},{"p":"options","o":true}],"p5":true},{"text":"image","type":"fun","p5":true},{"text":"tint","type":"fun","p5":true},{"text":"noTint","type":"fun","p5":true},{"text":"imageMode","type":"fun","params":[{"p":"mode","o":false}],"p5":true},{"text":"pixels","type":"var","params":[],"p5":true},{"text":"blend","type":"fun","p5":true},{"text":"copy","type":"fun","p5":true},{"text":"filter","type":"fun","p5":true},{"text":"get","type":"fun","p5":true},{"text":"loadPixels","type":"fun","p5":true},{"text":"set","type":"fun","params":[{"p":"x","o":false},{"p":"y","o":false},{"p":"c","o":false}],"p5":true},{"text":"updatePixels","type":"fun","params":[{"p":"x","o":true},{"p":"y","o":true},{"p":"w","o":true},{"p":"h","o":true}],"p5":true},{"text":"loadJSON","type":"fun","params":[{"p":"path","o":false},{"p":"successCallback","o":true},{"p":"errorCallback","o":true}],"p5":true},{"text":"loadStrings","type":"fun","params":[{"p":"path","o":false},{"p":"successCallback","o":true},{"p":"errorCallback","o":true}],"p5":true},{"text":"loadTable","type":"fun","params":[{"p":"filename","o":false},{"p":"extension","o":true},{"p":"header","o":true},{"p":"callback","o":true},{"p":"errorCallback","o":true}],"p5":true},{"text":"loadXML","type":"fun","params":[{"p":"path","o":false},{"p":"successCallback","o":true},{"p":"errorCallback","o":true}],"p5":true},{"text":"loadBytes","type":"fun","params":[{"p":"file","o":false},{"p":"callback","o":true},{"p":"errorCallback","o":true}],"p5":true},{"text":"httpGet","type":"fun","p5":true},{"text":"httpPost","type":"fun","p5":true},{"text":"httpDo","type":"fun","p5":true},{"text":"createWriter","type":"fun","params":[{"p":"name","o":false},{"p":"extension","o":true}],"p5":true},{"text":"save","type":"fun","params":[{"p":"objectOrFilename","o":true},{"p":"filename","o":true},{"p":"options","o":true}],"p5":true},{"text":"saveJSON","type":"fun","params":[{"p":"json","o":false},{"p":"filename","o":false},{"p":"optimize","o":true}],"p5":true},{"text":"saveStrings","type":"fun","params":[{"p":"list","o":false},{"p":"filename","o":false},{"p":"extension","o":true},{"p":"isCRLF","o":true}],"p5":true},{"text":"saveTable","type":"fun","params":[{"p":"Table","o":false},{"p":"filename","o":false},{"p":"options","o":true}],"p5":true},{"text":"abs","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"ceil","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"constrain","type":"fun","params":[{"p":"n","o":false},{"p":"low","o":false},{"p":"high","o":false}],"p5":true},{"text":"dist","type":"fun","p5":true},{"text":"exp","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"floor","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"lerp","type":"fun","params":[{"p":"start","o":false},{"p":"stop","o":false},{"p":"amt","o":false}],"p5":true},{"text":"log","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"mag","type":"fun","params":[{"p":"x","o":false},{"p":"y","o":false}],"p5":true},{"text":"map","type":"fun","params":[{"p":"value","o":false},{"p":"start1","o":false},{"p":"stop1","o":false},{"p":"start2","o":false},{"p":"stop2","o":false},{"p":"withinBounds","o":true}],"p5":true},{"text":"max","type":"fun","p5":true},{"text":"min","type":"fun","p5":true},{"text":"norm","type":"fun","params":[{"p":"value","o":false},{"p":"start","o":false},{"p":"stop","o":false}],"p5":true},{"text":"pow","type":"fun","params":[{"p":"n","o":false},{"p":"e","o":false}],"p5":true},{"text":"round","type":"fun","params":[{"p":"n","o":false},{"p":"decimals","o":true}],"p5":true},{"text":"sq","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"sqrt","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"fract","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"createVector","type":"fun","params":[{"p":"x","o":true},{"p":"y","o":true},{"p":"z","o":true}],"p5":true},{"text":"noise","type":"fun","params":[{"p":"x","o":false},{"p":"y","o":true},{"p":"z","o":true}],"p5":true},{"text":"noiseDetail","type":"fun","params":[{"p":"lod","o":false},{"p":"falloff","o":false}],"p5":true},{"text":"noiseSeed","type":"fun","params":[{"p":"seed","o":false}],"p5":true},{"text":"randomSeed","type":"fun","params":[{"p":"seed","o":false}],"p5":true},{"text":"random","type":"fun","p5":true},{"text":"randomGaussian","type":"fun","params":[{"p":"mean","o":true},{"p":"sd","o":true}],"p5":true},{"text":"acos","type":"fun","params":[{"p":"value","o":false}],"p5":true},{"text":"asin","type":"fun","params":[{"p":"value","o":false}],"p5":true},{"text":"atan","type":"fun","params":[{"p":"value","o":false}],"p5":true},{"text":"atan2","type":"fun","params":[{"p":"y","o":false},{"p":"x","o":false}],"p5":true},{"text":"cos","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"sin","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"tan","type":"fun","params":[{"p":"angle","o":false}],"p5":true},{"text":"degrees","type":"fun","params":[{"p":"radians","o":false}],"p5":true},{"text":"radians","type":"fun","params":[{"p":"degrees","o":false}],"p5":true},{"text":"angleMode","type":"fun","p5":true},{"text":"textAlign","type":"fun","p5":true},{"text":"textLeading","type":"fun","p5":true},{"text":"textSize","type":"fun","p5":true},{"text":"textStyle","type":"fun","p5":true},{"text":"textWidth","type":"fun","params":[{"p":"str","o":false}],"p5":true},{"text":"textAscent","type":"fun","p5":true},{"text":"textDescent","type":"fun","p5":true},{"text":"textWrap","type":"fun","params":[{"p":"style","o":false}],"p5":true},{"text":"loadFont","type":"fun","params":[{"p":"path","o":false},{"p":"successCallback","o":true},{"p":"failureCallback","o":true}],"p5":true},{"text":"text","type":"fun","params":[{"p":"str","o":false},{"p":"x","o":false},{"p":"y","o":false},{"p":"maxWidth","o":true},{"p":"maxHeight","o":true}],"p5":true},{"text":"textFont","type":"fun","p5":true},{"text":"append","type":"fun","params":[{"p":"array","o":false},{"p":"value","o":false}],"p5":true},{"text":"arrayCopy","type":"fun","p5":true},{"text":"concat","type":"fun","params":[{"p":"a","o":false},{"p":"b","o":false}],"p5":true},{"text":"reverse","type":"fun","params":[{"p":"list","o":false}],"p5":true},{"text":"shorten","type":"fun","params":[{"p":"list","o":false}],"p5":true},{"text":"shuffle","type":"fun","params":[{"p":"array","o":false},{"p":"bool","o":true}],"p5":true},{"text":"sort","type":"fun","params":[{"p":"list","o":false},{"p":"count","o":true}],"p5":true},{"text":"splice","type":"fun","params":[{"p":"list","o":false},{"p":"value","o":false},{"p":"position","o":false}],"p5":true},{"text":"subset","type":"fun","params":[{"p":"list","o":false},{"p":"start","o":false},{"p":"count","o":true}],"p5":true},{"text":"float","type":"fun","p5":true},{"text":"int","type":"fun","p5":true},{"text":"str","type":"fun","params":[{"p":"n","o":false}],"p5":true},{"text":"boolean","type":"fun","p5":true},{"text":"byte","type":"fun","p5":true},{"text":"char","type":"fun","p5":true},{"text":"unchar","type":"fun","p5":true},{"text":"hex","type":"fun","p5":true},{"text":"unhex","type":"fun","p5":true},{"text":"join","type":"fun","params":[{"p":"list","o":false},{"p":"separator","o":false}],"p5":true},{"text":"match","type":"fun","params":[{"p":"str","o":false},{"p":"regexp","o":false}],"p5":true},{"text":"matchAll","type":"fun","params":[{"p":"str","o":false},{"p":"regexp","o":false}],"p5":true},{"text":"nf","type":"fun","p5":true},{"text":"nfc","type":"fun","p5":true},{"text":"nfp","type":"fun","p5":true},{"text":"nfs","type":"fun","p5":true},{"text":"split","type":"fun","params":[{"p":"value","o":false},{"p":"delim","o":false}],"p5":true},{"text":"splitTokens","type":"fun","params":[{"p":"value","o":false},{"p":"delim","o":true}],"p5":true},{"text":"trim","type":"fun","p5":true},{"text":"day","type":"fun","p5":true},{"text":"hour","type":"fun","p5":true},{"text":"minute","type":"fun","p5":true},{"text":"millis","type":"fun","p5":true},{"text":"month","type":"fun","p5":true},{"text":"second","type":"fun","p5":true},{"text":"year","type":"fun","p5":true},{"text":"beginGeometry","type":"fun","p5":true},{"text":"endGeometry","type":"fun","p5":true},{"text":"buildGeometry","type":"fun","params":[{"p":"callback","o":false}],"p5":true},{"text":"freeGeometry","type":"fun","params":[{"p":"geometry","o":false}],"p5":true},{"text":"plane","type":"fun","params":[{"p":"width","o":true},{"p":"height","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true}],"p5":true},{"text":"box","type":"fun","params":[{"p":"width","o":true},{"p":"height","o":true},{"p":"depth","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true}],"p5":true},{"text":"sphere","type":"fun","params":[{"p":"radius","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true}],"p5":true},{"text":"cylinder","type":"fun","params":[{"p":"radius","o":true},{"p":"height","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true},{"p":"bottomCap","o":true},{"p":"topCap","o":true}],"p5":true},{"text":"cone","type":"fun","params":[{"p":"radius","o":true},{"p":"height","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true},{"p":"cap","o":true}],"p5":true},{"text":"ellipsoid","type":"fun","params":[{"p":"radiusX","o":true},{"p":"radiusY","o":true},{"p":"radiusZ","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true}],"p5":true},{"text":"torus","type":"fun","params":[{"p":"radius","o":true},{"p":"tubeRadius","o":true},{"p":"detailX","o":true},{"p":"detailY","o":true}],"p5":true},{"text":"orbitControl","type":"fun","params":[{"p":"sensitivityX","o":true},{"p":"sensitivityY","o":true},{"p":"sensitivityZ","o":true},{"p":"options","o":true}],"p5":true},{"text":"debugMode","type":"fun","p5":true},{"text":"noDebugMode","type":"fun","p5":true},{"text":"ambientLight","type":"fun","p5":true},{"text":"specularColor","type":"fun","p5":true},{"text":"directionalLight","type":"fun","p5":true},{"text":"pointLight","type":"fun","p5":true},{"text":"imageLight","type":"fun","params":[{"p":"img","o":false}],"p5":true},{"text":"panorama","type":"fun","params":[{"p":"img","o":false}],"p5":true},{"text":"lights","type":"fun","p5":true},{"text":"lightFalloff","type":"fun","params":[{"p":"constant","o":false},{"p":"linear","o":false},{"p":"quadratic","o":false}],"p5":true},{"text":"spotLight","type":"fun","p5":true},{"text":"noLights","type":"fun","p5":true},{"text":"loadModel","type":"fun","p5":true},{"text":"model","type":"fun","params":[{"p":"model","o":false}],"p5":true},{"text":"loadShader","type":"fun","params":[{"p":"vertFilename","o":false},{"p":"fragFilename","o":false},{"p":"successCallback","o":true},{"p":"failureCallback","o":true}],"p5":true},{"text":"createShader","type":"fun","params":[{"p":"vertSrc","o":false},{"p":"fragSrc","o":false}],"p5":true},{"text":"createFilterShader","type":"fun","params":[{"p":"fragSrc","o":false}],"p5":true},{"text":"shader","type":"fun","params":[{"p":"s","o":false}],"p5":true},{"text":"resetShader","type":"fun","p5":true},{"text":"texture","type":"fun","params":[{"p":"tex","o":false}],"p5":true},{"text":"textureMode","type":"fun","params":[{"p":"mode","o":false}],"p5":true},{"text":"textureWrap","type":"fun","params":[{"p":"wrapX","o":false},{"p":"wrapY","o":true}],"p5":true},{"text":"normalMaterial","type":"fun","p5":true},{"text":"ambientMaterial","type":"fun","p5":true},{"text":"emissiveMaterial","type":"fun","p5":true},{"text":"specularMaterial","type":"fun","p5":true},{"text":"shininess","type":"fun","params":[{"p":"shine","o":false}],"p5":true},{"text":"metalness","type":"fun","params":[{"p":"metallic","o":false}],"p5":true},{"text":"camera","type":"fun","params":[{"p":"x","o":true},{"p":"y","o":true},{"p":"z","o":true},{"p":"centerX","o":true},{"p":"centerY","o":true},{"p":"centerZ","o":true},{"p":"upX","o":true},{"p":"upY","o":true},{"p":"upZ","o":true}],"p5":true},{"text":"perspective","type":"fun","params":[{"p":"fovy","o":true},{"p":"aspect","o":true},{"p":"near","o":true},{"p":"far","o":true}],"p5":true},{"text":"linePerspective","type":"fun","p5":true},{"text":"ortho","type":"fun","params":[{"p":"left","o":true},{"p":"right","o":true},{"p":"bottom","o":true},{"p":"top","o":true},{"p":"near","o":true},{"p":"far","o":true}],"p5":true},{"text":"frustum","type":"fun","params":[{"p":"left","o":true},{"p":"right","o":true},{"p":"bottom","o":true},{"p":"top","o":true},{"p":"near","o":true},{"p":"far","o":true}],"p5":true},{"text":"createCamera","type":"fun","p5":true},{"text":"setCamera","type":"fun","params":[{"p":"cam","o":false}],"p5":true},{"text":"setAttributes","type":"fun","p5":true},{"text":"getAudioContext","type":"fun","p5":true},{"text":"userStartAudio","type":"fun","params":[{"p":"elements","o":true},{"p":"callback","o":true}],"p5":true},{"text":"getOutputVolume","type":"fun","p5":true},{"text":"outputVolume","type":"fun","params":[{"p":"volume","o":false},{"p":"rampTime","o":true},{"p":"timeFromNow","o":true}],"p5":true},{"text":"soundOut","type":"var","params":[],"p5":true},{"text":"sampleRate","type":"fun","p5":true},{"text":"freqToMidi","type":"fun","params":[{"p":"frequency","o":false}],"p5":true},{"text":"midiToFreq","type":"fun","params":[{"p":"midiNote","o":false}],"p5":true},{"text":"soundFormats","type":"fun","params":[{"p":"formats","o":true}],"p5":true},{"text":"saveSound","type":"fun","params":[{"p":"soundFile","o":false},{"p":"fileName","o":false}],"p5":true},{"text":"loadSound","type":"fun","params":[{"p":"path","o":false},{"p":"successCallback","o":true},{"p":"errorCallback","o":true},{"p":"whileLoading","o":true}],"p5":true},{"text":"createConvolver","type":"fun","params":[{"p":"path","o":false},{"p":"callback","o":true},{"p":"errorCallback","o":true}],"p5":true},{"text":"setBPM","type":"fun","params":[{"p":"BPM","o":false},{"p":"rampTime","o":false}],"p5":true},{"text":"true","type":"boolean","p5":"boolean"},{"text":"false","type":"boolean","p5":"boolean"},{"text":"await","type":"keyword","p5":false},{"text":"break","type":"keyword","p5":false},{"text":"case","type":"keyword","p5":false},{"text":"catch","type":"keyword","p5":false},{"text":"class","type":"keyword","p5":"class"},{"text":"const","type":"keyword","p5":"const"},{"text":"continue","type":"keyword","p5":false},{"text":"debugger","type":"keyword","p5":false},{"text":"default","type":"keyword","p5":false},{"text":"delete","type":"keyword","p5":false},{"text":"do","type":"keyword","p5":false},{"text":"else","type":"keyword","p5":"if-else"},{"text":"export","type":"keyword","p5":false},{"text":"extends","type":"keyword","p5":false},{"text":"finally","type":"keyword","p5":false},{"text":"for","type":"keyword","p5":"for"},{"text":"function","type":"keyword","p5":"function"},{"text":"if","type":"keyword","p5":"if-else"},{"text":"import","type":"keyword","p5":false},{"text":"in","type":"keyword","p5":false},{"text":"instanceof","type":"keyword","p5":false},{"text":"new","type":"keyword","p5":false},{"text":"return","type":"keyword","p5":"return"},{"text":"super","type":"keyword","p5":false},{"text":"switch","type":"keyword","p5":false},{"text":"this","type":"keyword","p5":false},{"text":"throw","type":"keyword","p5":false},{"text":"try","type":"keyword","p5":false},{"text":"typeof","type":"keyword","p5":false},{"text":"var","type":"keyword","p5":false},{"text":"void","type":"keyword","p5":false},{"text":"while","type":"keyword","p5":"while"},{"text":"with","type":"keyword","p5":false},{"text":"yield","type":"keyword","p5":false},{"text":"let","type":"keyword","p5":"let"},{"text":"Array","type":"obj","p5":false},{"text":"Boolean","type":"obj","p5":false},{"text":"Date","type":"obj","p5":false},{"text":"Error","type":"obj","p5":false},{"text":"Function","type":"obj","p5":false},{"text":"JSON","type":"obj","p5":"JSON"},{"text":"Math","type":"obj","p5":false},{"text":"Number","type":"obj","p5":false},{"text":"Object","type":"obj","p5":false},{"text":"RegExp","type":"obj","p5":false},{"text":"String","type":"obj","p5":false},{"text":"Promise","type":"obj","p5":false},{"text":"Set","type":"obj","p5":false},{"text":"Map","type":"obj","p5":false},{"text":"Symbol","type":"obj","p5":false},{"text":"WeakMap","type":"obj","p5":false},{"text":"WeakSet","type":"obj","p5":false},{"text":"ArrayBuffer","type":"obj","p5":false},{"text":"DataView","type":"obj","p5":false},{"text":"Int32Array","type":"obj","p5":false},{"text":"Uint32Array","type":"obj","p5":false},{"text":"Float32Array","type":"obj","p5":false},{"text":"window","type":"obj","p5":false},{"text":"document","type":"obj","p5":false},{"text":"navigator","type":"obj","p5":false},{"text":"console","type":"obj","p5":"console"},{"text":"localStorage","type":"obj","p5":false},{"text":"sessionStorage","type":"obj","p5":false},{"text":"history","type":"obj","p5":false},{"text":"location","type":"obj","p5":false}]; +exports.p5Hinter = [ + { + text: 'describe', + type: 'fun', + params: [ + { p: 'text', o: false }, + { p: 'display', o: true } + ], + p5: true + }, + { + text: 'describeElement', + type: 'fun', + params: [ + { p: 'name', o: false }, + { p: 'text', o: false }, + { p: 'display', o: true } + ], + p5: true + }, + { + text: 'textOutput', + type: 'fun', + params: [{ p: 'display', o: true }], + p5: true + }, + { + text: 'gridOutput', + type: 'fun', + params: [{ p: 'display', o: true }], + p5: true + }, + { text: 'alpha', type: 'fun', params: [{ p: 'color', o: false }], p5: true }, + { text: 'blue', type: 'fun', params: [{ p: 'color', o: false }], p5: true }, + { + text: 'brightness', + type: 'fun', + params: [{ p: 'color', o: false }], + p5: true + }, + { text: 'color', type: 'fun', p5: true }, + { text: 'green', type: 'fun', params: [{ p: 'color', o: false }], p5: true }, + { text: 'hue', type: 'fun', params: [{ p: 'color', o: false }], p5: true }, + { + text: 'lerpColor', + type: 'fun', + params: [ + { p: 'c1', o: false }, + { p: 'c2', o: false }, + { p: 'amt', o: false } + ], + p5: true + }, + { + text: 'lightness', + type: 'fun', + params: [{ p: 'color', o: false }], + p5: true + }, + { text: 'red', type: 'fun', params: [{ p: 'color', o: false }], p5: true }, + { + text: 'saturation', + type: 'fun', + params: [{ p: 'color', o: false }], + p5: true + }, + { + text: 'beginClip', + type: 'fun', + params: [{ p: 'options', o: true }], + p5: true + }, + { text: 'endClip', type: 'fun', p5: true }, + { + text: 'clip', + type: 'fun', + params: [ + { p: 'callback', o: false }, + { p: 'options', o: true } + ], + p5: true + }, + { text: 'background', type: 'fun', p5: true }, + { + text: 'clear', + type: 'fun', + params: [ + { p: 'r', o: true }, + { p: 'g', o: true }, + { p: 'b', o: true }, + { p: 'a', o: true } + ], + p5: true + }, + { text: 'colorMode', type: 'fun', p5: true }, + { text: 'fill', type: 'fun', p5: true }, + { text: 'noFill', type: 'fun', p5: true }, + { text: 'noStroke', type: 'fun', p5: true }, + { text: 'stroke', type: 'fun', p5: true }, + { + text: 'erase', + type: 'fun', + params: [ + { p: 'strengthFill', o: true }, + { p: 'strengthStroke', o: true } + ], + p5: true + }, + { text: 'noErase', type: 'fun', p5: true }, + { + text: 'arc', + type: 'fun', + params: [ + { p: 'x', o: false }, + { p: 'y', o: false }, + { p: 'w', o: false }, + { p: 'h', o: false }, + { p: 'start', o: false }, + { p: 'stop', o: false }, + { p: 'mode', o: true }, + { p: 'detail', o: true } + ], + p5: true + }, + { text: 'ellipse', type: 'fun', p5: true }, + { + text: 'circle', + type: 'fun', + params: [ + { p: 'x', o: false }, + { p: 'y', o: false }, + { p: 'd', o: false } + ], + p5: true + }, + { text: 'line', type: 'fun', p5: true }, + { text: 'point', type: 'fun', p5: true }, + { text: 'quad', type: 'fun', p5: true }, + { text: 'rect', type: 'fun', p5: true }, + { + text: 'square', + type: 'fun', + params: [ + { p: 'x', o: false }, + { p: 'y', o: false }, + { p: 's', o: false }, + { p: 'tl', o: true }, + { p: 'tr', o: true }, + { p: 'br', o: true }, + { p: 'bl', o: true } + ], + p5: true + }, + { + text: 'triangle', + type: 'fun', + params: [ + { p: 'x1', o: false }, + { p: 'y1', o: false }, + { p: 'x2', o: false }, + { p: 'y2', o: false }, + { p: 'x3', o: false }, + { p: 'y3', o: false } + ], + p5: true + }, + { + text: 'ellipseMode', + type: 'fun', + params: [{ p: 'mode', o: false }], + p5: true + }, + { text: 'noSmooth', type: 'fun', p5: true }, + { + text: 'rectMode', + type: 'fun', + params: [{ p: 'mode', o: false }], + p5: true + }, + { text: 'smooth', type: 'fun', p5: true }, + { + text: 'strokeCap', + type: 'fun', + params: [{ p: 'cap', o: false }], + p5: true + }, + { + text: 'strokeJoin', + type: 'fun', + params: [{ p: 'join', o: false }], + p5: true + }, + { + text: 'strokeWeight', + type: 'fun', + params: [{ p: 'weight', o: false }], + p5: true + }, + { text: 'bezier', type: 'fun', p5: true }, + { + text: 'bezierDetail', + type: 'fun', + params: [{ p: 'detail', o: false }], + p5: true + }, + { + text: 'bezierPoint', + type: 'fun', + params: [ + { p: 'a', o: false }, + { p: 'b', o: false }, + { p: 'c', o: false }, + { p: 'd', o: false }, + { p: 't', o: false } + ], + p5: true + }, + { + text: 'bezierTangent', + type: 'fun', + params: [ + { p: 'a', o: false }, + { p: 'b', o: false }, + { p: 'c', o: false }, + { p: 'd', o: false }, + { p: 't', o: false } + ], + p5: true + }, + { text: 'curve', type: 'fun', p5: true }, + { + text: 'curveDetail', + type: 'fun', + params: [{ p: 'resolution', o: false }], + p5: true + }, + { + text: 'curveTightness', + type: 'fun', + params: [{ p: 'amount', o: false }], + p5: true + }, + { + text: 'curvePoint', + type: 'fun', + params: [ + { p: 'a', o: false }, + { p: 'b', o: false }, + { p: 'c', o: false }, + { p: 'd', o: false }, + { p: 't', o: false } + ], + p5: true + }, + { + text: 'curveTangent', + type: 'fun', + params: [ + { p: 'a', o: false }, + { p: 'b', o: false }, + { p: 'c', o: false }, + { p: 'd', o: false }, + { p: 't', o: false } + ], + p5: true + }, + { text: 'beginContour', type: 'fun', p5: true }, + { + text: 'beginShape', + type: 'fun', + params: [{ p: 'kind', o: true }], + p5: true + }, + { text: 'bezierVertex', type: 'fun', p5: true }, + { text: 'curveVertex', type: 'fun', p5: true }, + { text: 'endContour', type: 'fun', p5: true }, + { + text: 'endShape', + type: 'fun', + params: [ + { p: 'mode', o: true }, + { p: 'count', o: true } + ], + p5: true + }, + { text: 'quadraticVertex', type: 'fun', p5: true }, + { text: 'vertex', type: 'fun', p5: true }, + { text: 'normal', type: 'fun', p5: true }, + { text: 'VERSION', type: 'var', params: [], p5: true }, + { text: 'P2D', type: 'var', params: [], p5: true }, + { text: 'WEBGL', type: 'var', params: [], p5: true }, + { text: 'WEBGL2', type: 'var', params: [], p5: true }, + { text: 'ARROW', type: 'var', params: [], p5: true }, + { text: 'CROSS', type: 'var', params: [], p5: true }, + { text: 'HAND', type: 'var', params: [], p5: true }, + { text: 'MOVE', type: 'var', params: [], p5: true }, + { text: 'TEXT', type: 'var', params: [], p5: true }, + { text: 'WAIT', type: 'var', params: [], p5: true }, + { text: 'HALF_PI', type: 'var', params: [], p5: true }, + { text: 'PI', type: 'var', params: [], p5: true }, + { text: 'QUARTER_PI', type: 'var', params: [], p5: true }, + { text: 'TAU', type: 'var', params: [], p5: true }, + { text: 'TWO_PI', type: 'var', params: [], p5: true }, + { text: 'DEGREES', type: 'var', params: [], p5: true }, + { text: 'RADIANS', type: 'var', params: [], p5: true }, + { text: 'CORNER', type: 'var', params: [], p5: true }, + { text: 'CORNERS', type: 'var', params: [], p5: true }, + { text: 'RADIUS', type: 'var', params: [], p5: true }, + { text: 'RIGHT', type: 'var', params: [], p5: true }, + { text: 'LEFT', type: 'var', params: [], p5: true }, + { text: 'CENTER', type: 'var', params: [], p5: true }, + { text: 'TOP', type: 'var', params: [], p5: true }, + { text: 'BOTTOM', type: 'var', params: [], p5: true }, + { text: 'BASELINE', type: 'var', params: [], p5: true }, + { text: 'POINTS', type: 'var', params: [], p5: true }, + { text: 'LINES', type: 'var', params: [], p5: true }, + { text: 'LINE_STRIP', type: 'var', params: [], p5: true }, + { text: 'LINE_LOOP', type: 'var', params: [], p5: true }, + { text: 'TRIANGLES', type: 'var', params: [], p5: true }, + { text: 'TRIANGLE_FAN', type: 'var', params: [], p5: true }, + { text: 'TRIANGLE_STRIP', type: 'var', params: [], p5: true }, + { text: 'QUADS', type: 'var', params: [], p5: true }, + { text: 'QUAD_STRIP', type: 'var', params: [], p5: true }, + { text: 'TESS', type: 'var', params: [], p5: true }, + { text: 'CLOSE', type: 'var', params: [], p5: true }, + { text: 'OPEN', type: 'var', params: [], p5: true }, + { text: 'CHORD', type: 'var', params: [], p5: true }, + { text: 'PIE', type: 'var', params: [], p5: true }, + { text: 'PROJECT', type: 'var', params: [], p5: true }, + { text: 'SQUARE', type: 'var', params: [], p5: true }, + { text: 'ROUND', type: 'var', params: [], p5: true }, + { text: 'BEVEL', type: 'var', params: [], p5: true }, + { text: 'MITER', type: 'var', params: [], p5: true }, + { text: 'RGB', type: 'var', params: [], p5: true }, + { text: 'HSB', type: 'var', params: [], p5: true }, + { text: 'HSL', type: 'var', params: [], p5: true }, + { text: 'AUTO', type: 'var', params: [], p5: true }, + { text: 'ALT', type: 'var', params: [], p5: true }, + { text: 'BACKSPACE', type: 'var', params: [], p5: true }, + { text: 'CONTROL', type: 'var', params: [], p5: true }, + { text: 'DELETE', type: 'var', params: [], p5: true }, + { text: 'DOWN_ARROW', type: 'var', params: [], p5: true }, + { text: 'ENTER', type: 'var', params: [], p5: true }, + { text: 'ESCAPE', type: 'var', params: [], p5: true }, + { text: 'LEFT_ARROW', type: 'var', params: [], p5: true }, + { text: 'OPTION', type: 'var', params: [], p5: true }, + { text: 'RETURN', type: 'var', params: [], p5: true }, + { text: 'RIGHT_ARROW', type: 'var', params: [], p5: true }, + { text: 'SHIFT', type: 'var', params: [], p5: true }, + { text: 'TAB', type: 'var', params: [], p5: true }, + { text: 'UP_ARROW', type: 'var', params: [], p5: true }, + { text: 'BLEND', type: 'var', params: [], p5: true }, + { text: 'REMOVE', type: 'var', params: [], p5: true }, + { text: 'ADD', type: 'var', params: [], p5: true }, + { text: 'DARKEST', type: 'var', params: [], p5: true }, + { text: 'LIGHTEST', type: 'var', params: [], p5: true }, + { text: 'DIFFERENCE', type: 'var', params: [], p5: true }, + { text: 'SUBTRACT', type: 'var', params: [], p5: true }, + { text: 'EXCLUSION', type: 'var', params: [], p5: true }, + { text: 'MULTIPLY', type: 'var', params: [], p5: true }, + { text: 'SCREEN', type: 'var', params: [], p5: true }, + { text: 'REPLACE', type: 'var', params: [], p5: true }, + { text: 'OVERLAY', type: 'var', params: [], p5: true }, + { text: 'HARD_LIGHT', type: 'var', params: [], p5: true }, + { text: 'SOFT_LIGHT', type: 'var', params: [], p5: true }, + { text: 'DODGE', type: 'var', params: [], p5: true }, + { text: 'BURN', type: 'var', params: [], p5: true }, + { text: 'THRESHOLD', type: 'var', params: [], p5: true }, + { text: 'GRAY', type: 'var', params: [], p5: true }, + { text: 'OPAQUE', type: 'var', params: [], p5: true }, + { text: 'INVERT', type: 'var', params: [], p5: true }, + { text: 'POSTERIZE', type: 'var', params: [], p5: true }, + { text: 'DILATE', type: 'var', params: [], p5: true }, + { text: 'ERODE', type: 'var', params: [], p5: true }, + { text: 'BLUR', type: 'var', params: [], p5: true }, + { text: 'NORMAL', type: 'var', params: [], p5: true }, + { text: 'ITALIC', type: 'var', params: [], p5: true }, + { text: 'BOLD', type: 'var', params: [], p5: true }, + { text: 'BOLDITALIC', type: 'var', params: [], p5: true }, + { text: 'CHAR', type: 'var', params: [], p5: true }, + { text: 'WORD', type: 'var', params: [], p5: true }, + { text: 'LINEAR', type: 'var', params: [], p5: true }, + { text: 'QUADRATIC', type: 'var', params: [], p5: true }, + { text: 'BEZIER', type: 'var', params: [], p5: true }, + { text: 'CURVE', type: 'var', params: [], p5: true }, + { text: 'STROKE', type: 'var', params: [], p5: true }, + { text: 'FILL', type: 'var', params: [], p5: true }, + { text: 'TEXTURE', type: 'var', params: [], p5: true }, + { text: 'IMMEDIATE', type: 'var', params: [], p5: true }, + { text: 'IMAGE', type: 'var', params: [], p5: true }, + { text: 'NEAREST', type: 'var', params: [], p5: true }, + { text: 'REPEAT', type: 'var', params: [], p5: true }, + { text: 'CLAMP', type: 'var', params: [], p5: true }, + { text: 'MIRROR', type: 'var', params: [], p5: true }, + { text: 'FLAT', type: 'var', params: [], p5: true }, + { text: 'SMOOTH', type: 'var', params: [], p5: true }, + { text: 'LANDSCAPE', type: 'var', params: [], p5: true }, + { text: 'PORTRAIT', type: 'var', params: [], p5: true }, + { text: 'GRID', type: 'var', params: [], p5: true }, + { text: 'AXES', type: 'var', params: [], p5: true }, + { text: 'LABEL', type: 'var', params: [], p5: true }, + { text: 'FALLBACK', type: 'var', params: [], p5: true }, + { text: 'CONTAIN', type: 'var', params: [], p5: true }, + { text: 'COVER', type: 'var', params: [], p5: true }, + { text: 'UNSIGNED_BYTE', type: 'var', params: [], p5: true }, + { text: 'UNSIGNED_INT', type: 'var', params: [], p5: true }, + { text: 'FLOAT', type: 'var', params: [], p5: true }, + { text: 'HALF_FLOAT', type: 'var', params: [], p5: true }, + { text: 'RGBA', type: 'var', params: [], p5: true }, + { + text: 'print', + type: 'fun', + params: [{ p: 'contents', o: false }], + p5: true + }, + { text: 'frameCount', type: 'var', params: [], p5: true }, + { text: 'deltaTime', type: 'var', params: [], p5: true }, + { text: 'focused', type: 'var', params: [], p5: true }, + { + text: 'cursor', + type: 'fun', + params: [ + { p: 'type', o: false }, + { p: 'x', o: true }, + { p: 'y', o: true } + ], + p5: true + }, + { text: 'frameRate', type: 'fun', p5: true }, + { text: 'getTargetFrameRate', type: 'fun', p5: true }, + { text: 'noCursor', type: 'fun', p5: true }, + { text: 'webglVersion', type: 'var', params: [], p5: true }, + { text: 'displayWidth', type: 'var', params: [], p5: true }, + { text: 'displayHeight', type: 'var', params: [], p5: true }, + { text: 'windowWidth', type: 'var', params: [], p5: true }, + { text: 'windowHeight', type: 'var', params: [], p5: true }, + { + text: 'windowResized', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { text: 'width', type: 'var', params: [], p5: true }, + { text: 'height', type: 'var', params: [], p5: true }, + { + text: 'fullscreen', + type: 'fun', + params: [{ p: 'val', o: true }], + p5: true + }, + { text: 'pixelDensity', type: 'fun', p5: true }, + { text: 'displayDensity', type: 'fun', p5: true }, + { text: 'getURL', type: 'fun', p5: true }, + { text: 'getURLPath', type: 'fun', p5: true }, + { text: 'getURLParams', type: 'fun', p5: true }, + { text: 'preload', type: 'fun', p5: true }, + { text: 'setup', type: 'fun', p5: true }, + { text: 'draw', type: 'fun', p5: true }, + { text: 'remove', type: 'fun', p5: true }, + { text: 'disableFriendlyErrors', type: 'var', params: [], p5: true }, + { text: 'createCanvas', type: 'fun', p5: true }, + { + text: 'resizeCanvas', + type: 'fun', + params: [ + { p: 'width', o: false }, + { p: 'height', o: false }, + { p: 'noRedraw', o: true } + ], + p5: true + }, + { text: 'noCanvas', type: 'fun', p5: true }, + { text: 'createGraphics', type: 'fun', p5: true }, + { + text: 'createFramebuffer', + type: 'fun', + params: [{ p: 'options', o: true }], + p5: true + }, + { + text: 'clearDepth', + type: 'fun', + params: [{ p: 'depth', o: true }], + p5: true + }, + { + text: 'blendMode', + type: 'fun', + params: [{ p: 'mode', o: false }], + p5: true + }, + { text: 'drawingContext', type: 'var', params: [], p5: true }, + { text: 'noLoop', type: 'fun', p5: true }, + { text: 'loop', type: 'fun', p5: true }, + { text: 'isLooping', type: 'fun', p5: true }, + { text: 'push', type: 'fun', p5: true }, + { text: 'pop', type: 'fun', p5: true }, + { text: 'redraw', type: 'fun', params: [{ p: 'n', o: true }], p5: true }, + { + text: 'p5', + type: 'fun', + params: [ + { p: 'sketch', o: false }, + { p: 'node', o: false } + ], + p5: true + }, + { text: 'applyMatrix', type: 'fun', p5: true }, + { text: 'resetMatrix', type: 'fun', p5: true }, + { + text: 'rotate', + type: 'fun', + params: [ + { p: 'angle', o: false }, + { p: 'axis', o: true } + ], + p5: true + }, + { + text: 'rotateX', + type: 'fun', + params: [{ p: 'angle', o: false }], + p5: true + }, + { + text: 'rotateY', + type: 'fun', + params: [{ p: 'angle', o: false }], + p5: true + }, + { + text: 'rotateZ', + type: 'fun', + params: [{ p: 'angle', o: false }], + p5: true + }, + { text: 'scale', type: 'fun', p5: true }, + { text: 'shearX', type: 'fun', params: [{ p: 'angle', o: false }], p5: true }, + { text: 'shearY', type: 'fun', params: [{ p: 'angle', o: false }], p5: true }, + { text: 'translate', type: 'fun', p5: true }, + { + text: 'storeItem', + type: 'fun', + params: [ + { p: 'key', o: false }, + { p: 'value', o: false } + ], + p5: true + }, + { text: 'getItem', type: 'fun', params: [{ p: 'key', o: false }], p5: true }, + { text: 'clearStorage', type: 'fun', p5: true }, + { + text: 'removeItem', + type: 'fun', + params: [{ p: 'key', o: false }], + p5: true + }, + { text: 'createStringDict', type: 'fun', p5: true }, + { text: 'createNumberDict', type: 'fun', p5: true }, + { + text: 'select', + type: 'fun', + params: [ + { p: 'selectors', o: false }, + { p: 'container', o: true } + ], + p5: true + }, + { + text: 'selectAll', + type: 'fun', + params: [ + { p: 'selectors', o: false }, + { p: 'container', o: true } + ], + p5: true + }, + { text: 'removeElements', type: 'fun', p5: true }, + { text: 'changed', type: 'fun', params: [{ p: 'fxn', o: false }], p5: true }, + { text: 'input', type: 'fun', params: [{ p: 'fxn', o: false }], p5: true }, + { + text: 'createDiv', + type: 'fun', + params: [{ p: 'html', o: true }], + p5: true + }, + { text: 'createP', type: 'fun', params: [{ p: 'html', o: true }], p5: true }, + { + text: 'createSpan', + type: 'fun', + params: [{ p: 'html', o: true }], + p5: true + }, + { text: 'createImg', type: 'fun', p5: true }, + { + text: 'createA', + type: 'fun', + params: [ + { p: 'href', o: false }, + { p: 'html', o: false }, + { p: 'target', o: true } + ], + p5: true + }, + { + text: 'createSlider', + type: 'fun', + params: [ + { p: 'min', o: false }, + { p: 'max', o: false }, + { p: 'value', o: true }, + { p: 'step', o: true } + ], + p5: true + }, + { + text: 'createButton', + type: 'fun', + params: [ + { p: 'label', o: false }, + { p: 'value', o: true } + ], + p5: true + }, + { + text: 'createCheckbox', + type: 'fun', + params: [ + { p: 'label', o: true }, + { p: 'value', o: true } + ], + p5: true + }, + { text: 'createSelect', type: 'fun', p5: true }, + { text: 'createRadio', type: 'fun', p5: true }, + { + text: 'createColorPicker', + type: 'fun', + params: [{ p: 'value', o: true }], + p5: true + }, + { text: 'createInput', type: 'fun', p5: true }, + { + text: 'createFileInput', + type: 'fun', + params: [ + { p: 'callback', o: false }, + { p: 'multiple', o: true } + ], + p5: true + }, + { + text: 'createVideo', + type: 'fun', + params: [ + { p: 'src', o: false }, + { p: 'callback', o: true } + ], + p5: true + }, + { + text: 'createAudio', + type: 'fun', + params: [ + { p: 'src', o: true }, + { p: 'callback', o: true } + ], + p5: true + }, + { + text: 'createCapture', + type: 'fun', + params: [ + { p: 'type', o: true }, + { p: 'flipped', o: true }, + { p: 'callback', o: true } + ], + p5: true + }, + { + text: 'createElement', + type: 'fun', + params: [ + { p: 'tag', o: false }, + { p: 'content', o: true } + ], + p5: true + }, + { text: 'deviceOrientation', type: 'var', params: [], p5: true }, + { text: 'accelerationX', type: 'var', params: [], p5: true }, + { text: 'accelerationY', type: 'var', params: [], p5: true }, + { text: 'accelerationZ', type: 'var', params: [], p5: true }, + { text: 'pAccelerationX', type: 'var', params: [], p5: true }, + { text: 'pAccelerationY', type: 'var', params: [], p5: true }, + { text: 'pAccelerationZ', type: 'var', params: [], p5: true }, + { text: 'rotationX', type: 'var', params: [], p5: true }, + { text: 'rotationY', type: 'var', params: [], p5: true }, + { text: 'rotationZ', type: 'var', params: [], p5: true }, + { text: 'pRotationX', type: 'var', params: [], p5: true }, + { text: 'pRotationY', type: 'var', params: [], p5: true }, + { text: 'pRotationZ', type: 'var', params: [], p5: true }, + { text: 'turnAxis', type: 'var', params: [], p5: true }, + { + text: 'setMoveThreshold', + type: 'fun', + params: [{ p: 'value', o: false }], + p5: true + }, + { + text: 'setShakeThreshold', + type: 'fun', + params: [{ p: 'value', o: false }], + p5: true + }, + { text: 'deviceMoved', type: 'fun', p5: true }, + { text: 'deviceTurned', type: 'fun', p5: true }, + { text: 'deviceShaken', type: 'fun', p5: true }, + { text: 'keyIsPressed', type: 'var', params: [], p5: true }, + { text: 'key', type: 'var', params: [], p5: true }, + { text: 'keyCode', type: 'var', params: [], p5: true }, + { + text: 'keyPressed', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'keyReleased', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'keyTyped', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'keyIsDown', + type: 'fun', + params: [{ p: 'code', o: false }], + p5: true + }, + { text: 'movedX', type: 'var', params: [], p5: true }, + { text: 'movedY', type: 'var', params: [], p5: true }, + { text: 'mouseX', type: 'var', params: [], p5: true }, + { text: 'mouseY', type: 'var', params: [], p5: true }, + { text: 'pmouseX', type: 'var', params: [], p5: true }, + { text: 'pmouseY', type: 'var', params: [], p5: true }, + { text: 'winMouseX', type: 'var', params: [], p5: true }, + { text: 'winMouseY', type: 'var', params: [], p5: true }, + { text: 'pwinMouseX', type: 'var', params: [], p5: true }, + { text: 'pwinMouseY', type: 'var', params: [], p5: true }, + { text: 'mouseButton', type: 'var', params: [], p5: true }, + { text: 'mouseIsPressed', type: 'var', params: [], p5: true }, + { + text: 'mouseMoved', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'mouseDragged', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'mousePressed', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'mouseReleased', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'mouseClicked', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'doubleClicked', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'mouseWheel', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { text: 'requestPointerLock', type: 'fun', p5: true }, + { text: 'exitPointerLock', type: 'fun', p5: true }, + { text: 'touches', type: 'var', params: [], p5: true }, + { + text: 'touchStarted', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'touchMoved', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'touchEnded', + type: 'fun', + params: [{ p: 'event', o: true }], + p5: true + }, + { + text: 'createImage', + type: 'fun', + params: [ + { p: 'width', o: false }, + { p: 'height', o: false } + ], + p5: true + }, + { text: 'saveCanvas', type: 'fun', p5: true }, + { + text: 'saveFrames', + type: 'fun', + params: [ + { p: 'filename', o: false }, + { p: 'extension', o: false }, + { p: 'duration', o: false }, + { p: 'framerate', o: false }, + { p: 'callback', o: true } + ], + p5: true + }, + { + text: 'loadImage', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'successCallback', o: true }, + { p: 'failureCallback', o: true } + ], + p5: true + }, + { + text: 'saveGif', + type: 'fun', + params: [ + { p: 'filename', o: false }, + { p: 'duration', o: false }, + { p: 'options', o: true } + ], + p5: true + }, + { text: 'image', type: 'fun', p5: true }, + { text: 'tint', type: 'fun', p5: true }, + { text: 'noTint', type: 'fun', p5: true }, + { + text: 'imageMode', + type: 'fun', + params: [{ p: 'mode', o: false }], + p5: true + }, + { text: 'pixels', type: 'var', params: [], p5: true }, + { text: 'blend', type: 'fun', p5: true }, + { text: 'copy', type: 'fun', p5: true }, + { text: 'filter', type: 'fun', p5: true }, + { text: 'get', type: 'fun', p5: true }, + { text: 'loadPixels', type: 'fun', p5: true }, + { + text: 'set', + type: 'fun', + params: [ + { p: 'x', o: false }, + { p: 'y', o: false }, + { p: 'c', o: false } + ], + p5: true + }, + { + text: 'updatePixels', + type: 'fun', + params: [ + { p: 'x', o: true }, + { p: 'y', o: true }, + { p: 'w', o: true }, + { p: 'h', o: true } + ], + p5: true + }, + { + text: 'loadJSON', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'successCallback', o: true }, + { p: 'errorCallback', o: true } + ], + p5: true + }, + { + text: 'loadStrings', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'successCallback', o: true }, + { p: 'errorCallback', o: true } + ], + p5: true + }, + { + text: 'loadTable', + type: 'fun', + params: [ + { p: 'filename', o: false }, + { p: 'extension', o: true }, + { p: 'header', o: true }, + { p: 'callback', o: true }, + { p: 'errorCallback', o: true } + ], + p5: true + }, + { + text: 'loadXML', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'successCallback', o: true }, + { p: 'errorCallback', o: true } + ], + p5: true + }, + { + text: 'loadBytes', + type: 'fun', + params: [ + { p: 'file', o: false }, + { p: 'callback', o: true }, + { p: 'errorCallback', o: true } + ], + p5: true + }, + { text: 'httpGet', type: 'fun', p5: true }, + { text: 'httpPost', type: 'fun', p5: true }, + { text: 'httpDo', type: 'fun', p5: true }, + { + text: 'createWriter', + type: 'fun', + params: [ + { p: 'name', o: false }, + { p: 'extension', o: true } + ], + p5: true + }, + { + text: 'save', + type: 'fun', + params: [ + { p: 'objectOrFilename', o: true }, + { p: 'filename', o: true }, + { p: 'options', o: true } + ], + p5: true + }, + { + text: 'saveJSON', + type: 'fun', + params: [ + { p: 'json', o: false }, + { p: 'filename', o: false }, + { p: 'optimize', o: true } + ], + p5: true + }, + { + text: 'saveStrings', + type: 'fun', + params: [ + { p: 'list', o: false }, + { p: 'filename', o: false }, + { p: 'extension', o: true }, + { p: 'isCRLF', o: true } + ], + p5: true + }, + { + text: 'saveTable', + type: 'fun', + params: [ + { p: 'Table', o: false }, + { p: 'filename', o: false }, + { p: 'options', o: true } + ], + p5: true + }, + { text: 'abs', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { text: 'ceil', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { + text: 'constrain', + type: 'fun', + params: [ + { p: 'n', o: false }, + { p: 'low', o: false }, + { p: 'high', o: false } + ], + p5: true + }, + { text: 'dist', type: 'fun', p5: true }, + { text: 'exp', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { text: 'floor', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { + text: 'lerp', + type: 'fun', + params: [ + { p: 'start', o: false }, + { p: 'stop', o: false }, + { p: 'amt', o: false } + ], + p5: true + }, + { text: 'log', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { + text: 'mag', + type: 'fun', + params: [ + { p: 'x', o: false }, + { p: 'y', o: false } + ], + p5: true + }, + { + text: 'map', + type: 'fun', + params: [ + { p: 'value', o: false }, + { p: 'start1', o: false }, + { p: 'stop1', o: false }, + { p: 'start2', o: false }, + { p: 'stop2', o: false }, + { p: 'withinBounds', o: true } + ], + p5: true + }, + { text: 'max', type: 'fun', p5: true }, + { text: 'min', type: 'fun', p5: true }, + { + text: 'norm', + type: 'fun', + params: [ + { p: 'value', o: false }, + { p: 'start', o: false }, + { p: 'stop', o: false } + ], + p5: true + }, + { + text: 'pow', + type: 'fun', + params: [ + { p: 'n', o: false }, + { p: 'e', o: false } + ], + p5: true + }, + { + text: 'round', + type: 'fun', + params: [ + { p: 'n', o: false }, + { p: 'decimals', o: true } + ], + p5: true + }, + { text: 'sq', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { text: 'sqrt', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { text: 'fract', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { + text: 'createVector', + type: 'fun', + params: [ + { p: 'x', o: true }, + { p: 'y', o: true }, + { p: 'z', o: true } + ], + p5: true + }, + { + text: 'noise', + type: 'fun', + params: [ + { p: 'x', o: false }, + { p: 'y', o: true }, + { p: 'z', o: true } + ], + p5: true + }, + { + text: 'noiseDetail', + type: 'fun', + params: [ + { p: 'lod', o: false }, + { p: 'falloff', o: false } + ], + p5: true + }, + { + text: 'noiseSeed', + type: 'fun', + params: [{ p: 'seed', o: false }], + p5: true + }, + { + text: 'randomSeed', + type: 'fun', + params: [{ p: 'seed', o: false }], + p5: true + }, + { text: 'random', type: 'fun', p5: true }, + { + text: 'randomGaussian', + type: 'fun', + params: [ + { p: 'mean', o: true }, + { p: 'sd', o: true } + ], + p5: true + }, + { text: 'acos', type: 'fun', params: [{ p: 'value', o: false }], p5: true }, + { text: 'asin', type: 'fun', params: [{ p: 'value', o: false }], p5: true }, + { text: 'atan', type: 'fun', params: [{ p: 'value', o: false }], p5: true }, + { + text: 'atan2', + type: 'fun', + params: [ + { p: 'y', o: false }, + { p: 'x', o: false } + ], + p5: true + }, + { text: 'cos', type: 'fun', params: [{ p: 'angle', o: false }], p5: true }, + { text: 'sin', type: 'fun', params: [{ p: 'angle', o: false }], p5: true }, + { text: 'tan', type: 'fun', params: [{ p: 'angle', o: false }], p5: true }, + { + text: 'degrees', + type: 'fun', + params: [{ p: 'radians', o: false }], + p5: true + }, + { + text: 'radians', + type: 'fun', + params: [{ p: 'degrees', o: false }], + p5: true + }, + { text: 'angleMode', type: 'fun', p5: true }, + { text: 'textAlign', type: 'fun', p5: true }, + { text: 'textLeading', type: 'fun', p5: true }, + { text: 'textSize', type: 'fun', p5: true }, + { text: 'textStyle', type: 'fun', p5: true }, + { + text: 'textWidth', + type: 'fun', + params: [{ p: 'str', o: false }], + p5: true + }, + { text: 'textAscent', type: 'fun', p5: true }, + { text: 'textDescent', type: 'fun', p5: true }, + { + text: 'textWrap', + type: 'fun', + params: [{ p: 'style', o: false }], + p5: true + }, + { + text: 'loadFont', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'successCallback', o: true }, + { p: 'failureCallback', o: true } + ], + p5: true + }, + { + text: 'text', + type: 'fun', + params: [ + { p: 'str', o: false }, + { p: 'x', o: false }, + { p: 'y', o: false }, + { p: 'maxWidth', o: true }, + { p: 'maxHeight', o: true } + ], + p5: true + }, + { text: 'textFont', type: 'fun', p5: true }, + { + text: 'append', + type: 'fun', + params: [ + { p: 'array', o: false }, + { p: 'value', o: false } + ], + p5: true + }, + { text: 'arrayCopy', type: 'fun', p5: true }, + { + text: 'concat', + type: 'fun', + params: [ + { p: 'a', o: false }, + { p: 'b', o: false } + ], + p5: true + }, + { text: 'reverse', type: 'fun', params: [{ p: 'list', o: false }], p5: true }, + { text: 'shorten', type: 'fun', params: [{ p: 'list', o: false }], p5: true }, + { + text: 'shuffle', + type: 'fun', + params: [ + { p: 'array', o: false }, + { p: 'bool', o: true } + ], + p5: true + }, + { + text: 'sort', + type: 'fun', + params: [ + { p: 'list', o: false }, + { p: 'count', o: true } + ], + p5: true + }, + { + text: 'splice', + type: 'fun', + params: [ + { p: 'list', o: false }, + { p: 'value', o: false }, + { p: 'position', o: false } + ], + p5: true + }, + { + text: 'subset', + type: 'fun', + params: [ + { p: 'list', o: false }, + { p: 'start', o: false }, + { p: 'count', o: true } + ], + p5: true + }, + { text: 'float', type: 'fun', p5: true }, + { text: 'int', type: 'fun', p5: true }, + { text: 'str', type: 'fun', params: [{ p: 'n', o: false }], p5: true }, + { text: 'boolean', type: 'fun', p5: true }, + { text: 'byte', type: 'fun', p5: true }, + { text: 'char', type: 'fun', p5: true }, + { text: 'unchar', type: 'fun', p5: true }, + { text: 'hex', type: 'fun', p5: true }, + { text: 'unhex', type: 'fun', p5: true }, + { + text: 'join', + type: 'fun', + params: [ + { p: 'list', o: false }, + { p: 'separator', o: false } + ], + p5: true + }, + { + text: 'match', + type: 'fun', + params: [ + { p: 'str', o: false }, + { p: 'regexp', o: false } + ], + p5: true + }, + { + text: 'matchAll', + type: 'fun', + params: [ + { p: 'str', o: false }, + { p: 'regexp', o: false } + ], + p5: true + }, + { text: 'nf', type: 'fun', p5: true }, + { text: 'nfc', type: 'fun', p5: true }, + { text: 'nfp', type: 'fun', p5: true }, + { text: 'nfs', type: 'fun', p5: true }, + { + text: 'split', + type: 'fun', + params: [ + { p: 'value', o: false }, + { p: 'delim', o: false } + ], + p5: true + }, + { + text: 'splitTokens', + type: 'fun', + params: [ + { p: 'value', o: false }, + { p: 'delim', o: true } + ], + p5: true + }, + { text: 'trim', type: 'fun', p5: true }, + { text: 'day', type: 'fun', p5: true }, + { text: 'hour', type: 'fun', p5: true }, + { text: 'minute', type: 'fun', p5: true }, + { text: 'millis', type: 'fun', p5: true }, + { text: 'month', type: 'fun', p5: true }, + { text: 'second', type: 'fun', p5: true }, + { text: 'year', type: 'fun', p5: true }, + { text: 'beginGeometry', type: 'fun', p5: true }, + { text: 'endGeometry', type: 'fun', p5: true }, + { + text: 'buildGeometry', + type: 'fun', + params: [{ p: 'callback', o: false }], + p5: true + }, + { + text: 'freeGeometry', + type: 'fun', + params: [{ p: 'geometry', o: false }], + p5: true + }, + { + text: 'plane', + type: 'fun', + params: [ + { p: 'width', o: true }, + { p: 'height', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true } + ], + p5: true + }, + { + text: 'box', + type: 'fun', + params: [ + { p: 'width', o: true }, + { p: 'height', o: true }, + { p: 'depth', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true } + ], + p5: true + }, + { + text: 'sphere', + type: 'fun', + params: [ + { p: 'radius', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true } + ], + p5: true + }, + { + text: 'cylinder', + type: 'fun', + params: [ + { p: 'radius', o: true }, + { p: 'height', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true }, + { p: 'bottomCap', o: true }, + { p: 'topCap', o: true } + ], + p5: true + }, + { + text: 'cone', + type: 'fun', + params: [ + { p: 'radius', o: true }, + { p: 'height', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true }, + { p: 'cap', o: true } + ], + p5: true + }, + { + text: 'ellipsoid', + type: 'fun', + params: [ + { p: 'radiusX', o: true }, + { p: 'radiusY', o: true }, + { p: 'radiusZ', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true } + ], + p5: true + }, + { + text: 'torus', + type: 'fun', + params: [ + { p: 'radius', o: true }, + { p: 'tubeRadius', o: true }, + { p: 'detailX', o: true }, + { p: 'detailY', o: true } + ], + p5: true + }, + { + text: 'orbitControl', + type: 'fun', + params: [ + { p: 'sensitivityX', o: true }, + { p: 'sensitivityY', o: true }, + { p: 'sensitivityZ', o: true }, + { p: 'options', o: true } + ], + p5: true + }, + { text: 'debugMode', type: 'fun', p5: true }, + { text: 'noDebugMode', type: 'fun', p5: true }, + { text: 'ambientLight', type: 'fun', p5: true }, + { text: 'specularColor', type: 'fun', p5: true }, + { text: 'directionalLight', type: 'fun', p5: true }, + { text: 'pointLight', type: 'fun', p5: true }, + { + text: 'imageLight', + type: 'fun', + params: [{ p: 'img', o: false }], + p5: true + }, + { text: 'panorama', type: 'fun', params: [{ p: 'img', o: false }], p5: true }, + { text: 'lights', type: 'fun', p5: true }, + { + text: 'lightFalloff', + type: 'fun', + params: [ + { p: 'constant', o: false }, + { p: 'linear', o: false }, + { p: 'quadratic', o: false } + ], + p5: true + }, + { text: 'spotLight', type: 'fun', p5: true }, + { text: 'noLights', type: 'fun', p5: true }, + { text: 'loadModel', type: 'fun', p5: true }, + { text: 'model', type: 'fun', params: [{ p: 'model', o: false }], p5: true }, + { + text: 'loadShader', + type: 'fun', + params: [ + { p: 'vertFilename', o: false }, + { p: 'fragFilename', o: false }, + { p: 'successCallback', o: true }, + { p: 'failureCallback', o: true } + ], + p5: true + }, + { + text: 'createShader', + type: 'fun', + params: [ + { p: 'vertSrc', o: false }, + { p: 'fragSrc', o: false } + ], + p5: true + }, + { + text: 'createFilterShader', + type: 'fun', + params: [{ p: 'fragSrc', o: false }], + p5: true + }, + { text: 'shader', type: 'fun', params: [{ p: 's', o: false }], p5: true }, + { text: 'resetShader', type: 'fun', p5: true }, + { text: 'texture', type: 'fun', params: [{ p: 'tex', o: false }], p5: true }, + { + text: 'textureMode', + type: 'fun', + params: [{ p: 'mode', o: false }], + p5: true + }, + { + text: 'textureWrap', + type: 'fun', + params: [ + { p: 'wrapX', o: false }, + { p: 'wrapY', o: true } + ], + p5: true + }, + { text: 'normalMaterial', type: 'fun', p5: true }, + { text: 'ambientMaterial', type: 'fun', p5: true }, + { text: 'emissiveMaterial', type: 'fun', p5: true }, + { text: 'specularMaterial', type: 'fun', p5: true }, + { + text: 'shininess', + type: 'fun', + params: [{ p: 'shine', o: false }], + p5: true + }, + { + text: 'metalness', + type: 'fun', + params: [{ p: 'metallic', o: false }], + p5: true + }, + { + text: 'camera', + type: 'fun', + params: [ + { p: 'x', o: true }, + { p: 'y', o: true }, + { p: 'z', o: true }, + { p: 'centerX', o: true }, + { p: 'centerY', o: true }, + { p: 'centerZ', o: true }, + { p: 'upX', o: true }, + { p: 'upY', o: true }, + { p: 'upZ', o: true } + ], + p5: true + }, + { + text: 'perspective', + type: 'fun', + params: [ + { p: 'fovy', o: true }, + { p: 'aspect', o: true }, + { p: 'near', o: true }, + { p: 'far', o: true } + ], + p5: true + }, + { text: 'linePerspective', type: 'fun', p5: true }, + { + text: 'ortho', + type: 'fun', + params: [ + { p: 'left', o: true }, + { p: 'right', o: true }, + { p: 'bottom', o: true }, + { p: 'top', o: true }, + { p: 'near', o: true }, + { p: 'far', o: true } + ], + p5: true + }, + { + text: 'frustum', + type: 'fun', + params: [ + { p: 'left', o: true }, + { p: 'right', o: true }, + { p: 'bottom', o: true }, + { p: 'top', o: true }, + { p: 'near', o: true }, + { p: 'far', o: true } + ], + p5: true + }, + { text: 'createCamera', type: 'fun', p5: true }, + { + text: 'setCamera', + type: 'fun', + params: [{ p: 'cam', o: false }], + p5: true + }, + { text: 'setAttributes', type: 'fun', p5: true }, + { text: 'getAudioContext', type: 'fun', p5: true }, + { + text: 'userStartAudio', + type: 'fun', + params: [ + { p: 'elements', o: true }, + { p: 'callback', o: true } + ], + p5: true + }, + { text: 'getOutputVolume', type: 'fun', p5: true }, + { + text: 'outputVolume', + type: 'fun', + params: [ + { p: 'volume', o: false }, + { p: 'rampTime', o: true }, + { p: 'timeFromNow', o: true } + ], + p5: true + }, + { text: 'soundOut', type: 'var', params: [], p5: true }, + { text: 'sampleRate', type: 'fun', p5: true }, + { + text: 'freqToMidi', + type: 'fun', + params: [{ p: 'frequency', o: false }], + p5: true + }, + { + text: 'midiToFreq', + type: 'fun', + params: [{ p: 'midiNote', o: false }], + p5: true + }, + { + text: 'soundFormats', + type: 'fun', + params: [{ p: 'formats', o: true }], + p5: true + }, + { + text: 'saveSound', + type: 'fun', + params: [ + { p: 'soundFile', o: false }, + { p: 'fileName', o: false } + ], + p5: true + }, + { + text: 'loadSound', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'successCallback', o: true }, + { p: 'errorCallback', o: true }, + { p: 'whileLoading', o: true } + ], + p5: true + }, + { + text: 'createConvolver', + type: 'fun', + params: [ + { p: 'path', o: false }, + { p: 'callback', o: true }, + { p: 'errorCallback', o: true } + ], + p5: true + }, + { + text: 'setBPM', + type: 'fun', + params: [ + { p: 'BPM', o: false }, + { p: 'rampTime', o: false } + ], + p5: true + }, + { text: 'true', type: 'boolean', p5: 'boolean' }, + { text: 'false', type: 'boolean', p5: 'boolean' }, + { text: 'await', type: 'keyword', p5: false }, + { text: 'break', type: 'keyword', p5: false }, + { text: 'case', type: 'keyword', p5: false }, + { text: 'catch', type: 'keyword', p5: false }, + { text: 'class', type: 'keyword', p5: 'class' }, + { text: 'const', type: 'keyword', p5: 'const' }, + { text: 'continue', type: 'keyword', p5: false }, + { text: 'debugger', type: 'keyword', p5: false }, + { text: 'default', type: 'keyword', p5: false }, + { text: 'delete', type: 'keyword', p5: false }, + { text: 'do', type: 'keyword', p5: false }, + { text: 'else', type: 'keyword', p5: 'if-else' }, + { text: 'export', type: 'keyword', p5: false }, + { text: 'extends', type: 'keyword', p5: false }, + { text: 'finally', type: 'keyword', p5: false }, + { text: 'for', type: 'keyword', p5: 'for' }, + { text: 'function', type: 'keyword', p5: 'function' }, + { text: 'if', type: 'keyword', p5: 'if-else' }, + { text: 'import', type: 'keyword', p5: false }, + { text: 'in', type: 'keyword', p5: false }, + { text: 'instanceof', type: 'keyword', p5: false }, + { text: 'new', type: 'keyword', p5: false }, + { text: 'return', type: 'keyword', p5: 'return' }, + { text: 'super', type: 'keyword', p5: false }, + { text: 'switch', type: 'keyword', p5: false }, + { text: 'this', type: 'keyword', p5: false }, + { text: 'throw', type: 'keyword', p5: false }, + { text: 'try', type: 'keyword', p5: false }, + { text: 'typeof', type: 'keyword', p5: false }, + { text: 'var', type: 'keyword', p5: false }, + { text: 'void', type: 'keyword', p5: false }, + { text: 'while', type: 'keyword', p5: 'while' }, + { text: 'with', type: 'keyword', p5: false }, + { text: 'yield', type: 'keyword', p5: false }, + { text: 'let', type: 'keyword', p5: 'let' }, + { text: 'Array', type: 'obj', p5: false }, + { text: 'Boolean', type: 'obj', p5: false }, + { text: 'Date', type: 'obj', p5: false }, + { text: 'Error', type: 'obj', p5: false }, + { text: 'Function', type: 'obj', p5: false }, + { text: 'JSON', type: 'obj', p5: 'JSON' }, + { text: 'Math', type: 'obj', p5: false }, + { text: 'Number', type: 'obj', p5: false }, + { text: 'Object', type: 'obj', p5: false }, + { text: 'RegExp', type: 'obj', p5: false }, + { text: 'String', type: 'obj', p5: false }, + { text: 'Promise', type: 'obj', p5: false }, + { text: 'Set', type: 'obj', p5: false }, + { text: 'Map', type: 'obj', p5: false }, + { text: 'Symbol', type: 'obj', p5: false }, + { text: 'WeakMap', type: 'obj', p5: false }, + { text: 'WeakSet', type: 'obj', p5: false }, + { text: 'ArrayBuffer', type: 'obj', p5: false }, + { text: 'DataView', type: 'obj', p5: false }, + { text: 'Int32Array', type: 'obj', p5: false }, + { text: 'Uint32Array', type: 'obj', p5: false }, + { text: 'Float32Array', type: 'obj', p5: false }, + { text: 'window', type: 'obj', p5: false }, + { text: 'document', type: 'obj', p5: false }, + { text: 'navigator', type: 'obj', p5: false }, + { text: 'console', type: 'obj', p5: 'console' }, + { text: 'localStorage', type: 'obj', p5: false }, + { text: 'sessionStorage', type: 'obj', p5: false }, + { text: 'history', type: 'obj', p5: false }, + { text: 'location', type: 'obj', p5: false } +]; From 55599670b2636b7c2e779652cd9016d1463c59b8 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Wed, 25 Jun 2025 12:45:05 +0530 Subject: [PATCH 05/28] user-defined context-aware variables, functions & classes suggestion --- .../modules/IDE/components/Editor/index.jsx | 4 - .../IDE/components/contextAwareHinter.js | 76 ++++++--- .../IDE/components/parseCodeVariables.js | 152 ++++++++++++++++-- client/modules/IDE/components/show-hint.js | 27 ---- 4 files changed, 193 insertions(+), 66 deletions(-) diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 494d7c2052..f810476e84 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -468,7 +468,6 @@ class Editor extends React.Component { const c = _cm.getCursor(); const token = _cm.getTokenAt(c); const hints = contextAwareHinter(_cm, { hinter: this.hinter }); - console.log('hints= ', hints); return { list: hints, from: CodeMirror.Pos(c.line, token.start), @@ -486,9 +485,6 @@ class Editor extends React.Component { // const hints = this.hinter // .search(token.string) // .filter((h) => h.item.text[0] === token.string[0]); - // console.log('c= ', c); - // console.log('token= ', token); - // console.log('hints= ', hints); // return { // list: hints, // from: CodeMirror.Pos(c.line, token.start), diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 0a4b08e9f8..5099bf6fba 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -1,6 +1,6 @@ import CodeMirror from 'codemirror'; import parseCode from './parseCode'; -import parseCodeVars from './parseCodeVariables'; +import parseCodeVariables from './parseCodeVariables'; import classMap from './class-with-methods-map.json'; const scopeMap = require('./finalScopeMap.json'); @@ -22,8 +22,6 @@ function getExpressionBeforeCursor(cm) { const cursor = cm.getCursor(); const line = cm.getLine(cursor.line); const uptoCursor = line.slice(0, cursor.ch); - console.log('the line is: ', line); - console.log('the line uptocursor is: ', uptoCursor); const match = uptoCursor.match( /([a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*)\.(?:[a-zA-Z_$][\w$]*)?$/ @@ -32,8 +30,13 @@ function getExpressionBeforeCursor(cm) { } export default function contextAwareHinter(cm, options = {}) { - const variableTypes = parseCodeVars(cm); - console.log('var types= ', variableTypes); + const { + p5ClassMap = {}, + varMap = [], + varScopeMap = {}, + userFuncMap = {}, + userClassMap = {} + } = parseCodeVariables(cm) || {}; const { hinter } = options; if (!hinter || typeof hinter.search !== 'function') { @@ -42,17 +45,25 @@ export default function contextAwareHinter(cm, options = {}) { } const baseExpression = getExpressionBeforeCursor(cm); - const className = variableTypes[baseExpression]; // e.g., p5.XML - console.log('base expression is= ', baseExpression); // If we're completing after a dot - if (baseExpression && className) { - console.log('Detected object expression:', baseExpression); - - console.log('Class of', baseExpression, '=', className); - - const methods = classMap[className]?.methods || []; - console.log('Available methods for class:', methods); + if (baseExpression) { + const className = p5ClassMap[baseExpression]; + const userClassEntry = Object.values(userClassMap).find( + (cls) => cls.initializer === baseExpression + ); + + let methods = []; + + if (userClassEntry?.methods) { + const { methods: userMethods } = userClassEntry; + methods = userMethods; + } else if (className && classMap[className]?.methods) { + const { methods: classMethods } = classMap[className]; + methods = classMethods; + } else { + return []; + } const cursor = cm.getCursor(); const lineText = cm.getLine(cursor.line); @@ -69,8 +80,6 @@ export default function contextAwareHinter(cm, options = {}) { from = cursor; } - console.log('fromm, dotmatch= ', from, dotMatch); - const to = { line: cursor.line, ch: cursor.ch }; let tokenLength = 0; if (dotMatch) { @@ -98,16 +107,39 @@ export default function contextAwareHinter(cm, options = {}) { const { line, ch } = cm.getCursor(); const { string } = cm.getTokenAt({ line, ch }); const currentWord = string.trim(); - console.log('current word= ', currentWord); - const context = parseCode(cm); + const currentContext = parseCode(cm); const allHints = hinter.search(currentWord); - const whitelist = scopeMap[context]?.whitelist || []; - const blacklist = scopeMap[context]?.blacklist || []; + const whitelist = scopeMap[currentContext]?.whitelist || []; + const blacklist = scopeMap[currentContext]?.blacklist || []; const lowerCurrentWord = currentWord.toLowerCase(); + function isInScope(varName) { + const varScope = varScopeMap[varName]; + if (!varScope) return false; + if (varScope === 'global') return true; + if (varScope === currentContext) return true; + return false; + } + + const varHints = varMap + .filter( + (varName) => + varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) + ) + .map((varName) => ({ + item: { + text: varName, + type: userFuncMap[varName] ? 'fun' : 'var' + }, + isBlacklisted: blacklist.includes(varName), + displayText: formatHintDisplay(varName, blacklist.includes(varName)), + from: { line, ch }, + to: { line, ch: ch - currentWord.length } + })); + const filteredHints = allHints .filter( (h) => @@ -127,6 +159,8 @@ export default function contextAwareHinter(cm, options = {}) { }; }); + const combinedHints = [...varHints, ...filteredHints]; + const typePriority = { fun: 0, var: 1, @@ -134,7 +168,7 @@ export default function contextAwareHinter(cm, options = {}) { other: 3 }; - const sorted = filteredHints.sort((a, b) => { + const sorted = combinedHints.sort((a, b) => { const nameA = a.item?.text || ''; const nameB = b.item?.text || ''; const typeA = a.item?.type || 'other'; diff --git a/client/modules/IDE/components/parseCodeVariables.js b/client/modules/IDE/components/parseCodeVariables.js index c7a29f0e68..21a2928e77 100644 --- a/client/modules/IDE/components/parseCodeVariables.js +++ b/client/modules/IDE/components/parseCodeVariables.js @@ -1,9 +1,14 @@ import * as acorn from 'acorn'; import * as walk from 'acorn-walk'; +import * as eslintScope from 'eslint-scope'; +import { debounce } from 'lodash'; import classMap from './class-with-methods-map.json'; -const functionToClass = {}; +const allFuncs = require('./listOfAllFunctions.json'); + +const allFunsList = new Set(allFuncs.functions.list); +const functionToClass = {}; Object.entries(classMap).forEach(([className, classData]) => { const createMethods = classData.createMethods || []; createMethods.forEach((fnName) => { @@ -11,34 +16,118 @@ Object.entries(classMap).forEach(([className, classData]) => { }); }); -export default function parseCodeVariables(_cm) { +// Cache to store last valid result +let lastValidResult = { + p5ClassMap: {}, + varMap: [], + varScopeMap: {}, + userFuncMap: {}, + userClassMap: {} +}; + +function _parseCodeVariables(_cm) { const code = _cm.getValue(); let ast; try { ast = acorn.parse(code, { ecmaVersion: 'latest', - sourceType: 'script' + sourceType: 'script', + locations: true, + ranges: true }); } catch (e) { - console.warn('Failed to parse code', e.message); - return {}; + console.warn('Failed to parse code - using cached result'); + return lastValidResult; } - const variableMap = {}; + const p5ClassMap = {}; // stores p5 class to methods mapping + const varMap = new Set(); + const varScopeMap = {}; + const userFuncMap = {}; + const userClassMap = {}; + + const scopeManager = eslintScope.analyze(ast, { + ecmaVersion: 2020, + sourceType: 'script' + }); + + scopeManager.scopes.forEach((scope) => { + const scopeName = + scope.type === 'function' + ? scope.block.id?.name || '' + : scope.type; + + scope.variables.forEach((variable) => { + variable.defs.forEach((def) => { + varScopeMap[def.name.name] = scopeName; + }); + }); + }); + + walk.simple(ast, { + ClassDeclaration(node) { + if (node.id && node.id.type === 'Identifier') { + const className = node.id.name; + const classInfo = { + const: new Set(), // use Set to avoid duplicates + methods: [] + }; + + node.body.body.forEach((element) => { + if (element.type === 'MethodDefinition') { + const methodName = element.key.name; + + if (element.kind === 'constructor') { + element.value.body.body.forEach((stmt) => { + if ( + stmt.type === 'ExpressionStatement' && + stmt.expression.type === 'AssignmentExpression' + ) { + const expr = stmt.expression; + if ( + expr.left.type === 'MemberExpression' && + expr.left.object.type === 'ThisExpression' && + expr.left.property.type === 'Identifier' + ) { + const propName = expr.left.property.name; + classInfo.const.add(propName); + } + } + }); + } else { + classInfo.methods.push(methodName); + } + } + }); + + // Convert Set to Array before storing + userClassMap[className] = { + const: Array.from(classInfo.const), + methods: classInfo.methods, + initializer: '' + }; + } + } + }); walk.simple(ast, { AssignmentExpression(node) { if ( node.left.type === 'Identifier' && - node.right.type === 'CallExpression' && + (node.right.type === 'CallExpression' || + node.right.type === 'NewExpression') && node.right.callee.type === 'Identifier' ) { const varName = node.left.name; const fnName = node.right.callee.name; + const cls = functionToClass[fnName]; - if (cls) { - variableMap[varName] = cls; + const userCls = userClassMap[fnName]; + if (userCls) { + userClassMap[fnName].initializer = varName; + } else if (cls) { + p5ClassMap[varName] = cls; } } }, @@ -46,19 +135,54 @@ export default function parseCodeVariables(_cm) { VariableDeclarator(node) { if ( node.id.type === 'Identifier' && - node.init?.type === 'CallExpression' && + (node.init?.type === 'CallExpression' || + node.init?.type === 'NewExpression') && node.init.callee.type === 'Identifier' ) { const varName = node.id.name; const fnName = node.init.callee.name; const cls = functionToClass[fnName]; - if (cls) { - variableMap[varName] = cls; + const userCls = userClassMap[fnName]; + if (userCls) { + userClassMap[fnName].initializer = varName; + } else if (cls) { + p5ClassMap[varName] = cls; + } + } + + if (node.id.type === 'Identifier') { + const varName = node.id.name; + varMap.add(varName); + } + }, + + FunctionDeclaration(node) { + if (node.id && node.id.name) { + const fnName = node.id.name; + if (!allFunsList.has(fnName)) { + userFuncMap[fnName] = true; // or even `= node` if you want more info later + varMap.add(fnName); // Ensure functions are included in varMap too } } } }); - console.log('varmap= ', variableMap); - return variableMap; + const result = { + p5ClassMap, + varMap: [...varMap], + varScopeMap, + userFuncMap, + userClassMap + }; + + // Update cache + lastValidResult = result; + return result; } + +// Export a debounced version +export default debounce(_parseCodeVariables, 200, { + leading: true, + trailing: true, + maxWait: 300 +}); diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 308dbd6bed..d1a6a5a302 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -33,24 +33,19 @@ import warnIfBlacklisted from './warn'; // This is the old interface, kept around for now to stay // backwards-compatible. CodeMirror.showHint = function (cm, getHints, options) { - console.log('showhint was called: ', cm, getHints, options); if (!getHints) return cm.showHint(options); // if not getHints function passed, it assumes youre using the newer interface // restructured options to call the new c.showHint() method if (options && options.async) getHints.async = true; var newOpts = { hint: getHints }; if (options) for (var prop in options) newOpts[prop] = options[prop]; - console.log('newopts: ', newOpts); const context = parseCode(cm); - console.log('Cursor context =', context); return cm.showHint(newOpts); }; // this adds a method called showHint to every cm editor instance (editor.showHint()) CodeMirror.defineExtension('showHint', function (options) { options = parseOptions(this, this.getCursor('start'), options); - console.log('options are: '); var selections = this.listSelections(); - console.log('selections are: ', selections); if (selections.length > 1) return; // By default, don't allow completion when something is selected. // A hint function can have a `supportsSelection` property to @@ -133,7 +128,6 @@ import warnIfBlacklisted from './warn'; pick: function (data, i) { // selects an item from the suggestion list - console.log('data, i= ', data, i); var completion = data.list[i], self = this; @@ -146,7 +140,6 @@ import warnIfBlacklisted from './warn'; if (completion.hint) { completion.hint(self.cm, data, completion); } else { - console.log('gettext(C)= ', getText(completion)); self.cm.replaceRange( getText(completion), completion.from || data.from, @@ -186,7 +179,6 @@ import warnIfBlacklisted from './warn'; !pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)) ) { - console.log('this.close called'); this.close(); } else { var self = this; @@ -198,7 +190,6 @@ import warnIfBlacklisted from './warn'; }, update: function (first) { - console.log('update called'); if (this.tick == null) return; var self = this, myTick = ++this.tick; @@ -240,12 +231,10 @@ import warnIfBlacklisted from './warn'; for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop]; if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); - console.log('out is ', out); return out; } // extracts the visible text from a completion entry function getText(completion) { - console.log('gettext called'); if (typeof completion === 'string') return completion; else return completion.item.text; } @@ -314,10 +303,8 @@ import warnIfBlacklisted from './warn'; // hintsElement is the parent for hints and el is the clicked element within that container function getHintElement(hintsElement, el) { - console.log('el is ', el); while (el && el != hintsElement) { if (el.nodeName.toUpperCase() === 'LI' && el.parentNode == hintsElement) { - console.log('new el is ', el); return el; } el = el.parentNode; @@ -325,7 +312,6 @@ import warnIfBlacklisted from './warn'; } // function displayHint(name, type, p5, isBlacklistedFunction) { - // console.log('name is', name, type, p5, isBlacklistedFunction); // return `

\ // ${name}\ // , \ @@ -343,8 +329,6 @@ import warnIfBlacklisted from './warn'; // } function displayHint(name, type, p5, isBlacklistedFunction) { - console.log('name is', name, type, p5, isBlacklistedFunction); - const linkOrPlaceholder = p5 ? ` Date: Wed, 9 Jul 2025 11:06:30 +0530 Subject: [PATCH 07/28] implement context aware renaming + fixed bug to show inline hint suggestions for user-defined functions --- .env.example | 2 +- .../modules/IDE/components/Editor/index.jsx | 21 + .../IDE/components/contextAwareHinter.js | 55 +- .../modules/IDE/components/finalScopeMap.json | 5 + client/modules/IDE/components/parseCode.js | 26 +- .../modules/IDE/components/parseCodeBabel.js | 46 - .../IDE/components/parseCodeVariables.js | 103 +- .../modules/IDE/components/rename-variable.js | 191 + client/modules/IDE/components/show-hint.js | 73 +- .../IDE/components/showRenameDialog.jsx | 119 + client/styles/components/_hints.scss | 19 +- client/utils/codemirror-search.js | 8 + package-lock.json | 4556 +++-------------- package.json | 6 + server/previewServer.js | 14 +- 15 files changed, 1272 insertions(+), 3972 deletions(-) delete mode 100644 client/modules/IDE/components/parseCodeBabel.js create mode 100644 client/modules/IDE/components/rename-variable.js create mode 100644 client/modules/IDE/components/showRenameDialog.jsx diff --git a/.env.example b/.env.example index ea00adf9d9..1516962450 100644 --- a/.env.example +++ b/.env.example @@ -19,7 +19,7 @@ MAILGUN_KEY= ML5_LIBRARY_USERNAME=ml5 ML5_LIBRARY_EMAIL=examples@ml5js.org ML5_LIBRARY_PASS=helloml5 -MONGO_URL=mongodb://localhost:27017/p5js-web-editor +MONGO_URL=mongodb://127.0.0.1:27017/p5js-web-editor PORT=8000 PREVIEW_PORT=8002 EDITOR_URL=http://localhost:8000 diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index f810476e84..e9845799b9 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -74,6 +74,8 @@ import { FolderIcon } from '../../../../common/icons'; import IconButton from '../../../../common/IconButton'; import contextAwareHinter from '../contextAwareHinter'; +import showRenameDialog from '../showRenameDialog'; +import { handleRename } from '../rename-variable'; emmet(CodeMirror); @@ -171,6 +173,7 @@ class Editor extends React.Component { }, Enter: 'emmetInsertLineBreak', Esc: 'emmetResetAbbreviation', + F2: (cm) => this.renameVariable(cm), [`Shift-Tab`]: false, [`${metaKey}-Enter`]: () => null, [`Shift-${metaKey}-Enter`]: () => null, @@ -534,6 +537,24 @@ class Editor extends React.Component { } } + renameVariable(cm) { + const cursorCoords = cm.cursorCoords(true, 'page'); + const selection = cm.getSelection(); + if (!selection) { + return; + } + + const sel = cm.listSelections()[0]; + const fromPos = + CodeMirror.cmpPos(sel.anchor, sel.head) <= 0 ? sel.anchor : sel.head; + + showRenameDialog(cursorCoords, selection, (newName) => { + if (newName && newName.trim() !== '' && newName !== selection) { + handleRename(fromPos, selection, newName, cm); + } + }); + } + initializeDocuments(files) { this._docs = {}; files.forEach((file) => { diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 5099bf6fba..ac4dfb855f 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -11,7 +11,7 @@ function formatHintDisplay(name, isBlacklisted) { ${name} ${ isBlacklisted - ? `

` + ? `
⚠️ "Use ${name}" carefully in this context.
` : '' } @@ -22,7 +22,6 @@ function getExpressionBeforeCursor(cm) { const cursor = cm.getCursor(); const line = cm.getLine(cursor.line); const uptoCursor = line.slice(0, cursor.ch); - const match = uptoCursor.match( /([a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*)\.(?:[a-zA-Z_$][\w$]*)?$/ ); @@ -32,7 +31,6 @@ function getExpressionBeforeCursor(cm) { export default function contextAwareHinter(cm, options = {}) { const { p5ClassMap = {}, - varMap = [], varScopeMap = {}, userFuncMap = {}, userClassMap = {} @@ -117,28 +115,47 @@ export default function contextAwareHinter(cm, options = {}) { const lowerCurrentWord = currentWord.toLowerCase(); function isInScope(varName) { - const varScope = varScopeMap[varName]; - if (!varScope) return false; - if (varScope === 'global') return true; - if (varScope === currentContext) return true; - return false; + return Object.entries(varScopeMap).some( + ([scope, vars]) => + vars.has(varName) && (scope === 'global' || scope === currentContext) + ); } - const varHints = varMap + const allVarNames = Array.from( + new Set( + Object.values(varScopeMap) + .map((s) => Array.from(s)) // convert Set to Array + .flat() + .filter((name) => typeof name === 'string') + ) + ); + + console.log(allVarNames); + + const varHints = allVarNames .filter( (varName) => varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) ) - .map((varName) => ({ - item: { - text: varName, - type: userFuncMap[varName] ? 'fun' : 'var' - }, - isBlacklisted: blacklist.includes(varName), - displayText: formatHintDisplay(varName, blacklist.includes(varName)), - from: { line, ch }, - to: { line, ch: ch - currentWord.length } - })); + .map((varName) => { + const isFunc = !!userFuncMap[varName]; + const baseItem = isFunc + ? { ...userFuncMap[varName] } + : { + text: varName, + type: 'var', + params: [], + p5: false + }; + + return { + item: baseItem, + isBlacklisted: blacklist.includes(varName), + displayText: formatHintDisplay(varName, blacklist.includes(varName)), + from: { line, ch }, + to: { line: ch - currentWord.length } + }; + }); const filteredHints = allHints .filter( diff --git a/client/modules/IDE/components/finalScopeMap.json b/client/modules/IDE/components/finalScopeMap.json index 9b6c09abde..f2a7a18502 100644 --- a/client/modules/IDE/components/finalScopeMap.json +++ b/client/modules/IDE/components/finalScopeMap.json @@ -403,6 +403,11 @@ "loadTable", "loadXML", "soundFormats" + ], + "blacklist":[ + "preload", + "setup", + "draw" ] }, "doubleClicked": { diff --git a/client/modules/IDE/components/parseCode.js b/client/modules/IDE/components/parseCode.js index dc066b9ae2..02e23f46f1 100644 --- a/client/modules/IDE/components/parseCode.js +++ b/client/modules/IDE/components/parseCode.js @@ -1,5 +1,5 @@ -const acorn = require('acorn'); -const walk = require('acorn-walk'); +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; export default function parseCode(_cm) { const code = _cm.getValue(); @@ -8,30 +8,27 @@ export default function parseCode(_cm) { let ast; try { - ast = acorn.parse(code, { - ecmaVersion: 'latest', - sourceType: 'script' + ast = parser.parse(code, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] // add plugins as needed }); } catch (e) { - console.warn('Failed to parse code', e.message); + console.warn('Failed to parse code with Babel:', e.message); return 'global'; } let context = 'global'; - walk.fullAncestor(ast, (node, ancestors) => { - if ( - node.type === 'FunctionDeclaration' || - node.type === 'FunctionExpression' || - node.type === 'ArrowFunctionExpression' - ) { + traverse(ast, { + Function(path) { + const { node } = path; if (offset >= node.start && offset <= node.end) { if (node.id && node.id.name) { context = node.id.name; } else { - const parent = ancestors[ancestors.length - 2]; + const parent = path.parentPath.node; if ( - parent?.type === 'VariableDeclarator' && + parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier' ) { context = parent.id.name; @@ -39,6 +36,7 @@ export default function parseCode(_cm) { context = '(anonymous)'; } } + path.stop(); // Stop traversal once we found the function context } } }); diff --git a/client/modules/IDE/components/parseCodeBabel.js b/client/modules/IDE/components/parseCodeBabel.js deleted file mode 100644 index 14e50d2e14..0000000000 --- a/client/modules/IDE/components/parseCodeBabel.js +++ /dev/null @@ -1,46 +0,0 @@ -// parseCodeWithBabel.js -const parser = require('@babel/parser'); -const traverse = require('@babel/traverse').default; - -export default function parseCode(_cm) { - const code = _cm.getValue(); - const cursor = _cm.getCursor(); - const offset = _cm.indexFromPos(cursor); - - let ast; - try { - ast = parser.parse(code, { - sourceType: 'script', - plugins: ['jsx', 'typescript'] // add plugins as needed - }); - } catch (e) { - console.warn('Failed to parse code with Babel:', e.message); - return 'global'; - } - - let context = 'global'; - - traverse(ast, { - Function(path) { - const { node } = path; - if (offset >= node.start && offset <= node.end) { - if (node.id && node.id.name) { - context = node.id.name; - } else { - const parent = path.parentPath.node; - if ( - parent.type === 'VariableDeclarator' && - parent.id.type === 'Identifier' - ) { - context = parent.id.name; - } else { - context = '(anonymous)'; - } - } - path.stop(); // Stop traversal once we found the function context - } - } - }); - - return context; -} diff --git a/client/modules/IDE/components/parseCodeVariables.js b/client/modules/IDE/components/parseCodeVariables.js index 21a2928e77..504943d9bb 100644 --- a/client/modules/IDE/components/parseCodeVariables.js +++ b/client/modules/IDE/components/parseCodeVariables.js @@ -1,11 +1,12 @@ -import * as acorn from 'acorn'; -import * as walk from 'acorn-walk'; -import * as eslintScope from 'eslint-scope'; +/* eslint-disable */ import { debounce } from 'lodash'; +import * as eslintScope from 'eslint-scope'; import classMap from './class-with-methods-map.json'; -const allFuncs = require('./listOfAllFunctions.json'); +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; +const allFuncs = require('./listOfAllFunctions.json'); const allFunsList = new Set(allFuncs.functions.list); const functionToClass = {}; @@ -19,7 +20,6 @@ Object.entries(classMap).forEach(([className, classData]) => { // Cache to store last valid result let lastValidResult = { p5ClassMap: {}, - varMap: [], varScopeMap: {}, userFuncMap: {}, userClassMap: {} @@ -30,19 +30,17 @@ function _parseCodeVariables(_cm) { let ast; try { - ast = acorn.parse(code, { - ecmaVersion: 'latest', + ast = parser.parse(code, { sourceType: 'script', - locations: true, - ranges: true + plugins: ['jsx', 'classProperties'], + ranges: true, + locations: true }); } catch (e) { - console.warn('Failed to parse code - using cached result'); return lastValidResult; } - const p5ClassMap = {}; // stores p5 class to methods mapping - const varMap = new Set(); + const p5ClassMap = {}; const varScopeMap = {}; const userFuncMap = {}; const userClassMap = {}; @@ -60,26 +58,36 @@ function _parseCodeVariables(_cm) { scope.variables.forEach((variable) => { variable.defs.forEach((def) => { - varScopeMap[def.name.name] = scopeName; + if ( + def.type === 'Variable' || + (def.type === 'FunctionName' && !allFunsList.has(def.name.name)) + ) { + if (!varScopeMap[scopeName]) { + varScopeMap[scopeName] = new Set(); + } + + varScopeMap[scopeName].add(def.name.name); + } }); }); }); - walk.simple(ast, { - ClassDeclaration(node) { + traverse(ast, { + ClassDeclaration(path) { + const node = path.node; if (node.id && node.id.type === 'Identifier') { const className = node.id.name; const classInfo = { - const: new Set(), // use Set to avoid duplicates + const: new Set(), methods: [] }; node.body.body.forEach((element) => { - if (element.type === 'MethodDefinition') { + if (element.type === 'ClassMethod') { const methodName = element.key.name; if (element.kind === 'constructor') { - element.value.body.body.forEach((stmt) => { + element.body.body.forEach((stmt) => { if ( stmt.type === 'ExpressionStatement' && stmt.expression.type === 'AssignmentExpression' @@ -101,18 +109,16 @@ function _parseCodeVariables(_cm) { } }); - // Convert Set to Array before storing userClassMap[className] = { const: Array.from(classInfo.const), methods: classInfo.methods, initializer: '' }; } - } - }); + }, - walk.simple(ast, { - AssignmentExpression(node) { + AssignmentExpression(path) { + const node = path.node; if ( node.left.type === 'Identifier' && (node.right.type === 'CallExpression' || @@ -132,7 +138,8 @@ function _parseCodeVariables(_cm) { } }, - VariableDeclarator(node) { + VariableDeclarator(path) { + const node = path.node; if ( node.id.type === 'Identifier' && (node.init?.type === 'CallExpression' || @@ -149,19 +156,49 @@ function _parseCodeVariables(_cm) { p5ClassMap[varName] = cls; } } - - if (node.id.type === 'Identifier') { - const varName = node.id.name; - varMap.add(varName); - } }, - FunctionDeclaration(node) { + FunctionDeclaration(path) { + const node = path.node; if (node.id && node.id.name) { const fnName = node.id.name; if (!allFunsList.has(fnName)) { - userFuncMap[fnName] = true; // or even `= node` if you want more info later - varMap.add(fnName); // Ensure functions are included in varMap too + const params = node.params + .map((param) => { + if (param.type === 'Identifier') { + return { p: param.name, o: false }; + } else if ( + param.type === 'AssignmentPattern' && + param.left.type === 'Identifier' + ) { + return { p: param.left.name, o: true }; + } else if ( + param.type === 'RestElement' && + param.argument.type === 'Identifier' + ) { + return { p: param.argument.name, o: true }; + } + return null; + }) + .filter(Boolean); + + // Store function metadata for hinting + userFuncMap[fnName] = { + text: fnName, + type: 'fun', + p5: false, + params + }; + + // Store function params in the varScopeMap + if (!varScopeMap[fnName]) { + varScopeMap[fnName] = new Set(); + } + params.forEach((paramObj) => { + if (paramObj && paramObj.p) { + varScopeMap[fnName].add(paramObj.p); + } + }); } } } @@ -169,13 +206,11 @@ function _parseCodeVariables(_cm) { const result = { p5ClassMap, - varMap: [...varMap], varScopeMap, userFuncMap, userClassMap }; - // Update cache lastValidResult = result; return result; } diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js new file mode 100644 index 0000000000..88083b62c6 --- /dev/null +++ b/client/modules/IDE/components/rename-variable.js @@ -0,0 +1,191 @@ +/* eslint-disable */ +import parseCodeVariables from './parseCodeVariables'; +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; + +function SearchState(oldName) { + this.posFrom = this.posTo = null; + this.query = oldName; + this.regexp = false; + this.caseInsensitive = true; + this.wholeWord = true; +} + +export function handleRename(fromPos, oldName, newName, cm) { + const { varScopeMap = {} } = parseCodeVariables(cm) || {}; + + if (!cm) { + console.warn('CodeMirror instance not provided.'); + return; + } + const ast = getAST(cm); + const context = getContext(cm, ast, fromPos, varScopeMap); + startRenaming(cm, ast, fromPos, newName, oldName); + const state = getRenameSearchState(cm, oldName); + const matches = getMatches(cm, state, state.query); +} + +function getContext(cm, ast, fromPos, varScopeMap) { + const posIndex = cm.indexFromPos(fromPos); + let foundNode = null; + let enclosingFunction = null; + + traverse(ast, { + enter(path) { + const { node } = path; + if (!node.loc) return; + + const start = node.start; + const end = node.end; + + // If position is inside this node + if (start <= posIndex && posIndex <= end) { + // Check if it's an identifier + if (node.type === 'Identifier' && node.name) { + // Assign only if not assigned yet or if it's more specific + if ( + !foundNode || + (node.start >= foundNode.start && node.end <= foundNode.end) + ) { + foundNode = node; + } + } + + // Capture the enclosing function name + if ( + (node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression') && + node.id && + node.id.name + ) { + enclosingFunction = node.id.name; + } + } + } + }); + + if (!foundNode) { + console.warn('No identifier found at the selected position.'); + return null; + } + + const varName = foundNode.name; + + // Now check varScopeMap to determine scope + const contextCandidates = Object.entries(varScopeMap) + .filter(([context, vars]) => vars.has(varName)) + .map(([context]) => context); + + // Priority logic + if (contextCandidates.includes(enclosingFunction)) { + return enclosingFunction; // local + } else if (contextCandidates.includes('global')) { + return 'global'; // global fallback + } else { + return enclosingFunction || 'global'; // fallback + } +} + +function startRenaming(cm, ast, fromPos, newName, oldName) { + const code = cm.getValue(); + const fromIndex = cm.indexFromPos(fromPos); + const varScopeMap = parseCodeVariables(cm).varScopeMap || {}; + const baseContext = getContext(cm, ast, fromPos, varScopeMap); + + const replacements = []; + + traverse(ast, { + Identifier(path) { + const { node, parent } = path; + if (!node.loc) return; + + const startIndex = node.start; + const endIndex = node.end; + + // Check it's the same variable name + if (node.name !== oldName) return; + + const pos = cm.posFromIndex(startIndex); + + // Skip property keys and non-variable references + if ( + parent.type === 'MemberExpression' && + parent.property === node && + !parent.computed + ) + return; + + // Use the same getContext to figure out *this* node's context + const thisContext = getContext(cm, ast, pos, varScopeMap); + + // Only allow rename if the context matches the original context + if (thisContext === baseContext) { + replacements.push({ + from: cm.posFromIndex(startIndex), + to: cm.posFromIndex(endIndex) + }); + } + } + }); + + // Sort replacements in reverse order to avoid messing up the text positions + replacements.sort( + (a, b) => cm.indexFromPos(b.from) - cm.indexFromPos(a.from) + ); + + cm.operation(() => { + for (const { from, to } of replacements) { + cm.replaceRange(newName, from, to); + } + }); +} + +function getAST(cm) { + const code = cm.getValue(); + const cursor = cm.getCursor(); + const offset = cm.indexFromPos(cursor); + + let ast; + try { + ast = parser.parse(code, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] // add plugins as needed + }); + return ast; + } catch (e) { + console.warn('Failed to parse code with Babel:', e.message); + return; + } +} + +function getMatches(cm, state, query) { + state.queryText = query; + + var cursor = getSearchCursor(cm, state.query); + cursor.findNext(); + if (cm.showMatchesOnScrollbar) { + if (state.annotate) { + state.annotate.clear(); + state.annotate = null; + } + state.annotate = cm.showMatchesOnScrollbar( + state.query, + state.caseInsensitive + ); + } + var matches = cm.state.search.annotate.matches; + return matches; +} + +function getRenameSearchState(cm, oldName) { + return cm.state.search || (cm.state.search = new SearchState(oldName)); +} + +function getSearchCursor(cm, query, pos) { + // Heuristic: if the query string is all lowercase, do a case insensitive search. + return cm.getSearchCursor( + query, + pos, + getRenameSearchState(cm).caseInsensitive + ); +} diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index d1a6a5a302..93da068d28 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -302,62 +302,32 @@ import warnIfBlacklisted from './warn'; } // hintsElement is the parent for hints and el is the clicked element within that container - function getHintElement(hintsElement, el) { - while (el && el != hintsElement) { - if (el.nodeName.toUpperCase() === 'LI' && el.parentNode == hintsElement) { - return el; - } - el = el.parentNode; - } - } - - // function displayHint(name, type, p5, isBlacklistedFunction) { - // return `

\ - // ${name}\ - // , \ - // ${type}\ - // , \ - // ${ - // p5 - // ? `\ - // open ${name} reference\ - // ` - // : `no reference for ${name}` - // }

`; - // } - function displayHint(name, type, p5, isBlacklistedFunction) { const linkOrPlaceholder = p5 ? ` - open ${name} reference - - ` + open ${name} reference + + ` : ` - no reference for ${name} - `; - - const hintHTML = ` -
- ${name} - ${type} - ${linkOrPlaceholder} -
- `; - - const warningHTML = isBlacklistedFunction - ? `
⚠️ Be careful — this function is discouraged in this context.
` - : ''; - - return `
+ no reference for ${name} + `; + + const hintHTML = `
+ ${name} + ${type} + ${linkOrPlaceholder} +
`; + + if (isBlacklistedFunction) { + return `
${hintHTML} - ${warningHTML} +
⚠️ Be careful — this function is discouraged in this context.
`; + } else { + return `
${hintHTML}
`; + } } function getInlineHintSuggestion(cm, focus, tokenLength) { @@ -628,6 +598,13 @@ import warnIfBlacklisted from './warn'; }) ); + function getHintElement(container, el) { + while (el && el !== container && el.hintId == null) { + el = el.parentNode; + } + return el; + } + CodeMirror.on(hints, 'dblclick', function (e) { var t = getHintElement(hints, e.target || e.srcElement); if (t && t.hintId != null) { diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx new file mode 100644 index 0000000000..8d7fedb601 --- /dev/null +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -0,0 +1,119 @@ +/* eslint-disable */ +const allFuncs = require('./listOfAllFunctions.json'); +const allFunsList = new Set(allFuncs.functions.list); + +export default function showRenameDialog(coords, oldName, onSubmit) { + if (allFunsList.has(oldName) || !isValidIdentifierSelection(oldName)) { + showTemporaryDialog(coords, 'You cannot rename this element'); + return; + } + + openRenameInputDialog(coords, oldName, onSubmit); // ✅ pass callback +} + +function openRenameInputDialog(coords, oldName, onSubmit) { + const dialog = document.createElement('div'); + dialog.style.position = 'absolute'; + dialog.style.left = `${coords.left}px`; + dialog.style.top = `${coords.bottom + 5}px`; + dialog.style.zIndex = '10000'; + dialog.style.background = '#fff'; + dialog.style.border = '1px solid #ccc'; + dialog.style.padding = '5px 10px'; + dialog.style.borderRadius = '4px'; + dialog.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)'; + + const input = document.createElement('input'); + input.type = 'text'; + input.value = oldName; + input.style.width = '200px'; + input.style.fontSize = '14px'; + + dialog.appendChild(input); + document.body.appendChild(dialog); + input.focus(); + + function cleanup() { + dialog.remove(); + document.removeEventListener('mousedown', onClickOutside); + } + + function onClickOutside(e) { + if (!dialog.contains(e.target)) { + cleanup(); + // Cancel — do nothing + } + } + + input.addEventListener('keydown', (e) => { + if (e.key === 'Enter') { + const value = input.value.trim(); + if (value) { + cleanup(); + onSubmit(value); // ✅ rename triggered here + } else { + cleanup(); // no-op for empty + } + } else if (e.key === 'Escape') { + cleanup(); // cancel + } + }); + + document.addEventListener('mousedown', onClickOutside); +} + +function isValidIdentifierSelection(selection) { + // Reject if empty, multiple words, or includes special characters + if (!selection || selection.trim() === '') return false; + + // Reject multi-word selections or whitespace + if (/\s/.test(selection)) return false; + + // Reject if it's just a punctuation character or not a valid identifier + // Valid JS identifier: starts with letter, _, or $, and only includes those plus digits + // NOTE: This doesn't catch reserved keywords; Babel parsing would be needed for that. + return /^[$A-Z_a-z][$\w]*$/.test(selection); +} + +function showTemporaryDialog(coords, message) { + const dialog = document.createElement('div'); + dialog.textContent = message; + + dialog.style.position = 'absolute'; + dialog.style.left = `${coords.left}px`; + dialog.style.top = `${coords.bottom + 5}px`; + dialog.style.zIndex = '10000'; + dialog.style.background = '#fff'; + dialog.style.border = '1px solid #ccc'; + dialog.style.padding = '5px 10px'; + dialog.style.borderRadius = '4px'; + dialog.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)'; + dialog.style.fontSize = '14px'; + dialog.style.color = '#333'; + + document.body.appendChild(dialog); + + const timeout = setTimeout(cleanup, 2000); + + function cleanup() { + dialog.remove(); + clearTimeout(timeout); + document.removeEventListener('mousedown', onClickOutside); + document.removeEventListener('keydown', onKeyDown); + } + + function onClickOutside(e) { + if (!dialog.contains(e.target)) { + cleanup(); + } + } + + function onKeyDown(e) { + if (e.key === 'Escape') { + cleanup(); + } + } + + document.addEventListener('mousedown', onClickOutside); + document.addEventListener('keydown', onKeyDown); +} diff --git a/client/styles/components/_hints.scss b/client/styles/components/_hints.scss index 5cf58ff3b3..7084b460e7 100644 --- a/client/styles/components/_hints.scss +++ b/client/styles/components/_hints.scss @@ -15,7 +15,7 @@ font-size: 100%; font-family: Inconsolata, monospace; - width: 18rem; + width: 20rem; max-height: 20rem; overflow-y: auto; @@ -31,6 +31,7 @@ .hint-container { display: flex; + align-items: center; flex-direction: column; justify-content: center; width: 100%; @@ -51,6 +52,20 @@ padding: 0 0.5rem; width: 100%; height: 100%; + // position: relative; // optional, only if you want absolutely-positioned children + } + + .hint-main a { + display: flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 100%; + padding: 0; + // margin-left: auto; + text-align: center; + text-decoration: none; + font-size: 1.2rem; } .hint-name { @@ -207,7 +222,7 @@ } a, .no-link-placeholder { - position: absolute; + // position: absolute; top: 0; right: 0; height: 100%; diff --git a/client/utils/codemirror-search.js b/client/utils/codemirror-search.js index 3ed3116a63..30b3eaf1ee 100644 --- a/client/utils/codemirror-search.js +++ b/client/utils/codemirror-search.js @@ -286,6 +286,7 @@ function persistentDialog(cm, text, deflt, onEnter, replaceOpened, onKeyDown) { }); function doReplace(match, cursor, query, withText) { + console.log('meow', match, cursor, query, withText); cursor.replace( typeof query == 'string' ? withText @@ -369,6 +370,7 @@ function parseString(string) { } function parseQuery(query, state) { + console.log('parsequery=', state); var emptyQuery = 'x^'; // matches nothing if (query === '') { query = emptyQuery; @@ -396,6 +398,7 @@ function parseQuery(query, state) { } function startSearch(cm, state, query) { + console.log('queryyy', query); var searchDialog = document.querySelector('.CodeMirror-dialog'); if (searchDialog) { // check if the file has changed @@ -423,6 +426,7 @@ function startSearch(cm, state, query) { cm.removeOverlay(state.overlay, state.caseInsensitive); state.overlay = searchOverlay(state.query, state.caseInsensitive); cm.addOverlay(state.overlay); + console.log('rr', cm); if (cm.showMatchesOnScrollbar) { if (state.annotate) { state.annotate.clear(); @@ -437,6 +441,7 @@ function startSearch(cm, state, query) { var cursor = getSearchCursor(cm, state.query); cursor.findNext(); var num_match = cm.state.search.annotate.matches.length; + console.log('xxx', cm); if (num_match == 0) { cm.display.wrapper.querySelector( '.CodeMirror-search-results' @@ -466,6 +471,7 @@ function doSearch(cm, rev, persistent, immediate, ignoreQuery) { var queryDialog = getQueryDialog(); if (persistent && cm.openDialog) { var hiding = null; + console.log('doSearch function'); var searchNext = function (query, event) { CodeMirror.e_stop(event); if (!query) return; @@ -522,6 +528,7 @@ function doSearch(cm, rev, persistent, immediate, ignoreQuery) { } }); } else { + console.log('else doSearch function'); dialog(cm, queryDialog, 'Search for:', q, function (query) { if (query && !state.query) cm.operation(function () { @@ -618,6 +625,7 @@ function findNext(cm, rev, callback) { state.query, rev ? state.posFrom : state.posTo ); + console.log('finnext, state,cursor', state, cursor); if (!cursor.find(rev)) { cursor = getSearchCursor( cm, diff --git a/package-lock.json b/package-lock.json index f8748acd7e..81c171ae62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,9 @@ "@auth0/s3": "^1.0.0", "@aws-sdk/client-s3": "^3.412.0", "@babel/core": "^7.14.6", + "@babel/parser": "^7.27.5", "@babel/register": "^7.14.5", + "@babel/traverse": "^7.27.4", "@emmetio/codemirror-plugin": "^1.2.4", "@gatsbyjs/webpack-hot-middleware": "^2.25.3", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", @@ -20,6 +22,8 @@ "@redux-devtools/dock-monitor": "^3.0.1", "@redux-devtools/log-monitor": "^4.0.2", "@reduxjs/toolkit": "^1.9.3", + "acorn": "^8.14.1", + "acorn-walk": "^8.3.4", "async": "^3.2.3", "axios": "^1.8.2", "babel-plugin-styled-components": "^1.13.2", @@ -43,7 +47,9 @@ "dotenv": "^2.0.0", "dropzone": "^4.3.0", "escape-string-regexp": "^1.0.5", + "eslint-scope": "^8.4.0", "eslint-webpack-plugin": "^3.1.1", + "espree": "^10.4.0", "express": "^4.18.2", "express-basic-auth": "^1.2.0", "express-session": "^1.17.2", @@ -3690,12 +3696,14 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -3769,6 +3777,20 @@ "eslint": "^7.5.0 || ^8.0.0" } }, + "node_modules/@babel/eslint-parser/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", @@ -3778,6 +3800,16 @@ "node": ">=10" } }, + "node_modules/@babel/eslint-parser/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3788,14 +3820,16 @@ } }, "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.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -3963,6 +3997,7 @@ "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" @@ -3975,6 +4010,7 @@ "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" }, @@ -4116,17 +4152,19 @@ } }, "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -4170,6 +4208,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -4181,9 +4220,13 @@ } }, "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.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -6053,31 +6096,30 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "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.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "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.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "license": "MIT", "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/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -6086,13 +6128,13 @@ } }, "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.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -6768,6 +6810,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -6783,10 +6826,49 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -6801,6 +6883,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, "engines": { "node": ">= 4" } @@ -6809,6 +6892,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -6860,14 +6944,6 @@ "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==", "dev": true }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@gatsbyjs/webpack-hot-middleware": { "version": "2.25.3", "resolved": "https://registry.npmjs.org/@gatsbyjs/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", @@ -6882,6 +6958,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -6894,7 +6971,8 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -7992,103 +8070,6 @@ "node": ">= 8" } }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/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, - "optional": true, - "peer": true - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@open-draft/until": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", @@ -13036,6 +13017,15 @@ "node": ">=0.4.0" } }, + "node_modules/@storybook/react/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@storybook/react/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -14233,17 +14223,6 @@ "@testing-library/dom": ">=7.21.4" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -14565,14 +14544,6 @@ "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", @@ -15202,9 +15173,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "bin": { "acorn": "bin/acorn" }, @@ -15232,6 +15203,14 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", @@ -15249,9 +15228,12 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -15276,22 +15258,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", @@ -15414,6 +15380,7 @@ "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" }, @@ -15447,49 +15414,11 @@ "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", "dev": true }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -15791,28 +15720,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -15826,17 +15733,6 @@ "util": "^0.12.5" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/ast-types": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", @@ -15865,6 +15761,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, "engines": { "node": ">=8" } @@ -15874,17 +15771,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -16048,25 +15934,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/axe-core": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz", @@ -16627,17 +16494,6 @@ "node": ">= 0.8" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -16986,25 +16842,6 @@ "node": ">=6" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/camelize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", @@ -17050,14 +16887,6 @@ "node": ">=4" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", @@ -17072,6 +16901,7 @@ "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", @@ -17695,17 +17525,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", @@ -17928,14 +17747,6 @@ "date-now": "^0.1.4" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/console-feed": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/console-feed/-/console-feed-3.2.0.tgz", @@ -19754,20 +19565,6 @@ "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", @@ -19814,43 +19611,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -19946,7 +19706,8 @@ "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "node_modules/deepmerge": { "version": "4.2.2", @@ -20111,14 +19872,6 @@ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/denque": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", @@ -20127,17 +19880,6 @@ "node": ">=0.10" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -20254,6 +19996,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -20417,18 +20160,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/editorconfig": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", @@ -20515,16 +20246,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "optional": true, - "peer": true, - "dependencies": { - "iconv-lite": "~0.4.13" - } - }, "node_modules/end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -20561,6 +20282,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, @@ -20572,6 +20294,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, "engines": { "node": ">=6" } @@ -20584,17 +20307,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -20607,14 +20319,6 @@ "node": ">=4" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -20802,14 +20506,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==", - "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", @@ -20823,6 +20519,7 @@ "version": "7.31.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", + "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -21479,6 +21176,30 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/eslint-plugin-storybook/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-plugin-storybook/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -21519,21 +21240,26 @@ "dev": true }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -21548,6 +21274,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, "engines": { "node": ">=4" } @@ -21634,14 +21361,29 @@ "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } }, + "node_modules/eslint/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -21657,6 +21399,7 @@ "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" }, @@ -21671,6 +21414,7 @@ "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" }, @@ -21682,6 +21426,7 @@ "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" }, @@ -21692,12 +21437,14 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/eslint/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -21711,6 +21458,7 @@ "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" }, @@ -21718,18 +21466,69 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { "node": ">=10" } }, + "node_modules/eslint/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -21741,6 +21540,7 @@ "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -21755,6 +21555,7 @@ "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" } @@ -21763,6 +21564,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, "engines": { "node": ">= 4" } @@ -21771,6 +21573,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -21779,6 +21582,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -21790,6 +21594,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -21802,6 +21607,7 @@ "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" }, @@ -21813,6 +21619,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21829,6 +21636,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -21837,6 +21645,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -21845,6 +21654,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -21859,6 +21669,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -21870,6 +21681,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -21878,6 +21690,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -21889,6 +21702,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -21900,6 +21714,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -21913,25 +21728,31 @@ "node_modules/eslint/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree/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.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -21940,11 +21761,15 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -21963,6 +21788,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -21970,14 +21796,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -21989,22 +21807,15 @@ "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==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -22378,17 +22189,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true, - "peer": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -22459,7 +22259,8 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "node_modules/fast-xml-parser": { "version": "4.2.5", @@ -22551,6 +22352,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -22760,6 +22562,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -22772,6 +22575,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -22785,7 +22589,8 @@ "node_modules/flatted": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "dev": true }, "node_modules/flatten": { "version": "1.0.2", @@ -22921,17 +22726,6 @@ "node": ">= 8" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", @@ -23065,22 +22859,6 @@ "node": ">= 10.0.0" } }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -23177,7 +22955,8 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true }, "node_modules/functions-have-names": { "version": "1.2.3", @@ -23196,42 +22975,6 @@ "node": ">=10" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -23330,17 +23073,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -23353,17 +23085,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/giget": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", @@ -23472,22 +23193,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -23569,44 +23274,6 @@ "node": ">=0.10.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "deprecated": "this library is no longer supported", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -23673,14 +23340,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -24104,14 +23763,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "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, - "optional": true, - "peer": true - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -24135,39 +23786,6 @@ "node": ">= 0.8" } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -24189,17 +23807,6 @@ "node": ">=8.12.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/husky": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", @@ -24566,6 +24173,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -24585,14 +24193,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -24957,14 +24557,6 @@ "node": ">=8" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -25210,14 +24802,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -25290,14 +24874,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -25649,23 +25225,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -27858,20 +27417,6 @@ "node": ">= 0.6.0" } }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "peer": true - }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/js-beautify": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.8.tgz", @@ -27965,6 +27510,7 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -27973,14 +27519,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/jscodeshift": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", @@ -28277,14 +27815,15 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/jshint": { @@ -28363,14 +27902,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -28379,15 +27910,8 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true, - "peer": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, "node_modules/json5": { "version": "2.2.3", @@ -28421,23 +27945,6 @@ "node": ">= 10.0.0" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", @@ -28941,7 +28448,8 @@ "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, "node_modules/lodash.curry": { "version": "4.1.1", @@ -28973,7 +28481,8 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.template": { "version": "4.5.0", @@ -28997,7 +28506,8 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -29246,144 +28756,6 @@ "node": ">=6" } }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/make-fetch-happen/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, - "optional": true, - "peer": true - }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -29393,20 +28765,6 @@ "tmpl": "1.0.5" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/map-or-similar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", @@ -29963,129 +29321,6 @@ "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/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, - "optional": true, - "peer": true - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -30781,44 +30016,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/minipass": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", @@ -30831,81 +30028,6 @@ "node": ">=8" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -31698,14 +30820,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -31735,7 +30849,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -31853,191 +30968,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/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, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-gyp/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, - "optional": true, - "peer": true - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -32055,189 +30985,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, - "node_modules/node-sass": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", - "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "async-foreach": "^0.1.3", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "meow": "^9.0.0", - "nan": "^2.13.2", - "node-gyp": "^8.4.1", - "npmlog": "^5.0.0", - "request": "^2.88.0", - "sass-graph": "4.0.0", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "bin": { - "node-sass": "bin/node-sass" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/node-sass/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, - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/node-sass/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, - "optional": true, - "peer": 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/node-sass/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, - "optional": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/node-sass/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, - "optional": true, - "peer": true - }, - "node_modules/node-sass/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-sass/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, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/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, - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/nodemailer": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.3.tgz", @@ -32396,20 +31143,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -32658,17 +31391,6 @@ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -33529,18 +32251,11 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true, - "peer": 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.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -35236,31 +33951,9 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, "engines": { - "node": ">=10" + "node": ">=0.4.0" } }, "node_modules/prompts": { @@ -35531,17 +34224,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/ramda": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", @@ -36482,6 +35164,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, "engines": { "node": ">=8" }, @@ -36791,78 +35474,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-at": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", @@ -36965,17 +35576,6 @@ "node": ">=8" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -37110,46 +35710,6 @@ "node": ">=14.0.0" } }, - "node_modules/sass-graph": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", - "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.0.0", - "lodash": "^4.17.11", - "scss-tokenizer": "^0.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "sassgraph": "bin/sassgraph" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sass-graph/node_modules/yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "cliui": "^7.0.2", - "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.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/sass-loader": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", @@ -37219,29 +35779,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/scss-tokenizer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", - "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "js-base64": "^2.4.3", - "source-map": "^0.7.1" - } - }, - "node_modules/scss-tokenizer/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -37350,14 +35887,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/set-cookie-parser": { "version": "2.4.8", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", @@ -37570,6 +36099,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -37586,6 +36116,7 @@ "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" }, @@ -37600,6 +36131,7 @@ "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" }, @@ -37610,7 +36142,8 @@ "node_modules/slice-ansi/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/slick": { "version": "1.12.2", @@ -37650,22 +36183,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks-proxy-agent": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -37767,34 +36284,8 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "node_modules/stable": { "version": "0.1.8", @@ -37871,17 +36362,6 @@ "node": ">= 0.8" } }, - "node_modules/stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -38204,6 +36684,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -38340,6 +36821,7 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, "dependencies": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", @@ -38356,6 +36838,7 @@ "version": "8.6.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -38370,7 +36853,8 @@ "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/tapable": { "version": "2.2.1", @@ -38652,7 +37136,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "node_modules/through": { "version": "2.3.8", @@ -38703,14 +37188,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, "node_modules/tocbot": { "version": "4.28.2", "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", @@ -38743,17 +37220,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", @@ -38763,17 +37229,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.2" - } - }, "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -38814,28 +37269,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -38844,19 +37277,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.21.0.tgz", - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -38875,20 +37295,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/ufo": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", @@ -39011,28 +37417,6 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -39382,7 +37766,8 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "node_modules/v8-to-istanbul": { "version": "9.3.0", @@ -39435,22 +37820,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -39880,7 +38249,7 @@ "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-html-community": "0.0.8", "html-entities": "^2.1.0", @@ -39977,6 +38346,28 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/webpack/node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -40082,17 +38473,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -40102,6 +38482,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -43421,12 +41802,13 @@ } }, "@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "requires": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" } }, "@babel/compat-data": { @@ -43479,12 +41861,28 @@ "semver": "^6.3.0" }, "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -43494,14 +41892,15 @@ } }, "@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.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "requires": { - "@babel/types": "^7.24.7", + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { @@ -43633,6 +42032,7 @@ "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, "requires": { "@babel/template": "^7.24.7", "@babel/types": "^7.24.7" @@ -43642,6 +42042,7 @@ "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, "requires": { "@babel/types": "^7.24.7" } @@ -43741,14 +42142,14 @@ } }, "@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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" }, "@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==" }, "@babel/helper-validator-option": { "version": "7.24.7", @@ -43780,6 +42181,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -43788,9 +42190,12 @@ } }, "@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.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "requires": { + "@babel/types": "^7.27.3" + } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.24.7", @@ -44916,8 +43321,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} + "dev": true }, "semver": { "version": "6.3.1", @@ -45020,40 +43424,36 @@ } }, "@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.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" } }, "@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", - "requires": { - "@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", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "requires": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "requires": { - "@babel/helper-string-parser": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" } }, "@base2/pretty-print-object": { @@ -45352,8 +43752,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "dev": true, - "requires": {} + "dev": true }, "@emotion/weak-memoize": { "version": "0.2.5", @@ -45518,6 +43917,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -45530,10 +43930,34 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, "globals": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -45541,12 +43965,14 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, @@ -45590,14 +44016,6 @@ "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==", "dev": true }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true, - "optional": true, - "peer": true - }, "@gatsbyjs/webpack-hot-middleware": { "version": "2.25.3", "resolved": "https://registry.npmjs.org/@gatsbyjs/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz", @@ -45612,6 +44030,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -45621,7 +44040,8 @@ "@humanwhocodes/object-schema": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true }, "@isaacs/cliui": { "version": "8.0.2", @@ -46453,83 +44873,6 @@ "fastq": "^1.6.0" } }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "optional": true, - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "@open-draft/until": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", @@ -46805,22 +45148,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-id": { "version": "1.1.0", @@ -46853,8 +45193,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-use-controllable-state": { "version": "1.1.0", @@ -46869,8 +45208,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -46917,8 +45255,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -46971,8 +45308,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -46996,8 +45332,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-use-controllable-state": { "version": "1.1.0", @@ -47035,22 +45370,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -47074,8 +45406,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-use-controllable-state": { "version": "1.1.0", @@ -47113,22 +45444,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true, - "requires": {} + "dev": true }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -49641,8 +47969,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -49915,6 +48242,12 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -50019,8 +48352,7 @@ "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.20.tgz", "integrity": "sha512-SRvPDr9VWcS24ByQOVmbfZ655y5LvjXRlsF1I6Pr9YZybLfYbu3L5IicfEHT4A8lMdghzgbPFVQaJez46DTrkg==", - "dev": true, - "requires": {} + "dev": true }, "@storybook/react-webpack5": { "version": "7.6.20", @@ -50258,57 +48590,49 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-remove-jsx-attribute": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-svg-dynamic-title": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-transform-react-native-svg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-transform-svg-component": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-preset": { "version": "6.2.0", @@ -50805,16 +49129,7 @@ "version": "14.5.2", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", - "dev": true, - "requires": {} - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "@trysound/sax": { "version": "0.2.0", @@ -51134,14 +49449,6 @@ "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", "dev": true }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true, - "optional": true, - "peer": true - }, "@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", @@ -51581,8 +49888,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "1.4.1", @@ -51597,8 +49903,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "requires": {} + "dev": true }, "@xmldom/xmldom": { "version": "0.7.11", @@ -51697,9 +50002,9 @@ } }, "acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==" + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==" }, "acorn-globals": { "version": "6.0.0", @@ -51714,25 +50019,31 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" } } }, "acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "requires": {} + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "requires": { + "acorn": "^8.11.0" + } }, "address": { "version": "1.2.2", @@ -51748,19 +50059,6 @@ "debug": "4" } }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, "aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", @@ -51811,8 +50109,7 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "ansi-escapes": { "version": "4.3.2", @@ -51845,6 +50142,7 @@ "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, "requires": { "color-convert": "^1.9.0" } @@ -51871,45 +50169,11 @@ "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", "dev": true }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true, - "peer": true - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -52132,25 +50396,6 @@ } } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "optional": true, - "peer": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, "assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -52164,14 +50409,6 @@ "util": "^0.12.5" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "peer": true - }, "ast-types": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", @@ -52198,21 +50435,14 @@ "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true }, "async": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true, - "peer": true - }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -52339,22 +50569,6 @@ } } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true, - "peer": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true, - "optional": true, - "peer": true - }, "axe-core": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz", @@ -52394,8 +50608,7 @@ "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "requires": {} + "dev": true }, "babel-jest": { "version": "29.7.0", @@ -52768,17 +50981,6 @@ "safe-buffer": "5.1.2" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -53049,19 +51251,6 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, "camelize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", @@ -53090,14 +51279,6 @@ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true, - "peer": true - }, "ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", @@ -53108,6 +51289,7 @@ "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, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -53527,8 +51709,7 @@ "codemirror-colorpicker": { "version": "1.9.80", "resolved": "https://registry.npmjs.org/codemirror-colorpicker/-/codemirror-colorpicker-1.9.80.tgz", - "integrity": "sha512-7lGqNxf5haBJXLnVR1ynPiPkN2d1Whm0jdy8Z9QsSOhRWVyK2C2ihgm1dX4DCks57ht/jKMdpL9lYv+zAphxWQ==", - "requires": {} + "integrity": "sha512-7lGqNxf5haBJXLnVR1ynPiPkN2d1Whm0jdy8Z9QsSOhRWVyK2C2ihgm1dX4DCks57ht/jKMdpL9lYv+zAphxWQ==" }, "collect-v8-coverage": { "version": "1.0.2", @@ -53567,14 +51748,6 @@ "simple-swizzle": "^0.2.2" } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "optional": true, - "peer": true - }, "colord": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", @@ -53751,14 +51924,6 @@ "date-now": "^0.1.4" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true, - "peer": true - }, "console-feed": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/console-feed/-/console-feed-3.2.0.tgz", @@ -53774,8 +51939,7 @@ "linkifyjs": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", - "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==", - "requires": {} + "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==" } } }, @@ -54360,8 +52524,7 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "dev": true, - "requires": {} + "dev": true }, "css-select": { "version": "4.3.0", @@ -54541,29 +52704,25 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-merge-longhand": { "version": "5.1.4", @@ -54631,8 +52790,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -54945,8 +53103,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -55012,17 +53169,6 @@ "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", @@ -55053,36 +53199,6 @@ } } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "optional": true, - "peer": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "optional": true, - "peer": true - } - } - }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -55161,7 +53277,8 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "deepmerge": { "version": "4.2.2", @@ -55281,27 +53398,11 @@ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true, - "peer": true - }, "denque": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "optional": true, - "peer": true - }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -55385,6 +53486,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "requires": { "esutils": "^2.0.2" } @@ -55544,18 +53646,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "editorconfig": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", @@ -55617,16 +53707,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "optional": true, - "peer": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -55660,6 +53740,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { "ansi-colors": "^4.1.1" }, @@ -55667,7 +53748,8 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true } } }, @@ -55676,28 +53758,12 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "optional": true, - "peer": true - }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "optional": true, - "peer": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -55844,11 +53910,6 @@ "source-map": "~0.6.1" }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -55861,6 +53922,7 @@ "version": "7.31.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", + "dev": true, "requires": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -55908,14 +53970,22 @@ "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -55925,6 +53995,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -55933,6 +54004,7 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -55943,6 +54015,7 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -55950,12 +54023,14 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -55965,17 +54040,55 @@ "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==" + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } }, "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -55984,6 +54097,7 @@ "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -55991,22 +54105,26 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -56015,6 +54133,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -56024,6 +54143,7 @@ "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, "requires": { "yallist": "^4.0.0" } @@ -56032,6 +54152,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -56044,17 +54165,20 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -56063,6 +54187,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -56070,12 +54195,14 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -56083,12 +54210,14 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -56096,7 +54225,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -56122,8 +54252,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.4", @@ -56547,6 +54676,22 @@ } } }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -56580,18 +54725,19 @@ "dev": true }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" }, @@ -56599,7 +54745,8 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true } } }, @@ -56652,24 +54799,24 @@ } }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "dependencies": { "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==" } } }, @@ -56682,15 +54829,9 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } } }, "esrecurse": { @@ -56699,19 +54840,12 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.2", @@ -56996,14 +55130,6 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "optional": true, - "peer": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -57064,7 +55190,8 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fast-xml-parser": { "version": "4.2.5", @@ -57129,6 +55256,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "requires": { "flat-cache": "^3.0.4" } @@ -57296,6 +55424,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -57305,6 +55434,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -57314,7 +55444,8 @@ "flatted": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "dev": true }, "flatten": { "version": "1.0.2", @@ -57400,14 +55531,6 @@ } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true, - "peer": true - }, "fork-ts-checker-webpack-plugin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", @@ -57502,19 +55625,6 @@ } } }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -57588,7 +55698,8 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true }, "functions-have-names": { "version": "1.2.3", @@ -57601,36 +55712,6 @@ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==" }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "globule": "^1.0.0" - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -57697,31 +55778,12 @@ "es-object-atoms": "^1.0.0" } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "optional": true, - "peer": true - }, "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 }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "giget": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", @@ -57811,19 +55873,6 @@ "slash": "^3.0.0" } }, - "globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, "good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -57883,34 +55932,6 @@ } } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true, - "peer": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "optional": true, - "peer": true - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -57952,14 +55973,6 @@ "has-symbols": "^1.0.3" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true, - "peer": true - }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -58275,14 +56288,6 @@ } } }, - "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, - "optional": true, - "peer": true - }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -58302,32 +56307,6 @@ } } }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -58343,17 +56322,6 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "^2.0.0" - } - }, "husky": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", @@ -58508,8 +56476,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ieee754": { "version": "1.1.13", @@ -58617,7 +56584,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indent-string": { "version": "4.0.0", @@ -58631,14 +56599,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "optional": true, - "peer": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -58885,14 +56845,6 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true, - "optional": true, - "peer": true - }, "is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -59047,14 +56999,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true, - "peer": true - }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -59106,14 +57050,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true, - "peer": true - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -59366,19 +57302,6 @@ "color-convert": "^2.0.1" } }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -59408,8 +57331,7 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "requires": {} + "dev": true }, "has-flag": { "version": "4.0.0", @@ -60283,8 +58205,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "29.6.3", @@ -60990,20 +58911,6 @@ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" }, - "jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "peer": true - }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true, - "optional": true, - "peer": true - }, "js-beautify": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.8.tgz", @@ -61073,19 +58980,12 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true, - "peer": true - }, "jscodeshift": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", @@ -61293,15 +59193,14 @@ "ws": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "requires": {} + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==" } } }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==" }, "jshint": { "version": "2.13.4", @@ -61372,14 +59271,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "optional": true, - "peer": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -61388,15 +59279,8 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true, - "peer": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, "json5": { "version": "2.2.3", @@ -61421,20 +59305,6 @@ } } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "jsx-ast-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", @@ -61805,7 +59675,8 @@ "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, "lodash.curry": { "version": "4.1.1", @@ -61837,7 +59708,8 @@ "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "lodash.template": { "version": "4.5.0", @@ -61861,7 +59733,8 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true }, "lodash.uniq": { "version": "4.5.0", @@ -62056,119 +59929,6 @@ "semver": "^5.6.0" } }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "optional": true, - "peer": true - }, - "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, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "optional": true, - "peer": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -62178,14 +59938,6 @@ "tmpl": "1.0.5" } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "optional": true, - "peer": true - }, "map-or-similar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", @@ -62202,8 +59954,7 @@ "version": "7.4.7", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", - "dev": true, - "requires": {} + "dev": true }, "matchmediaquery": { "version": "0.3.1", @@ -62605,101 +60356,6 @@ "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "optional": true, - "peer": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -63113,37 +60769,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "optional": true, - "peer": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "minipass": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", @@ -63161,64 +60786,6 @@ } } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - } - }, "minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -63897,14 +61464,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true, - "peer": true - }, "nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -63922,7 +61481,8 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, "negotiator": { "version": "0.6.3", @@ -64027,148 +61587,6 @@ "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", "dev": true }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "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, - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "abbrev": "1" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -64186,145 +61604,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, - "node-sass": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", - "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "meow": "^9.0.0", - "nan": "^2.13.2", - "node-gyp": "^8.4.1", - "npmlog": "^5.0.0", - "request": "^2.88.0", - "sass-graph": "4.0.0", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "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, - "optional": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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, - "optional": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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, - "optional": true, - "peer": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "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, - "optional": true, - "peer": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "optional": true, - "peer": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "optional": true, - "peer": true - }, - "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, - "optional": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "nodemailer": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.3.tgz", @@ -64449,20 +61728,6 @@ } } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -64628,14 +61893,6 @@ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "optional": true, - "peer": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -65281,18 +62538,10 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true, - "peer": true - }, "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { "version": "2.3.1", @@ -65672,8 +62921,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-focus/-/postcss-focus-5.0.1.tgz", "integrity": "sha512-iVP+4VLenlI0tHHJD+7HyE+7pQ6Hlg3+Zm/xTwNE1LT7OgmYC4r1ale6AnEkABGNKKE3j1LkF/BNcv89lDoICw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-focus-visible": { "version": "4.0.0", @@ -65963,8 +63211,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.5", @@ -66556,27 +63803,8 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true, - "optional": true, - "peer": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, "prompts": { "version": "2.4.2", @@ -66777,14 +64005,6 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "optional": true, - "peer": true - }, "ramda": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", @@ -66876,8 +64096,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true, - "requires": {} + "dev": true }, "react-docgen": { "version": "7.0.3", @@ -66918,8 +64137,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true, - "requires": {} + "dev": true }, "react-dock": { "version": "0.6.0", @@ -66985,8 +64203,7 @@ "react-ga": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.0.tgz", - "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==", - "requires": {} + "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==" }, "react-helmet": { "version": "5.2.1", @@ -67011,8 +64228,7 @@ "react-icons": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz", - "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==", - "requires": {} + "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==" }, "react-inspector": { "version": "5.1.1", @@ -67469,8 +64685,7 @@ "redux-thunk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "requires": {} + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==" }, "regenerate": { "version": "1.4.2", @@ -67516,7 +64731,8 @@ "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true }, "regexpu-core": { "version": "5.3.2", @@ -67745,66 +64961,6 @@ } } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "optional": true, - "peer": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "require-at": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", @@ -67879,14 +65035,6 @@ "signal-exit": "^3.0.2" } }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "optional": true, - "peer": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -67984,39 +65132,6 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, - "sass-graph": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", - "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.17.11", - "scss-tokenizer": "^0.3.0", - "yargs": "^17.2.1" - }, - "dependencies": { - "yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cliui": "^7.0.2", - "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.0.0" - } - } - } - }, "sass-loader": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", @@ -68051,28 +65166,6 @@ "ajv-keywords": "^3.5.2" } }, - "scss-tokenizer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", - "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "js-base64": "^2.4.3", - "source-map": "^0.7.1" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -68161,14 +65254,6 @@ "send": "0.18.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true, - "peer": true - }, "set-cookie-parser": { "version": "2.4.8", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", @@ -68338,8 +65423,7 @@ "sinon-mongoose": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/sinon-mongoose/-/sinon-mongoose-2.3.0.tgz", - "integrity": "sha512-d0rrL53wuDDs91GMCFAvQam64IpdVfkaxA4cGLTZfw1d5tTg6+F/D7F080d1n3d1gSHJBZLUf9pGpijC/x7xKQ==", - "requires": {} + "integrity": "sha512-d0rrL53wuDDs91GMCFAvQam64IpdVfkaxA4cGLTZfw1d5tTg6+F/D7F080d1n3d1gSHJBZLUf9pGpijC/x7xKQ==" }, "sisteransi": { "version": "1.0.5", @@ -68357,6 +65441,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -68367,6 +65452,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -68375,6 +65461,7 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -68382,7 +65469,8 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true } } }, @@ -68410,19 +65498,6 @@ "smart-buffer": "^4.2.0" } }, - "socks-proxy-agent": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -68510,26 +65585,8 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "stable": { "version": "0.1.8", @@ -68598,17 +65655,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, "stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -68637,8 +65683,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/storybook-addon-theme-playground/-/storybook-addon-theme-playground-3.1.0.tgz", "integrity": "sha512-LYdhiDQRnRiRg52An1QCmyEBF9hBZcIAdEOaXF9oe86BUZTwKxJHa3nbKsmJ62qnbG8igTin4FOQqhyiENCabw==", - "dev": true, - "requires": {} + "dev": true }, "stream-shift": { "version": "1.0.3", @@ -68841,7 +65886,8 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "strnum": { "version": "1.0.5", @@ -68852,8 +65898,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "requires": {} + "dev": true }, "style-to-object": { "version": "0.3.0", @@ -68940,6 +65985,7 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", @@ -68953,6 +65999,7 @@ "version": "8.6.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -68963,7 +66010,8 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, @@ -69168,7 +66216,8 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "through": { "version": "2.3.8", @@ -69216,11 +66265,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, "tocbot": { "version": "4.28.2", "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", @@ -69247,30 +66291,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "optional": true, - "peer": true - }, "trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "glob": "^7.1.2" - } - }, "ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -69302,37 +66327,11 @@ "tslib": "^1.8.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true, - "peer": true - }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, - "type-fest": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.21.0.tgz", - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", - "optional": true, - "peer": true - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -69348,13 +66347,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, - "peer": true - }, "ufo": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", @@ -69449,28 +66441,6 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -69718,7 +66688,8 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "v8-to-istanbul": { "version": "9.3.0", @@ -69764,19 +66735,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -69983,6 +66941,20 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -70096,7 +67068,7 @@ "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "devOptional": true, + "dev": true, "requires": { "ansi-html-community": "0.0.8", "html-entities": "^2.1.0", @@ -70241,17 +67213,6 @@ "has-tostringtag": "^1.0.2" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -70260,7 +67221,8 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true }, "wordwrap": { "version": "1.0.0", diff --git a/package.json b/package.json index 2f0293e1fc..3061c6cee0 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,9 @@ "@auth0/s3": "^1.0.0", "@aws-sdk/client-s3": "^3.412.0", "@babel/core": "^7.14.6", + "@babel/parser": "^7.27.5", "@babel/register": "^7.14.5", + "@babel/traverse": "^7.27.4", "@emmetio/codemirror-plugin": "^1.2.4", "@gatsbyjs/webpack-hot-middleware": "^2.25.3", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", @@ -168,6 +170,8 @@ "@redux-devtools/dock-monitor": "^3.0.1", "@redux-devtools/log-monitor": "^4.0.2", "@reduxjs/toolkit": "^1.9.3", + "acorn": "^8.14.1", + "acorn-walk": "^8.3.4", "async": "^3.2.3", "axios": "^1.8.2", "babel-plugin-styled-components": "^1.13.2", @@ -191,7 +195,9 @@ "dotenv": "^2.0.0", "dropzone": "^4.3.0", "escape-string-regexp": "^1.0.5", + "eslint-scope": "^8.4.0", "eslint-webpack-plugin": "^3.1.1", + "espree": "^10.4.0", "express": "^4.18.2", "express-basic-auth": "^1.2.0", "express-session": "^1.17.2", diff --git a/server/previewServer.js b/server/previewServer.js index 3c07cd5d51..8feda92bc4 100644 --- a/server/previewServer.js +++ b/server/previewServer.js @@ -24,23 +24,15 @@ const connectToMongoDB = async () => { await mongoose.connect(mongoConnectionString, { useNewUrlParser: true, useUnifiedTopology: true, - serverSelectionTimeoutMS: 30000, // 30 seconds timeout - socketTimeoutMS: 45000 // 45 seconds timeout + serverSelectionTimeoutMS: 30000, + socketTimeoutMS: 45000 }); } catch (error) { - console.error('Failed to connect to MongoDB: ', error); process.exit(1); } }; -connectToMongoDB(); - -mongoose.connection.on('error', () => { - console.error( - 'MongoDB Connection Error. Please make sure that MongoDB is running.' - ); - process.exit(1); -}); +connectToMongoDB(); // Keep this if using Option B const allowedCorsOrigins = [ /p5js\.org$/, From b0a0feb19ecabe55deacde04bc56f85c2a4a9616 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Wed, 9 Jul 2025 11:50:08 +0530 Subject: [PATCH 08/28] fixed autocomplete bug --- client/modules/IDE/components/contextAwareHinter.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index ac4dfb855f..01bfaca7fc 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -130,8 +130,6 @@ export default function contextAwareHinter(cm, options = {}) { ) ); - console.log(allVarNames); - const varHints = allVarNames .filter( (varName) => @@ -151,9 +149,7 @@ export default function contextAwareHinter(cm, options = {}) { return { item: baseItem, isBlacklisted: blacklist.includes(varName), - displayText: formatHintDisplay(varName, blacklist.includes(varName)), - from: { line, ch }, - to: { line: ch - currentWord.length } + displayText: formatHintDisplay(varName, blacklist.includes(varName)) }; }); From 5120dcedea301c4dfb1d586a6d0e36872e212a96 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sat, 12 Jul 2025 12:27:34 +0530 Subject: [PATCH 09/28] bug fix: ensure renaming doesnt happen with commented code and keywords --- client/modules/IDE/components/Editor/index.jsx | 5 ++++- .../modules/IDE/components/showRenameDialog.jsx | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index e9845799b9..87f31cc1ad 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -540,6 +540,9 @@ class Editor extends React.Component { renameVariable(cm) { const cursorCoords = cm.cursorCoords(true, 'page'); const selection = cm.getSelection(); + const pos = cm.getCursor(); // or selection start + const token = cm.getTokenAt(pos); + const tokenType = token.type; if (!selection) { return; } @@ -548,7 +551,7 @@ class Editor extends React.Component { const fromPos = CodeMirror.cmpPos(sel.anchor, sel.head) <= 0 ? sel.anchor : sel.head; - showRenameDialog(cursorCoords, selection, (newName) => { + showRenameDialog(tokenType, cursorCoords, selection, (newName) => { if (newName && newName.trim() !== '' && newName !== selection) { handleRename(fromPos, selection, newName, cm); } diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx index 8d7fedb601..412300227f 100644 --- a/client/modules/IDE/components/showRenameDialog.jsx +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -2,8 +2,11 @@ const allFuncs = require('./listOfAllFunctions.json'); const allFunsList = new Set(allFuncs.functions.list); -export default function showRenameDialog(coords, oldName, onSubmit) { - if (allFunsList.has(oldName) || !isValidIdentifierSelection(oldName)) { +export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { + if ( + allFunsList.has(oldName) || + !isValidIdentifierSelection(oldName, tokenType) + ) { showTemporaryDialog(coords, 'You cannot rename this element'); return; } @@ -62,9 +65,16 @@ function openRenameInputDialog(coords, oldName, onSubmit) { document.addEventListener('mousedown', onClickOutside); } -function isValidIdentifierSelection(selection) { +function isValidIdentifierSelection(selection, tokenType) { // Reject if empty, multiple words, or includes special characters if (!selection || selection.trim() === '') return false; + if ( + tokenType === 'comment' || + tokenType === 'atom' || + tokenType === 'string' || + tokenType === 'keyword' + ) + return false; // Reject multi-word selections or whitespace if (/\s/.test(selection)) return false; From bdb7d865eaac48d4c1a05859926825cedc4a5888 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Wed, 16 Jul 2025 12:17:51 +0530 Subject: [PATCH 10/28] minor changes to ensure all features work smoothly --- .../IDE/components/contextAwareHinter.js | 19 ++----------------- client/modules/IDE/components/parseCode.js | 2 +- client/modules/IDE/components/show-hint.js | 2 +- client/utils/codemirror-search.js | 8 -------- 4 files changed, 4 insertions(+), 27 deletions(-) diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 01bfaca7fc..366fca6f3c 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -5,19 +5,6 @@ import classMap from './class-with-methods-map.json'; const scopeMap = require('./finalScopeMap.json'); -function formatHintDisplay(name, isBlacklisted) { - return ` -
- ${name} - ${ - isBlacklisted - ? `
⚠️ "Use ${name}" carefully in this context.
` - : '' - } -
- `; -} - function getExpressionBeforeCursor(cm) { const cursor = cm.getCursor(); const line = cm.getLine(cursor.line); @@ -148,8 +135,7 @@ export default function contextAwareHinter(cm, options = {}) { return { item: baseItem, - isBlacklisted: blacklist.includes(varName), - displayText: formatHintDisplay(varName, blacklist.includes(varName)) + isBlacklisted: blacklist.includes(varName) }; }); @@ -167,8 +153,7 @@ export default function contextAwareHinter(cm, options = {}) { return { ...hint, - isBlacklisted, - displayText: formatHintDisplay(name, isBlacklisted) + isBlacklisted }; }); diff --git a/client/modules/IDE/components/parseCode.js b/client/modules/IDE/components/parseCode.js index 02e23f46f1..fd5177beb1 100644 --- a/client/modules/IDE/components/parseCode.js +++ b/client/modules/IDE/components/parseCode.js @@ -13,7 +13,7 @@ export default function parseCode(_cm) { plugins: ['jsx', 'typescript'] // add plugins as needed }); } catch (e) { - console.warn('Failed to parse code with Babel:', e.message); + // console.warn('Failed to parse code with Babel:', e.message); return 'global'; } diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 93da068d28..7c587ca995 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -323,7 +323,7 @@ import warnIfBlacklisted from './warn'; if (isBlacklistedFunction) { return `
${hintHTML} -
⚠️ Be careful — this function is discouraged in this context.
+
⚠️use with caution in this context
`; } else { return `
${hintHTML}
`; diff --git a/client/utils/codemirror-search.js b/client/utils/codemirror-search.js index 30b3eaf1ee..3ed3116a63 100644 --- a/client/utils/codemirror-search.js +++ b/client/utils/codemirror-search.js @@ -286,7 +286,6 @@ function persistentDialog(cm, text, deflt, onEnter, replaceOpened, onKeyDown) { }); function doReplace(match, cursor, query, withText) { - console.log('meow', match, cursor, query, withText); cursor.replace( typeof query == 'string' ? withText @@ -370,7 +369,6 @@ function parseString(string) { } function parseQuery(query, state) { - console.log('parsequery=', state); var emptyQuery = 'x^'; // matches nothing if (query === '') { query = emptyQuery; @@ -398,7 +396,6 @@ function parseQuery(query, state) { } function startSearch(cm, state, query) { - console.log('queryyy', query); var searchDialog = document.querySelector('.CodeMirror-dialog'); if (searchDialog) { // check if the file has changed @@ -426,7 +423,6 @@ function startSearch(cm, state, query) { cm.removeOverlay(state.overlay, state.caseInsensitive); state.overlay = searchOverlay(state.query, state.caseInsensitive); cm.addOverlay(state.overlay); - console.log('rr', cm); if (cm.showMatchesOnScrollbar) { if (state.annotate) { state.annotate.clear(); @@ -441,7 +437,6 @@ function startSearch(cm, state, query) { var cursor = getSearchCursor(cm, state.query); cursor.findNext(); var num_match = cm.state.search.annotate.matches.length; - console.log('xxx', cm); if (num_match == 0) { cm.display.wrapper.querySelector( '.CodeMirror-search-results' @@ -471,7 +466,6 @@ function doSearch(cm, rev, persistent, immediate, ignoreQuery) { var queryDialog = getQueryDialog(); if (persistent && cm.openDialog) { var hiding = null; - console.log('doSearch function'); var searchNext = function (query, event) { CodeMirror.e_stop(event); if (!query) return; @@ -528,7 +522,6 @@ function doSearch(cm, rev, persistent, immediate, ignoreQuery) { } }); } else { - console.log('else doSearch function'); dialog(cm, queryDialog, 'Search for:', q, function (query) { if (query && !state.query) cm.operation(function () { @@ -625,7 +618,6 @@ function findNext(cm, rev, callback) { state.query, rev ? state.posFrom : state.posTo ); - console.log('finnext, state,cursor', state, cursor); if (!cursor.find(rev)) { cursor = getSearchCursor( cm, From e3c7f18e46f30c68a8d2bd4ac2efa63c7418669a Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Thu, 17 Jul 2025 11:59:58 +0530 Subject: [PATCH 11/28] fixed a minor bug in autocomplete method suggestions --- .../modules/IDE/components/contextAwareHinter.js | 12 +++--------- client/modules/IDE/components/show-hint.js | 14 ++++++++------ 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 366fca6f3c..9a6f790efb 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -1,4 +1,3 @@ -import CodeMirror from 'codemirror'; import parseCode from './parseCode'; import parseCodeVariables from './parseCodeVariables'; import classMap from './class-with-methods-map.json'; @@ -66,12 +65,6 @@ export default function contextAwareHinter(cm, options = {}) { } const to = { line: cursor.line, ch: cursor.ch }; - let tokenLength = 0; - if (dotMatch) { - const typed = dotMatch[1] || ''; // what's typed after the dot - tokenLength = typed.length; - } - const typed = dotMatch?.[1]?.toLowerCase() || ''; const methodHints = methods @@ -79,7 +72,8 @@ export default function contextAwareHinter(cm, options = {}) { .map((method) => ({ item: { text: method, - type: 'fun' + type: 'fun', + isMethod: true }, displayText: method, from, @@ -96,7 +90,7 @@ export default function contextAwareHinter(cm, options = {}) { const currentContext = parseCode(cm); const allHints = hinter.search(currentWord); - const whitelist = scopeMap[currentContext]?.whitelist || []; + // const whitelist = scopeMap[currentContext]?.whitelist || []; const blacklist = scopeMap[currentContext]?.blacklist || []; const lowerCurrentWord = currentWord.toLowerCase(); diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 7c587ca995..8f5d6879da 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -330,7 +330,12 @@ import warnIfBlacklisted from './warn'; } } - function getInlineHintSuggestion(cm, focus, tokenLength) { + function getInlineHintSuggestion(cm, focus, token) { + let tokenLength = token.string.length; + console.log(focus, tokenLength); + if (token.string === '.') { + tokenLength -= 1; + } const name = focus.item?.text; if (name) warnIfBlacklisted(cm, name); const suggestionItem = focus.item; @@ -364,13 +369,10 @@ import warnIfBlacklisted from './warn'; const cursor = cm.getCursor(); const token = cm.getTokenAt(cursor); + console.log('xx=', token.string.length, token, cursor); if (token && focus.item) { - const suggestionHTML = getInlineHintSuggestion( - cm, - focus, - token.string.length - ); + const suggestionHTML = getInlineHintSuggestion(cm, focus, token); const widgetElement = document.createElement('span'); widgetElement.className = 'autocomplete-inline-hinter'; From ea39d0e997aeb770e29d83efe1b6368a10ebb05f Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Tue, 22 Jul 2025 12:49:55 +0530 Subject: [PATCH 12/28] implement jump to definition basic functionality --- .../modules/IDE/components/Editor/index.jsx | 11 +++ .../IDE/components/jump-to-definition.js | 82 +++++++++++++++++++ .../IDE/components/parseCodeVariables.js | 1 + .../modules/IDE/components/rename-variable.js | 4 +- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 client/modules/IDE/components/jump-to-definition.js diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 87f31cc1ad..91e952d055 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -76,6 +76,7 @@ import IconButton from '../../../../common/IconButton'; import contextAwareHinter from '../contextAwareHinter'; import showRenameDialog from '../showRenameDialog'; import { handleRename } from '../rename-variable'; +import { jumpToDefinition } from '../jump-to-definition'; emmet(CodeMirror); @@ -158,6 +159,16 @@ class Editor extends React.Component { delete this._cm.options.lint.options.errors; + this._cm.getWrapperElement().addEventListener('click', (e) => { + const isMac = /Mac/.test(navigator.platform); + const isCtrlClick = isMac ? e.metaKey : e.ctrlKey; + + if (isCtrlClick) { + const pos = this._cm.coordsChar({ left: e.clientX, top: e.clientY }); + jumpToDefinition.call(this, pos); + } + }); + const replaceCommand = metaKey === 'Ctrl' ? `${metaKey}-H` : `${metaKey}-Option-F`; this._cm.setOption('extraKeys', { diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js new file mode 100644 index 0000000000..0d19b412de --- /dev/null +++ b/client/modules/IDE/components/jump-to-definition.js @@ -0,0 +1,82 @@ +/* eslint-disable */ +import parseCodeVariables from './parseCodeVariables'; +import { getAST, getContext } from './rename-variable'; +const traverse = require('@babel/traverse').default; + +export function jumpToDefinition(pos) { + const cm = this._cm; + const token = cm.getTokenAt(pos); + const tokenType = token.type; + + // Only act if it's a variable + if (!tokenType || !tokenType.includes('variable')) return; + + const varName = token.string; + + // Get full AST and variable scopes + const ast = getAST(cm); + const varScopeMap = parseCodeVariables(cm).varScopeMap || {}; + const context = getContext(cm, ast, pos, varScopeMap); + + if (!context || !varScopeMap[context] || !varScopeMap[context].has(varName)) { + console.warn(`Variable "${varName}" not found in context "${context}".`); + return; + } + + // Now find the actual definition location using Babel traverse + const targetIndex = cm.indexFromPos(pos); + let found = false; + + traverse(ast, { + VariableDeclarator(path) { + if (found) return; + + const { node } = path; + if ( + node.id.type === 'Identifier' && + node.id.name === varName && + node.loc + ) { + const defPos = cm.posFromIndex(node.start); + const defContext = getContext(cm, ast, defPos, varScopeMap); + + if (defContext === context) { + found = true; + cm.setCursor(defPos); + cm.focus(); + } + } + }, + + FunctionDeclaration(path) { + // Handle function parameters like: function foo(x) { x } + if (found) return; + + const { node } = path; + if (!node.params || !node.loc) return; + + for (const param of node.params) { + if ( + param.type === 'Identifier' && + param.name === varName && + param.loc + ) { + const defPos = cm.posFromIndex(param.start); + const defContext = getContext(cm, ast, defPos, varScopeMap); + + if (defContext === context) { + found = true; + cm.setCursor(defPos); + cm.focus(); + } + } + } + } + }); + + if (!found) { + console.warn( + `Definition for "${varName}" not found in context "${context}".` + ); + } +} diff --git a/client/modules/IDE/components/parseCodeVariables.js b/client/modules/IDE/components/parseCodeVariables.js index 504943d9bb..24518a39c7 100644 --- a/client/modules/IDE/components/parseCodeVariables.js +++ b/client/modules/IDE/components/parseCodeVariables.js @@ -212,6 +212,7 @@ function _parseCodeVariables(_cm) { }; lastValidResult = result; + console.log('result=', result); return result; } diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 88083b62c6..6cf047f304 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -25,7 +25,7 @@ export function handleRename(fromPos, oldName, newName, cm) { const matches = getMatches(cm, state, state.query); } -function getContext(cm, ast, fromPos, varScopeMap) { +export function getContext(cm, ast, fromPos, varScopeMap) { const posIndex = cm.indexFromPos(fromPos); let foundNode = null; let enclosingFunction = null; @@ -140,7 +140,7 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { }); } -function getAST(cm) { +export function getAST(cm) { const code = cm.getValue(); const cursor = cm.getCursor(); const offset = cm.indexFromPos(cursor); From f94b2fbc21f63e1a3c2f0cab6d6bcbc17bac072e Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Thu, 24 Jul 2025 12:34:56 +0530 Subject: [PATCH 13/28] remove console statements --- client/modules/IDE/components/Editor/index.jsx | 17 ----------------- .../IDE/components/contextAwareHinter.js | 6 ++---- .../IDE/components/jump-to-definition.js | 7 ------- client/modules/IDE/components/parseCode.js | 5 ++--- .../IDE/components/parseCodeVariables.js | 1 - .../modules/IDE/components/rename-variable.js | 3 --- client/modules/IDE/components/show-hint.js | 2 -- .../modules/IDE/components/showRenameDialog.jsx | 16 ++++------------ 8 files changed, 8 insertions(+), 49 deletions(-) diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 64217eea65..45d3289054 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -493,23 +493,6 @@ class Editor extends React.Component { }, hintOptions ); - - // CodeMirror.showHint( - // _cm, - // () => { - // const c = _cm.getCursor(); - // const token = _cm.getTokenAt(c); - // const hints = this.hinter - // .search(token.string) - // .filter((h) => h.item.text[0] === token.string[0]); - // return { - // list: hints, - // from: CodeMirror.Pos(c.line, token.start), - // to: CodeMirror.Pos(c.line, c.ch) - // }; - // }, - // hintOptions - // ); } else if (_cm.options.mode === 'css') { // CSS CodeMirror.showHint(_cm, CodeMirror.hint.css, hintOptions); diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 9a6f790efb..3093a4cdad 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -24,13 +24,11 @@ export default function contextAwareHinter(cm, options = {}) { const { hinter } = options; if (!hinter || typeof hinter.search !== 'function') { - console.warn('Hinter is not available or invalid.'); return []; } const baseExpression = getExpressionBeforeCursor(cm); - // If we're completing after a dot if (baseExpression) { const className = p5ClassMap[baseExpression]; const userClassEntry = Object.values(userClassMap).find( @@ -58,7 +56,7 @@ export default function contextAwareHinter(cm, options = {}) { let from = cursor; if (dotMatch) { const fullMatch = dotMatch[0]; - const methodStart = cursor.ch - fullMatch.length + 1; // +1 to skip the dot itself + const methodStart = cursor.ch - fullMatch.length + 1; from = { line: cursor.line, ch: methodStart }; } else { from = cursor; @@ -105,7 +103,7 @@ export default function contextAwareHinter(cm, options = {}) { const allVarNames = Array.from( new Set( Object.values(varScopeMap) - .map((s) => Array.from(s)) // convert Set to Array + .map((s) => Array.from(s)) .flat() .filter((name) => typeof name === 'string') ) diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index 0d19b412de..f946b59bc7 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -19,7 +19,6 @@ export function jumpToDefinition(pos) { const context = getContext(cm, ast, pos, varScopeMap); if (!context || !varScopeMap[context] || !varScopeMap[context].has(varName)) { - console.warn(`Variable "${varName}" not found in context "${context}".`); return; } @@ -73,10 +72,4 @@ export function jumpToDefinition(pos) { } } }); - - if (!found) { - console.warn( - `Definition for "${varName}" not found in context "${context}".` - ); - } } diff --git a/client/modules/IDE/components/parseCode.js b/client/modules/IDE/components/parseCode.js index fd5177beb1..cb93616d62 100644 --- a/client/modules/IDE/components/parseCode.js +++ b/client/modules/IDE/components/parseCode.js @@ -10,10 +10,9 @@ export default function parseCode(_cm) { try { ast = parser.parse(code, { sourceType: 'script', - plugins: ['jsx', 'typescript'] // add plugins as needed + plugins: ['jsx', 'typescript'] }); } catch (e) { - // console.warn('Failed to parse code with Babel:', e.message); return 'global'; } @@ -36,7 +35,7 @@ export default function parseCode(_cm) { context = '(anonymous)'; } } - path.stop(); // Stop traversal once we found the function context + path.stop(); } } }); diff --git a/client/modules/IDE/components/parseCodeVariables.js b/client/modules/IDE/components/parseCodeVariables.js index 24518a39c7..504943d9bb 100644 --- a/client/modules/IDE/components/parseCodeVariables.js +++ b/client/modules/IDE/components/parseCodeVariables.js @@ -212,7 +212,6 @@ function _parseCodeVariables(_cm) { }; lastValidResult = result; - console.log('result=', result); return result; } diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 6cf047f304..d3fcf13555 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -15,7 +15,6 @@ export function handleRename(fromPos, oldName, newName, cm) { const { varScopeMap = {} } = parseCodeVariables(cm) || {}; if (!cm) { - console.warn('CodeMirror instance not provided.'); return; } const ast = getAST(cm); @@ -65,7 +64,6 @@ export function getContext(cm, ast, fromPos, varScopeMap) { }); if (!foundNode) { - console.warn('No identifier found at the selected position.'); return null; } @@ -153,7 +151,6 @@ export function getAST(cm) { }); return ast; } catch (e) { - console.warn('Failed to parse code with Babel:', e.message); return; } } diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 8f5d6879da..716ed4fbbe 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -332,7 +332,6 @@ import warnIfBlacklisted from './warn'; function getInlineHintSuggestion(cm, focus, token) { let tokenLength = token.string.length; - console.log(focus, tokenLength); if (token.string === '.') { tokenLength -= 1; } @@ -369,7 +368,6 @@ import warnIfBlacklisted from './warn'; const cursor = cm.getCursor(); const token = cm.getTokenAt(cursor); - console.log('xx=', token.string.length, token, cursor); if (token && focus.item) { const suggestionHTML = getInlineHintSuggestion(cm, focus, token); diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx index 412300227f..01c088cb1d 100644 --- a/client/modules/IDE/components/showRenameDialog.jsx +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -11,7 +11,7 @@ export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { return; } - openRenameInputDialog(coords, oldName, onSubmit); // ✅ pass callback + openRenameInputDialog(coords, oldName, onSubmit); } function openRenameInputDialog(coords, oldName, onSubmit) { @@ -44,7 +44,6 @@ function openRenameInputDialog(coords, oldName, onSubmit) { function onClickOutside(e) { if (!dialog.contains(e.target)) { cleanup(); - // Cancel — do nothing } } @@ -53,12 +52,11 @@ function openRenameInputDialog(coords, oldName, onSubmit) { const value = input.value.trim(); if (value) { cleanup(); - onSubmit(value); // ✅ rename triggered here - } else { - cleanup(); // no-op for empty + onSubmit(value); + cleanup(); } } else if (e.key === 'Escape') { - cleanup(); // cancel + cleanup(); } }); @@ -66,7 +64,6 @@ function openRenameInputDialog(coords, oldName, onSubmit) { } function isValidIdentifierSelection(selection, tokenType) { - // Reject if empty, multiple words, or includes special characters if (!selection || selection.trim() === '') return false; if ( tokenType === 'comment' || @@ -76,12 +73,7 @@ function isValidIdentifierSelection(selection, tokenType) { ) return false; - // Reject multi-word selections or whitespace if (/\s/.test(selection)) return false; - - // Reject if it's just a punctuation character or not a valid identifier - // Valid JS identifier: starts with letter, _, or $, and only includes those plus digits - // NOTE: This doesn't catch reserved keywords; Babel parsing would be needed for that. return /^[$A-Z_a-z][$\w]*$/.test(selection); } From a7229daa70c574fe467c77e6caae5ba4df83efa0 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Fri, 25 Jul 2025 12:12:47 +0530 Subject: [PATCH 14/28] add descriptive names for files & add a readme for new changes --- README_hinter_and_refactoring_changes.md | 83 +++++++++++++++++++ .../IDE/components/contextAwareHinter.js | 32 +++---- .../{parseCode.js => getContext.js} | 2 +- .../IDE/components/jump-to-definition.js | 26 +++--- ... => p5-instance-methods-and-creators.json} | 0 ...tions.json => p5-reference-functions.json} | 0 ...json => p5-scope-function-access-map.json} | 0 ...eCodeVariables.js => p5CodeAstAnalyzer.js} | 62 +++++++------- .../modules/IDE/components/rename-variable.js | 37 +++------ client/modules/IDE/components/show-hint.js | 6 +- .../IDE/components/showRenameDialog.jsx | 2 +- client/modules/IDE/components/warn.js | 6 +- 12 files changed, 166 insertions(+), 90 deletions(-) create mode 100644 README_hinter_and_refactoring_changes.md rename client/modules/IDE/components/{parseCode.js => getContext.js} (95%) rename client/modules/IDE/components/{class-with-methods-map.json => p5-instance-methods-and-creators.json} (100%) rename client/modules/IDE/components/{listOfAllFunctions.json => p5-reference-functions.json} (100%) rename client/modules/IDE/components/{finalScopeMap.json => p5-scope-function-access-map.json} (100%) rename client/modules/IDE/components/{parseCodeVariables.js => p5CodeAstAnalyzer.js} (77%) diff --git a/README_hinter_and_refactoring_changes.md b/README_hinter_and_refactoring_changes.md new file mode 100644 index 0000000000..688127880e --- /dev/null +++ b/README_hinter_and_refactoring_changes.md @@ -0,0 +1,83 @@ +# GSoC 2025: p5.js Autocomplete Hinter & Refactoring System +This readme elaborates on the core components of the context-aware autocomplete hinter, refactoring utilities, and supporting data structures developed as part of Google Summer of Code 2025. The goal is to enable smart context-aware autocompletion, jump-to-definition, and safe variable renaming. + +# Project Overview + +## Autocomplete Hinter Context-Aware Functionality +The following files and modules work together to make the p5.js autocomplete hinter context-aware: + +### p5CodeAstAnalyzer.js +Purpose: Parses user-written p5.js code using Babel and extracts structural information: + +- Maps variable names to p5 class instances +- Tracks declared variables in each function or global scope +- Detects user-defined functions and their parameters +- Collects info about user-defined classes, constructor-assigned properties, and methods + +Key Output Maps: + +- variableToP5ClassMap: Maps variable names (e.g., col) to their p5.js class type (e.g., p5.Color) +- scopeToDeclaredVarsMap: Maps function names or global scope to variables declared in them +- userDefinedFunctionMetadata: Metadata about custom functions (params, type, etc.) +- userDefinedClassMetadata: Metadata for user-defined classes (methods, constructor properties) + +### context-aware-hinter.js +Purpose: Provides code autocompletion hints based on: + +- Current cursor context (draw, setup, etc.) +- p5CodeAstAnalyzer output +- p5 class method definitions +- Variable/function scope and visibility +- Scope-specific blacklist/whitelist logic + +Features: + +- Dot-autocompletion (e.g., col. shows methods of p5.Color) +- Scope-sensitive variable/function suggestions +- Ranks hints by type and scope relevance + +### getContext.js +Purpose: Get the context of the cursor, i.e. inside what function is the cursor in + +## Context-Aware Renaming Functionality +The following files ensure context-aware renaming when a variable or user-defined function is selected and the F2 button is clicked + +### rename-variable.js +Purpose: Safely renames a variable in the user's code editor by: + +- Analyzing AST to find all matching identifiers +- Ensuring replacement only occurs within the same lexical scope +- Performing in-place replacement using CodeMirror APIs + +### showRenameDialog.jsx +Purpose: Opens either a dialog box to get the new variable name or a temporary box to show that the word selected cannot be renamed + +## Jump to Definition +The following file allows user to jump to the definition for variables or parameters when a word is ctrl-clicked. + +### jumptodefinition.js +Purpose: Implements “jump to definition” for variables or parameters in the editor. + +How It Works: + +- Uses AST + scope map to locate the definition site of a variable +- Supports both VariableDeclarator and FunctionDeclaration/params +- Moves the editor cursor to the source location of the definition + +## Supporting Data Files +### p5-instance-methods-and-creators.json +Purpose: Maps p5.js classes to: + +- Methods used to instantiate them (createMethods) +- Methods available on those instances (methods) + +### p5-scope-function-access-map.json +Purpose: Defines which p5.js functions are allowed or disallowed inside functions like setup, draw, preload, etc. + +### p5-reference-functions.json +Purpose: A flat list of all available p5.js functions. + +Used to: + +- Differentiate between built-in and user-defined functions +- Filter out redefinitions or incorrect hints \ No newline at end of file diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 3093a4cdad..a296295b07 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -1,8 +1,8 @@ -import parseCode from './parseCode'; -import parseCodeVariables from './parseCodeVariables'; -import classMap from './class-with-methods-map.json'; +import getContext from './getContext'; +import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; +import classMap from './p5-instance-methods-and-creators.json'; -const scopeMap = require('./finalScopeMap.json'); +const scopeMap = require('./p5-scope-function-access-map.json'); function getExpressionBeforeCursor(cm) { const cursor = cm.getCursor(); @@ -16,11 +16,11 @@ function getExpressionBeforeCursor(cm) { export default function contextAwareHinter(cm, options = {}) { const { - p5ClassMap = {}, - varScopeMap = {}, - userFuncMap = {}, - userClassMap = {} - } = parseCodeVariables(cm) || {}; + variableToP5ClassMap = {}, + scopeToDeclaredVarsMap = {}, + userDefinedFunctionMetadata = {}, + userDefinedClassMetadata = {} + } = p5CodeAstAnalyzer(cm) || {}; const { hinter } = options; if (!hinter || typeof hinter.search !== 'function') { @@ -30,8 +30,8 @@ export default function contextAwareHinter(cm, options = {}) { const baseExpression = getExpressionBeforeCursor(cm); if (baseExpression) { - const className = p5ClassMap[baseExpression]; - const userClassEntry = Object.values(userClassMap).find( + const className = variableToP5ClassMap[baseExpression]; + const userClassEntry = Object.values(userDefinedClassMetadata).find( (cls) => cls.initializer === baseExpression ); @@ -85,7 +85,7 @@ export default function contextAwareHinter(cm, options = {}) { const { string } = cm.getTokenAt({ line, ch }); const currentWord = string.trim(); - const currentContext = parseCode(cm); + const currentContext = getContext(cm); const allHints = hinter.search(currentWord); // const whitelist = scopeMap[currentContext]?.whitelist || []; @@ -94,7 +94,7 @@ export default function contextAwareHinter(cm, options = {}) { const lowerCurrentWord = currentWord.toLowerCase(); function isInScope(varName) { - return Object.entries(varScopeMap).some( + return Object.entries(scopeToDeclaredVarsMap).some( ([scope, vars]) => vars.has(varName) && (scope === 'global' || scope === currentContext) ); @@ -102,7 +102,7 @@ export default function contextAwareHinter(cm, options = {}) { const allVarNames = Array.from( new Set( - Object.values(varScopeMap) + Object.values(scopeToDeclaredVarsMap) .map((s) => Array.from(s)) .flat() .filter((name) => typeof name === 'string') @@ -115,9 +115,9 @@ export default function contextAwareHinter(cm, options = {}) { varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) ) .map((varName) => { - const isFunc = !!userFuncMap[varName]; + const isFunc = !!userDefinedFunctionMetadata[varName]; const baseItem = isFunc - ? { ...userFuncMap[varName] } + ? { ...userDefinedFunctionMetadata[varName] } : { text: varName, type: 'var', diff --git a/client/modules/IDE/components/parseCode.js b/client/modules/IDE/components/getContext.js similarity index 95% rename from client/modules/IDE/components/parseCode.js rename to client/modules/IDE/components/getContext.js index cb93616d62..beddef71f7 100644 --- a/client/modules/IDE/components/parseCode.js +++ b/client/modules/IDE/components/getContext.js @@ -1,7 +1,7 @@ const parser = require('@babel/parser'); const traverse = require('@babel/traverse').default; -export default function parseCode(_cm) { +export default function getContext(_cm) { const code = _cm.getValue(); const cursor = _cm.getCursor(); const offset = _cm.indexFromPos(cursor); diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index f946b59bc7..70bf9ad0f1 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -1,5 +1,5 @@ /* eslint-disable */ -import parseCodeVariables from './parseCodeVariables'; +import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; import { getAST, getContext } from './rename-variable'; const traverse = require('@babel/traverse').default; @@ -8,21 +8,23 @@ export function jumpToDefinition(pos) { const token = cm.getTokenAt(pos); const tokenType = token.type; - // Only act if it's a variable if (!tokenType || !tokenType.includes('variable')) return; const varName = token.string; - // Get full AST and variable scopes const ast = getAST(cm); - const varScopeMap = parseCodeVariables(cm).varScopeMap || {}; - const context = getContext(cm, ast, pos, varScopeMap); + const scopeToDeclaredVarsMap = + p5CodeAstAnalyzer(cm).scopeToDeclaredVarsMap || {}; + const context = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - if (!context || !varScopeMap[context] || !varScopeMap[context].has(varName)) { + if ( + !context || + !scopeToDeclaredVarsMap[context] || + !scopeToDeclaredVarsMap[context].has(varName) + ) { return; } - // Now find the actual definition location using Babel traverse const targetIndex = cm.indexFromPos(pos); let found = false; @@ -37,7 +39,7 @@ export function jumpToDefinition(pos) { node.loc ) { const defPos = cm.posFromIndex(node.start); - const defContext = getContext(cm, ast, defPos, varScopeMap); + const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); if (defContext === context) { found = true; @@ -48,7 +50,6 @@ export function jumpToDefinition(pos) { }, FunctionDeclaration(path) { - // Handle function parameters like: function foo(x) { x } if (found) return; const { node } = path; @@ -61,7 +62,12 @@ export function jumpToDefinition(pos) { param.loc ) { const defPos = cm.posFromIndex(param.start); - const defContext = getContext(cm, ast, defPos, varScopeMap); + const defContext = getContext( + cm, + ast, + defPos, + scopeToDeclaredVarsMap + ); if (defContext === context) { found = true; diff --git a/client/modules/IDE/components/class-with-methods-map.json b/client/modules/IDE/components/p5-instance-methods-and-creators.json similarity index 100% rename from client/modules/IDE/components/class-with-methods-map.json rename to client/modules/IDE/components/p5-instance-methods-and-creators.json diff --git a/client/modules/IDE/components/listOfAllFunctions.json b/client/modules/IDE/components/p5-reference-functions.json similarity index 100% rename from client/modules/IDE/components/listOfAllFunctions.json rename to client/modules/IDE/components/p5-reference-functions.json diff --git a/client/modules/IDE/components/finalScopeMap.json b/client/modules/IDE/components/p5-scope-function-access-map.json similarity index 100% rename from client/modules/IDE/components/finalScopeMap.json rename to client/modules/IDE/components/p5-scope-function-access-map.json diff --git a/client/modules/IDE/components/parseCodeVariables.js b/client/modules/IDE/components/p5CodeAstAnalyzer.js similarity index 77% rename from client/modules/IDE/components/parseCodeVariables.js rename to client/modules/IDE/components/p5CodeAstAnalyzer.js index 504943d9bb..e46beb320b 100644 --- a/client/modules/IDE/components/parseCodeVariables.js +++ b/client/modules/IDE/components/p5CodeAstAnalyzer.js @@ -1,12 +1,12 @@ /* eslint-disable */ import { debounce } from 'lodash'; import * as eslintScope from 'eslint-scope'; -import classMap from './class-with-methods-map.json'; +import classMap from './p5-instance-methods-and-creators.json'; const parser = require('@babel/parser'); const traverse = require('@babel/traverse').default; -const allFuncs = require('./listOfAllFunctions.json'); +const allFuncs = require('./p5-reference-functions.json'); const allFunsList = new Set(allFuncs.functions.list); const functionToClass = {}; @@ -19,13 +19,13 @@ Object.entries(classMap).forEach(([className, classData]) => { // Cache to store last valid result let lastValidResult = { - p5ClassMap: {}, - varScopeMap: {}, - userFuncMap: {}, - userClassMap: {} + variableToP5ClassMap: {}, + scopeToDeclaredVarsMap: {}, + userDefinedFunctionMetadata: {}, + userDefinedClassMetadata: {} }; -function _parseCodeVariables(_cm) { +function _p5CodeAstAnalyzer(_cm) { const code = _cm.getValue(); let ast; @@ -40,10 +40,10 @@ function _parseCodeVariables(_cm) { return lastValidResult; } - const p5ClassMap = {}; - const varScopeMap = {}; - const userFuncMap = {}; - const userClassMap = {}; + const variableToP5ClassMap = {}; + const scopeToDeclaredVarsMap = {}; + const userDefinedFunctionMetadata = {}; + const userDefinedClassMetadata = {}; const scopeManager = eslintScope.analyze(ast, { ecmaVersion: 2020, @@ -62,11 +62,11 @@ function _parseCodeVariables(_cm) { def.type === 'Variable' || (def.type === 'FunctionName' && !allFunsList.has(def.name.name)) ) { - if (!varScopeMap[scopeName]) { - varScopeMap[scopeName] = new Set(); + if (!scopeToDeclaredVarsMap[scopeName]) { + scopeToDeclaredVarsMap[scopeName] = new Set(); } - varScopeMap[scopeName].add(def.name.name); + scopeToDeclaredVarsMap[scopeName].add(def.name.name); } }); }); @@ -109,7 +109,7 @@ function _parseCodeVariables(_cm) { } }); - userClassMap[className] = { + userDefinedClassMetadata[className] = { const: Array.from(classInfo.const), methods: classInfo.methods, initializer: '' @@ -129,11 +129,11 @@ function _parseCodeVariables(_cm) { const fnName = node.right.callee.name; const cls = functionToClass[fnName]; - const userCls = userClassMap[fnName]; + const userCls = userDefinedClassMetadata[fnName]; if (userCls) { - userClassMap[fnName].initializer = varName; + userDefinedClassMetadata[fnName].initializer = varName; } else if (cls) { - p5ClassMap[varName] = cls; + variableToP5ClassMap[varName] = cls; } } }, @@ -149,11 +149,11 @@ function _parseCodeVariables(_cm) { const varName = node.id.name; const fnName = node.init.callee.name; const cls = functionToClass[fnName]; - const userCls = userClassMap[fnName]; + const userCls = userDefinedClassMetadata[fnName]; if (userCls) { - userClassMap[fnName].initializer = varName; + userDefinedClassMetadata[fnName].initializer = varName; } else if (cls) { - p5ClassMap[varName] = cls; + variableToP5ClassMap[varName] = cls; } } }, @@ -183,20 +183,20 @@ function _parseCodeVariables(_cm) { .filter(Boolean); // Store function metadata for hinting - userFuncMap[fnName] = { + userDefinedFunctionMetadata[fnName] = { text: fnName, type: 'fun', p5: false, params }; - // Store function params in the varScopeMap - if (!varScopeMap[fnName]) { - varScopeMap[fnName] = new Set(); + // Store function params in the scopeToDeclaredVarsMap + if (!scopeToDeclaredVarsMap[fnName]) { + scopeToDeclaredVarsMap[fnName] = new Set(); } params.forEach((paramObj) => { if (paramObj && paramObj.p) { - varScopeMap[fnName].add(paramObj.p); + scopeToDeclaredVarsMap[fnName].add(paramObj.p); } }); } @@ -205,10 +205,10 @@ function _parseCodeVariables(_cm) { }); const result = { - p5ClassMap, - varScopeMap, - userFuncMap, - userClassMap + variableToP5ClassMap, + scopeToDeclaredVarsMap, + userDefinedFunctionMetadata, + userDefinedClassMetadata }; lastValidResult = result; @@ -216,7 +216,7 @@ function _parseCodeVariables(_cm) { } // Export a debounced version -export default debounce(_parseCodeVariables, 200, { +export default debounce(_p5CodeAstAnalyzer, 200, { leading: true, trailing: true, maxWait: 300 diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index d3fcf13555..50f8cdb134 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -1,5 +1,5 @@ /* eslint-disable */ -import parseCodeVariables from './parseCodeVariables'; +import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; const parser = require('@babel/parser'); const traverse = require('@babel/traverse').default; @@ -12,19 +12,19 @@ function SearchState(oldName) { } export function handleRename(fromPos, oldName, newName, cm) { - const { varScopeMap = {} } = parseCodeVariables(cm) || {}; + const { scopeToDeclaredVarsMap = {} } = p5CodeAstAnalyzer(cm) || {}; if (!cm) { return; } const ast = getAST(cm); - const context = getContext(cm, ast, fromPos, varScopeMap); + const context = getContext(cm, ast, fromPos, scopeToDeclaredVarsMap); startRenaming(cm, ast, fromPos, newName, oldName); const state = getRenameSearchState(cm, oldName); const matches = getMatches(cm, state, state.query); } -export function getContext(cm, ast, fromPos, varScopeMap) { +export function getContext(cm, ast, fromPos, scopeToDeclaredVarsMap) { const posIndex = cm.indexFromPos(fromPos); let foundNode = null; let enclosingFunction = null; @@ -37,11 +37,8 @@ export function getContext(cm, ast, fromPos, varScopeMap) { const start = node.start; const end = node.end; - // If position is inside this node if (start <= posIndex && posIndex <= end) { - // Check if it's an identifier if (node.type === 'Identifier' && node.name) { - // Assign only if not assigned yet or if it's more specific if ( !foundNode || (node.start >= foundNode.start && node.end <= foundNode.end) @@ -50,7 +47,6 @@ export function getContext(cm, ast, fromPos, varScopeMap) { } } - // Capture the enclosing function name if ( (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression') && @@ -69,26 +65,25 @@ export function getContext(cm, ast, fromPos, varScopeMap) { const varName = foundNode.name; - // Now check varScopeMap to determine scope - const contextCandidates = Object.entries(varScopeMap) + const contextCandidates = Object.entries(scopeToDeclaredVarsMap) .filter(([context, vars]) => vars.has(varName)) .map(([context]) => context); - // Priority logic if (contextCandidates.includes(enclosingFunction)) { - return enclosingFunction; // local + return enclosingFunction; } else if (contextCandidates.includes('global')) { - return 'global'; // global fallback + return 'global'; } else { - return enclosingFunction || 'global'; // fallback + return enclosingFunction || 'global'; } } function startRenaming(cm, ast, fromPos, newName, oldName) { const code = cm.getValue(); const fromIndex = cm.indexFromPos(fromPos); - const varScopeMap = parseCodeVariables(cm).varScopeMap || {}; - const baseContext = getContext(cm, ast, fromPos, varScopeMap); + const scopeToDeclaredVarsMap = + p5CodeAstAnalyzer(cm).scopeToDeclaredVarsMap || {}; + const baseContext = getContext(cm, ast, fromPos, scopeToDeclaredVarsMap); const replacements = []; @@ -100,12 +95,10 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { const startIndex = node.start; const endIndex = node.end; - // Check it's the same variable name if (node.name !== oldName) return; const pos = cm.posFromIndex(startIndex); - // Skip property keys and non-variable references if ( parent.type === 'MemberExpression' && parent.property === node && @@ -113,10 +106,8 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { ) return; - // Use the same getContext to figure out *this* node's context - const thisContext = getContext(cm, ast, pos, varScopeMap); + const thisContext = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - // Only allow rename if the context matches the original context if (thisContext === baseContext) { replacements.push({ from: cm.posFromIndex(startIndex), @@ -126,7 +117,6 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { } }); - // Sort replacements in reverse order to avoid messing up the text positions replacements.sort( (a, b) => cm.indexFromPos(b.from) - cm.indexFromPos(a.from) ); @@ -147,7 +137,7 @@ export function getAST(cm) { try { ast = parser.parse(code, { sourceType: 'script', - plugins: ['jsx', 'typescript'] // add plugins as needed + plugins: ['jsx', 'typescript'] }); return ast; } catch (e) { @@ -179,7 +169,6 @@ function getRenameSearchState(cm, oldName) { } function getSearchCursor(cm, query, pos) { - // Heuristic: if the query string is all lowercase, do a case insensitive search. return cm.getSearchCursor( query, pos, diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 716ed4fbbe..6e8b8cb2c7 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -9,7 +9,7 @@ // The first function (mod) is a wrapper to support different JavaScript environments. // The second function (inside) contains the actual implementation. -import parseCode from './parseCode'; +import getContext from './getContext'; import CodeMirror from 'codemirror'; import warnIfBlacklisted from './warn'; @@ -38,7 +38,7 @@ import warnIfBlacklisted from './warn'; if (options && options.async) getHints.async = true; var newOpts = { hint: getHints }; if (options) for (var prop in options) newOpts[prop] = options[prop]; - const context = parseCode(cm); + const context = getContext(cm); return cm.showHint(newOpts); }; @@ -132,8 +132,6 @@ import warnIfBlacklisted from './warn'; self = this; this.cm.operation(function () { - // this is how cm allows custom behavior per suggestion - // if hint is provided on a hint object, it will be called instead of the default replace range const name = completion.item?.text; if (name) warnIfBlacklisted(self.cm, name); diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx index 01c088cb1d..87d1ae4e3b 100644 --- a/client/modules/IDE/components/showRenameDialog.jsx +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -1,5 +1,5 @@ /* eslint-disable */ -const allFuncs = require('./listOfAllFunctions.json'); +const allFuncs = require('./p5-reference-functions.json'); const allFunsList = new Set(allFuncs.functions.list); export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { diff --git a/client/modules/IDE/components/warn.js b/client/modules/IDE/components/warn.js index 4e377b616e..201485b227 100644 --- a/client/modules/IDE/components/warn.js +++ b/client/modules/IDE/components/warn.js @@ -1,6 +1,6 @@ -import parseCode from './parseCode'; +import getContext from './getContext'; -const scopeMap = require('./finalScopeMap.json'); +const scopeMap = require('./p5-scope-function-access-map.json'); /** * Checks if a completion is blacklisted in the current context and logs a warning if so. @@ -8,7 +8,7 @@ const scopeMap = require('./finalScopeMap.json'); * @param {string} text - The name of the selected function */ export default function warnIfBlacklisted(cm, text) { - const context = parseCode(cm); + const context = getContext(cm); const blacklist = scopeMap[context]?.blacklist || []; const isBlacklisted = blacklist.includes(text); From f30b884d5759cb9c51e1caf70c1bd0114e7c46fa Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Mon, 28 Jul 2025 13:21:41 +0530 Subject: [PATCH 15/28] fix autocomplete and renaming behavior for same var and func name --- .../IDE/components/contextAwareHinter.js | 10 ++++-- .../IDE/components/jump-to-definition.js | 31 ++++++++++++------- .../IDE/components/p5CodeAstAnalyzer.js | 11 +++---- .../modules/IDE/components/rename-variable.js | 7 +++-- 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index a296295b07..5f271290c7 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -96,14 +96,14 @@ export default function contextAwareHinter(cm, options = {}) { function isInScope(varName) { return Object.entries(scopeToDeclaredVarsMap).some( ([scope, vars]) => - vars.has(varName) && (scope === 'global' || scope === currentContext) + varName in vars && (scope === 'global' || scope === currentContext) ); } const allVarNames = Array.from( new Set( Object.values(scopeToDeclaredVarsMap) - .map((s) => Array.from(s)) + .map((s) => Object.keys(s)) .flat() .filter((name) => typeof name === 'string') ) @@ -115,7 +115,11 @@ export default function contextAwareHinter(cm, options = {}) { varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) ) .map((varName) => { - const isFunc = !!userDefinedFunctionMetadata[varName]; + const isFunc = Object.entries(scopeToDeclaredVarsMap).some( + ([s, vars]) => + (s === 'global' || s === currentContext) && vars[varName] === 'fun' + ); + const baseItem = isFunc ? { ...userDefinedFunctionMetadata[varName] } : { diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index 70bf9ad0f1..cd43d4c0f2 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -8,22 +8,25 @@ export function jumpToDefinition(pos) { const token = cm.getTokenAt(pos); const tokenType = token.type; - if (!tokenType || !tokenType.includes('variable')) return; + if (!tokenType || !['variable', 'def'].some((t) => tokenType.includes(t))) + return; const varName = token.string; const ast = getAST(cm); - const scopeToDeclaredVarsMap = - p5CodeAstAnalyzer(cm).scopeToDeclaredVarsMap || {}; + const { scopeToDeclaredVarsMap = {}, userDefinedFunctionMetadata = {} } = + p5CodeAstAnalyzer(cm) || {}; + const context = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - if ( - !context || - !scopeToDeclaredVarsMap[context] || - !scopeToDeclaredVarsMap[context].has(varName) - ) { - return; - } + // If not found in scope and not a user-defined function, abort + const isUserFunction = !!userDefinedFunctionMetadata[varName]; + const isDeclaredVar = + context && + scopeToDeclaredVarsMap[context] && + varName in scopeToDeclaredVarsMap[context]; + + if (!isDeclaredVar && !isUserFunction) return; const targetIndex = cm.indexFromPos(pos); let found = false; @@ -53,8 +56,14 @@ export function jumpToDefinition(pos) { if (found) return; const { node } = path; - if (!node.params || !node.loc) return; + if (node.id?.type === 'Identifier' && node.id.name === varName) { + const defPos = cm.posFromIndex(node.start); + found = true; + cm.setCursor(defPos); + cm.focus(); + } + if (!node.params || !node.loc) return; for (const param of node.params) { if ( param.type === 'Identifier' && diff --git a/client/modules/IDE/components/p5CodeAstAnalyzer.js b/client/modules/IDE/components/p5CodeAstAnalyzer.js index e46beb320b..a268a361a8 100644 --- a/client/modules/IDE/components/p5CodeAstAnalyzer.js +++ b/client/modules/IDE/components/p5CodeAstAnalyzer.js @@ -63,10 +63,10 @@ function _p5CodeAstAnalyzer(_cm) { (def.type === 'FunctionName' && !allFunsList.has(def.name.name)) ) { if (!scopeToDeclaredVarsMap[scopeName]) { - scopeToDeclaredVarsMap[scopeName] = new Set(); + scopeToDeclaredVarsMap[scopeName] = {}; } - - scopeToDeclaredVarsMap[scopeName].add(def.name.name); + const defType = def.type === 'FunctionName' ? 'fun' : 'var'; + scopeToDeclaredVarsMap[scopeName][def.name.name] = defType; } }); }); @@ -190,13 +190,12 @@ function _p5CodeAstAnalyzer(_cm) { params }; - // Store function params in the scopeToDeclaredVarsMap if (!scopeToDeclaredVarsMap[fnName]) { - scopeToDeclaredVarsMap[fnName] = new Set(); + scopeToDeclaredVarsMap[fnName] = {}; } params.forEach((paramObj) => { if (paramObj && paramObj.p) { - scopeToDeclaredVarsMap[fnName].add(paramObj.p); + scopeToDeclaredVarsMap[fnName][paramObj.p] = 'param'; } }); } diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 50f8cdb134..87ef2a6120 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -19,9 +19,9 @@ export function handleRename(fromPos, oldName, newName, cm) { } const ast = getAST(cm); const context = getContext(cm, ast, fromPos, scopeToDeclaredVarsMap); + // const state = getRenameSearchState(cm, oldName); + // const matches = getMatches(cm, state, state.query); startRenaming(cm, ast, fromPos, newName, oldName); - const state = getRenameSearchState(cm, oldName); - const matches = getMatches(cm, state, state.query); } export function getContext(cm, ast, fromPos, scopeToDeclaredVarsMap) { @@ -66,7 +66,7 @@ export function getContext(cm, ast, fromPos, scopeToDeclaredVarsMap) { const varName = foundNode.name; const contextCandidates = Object.entries(scopeToDeclaredVarsMap) - .filter(([context, vars]) => vars.has(varName)) + .filter(([context, vars]) => varName in vars) .map(([context]) => context); if (contextCandidates.includes(enclosingFunction)) { @@ -161,6 +161,7 @@ function getMatches(cm, state, query) { ); } var matches = cm.state.search.annotate.matches; + console.log('match=', cm.state.search); return matches; } From 01454d08d68690018c89a802f3f91445da41c744 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Tue, 29 Jul 2025 12:41:49 +0530 Subject: [PATCH 16/28] fix autocomplete suggestions behavior for same function and variable name in different scopes --- client/modules/IDE/components/contextAwareHinter.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 5f271290c7..4ee6399630 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -1,3 +1,4 @@ +/* eslint-disable */ import getContext from './getContext'; import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; import classMap from './p5-instance-methods-and-creators.json'; @@ -115,10 +116,14 @@ export default function contextAwareHinter(cm, options = {}) { varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) ) .map((varName) => { - const isFunc = Object.entries(scopeToDeclaredVarsMap).some( - ([s, vars]) => - (s === 'global' || s === currentContext) && vars[varName] === 'fun' - ); + const isFunc = (() => { + const inCurrentScope = + scopeToDeclaredVarsMap[currentContext]?.[varName]; + const inGlobalScope = scopeToDeclaredVarsMap['global']?.[varName]; + + if (inCurrentScope && inCurrentScope !== 'fun') return false; + return inGlobalScope === 'fun'; + })(); const baseItem = isFunc ? { ...userDefinedFunctionMetadata[varName] } From a67e89d05bc77a46c013bac65b0059cfeb2d14c3 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Tue, 29 Jul 2025 13:09:55 +0530 Subject: [PATCH 17/28] fix renaming behavior with same function name in different contexts --- .../modules/IDE/components/rename-variable.js | 98 +++++-------------- 1 file changed, 27 insertions(+), 71 deletions(-) diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 87ef2a6120..39fdfa4116 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -18,64 +18,48 @@ export function handleRename(fromPos, oldName, newName, cm) { return; } const ast = getAST(cm); - const context = getContext(cm, ast, fromPos, scopeToDeclaredVarsMap); - // const state = getRenameSearchState(cm, oldName); - // const matches = getMatches(cm, state, state.query); startRenaming(cm, ast, fromPos, newName, oldName); } export function getContext(cm, ast, fromPos, scopeToDeclaredVarsMap) { - const posIndex = cm.indexFromPos(fromPos); - let foundNode = null; - let enclosingFunction = null; + const offset = cm.indexFromPos(fromPos); + let context = 'global'; traverse(ast, { enter(path) { const { node } = path; + if (!node.loc) return; - const start = node.start; - const end = node.end; + if (offset < node.start || offset > node.end) return; - if (start <= posIndex && posIndex <= end) { - if (node.type === 'Identifier' && node.name) { + if ( + (node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression') && + node.body && + offset >= node.body.start && + offset <= node.body.end + ) { + if (node.id?.name) { + context = node.id.name; + } else { + const parent = path.parentPath?.node; if ( - !foundNode || - (node.start >= foundNode.start && node.end <= foundNode.end) + parent?.type === 'VariableDeclarator' && + parent.id?.type === 'Identifier' ) { - foundNode = node; + context = parent.id.name; + } else { + context = '(anonymous)'; } } - if ( - (node.type === 'FunctionDeclaration' || - node.type === 'FunctionExpression') && - node.id && - node.id.name - ) { - enclosingFunction = node.id.name; - } + path.skip(); } } }); - if (!foundNode) { - return null; - } - - const varName = foundNode.name; - - const contextCandidates = Object.entries(scopeToDeclaredVarsMap) - .filter(([context, vars]) => varName in vars) - .map(([context]) => context); - - if (contextCandidates.includes(enclosingFunction)) { - return enclosingFunction; - } else if (contextCandidates.includes('global')) { - return 'global'; - } else { - return enclosingFunction || 'global'; - } + return context; } function startRenaming(cm, ast, fromPos, newName, oldName) { @@ -108,7 +92,11 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { const thisContext = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - if (thisContext === baseContext) { + const shadowed = + thisContext !== baseContext && + scopeToDeclaredVarsMap[thisContext]?.hasOwnProperty(oldName); + + if (thisContext === baseContext || !shadowed) { replacements.push({ from: cm.posFromIndex(startIndex), to: cm.posFromIndex(endIndex) @@ -144,35 +132,3 @@ export function getAST(cm) { return; } } - -function getMatches(cm, state, query) { - state.queryText = query; - - var cursor = getSearchCursor(cm, state.query); - cursor.findNext(); - if (cm.showMatchesOnScrollbar) { - if (state.annotate) { - state.annotate.clear(); - state.annotate = null; - } - state.annotate = cm.showMatchesOnScrollbar( - state.query, - state.caseInsensitive - ); - } - var matches = cm.state.search.annotate.matches; - console.log('match=', cm.state.search); - return matches; -} - -function getRenameSearchState(cm, oldName) { - return cm.state.search || (cm.state.search = new SearchState(oldName)); -} - -function getSearchCursor(cm, query, pos) { - return cm.getSearchCursor( - query, - pos, - getRenameSearchState(cm).caseInsensitive - ); -} From ce4ae68c29f6f40c8b48958c2f48a5ad048b358a Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Wed, 30 Jul 2025 11:59:47 +0530 Subject: [PATCH 18/28] fix logic for correct behavior of jump to definition with same function name in different contexts --- .../IDE/components/jump-to-definition.js | 93 +++++++++++++------ .../IDE/components/showRenameDialog.jsx | 2 +- 2 files changed, 67 insertions(+), 28 deletions(-) diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index cd43d4c0f2..d093369977 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -12,23 +12,40 @@ export function jumpToDefinition(pos) { return; const varName = token.string; - const ast = getAST(cm); const { scopeToDeclaredVarsMap = {}, userDefinedFunctionMetadata = {} } = p5CodeAstAnalyzer(cm) || {}; - const context = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - - // If not found in scope and not a user-defined function, abort + const currentContext = getContext(cm, ast, pos, scopeToDeclaredVarsMap); const isUserFunction = !!userDefinedFunctionMetadata[varName]; const isDeclaredVar = - context && - scopeToDeclaredVarsMap[context] && - varName in scopeToDeclaredVarsMap[context]; + scopeToDeclaredVarsMap[currentContext]?.[varName] !== undefined; + + let isAtDeclaration = false; + + traverse(ast, { + VariableDeclarator(path) { + if ( + path.node.id.name === varName && + path.node.start === cm.indexFromPos(pos) + ) { + isAtDeclaration = true; + path.stop(); + } + }, + FunctionDeclaration(path) { + if ( + path.node.id?.name === varName && + path.node.start === cm.indexFromPos(pos) + ) { + isAtDeclaration = true; + path.stop(); + } + } + }); - if (!isDeclaredVar && !isUserFunction) return; + if (isAtDeclaration) return; - const targetIndex = cm.indexFromPos(pos); let found = false; traverse(ast, { @@ -36,15 +53,10 @@ export function jumpToDefinition(pos) { if (found) return; const { node } = path; - if ( - node.id.type === 'Identifier' && - node.id.name === varName && - node.loc - ) { + if (node.id.name === varName && node.loc) { const defPos = cm.posFromIndex(node.start); const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); - - if (defContext === context) { + if (defContext === currentContext) { found = true; cm.setCursor(defPos); cm.focus(); @@ -56,20 +68,20 @@ export function jumpToDefinition(pos) { if (found) return; const { node } = path; - if (node.id?.type === 'Identifier' && node.id.name === varName) { + + if (node.id?.name === varName) { const defPos = cm.posFromIndex(node.start); - found = true; - cm.setCursor(defPos); - cm.focus(); + const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); + if (defContext === currentContext) { + found = true; + cm.setCursor(defPos); + cm.focus(); + } } if (!node.params || !node.loc) return; for (const param of node.params) { - if ( - param.type === 'Identifier' && - param.name === varName && - param.loc - ) { + if (param.name === varName && param.loc) { const defPos = cm.posFromIndex(param.start); const defContext = getContext( cm, @@ -77,8 +89,7 @@ export function jumpToDefinition(pos) { defPos, scopeToDeclaredVarsMap ); - - if (defContext === context) { + if (defContext === currentContext) { found = true; cm.setCursor(defPos); cm.focus(); @@ -87,4 +98,32 @@ export function jumpToDefinition(pos) { } } }); + + if (!found) { + traverse(ast, { + VariableDeclarator(path) { + if (found) return; + + const { node } = path; + if (node.id.name === varName && node.loc) { + const defPos = cm.posFromIndex(node.start); + found = true; + cm.setCursor(defPos); + cm.focus(); + } + }, + + FunctionDeclaration(path) { + if (found) return; + + const { node } = path; + if (node.id?.name === varName) { + const defPos = cm.posFromIndex(node.start); + found = true; + cm.setCursor(defPos); + cm.focus(); + } + } + }); + } } diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx index 87d1ae4e3b..6a4e0b4928 100644 --- a/client/modules/IDE/components/showRenameDialog.jsx +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -4,7 +4,7 @@ const allFunsList = new Set(allFuncs.functions.list); export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { if ( - allFunsList.has(oldName) || + (allFunsList.has(oldName) && tokenType !== 'p5-variable') || !isValidIdentifierSelection(oldName, tokenType) ) { showTemporaryDialog(coords, 'You cannot rename this element'); From 2415953f56465cd01a3f18945e418d1ddb414f32 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sat, 9 Aug 2025 10:57:48 +0530 Subject: [PATCH 19/28] fix renaming behavior --- .../modules/IDE/components/rename-variable.js | 25 ++++++++++++++++--- client/modules/IDE/components/show-hint.js | 3 --- client/modules/IDE/components/warn.js | 21 ---------------- 3 files changed, 21 insertions(+), 28 deletions(-) delete mode 100644 client/modules/IDE/components/warn.js diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 39fdfa4116..04e3a0e409 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -1,4 +1,5 @@ /* eslint-disable */ +import { includes } from 'lodash'; import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; const parser = require('@babel/parser'); const traverse = require('@babel/traverse').default; @@ -92,11 +93,27 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { const thisContext = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - const shadowed = - thisContext !== baseContext && - scopeToDeclaredVarsMap[thisContext]?.hasOwnProperty(oldName); + const thisScopeVars = scopeToDeclaredVarsMap[thisContext] || {}; + const baseScopeVars = scopeToDeclaredVarsMap[baseContext] || {}; + const globalScopeVars = scopeToDeclaredVarsMap['global'] || {}; - if (thisContext === baseContext || !shadowed) { + const isInBaseScope = thisContext === baseContext; + const isShadowedLocally = + !isInBaseScope && thisScopeVars.hasOwnProperty(oldName); + const isDeclaredInBaseScope = baseScopeVars.hasOwnProperty(oldName); + const isDeclaredGlobally = globalScopeVars.hasOwnProperty(oldName); + + const shouldRename = + isInBaseScope || + (!isShadowedLocally && + thisScopeVars.hasOwnProperty(oldName) === {} && + baseContext === 'global') || + (baseContext === 'global' && !thisScopeVars.hasOwnProperty(oldName)); + + const shouldRenameGlobalVar = + thisContext === 'global' && !isDeclaredInBaseScope; + + if (shouldRename || shouldRenameGlobalVar) { replacements.push({ from: cm.posFromIndex(startIndex), to: cm.posFromIndex(endIndex) diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 6e8b8cb2c7..6f2e323cd3 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -11,7 +11,6 @@ // The second function (inside) contains the actual implementation. import getContext from './getContext'; import CodeMirror from 'codemirror'; -import warnIfBlacklisted from './warn'; (function (mod) { if (typeof exports == 'object' && typeof module == 'object') @@ -133,7 +132,6 @@ import warnIfBlacklisted from './warn'; this.cm.operation(function () { const name = completion.item?.text; - if (name) warnIfBlacklisted(self.cm, name); if (completion.hint) { completion.hint(self.cm, data, completion); @@ -334,7 +332,6 @@ import warnIfBlacklisted from './warn'; tokenLength -= 1; } const name = focus.item?.text; - if (name) warnIfBlacklisted(cm, name); const suggestionItem = focus.item; // builds the remainder of the suggestion excluding what user already typed const baseCompletion = `${suggestionItem.text.slice( diff --git a/client/modules/IDE/components/warn.js b/client/modules/IDE/components/warn.js deleted file mode 100644 index 201485b227..0000000000 --- a/client/modules/IDE/components/warn.js +++ /dev/null @@ -1,21 +0,0 @@ -import getContext from './getContext'; - -const scopeMap = require('./p5-scope-function-access-map.json'); - -/** - * Checks if a completion is blacklisted in the current context and logs a warning if so. - * @param {CodeMirror.Editor} cm - The CodeMirror instance - * @param {string} text - The name of the selected function - */ -export default function warnIfBlacklisted(cm, text) { - const context = getContext(cm); - const blacklist = scopeMap[context]?.blacklist || []; - - const isBlacklisted = blacklist.includes(text); - if (isBlacklisted) { - console.warn( - `⚠️ Function "${text}" is usually not used in "${context}" context. Please be careful.` - ); - } - return isBlacklisted; -} From 17791457056de27d59df301e0e80fd7278a910c1 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sat, 9 Aug 2025 11:45:58 +0530 Subject: [PATCH 20/28] implement screen reader behavior for context aware renaming and jump to definition --- .../modules/IDE/components/Editor/index.jsx | 2 ++ .../IDE/components/jump-to-definition.js | 34 ++++++++++++++++++- .../IDE/components/showRenameDialog.jsx | 7 ++++ .../modules/IDE/utils/ScreenReaderHelper.jsx | 27 +++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 client/modules/IDE/utils/ScreenReaderHelper.jsx diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 45d3289054..ace7b3f7f7 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -77,6 +77,7 @@ import contextAwareHinter from '../contextAwareHinter'; import showRenameDialog from '../showRenameDialog'; import { handleRename } from '../rename-variable'; import { jumpToDefinition } from '../jump-to-definition'; +import { ensureAriaLiveRegion } from '../../utils/ScreenReaderHelper'; emmet(CodeMirror); @@ -114,6 +115,7 @@ class Editor extends React.Component { componentDidMount() { this.beep = new Audio(beepUrl); + ensureAriaLiveRegion(); // this.widgets = []; this._cm = CodeMirror(this.codemirrorContainer, { theme: `p5-${this.props.theme}`, diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index d093369977..ab8f9dcca4 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -1,6 +1,7 @@ /* eslint-disable */ import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; import { getAST, getContext } from './rename-variable'; +import announceToScreenReader from '../utils/ScreenReaderHelper'; const traverse = require('@babel/traverse').default; export function jumpToDefinition(pos) { @@ -44,7 +45,10 @@ export function jumpToDefinition(pos) { } }); - if (isAtDeclaration) return; + if (isAtDeclaration) { + announceToScreenReader(`Already at definition of ${varName}`); + return; + } let found = false; @@ -60,6 +64,11 @@ export function jumpToDefinition(pos) { found = true; cm.setCursor(defPos); cm.focus(); + announceToScreenReader( + `Jumped from line ${pos.line + 1} to line ${ + defPos.line + 1 + } at definition of ${varName}` + ); } } }, @@ -76,6 +85,11 @@ export function jumpToDefinition(pos) { found = true; cm.setCursor(defPos); cm.focus(); + announceToScreenReader( + `Jumped from line ${pos.line + 1} to line ${ + defPos.line + 1 + } at definition of ${varName}` + ); } } @@ -93,6 +107,11 @@ export function jumpToDefinition(pos) { found = true; cm.setCursor(defPos); cm.focus(); + announceToScreenReader( + `Jumped from line ${pos.line + 1} to line ${ + defPos.line + 1 + } at definition of ${varName}` + ); } } } @@ -110,6 +129,11 @@ export function jumpToDefinition(pos) { found = true; cm.setCursor(defPos); cm.focus(); + announceToScreenReader( + `Jumped from line ${pos.line + 1} to line ${ + defPos.line + 1 + } at definition of ${varName}` + ); } }, @@ -122,8 +146,16 @@ export function jumpToDefinition(pos) { found = true; cm.setCursor(defPos); cm.focus(); + announceToScreenReader( + `Jumped from line ${pos.line + 1} to line ${ + defPos.line + 1 + } at definition of ${varName}` + ); } } }); } + if (!found) { + announceToScreenReader(`No definition found for ${varName}`, true); + } } diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx index 6a4e0b4928..5490ee4c97 100644 --- a/client/modules/IDE/components/showRenameDialog.jsx +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -1,4 +1,5 @@ /* eslint-disable */ +import announceToScreenReader from '../utils/ScreenReaderHelper'; const allFuncs = require('./p5-reference-functions.json'); const allFunsList = new Set(allFuncs.functions.list); @@ -8,6 +9,7 @@ export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { !isValidIdentifierSelection(oldName, tokenType) ) { showTemporaryDialog(coords, 'You cannot rename this element'); + announceToScreenReader(`The word ${oldName} cannot be renamed`, true); return; } @@ -36,6 +38,8 @@ function openRenameInputDialog(coords, oldName, onSubmit) { document.body.appendChild(dialog); input.focus(); + announceToScreenReader(`Renaming dialog box opened with word ${oldName}`); + function cleanup() { dialog.remove(); document.removeEventListener('mousedown', onClickOutside); @@ -53,6 +57,9 @@ function openRenameInputDialog(coords, oldName, onSubmit) { if (value) { cleanup(); onSubmit(value); + announceToScreenReader( + `Renaming done from word ${oldName} to ${value}` + ); cleanup(); } } else if (e.key === 'Escape') { diff --git a/client/modules/IDE/utils/ScreenReaderHelper.jsx b/client/modules/IDE/utils/ScreenReaderHelper.jsx new file mode 100644 index 0000000000..c9660e6f34 --- /dev/null +++ b/client/modules/IDE/utils/ScreenReaderHelper.jsx @@ -0,0 +1,27 @@ +export default function announceToScreenReader(message, assertive = false) { + const liveRegion = document.getElementById('rename-aria-live'); + if (!liveRegion) return; + + // liveRegion.setAttribute('aria-live', assertive ? 'assertive' : 'polite'); + liveRegion.setAttribute('aria-live', 'assertive'); + + // Clear first to ensure repeated messages are read + liveRegion.textContent = ''; + setTimeout(() => { + liveRegion.textContent = message; + }, 50); +} + +export function ensureAriaLiveRegion() { + if (!document.getElementById('rename-aria-live')) { + const liveRegion = document.createElement('div'); + liveRegion.id = 'rename-aria-live'; + liveRegion.setAttribute('aria-live', 'assertive'); + liveRegion.setAttribute('role', 'status'); + liveRegion.style.position = 'absolute'; + liveRegion.style.left = '-9999px'; + liveRegion.style.height = '1px'; + liveRegion.style.overflow = 'hidden'; + document.body.appendChild(liveRegion); + } +} From c50566f5df2dea84b0e7260fcc04be56de5208d2 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sun, 10 Aug 2025 11:03:15 +0530 Subject: [PATCH 21/28] fix local renaming bug --- client/modules/IDE/components/jump-to-definition.js | 3 +-- client/modules/IDE/components/rename-variable.js | 5 ++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index ab8f9dcca4..c79da0d926 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -9,8 +9,7 @@ export function jumpToDefinition(pos) { const token = cm.getTokenAt(pos); const tokenType = token.type; - if (!tokenType || !['variable', 'def'].some((t) => tokenType.includes(t))) - return; + if (!tokenType || tokenType === 'def') return; const varName = token.string; const ast = getAST(cm); diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 04e3a0e409..c967ca083c 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -108,7 +108,10 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { (!isShadowedLocally && thisScopeVars.hasOwnProperty(oldName) === {} && baseContext === 'global') || - (baseContext === 'global' && !thisScopeVars.hasOwnProperty(oldName)); + (baseContext === 'global' && !thisScopeVars.hasOwnProperty(oldName)) || + (isDeclaredGlobally && + !thisScopeVars.hasOwnProperty(oldName) && + !isDeclaredInBaseScope); const shouldRenameGlobalVar = thisContext === 'global' && !isDeclaredInBaseScope; From 0665cc60a69a4e841024598c6c6d123683cb18f3 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Mon, 11 Aug 2025 11:39:27 +0530 Subject: [PATCH 22/28] add jump to definition from one file to another file --- client/index.jsx | 2 + .../IDE/components/jump-to-definition.js | 93 +++++++++++++++++++ client/modules/IDE/selectors/files.js | 2 +- 3 files changed, 96 insertions(+), 1 deletion(-) diff --git a/client/index.jsx b/client/index.jsx index 27befe8421..9ccbea80c1 100644 --- a/client/index.jsx +++ b/client/index.jsx @@ -53,3 +53,5 @@ render( , document.getElementById('root') ); + +export default store; diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index c79da0d926..63fca526e8 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -1,10 +1,72 @@ /* eslint-disable */ import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; +import * as parser from '@babel/parser'; import { getAST, getContext } from './rename-variable'; +import { selectFiles } from '../selectors/files'; +import { setSelectedFile } from '../actions/ide'; import announceToScreenReader from '../utils/ScreenReaderHelper'; +import store from '../../../index'; const traverse = require('@babel/traverse').default; +function getScriptLoadOrder(files) { + const indexHtmlFile = files.find((f) => f.name.endsWith('index.html')); + if (!indexHtmlFile) return []; + + const scriptRegex = /]*src=["']([^"']+)["']/g; + const scripts = []; + let match; + while ((match = scriptRegex.exec(indexHtmlFile.content)) !== null) { + scripts.push(match[1]); + } + return scripts; +} + +function buildProjectSymbolTable(files, scriptOrder) { + const symbolTable = {}; + + for (const scriptName of scriptOrder) { + const file = files.find((f) => f.name.endsWith(scriptName)); + if (!file) continue; + + let ast; + try { + ast = parser.parse(file.content, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] + }); + } catch (e) { + continue; + } + + traverse(ast, { + FunctionDeclaration(path) { + const name = path.node.id?.name; + if (name && !symbolTable[name]) { + symbolTable[name] = { + file: file.name, + pos: path.node.start + }; + } + }, + VariableDeclarator(path) { + const name = path.node.id?.name; + if (name && !symbolTable[name]) { + symbolTable[name] = { + file: file.name, + pos: path.node.start + }; + } + } + }); + } + + return symbolTable; +} + export function jumpToDefinition(pos) { + const state = store.getState(); + const files = selectFiles(state); + const cm = this._cm; const token = cm.getTokenAt(pos); const tokenType = token.type; @@ -154,6 +216,37 @@ export function jumpToDefinition(pos) { } }); } + if (!found) { + const scriptOrder = getScriptLoadOrder(files); + + const projectSymbolTable = + buildProjectSymbolTable(files, scriptOrder) || {}; + const globalSymbol = projectSymbolTable[varName]; + + if (globalSymbol) { + const targetFileObj = files.find((f) => f.name === globalSymbol.file); + if (!targetFileObj) { + return; + } + + store.dispatch(setSelectedFile(targetFileObj.id)); + + if (!targetFileObj.cmInstance) { + return; + } + + const targetFileCM = targetFileObj.cmInstance; + const defPos = targetFileCM.posFromIndex(globalSymbol.pos); + targetFileCM.setCursor(defPos); + targetFileCM.focus(); + + announceToScreenReader( + `Jumped to definition of ${varName} in ${globalSymbol.file}` + ); + found = true; + } + } + if (!found) { announceToScreenReader(`No definition found for ${varName}`, true); } diff --git a/client/modules/IDE/selectors/files.js b/client/modules/IDE/selectors/files.js index 2e2699740e..ab1372563b 100644 --- a/client/modules/IDE/selectors/files.js +++ b/client/modules/IDE/selectors/files.js @@ -1,6 +1,6 @@ import { createSelector } from '@reduxjs/toolkit'; -const selectFiles = (state) => state.files; +export const selectFiles = (state) => state.files; export const selectRootFile = createSelector(selectFiles, (files) => files.find((file) => file.name === 'root') From 293b49ed8f77767287d6a0c612efd9a3ea988bdc Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Wed, 13 Aug 2025 10:54:14 +0530 Subject: [PATCH 23/28] modify jump to definition to work according to runtime behavior --- .../IDE/components/jump-to-definition.js | 122 +++++++++++++----- 1 file changed, 92 insertions(+), 30 deletions(-) diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index 63fca526e8..d00369cc50 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -63,6 +63,24 @@ function buildProjectSymbolTable(files, scriptOrder) { return symbolTable; } +const jumpToLineChAfterLoad = (targetFileId, pos) => { + let tries = 10; + const tryJump = () => { + const stateNow = store.getState(); + const filesNow = selectFiles(stateNow); + const freshTarget = filesNow.find((f) => f.id === targetFileId); // get fresh copy + const cm = freshTarget?.cmInstance; + + if (cm) { + cm.setCursor(pos); + cm.focus(); + } else if (tries-- > 0) { + setTimeout(tryJump, 30); + } + }; + tryJump(); +}; + export function jumpToDefinition(pos) { const state = store.getState(); const files = selectFiles(state); @@ -113,6 +131,80 @@ export function jumpToDefinition(pos) { let found = false; + if (!found) { + const scriptOrder = getScriptLoadOrder(files); + + if (scriptOrder.length) { + const projectSymbolTable = + buildProjectSymbolTable(files, scriptOrder) || {}; + const globalSymbol = projectSymbolTable[varName]; + + if (globalSymbol) { + for (let i = scriptOrder.length - 1; i >= 0; i--) { + const scriptName = scriptOrder[i]; + const file = files.find((f) => f.name.endsWith(scriptName)); + if (!file) continue; + + let ast; + try { + ast = parser.parse(file.content, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] + }); + } catch { + continue; + } + + let foundInThisFile = false; + traverse(ast, { + FunctionDeclaration(path) { + if (path.node.id?.name === varName) { + const targetFileObj = file; + + const fileContent = targetFileObj.content; + const beforeText = fileContent.slice(0, path.node.start); + const line = beforeText.split('\n').length - 1; + const ch = beforeText.split('\n').pop().length; + + store.dispatch(setSelectedFile(targetFileObj.id)); + pos = { line, ch }; + cm.setCursor(pos); + + announceToScreenReader( + `Jumped to definition of ${varName} in ${file.name}` + ); + foundInThisFile = true; + path.stop(); + } + }, + VariableDeclarator(path) { + if (path.node.id?.name === varName) { + const targetFileObj = file; + + const fileContent = targetFileObj.content; + const beforeText = fileContent.slice(0, path.node.start); + const line = beforeText.split('\n').length - 1; + const ch = beforeText.split('\n').pop().length; + + store.dispatch(setSelectedFile(targetFileObj.id)); + pos = { line, ch }; + cm.setCursor(pos); + + announceToScreenReader( + `Jumped to definition of ${varName} in ${file.name}` + ); + foundInThisFile = true; + path.stop(); + } + } + }); + + if (foundInThisFile) break; + } + } + } + } + traverse(ast, { VariableDeclarator(path) { if (found) return; @@ -216,36 +308,6 @@ export function jumpToDefinition(pos) { } }); } - if (!found) { - const scriptOrder = getScriptLoadOrder(files); - - const projectSymbolTable = - buildProjectSymbolTable(files, scriptOrder) || {}; - const globalSymbol = projectSymbolTable[varName]; - - if (globalSymbol) { - const targetFileObj = files.find((f) => f.name === globalSymbol.file); - if (!targetFileObj) { - return; - } - - store.dispatch(setSelectedFile(targetFileObj.id)); - - if (!targetFileObj.cmInstance) { - return; - } - - const targetFileCM = targetFileObj.cmInstance; - const defPos = targetFileCM.posFromIndex(globalSymbol.pos); - targetFileCM.setCursor(defPos); - targetFileCM.focus(); - - announceToScreenReader( - `Jumped to definition of ${varName} in ${globalSymbol.file}` - ); - found = true; - } - } if (!found) { announceToScreenReader(`No definition found for ${varName}`, true); From 842c46bb07fe51469d3299e5a663081b88241afc Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sun, 17 Aug 2025 18:09:58 +0530 Subject: [PATCH 24/28] renaming logic for classes --- .../IDE/components/jump-to-definition.js | 2 +- .../IDE/components/p5CodeAstAnalyzer.js | 105 ++++++- .../modules/IDE/components/rename-variable.js | 293 ++++++++++++------ client/modules/IDE/components/show-hint.js | 2 - .../IDE/utils/renameVariableHelper.jsx | 215 +++++++++++++ 5 files changed, 510 insertions(+), 107 deletions(-) create mode 100644 client/modules/IDE/utils/renameVariableHelper.jsx diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index d00369cc50..5b293906f3 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -1,7 +1,7 @@ /* eslint-disable */ import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; import * as parser from '@babel/parser'; -import { getAST, getContext } from './rename-variable'; +import { getContext, getAST } from '../utils/renameVariableHelper'; import { selectFiles } from '../selectors/files'; import { setSelectedFile } from '../actions/ide'; import announceToScreenReader from '../utils/ScreenReaderHelper'; diff --git a/client/modules/IDE/components/p5CodeAstAnalyzer.js b/client/modules/IDE/components/p5CodeAstAnalyzer.js index a268a361a8..822d906416 100644 --- a/client/modules/IDE/components/p5CodeAstAnalyzer.js +++ b/client/modules/IDE/components/p5CodeAstAnalyzer.js @@ -79,7 +79,10 @@ function _p5CodeAstAnalyzer(_cm) { const className = node.id.name; const classInfo = { const: new Set(), - methods: [] + fields: new Set(), + methods: [], + constructor_params: [], + methodVars: {} }; node.body.body.forEach((element) => { @@ -87,36 +90,110 @@ function _p5CodeAstAnalyzer(_cm) { const methodName = element.key.name; if (element.kind === 'constructor') { - element.body.body.forEach((stmt) => { - if ( - stmt.type === 'ExpressionStatement' && - stmt.expression.type === 'AssignmentExpression' + // constructor params + element.params.forEach((param) => { + if (param.type === 'Identifier') { + classInfo.constructor_params.push(param.name); + } else if ( + param.type === 'AssignmentPattern' && + param.left.type === 'Identifier' ) { - const expr = stmt.expression; + classInfo.constructor_params.push(param.left.name); + } else if (param.type === 'ObjectPattern') { + param.properties.forEach((prop) => { + if (prop.key && prop.key.type === 'Identifier') { + classInfo.constructor_params.push(prop.key.name); + } + }); + } else if (param.type === 'ArrayPattern') { + param.elements.forEach((el) => { + if (el && el.type === 'Identifier') { + classInfo.constructor_params.push(el.name); + } + }); + } + }); + + // collect constructor locals + traverse( + element, + { + VariableDeclaration(innerPath) { + innerPath.node.declarations.forEach((decl) => { + if (decl.id.type === 'Identifier') { + classInfo.const.add(decl.id.name); + } + }); + } + }, + path.scope, + path + ); + } else { + classInfo.methods.push(methodName); + + // collect local vars inside method + const localVars = []; + element.body.body.forEach((stmt) => { + if (stmt.type === 'VariableDeclaration') { + stmt.declarations.forEach((decl) => { + if (decl.id.type === 'Identifier') { + localVars.push(decl.id.name); + } + }); + } + }); + + classInfo.methodVars[methodName] = localVars; + } + + // ✅ Collect this.* assignments and this.* calls in *all* methods (incl constructor) + traverse( + element, + { + AssignmentExpression(innerPath) { + const expr = innerPath.node; if ( expr.left.type === 'MemberExpression' && expr.left.object.type === 'ThisExpression' && expr.left.property.type === 'Identifier' ) { const propName = expr.left.property.name; - classInfo.const.add(propName); + classInfo.fields.add(propName); + } + }, + + CallExpression(innerPath) { + const callee = innerPath.node.callee; + if ( + callee.type === 'MemberExpression' && + callee.object.type === 'ThisExpression' && + callee.property.type === 'Identifier' + ) { + const methodName = callee.property.name; + classInfo.fields.add(methodName); } } - }); - } else { - classInfo.methods.push(methodName); - } + }, + path.scope, + path + ); } }); userDefinedClassMetadata[className] = { const: Array.from(classInfo.const), + fields: Array.from(classInfo.fields), methods: classInfo.methods, - initializer: '' + constructor_params: classInfo.constructor_params, + initializer: '', + methodVars: classInfo.methodVars }; } - }, + } + }); + traverse(ast, { AssignmentExpression(path) { const node = path.node; if ( @@ -127,7 +204,6 @@ function _p5CodeAstAnalyzer(_cm) { ) { const varName = node.left.name; const fnName = node.right.callee.name; - const cls = functionToClass[fnName]; const userCls = userDefinedClassMetadata[fnName]; if (userCls) { @@ -211,6 +287,7 @@ function _p5CodeAstAnalyzer(_cm) { }; lastValidResult = result; + console.log(result); return result; } diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index c967ca083c..81d2bb0257 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -1,6 +1,13 @@ /* eslint-disable */ import { includes } from 'lodash'; import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; +import { + getContext, + getAST, + isGlobalReference, + getClassContext, + isThisReference +} from '../utils/renameVariableHelper'; const parser = require('@babel/parser'); const traverse = require('@babel/traverse').default; @@ -13,8 +20,6 @@ function SearchState(oldName) { } export function handleRename(fromPos, oldName, newName, cm) { - const { scopeToDeclaredVarsMap = {} } = p5CodeAstAnalyzer(cm) || {}; - if (!cm) { return; } @@ -22,60 +27,42 @@ export function handleRename(fromPos, oldName, newName, cm) { startRenaming(cm, ast, fromPos, newName, oldName); } -export function getContext(cm, ast, fromPos, scopeToDeclaredVarsMap) { - const offset = cm.indexFromPos(fromPos); - let context = 'global'; - - traverse(ast, { - enter(path) { - const { node } = path; - - if (!node.loc) return; - - if (offset < node.start || offset > node.end) return; +function startRenaming(cm, ast, fromPos, newName, oldName) { + const code = cm.getValue(); + const fromIndex = cm.indexFromPos(fromPos); + const { scopeToDeclaredVarsMap = {}, userDefinedClassMetadata = {} } = + p5CodeAstAnalyzer(cm) || {}; - if ( - (node.type === 'FunctionDeclaration' || - node.type === 'FunctionExpression') && - node.body && - offset >= node.body.start && - offset <= node.body.end - ) { - if (node.id?.name) { - context = node.id.name; - } else { - const parent = path.parentPath?.node; - if ( - parent?.type === 'VariableDeclarator' && - parent.id?.type === 'Identifier' - ) { - context = parent.id.name; - } else { - context = '(anonymous)'; - } - } + const baseContext = getContext( + cm, + ast, + fromPos, + scopeToDeclaredVarsMap, + userDefinedClassMetadata + ); + const isInsideClassContext = baseContext in userDefinedClassMetadata; - path.skip(); - } - } - }); + const bc = getClassContext(cm, ast, fromPos); - return context; -} + const isBaseThis = isThisReference(cm, ast, fromPos, oldName); + const isGlobal = isGlobalReference( + oldName, + baseContext, + scopeToDeclaredVarsMap, + userDefinedClassMetadata, + bc, + isBaseThis + ); -function startRenaming(cm, ast, fromPos, newName, oldName) { - const code = cm.getValue(); - const fromIndex = cm.indexFromPos(fromPos); - const scopeToDeclaredVarsMap = - p5CodeAstAnalyzer(cm).scopeToDeclaredVarsMap || {}; - const baseContext = getContext(cm, ast, fromPos, scopeToDeclaredVarsMap); + console.log('Clicked identifier isThisReference? →', isBaseThis); + console.log(fromPos, isGlobal, 'iscc=', isInsideClassContext); const replacements = []; traverse(ast, { Identifier(path) { const { node, parent } = path; - if (!node.loc) return; + if (!node.loc || node.name !== oldName) return; const startIndex = node.start; const endIndex = node.end; @@ -84,37 +71,180 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { const pos = cm.posFromIndex(startIndex); + if ( + (parent.type === 'FunctionDeclaration' || + parent.type === 'FunctionExpression' || + parent.type === 'ArrowFunctionExpression') && + parent.params.some((p) => p.type === 'Identifier' && p.name === oldName) + ) { + // If the node *is* one of the parameters being declared, allow renaming + if (parent.params.includes(node)) { + // parameter declaration → mark for renaming + } else { + // usage inside param list → skip + return; + } + } + if ( parent.type === 'MemberExpression' && parent.property === node && !parent.computed - ) - return; - - const thisContext = getContext(cm, ast, pos, scopeToDeclaredVarsMap); - - const thisScopeVars = scopeToDeclaredVarsMap[thisContext] || {}; - const baseScopeVars = scopeToDeclaredVarsMap[baseContext] || {}; - const globalScopeVars = scopeToDeclaredVarsMap['global'] || {}; - - const isInBaseScope = thisContext === baseContext; - const isShadowedLocally = - !isInBaseScope && thisScopeVars.hasOwnProperty(oldName); - const isDeclaredInBaseScope = baseScopeVars.hasOwnProperty(oldName); - const isDeclaredGlobally = globalScopeVars.hasOwnProperty(oldName); - - const shouldRename = - isInBaseScope || - (!isShadowedLocally && - thisScopeVars.hasOwnProperty(oldName) === {} && - baseContext === 'global') || - (baseContext === 'global' && !thisScopeVars.hasOwnProperty(oldName)) || - (isDeclaredGlobally && - !thisScopeVars.hasOwnProperty(oldName) && - !isDeclaredInBaseScope); - - const shouldRenameGlobalVar = - thisContext === 'global' && !isDeclaredInBaseScope; + ) { + if (parent.object.type === 'ThisExpression' && !isBaseThis) { + return; + } + } + + const thisContext = getContext( + cm, + ast, + pos, + scopeToDeclaredVarsMap, + userDefinedClassMetadata + ); + + let shouldRename = false; + let shouldRenameGlobalVar = false; + const isThis = isThisReference(cm, ast, pos, oldName); + + if (isInsideClassContext) { + // Case: inside a class + const classContext = getClassContext(cm, ast, fromPos); + let baseMethodName = null; + if (classContext && classContext.includes('.')) { + baseMethodName = classContext.split('.').pop(); + } + const classMeta = userDefinedClassMetadata[baseContext]; + + const methodPath = path.findParent((p) => p.isClassMethod()); + let currentMethodName = null; + + if (methodPath) { + if (methodPath.node.kind === 'constructor') { + currentMethodName = 'constructor'; + } else if (methodPath.node.key.type === 'Identifier') { + currentMethodName = methodPath.node.key.name; + } else if (methodPath.node.key.type === 'StringLiteral') { + currentMethodName = methodPath.node.key.value; + } + } + + // 1. Constructor parameter renaming + console.log(baseMethodName, isThis, isBaseThis); + if ( + baseMethodName === 'constructor' && + classMeta.constructor_params.includes(oldName) && + isThis === isBaseThis && + baseContext === thisContext + ) { + // Only rename inside the constructor body + console.log(pos, 'constructor=', thisContext, baseContext); + + for (const [methodName, vars] of Object.entries( + classMeta.methodVars || {} + )) { + // console.log(pos, !vars.includes(oldName), thisContext, methodName); + if (!vars.includes(oldName) && thisContext === methodName) { + shouldRenameMethodVar = true; + } + } + shouldRename = + thisContext === baseContext && + (currentMethodName == 'constructor' || shouldRenameGlobalVar); + } + // 2. Local variable inside a method (methodVars) + else { + for (const [methodName, vars] of Object.entries( + classMeta.methodVars || {} + )) { + if ( + !vars.includes(oldName) && + baseMethodName === currentMethodName && + isThis === isBaseThis && + baseContext === thisContext + ) { + shouldRename = true; + } + } + } + + if ( + classMeta.fields?.includes(oldName) && + isThis === isBaseThis && + baseContext === thisContext + ) { + shouldRename = true; + } + + if (!(thisContext in userDefinedClassMetadata)) { + const thisScopeVars = scopeToDeclaredVarsMap[thisContext] || {}; + shouldRename = isGlobal && !thisScopeVars.hasOwnProperty(oldName); + } + shouldRenameGlobalVar = isGlobal && thisContext === 'global'; + } else { + const thisScopeVars = scopeToDeclaredVarsMap[thisContext] || {}; + const baseScopeVars = scopeToDeclaredVarsMap[baseContext] || {}; + const globalScopeVars = scopeToDeclaredVarsMap['global'] || {}; + + const isInBaseScope = thisContext === baseContext; + const isShadowedLocally = + !isInBaseScope && thisScopeVars.hasOwnProperty(oldName); + const isDeclaredInBaseScope = baseScopeVars.hasOwnProperty(oldName); + const isDeclaredGlobally = globalScopeVars.hasOwnProperty(oldName); + + const methodPath = path.findParent((p) => p.isClassMethod()); + let currentMethodName = null; + + if (methodPath) { + if (methodPath.node.kind === 'constructor') { + currentMethodName = 'constructor'; + } else if (methodPath.node.key.type === 'Identifier') { + currentMethodName = methodPath.node.key.name; + } else if (methodPath.node.key.type === 'StringLiteral') { + currentMethodName = methodPath.node.key.value; + } + } + + // ✅ NEW: If we're in a class constructor and "oldName" is a parameter, skip + if ( + thisContext in userDefinedClassMetadata && + currentMethodName === 'constructor' && + userDefinedClassMetadata[thisContext]?.constructor_params?.includes( + oldName + ) + ) { + return; //don’t rename constructor param or its usages + } + + if ( + thisContext in userDefinedClassMetadata && + !(currentMethodName === 'constructor') + ) { + const classMeta = userDefinedClassMetadata[thisContext]; + for (const [methodName, vars] of Object.entries( + classMeta.methodVars || {} + )) { + if (!vars.includes(oldName) && methodName === currentMethodName) { + shouldRename = true; + } + } + } else { + shouldRename = + isInBaseScope || + (!isShadowedLocally && + thisScopeVars.hasOwnProperty(oldName) === {} && + baseContext === 'global') || + (baseContext === 'global' && + !thisScopeVars.hasOwnProperty(oldName)) || + (isDeclaredGlobally && + !thisScopeVars.hasOwnProperty(oldName) && + !isDeclaredInBaseScope); + + shouldRenameGlobalVar = + thisContext === 'global' && !isDeclaredInBaseScope; + } + } if (shouldRename || shouldRenameGlobalVar) { replacements.push({ @@ -135,20 +265,3 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { } }); } - -export function getAST(cm) { - const code = cm.getValue(); - const cursor = cm.getCursor(); - const offset = cm.indexFromPos(cursor); - - let ast; - try { - ast = parser.parse(code, { - sourceType: 'script', - plugins: ['jsx', 'typescript'] - }); - return ast; - } catch (e) { - return; - } -} diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 6f2e323cd3..0afdd41f95 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -9,7 +9,6 @@ // The first function (mod) is a wrapper to support different JavaScript environments. // The second function (inside) contains the actual implementation. -import getContext from './getContext'; import CodeMirror from 'codemirror'; (function (mod) { @@ -37,7 +36,6 @@ import CodeMirror from 'codemirror'; if (options && options.async) getHints.async = true; var newOpts = { hint: getHints }; if (options) for (var prop in options) newOpts[prop] = options[prop]; - const context = getContext(cm); return cm.showHint(newOpts); }; diff --git a/client/modules/IDE/utils/renameVariableHelper.jsx b/client/modules/IDE/utils/renameVariableHelper.jsx new file mode 100644 index 0000000000..84516d4be0 --- /dev/null +++ b/client/modules/IDE/utils/renameVariableHelper.jsx @@ -0,0 +1,215 @@ +/* eslint-disable */ +import { includes } from 'lodash'; +import p5CodeAstAnalyzer from '../components/p5CodeAstAnalyzer'; +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; + +export function isGlobalReference( + varName, + context, + scopeToDeclaredVarsMap, + userDefinedClassMetadata, + bc, + isBaseThis +) { + console.log(context, bc, varName); + // First check: is this declared global at all? + const globalVars = scopeToDeclaredVarsMap['global'] || {}; + if (!globalVars.hasOwnProperty(varName)) { + return false; // not a global + } + + // Next: check if shadowed in local scope (block, function, etc.) + const localVars = scopeToDeclaredVarsMap[context] || {}; + if (localVars.hasOwnProperty(varName)) { + return false; // locally declared → not global + } + + // If inside a class context + if (bc) { + // const [className, methodName] = context.split('.'); + const className = context; + let methodName = null; + if (bc && bc.includes('.')) { + methodName = bc.split('.').pop(); + } + console.log('meow', className, methodName); + const classMeta = userDefinedClassMetadata[className]; + if (classMeta) { + // Shadowing inside constructor + if ( + methodName === 'constructor' && + classMeta.constructor_params?.includes(varName) + ) { + return false; + } + + // Shadowing inside method vars + if ( + methodName && + classMeta.methodVars?.[methodName] && + classMeta.methodVars[methodName].hasOwnProperty(varName) + ) { + return false; + } + + // Shadowing by instance fields declared in class (like "this.a = ...") + if (classMeta.fields?.includes(varName) && isBaseThis) { + return false; + } + } + } + + // If we got here, it's not shadowed → must be a reference to the global + return true; +} + +export function isThisReference(cm, ast, fromPos, oldName) { + const offset = cm.indexFromPos(fromPos); + let isThisRef = false; + + traverse(ast, { + MemberExpression(path) { + const { node } = path; + if (!node.loc) return; + + // check if cursor is inside this property name + if (offset >= node.start && offset <= node.end) { + if ( + node.object.type === 'ThisExpression' && + node.property.type === 'Identifier' && + node.property.name === oldName && + !node.computed // skip this["foo"] + ) { + isThisRef = true; + path.stop(); // found it, stop traversal + } + } + } + }); + + return isThisRef; +} + +export function getContext( + cm, + ast, + fromPos, + scopeToDeclaredVarsMap, + userDefinedClassMetadata +) { + const offset = cm.indexFromPos(fromPos); + let context = 'global'; + + traverse(ast, { + enter(path) { + const { node } = path; + if (!node.loc) return; + if (offset < node.start || offset > node.end) return; + + if ( + (node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression' || + node.type === 'ArrowFunctionExpression') && + node.body && + offset >= node.body.start && + offset <= node.body.end + ) { + if (node.id?.name) { + context = node.id.name; + } else { + const parent = path.parentPath?.node; + if ( + parent?.type === 'VariableDeclarator' && + parent.id?.type === 'Identifier' + ) { + context = parent.id.name; + } else { + context = '(anonymous)'; + } + } + path.skip(); + } + + if ( + (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') && + offset >= node.start && + offset <= node.end + ) { + context = node.id?.name || '(anonymous class)'; + path.skip(); + } + } + }); + + return context; +} + +export function getAST(cm) { + const code = cm.getValue(); + const cursor = cm.getCursor(); + const offset = cm.indexFromPos(cursor); + + let ast; + try { + ast = parser.parse(code, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] + }); + return ast; + } catch (e) { + return; + } +} + +export function getClassContext(cm, ast, fromPos) { + const offset = cm.indexFromPos(fromPos); + let classContext = null; + + traverse(ast, { + enter(path) { + const { node } = path; + if (!node.loc) return; + if (offset < node.start || offset > node.end) return; + + // Check if we're inside a class + if ( + (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') && + offset >= node.start && + offset <= node.end + ) { + const className = node.id?.name || '(anonymous class)'; + classContext = className; + + // Look for the method containing the offset + const methodPath = path.get('body.body').find((p) => { + return ( + (p.node.type === 'ClassMethod' || + p.node.type === 'ClassPrivateMethod') && + offset >= p.node.start && + offset <= p.node.end + ); + }); + + if (methodPath) { + let methodName; + if (methodPath.node.kind === 'constructor') { + methodName = 'constructor'; + } else if (methodPath.node.key.type === 'Identifier') { + methodName = methodPath.node.key.name; + } else if (methodPath.node.key.type === 'StringLiteral') { + methodName = methodPath.node.key.value; + } else { + methodName = '(anonymous method)'; + } + + classContext = `${className}.${methodName}`; + } + + path.skip(); + } + } + }); + + return classContext; // null if not inside a class +} From a0569d0283dd41224b894e0b40c6460f627b9cf2 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Mon, 18 Aug 2025 20:35:21 +0530 Subject: [PATCH 25/28] fixes on renaming logic for classes and methods along with other minor bug fixes --- .../modules/IDE/components/Editor/index.jsx | 4 +- .../IDE/components/p5CodeAstAnalyzer.js | 8 -- .../modules/IDE/components/rename-variable.js | 52 +++++++------ .../modules/IDE/utils/ScreenReaderHelper.jsx | 1 - .../IDE/utils/renameVariableHelper.jsx | 76 +++++++++---------- 5 files changed, 66 insertions(+), 75 deletions(-) diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index ace7b3f7f7..fe656bbb07 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -227,7 +227,9 @@ class Editor extends React.Component { } this._cm.on('keydown', (_cm, e) => { - // Show hint + if ((e.ctrlKey || e.metaKey) && e.key === 'v') { + return; + } const mode = this._cm.getOption('mode'); if (/^[a-z]$/i.test(e.key) && (mode === 'css' || mode === 'javascript')) { this.showHint(_cm); diff --git a/client/modules/IDE/components/p5CodeAstAnalyzer.js b/client/modules/IDE/components/p5CodeAstAnalyzer.js index 822d906416..a1535c4fde 100644 --- a/client/modules/IDE/components/p5CodeAstAnalyzer.js +++ b/client/modules/IDE/components/p5CodeAstAnalyzer.js @@ -17,7 +17,6 @@ Object.entries(classMap).forEach(([className, classData]) => { }); }); -// Cache to store last valid result let lastValidResult = { variableToP5ClassMap: {}, scopeToDeclaredVarsMap: {}, @@ -90,7 +89,6 @@ function _p5CodeAstAnalyzer(_cm) { const methodName = element.key.name; if (element.kind === 'constructor') { - // constructor params element.params.forEach((param) => { if (param.type === 'Identifier') { classInfo.constructor_params.push(param.name); @@ -114,7 +112,6 @@ function _p5CodeAstAnalyzer(_cm) { } }); - // collect constructor locals traverse( element, { @@ -132,7 +129,6 @@ function _p5CodeAstAnalyzer(_cm) { } else { classInfo.methods.push(methodName); - // collect local vars inside method const localVars = []; element.body.body.forEach((stmt) => { if (stmt.type === 'VariableDeclaration') { @@ -147,7 +143,6 @@ function _p5CodeAstAnalyzer(_cm) { classInfo.methodVars[methodName] = localVars; } - // ✅ Collect this.* assignments and this.* calls in *all* methods (incl constructor) traverse( element, { @@ -258,7 +253,6 @@ function _p5CodeAstAnalyzer(_cm) { }) .filter(Boolean); - // Store function metadata for hinting userDefinedFunctionMetadata[fnName] = { text: fnName, type: 'fun', @@ -287,11 +281,9 @@ function _p5CodeAstAnalyzer(_cm) { }; lastValidResult = result; - console.log(result); return result; } -// Export a debounced version export default debounce(_p5CodeAstAnalyzer, 200, { leading: true, trailing: true, diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 81d2bb0257..3eb22985c1 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -30,8 +30,11 @@ export function handleRename(fromPos, oldName, newName, cm) { function startRenaming(cm, ast, fromPos, newName, oldName) { const code = cm.getValue(); const fromIndex = cm.indexFromPos(fromPos); - const { scopeToDeclaredVarsMap = {}, userDefinedClassMetadata = {} } = - p5CodeAstAnalyzer(cm) || {}; + const { + scopeToDeclaredVarsMap = {}, + userDefinedClassMetadata = {}, + userDefinedFunctionMetadata = {} + } = p5CodeAstAnalyzer(cm) || {}; const baseContext = getContext( cm, @@ -40,23 +43,19 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { scopeToDeclaredVarsMap, userDefinedClassMetadata ); - const isInsideClassContext = baseContext in userDefinedClassMetadata; - - const bc = getClassContext(cm, ast, fromPos); + const isInsideClassContext = baseContext in userDefinedClassMetadata; + const baseClassContext = getClassContext(cm, ast, fromPos); const isBaseThis = isThisReference(cm, ast, fromPos, oldName); const isGlobal = isGlobalReference( oldName, baseContext, scopeToDeclaredVarsMap, userDefinedClassMetadata, - bc, + baseClassContext, isBaseThis ); - console.log('Clicked identifier isThisReference? →', isBaseThis); - console.log(fromPos, isGlobal, 'iscc=', isInsideClassContext); - const replacements = []; traverse(ast, { @@ -77,11 +76,8 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { parent.type === 'ArrowFunctionExpression') && parent.params.some((p) => p.type === 'Identifier' && p.name === oldName) ) { - // If the node *is* one of the parameters being declared, allow renaming if (parent.params.includes(node)) { - // parameter declaration → mark for renaming } else { - // usage inside param list → skip return; } } @@ -109,7 +105,6 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { const isThis = isThisReference(cm, ast, pos, oldName); if (isInsideClassContext) { - // Case: inside a class const classContext = getClassContext(cm, ast, fromPos); let baseMethodName = null; if (classContext && classContext.includes('.')) { @@ -130,21 +125,15 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { } } - // 1. Constructor parameter renaming - console.log(baseMethodName, isThis, isBaseThis); if ( baseMethodName === 'constructor' && classMeta.constructor_params.includes(oldName) && isThis === isBaseThis && baseContext === thisContext ) { - // Only rename inside the constructor body - console.log(pos, 'constructor=', thisContext, baseContext); - for (const [methodName, vars] of Object.entries( classMeta.methodVars || {} )) { - // console.log(pos, !vars.includes(oldName), thisContext, methodName); if (!vars.includes(oldName) && thisContext === methodName) { shouldRenameMethodVar = true; } @@ -152,9 +141,7 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { shouldRename = thisContext === baseContext && (currentMethodName == 'constructor' || shouldRenameGlobalVar); - } - // 2. Local variable inside a method (methodVars) - else { + } else { for (const [methodName, vars] of Object.entries( classMeta.methodVars || {} )) { @@ -192,6 +179,24 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { !isInBaseScope && thisScopeVars.hasOwnProperty(oldName); const isDeclaredInBaseScope = baseScopeVars.hasOwnProperty(oldName); const isDeclaredGlobally = globalScopeVars.hasOwnProperty(oldName); + const isThisGlobal = isGlobalReference( + oldName, + thisContext, + scopeToDeclaredVarsMap, + userDefinedClassMetadata, + baseClassContext, + isBaseThis + ); + + if ( + isThisGlobal && + thisContext in userDefinedFunctionMetadata && + userDefinedFunctionMetadata[thisContext].params.some( + (param) => param.p === oldName + ) + ) { + return; + } const methodPath = path.findParent((p) => p.isClassMethod()); let currentMethodName = null; @@ -206,7 +211,6 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { } } - // ✅ NEW: If we're in a class constructor and "oldName" is a parameter, skip if ( thisContext in userDefinedClassMetadata && currentMethodName === 'constructor' && @@ -214,7 +218,7 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { oldName ) ) { - return; //don’t rename constructor param or its usages + return; } if ( diff --git a/client/modules/IDE/utils/ScreenReaderHelper.jsx b/client/modules/IDE/utils/ScreenReaderHelper.jsx index c9660e6f34..632023442e 100644 --- a/client/modules/IDE/utils/ScreenReaderHelper.jsx +++ b/client/modules/IDE/utils/ScreenReaderHelper.jsx @@ -5,7 +5,6 @@ export default function announceToScreenReader(message, assertive = false) { // liveRegion.setAttribute('aria-live', assertive ? 'assertive' : 'polite'); liveRegion.setAttribute('aria-live', 'assertive'); - // Clear first to ensure repeated messages are read liveRegion.textContent = ''; setTimeout(() => { liveRegion.textContent = message; diff --git a/client/modules/IDE/utils/renameVariableHelper.jsx b/client/modules/IDE/utils/renameVariableHelper.jsx index 84516d4be0..e41decc19a 100644 --- a/client/modules/IDE/utils/renameVariableHelper.jsx +++ b/client/modules/IDE/utils/renameVariableHelper.jsx @@ -9,34 +9,27 @@ export function isGlobalReference( context, scopeToDeclaredVarsMap, userDefinedClassMetadata, - bc, + baseClassContext, isBaseThis ) { - console.log(context, bc, varName); - // First check: is this declared global at all? const globalVars = scopeToDeclaredVarsMap['global'] || {}; if (!globalVars.hasOwnProperty(varName)) { - return false; // not a global + return false; } - // Next: check if shadowed in local scope (block, function, etc.) const localVars = scopeToDeclaredVarsMap[context] || {}; - if (localVars.hasOwnProperty(varName)) { - return false; // locally declared → not global + if (!(context === 'global') && localVars.hasOwnProperty(varName)) { + return false; } - // If inside a class context - if (bc) { - // const [className, methodName] = context.split('.'); + if (baseClassContext) { const className = context; let methodName = null; - if (bc && bc.includes('.')) { - methodName = bc.split('.').pop(); + if (baseClassContext && baseClassContext.includes('.')) { + methodName = baseClassContext.split('.').pop(); } - console.log('meow', className, methodName); const classMeta = userDefinedClassMetadata[className]; if (classMeta) { - // Shadowing inside constructor if ( methodName === 'constructor' && classMeta.constructor_params?.includes(varName) @@ -44,7 +37,6 @@ export function isGlobalReference( return false; } - // Shadowing inside method vars if ( methodName && classMeta.methodVars?.[methodName] && @@ -53,14 +45,12 @@ export function isGlobalReference( return false; } - // Shadowing by instance fields declared in class (like "this.a = ...") if (classMeta.fields?.includes(varName) && isBaseThis) { return false; } } } - // If we got here, it's not shadowed → must be a reference to the global return true; } @@ -73,16 +63,15 @@ export function isThisReference(cm, ast, fromPos, oldName) { const { node } = path; if (!node.loc) return; - // check if cursor is inside this property name if (offset >= node.start && offset <= node.end) { if ( node.object.type === 'ThisExpression' && node.property.type === 'Identifier' && node.property.name === oldName && - !node.computed // skip this["foo"] + !node.computed ) { isThisRef = true; - path.stop(); // found it, stop traversal + path.stop(); } } } @@ -105,30 +94,37 @@ export function getContext( enter(path) { const { node } = path; if (!node.loc) return; - if (offset < node.start || offset > node.end) return; + if (offset < node.start || offset > node.end) { + return; + } if ( - (node.type === 'FunctionDeclaration' || - node.type === 'FunctionExpression' || - node.type === 'ArrowFunctionExpression') && - node.body && - offset >= node.body.start && - offset <= node.body.end + node.type === 'FunctionDeclaration' || + node.type === 'FunctionExpression' || + node.type === 'ArrowFunctionExpression' ) { - if (node.id?.name) { - context = node.id.name; - } else { - const parent = path.parentPath?.node; - if ( - parent?.type === 'VariableDeclarator' && - parent.id?.type === 'Identifier' - ) { - context = parent.id.name; + const inBody = + node.body && offset >= node.body.start && offset <= node.body.end; + const inParams = node.params?.some( + (p) => offset >= p.start && offset <= p.end + ); + + if (inBody || inParams) { + if (node.id?.name) { + context = node.id.name; } else { - context = '(anonymous)'; + const parent = path.parentPath?.node; + if ( + parent?.type === 'VariableDeclarator' && + parent.id?.type === 'Identifier' + ) { + context = parent.id.name; + } else { + context = '(anonymous)'; + } } + path.skip(); } - path.skip(); } if ( @@ -172,7 +168,6 @@ export function getClassContext(cm, ast, fromPos) { if (!node.loc) return; if (offset < node.start || offset > node.end) return; - // Check if we're inside a class if ( (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') && offset >= node.start && @@ -181,7 +176,6 @@ export function getClassContext(cm, ast, fromPos) { const className = node.id?.name || '(anonymous class)'; classContext = className; - // Look for the method containing the offset const methodPath = path.get('body.body').find((p) => { return ( (p.node.type === 'ClassMethod' || @@ -211,5 +205,5 @@ export function getClassContext(cm, ast, fromPos) { } }); - return classContext; // null if not inside a class + return classContext; } From fdcd37afa722742017244d81685db8515ccea2e8 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sat, 23 Aug 2025 14:47:28 +0530 Subject: [PATCH 26/28] final edits to clean the code --- .../modules/IDE/components/Editor/index.jsx | 6 +- .../IDE/components/contextAwareHinter.js | 12 +- .../IDE/components/jump-to-def-helper.js | 68 ++++++++ .../IDE/components/jump-to-definition.js | 156 ++---------------- .../modules/IDE/components/rename-variable.js | 15 +- .../IDE/components/showRenameDialog.jsx | 58 ++++--- 6 files changed, 137 insertions(+), 178 deletions(-) create mode 100644 client/modules/IDE/components/jump-to-def-helper.js diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index fe656bbb07..658b7d9b4a 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -227,7 +227,11 @@ class Editor extends React.Component { } this._cm.on('keydown', (_cm, e) => { - if ((e.ctrlKey || e.metaKey) && e.key === 'v') { + if ( + ((e.ctrlKey || e.metaKey) && e.key === 'v') || + e.ctrlKey || + e.altKey + ) { return; } const mode = this._cm.getOption('mode'); diff --git a/client/modules/IDE/components/contextAwareHinter.js b/client/modules/IDE/components/contextAwareHinter.js index 4ee6399630..8b4af9e1f7 100644 --- a/client/modules/IDE/components/contextAwareHinter.js +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -116,14 +116,10 @@ export default function contextAwareHinter(cm, options = {}) { varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) ) .map((varName) => { - const isFunc = (() => { - const inCurrentScope = - scopeToDeclaredVarsMap[currentContext]?.[varName]; - const inGlobalScope = scopeToDeclaredVarsMap['global']?.[varName]; - - if (inCurrentScope && inCurrentScope !== 'fun') return false; - return inGlobalScope === 'fun'; - })(); + const isFunc = + scopeToDeclaredVarsMap[currentContext]?.[varName] === 'fun' || + (!scopeToDeclaredVarsMap[currentContext]?.[varName] && + scopeToDeclaredVarsMap['global']?.[varName] === 'fun'); const baseItem = isFunc ? { ...userDefinedFunctionMetadata[varName] } diff --git a/client/modules/IDE/components/jump-to-def-helper.js b/client/modules/IDE/components/jump-to-def-helper.js new file mode 100644 index 0000000000..51c2e251cc --- /dev/null +++ b/client/modules/IDE/components/jump-to-def-helper.js @@ -0,0 +1,68 @@ +/* eslint-disable */ +import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; +import * as parser from '@babel/parser'; +import announceToScreenReader from '../utils/ScreenReaderHelper'; +const traverse = require('@babel/traverse').default; + +export function getScriptLoadOrder(files) { + const indexHtmlFile = files.find((f) => f.name.endsWith('index.html')); + if (!indexHtmlFile) return []; + + const scriptRegex = /]*src=["']([^"']+)["']/g; + const scripts = []; + let match; + while ((match = scriptRegex.exec(indexHtmlFile.content)) !== null) { + scripts.push(match[1]); + } + return scripts; +} + +export function buildProjectSymbolTable(files, scriptOrder) { + const symbolTable = {}; + + for (const scriptName of scriptOrder) { + const file = files.find((f) => f.name.endsWith(scriptName)); + if (!file) continue; + + let ast; + try { + ast = parser.parse(file.content, { + sourceType: 'script', + plugins: ['jsx', 'typescript'] + }); + } catch (e) { + continue; + } + + traverse(ast, { + FunctionDeclaration(path) { + const name = path.node.id?.name; + if (name && !symbolTable[name]) { + symbolTable[name] = { + file: file.name, + pos: path.node.start + }; + } + }, + VariableDeclarator(path) { + const name = path.node.id?.name; + if (name && !symbolTable[name]) { + symbolTable[name] = { + file: file.name, + pos: path.node.start + }; + } + } + }); + } + + return symbolTable; +} + +export function announceJump(cm, fromPos, toPos, varName) { + cm.setCursor(toPos); + cm.focus(); + announceToScreenReader( + `Jumped to line ${toPos.line + 1} at definition of ${varName}` + ); +} diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index 5b293906f3..15710d4796 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -5,82 +5,14 @@ import { getContext, getAST } from '../utils/renameVariableHelper'; import { selectFiles } from '../selectors/files'; import { setSelectedFile } from '../actions/ide'; import announceToScreenReader from '../utils/ScreenReaderHelper'; +import { + getScriptLoadOrder, + buildProjectSymbolTable, + announceJump +} from './jump-to-def-helper'; import store from '../../../index'; const traverse = require('@babel/traverse').default; -function getScriptLoadOrder(files) { - const indexHtmlFile = files.find((f) => f.name.endsWith('index.html')); - if (!indexHtmlFile) return []; - - const scriptRegex = /]*src=["']([^"']+)["']/g; - const scripts = []; - let match; - while ((match = scriptRegex.exec(indexHtmlFile.content)) !== null) { - scripts.push(match[1]); - } - return scripts; -} - -function buildProjectSymbolTable(files, scriptOrder) { - const symbolTable = {}; - - for (const scriptName of scriptOrder) { - const file = files.find((f) => f.name.endsWith(scriptName)); - if (!file) continue; - - let ast; - try { - ast = parser.parse(file.content, { - sourceType: 'script', - plugins: ['jsx', 'typescript'] - }); - } catch (e) { - continue; - } - - traverse(ast, { - FunctionDeclaration(path) { - const name = path.node.id?.name; - if (name && !symbolTable[name]) { - symbolTable[name] = { - file: file.name, - pos: path.node.start - }; - } - }, - VariableDeclarator(path) { - const name = path.node.id?.name; - if (name && !symbolTable[name]) { - symbolTable[name] = { - file: file.name, - pos: path.node.start - }; - } - } - }); - } - - return symbolTable; -} - -const jumpToLineChAfterLoad = (targetFileId, pos) => { - let tries = 10; - const tryJump = () => { - const stateNow = store.getState(); - const filesNow = selectFiles(stateNow); - const freshTarget = filesNow.find((f) => f.id === targetFileId); // get fresh copy - const cm = freshTarget?.cmInstance; - - if (cm) { - cm.setCursor(pos); - cm.focus(); - } else if (tries-- > 0) { - setTimeout(tryJump, 30); - } - }; - tryJump(); -}; - export function jumpToDefinition(pos) { const state = store.getState(); const files = selectFiles(state); @@ -88,10 +20,13 @@ export function jumpToDefinition(pos) { const cm = this._cm; const token = cm.getTokenAt(pos); const tokenType = token.type; + const varName = token.string; - if (!tokenType || tokenType === 'def') return; + if (!tokenType || tokenType === 'def') { + announceToScreenReader(`Already at definition of ${varName}`); + return; + } - const varName = token.string; const ast = getAST(cm); const { scopeToDeclaredVarsMap = {}, userDefinedFunctionMetadata = {} } = p5CodeAstAnalyzer(cm) || {}; @@ -101,36 +36,9 @@ export function jumpToDefinition(pos) { const isDeclaredVar = scopeToDeclaredVarsMap[currentContext]?.[varName] !== undefined; - let isAtDeclaration = false; - - traverse(ast, { - VariableDeclarator(path) { - if ( - path.node.id.name === varName && - path.node.start === cm.indexFromPos(pos) - ) { - isAtDeclaration = true; - path.stop(); - } - }, - FunctionDeclaration(path) { - if ( - path.node.id?.name === varName && - path.node.start === cm.indexFromPos(pos) - ) { - isAtDeclaration = true; - path.stop(); - } - } - }); - - if (isAtDeclaration) { - announceToScreenReader(`Already at definition of ${varName}`); - return; - } - let found = false; + // search project-wide definitions (script load order) if (!found) { const scriptOrder = getScriptLoadOrder(files); @@ -205,6 +113,7 @@ export function jumpToDefinition(pos) { } } + // Search in current file, same context traverse(ast, { VariableDeclarator(path) { if (found) return; @@ -215,13 +124,7 @@ export function jumpToDefinition(pos) { const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); if (defContext === currentContext) { found = true; - cm.setCursor(defPos); - cm.focus(); - announceToScreenReader( - `Jumped from line ${pos.line + 1} to line ${ - defPos.line + 1 - } at definition of ${varName}` - ); + announceJump(cm, pos, defPos, varName); } } }, @@ -236,13 +139,7 @@ export function jumpToDefinition(pos) { const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); if (defContext === currentContext) { found = true; - cm.setCursor(defPos); - cm.focus(); - announceToScreenReader( - `Jumped from line ${pos.line + 1} to line ${ - defPos.line + 1 - } at definition of ${varName}` - ); + announceJump(cm, pos, defPos, varName); } } @@ -258,19 +155,14 @@ export function jumpToDefinition(pos) { ); if (defContext === currentContext) { found = true; - cm.setCursor(defPos); - cm.focus(); - announceToScreenReader( - `Jumped from line ${pos.line + 1} to line ${ - defPos.line + 1 - } at definition of ${varName}` - ); + announceJump(cm, pos, defPos, varName); } } } } }); + // Fallback search in current file if (!found) { traverse(ast, { VariableDeclarator(path) { @@ -280,13 +172,7 @@ export function jumpToDefinition(pos) { if (node.id.name === varName && node.loc) { const defPos = cm.posFromIndex(node.start); found = true; - cm.setCursor(defPos); - cm.focus(); - announceToScreenReader( - `Jumped from line ${pos.line + 1} to line ${ - defPos.line + 1 - } at definition of ${varName}` - ); + announceJump(cm, pos, defPos, varName); } }, @@ -297,13 +183,7 @@ export function jumpToDefinition(pos) { if (node.id?.name === varName) { const defPos = cm.posFromIndex(node.start); found = true; - cm.setCursor(defPos); - cm.focus(); - announceToScreenReader( - `Jumped from line ${pos.line + 1} to line ${ - defPos.line + 1 - } at definition of ${varName}` - ); + announceJump(cm, pos, defPos, varName); } } }); diff --git a/client/modules/IDE/components/rename-variable.js b/client/modules/IDE/components/rename-variable.js index 3eb22985c1..2c6c625f52 100644 --- a/client/modules/IDE/components/rename-variable.js +++ b/client/modules/IDE/components/rename-variable.js @@ -11,14 +11,6 @@ import { const parser = require('@babel/parser'); const traverse = require('@babel/traverse').default; -function SearchState(oldName) { - this.posFrom = this.posTo = null; - this.query = oldName; - this.regexp = false; - this.caseInsensitive = true; - this.wholeWord = true; -} - export function handleRename(fromPos, oldName, newName, cm) { if (!cm) { return; @@ -36,6 +28,7 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { userDefinedFunctionMetadata = {} } = p5CodeAstAnalyzer(cm) || {}; + // Determine the context at the position where rename started const baseContext = getContext( cm, ast, @@ -104,6 +97,7 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { let shouldRenameGlobalVar = false; const isThis = isThisReference(cm, ast, pos, oldName); + // Handle renaming inside classes if (isInsideClassContext) { const classContext = getClassContext(cm, ast, fromPos); let baseMethodName = null; @@ -156,6 +150,7 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { } } + // Rename constructor parameters, class fields, and method variables carefully if ( classMeta.fields?.includes(oldName) && isThis === isBaseThis && @@ -169,7 +164,9 @@ function startRenaming(cm, ast, fromPos, newName, oldName) { shouldRename = isGlobal && !thisScopeVars.hasOwnProperty(oldName); } shouldRenameGlobalVar = isGlobal && thisContext === 'global'; - } else { + } + // Handle renaming outside classes + else { const thisScopeVars = scopeToDeclaredVarsMap[thisContext] || {}; const baseScopeVars = scopeToDeclaredVarsMap[baseContext] || {}; const globalScopeVars = scopeToDeclaredVarsMap['global'] || {}; diff --git a/client/modules/IDE/components/showRenameDialog.jsx b/client/modules/IDE/components/showRenameDialog.jsx index 5490ee4c97..f6a6b7e140 100644 --- a/client/modules/IDE/components/showRenameDialog.jsx +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -18,6 +18,10 @@ export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { function openRenameInputDialog(coords, oldName, onSubmit) { const dialog = document.createElement('div'); + dialog.setAttribute('role', 'dialog'); + dialog.setAttribute('aria-modal', 'true'); + dialog.setAttribute('aria-label', `Rename ${oldName}`); + dialog.style.position = 'absolute'; dialog.style.left = `${coords.left}px`; dialog.style.top = `${coords.bottom + 5}px`; @@ -29,6 +33,7 @@ function openRenameInputDialog(coords, oldName, onSubmit) { dialog.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)'; const input = document.createElement('input'); + input.setAttribute('aria-label', 'Enter new name'); input.type = 'text'; input.value = oldName; input.style.width = '200px'; @@ -42,32 +47,25 @@ function openRenameInputDialog(coords, oldName, onSubmit) { function cleanup() { dialog.remove(); - document.removeEventListener('mousedown', onClickOutside); } - function onClickOutside(e) { - if (!dialog.contains(e.target)) { - cleanup(); - } - } + const cleanupClick = addClickOutsideHandler(dialog, cleanup); + const cleanupKeys = addKeyHandler(['Escape'], cleanup); input.addEventListener('keydown', (e) => { if (e.key === 'Enter') { const value = input.value.trim(); if (value) { cleanup(); + cleanupClick(); + cleanupKeys(); onSubmit(value); announceToScreenReader( `Renaming done from word ${oldName} to ${value}` ); - cleanup(); } - } else if (e.key === 'Escape') { - cleanup(); } }); - - document.addEventListener('mousedown', onClickOutside); } function isValidIdentifierSelection(selection, tokenType) { @@ -107,22 +105,38 @@ function showTemporaryDialog(coords, message) { function cleanup() { dialog.remove(); clearTimeout(timeout); - document.removeEventListener('mousedown', onClickOutside); - document.removeEventListener('keydown', onKeyDown); + cleanupClick(); + cleanupKeys(); } - function onClickOutside(e) { - if (!dialog.contains(e.target)) { - cleanup(); + const cleanupClick = addClickOutsideHandler(dialog, cleanup); + const cleanupKeys = addKeyHandler(['Escape'], cleanup); +} + +function addClickOutsideHandler(element, onOutsideClick) { + function handler(e) { + if (!element.contains(e.target)) { + onOutsideClick(); + remove(); } } + function remove() { + document.removeEventListener('mousedown', handler); + } + document.addEventListener('mousedown', handler); + return remove; +} - function onKeyDown(e) { - if (e.key === 'Escape') { - cleanup(); +function addKeyHandler(keys, onKeyPress) { + function handler(e) { + if (keys.includes(e.key)) { + onKeyPress(e.key); + remove(); } } - - document.addEventListener('mousedown', onClickOutside); - document.addEventListener('keydown', onKeyDown); + function remove() { + document.removeEventListener('keydown', handler); + } + document.addEventListener('keydown', handler); + return remove; } From 77465e904aafd4ba67868fcea198fc79e7a8f635 Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sat, 23 Aug 2025 15:04:45 +0530 Subject: [PATCH 27/28] update files to ensure consistency and fix test errors --- .env.example | 2 +- .../modules/IDE/components/Editor/index.jsx | 54 ++++++++++--------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/.env.example b/.env.example index 1516962450..ea00adf9d9 100644 --- a/.env.example +++ b/.env.example @@ -19,7 +19,7 @@ MAILGUN_KEY= ML5_LIBRARY_USERNAME=ml5 ML5_LIBRARY_EMAIL=examples@ml5js.org ML5_LIBRARY_PASS=helloml5 -MONGO_URL=mongodb://127.0.0.1:27017/p5js-web-editor +MONGO_URL=mongodb://localhost:27017/p5js-web-editor PORT=8000 PREVIEW_PORT=8002 EDITOR_URL=http://localhost:8000 diff --git a/client/modules/IDE/components/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 658b7d9b4a..a8d851d62c 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -419,12 +419,15 @@ class Editor extends React.Component { } showHint(_cm) { + if (!_cm) return; + if (!this.props.autocompleteHinter) { CodeMirror.showHint(_cm, () => {}, {}); return; } let focusedLinkElement = null; + const setFocusedLinkElement = (set) => { if (set && !focusedLinkElement) { const activeItemLink = document.querySelector( @@ -439,6 +442,7 @@ class Editor extends React.Component { } } }; + const removeFocusedLinkElement = () => { if (focusedLinkElement) { focusedLinkElement.classList.remove('focused-hint-link'); @@ -461,12 +465,8 @@ class Editor extends React.Component { ); if (activeItemLink) activeItemLink.click(); }, - Right: (cm, e) => { - setFocusedLinkElement(true); - }, - Left: (cm, e) => { - removeFocusedLinkElement(); - }, + Right: (cm, e) => setFocusedLinkElement(true), + Left: (cm, e) => removeFocusedLinkElement(), Up: (cm, e) => { const onLink = removeFocusedLinkElement(); e.moveFocus(-1); @@ -485,26 +485,28 @@ class Editor extends React.Component { closeOnUnfocus: false }; - if (_cm.options.mode === 'javascript') { - // JavaScript - CodeMirror.showHint( - _cm, - () => { - const c = _cm.getCursor(); - const token = _cm.getTokenAt(c); - const hints = contextAwareHinter(_cm, { hinter: this.hinter }); - return { - list: hints, - from: CodeMirror.Pos(c.line, token.start), - to: CodeMirror.Pos(c.line, c.ch) - }; - }, - hintOptions - ); - } else if (_cm.options.mode === 'css') { - // CSS - CodeMirror.showHint(_cm, CodeMirror.hint.css, hintOptions); - } + const triggerHints = () => { + if (_cm.options.mode === 'javascript') { + CodeMirror.showHint( + _cm, + () => { + const c = _cm.getCursor(); + const token = _cm.getTokenAt(c); + const hints = contextAwareHinter(_cm, { hinter: this.hinter }); + return { + list: hints, + from: CodeMirror.Pos(c.line, token.start), + to: CodeMirror.Pos(c.line, c.ch) + }; + }, + hintOptions + ); + } else if (_cm.options.mode === 'css') { + CodeMirror.showHint(_cm, CodeMirror.hint.css, hintOptions); + } + }; + + setTimeout(triggerHints, 0); } showReplace() { From 078b882bd0bd3a29f484d26b327718c83392ac5e Mon Sep 17 00:00:00 2001 From: Ku7eKam Date: Sun, 24 Aug 2025 11:08:09 +0530 Subject: [PATCH 28/28] fix testing issues --- .../IDE/components/jump-to-definition.js | 3 +- client/storeInstance.js | 6 + package-lock.json | 2007 +++++------------ 3 files changed, 552 insertions(+), 1464 deletions(-) create mode 100644 client/storeInstance.js diff --git a/client/modules/IDE/components/jump-to-definition.js b/client/modules/IDE/components/jump-to-definition.js index 15710d4796..7d80f2b3b2 100644 --- a/client/modules/IDE/components/jump-to-definition.js +++ b/client/modules/IDE/components/jump-to-definition.js @@ -10,7 +10,8 @@ import { buildProjectSymbolTable, announceJump } from './jump-to-def-helper'; -import store from '../../../index'; +import store from '../../../../client/storeInstance'; + const traverse = require('@babel/traverse').default; export function jumpToDefinition(pos) { diff --git a/client/storeInstance.js b/client/storeInstance.js new file mode 100644 index 0000000000..bd92360c2e --- /dev/null +++ b/client/storeInstance.js @@ -0,0 +1,6 @@ +import setupStore from './store'; + +const initialState = window.__INITIAL_STATE__; +const store = setupStore(initialState); + +export default store; diff --git a/package-lock.json b/package-lock.json index cce532180b..5b45285f29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,6 @@ "cookie-parser": "^1.4.5", "copy-webpack-plugin": "^10.2.4", "cors": "^2.8.5", - "cross-env": "^5.2.1", "csslint": "^1.0.5", "date-fns": "^2.22.1", "decomment": "^0.9.5", @@ -171,6 +170,7 @@ "babel-loader": "^8.2.5", "babel-plugin-styled-components": "^2.1.4", "babel-plugin-transform-react-remove-prop-types": "^0.2.12", + "cross-env": "^10.0.0", "css-loader": "^6.11.0", "css-minimizer-webpack-plugin": "^3.4.1", "eslint": "^7.32.0", @@ -3978,12 +3978,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.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -4303,9 +4303,9 @@ } }, "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "engines": { "node": ">=6.9.0" } @@ -4358,7 +4358,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -4370,11 +4369,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -6237,9 +6236,9 @@ } }, "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.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", @@ -6250,20 +6249,17 @@ } }, "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.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "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", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" @@ -6596,6 +6592,12 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, + "node_modules/@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "dev": true + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", @@ -6643,7 +6645,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -6663,7 +6664,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6676,7 +6676,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -6686,7 +6685,6 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -6701,7 +6699,6 @@ "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -6716,7 +6713,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, "engines": { "node": ">= 4" } @@ -6725,7 +6721,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -6791,7 +6786,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -6804,8 +6798,7 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -11331,20 +11324,6 @@ "node": ">= 6" } }, - "node_modules/@storybook/cli/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@storybook/cli/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -11424,15 +11403,6 @@ "node": ">=8" } }, - "node_modules/@storybook/cli/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/cli/node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", @@ -11460,27 +11430,6 @@ "node": ">=10" } }, - "node_modules/@storybook/cli/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/cli/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11493,21 +11442,6 @@ "node": ">=8" } }, - "node_modules/@storybook/cli/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@storybook/client-logger": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.20.tgz", @@ -11556,29 +11490,6 @@ "type-fest": "^2.19.0" } }, - "node_modules/@storybook/codemod/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@storybook/codemod/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/codemod/node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", @@ -11594,27 +11505,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@storybook/codemod/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/codemod/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/codemod/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -11627,21 +11517,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/codemod/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@storybook/components": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.20.tgz", @@ -14698,6 +14573,28 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/@typescript-eslint/utils/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -15202,7 +15099,6 @@ "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" }, @@ -15240,7 +15136,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -15447,28 +15342,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -15521,7 +15394,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, "engines": { "node": ">=8" } @@ -15531,17 +15403,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -16703,7 +16564,6 @@ "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", @@ -17970,18 +17830,20 @@ } }, "node_modules/cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.0.0.tgz", + "integrity": "sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==", + "dev": true, "dependencies": { - "cross-spawn": "^6.0.5" + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" }, "bin": { "cross-env": "dist/bin/cross-env.js", "cross-env-shell": "dist/bin/cross-env-shell.js" }, "engines": { - "node": ">=4.0" + "node": ">=20" } }, "node_modules/cross-fetch": { @@ -18026,18 +17888,16 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">= 8" } }, "node_modules/crypto-js": { @@ -19321,20 +19181,6 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -19519,8 +19365,7 @@ "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "node_modules/deepmerge": { "version": "4.2.2", @@ -19685,25 +19530,6 @@ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -19811,7 +19637,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -20097,7 +19922,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, @@ -20109,7 +19933,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, "engines": { "node": ">=6" } @@ -20954,6 +20777,28 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/eslint-plugin-storybook/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-plugin-storybook/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -21007,7 +20852,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -21022,7 +20866,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, "engines": { "node": ">=4" } @@ -21109,7 +20952,6 @@ "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } @@ -21118,7 +20960,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -21131,7 +20972,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -21147,7 +20987,6 @@ "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" }, @@ -21162,7 +21001,6 @@ "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" }, @@ -21174,7 +21012,6 @@ "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" }, @@ -21185,28 +21022,12 @@ "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/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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" }, @@ -21218,7 +21039,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -21232,7 +21052,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, "engines": { "node": ">=10" } @@ -21241,7 +21060,6 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -21256,7 +21074,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -21266,7 +21083,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -21276,7 +21092,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -21288,7 +21103,6 @@ "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -21303,7 +21117,6 @@ "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" } @@ -21312,7 +21125,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, "engines": { "node": ">= 4" } @@ -21321,7 +21133,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -21330,7 +21141,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -21342,7 +21152,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -21355,7 +21164,6 @@ "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" }, @@ -21367,7 +21175,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21380,20 +21187,10 @@ "node": ">= 0.8.0" } }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -21402,7 +21199,6 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -21413,32 +21209,10 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -21450,7 +21224,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -21458,26 +21231,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/eslint/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 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/espree": { "version": "10.4.0", @@ -21536,7 +21293,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -21611,20 +21367,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/execa/node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -21634,51 +21376,6 @@ "node": ">=10.17.0" } }, - "node_modules/execa/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/exenv": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", @@ -22007,8 +21704,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "node_modules/fast-xml-parser": { "version": "4.2.5", @@ -22087,7 +21783,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -22287,7 +21982,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -22300,7 +21994,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -22314,8 +22007,7 @@ "node_modules/flatted": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", - "dev": true + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" }, "node_modules/flatten": { "version": "1.0.2", @@ -22386,50 +22078,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -22442,21 +22090,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", @@ -22706,8 +22339,7 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "node_modules/functions-have-names": { "version": "1.2.3", @@ -22853,17 +22485,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/giget": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", @@ -23076,44 +22697,6 @@ "node": ">=0.10.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "deprecated": "this library is no longer supported", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -24019,7 +23602,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -24808,7 +24390,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -25178,6 +24760,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-circus/node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -27020,6 +26619,12 @@ "node": ">= 0.6.0" } }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "peer": true + }, "node_modules/js-beautify": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.8.tgz", @@ -27113,7 +26718,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -27418,9 +27022,9 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "bin": { "jsesc": "bin/jsesc" }, @@ -27512,8 +27116,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "node_modules/json5": { "version": "2.2.3", @@ -27803,20 +27406,6 @@ "node": ">= 6" } }, - "node_modules/lint-staged/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/lint-staged/node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -27873,36 +27462,6 @@ "node": ">=0.10.0" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/lint-staged/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -27915,21 +27474,6 @@ "node": ">=8" } }, - "node_modules/lint-staged/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/listr2": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.10.0.tgz", @@ -27991,8 +27535,7 @@ "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "node_modules/lodash.curry": { "version": "4.1.1", @@ -28024,8 +27567,7 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/lodash.template": { "version": "4.5.0", @@ -28049,8 +27591,7 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -30490,8 +30031,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "node_modules/natural-compare-lite": { "version": "1.4.0", @@ -30512,11 +30052,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, "node_modules/nise": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", @@ -30781,15 +30316,6 @@ "node": ">=8" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -30840,20 +30366,6 @@ "node": "^14.16.0 || >=16.10.0" } }, - "node_modules/nypm/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/nypm/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -30964,36 +30476,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nypm/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nypm/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nypm/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/nypm/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -31018,21 +30500,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nypm/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", @@ -31713,11 +31180,11 @@ } }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { @@ -31792,9 +31259,9 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "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.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -33336,7 +32803,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -34559,7 +34025,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, "engines": { "node": ">=8" }, @@ -34869,78 +34334,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -35488,22 +34881,22 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shortid": { @@ -35674,7 +35067,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -35691,7 +35083,6 @@ "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" }, @@ -35706,7 +35097,6 @@ "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" }, @@ -35717,8 +35107,7 @@ "node_modules/slice-ansi/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/slick": { "version": "1.12.2", @@ -35862,8 +35251,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "node_modules/stable": { "version": "0.1.8", @@ -36267,7 +35655,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -36404,7 +35791,6 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, "dependencies": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", @@ -36421,7 +35807,6 @@ "version": "8.6.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -36436,8 +35821,7 @@ "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/tapable": { "version": "2.2.1", @@ -36719,8 +36103,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "node_modules/through": { "version": "2.3.8", @@ -36897,6 +36280,20 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typed-array-byte-length": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", @@ -36916,6 +36313,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -36923,11 +36361,10 @@ "dev": true }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -37412,8 +36849,7 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", @@ -37887,7 +37323,7 @@ "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-html-community": "0.0.8", "html-entities": "^2.1.0", @@ -38044,14 +37480,17 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { @@ -38160,7 +37599,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -41720,14 +41158,15 @@ } }, "@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.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "requires": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { @@ -42002,7 +41441,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -42011,9 +41449,12 @@ } }, "@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.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "requires": { + "@babel/types": "^7.28.2" + } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.24.7", @@ -43139,7 +42580,8 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "requires": {} }, "semver": { "version": "6.3.1", @@ -43242,20 +42684,17 @@ } }, "@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.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "requires": { - "@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", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" } }, "@babel/types": { @@ -43563,13 +43002,20 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "dev": true + "dev": true, + "requires": {} }, "@emotion/weak-memoize": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, + "@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "dev": true + }, "@esbuild/darwin-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", @@ -43596,7 +43042,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -43612,20 +43057,17 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -43636,7 +43078,6 @@ "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -43644,14 +43085,12 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, @@ -43709,7 +43148,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -43719,8 +43157,7 @@ "@humanwhocodes/object-schema": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" }, "@isaacs/cliui": { "version": "8.0.2", @@ -44795,19 +44232,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-id": { "version": "1.1.0", @@ -44840,7 +44280,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-use-controllable-state": { "version": "1.1.0", @@ -44855,7 +44296,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -44902,7 +44344,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -44955,7 +44398,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -44979,7 +44423,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-use-controllable-state": { "version": "1.1.0", @@ -45017,19 +44462,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -45053,7 +44501,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-use-controllable-state": { "version": "1.1.0", @@ -45091,19 +44540,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "dev": true + "dev": true, + "requires": {} }, "@radix-ui/react-primitive": { "version": "2.0.0", @@ -46979,17 +46431,6 @@ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -47039,12 +46480,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, "prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", @@ -47057,21 +46492,6 @@ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -47080,15 +46500,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -47132,58 +46543,17 @@ "type-fest": "^2.19.0" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, "prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -47633,7 +47003,8 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -48045,7 +47416,8 @@ "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.20.tgz", "integrity": "sha512-SRvPDr9VWcS24ByQOVmbfZ655y5LvjXRlsF1I6Pr9YZybLfYbu3L5IicfEHT4A8lMdghzgbPFVQaJez46DTrkg==", - "dev": true + "dev": true, + "requires": {} }, "@storybook/react-webpack5": { "version": "7.6.20", @@ -48294,49 +47666,57 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-remove-jsx-attribute": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-svg-dynamic-title": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-transform-react-native-svg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-plugin-transform-svg-component": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", - "dev": true + "dev": true, + "requires": {} }, "@svgr/babel-preset": { "version": "6.2.0", @@ -48770,7 +48150,8 @@ "version": "14.5.2", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", - "dev": true + "dev": true, + "requires": {} }, "@trysound/sax": { "version": "0.2.0", @@ -49465,6 +48846,22 @@ "semver": "^7.3.7" }, "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, "semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -49618,7 +49015,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.4.1", @@ -49633,7 +49031,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true + "dev": true, + "requires": {} }, "@xmldom/xmldom": { "version": "0.7.11", @@ -49752,12 +49151,14 @@ "acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==" + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} }, "acorn-walk": { "version": "8.3.4", @@ -49831,7 +49232,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-escapes": { "version": "4.3.2", @@ -49864,7 +49266,6 @@ "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, "requires": { "color-convert": "^1.9.0" } @@ -49895,7 +49296,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -50050,25 +49450,6 @@ "is-array-buffer": "^3.0.4" } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "optional": true, - "peer": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -50119,22 +49500,13 @@ "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true, - "peer": true - }, "async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -50306,7 +49678,8 @@ "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true + "dev": true, + "requires": {} }, "babel-jest": { "version": "29.7.0", @@ -50998,7 +50371,6 @@ "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, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -51418,7 +50790,8 @@ "codemirror-colorpicker": { "version": "1.9.80", "resolved": "https://registry.npmjs.org/codemirror-colorpicker/-/codemirror-colorpicker-1.9.80.tgz", - "integrity": "sha512-7lGqNxf5haBJXLnVR1ynPiPkN2d1Whm0jdy8Z9QsSOhRWVyK2C2ihgm1dX4DCks57ht/jKMdpL9lYv+zAphxWQ==" + "integrity": "sha512-7lGqNxf5haBJXLnVR1ynPiPkN2d1Whm0jdy8Z9QsSOhRWVyK2C2ihgm1dX4DCks57ht/jKMdpL9lYv+zAphxWQ==", + "requires": {} }, "collect-v8-coverage": { "version": "1.0.2", @@ -51632,7 +51005,8 @@ "linkifyjs": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", - "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==" + "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==", + "requires": {} } } }, @@ -51924,11 +51298,13 @@ } }, "cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.0.0.tgz", + "integrity": "sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==", + "dev": true, "requires": { - "cross-spawn": "^6.0.5" + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" } }, "cross-fetch": { @@ -51964,15 +51340,13 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "crypto-js": { @@ -52186,7 +51560,8 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "dev": true + "dev": true, + "requires": {} }, "css-select": { "version": "4.3.0", @@ -52366,25 +51741,29 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true + "dev": true, + "requires": {} }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-merge-longhand": { "version": "5.1.4", @@ -52452,7 +51831,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true + "dev": true, + "requires": {} }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -52765,7 +52145,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true + "dev": true, + "requires": {} }, "csso": { "version": "4.2.0", @@ -52831,17 +52212,6 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -52978,8 +52348,7 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "deepmerge": { "version": "4.2.2", @@ -53099,22 +52468,6 @@ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true, - "peer": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "optional": true, - "peer": true - }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -53192,7 +52545,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -53446,7 +52798,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "requires": { "ansi-colors": "^4.1.1" }, @@ -53454,8 +52805,7 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" } } }, @@ -53781,7 +53131,6 @@ "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, "requires": { "@babel/highlight": "^7.10.4" } @@ -53789,14 +53138,12 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -53806,7 +53153,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -53815,7 +53161,6 @@ "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, "requires": { "has-flag": "^4.0.0" } @@ -53826,7 +53171,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -53834,31 +53178,17 @@ "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 - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -53867,14 +53197,12 @@ "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -53884,22 +53212,19 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -53908,7 +53233,6 @@ "version": "13.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -53916,26 +53240,22 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -53944,7 +53264,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -53954,7 +53273,6 @@ "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, "requires": { "yallist": "^4.0.0" } @@ -53963,7 +53281,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -53973,47 +53290,23 @@ "word-wrap": "^1.2.3" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -54021,23 +53314,12 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -54076,7 +53358,8 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", - "dev": true + "dev": true, + "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.9", @@ -54339,6 +53622,75 @@ "@typescript-eslint/utils": "^5.45.0", "requireindex": "^1.1.0", "ts-dedent": "^2.2.0" + }, + "dependencies": { + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "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, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "eslint-scope": { @@ -54354,7 +53706,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" }, @@ -54362,8 +53713,7 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" } } }, @@ -54446,7 +53796,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" } @@ -54496,52 +53845,11 @@ "strip-final-newline": "^2.0.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -54807,8 +54115,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-xml-parser": { "version": "4.2.5", @@ -54868,7 +54175,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "requires": { "flat-cache": "^3.0.4" } @@ -55026,7 +54332,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -55036,7 +54341,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -55046,8 +54350,7 @@ "flatted": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", - "dev": true + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" }, "flatten": { "version": "1.0.2", @@ -55084,52 +54387,11 @@ "signal-exit": "^4.0.1" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -55314,8 +54576,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "functions-have-names": { "version": "1.2.3", @@ -55411,17 +54672,6 @@ "get-intrinsic": "^1.2.6" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "giget": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", @@ -55587,34 +54837,6 @@ } } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true, - "peer": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "optional": true, - "peer": true - }, "has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -56159,7 +55381,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.1.13", @@ -56267,8 +55490,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "4.0.0", @@ -56790,7 +56012,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -57058,6 +56280,19 @@ "color-convert": "^2.0.1" } }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -57087,7 +56322,8 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true + "dev": true, + "requires": {} }, "has-flag": { "version": "4.0.0", @@ -57744,7 +56980,8 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "29.6.3", @@ -58400,6 +57637,12 @@ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" }, + "jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "peer": true + }, "js-beautify": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.8.tgz", @@ -58469,7 +57712,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -58682,7 +57924,8 @@ "ws": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==" + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "requires": {} } } }, @@ -58768,8 +58011,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json5": { "version": "2.2.3", @@ -58988,17 +58230,6 @@ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -59037,27 +58268,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -59066,15 +58276,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -59129,8 +58330,7 @@ "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "lodash.curry": { "version": "4.1.1", @@ -59162,8 +58362,7 @@ "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "lodash.template": { "version": "4.5.0", @@ -59187,8 +58386,7 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" }, "lodash.uniq": { "version": "4.5.0", @@ -59403,7 +58601,8 @@ "version": "7.4.7", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", - "dev": true + "dev": true, + "requires": {} }, "matchmediaquery": { "version": "0.3.1", @@ -60963,8 +60162,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "natural-compare-lite": { "version": "1.4.0", @@ -60982,11 +60180,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, "nise": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", @@ -61206,14 +60399,6 @@ "dev": true, "requires": { "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - } } }, "nth-check": { @@ -61254,17 +60439,6 @@ "ufo": "^1.5.3" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -61332,27 +60506,6 @@ "mimic-fn": "^4.0.0" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -61364,15 +60517,6 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -61877,9 +61021,9 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -62271,7 +61415,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-focus/-/postcss-focus-5.0.1.tgz", "integrity": "sha512-iVP+4VLenlI0tHHJD+7HyE+7pQ6Hlg3+Zm/xTwNE1LT7OgmYC4r1ale6AnEkABGNKKE3j1LkF/BNcv89lDoICw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-focus-visible": { "version": "4.0.0", @@ -62561,7 +61706,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.5", @@ -63087,8 +62233,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prompts": { "version": "2.4.2", @@ -63380,7 +62525,8 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true + "dev": true, + "requires": {} }, "react-docgen": { "version": "7.0.3", @@ -63421,7 +62567,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true + "dev": true, + "requires": {} }, "react-dock": { "version": "0.6.0", @@ -63487,7 +62634,8 @@ "react-ga": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.0.tgz", - "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==" + "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==", + "requires": {} }, "react-helmet": { "version": "5.2.1", @@ -63512,7 +62660,8 @@ "react-icons": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz", - "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==" + "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==", + "requires": {} }, "react-inspector": { "version": "5.1.1", @@ -63958,9 +63107,10 @@ "redux-thunk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==" + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "requires": {} }, - "reflect.getprototypeof": { + "reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", @@ -64022,8 +63172,7 @@ "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "regexpu-core": { "version": "5.3.2", @@ -64252,66 +63401,6 @@ } } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "optional": true, - "peer": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "optional": true, - "peer": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -64718,17 +63807,17 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shortid": { "version": "2.2.17", @@ -64847,7 +63936,8 @@ "sinon-mongoose": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/sinon-mongoose/-/sinon-mongoose-2.3.0.tgz", - "integrity": "sha512-d0rrL53wuDDs91GMCFAvQam64IpdVfkaxA4cGLTZfw1d5tTg6+F/D7F080d1n3d1gSHJBZLUf9pGpijC/x7xKQ==" + "integrity": "sha512-d0rrL53wuDDs91GMCFAvQam64IpdVfkaxA4cGLTZfw1d5tTg6+F/D7F080d1n3d1gSHJBZLUf9pGpijC/x7xKQ==", + "requires": {} }, "sisteransi": { "version": "1.0.5", @@ -64865,7 +63955,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -64876,7 +63965,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -64885,7 +63973,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -64893,8 +63980,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -65012,8 +64098,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "stable": { "version": "0.1.8", @@ -65111,7 +64196,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/storybook-addon-theme-playground/-/storybook-addon-theme-playground-3.1.0.tgz", "integrity": "sha512-LYdhiDQRnRiRg52An1QCmyEBF9hBZcIAdEOaXF9oe86BUZTwKxJHa3nbKsmJ62qnbG8igTin4FOQqhyiENCabw==", - "dev": true + "dev": true, + "requires": {} }, "stream-shift": { "version": "1.0.3", @@ -65315,8 +64401,7 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "strnum": { "version": "1.0.5", @@ -65415,7 +64500,6 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", @@ -65429,7 +64513,6 @@ "version": "8.6.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -65440,8 +64523,7 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" } } }, @@ -65646,8 +64728,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "through": { "version": "2.3.8", @@ -65695,10 +64776,13 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } }, "tocbot": { "version": "4.28.2", @@ -65848,11 +64932,10 @@ "dev": true }, "typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, - "peer": true + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true }, "ufo": { "version": "1.5.3", @@ -66196,8 +65279,7 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { "version": "9.3.0", @@ -66571,7 +65653,7 @@ "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", - "dev": true, + "devOptional": true, "requires": { "ansi-html-community": "0.0.8", "html-entities": "^2.1.0", @@ -66667,9 +65749,9 @@ } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } @@ -66757,8 +65839,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0",