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/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/Editor/index.jsx b/client/modules/IDE/components/Editor/index.jsx index 76bf2f03f2..a8d851d62c 100644 --- a/client/modules/IDE/components/Editor/index.jsx +++ b/client/modules/IDE/components/Editor/index.jsx @@ -73,6 +73,12 @@ import { EditorContainer, EditorHolder } from './MobileEditor'; import { FolderIcon } from '../../../../common/icons'; import IconButton from '../../../../common/IconButton'; +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); window.JSHINT = JSHINT; @@ -109,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}`, @@ -154,6 +161,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', { @@ -172,6 +189,7 @@ class Editor extends React.Component { [`Shift-${metaKey}-E`]: (cm) => { cm.getInputField().blur(); }, + F2: (cm) => this.renameVariable(cm), [`Shift-Tab`]: false, [`${metaKey}-Enter`]: () => null, [`Shift-${metaKey}-Enter`]: () => null, @@ -209,7 +227,13 @@ class Editor extends React.Component { } this._cm.on('keydown', (_cm, e) => { - // Show hint + if ( + ((e.ctrlKey || e.metaKey) && e.key === 'v') || + e.ctrlKey || + e.altKey + ) { + return; + } const mode = this._cm.getOption('mode'); if (/^[a-z]$/i.test(e.key) && (mode === 'css' || mode === 'javascript')) { this.showHint(_cm); @@ -395,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( @@ -415,6 +442,7 @@ class Editor extends React.Component { } } }; + const removeFocusedLinkElement = () => { if (focusedLinkElement) { focusedLinkElement.classList.remove('focused-hint-link'); @@ -437,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); @@ -461,30 +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 = 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); - } + 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() { @@ -522,6 +544,27 @@ 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; + } + + const sel = cm.listSelections()[0]; + const fromPos = + CodeMirror.cmpPos(sel.anchor, sel.head) <= 0 ? sel.anchor : sel.head; + + showRenameDialog(tokenType, 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 new file mode 100644 index 0000000000..8b4af9e1f7 --- /dev/null +++ b/client/modules/IDE/components/contextAwareHinter.js @@ -0,0 +1,190 @@ +/* eslint-disable */ +import getContext from './getContext'; +import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; +import classMap from './p5-instance-methods-and-creators.json'; + +const scopeMap = require('./p5-scope-function-access-map.json'); + +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$]*)?$/ + ); + return match ? match[1] : null; +} + +export default function contextAwareHinter(cm, options = {}) { + const { + variableToP5ClassMap = {}, + scopeToDeclaredVarsMap = {}, + userDefinedFunctionMetadata = {}, + userDefinedClassMetadata = {} + } = p5CodeAstAnalyzer(cm) || {}; + + const { hinter } = options; + if (!hinter || typeof hinter.search !== 'function') { + return []; + } + + const baseExpression = getExpressionBeforeCursor(cm); + + if (baseExpression) { + const className = variableToP5ClassMap[baseExpression]; + const userClassEntry = Object.values(userDefinedClassMetadata).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); + 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; + from = { line: cursor.line, ch: methodStart }; + } else { + from = cursor; + } + + const to = { line: cursor.line, ch: cursor.ch }; + const typed = dotMatch?.[1]?.toLowerCase() || ''; + + const methodHints = methods + .filter((method) => method.toLowerCase().startsWith(typed)) + .map((method) => ({ + item: { + text: method, + type: 'fun', + isMethod: true + }, + displayText: method, + from, + to + })); + + return methodHints; + } + + const { line, ch } = cm.getCursor(); + const { string } = cm.getTokenAt({ line, ch }); + const currentWord = string.trim(); + + const currentContext = getContext(cm); + const allHints = hinter.search(currentWord); + + // const whitelist = scopeMap[currentContext]?.whitelist || []; + const blacklist = scopeMap[currentContext]?.blacklist || []; + + const lowerCurrentWord = currentWord.toLowerCase(); + + function isInScope(varName) { + return Object.entries(scopeToDeclaredVarsMap).some( + ([scope, vars]) => + varName in vars && (scope === 'global' || scope === currentContext) + ); + } + + const allVarNames = Array.from( + new Set( + Object.values(scopeToDeclaredVarsMap) + .map((s) => Object.keys(s)) + .flat() + .filter((name) => typeof name === 'string') + ) + ); + + const varHints = allVarNames + .filter( + (varName) => + varName.toLowerCase().startsWith(lowerCurrentWord) && isInScope(varName) + ) + .map((varName) => { + const isFunc = + scopeToDeclaredVarsMap[currentContext]?.[varName] === 'fun' || + (!scopeToDeclaredVarsMap[currentContext]?.[varName] && + scopeToDeclaredVarsMap['global']?.[varName] === 'fun'); + + const baseItem = isFunc + ? { ...userDefinedFunctionMetadata[varName] } + : { + text: varName, + type: 'var', + params: [], + p5: false + }; + + return { + item: baseItem, + isBlacklisted: blacklist.includes(varName) + }; + }); + + const filteredHints = allHints + .filter( + (h) => + h && + h.item && + typeof h.item.text === 'string' && + h.item.text.toLowerCase().startsWith(lowerCurrentWord) + ) + .map((hint) => { + const name = hint.item?.text || ''; + const isBlacklisted = blacklist.includes(name); + + return { + ...hint, + isBlacklisted + }; + }); + + const combinedHints = [...varHints, ...filteredHints]; + + const typePriority = { + fun: 0, + var: 1, + keyword: 2, + other: 3 + }; + + const sorted = combinedHints.sort((a, b) => { + 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 sorted; +} diff --git a/client/modules/IDE/components/getContext.js b/client/modules/IDE/components/getContext.js new file mode 100644 index 0000000000..beddef71f7 --- /dev/null +++ b/client/modules/IDE/components/getContext.js @@ -0,0 +1,44 @@ +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; + +export default function getContext(_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'] + }); + } catch (e) { + 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(); + } + } + }); + + return context; +} 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 new file mode 100644 index 0000000000..7d80f2b3b2 --- /dev/null +++ b/client/modules/IDE/components/jump-to-definition.js @@ -0,0 +1,196 @@ +/* eslint-disable */ +import p5CodeAstAnalyzer from './p5CodeAstAnalyzer'; +import * as parser from '@babel/parser'; +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 '../../../../client/storeInstance'; + +const traverse = require('@babel/traverse').default; + +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; + const varName = token.string; + + if (!tokenType || tokenType === 'def') { + announceToScreenReader(`Already at definition of ${varName}`); + return; + } + + const ast = getAST(cm); + const { scopeToDeclaredVarsMap = {}, userDefinedFunctionMetadata = {} } = + p5CodeAstAnalyzer(cm) || {}; + + const currentContext = getContext(cm, ast, pos, scopeToDeclaredVarsMap); + const isUserFunction = !!userDefinedFunctionMetadata[varName]; + const isDeclaredVar = + scopeToDeclaredVarsMap[currentContext]?.[varName] !== undefined; + + let found = false; + + // search project-wide definitions (script load order) + 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; + } + } + } + } + + // Search in current file, same context + traverse(ast, { + VariableDeclarator(path) { + if (found) return; + + const { node } = path; + if (node.id.name === varName && node.loc) { + const defPos = cm.posFromIndex(node.start); + const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); + if (defContext === currentContext) { + found = true; + announceJump(cm, pos, defPos, varName); + } + } + }, + + FunctionDeclaration(path) { + if (found) return; + + const { node } = path; + + if (node.id?.name === varName) { + const defPos = cm.posFromIndex(node.start); + const defContext = getContext(cm, ast, defPos, scopeToDeclaredVarsMap); + if (defContext === currentContext) { + found = true; + announceJump(cm, pos, defPos, varName); + } + } + + if (!node.params || !node.loc) return; + for (const param of node.params) { + if (param.name === varName && param.loc) { + const defPos = cm.posFromIndex(param.start); + const defContext = getContext( + cm, + ast, + defPos, + scopeToDeclaredVarsMap + ); + if (defContext === currentContext) { + found = true; + announceJump(cm, pos, defPos, varName); + } + } + } + } + }); + + // Fallback search in current file + 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; + announceJump(cm, pos, defPos, varName); + } + }, + + FunctionDeclaration(path) { + if (found) return; + + const { node } = path; + if (node.id?.name === varName) { + const defPos = cm.posFromIndex(node.start); + found = true; + announceJump(cm, pos, defPos, varName); + } + } + }); + } + + if (!found) { + announceToScreenReader(`No definition found for ${varName}`, true); + } +} diff --git a/client/modules/IDE/components/p5-instance-methods-and-creators.json b/client/modules/IDE/components/p5-instance-methods-and-creators.json new file mode 100644 index 0000000000..2e96ed4205 --- /dev/null +++ b/client/modules/IDE/components/p5-instance-methods-and-creators.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/p5-reference-functions.json b/client/modules/IDE/components/p5-reference-functions.json new file mode 100644 index 0000000000..478b264434 --- /dev/null +++ b/client/modules/IDE/components/p5-reference-functions.json @@ -0,0 +1,379 @@ +{ + "functions": { + "list": [ + "abs", + "accelerationX", + "accelerationY", + "accelerationZ", + "acos", + "alpha", + "ambientLight", + "ambientMaterial", + "angleMode", + "append", + "applyMatrix", + "arc", + "arrayCopy", + "asin", + "atan", + "atan2", + "background", + "baseColorShader", + "baseMaterialShader", + "baseNormalShader", + "baseStrokeShader", + "beginClip", + "beginContour", + "beginGeometry", + "beginShape", + "bezier", + "bezierDetail", + "bezierPoint", + "bezierTangent", + "bezierVertex", + "blend", + "blendMode", + "blue", + "boolean", + "box", + "brightness", + "buildGeometry", + "byte", + "camera", + "ceil", + "changed", + "char", + "circle", + "class", + "clear", + "clearDepth", + "clearStorage", + "clip", + "color", + "colorMode", + "concat", + "cone", + "console", + "constrain", + "copy", + "cos", + "createA", + "createAudio", + "createButton", + "createCamera", + "createCanvas", + "createCapture", + "createCheckbox", + "createColorPicker", + "createConvolver", + "createDiv", + "createElement", + "createFileInput", + "createFilterShader", + "createFramebuffer", + "createGraphics", + "createImage", + "createImg", + "createInput", + "createModel", + "createNumberDict", + "createP", + "createRadio", + "createSelect", + "createShader", + "createSlider", + "createSpan", + "createStringDict", + "createVector", + "createVideo", + "createWriter", + "cursor", + "curve", + "curveDetail", + "curvePoint", + "curveTangent", + "curveTightness", + "curveVertex", + "cylinder", + "day", + "debugMode", + "degrees", + "deltaTime", + "describe", + "describeElement", + "deviceMoved", + "deviceOrientation", + "deviceShaken", + "deviceTurned", + "directionalLight", + "disableFriendlyErrors", + "displayDensity", + "displayHeight", + "displayWidth", + "dist", + "doubleClicked", + "draw", + "drawingContext", + "ellipse", + "ellipseMode", + "ellipsoid", + "emissiveMaterial", + "endClip", + "endContour", + "endGeometry", + "endShape", + "erase", + "exitPointerLock", + "exp", + "fill", + "filter", + "float", + "floor", + "focused", + "for", + "fract", + "frameCount", + "frameRate", + "freeGeometry", + "freqToMidi", + "frustum", + "fullscreen", + "function", + "get", + "getAudioContext", + "getItem", + "getOutputVolume", + "getTargetFrameRate", + "getURL", + "getURLParams", + "getURLPath", + "green", + "gridOutput", + "height", + "hex", + "hour", + "httpDo", + "httpGet", + "httpPost", + "hue", + "if", + "image", + "imageLight", + "imageMode", + "input", + "int", + "isLooping", + "join", + "key", + "keyCode", + "keyIsDown", + "keyIsPressed", + "keyPressed", + "keyReleased", + "keyTyped", + "lerp", + "lerpColor", + "let", + "lightFalloff", + "lightness", + "lights", + "line", + "linePerspective", + "loadBytes", + "loadFont", + "loadImage", + "loadJSON", + "loadModel", + "loadPixels", + "loadShader", + "loadSound", + "loadStrings", + "loadTable", + "loadXML", + "log", + "loop", + "mag", + "map", + "match", + "matchAll", + "max", + "metalness", + "midiToFreq", + "millis", + "min", + "minute", + "model", + "month", + "mouseButton", + "mouseClicked", + "mouseDragged", + "mouseIsPressed", + "mouseMoved", + "mousePressed", + "mouseReleased", + "mouseWheel", + "mouseX", + "mouseY", + "movedX", + "movedY", + "nf", + "nfc", + "nfp", + "nfs", + "noCanvas", + "noCursor", + "noDebugMode", + "noErase", + "noFill", + "noise", + "noiseDetail", + "noiseSeed", + "noLights", + "noLoop", + "norm", + "normal", + "normalMaterial", + "noSmooth", + "noStroke", + "noTint", + "orbitControl", + "ortho", + "outputVolume", + "pAccelerationX", + "pAccelerationY", + "pAccelerationZ", + "paletteLerp", + "panorama", + "perspective", + "pixelDensity", + "pixels", + "plane", + "pmouseX", + "pmouseY", + "point", + "pointLight", + "pop", + "pow", + "preload", + "print", + "pRotationX", + "pRotationY", + "pRotationZ", + "push", + "pwinMouseX", + "pwinMouseY", + "quad", + "quadraticVertex", + "radians", + "random", + "randomGaussian", + "randomSeed", + "rect", + "rectMode", + "red", + "redraw", + "remove", + "removeElements", + "removeItem", + "requestPointerLock", + "resetMatrix", + "resetShader", + "resizeCanvas", + "reverse", + "rotate", + "rotateX", + "rotateY", + "rotateZ", + "rotationX", + "rotationY", + "rotationZ", + "round", + "sampleRate", + "saturation", + "save", + "saveCanvas", + "saveFrames", + "saveGif", + "saveJSON", + "saveSound", + "saveStrings", + "saveTable", + "scale", + "second", + "select", + "selectAll", + "set", + "setAttributes", + "setBPM", + "setCamera", + "setMoveThreshold", + "setShakeThreshold", + "setup", + "shader", + "shearX", + "shearY", + "shininess", + "shorten", + "shuffle", + "sin", + "smooth", + "sort", + "soundFormats", + "soundOut", + "specularColor", + "specularMaterial", + "sphere", + "splice", + "split", + "splitTokens", + "spotLight", + "sq", + "sqrt", + "square", + "storeItem", + "str", + "stroke", + "strokeCap", + "strokeJoin", + "strokeWeight", + "subset", + "tan", + "text", + "textAlign", + "textAscent", + "textDescent", + "textFont", + "textLeading", + "textOutput", + "textSize", + "textStyle", + "texture", + "textureMode", + "textureWrap", + "textWidth", + "textWrap", + "tint", + "torus", + "touchEnded", + "touches", + "touchMoved", + "touchStarted", + "translate", + "triangle", + "trim", + "turnAxis", + "unchar", + "unhex", + "updatePixels", + "userStartAudio", + "vertex", + "webglVersion", + "while", + "width", + "windowHeight", + "windowResized", + "windowWidth", + "winMouseX", + "winMouseY", + "year" +]}} \ No newline at end of file diff --git a/client/modules/IDE/components/p5-scope-function-access-map.json b/client/modules/IDE/components/p5-scope-function-access-map.json new file mode 100644 index 0000000000..f2a7a18502 --- /dev/null +++ b/client/modules/IDE/components/p5-scope-function-access-map.json @@ -0,0 +1,479 @@ +{ + "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" + ], + "blacklist":[ + "preload", + "setup", + "draw" + ] + }, + "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/p5CodeAstAnalyzer.js b/client/modules/IDE/components/p5CodeAstAnalyzer.js new file mode 100644 index 0000000000..a1535c4fde --- /dev/null +++ b/client/modules/IDE/components/p5CodeAstAnalyzer.js @@ -0,0 +1,291 @@ +/* eslint-disable */ +import { debounce } from 'lodash'; +import * as eslintScope from 'eslint-scope'; +import classMap from './p5-instance-methods-and-creators.json'; + +const parser = require('@babel/parser'); +const traverse = require('@babel/traverse').default; + +const allFuncs = require('./p5-reference-functions.json'); +const allFunsList = new Set(allFuncs.functions.list); + +const functionToClass = {}; +Object.entries(classMap).forEach(([className, classData]) => { + const createMethods = classData.createMethods || []; + createMethods.forEach((fnName) => { + functionToClass[fnName] = className; + }); +}); + +let lastValidResult = { + variableToP5ClassMap: {}, + scopeToDeclaredVarsMap: {}, + userDefinedFunctionMetadata: {}, + userDefinedClassMetadata: {} +}; + +function _p5CodeAstAnalyzer(_cm) { + const code = _cm.getValue(); + let ast; + + try { + ast = parser.parse(code, { + sourceType: 'script', + plugins: ['jsx', 'classProperties'], + ranges: true, + locations: true + }); + } catch (e) { + return lastValidResult; + } + + const variableToP5ClassMap = {}; + const scopeToDeclaredVarsMap = {}; + const userDefinedFunctionMetadata = {}; + const userDefinedClassMetadata = {}; + + 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) => { + if ( + def.type === 'Variable' || + (def.type === 'FunctionName' && !allFunsList.has(def.name.name)) + ) { + if (!scopeToDeclaredVarsMap[scopeName]) { + scopeToDeclaredVarsMap[scopeName] = {}; + } + const defType = def.type === 'FunctionName' ? 'fun' : 'var'; + scopeToDeclaredVarsMap[scopeName][def.name.name] = defType; + } + }); + }); + }); + + 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(), + fields: new Set(), + methods: [], + constructor_params: [], + methodVars: {} + }; + + node.body.body.forEach((element) => { + if (element.type === 'ClassMethod') { + const methodName = element.key.name; + + if (element.kind === 'constructor') { + element.params.forEach((param) => { + if (param.type === 'Identifier') { + classInfo.constructor_params.push(param.name); + } else if ( + param.type === 'AssignmentPattern' && + param.left.type === 'Identifier' + ) { + 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); + } + }); + } + }); + + 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); + + 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; + } + + 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.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); + } + } + }, + path.scope, + path + ); + } + }); + + userDefinedClassMetadata[className] = { + const: Array.from(classInfo.const), + fields: Array.from(classInfo.fields), + methods: classInfo.methods, + constructor_params: classInfo.constructor_params, + initializer: '', + methodVars: classInfo.methodVars + }; + } + } + }); + + traverse(ast, { + AssignmentExpression(path) { + const node = path.node; + if ( + node.left.type === 'Identifier' && + (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]; + const userCls = userDefinedClassMetadata[fnName]; + if (userCls) { + userDefinedClassMetadata[fnName].initializer = varName; + } else if (cls) { + variableToP5ClassMap[varName] = cls; + } + } + }, + + VariableDeclarator(path) { + const node = path.node; + if ( + node.id.type === 'Identifier' && + (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]; + const userCls = userDefinedClassMetadata[fnName]; + if (userCls) { + userDefinedClassMetadata[fnName].initializer = varName; + } else if (cls) { + variableToP5ClassMap[varName] = cls; + } + } + }, + + FunctionDeclaration(path) { + const node = path.node; + if (node.id && node.id.name) { + const fnName = node.id.name; + if (!allFunsList.has(fnName)) { + 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); + + userDefinedFunctionMetadata[fnName] = { + text: fnName, + type: 'fun', + p5: false, + params + }; + + if (!scopeToDeclaredVarsMap[fnName]) { + scopeToDeclaredVarsMap[fnName] = {}; + } + params.forEach((paramObj) => { + if (paramObj && paramObj.p) { + scopeToDeclaredVarsMap[fnName][paramObj.p] = 'param'; + } + }); + } + } + } + }); + + const result = { + variableToP5ClassMap, + scopeToDeclaredVarsMap, + userDefinedFunctionMetadata, + userDefinedClassMetadata + }; + + lastValidResult = result; + return result; +} + +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 new file mode 100644 index 0000000000..2c6c625f52 --- /dev/null +++ b/client/modules/IDE/components/rename-variable.js @@ -0,0 +1,268 @@ +/* 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; + +export function handleRename(fromPos, oldName, newName, cm) { + if (!cm) { + return; + } + const ast = getAST(cm); + startRenaming(cm, ast, fromPos, newName, oldName); +} + +function startRenaming(cm, ast, fromPos, newName, oldName) { + const code = cm.getValue(); + const fromIndex = cm.indexFromPos(fromPos); + const { + scopeToDeclaredVarsMap = {}, + userDefinedClassMetadata = {}, + userDefinedFunctionMetadata = {} + } = p5CodeAstAnalyzer(cm) || {}; + + // Determine the context at the position where rename started + const baseContext = getContext( + cm, + ast, + fromPos, + scopeToDeclaredVarsMap, + userDefinedClassMetadata + ); + + 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, + baseClassContext, + isBaseThis + ); + + const replacements = []; + + traverse(ast, { + Identifier(path) { + const { node, parent } = path; + if (!node.loc || node.name !== oldName) return; + + const startIndex = node.start; + const endIndex = node.end; + + if (node.name !== oldName) return; + + 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 (parent.params.includes(node)) { + } else { + return; + } + } + + if ( + parent.type === 'MemberExpression' && + parent.property === node && + !parent.computed + ) { + 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); + + // Handle renaming inside classes + if (isInsideClassContext) { + 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; + } + } + + if ( + baseMethodName === 'constructor' && + classMeta.constructor_params.includes(oldName) && + isThis === isBaseThis && + baseContext === thisContext + ) { + for (const [methodName, vars] of Object.entries( + classMeta.methodVars || {} + )) { + if (!vars.includes(oldName) && thisContext === methodName) { + shouldRenameMethodVar = true; + } + } + shouldRename = + thisContext === baseContext && + (currentMethodName == 'constructor' || shouldRenameGlobalVar); + } else { + for (const [methodName, vars] of Object.entries( + classMeta.methodVars || {} + )) { + if ( + !vars.includes(oldName) && + baseMethodName === currentMethodName && + isThis === isBaseThis && + baseContext === thisContext + ) { + shouldRename = true; + } + } + } + + // Rename constructor parameters, class fields, and method variables carefully + 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'; + } + // Handle renaming outside classes + 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 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; + + 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; + } + } + + if ( + thisContext in userDefinedClassMetadata && + currentMethodName === 'constructor' && + userDefinedClassMetadata[thisContext]?.constructor_params?.includes( + oldName + ) + ) { + return; + } + + 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({ + from: cm.posFromIndex(startIndex), + to: cm.posFromIndex(endIndex) + }); + } + } + }); + + 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); + } + }); +} diff --git a/client/modules/IDE/components/show-hint.js b/client/modules/IDE/components/show-hint.js index 99f7552006..0afdd41f95 100644 --- a/client/modules/IDE/components/show-hint.js +++ b/client/modules/IDE/components/show-hint.js @@ -7,6 +7,10 @@ // declare global: DOMRect +// The first function (mod) is a wrapper to support different JavaScript environments. +// The second function (inside) contains the actual implementation. +import CodeMirror from 'codemirror'; + (function (mod) { if (typeof exports == 'object' && typeof module == 'object') // CommonJS @@ -16,6 +20,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,13 +31,15 @@ // 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); + 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]; 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(); @@ -42,18 +50,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 +71,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 +108,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,26 +124,35 @@ }, pick: function (data, i) { + // selects an item from the suggestion list var completion = data.list[i], self = this; + this.cm.operation(function () { - if (completion.hint) completion.hint(self.cm, data, completion); - else + const name = completion.item?.text; + + if (completion.hint) { + completion.hint(self.cm, data, completion); + } else { 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(); }); + // 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; @@ -192,6 +216,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) @@ -202,12 +227,13 @@ if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); 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 +258,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 +270,7 @@ }; } + // user defined custom key bindings var custom = completion.options.customKeys; var ourMap = custom ? {} : baseMap; function addBinding(key, val) { @@ -257,6 +284,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,33 +295,43 @@ return ourMap; } - function getHintElement(hintsElement, el) { - while (el && el != hintsElement) { - if (el.nodeName.toUpperCase() === 'LI' && el.parentNode == hintsElement) - return el; - el = el.parentNode; + // hintsElement is the parent for hints and el is the clicked element within that container + function displayHint(name, type, p5, isBlacklistedFunction) { + const linkOrPlaceholder = p5 + ? ` + open ${name} reference + + ` + : ` + no reference for ${name} + `; + + const hintHTML = `
+ ${name} + ${type} + ${linkOrPlaceholder} +
`; + + if (isBlacklistedFunction) { + return `
+ ${hintHTML} +
⚠️use with caution in this context
+
`; + } else { + return `
${hintHTML}
`; } } - function displayHint(name, type, p5) { - return `

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

`; - } - - function getInlineHintSuggestion(focus, tokenLength) { + function getInlineHintSuggestion(cm, focus, token) { + let tokenLength = token.string.length; + if (token.string === '.') { + tokenLength -= 1; + } + const name = focus.item?.text; 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(); @@ -318,17 +357,13 @@ ${ } function changeInlineHint(cm, focus) { - // Copilot-style inline suggestion for autocomplete feature removeInlineHint(cm); const cursor = cm.getCursor(); const token = cm.getTokenAt(cursor); if (token && focus.item) { - const suggestionHTML = getInlineHintSuggestion( - focus, - token.string.length - ); + const suggestionHTML = getInlineHintSuggestion(cm, focus, token); const widgetElement = document.createElement('span'); widgetElement.className = 'autocomplete-inline-hinter'; @@ -336,11 +371,13 @@ ${ const widget = cm.setBookmark(cursor, { widget: widgetElement }); cm.state.inlineHint = widget; - cm.setCursor(cursor); } } + // 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) { this.id = 'cm-complete-' + Math.floor(Math.random(1e6)); this.completion = completion; @@ -365,32 +402,41 @@ ${ 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]; - 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) { - 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; @@ -545,6 +591,13 @@ ${ }) ); + 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..f6a6b7e140 --- /dev/null +++ b/client/modules/IDE/components/showRenameDialog.jsx @@ -0,0 +1,142 @@ +/* eslint-disable */ +import announceToScreenReader from '../utils/ScreenReaderHelper'; +const allFuncs = require('./p5-reference-functions.json'); +const allFunsList = new Set(allFuncs.functions.list); + +export default function showRenameDialog(tokenType, coords, oldName, onSubmit) { + if ( + (allFunsList.has(oldName) && tokenType !== 'p5-variable') || + !isValidIdentifierSelection(oldName, tokenType) + ) { + showTemporaryDialog(coords, 'You cannot rename this element'); + announceToScreenReader(`The word ${oldName} cannot be renamed`, true); + return; + } + + openRenameInputDialog(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`; + 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.setAttribute('aria-label', 'Enter new name'); + input.type = 'text'; + input.value = oldName; + input.style.width = '200px'; + input.style.fontSize = '14px'; + + dialog.appendChild(input); + document.body.appendChild(dialog); + input.focus(); + + announceToScreenReader(`Renaming dialog box opened with word ${oldName}`); + + function cleanup() { + dialog.remove(); + } + + 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}` + ); + } + } + }); +} + +function isValidIdentifierSelection(selection, tokenType) { + if (!selection || selection.trim() === '') return false; + if ( + tokenType === 'comment' || + tokenType === 'atom' || + tokenType === 'string' || + tokenType === 'keyword' + ) + return false; + + if (/\s/.test(selection)) return false; + 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); + cleanupClick(); + cleanupKeys(); + } + + 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 addKeyHandler(keys, onKeyPress) { + function handler(e) { + if (keys.includes(e.key)) { + onKeyPress(e.key); + remove(); + } + } + function remove() { + document.removeEventListener('keydown', handler); + } + document.addEventListener('keydown', handler); + return remove; +} 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') diff --git a/client/modules/IDE/utils/ScreenReaderHelper.jsx b/client/modules/IDE/utils/ScreenReaderHelper.jsx new file mode 100644 index 0000000000..632023442e --- /dev/null +++ b/client/modules/IDE/utils/ScreenReaderHelper.jsx @@ -0,0 +1,26 @@ +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'); + + 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); + } +} diff --git a/client/modules/IDE/utils/renameVariableHelper.jsx b/client/modules/IDE/utils/renameVariableHelper.jsx new file mode 100644 index 0000000000..e41decc19a --- /dev/null +++ b/client/modules/IDE/utils/renameVariableHelper.jsx @@ -0,0 +1,209 @@ +/* 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, + baseClassContext, + isBaseThis +) { + const globalVars = scopeToDeclaredVarsMap['global'] || {}; + if (!globalVars.hasOwnProperty(varName)) { + return false; + } + + const localVars = scopeToDeclaredVarsMap[context] || {}; + if (!(context === 'global') && localVars.hasOwnProperty(varName)) { + return false; + } + + if (baseClassContext) { + const className = context; + let methodName = null; + if (baseClassContext && baseClassContext.includes('.')) { + methodName = baseClassContext.split('.').pop(); + } + const classMeta = userDefinedClassMetadata[className]; + if (classMeta) { + if ( + methodName === 'constructor' && + classMeta.constructor_params?.includes(varName) + ) { + return false; + } + + if ( + methodName && + classMeta.methodVars?.[methodName] && + classMeta.methodVars[methodName].hasOwnProperty(varName) + ) { + return false; + } + + if (classMeta.fields?.includes(varName) && isBaseThis) { + return false; + } + } + } + + 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; + + if (offset >= node.start && offset <= node.end) { + if ( + node.object.type === 'ThisExpression' && + node.property.type === 'Identifier' && + node.property.name === oldName && + !node.computed + ) { + isThisRef = true; + path.stop(); + } + } + } + }); + + 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' + ) { + 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 { + 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; + + if ( + (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') && + offset >= node.start && + offset <= node.end + ) { + const className = node.id?.name || '(anonymous class)'; + classContext = className; + + 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; +} 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/client/styles/components/_hints.scss b/client/styles/components/_hints.scss index 6c01abb721..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; @@ -29,8 +29,74 @@ border-bottom: #{math.div(1, $base-font-size)}rem solid getThemifyVariable('hint-item-border-bottom-color'); } - .hint-name { + .hint-container { + display: flex; + align-items: center; + 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%; + // 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 { + 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 { @@ -156,7 +222,7 @@ } a, .no-link-placeholder { - position: absolute; + // position: absolute; top: 0; right: 0; height: 100%; @@ -174,6 +240,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 } +]; diff --git a/package-lock.json b/package-lock.json index cbd718d09f..5b45285f29 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", @@ -36,14 +40,15 @@ "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", "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.18.2", @@ -165,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", @@ -3929,6 +3935,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", @@ -3938,6 +3958,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", @@ -3948,12 +3978,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "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" @@ -4339,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" @@ -6219,16 +6249,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "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.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.2", "debug": "^4.3.1" }, "engines": { @@ -6562,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", @@ -6624,6 +6660,41 @@ "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==", + "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==", + "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==", + "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", @@ -6701,14 +6772,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", @@ -7788,103 +7851,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", @@ -11358,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", @@ -11451,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", @@ -11487,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", @@ -11520,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", @@ -11583,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", @@ -11621,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", @@ -11654,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", @@ -12866,6 +12714,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", @@ -13919,17 +13776,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", @@ -14263,14 +14109,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", @@ -14735,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", @@ -15032,9 +14892,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" }, @@ -15062,6 +14922,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", @@ -15079,9 +14947,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" } @@ -15106,22 +14977,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", @@ -15277,45 +15132,6 @@ "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", @@ -15526,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", @@ -15572,17 +15366,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", @@ -15620,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", @@ -15803,25 +15575,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.10.3", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", @@ -16386,17 +16139,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", @@ -16763,25 +16505,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", @@ -16827,14 +16550,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", @@ -17472,17 +17187,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", @@ -17687,14 +17391,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", @@ -18134,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": { @@ -18190,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": { @@ -19485,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", @@ -19588,43 +19270,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", @@ -19885,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", @@ -20174,18 +19800,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", @@ -20272,16 +19886,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", @@ -20341,17 +19945,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", @@ -20364,14 +19957,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", @@ -20683,14 +20268,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", @@ -21159,10 +20736,52 @@ "eslint": ">=6" } }, - "node_modules/eslint-scope": { + "node_modules/eslint-plugin-storybook/node_modules/@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, + "dependencies": { + "@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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils/node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "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" @@ -21171,6 +20790,64 @@ "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", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "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": "^5.2.0" + }, + "engines": { + "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", @@ -21279,6 +20956,18 @@ "@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==", + "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", @@ -21335,19 +21024,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "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==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "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", @@ -21359,6 +21035,19 @@ "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==", + "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", @@ -21367,6 +21056,38 @@ "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==", + "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==", + "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==", + "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", @@ -21466,14 +21187,6 @@ "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==", - "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", @@ -21496,25 +21209,6 @@ "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==", - "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==", - "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", @@ -21537,42 +21231,33 @@ "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==", - "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==" }, "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" }, @@ -21581,11 +21266,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": { @@ -21611,14 +21300,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", @@ -21630,22 +21311,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", @@ -21693,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", @@ -21716,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", @@ -22019,17 +21634,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", @@ -22474,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", @@ -22530,32 +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/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", @@ -22689,22 +22223,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", @@ -22840,42 +22358,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", @@ -22974,17 +22456,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", @@ -23014,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", @@ -23150,22 +22610,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", @@ -23253,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", @@ -23363,14 +22769,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", @@ -23794,14 +23192,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", @@ -23825,39 +23215,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", @@ -23879,17 +23236,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", @@ -24275,14 +23621,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", @@ -24716,14 +24054,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", @@ -24975,14 +24305,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", @@ -25068,15 +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=" - }, - "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 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -27311,14 +26625,6 @@ "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", @@ -27420,14 +26726,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", @@ -27810,14 +27108,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", @@ -27828,14 +27118,6 @@ "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 - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -27868,23 +27150,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.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -28141,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", @@ -28211,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", @@ -28253,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", @@ -28630,144 +27836,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", @@ -28777,20 +27845,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", @@ -29346,129 +28400,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", @@ -30170,44 +29101,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", @@ -30220,81 +29113,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", @@ -31184,14 +30002,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.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -31242,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", @@ -31345,191 +30150,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", @@ -31547,189 +30167,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", @@ -31879,29 +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/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", @@ -31952,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", @@ -32076,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", @@ -32130,37 +30500,11 @@ "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", "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", @@ -32836,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": { @@ -32914,14 +31258,6 @@ "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.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -34471,29 +32807,6 @@ "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_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -34762,17 +33075,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", @@ -36032,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", @@ -36198,17 +34428,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", @@ -36395,46 +34614,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": "13.3.3", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", @@ -36503,29 +34682,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", @@ -36634,14 +34790,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", @@ -36733,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": { @@ -37003,22 +35151,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", @@ -37121,33 +35253,6 @@ "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" - } - }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -37223,17 +35328,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.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -38069,7 +36163,7 @@ "is-number": "^7.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=4" } }, "node_modules/tocbot": { @@ -38104,17 +36198,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", @@ -38124,17 +36207,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", @@ -38188,28 +36260,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", @@ -38218,19 +36268,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", @@ -38324,9 +36361,9 @@ "dev": true }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -38462,28 +36499,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", @@ -38887,22 +36902,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", @@ -39422,6 +37421,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", @@ -39459,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": { @@ -39565,17 +37589,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", @@ -43114,12 +41127,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", @@ -43129,12 +41158,12 @@ } }, "@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "requires": { - "@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" @@ -43420,11 +41449,11 @@ } }, "@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==", "requires": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.2" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -44655,16 +42684,16 @@ } }, "@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "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.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, @@ -44981,6 +43010,12 @@ "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", @@ -45019,6 +43054,26 @@ "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==" + }, + "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==" + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "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", @@ -45079,14 +43134,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", @@ -45910,83 +43957,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", @@ -48461,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", @@ -48521,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", @@ -48539,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", @@ -48562,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" - } } } }, @@ -48614,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" - } } } }, @@ -49418,6 +47306,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", @@ -50259,14 +48153,6 @@ "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 - }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -50597,14 +48483,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", @@ -50968,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", @@ -51229,9 +49123,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", @@ -51246,6 +49140,11 @@ "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==" } } }, @@ -51262,9 +49161,12 @@ "requires": {} }, "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", @@ -51280,19 +49182,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", @@ -51403,41 +49292,6 @@ "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", @@ -51596,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", @@ -51639,14 +49474,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", @@ -51680,14 +49507,6 @@ "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", @@ -51820,22 +49639,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.10.3", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", @@ -52249,17 +50052,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", @@ -52541,19 +50333,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", @@ -52582,14 +50361,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", @@ -53059,14 +50830,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", @@ -53227,14 +50990,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", @@ -53543,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": { @@ -53583,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": { @@ -54457,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", @@ -54526,36 +52270,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", @@ -54754,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", @@ -55006,18 +52704,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", @@ -55079,16 +52765,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", @@ -55138,28 +52814,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", @@ -55412,11 +53072,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", @@ -55480,6 +53135,11 @@ "@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==" + }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -55520,26 +53180,47 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "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==" }, + "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" + } + }, "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==" }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "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==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -55609,11 +53290,6 @@ "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==" - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -55627,19 +53303,6 @@ "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==", - "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==" - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -55653,14 +53316,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" }, - "which": { - "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" - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -55967,15 +53622,84 @@ "@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": { - "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": { @@ -56042,24 +53766,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==" } } }, @@ -56074,13 +53798,6 @@ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "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": { @@ -56089,19 +53806,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", @@ -56135,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" - } } } }, @@ -56386,14 +54055,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", @@ -56726,63 +54387,14 @@ "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" - } } } }, - "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", @@ -56877,19 +54489,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", @@ -56990,36 +54589,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", @@ -57086,14 +54655,6 @@ "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", @@ -57111,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", @@ -57222,19 +54772,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", @@ -57300,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", @@ -57369,14 +54878,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", @@ -57692,14 +55193,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", @@ -57719,32 +55212,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", @@ -57760,17 +55227,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", @@ -58048,14 +55504,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", @@ -58347,14 +55795,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", @@ -58514,14 +55954,6 @@ "which-typed-array": "^1.1.16" } }, - "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", @@ -58580,15 +56012,7 @@ "isexe": { "version": "2.0.0", "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 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -60219,14 +57643,6 @@ "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", @@ -60301,14 +57717,6 @@ "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", @@ -60595,14 +58003,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", @@ -60613,14 +58013,6 @@ "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 - }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -60644,20 +58036,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.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -60852,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", @@ -60901,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", @@ -60930,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" - } } } }, @@ -61239,119 +58576,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", @@ -61361,14 +58585,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", @@ -61787,101 +59003,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", @@ -62300,37 +59421,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", @@ -62348,64 +59438,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", @@ -63114,14 +60146,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.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -63156,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", @@ -63249,148 +60268,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", @@ -63408,145 +60285,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", @@ -63661,28 +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 - } - } - }, - "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": { @@ -63723,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", @@ -63801,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", @@ -63833,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" - } } } }, @@ -63850,14 +60525,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", @@ -64354,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", @@ -64419,14 +61086,6 @@ "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.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -65576,26 +62235,6 @@ "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" - } - }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -65795,14 +62434,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", @@ -66770,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", @@ -66899,14 +63470,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", @@ -67045,39 +63608,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": "13.3.3", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", @@ -67111,28 +63641,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", @@ -67221,14 +63729,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", @@ -67307,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", @@ -67512,19 +64012,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", @@ -67613,25 +64100,6 @@ "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" - } - }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -67699,17 +64167,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.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -68353,30 +64810,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", @@ -68420,37 +64858,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", @@ -68520,9 +64932,9 @@ "dev": true }, "typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true }, "ufo": { @@ -68620,28 +65032,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", @@ -68935,19 +65325,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", @@ -69149,6 +65526,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", @@ -69358,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" } @@ -69439,17 +65830,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", diff --git a/package.json b/package.json index 2456718a61..1827b46efb 100644 --- a/package.json +++ b/package.json @@ -183,7 +183,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", @@ -191,6 +193,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", @@ -214,7 +218,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.18.2",