diff --git a/jacdac-ts b/jacdac-ts index 114c157cd679..fddcd796a1b5 160000 --- a/jacdac-ts +++ b/jacdac-ts @@ -1 +1 @@ -Subproject commit 114c157cd6798b3ffd10c0b392b4fbe83e24f924 +Subproject commit fddcd796a1b58bd65e13b91882b2c9089dca2699 diff --git a/src/components/blockly/dsl/dsl.ts b/src/components/blockly/dsl/dsl.ts index e9e2115205a6..f20b041d18b3 100644 --- a/src/components/blockly/dsl/dsl.ts +++ b/src/components/blockly/dsl/dsl.ts @@ -2,8 +2,8 @@ import jsep from "jsep" import { Theme } from "@mui/material" import Blockly, { Block, Workspace, WorkspaceSvg } from "blockly" import { JDService } from "../../../../jacdac-ts/src/jdom/service" -import { RoleEvent } from "../../../../jacdac-ts/src/vm/compile" -import { VMError } from "../../../../jacdac-ts/src/vm/ir" +import { RoleEvent } from "../../devicescript/vm/compile" +import { VMError } from "../../devicescript/vm/ir" import { BlockDefinition, ContentDefinition, diff --git a/src/components/blockly/dsl/loopsdsl.ts b/src/components/blockly/dsl/loopsdsl.ts index ea5f1c52059f..714e228148cd 100644 --- a/src/components/blockly/dsl/loopsdsl.ts +++ b/src/components/blockly/dsl/loopsdsl.ts @@ -1,5 +1,5 @@ -import { toIdentifier } from "../../../../jacdac-ts/src/vm/compile" -import { VMCommand } from "../../../../jacdac-ts/src/vm/ir" +import { toIdentifier } from "../../devicescript/vm/compile" +import { VMCommand } from "../../devicescript/vm/ir" import { BlockReference, CategoryDefinition, @@ -8,7 +8,10 @@ import { SeparatorDefinition, ValueInputDefinition, } from "../toolbox" -import { makeVMBase, processErrors } from "../../devicescript/JacscriptGenerator" +import { + makeVMBase, + processErrors, +} from "../../devicescript/JacscriptGenerator" import BlockDomainSpecificLanguage from "./dsl" import { paletteColorByIndex } from "./palette" diff --git a/src/components/blockly/dsl/servicesbase.ts b/src/components/blockly/dsl/servicesbase.ts index 55e68335483b..c3e25f9fa5a8 100644 --- a/src/components/blockly/dsl/servicesbase.ts +++ b/src/components/blockly/dsl/servicesbase.ts @@ -41,8 +41,8 @@ import { import { toIdentifier, toMemberExpression, -} from "../../../../jacdac-ts/src/vm/compile" -import { VMError } from "../../../../jacdac-ts/src/vm/ir" +} from "../../devicescript/vm/compile" +import { VMError } from "../../devicescript/vm/ir" import NoteField from "../fields/NoteField" import { BlockDefinition, diff --git a/src/components/blockly/dsl/servicesdsl.ts b/src/components/blockly/dsl/servicesdsl.ts index 2f7df6bbe3b4..3cb3fef389ab 100644 --- a/src/components/blockly/dsl/servicesdsl.ts +++ b/src/components/blockly/dsl/servicesdsl.ts @@ -51,7 +51,7 @@ import jsep from "jsep" import { toIdentifier, toMemberExpression, -} from "../../../../jacdac-ts/src/vm/compile" +} from "../../devicescript/vm/compile" import { makeVMBase } from "../../devicescript/JacscriptGenerator" import { arrayConcatMany, toMap } from "../../../../jacdac-ts/src/jdom/utils" diff --git a/src/components/blockly/dsl/variablesdsl.ts b/src/components/blockly/dsl/variablesdsl.ts index 06ffad5d640a..9635f86384ae 100644 --- a/src/components/blockly/dsl/variablesdsl.ts +++ b/src/components/blockly/dsl/variablesdsl.ts @@ -3,7 +3,7 @@ import BlockDomainSpecificLanguage from "./dsl" import { toIdentifier, toMemberExpression, -} from "../../../../jacdac-ts/src/vm/compile" +} from "../../devicescript/vm/compile" import { makeVMBase } from "../../devicescript/JacscriptGenerator" const variablesDsl: BlockDomainSpecificLanguage = { diff --git a/src/components/blockly/dsl/workspacejson.ts b/src/components/blockly/dsl/workspacejson.ts index 5d784104ebc2..39435092ebd9 100644 --- a/src/components/blockly/dsl/workspacejson.ts +++ b/src/components/blockly/dsl/workspacejson.ts @@ -1,5 +1,5 @@ -import { VMProgram } from "../../../../jacdac-ts/src/vm/ir" -import { JacscriptProgram } from "../../../../jacdac-ts/src/vm/ir2jacscript" +import { VMProgram } from "../../devicescript/vm/ir" +import { JacscriptProgram } from "../../devicescript/vm/ir2jacscript" import { tidyHeaders } from "../fields/tidy" import { BlockDataSet } from "../toolbox" diff --git a/src/components/devicescript/DeviceScriptVMDiagnostics.tsx b/src/components/devicescript/DeviceScriptVMDiagnostics.tsx index 5f61903e855e..39fc0267e66b 100644 --- a/src/components/devicescript/DeviceScriptVMDiagnostics.tsx +++ b/src/components/devicescript/DeviceScriptVMDiagnostics.tsx @@ -1,6 +1,6 @@ import { Grid } from "@mui/material" import React from "react" -import { VMProgram } from "../../../jacdac-ts/src/vm/ir" +import { VMProgram } from "../devicescript/vm/ir" import CodeBlock from "../CodeBlock" export default function DeviceScriptVMDiagnostics(props: { program: VMProgram }) { diff --git a/src/components/devicescript/JacscriptGenerator.ts b/src/components/devicescript/JacscriptGenerator.ts index ad00326b96b0..c577b5ac8266 100644 --- a/src/components/devicescript/JacscriptGenerator.ts +++ b/src/components/devicescript/JacscriptGenerator.ts @@ -6,8 +6,8 @@ import { VMRole, VMIfThenElse, VMError, -} from "../../../jacdac-ts/src/vm/ir" -import { RoleEvent, toIdentifier } from "../../../jacdac-ts/src/vm/compile" +} from "./vm/ir" +import { RoleEvent, toIdentifier } from "./vm/compile" import { BUILTIN_TYPES, resolveBlockDefinition, @@ -17,7 +17,6 @@ import Blockly from "blockly" import BlockDomainSpecificLanguage, { resolveDsl } from "../blockly/dsl/dsl" import { parseRoleType } from "../blockly/dsl/servicesbase" import { BlockJSON, WorkspaceJSON } from "../blockly/dsl/workspacejson" -import { splitFilter } from "../../../jacdac-ts/src/jdom/utils" export interface ExpressionWithErrors { expr: jsep.Expression diff --git a/src/components/devicescript/vm/compile.ts b/src/components/devicescript/vm/compile.ts new file mode 100644 index 000000000000..e8691e7e1ab9 --- /dev/null +++ b/src/components/devicescript/vm/compile.ts @@ -0,0 +1,237 @@ +import jsep from "jsep" +import { + VMBase, + VMCommand, + VMError, + VMHandler, + VMIfThenElse, + VMProgram, + VMFunctions, +} from "./ir" +import { VMChecker, SpecSymbolResolver } from "./symutils" +import { assert } from "../../../../jacdac-ts/src/jdom/utils" +import { + serviceSpecificationFromClassIdentifier, + serviceSpecificationFromName, +} from "../../../../jacdac-ts/src/jdom/spec" + +export function toIdentifier(id: string) { + return { + type: "Identifier", + name: id, + } as jsep.Identifier +} + +export function toMemberExpression( + root: string, + field: string | jsep.Expression +) { + return { + type: "MemberExpression", + object: toIdentifier(root), + property: typeof field === "string" ? toIdentifier(field) : field, + computed: false, + } as jsep.MemberExpression +} + +function handlerVisitor( + handler: VMHandler, + visitITE: (ite: VMIfThenElse, time: number) => void, + visitCommand: (c: VMCommand) => void +) { + handler.commands.forEach(visitBase) + + function visitBase(base: VMBase) { + switch (base.type) { + case "cmd": { + if (visitCommand) visitCommand(base as VMCommand) + break + } + case "ite": { + const ite = base as VMIfThenElse + if (visitITE) visitITE(ite, 0) + ite?.else?.forEach(visitBase) + if (visitITE) visitITE(ite, 1) + ite?.then?.forEach(visitBase) + if (visitITE) visitITE(ite, 2) + } + } + } +} + +export function compileProgram({ roles, handlers }: VMProgram) { + const newProgram: VMProgram = { roles, handlers: [] } + // process start blocks + handlers.forEach(startBlock) + // remove if-then-else + newProgram.handlers = handlers.map(h => { + return { commands: removeIfThenElse(h), errors: h?.errors } + }) + return newProgram +} + +function checkCall(cmd: VMBase, id: string) { + if (cmd.type === "cmd") { + const callee = (cmd as VMCommand).command.callee + if (callee.type === "Identifier") { + const cid = (callee as jsep.Identifier).name + return id === cid + } + } + return undefined +} + +function startBlock(handler: VMHandler) { + if (handler.commands.length && checkCall(handler.commands[0], "start")) { + handler.commands.shift() + handler.commands.push({ + type: "cmd", + command: { + type: "CallExpression", + callee: toIdentifier("halt"), + arguments: [], + }, + } as VMCommand) + } +} + +function removeIfThenElse(handler: VMHandler): VMBase[] { + const newSequence: VMCommand[] = [] + const labels: { then: string; end: string }[] = [] + let labelId = 1 + handlerVisitor( + handler, + (ite, time) => { + switch (time) { + case 0: { + // create the labels and branch instruction + const then = `then_${labelId}` + const end = `end_${labelId}` + labels.push({ then, end }) + labelId++ + newSequence.push({ + type: "cmd", + command: { + type: "CallExpression", + callee: toIdentifier("branchOnCondition"), + arguments: [ite.expr, toIdentifier(then)], + }, + }) + break + } + case 1: { + // insert the jump and then label + const { then, end } = labels[labels.length - 1] + newSequence.push({ + type: "cmd", + command: { + type: "CallExpression", + callee: toIdentifier("jump"), + arguments: [toIdentifier(end)], + }, + }) + newSequence.push({ + type: "cmd", + command: { + type: "CallExpression", + callee: toIdentifier("label"), + arguments: [toIdentifier(then)], + }, + }) + break + } + case 2: { + assert(labels.length > 0) + const { end } = labels[labels.length - 1] + newSequence.push({ + type: "cmd", + command: { + type: "CallExpression", + callee: toIdentifier("label"), + arguments: [toIdentifier(end)], + }, + }) + labels.pop() + } + } + }, + cmd => { + newSequence.push(cmd) + } + ) + return newSequence +} + +export interface RoleRegister { + role: string + register: string +} + +export interface RoleEvent { + role: string + event: string +} + +export const getServiceFromRole = (info: VMProgram) => (role: string) => { + // lookup in roles first + const roleFound = info.roles.find(pair => pair.role === role) + if (roleFound) { + // must succeed + const spec = serviceSpecificationFromClassIdentifier( + roleFound.serviceClass + ) + assert(!!spec, `service class ${roleFound.serviceClass} not resolved`) + return { spec } + } else { + const spec = serviceSpecificationFromName(role) + return { spec } + } +} + +export function checkProgram(prog: VMProgram): { + registers: RoleRegister[] + events: RoleEvent[] + errors: VMError[] +} { + const allErrors: VMError[] = [] + const goodHandlers: VMHandler[] = [] + const errorFun = (e: string) => { + allErrors.push({ sourceId: undefined, message: e }) + } + const symbolResolver = new SpecSymbolResolver( + undefined, + getServiceFromRole(prog), + errorFun + ) + const checker = new VMChecker(symbolResolver, _ => true, errorFun) + prog.handlers.forEach(h => { + if (h?.errors.length) { + h?.errors.forEach(e => allErrors.push(e)) + return + } + const errorCount = allErrors.length + symbolResolver.roles = [] + handlerVisitor(h, undefined, c => + checker.checkCommand(c.command, VMFunctions) + ) + if (h?.errors.length === 0 && allErrors.length === errorCount) { + h.roles = symbolResolver.roles + goodHandlers.push(h) + } else { + h?.errors.forEach(e => allErrors.push(e)) + } + }) + prog.handlers = goodHandlers + + return { + registers: symbolResolver.registers.map(s => { + const [root, fld] = s.split(".") + return { role: root, register: fld } + }), + events: symbolResolver.events.map(e => { + const [root, fld] = e.split(".") + return { role: root, event: fld } + }), + errors: allErrors, + } +} diff --git a/src/components/devicescript/vm/expr.ts b/src/components/devicescript/vm/expr.ts new file mode 100644 index 000000000000..a7b512d92552 --- /dev/null +++ b/src/components/devicescript/vm/expr.ts @@ -0,0 +1,225 @@ +import jsep from "jsep" + +export type GetValue = ( + e: jsep.MemberExpression | string, + reportUpdate: boolean +) => any + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type StartMap = { e: jsep.Expression; v: any }[] + +export type CallEvaluator = ( + ce: jsep.CallExpression, + ee: VMExprEvaluator +) => any + +export function unparse(e: jsep.Expression): string { + switch (e.type) { + case "ArrayExpression": { + const ae = e as jsep.ArrayExpression + return `[${ae.elements.map(unparse).join(", ")}]` + } + case "CallExpression": { + const caller = e as jsep.CallExpression + return `${unparse(caller.callee)}(${caller.arguments + .map(unparse) + .join(", ")})` + } + case "MemberExpression": { + const root = e as jsep.MemberExpression + return root.computed + ? `${unparse(root.object)}[${unparse(root.property)}]` + : `${unparse(root.object)}.${unparse(root.property)}` + } + case "BinaryExpression": { + const be = e as any + return `(${unparse(be.left)} ${be.operator} ${unparse(be.right)})` + } + case "UnaryExpression": { + const ue = e as jsep.UnaryExpression + return `${ue.operator}${unparse(ue.argument)}` + } + case "Identifier": { + return (e as jsep.Identifier).name + } + case "Literal": { + return (e as jsep.Literal).raw + } + default: + return "TODO" + } +} + +export class VMExprEvaluator { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private exprStack: any[] = [] + private reportUpdate = false + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + constructor(private env: GetValue, private callEval: CallEvaluator) {} + + public tos() { + return this.exprStack[this.exprStack.length - 1] + } + + public pop() { + return this.exprStack.pop() + } + + public async evalAsync(e: jsep.Expression, reportUpdate = false) { + this.exprStack = [] + this.reportUpdate = reportUpdate + await this.visitExpressionAsync(e) + return this.exprStack.pop() + } + + public async visitExpressionAsync(e: jsep.Expression) { + switch (e.type) { + case "ArrayExpression": { + // nothing to do here yet (only used for event function) + break + } + + case "CallExpression": { + if (this.callEval) { + const ret = this.callEval(e, this) + this.exprStack.push(ret) + } else this.exprStack.push(undefined) + break + } + + case "BinaryExpression": { + const be = e + if (be.operator === "&&" || be.operator === "||") { + await this.visitExpressionAsync(be.left) + switch (be.operator) { + case "||": + if (this.tos()) return + else await this.visitExpressionAsync(be.right) + return + case "&&": + if (!this.tos()) return + else await this.visitExpressionAsync(be.right) + return + } + } + await this.visitExpressionAsync(be.left) + await this.visitExpressionAsync(be.right) + const right = this.exprStack.pop() + const left = this.exprStack.pop() + switch (be.operator) { + case "+": + this.exprStack.push(left + right) + return + case "-": + this.exprStack.push(left - right) + return + case "/": + this.exprStack.push(left / right) + return + case "*": + this.exprStack.push(left * right) + return + case "%": + this.exprStack.push(left % right) + return + case ">>": + this.exprStack.push(left >> right) + return + case ">>>": + this.exprStack.push(left >>> right) + return + case "<<": + this.exprStack.push(left << right) + return + case "|": + this.exprStack.push(left | right) + return + case "&": + this.exprStack.push(left & right) + return + case "^": + this.exprStack.push(left ^ right) + return + case "==": + this.exprStack.push(left == right) + return + case "!=": + this.exprStack.push(left != right) + return + case "===": + this.exprStack.push(left === right) + return + case "!==": + this.exprStack.push(left !== right) + return + case "<": + this.exprStack.push(left < right) + return + case ">": + this.exprStack.push(left > right) + return + case "<=": + this.exprStack.push(left <= right) + return + case ">=": + this.exprStack.push(left >= right) + return + } + break + } + + case "UnaryExpression": { + const ue = e + await this.visitExpressionAsync(ue.argument) + const top = this.exprStack.pop() + switch (ue.operator) { + case "ABS": + this.exprStack.push(Math.abs(top)) + return + case "!": + this.exprStack.push(!top) + return + case "~": + this.exprStack.push(~top) + return + case "-": + this.exprStack.push(-top) + return + case "+": + this.exprStack.push(+top) + return + } + break + } + + case "MemberExpression": { + // for now, we don't support evaluation of obj or prop + // of obj.prop + const val = await this.env( + e as jsep.MemberExpression, + this.reportUpdate + ) + //if (val === undefined) { + // throw new VMError(VMCode.InternalError, `lookup of ${unparse(e)} failed`) + //} + this.exprStack.push(val) + return + } + case "Identifier": { + const id = e + const val = await this.env(id.name, this.reportUpdate) + // if (val === undefined) + // throw new VMError(VMCode.InternalError, `lookup of ${id.name} failed`) + this.exprStack.push(val) + return + } + case "Literal": { + const lit = e + this.exprStack.push(lit.value) + return + } + default: + } + } +} diff --git a/src/components/devicescript/vm/ir.ts b/src/components/devicescript/vm/ir.ts new file mode 100644 index 000000000000..0e2808597011 --- /dev/null +++ b/src/components/devicescript/vm/ir.ts @@ -0,0 +1,173 @@ +import jsep from "jsep" + +export interface VMError { + sourceId?: string + code?: number + message: string +} + +export interface VMBase { + type: "ite" | "cmd" + sourceId?: string +} + +export interface VMIfThenElse extends VMBase { + type: "ite" + expr: jsep.Expression + then?: VMBase[] + else?: VMBase[] +} + +export interface VMCommand extends VMBase { + type: "cmd" + command: jsep.CallExpression +} + +export interface VMHandler { + commands: VMBase[] + roles?: string[] + errors?: VMError[] + // this handler support the editing experience but + // should not be compiled down or debugged + meta?: boolean +} + +export interface VMRole { + role: string + serviceClass: number +} + +export interface VMProgram { + roles: VMRole[] + handlers: VMHandler[] +} + +export type VMFunctionNames = + | "start" + | "halt" + | "nop" + | "label" + | "jump" + | "branchOnCondition" + | "wait" + | "awaitRegister" + | "awaitChange" + | "awaitEvent" + | "awaitCondition" + | "writeRegister" + | "writeLocal" + | "watch" + | "log" + | "roleBound" + | "roleBoundExpression" + | "onRoleConnected" + | "onRoleDisconnected" + | "raiseEvent" + | "wait" + | "every" + +type Context = "command" | "expression" | "either" + +export interface VMFunctionDescription { + id: string + args: (string | [string, any])[] + context: Context +} + +export const VMFunctions: VMFunctionDescription[] = [ + { + id: "start", + args: [], + context: "command", + }, + { + id: "halt", + args: [], + context: "command", + }, + { + id: "nop", + args: [], + context: "command", + }, + { + id: "label", + args: ["Identifier"], + context: "command", + }, + { + id: "jump", + args: ["Identifier"], + context: "command", + }, + { + id: "branchOnCondition", + args: ["boolean", "Identifier"], + context: "command", + }, + { + id: "wait", + args: ["number"], + context: "command", + }, + { + id: "awaitRegister", + args: ["register"], + context: "command", + }, + { + id: "awaitChange", + args: ["register", "number"], + context: "command", + }, + { + id: "awaitEvent", + args: ["event", ["boolean", true]], + context: "command", + }, + { + id: "awaitCondition", + args: ["boolean"], + context: "command", + }, + { + id: "writeRegister", + args: ["register", "number"], + context: "command", + }, + { + id: "writeLocal", + args: ["register", "number"], + context: "command", + }, + { + id: "watch", + args: ["number"], + context: "command", + }, + { + id: "log", + args: ["number"], + context: "command", + }, + { + id: "roleBound", + args: ["Identifier", "Identifier"], + context: "command", + }, + { + id: "roleBoundExpression", + args: ["Identifier"], + context: "expression", + }, + { + id: "onRoleConnected", + args: ["Identifier"], + context: "command", + }, + { + id: "onRoleDisconnected", + args: ["Identifier"], + context: "command", + }, +] diff --git a/src/components/devicescript/vm/ir2jacscript.ts b/src/components/devicescript/vm/ir2jacscript.ts new file mode 100644 index 000000000000..036e088e758d --- /dev/null +++ b/src/components/devicescript/vm/ir2jacscript.ts @@ -0,0 +1,247 @@ +import jsep from "jsep" +import { camelize } from "../../../../jacdac-ts/jacdac-spec/spectool/jdspec" +import { serviceSpecificationFromClassIdentifier } from "../../../../jacdac-ts/src/jdom/spec" +import { VMBase, VMCommand, VMHandler, VMIfThenElse, VMProgram } from "./ir" + +// TODO: +// - insert read() after register in a read context +// - write a register with fields + +export interface JacscriptProgram { + program: string[] + debug: string[] +} + +export function toJacscript(p: VMProgram): JacscriptProgram { + if (!p) return null + const { roles, handlers } = p + + const program: string[] = [] + const debug: string[] = [] + const globals: string[] = [] + let tab = 0 + const add = (code: string, vars: string[] = []) => { + vars.forEach(v => { + if (globals.indexOf(v) < 0) globals.push(v) + }) + program.push(`${" ".repeat(tab * 4)}${code}`) + } + + // pass over program + const startHandlers: VMHandler[] = [] + handlers.forEach(h => { + if (h.commands.length === 0) return + const [head] = processHandler(h.commands[0] as VMCommand) + if (head === undefined) return + else if (head) handlerVisitor(h) + else startHandlers.push(h) + }) + + // process role handlers + roles.forEach(r => { + const spec = serviceSpecificationFromClassIdentifier(r.serviceClass) + program.unshift(`var ${camelize(r.role)} = roles.${spec.camelName}()`) + }) + + // add onStart handler + startHandlers.forEach(h => h.commands.slice(1).forEach(visitBase)) + + // prepend variables + globals.forEach(g => program.unshift(`var ${g}`)) + + return { program, debug } + + function handlerVisitor(handler: VMHandler) { + const head = handler.commands[0] + add(...processHandler(head as VMCommand)) + tab++ + handler.commands.slice(1).forEach(visitBase) + tab-- + add(`})`) + } + + function visitBase(base: VMBase) { + switch (base.type) { + case "cmd": { + add(...processCommand(base as VMCommand)) + break + } + case "ite": { + const ite = base as VMIfThenElse + if (ite) { + const [expr, vars] = processExpression(ite.expr) + add(`if (${expr}) {`, vars) + tab++ + ite.then?.forEach(visitBase) + if (ite.else) { + tab-- + add(`} else {`) + tab++ + ite.else.forEach(visitBase) + tab-- + } + add(`}`) + } + } + } + } + + function processExpression( + e: jsep.Expression, + asRead = true + ): [string, string[]] { + const vars: string[] = [] + return [processExpr(e), vars] + + function processExpr(e: jsep.Expression): string { + switch (e.type) { + case "ArrayExpression": { + const ae = e as jsep.ArrayExpression + return `[${ae.elements.map(processExpr).join(", ")}]` + } + case "CallExpression": { + const caller = e as jsep.CallExpression + return `${processExpr(caller.callee)}(${caller.arguments + .map(processExpr) + .join(", ")})` + } + case "MemberExpression": { + const root = e as jsep.MemberExpression + if (root.computed) { + return `${processExpr(root.object)}[${processExpr( + root.property + )}]` + } else { + const first = `${processExpr(root.object)}` + const second = `${processExpr(root.property)}` + if (first.startsWith("$var")) { + if (globals.indexOf(second) < 0) + globals.push(second) + if (vars.indexOf(second) < 0) vars.push(second) + return second + } else if (asRead) { + if (second.indexOf(".") > 0) { + const [reg, field] = second.split(".") + return `${reg}.read().${field}` + } else return `${first}.${second}.read()` + } else { + return `${first}.${second}` + } + } + } + case "BinaryExpression": { + const be = e as any + return `(${processExpr(be.left)} ${ + be.operator + } ${processExpr(be.right)})` + } + case "UnaryExpression": { + const ue = e as jsep.UnaryExpression + return `${ue.operator}${processExpr(ue.argument)}` + } + case "Identifier": { + return camelize((e as jsep.Identifier).name) + } + case "Literal": { + return (e as jsep.Literal).raw + } + default: + return "TODO" + } + } + } + + function getInst(cmd: VMCommand) { + return (cmd.command?.callee as jsep.Identifier)?.name + } + + // these are waits + function processHandler(handler: VMCommand): [string, string[]] { + const args = handler.command?.arguments + const inst = getInst(handler) + switch (inst) { + case "awaitEvent": { + const event = args[0] as jsep.MemberExpression + const [ev, vars] = processExpression(event, false) + return [`${ev}.subscribe(() => {`, vars] + } + case "awaitChange": { + const [reg, vars1] = processExpression(args[0], false) + const [delta, vars2] = processExpression(args[1], false) + return [ + `${reg}.onChange(${delta}, () => {`, + [...vars1, ...vars2], + ] + } + case "awaitRegister": { + const [reg, vars] = processExpression(args[0], false) + return [`${reg}.onChange(0, () => {`, vars] + } + case "every": { + const [reg, vars] = processExpression(args[0], false) + return [`every(${reg}, () => {`, vars] + } + case "roleBound": { + const [reg, vars1] = processExpression(args[0], false) + return [`${reg}.onConnected(() => {`, [...vars1]] + } + case "cloudMethod": { + const [role, vars1] = processExpression(args[0], false) + const [label, vars2] = processExpression(args[1], false) + return [ + `${role}.onMethod(${label}, () => {`, + [...vars1, ...vars2], + ] + } + case "start": { + return ["", []] + } + case "nop": + return [undefined, []] + default: { + console.debug( + `jacscript: unknown handler instruction ${inst}`, + handler + ) + return [`error: unknown handler ${inst}`, []] + } + } + } + + function processCommand(cmd: VMCommand): [string, string[]] { + const args = cmd.command.arguments + if (cmd.command.callee.type === "MemberExpression") { + const roleCall = processExpression( + cmd.command.callee as jsep.MemberExpression, + false + ) + const exprs = args.map(a => processExpression(a)) + return [ + `${roleCall[0]}(${exprs.map(p => p[0]).join(", ")})`, + [...roleCall[1], ...exprs.flatMap(p => p[1])], + ] + } else { + const inst = getInst(cmd) + switch (inst) { + case "wait": + return processExpression(cmd.command) + case "writeRegister": { + const rest = cmd.command.arguments.slice(1) + const exprs = rest.map(a => processExpression(a)) + const reg = processExpression(args[0], false) + return [ + `${reg[0]}.write(${exprs.map(p => p[0]).join(", ")})`, + [...reg[1], ...exprs.flatMap(p => p[1])], + ] + } + case "writeLocal": { + const lhs = processExpression(args[0], false) + const rhs = processExpression(args[1]) + return [`${lhs[0]} = ${rhs[0]}`, [...lhs[1], ...rhs[1]]] + } + default: + return processExpression(cmd.command) + } + } + } +} diff --git a/src/components/devicescript/vm/symutils.ts b/src/components/devicescript/vm/symutils.ts new file mode 100644 index 000000000000..3fc4f5d01e42 --- /dev/null +++ b/src/components/devicescript/vm/symutils.ts @@ -0,0 +1,488 @@ +import jsep from "jsep" +import { VMFunctionDescription } from "./ir" +import { parseIntFloat } from "../../../../jacdac-ts/jacdac-spec/spectool/jdutils" + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function exprVisitor( + parent: any, + current: any, + structVisit: (par: jsep.Expression, curr: jsep.Expression) => void +) { + if (Array.isArray(current)) { + ;(current as any[]).forEach(c => exprVisitor(current, c, structVisit)) + } else if (typeof current === "object") { + if (parent && current) structVisit(parent, current) + Object.keys(current).forEach((key: string) => { + exprVisitor(current, current[key], structVisit) + }) + } +} + +interface Resolve { + role: string + spec: jdspec.ServiceSpec + rest: jsep.Expression +} + +export class SpecSymbolResolver { + registers: string[] + events: string[] + roles: string[] + + constructor( + private readonly spec: jdspec.ServiceSpec, + private readonly role2spec: (role: string) => { + spec: jdspec.ServiceSpec + }, + private readonly error: (m: string) => void + ) { + this.reset() + } + + reset() { + this.registers = [] + this.events = [] + this.roles = [] + } + + public check(e: jsep.Expression, type: string) { + if (!e) { + this.error(`expression is undefined`) + return false + } else if (e.type !== type) { + this.error(`expected ${type}; got ${e.type}`) + return false + } + return true + } + + public specResolve(e: jsep.Expression): Resolve { + let ret: Resolve = undefined + if (this.spec) { + ret = { + role: this.spec.shortName, + spec: this.spec, + rest: e, + } + } else if (e.type === "Identifier") { + return undefined + } else if ( + this.check(e, "MemberExpression") && + this.check((e as jsep.MemberExpression).object, "Identifier") && + this.role2spec + ) { + const obj = (e as jsep.MemberExpression).object as jsep.Identifier + if (obj.name.startsWith("$")) return undefined + if (!this.role2spec(obj.name)) { + this.error(`no specification found for ${obj.name}`) + } + const { spec } = this.role2spec(obj.name) + ret = { + role: obj.name, + spec, + rest: (e as jsep.MemberExpression).property, + } + } + if (ret && this.roles.indexOf(ret.role) < 0) this.roles.push(ret.role) + return ret + } + + public destructAccessPath(e: jsep.Expression, expectIdentifier = false) { + if (e.type === "Identifier") { + return [(e as jsep.Identifier).name, ""] + } else if (!expectIdentifier && e.type === "MemberExpression") { + const object = (e as jsep.MemberExpression) + .object as jsep.Identifier + const property = (e as jsep.MemberExpression) + .property as jsep.Identifier + if ( + this.check(object, "Identifier") && + this.check(property, "Identifier") + ) + return [object.name, property.name] + return undefined + } else { + if (!expectIdentifier) + this.error( + `expected Identifier or MemberExpression; got ${e.type}` + ) + else this.error(`expected Identifier; got ${e.type}`) + return undefined + } + } + + public lookupEvent(e: jsep.Expression) { + const resolve = this.specResolve(e) + if (!resolve) return + const { role, spec, rest } = resolve + const [id, _] = this.destructAccessPath(rest, true) + const events = spec.packets?.filter(pkt => pkt.kind === "event") + const pkt = events.find(p => p.name === id) + if (!pkt) { + this.error(`no event ${id} in specification`) + return undefined + } else { + const ev = `${role}.${id}` + if (this.events.indexOf(ev) < 0) this.events.push(ev) + return pkt + } + } + + public lookupRegister(e: jsep.Expression) { + const resolve = this.specResolve(e) + if (!resolve) return + const { role, spec, rest } = resolve + const [root, fld] = this.destructAccessPath(rest) + this.lookupRegisterRaw(spec, root, fld) + const reg = `${role}.${root}` + if (this.registers.indexOf(reg) < 0) this.registers.push(reg) + } + + private lookupRegisterRaw( + spec: jdspec.ServiceSpec, + root: string, + fld: string + ) { + const reg = getRegister(spec, root, fld) + if ( + reg.pkt && + ((!reg.fld && !isBoolOrNumericFormat(reg.pkt.packFormat)) || + (reg.fld && + reg.fld.type && + !isBoolOrNumericFormat(reg.fld.type))) + ) + this.error("only bool/numeric registers allowed") + // if (!fld && regField.pkt.fields.length > 0) + // error(`register ${root} has fields, but no field specified`) + } + + public lookupReplace( + events: jdspec.PacketInfo[], + parent: jsep.Expression, + child: jsep.Identifier | jsep.MemberExpression + ) { + if (Array.isArray(parent)) { + const replace = this.lookup(events, parent, child) + parent.forEach(i => { + if (parent[i] === child) parent[i] = replace + }) + } else { + // don't process identifiers that are callees of CallExpression + if ( + parent?.type === "CallExpression" && + child === (parent).callee + ) + return + const replace = this.lookup(events, parent, child) + if (replace) { + Object.keys(parent).forEach(k => { + if ((parent as any)[k] === child) + (parent as any)[k] = replace + }) + } + } + } + + private lookup( + events: jdspec.PacketInfo[], + parent: jsep.Expression, + child: jsep.Identifier | jsep.MemberExpression + ) { + const resolve = this.specResolve(child) + if (!resolve) return + const { role, spec, rest } = resolve + const [root, fld] = this.destructAccessPath(rest) + try { + try { + const val = parseIntFloat(spec, fld ? `${root}.${fld}` : root) + const lit: jsep.Literal = { + type: "Literal", + value: val, + raw: val.toString(), + } + return lit + } catch (e) { + this.lookupRegisterRaw(spec, root, fld) + const reg = `${role}.${root}` + if (this.registers.indexOf(reg) < 0) this.registers.push(reg) + } + } catch (e) { + let pkt: jdspec.PacketInfo = undefined + if (events.length) pkt = events.find(pkt => pkt.name === root) + else { + // we need a fully qualified name + pkt = spec.packets?.find( + p => p.kind === "event" && p.name === root + ) + } + if (!pkt) this.error(`event ${root} not bound correctly`) + else if (!fld && pkt.fields.length > 0) + this.error(`event ${root} has fields, but no field specified`) + else if (fld && !pkt.fields.find(f => f.name === fld)) + this.error( + `Field ${fld} of event ${root} not found in specification` + ) + } + } +} + +export class VMChecker { + constructor( + private readonly resolver: SpecSymbolResolver, + private readonly supportedExpression: ( + type: jsep.ExpressionType + ) => boolean, + private readonly error: (m: string) => void + ) {} + + checkCommand( + root: jsep.CallExpression, + funs: VMFunctionDescription[] + ): [VMFunctionDescription, jsep.CallExpression] { + if (!root || !root.type || root.type != "CallExpression") { + this.error( + `a command must be a call expression in JavaScript syntax` + ) + return + } + // check for unsupported expression types + exprVisitor(null, root, (p, c) => { + if (!this.supportedExpression(c.type as jsep.ExpressionType)) + this.error( + `Expression of type ${c.type} not currently supported` + ) + }) + // first lookup in known functions + const callee = (root.callee as jsep.Identifier)?.name + const cmdIndex = funs.findIndex(r => callee === r.id) + let theCommand: jdspec.PacketInfo = undefined + if (cmdIndex < 0) { + if (root.callee.type === "MemberExpression") { + const { role, spec, rest } = this.resolver.specResolve( + root.callee as jsep.MemberExpression + ) + const [command, _] = this.resolver.destructAccessPath(rest) + if (!role) { + this.error( + `command does not conform to expected call expression` + ) + return undefined + } else { + // we have a spec, now look for command + const commands = spec.packets?.filter( + pkt => pkt.kind === "command" + ) + theCommand = commands.find(c => c?.name === command) + if (!theCommand) { + this.error( + `cannot find command named ${command} in spec ${spec.shortName}` + ) + } else + return this.processSpecCommandFunction(root, theCommand) + } + } else { + if (callee) + this.error(`${callee} is not a registered function.`) + else + this.error( + `command does not conform to expected call expression` + ) + return undefined + } + } else return this.processTestFunction(funs, root, cmdIndex) + return undefined + } + + private processSpecCommandFunction( + root: jsep.CallExpression, + command: jdspec.PacketInfo + ): [VMFunctionDescription, jsep.CallExpression] { + if (root.arguments.length !== command?.fields?.length) { + this.error( + `Command ${command.name} expects ${command.fields.length} arguments: got ${root.arguments.length}` + ) + } else { + const args = root.arguments + args.forEach(arg => { + this.visitReplace(root, arg, []) + }) + } + return [undefined, root] + } + + private processTestFunction( + funs: VMFunctionDescription[], + root: jsep.CallExpression, + cmdIndex: number + ): [VMFunctionDescription, jsep.CallExpression] { + const callee = (root.callee as jsep.Identifier)?.name + // check arguments + const command = funs[cmdIndex] + const minArgs = argsRequiredOptional(command.args).length + const maxArgs = command.args.length + if (root.arguments.length < minArgs) { + this.error( + `${callee} expects at least ${minArgs} arguments; got ${root.arguments.length}` + ) + return undefined + } else if (root.arguments.length > maxArgs) { + this.error( + `${callee} expects at most ${maxArgs} arguments; got ${root.arguments.length}` + ) + return undefined + } + // deal with optional arguments + const newExpressions: jsep.Expression[] = [] + for (let i = root.arguments.length; i < command.args.length; i++) { + const [name, def] = command.args[i] as [string, any] + const lit: jsep.Literal = { + type: "Literal", + value: def, + raw: def.toString(), + } + newExpressions.push(lit) + } + root.arguments = root.arguments.concat(newExpressions) + // type checking of arguments. + this.processTestArguments(command, root) + return [command, root] + function argsRequiredOptional(args: any[], optional = false) { + return args.filter( + a => + (!optional && typeof a === "string") || + (optional && typeof a === "object") + ) + } + } + + private processTestArguments( + command: VMFunctionDescription, + root: jsep.CallExpression + ) { + const args = root.arguments + const eventSymTable: jdspec.PacketInfo[] = [] + args.forEach((arg, a) => { + let argType = command.args[a] + + if (typeof argType === "object") argType = command.args[a][0] + + if ( + argType === "register" || + argType === "event" || + argType === "Identifier" + ) { + if (argType === "Identifier") { + this.resolver.check(arg, "Identifier") + } else if (argType === "event" && a === 0) { + const pkt = this.resolver.lookupEvent(arg) + if (pkt && eventSymTable.indexOf(pkt) === -1) + eventSymTable.push(pkt) + } else if (argType === "register") { + try { + this.resolver.lookupRegister(arg) + } catch (e) { + this.error(e.message) + } + } + } else if (argType === "events") { + if (arg.type != "ArrayExpression") + this.error( + `events function expects a list of service events` + ) + else { + const aes = arg as jsep.ArrayExpression + aes.elements.forEach(e => this.resolver.lookupEvent(e)) + } + } else if (argType === "number" || argType === "boolean") { + this.visitReplace(root, arg, eventSymTable) + } else { + this.error(`unexpected argument type (${argType})`) + } + }) + } + + private visitReplace( + root: jsep.CallExpression, + arg: jsep.Expression, + eventSymTable: jdspec.PacketInfo[] = [] + ) { + exprVisitor(root, arg, (p, c) => { + if (p.type !== "MemberExpression" && c.type === "Identifier") { + this.resolver.lookupReplace( + eventSymTable, + p, + c as jsep.Identifier + ) + } else if (c.type === "ArrayExpression") { + this.error(`array expression not allowed in this context`) + } else if ( + p.type !== "MemberExpression" && + c.type === "MemberExpression" + ) { + const member = c as jsep.MemberExpression + // A member expression must be of form . + if (member.object.type !== "Identifier" || member.computed) { + this.error("property access must be of form id.property") + } else { + this.resolver.lookupReplace( + eventSymTable, + p, + c as jsep.MemberExpression + ) + } + } + }) + } +} + +// private stuff + +function isBoolOrNumericFormat(fmt: string) { + return fmt === "bool" || /^[ui]\d+/i.test(fmt) +} + +function isRegister(pkt: jdspec.PacketInfo): boolean { + return ( + pkt && (pkt.kind === "const" || pkt.kind === "ro" || pkt.kind === "rw") + ) +} + +function lookupRegister( + spec: jdspec.ServiceSpec, + id: string +): jdspec.PacketInfo { + return spec.packets.find(pkt => isRegister(pkt) && pkt.name === id) +} + +function lookupField( + pkt: jdspec.PacketInfo, + field: string +): jdspec.PacketMember { + return pkt.fields.find(member => member.name === field) +} + +interface RegField { + pkt: jdspec.PacketInfo + fld: jdspec.PacketMember +} + +function getRegister( + spec: jdspec.ServiceSpec, + root: string, + fld = "" +): RegField { + const ret: RegField = { pkt: undefined, fld: undefined } + ret.pkt = lookupRegister(spec, root) + if (!ret.pkt) { + throw new Error( + `no register ${root} found in service ${spec.shortName}` + ) + } else if (fld) { + ret.fld = lookupField(ret.pkt, fld) + if (!ret.fld) + throw new Error( + `no field ${fld} found in register ${root} of service ${spec.shortName}` + ) + } + return ret +} diff --git a/yarn.lock b/yarn.lock index 7b96f86903c2..398993975d83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1982,6 +1982,16 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== +"@esbuild/android-arm@0.15.16": + version "0.15.16" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.16.tgz#0642926178b15e3d1545efae6eee05c4f3451d15" + integrity sha512-nyB6CH++2mSgx3GbnrJsZSxzne5K0HMyNIWafDHqYy7IwxFc4fd/CgHVZXr8Eh+Q3KbIAcAe3vGyqIPhGblvMQ== + +"@esbuild/linux-loong64@0.15.16": + version "0.15.16" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.16.tgz#284522de76abe951e4ed2bd24a467e8d49c67933" + integrity sha512-SDLfP1uoB0HZ14CdVYgagllgrG7Mdxhkt4jDJOKl/MldKrkQ6vDJMZKl2+5XsEY/Lzz37fjgLQoJBGuAw/x8kQ== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1997,14 +2007,14 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint/eslintrc@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" + integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" + espree "^9.4.0" globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -2012,10 +2022,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -2306,6 +2316,15 @@ debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -2315,15 +2334,6 @@ debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" - integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - "@humanwhocodes/gitignore-to-minimatch@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" @@ -3938,11 +3948,6 @@ dependencies: "@types/ms" "*" -"@types/emscripten@^1.39.6": - version "1.39.6" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.6.tgz#698b90fe60d44acf93c31064218fbea93fbfd85a" - integrity sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg== - "@types/eslint-scope@^3.7.0": version "3.7.1" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" @@ -3967,13 +3972,6 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/esprima@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/esprima/-/esprima-4.0.3.tgz#e9068297cc3dd75231fa5cdaa6d75c50d5fb632f" - integrity sha512-jo14dIWVVtF0iMsKkYek6++4cWJjwpvog+rchLulwgFJGTXqIeTdCOvY0B3yMLTaIwMcKCdJ6mQbSR6wYHy98A== - dependencies: - "@types/estree" "*" - "@types/estree-jsx@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-0.0.1.tgz#c36d7a1afeb47a95a8ee0b7bc8bc705db38f919d" @@ -4140,10 +4138,10 @@ dependencies: "@types/node" "*" -"@types/mocha@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== +"@types/mocha@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" + integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/ms@*": version "0.7.31" @@ -4173,10 +4171,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== -"@types/node@^17.0.41": - version "17.0.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.41.tgz#1607b2fd3da014ae5d4d1b31bc792a39348dfb9b" - integrity sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw== +"@types/node@^18.11.10": + version "18.11.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34" + integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ== "@types/node@^7.0.5": version "7.10.14" @@ -4331,6 +4329,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/sharp@^0.30.5": version "0.30.5" resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.30.5.tgz#d75d91f7acf5260525aeae229845046dcff6d17a" @@ -4370,21 +4373,26 @@ resolved "https://registry.yarnpkg.com/@types/w3c-web-serial/-/w3c-web-serial-1.0.2.tgz#8bf21f90b40dda6d2e2e6b188417b6bd66525d03" integrity sha512-Ftx4BtLxgAnel7V7GbHylCYjSq827A+jeEE3SnTS7huCGUN0pSwUn+CchTCT9TkZj9w+NVMUq4Bk2R0GvUNmAQ== +"@types/w3c-web-serial@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/w3c-web-serial/-/w3c-web-serial-1.0.3.tgz#9fd5e8542f74e464bb1715b384b5c0dcbf2fb2c3" + integrity sha512-R4J/OjqKAUFQoXVIkaUTfzb/sl6hLh/ZhDTfowJTRMa7LhgEmI/jXV4zsL1u8HpNa853BxwNmDIr0pauizzwSQ== + "@types/w3c-web-usb@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.6.tgz#5d8560d0d9f585ffc80865bc773db7bc975b680c" integrity sha512-cSjhgrr8g4KbPnnijAr/KJDNKa/bBa+ixYkywFRvrhvi9n1WEl7yYbtRyzE6jqNQiSxxJxoAW3STaOQwJHndaw== -"@types/web-bluetooth@^0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz#94e175b53623384bff1f354cdb3197a8d63cdbe5" - integrity sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A== - "@types/web-bluetooth@^0.0.15": version "0.0.15" resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz#d60330046a6ed8a13b4a53df3813c44942ebdf72" integrity sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA== +"@types/web-bluetooth@^0.0.16": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" + integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== + "@types/webxr@*": version "0.5.0" resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.0.tgz#aae1cef3210d88fd4204f8c33385a0bbc4da07c9" @@ -4433,21 +4441,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.27.1.tgz#fdf59c905354139046b41b3ed95d1609913d0758" - integrity sha512-6dM5NKT57ZduNnJfpY81Phe9nc9wolnMCnknb1im6brWi1RYv84nbMS3olJa27B6+irUVV1X/Wb+Am0FjJdGFw== - dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/type-utils" "5.27.1" - "@typescript-eslint/utils" "5.27.1" - debug "^4.3.4" - functional-red-black-tree "^1.0.1" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/eslint-plugin@^5.39.0": version "5.39.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz#778b2d9e7f293502c7feeea6c74dca8eb3e67511" @@ -4462,6 +4455,21 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/eslint-plugin@^5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz#ffa505cf961d4844d38cfa19dcec4973a6039e41" + integrity sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA== + dependencies: + "@typescript-eslint/scope-manager" "5.45.0" + "@typescript-eslint/type-utils" "5.45.0" + "@typescript-eslint/utils" "5.45.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" @@ -4484,16 +4492,6 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/parser@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.27.1.tgz#3a4dcaa67e45e0427b6ca7bb7165122c8b569639" - integrity sha512-7Va2ZOkHi5NP+AZwb5ReLgNF6nWLGTeUJfxdkVUAPPSaAdbWNnFZzLZ4EGGmmiCTg+AwlbE1KyUYTBglosSLHQ== - dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" - debug "^4.3.4" - "@typescript-eslint/parser@^5.39.0": version "5.39.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.39.0.tgz#93fa0bc980a3a501e081824f6097f7ca30aaa22b" @@ -4504,6 +4502,16 @@ "@typescript-eslint/typescript-estree" "5.39.0" debug "^4.3.4" +"@typescript-eslint/parser@^5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.0.tgz#b18a5f6b3cf1c2b3e399e9d2df4be40d6b0ddd0e" + integrity sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ== + dependencies: + "@typescript-eslint/scope-manager" "5.45.0" + "@typescript-eslint/types" "5.45.0" + "@typescript-eslint/typescript-estree" "5.45.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" @@ -4512,14 +4520,6 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz#4d1504392d01fe5f76f4a5825991ec78b7b7894d" - integrity sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg== - dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" - "@typescript-eslint/scope-manager@5.39.0": version "5.39.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz#873e1465afa3d6c78d8ed2da68aed266a08008d0" @@ -4528,14 +4528,13 @@ "@typescript-eslint/types" "5.39.0" "@typescript-eslint/visitor-keys" "5.39.0" -"@typescript-eslint/type-utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz#369f695199f74c1876e395ebea202582eb1d4166" - integrity sha512-+UC1vVUWaDHRnC2cQrCJ4QtVjpjjCgjNFpg8b03nERmkHv9JV9X5M19D7UFMd+/G7T/sgFwX2pGmWK38rqyvXw== +"@typescript-eslint/scope-manager@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz#7a4ac1bfa9544bff3f620ab85947945938319a96" + integrity sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw== dependencies: - "@typescript-eslint/utils" "5.27.1" - debug "^4.3.4" - tsutils "^3.21.0" + "@typescript-eslint/types" "5.45.0" + "@typescript-eslint/visitor-keys" "5.45.0" "@typescript-eslint/type-utils@5.39.0": version "5.39.0" @@ -4547,21 +4546,31 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz#aefbc954c40878fcebeabfb77d20d84a3da3a8b2" + integrity sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q== + dependencies: + "@typescript-eslint/typescript-estree" "5.45.0" + "@typescript-eslint/utils" "5.45.0" + debug "^4.3.4" + tsutils "^3.21.0" + "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.27.1.tgz#34e3e629501349d38be6ae97841298c03a6ffbf1" - integrity sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg== - "@typescript-eslint/types@5.39.0": version "5.39.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.39.0.tgz#f4e9f207ebb4579fd854b25c0bf64433bb5ed78d" integrity sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw== +"@typescript-eslint/types@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.0.tgz#794760b9037ee4154c09549ef5a96599621109c5" + integrity sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA== + "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" @@ -4575,19 +4584,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz#7621ee78607331821c16fffc21fc7a452d7bc808" - integrity sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw== - dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.39.0": version "5.39.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz#c0316aa04a1a1f4f7f9498e3c13ef1d3dc4cf88b" @@ -4601,17 +4597,18 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.27.1.tgz#b4678b68a94bc3b85bf08f243812a6868ac5128f" - integrity sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w== +"@typescript-eslint/typescript-estree@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz#f70a0d646d7f38c0dfd6936a5e171a77f1e5291d" + integrity sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ== dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@typescript-eslint/types" "5.45.0" + "@typescript-eslint/visitor-keys" "5.45.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" "@typescript-eslint/utils@5.39.0": version "5.39.0" @@ -4625,6 +4622,20 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/utils@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.0.tgz#9cca2996eee1b8615485a6918a5c763629c7acf5" + integrity sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.45.0" + "@typescript-eslint/types" "5.45.0" + "@typescript-eslint/typescript-estree" "5.45.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" @@ -4633,14 +4644,6 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz#05a62666f2a89769dac2e6baa48f74e8472983af" - integrity sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ== - dependencies: - "@typescript-eslint/types" "5.27.1" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.39.0": version "5.39.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz#8f41f7d241b47257b081ddba5d3ce80deaae61e2" @@ -4649,10 +4652,13 @@ "@typescript-eslint/types" "5.39.0" eslint-visitor-keys "^3.3.0" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@typescript-eslint/visitor-keys@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz#e0d160e9e7fdb7f8da697a5b78e7a14a22a70528" + integrity sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg== + dependencies: + "@typescript-eslint/types" "5.45.0" + eslint-visitor-keys "^3.3.0" "@use-gesture/core@10.2.2": version "10.2.2" @@ -4916,11 +4922,6 @@ acorn@^8.5.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== -acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -6684,25 +6685,25 @@ concat-with-sourcemaps@^1.1.0: dependencies: source-map "^0.6.1" -concurrently@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.2.1.tgz#88b144060443403060aad46f837dd17451f7e55e" - integrity sha512-7cab/QyqipqghrVr9qZmoWbidu0nHsmxrpNqQ7r/67vfl1DWJElexehQnTH1p+87tDkihaAjM79xTZyBQh7HLw== +concurrently@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.4.0.tgz#bb0e344964bc172673577c420db21e963f2f7368" + integrity sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA== dependencies: chalk "^4.1.0" - date-fns "^2.16.1" + date-fns "^2.29.1" lodash "^4.17.21" - rxjs "^6.6.3" + rxjs "^7.0.0" shell-quote "^1.7.3" spawn-command "^0.0.2-1" supports-color "^8.1.0" tree-kill "^1.2.2" yargs "^17.3.1" -concurrently@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.4.0.tgz#bb0e344964bc172673577c420db21e963f2f7368" - integrity sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA== +concurrently@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.6.0.tgz#531a6f5f30cf616f355a4afb8f8fcb2bba65a49a" + integrity sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw== dependencies: chalk "^4.1.0" date-fns "^2.29.1" @@ -7457,7 +7458,7 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -date-fns@^2.16.1, date-fns@^2.25.0: +date-fns@^2.25.0: version "2.27.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.27.0.tgz#e1ff3c3ddbbab8a2eaadbb6106be2929a5a2d92b" integrity sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q== @@ -8255,257 +8256,133 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -esbuild-android-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64" - integrity sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw== - -esbuild-android-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.43.tgz#59bf3edad6863c27aa92bbb5c1d83a9a5c981495" - integrity sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg== - -esbuild-android-arm64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz#78acc80773d16007de5219ccce544c036abd50b8" - integrity sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA== - -esbuild-android-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.43.tgz#0258704edf92ce2463af6d2900b844b5423bed63" - integrity sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA== - -esbuild-darwin-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz#e02b1291f629ebdc2aa46fabfacc9aa28ff6aa46" - integrity sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA== - -esbuild-darwin-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.43.tgz#72a47295678d4aa0656979baa8cf6d5c8c92656f" - integrity sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg== - -esbuild-darwin-arm64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz#01eb6650ec010b18c990e443a6abcca1d71290a9" - integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ== - -esbuild-darwin-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.43.tgz#5f5823170b8d85b888957f0794e186caac447aca" - integrity sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw== - -esbuild-freebsd-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz#790b8786729d4aac7be17648f9ea8e0e16475b5e" - integrity sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig== - -esbuild-freebsd-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.43.tgz#e4a48b08181053837e6cd9bda19ae0af94d493b0" - integrity sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA== - -esbuild-freebsd-arm64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz#b66340ab28c09c1098e6d9d8ff656db47d7211e6" - integrity sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ== - -esbuild-freebsd-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.43.tgz#386e780d36c1dedf3a1cdab79e0bbacd873274e6" - integrity sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA== - -esbuild-linux-32@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz#7927f950986fd39f0ff319e92839455912b67f70" - integrity sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g== - -esbuild-linux-32@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.43.tgz#040ed6b9ebf06d73acdf2acce7f1cd0c12fbc6a5" - integrity sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw== - -esbuild-linux-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz#4893d07b229d9cfe34a2b3ce586399e73c3ac519" - integrity sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q== - -esbuild-linux-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.43.tgz#8abbb7594ab6a008f2aae72d95d8a4fdc59d9000" - integrity sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw== - -esbuild-linux-arm64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz#8442402e37d0b8ae946ac616784d9c1a2041056a" - integrity sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA== - -esbuild-linux-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.43.tgz#4e8e9ce77cbf7efec65e79e512b3d2fbd2da398f" - integrity sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ== - -esbuild-linux-arm@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz#d5dbf32d38b7f79be0ec6b5fb2f9251fd9066986" - integrity sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA== - -esbuild-linux-arm@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.43.tgz#9e41ee5e099c0ffdfd150da154330c2c0226cc96" - integrity sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg== - -esbuild-linux-mips64le@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz#95081e42f698bbe35d8ccee0e3a237594b337eb5" - integrity sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ== - -esbuild-linux-mips64le@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.43.tgz#4b41f465a787f91cc4fe7dffa0dcabf655935a1a" - integrity sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA== - -esbuild-linux-ppc64le@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz#dceb0a1b186f5df679618882a7990bd422089b47" - integrity sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q== - -esbuild-linux-ppc64le@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.43.tgz#ca15934f5b46728dd9ac05270e783e7feaca9eaf" - integrity sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA== - -esbuild-linux-riscv64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz#61fb8edb75f475f9208c4a93ab2bfab63821afd2" - integrity sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ== - -esbuild-linux-riscv64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.43.tgz#70fce2b5a0605a67e58b5a357b0e00be1029836d" - integrity sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw== - -esbuild-linux-s390x@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz#34c7126a4937406bf6a5e69100185fd702d12fe0" - integrity sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ== - -esbuild-linux-s390x@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.43.tgz#318d03b4f4ccc7fa44ac7562121cf4a4529e477a" - integrity sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ== - -esbuild-netbsd-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz#322ea9937d9e529183ee281c7996b93eb38a5d95" - integrity sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q== - -esbuild-netbsd-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.43.tgz#86130ce204ef0162a96e863b55851efecc92f423" - integrity sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ== - -esbuild-openbsd-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz#1ca29bb7a2bf09592dcc26afdb45108f08a2cdbd" - integrity sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ== - -esbuild-openbsd-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.43.tgz#0229dc2db2ded97b03bb93bba7646b30ffdf5d0d" - integrity sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg== - -esbuild-sunos-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz#c9446f7d8ebf45093e7bb0e7045506a88540019b" - integrity sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA== - -esbuild-sunos-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.43.tgz#17e316216eb9f1de25d52a9000356ae5b869e736" - integrity sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q== - -esbuild-windows-32@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz#f8e9b4602fd0ccbd48e5c8d117ec0ba4040f2ad1" - integrity sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw== - -esbuild-windows-32@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.43.tgz#a173757bc6dfd0f2656ff40b64f7f9290745778e" - integrity sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw== - -esbuild-windows-64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz#280f58e69f78535f470905ce3e43db1746518107" - integrity sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw== - -esbuild-windows-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.43.tgz#c447b23126aad158c4fe6a394342cafd97926ed1" - integrity sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw== - -esbuild-windows-arm64@0.14.38: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz#d97e9ac0f95a4c236d9173fa9f86c983d6a53f54" - integrity sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw== - -esbuild-windows-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.43.tgz#3caed1b430d394d7a7836407b9d36c4750246e76" - integrity sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw== - -esbuild@^0.14.11: - version "0.14.38" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.38.tgz#99526b778cd9f35532955e26e1709a16cca2fb30" - integrity sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA== - optionalDependencies: - esbuild-android-64 "0.14.38" - esbuild-android-arm64 "0.14.38" - esbuild-darwin-64 "0.14.38" - esbuild-darwin-arm64 "0.14.38" - esbuild-freebsd-64 "0.14.38" - esbuild-freebsd-arm64 "0.14.38" - esbuild-linux-32 "0.14.38" - esbuild-linux-64 "0.14.38" - esbuild-linux-arm "0.14.38" - esbuild-linux-arm64 "0.14.38" - esbuild-linux-mips64le "0.14.38" - esbuild-linux-ppc64le "0.14.38" - esbuild-linux-riscv64 "0.14.38" - esbuild-linux-s390x "0.14.38" - esbuild-netbsd-64 "0.14.38" - esbuild-openbsd-64 "0.14.38" - esbuild-sunos-64 "0.14.38" - esbuild-windows-32 "0.14.38" - esbuild-windows-64 "0.14.38" - esbuild-windows-arm64 "0.14.38" - -esbuild@^0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.43.tgz#c227d585c512d3e0f23b88f50b8e16501147f647" - integrity sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA== +esbuild-android-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.16.tgz#0d6a16fa1bea441d5183976f1633183c25a764d5" + integrity sha512-Vwkv/sT0zMSgPSVO3Jlt1pUbnZuOgtOQJkJkyyJFAlLe7BiT8e9ESzo0zQSx4c3wW4T6kGChmKDPMbWTgtliQA== + +esbuild-android-arm64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.16.tgz#78643bbbf396d26d20ba1f2fcdff3618c7c033e9" + integrity sha512-lqfKuofMExL5niNV3gnhMUYacSXfsvzTa/58sDlBET/hCOG99Zmeh+lz6kvdgvGOsImeo6J9SW21rFCogNPLxg== + +esbuild-darwin-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.16.tgz#de3e91809dcd1ffb64409e2f990bb86e33e4ffd8" + integrity sha512-wo2VWk/n/9V2TmqUZ/KpzRjCEcr00n7yahEdmtzlrfQ3lfMCf3Wa+0sqHAbjk3C6CKkR3WKK/whkMq5Gj4Da9g== + +esbuild-darwin-arm64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.16.tgz#bc9cc8d51109d8e9db4ffe2c064dd53d1eb5a2a6" + integrity sha512-fMXaUr5ou0M4WnewBKsspMtX++C1yIa3nJ5R2LSbLCfJT3uFdcRoU/NZjoM4kOMKyOD9Sa/2vlgN8G07K3SJnw== + +esbuild-freebsd-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.16.tgz#f8c54c679c16e9b20a1bf860ca91ba700d6c9c5d" + integrity sha512-UzIc0xlRx5x9kRuMr+E3+hlSOxa/aRqfuMfiYBXu2jJ8Mzej4lGL7+o6F5hzhLqWfWm1GWHNakIdlqg1ayaTNQ== + +esbuild-freebsd-arm64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.16.tgz#dd28a55df0f062e2c1628266008434c32ddc7adf" + integrity sha512-8xyiYuGc0DLZphFQIiYaLHlfoP+hAN9RHbE+Ibh8EUcDNHAqbQgUrQg7pE7Bo00rXmQ5Ap6KFgcR0b4ALZls1g== + +esbuild-linux-32@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.16.tgz#41eb0b9b49b3430b9cc4577f1ad3d414ef70f806" + integrity sha512-iGijUTV+0kIMyUVoynK0v+32Oi8yyp0xwMzX69GX+5+AniNy/C/AL1MjFTsozRp/3xQPl7jVux/PLe2ds10/2w== + +esbuild-linux-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.16.tgz#b2fb0c7d49b7a579b2de26fbf4c7afb1835f2073" + integrity sha512-tuSOjXdLw7VzaUj89fIdAaQT7zFGbKBcz4YxbWrOiXkwscYgE7HtTxUavreBbnRkGxKwr9iT/gmeJWNm4djy/g== + +esbuild-linux-arm64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.16.tgz#78fed3745b20251fc3bdc8db35ea0781e9b0e7c6" + integrity sha512-mPYksnfHnemNrvjrDhZyixL/AfbJN0Xn9S34ZOHYdh6/jJcNd8iTsv3JwJoEvTJqjMggjMhGUPJAdjnFBHoH8A== + +esbuild-linux-arm@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.16.tgz#6963f061a2b778aad7df2bfb6fa32d1904313f7f" + integrity sha512-XKcrxCEXDTOuoRj5l12tJnkvuxXBMKwEC5j0JISw3ziLf0j4zIwXbKbTmUrKFWbo6ZgvNpa7Y5dnbsjVvH39bQ== + +esbuild-linux-mips64le@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.16.tgz#e2aed3527e551f8182c6b0fc8a045726fd98ad87" + integrity sha512-kSJO2PXaxfm0pWY39+YX+QtpFqyyrcp0ZeI8QPTrcFVQoWEPiPVtOfTZeS3ZKedfH+Ga38c4DSzmKMQJocQv6A== + +esbuild-linux-ppc64le@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.16.tgz#fa3095b24950f63408f46f34b6d9a073ed88d53f" + integrity sha512-NimPikwkBY0yGABw6SlhKrtT35sU4O23xkhlrTT/O6lSxv3Pm5iSc6OYaqVAHWkLdVf31bF4UDVFO+D990WpAA== + +esbuild-linux-riscv64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.16.tgz#19c012dcc55c9d6d2a3855aa77c2c5217182cd1e" + integrity sha512-ty2YUHZlwFOwp7pR+J87M4CVrXJIf5ZZtU/umpxgVJBXvWjhziSLEQxvl30SYfUPq0nzeWKBGw5i/DieiHeKfw== + +esbuild-linux-s390x@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.16.tgz#aa61f64740e5b983cc3ebb4183a03df4b435a873" + integrity sha512-VkZaGssvPDQtx4fvVdZ9czezmyWyzpQhEbSNsHZZN0BHvxRLOYAQ7sjay8nMQwYswP6O2KlZluRMNPYefFRs+w== + +esbuild-netbsd-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.16.tgz#dffdc104c1f2bafc42be3faa21376c0a092f5702" + integrity sha512-ElQ9rhdY51et6MJTWrCPbqOd/YuPowD7Cxx3ee8wlmXQQVW7UvQI6nSprJ9uVFQISqSF5e5EWpwWqXZsECLvXg== + +esbuild-openbsd-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.16.tgz#e5987f8eda55ea5f6ef6258afb1a838158f890bb" + integrity sha512-KgxMHyxMCT+NdLQE1zVJEsLSt2QQBAvJfmUGDmgEq8Fvjrf6vSKB00dVHUEDKcJwMID6CdgCpvYNt999tIYhqA== + +esbuild-sunos-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.16.tgz#60a085aa4b74d900e4de8c00a9fce207937320a2" + integrity sha512-exSAx8Phj7QylXHlMfIyEfNrmqnLxFqLxdQF6MBHPdHAjT7fsKaX6XIJn+aQEFiOcE4X8e7VvdMCJ+WDZxjSRQ== + +esbuild-windows-32@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.16.tgz#24f94e5fb243d211c7db9a12985fd2880ba98ca3" + integrity sha512-zQgWpY5pUCSTOwqKQ6/vOCJfRssTvxFuEkpB4f2VUGPBpdddZfdj8hbZuFRdZRPIVHvN7juGcpgCA/XCF37mAQ== + +esbuild-windows-64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.16.tgz#71d24d68d8b652bf5a93a6c7453c334584fa2211" + integrity sha512-HjW1hHRLSncnM3MBCP7iquatHVJq9l0S2xxsHHj4yzf4nm9TU4Z7k4NkeMlD/dHQ4jPlQQhwcMvwbJiOefSuZw== + +esbuild-windows-arm64@0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.16.tgz#77e804d60dec0390fe8f21401e39b435d5d1b863" + integrity sha512-oCcUKrJaMn04Vxy9Ekd8x23O8LoU01+4NOkQ2iBToKgnGj5eo1vU9i27NQZ9qC8NFZgnQQZg5oZWAejmbsppNA== + +esbuild@^0.15.16: + version "0.15.16" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.16.tgz#59324e5667985bf6aee8a91ea576baef6872cf21" + integrity sha512-o6iS9zxdHrrojjlj6pNGC2NAg86ECZqIETswTM5KmJitq+R1YmahhWtMumeQp9lHqJaROGnsBi2RLawGnfo5ZQ== optionalDependencies: - esbuild-android-64 "0.14.43" - esbuild-android-arm64 "0.14.43" - esbuild-darwin-64 "0.14.43" - esbuild-darwin-arm64 "0.14.43" - esbuild-freebsd-64 "0.14.43" - esbuild-freebsd-arm64 "0.14.43" - esbuild-linux-32 "0.14.43" - esbuild-linux-64 "0.14.43" - esbuild-linux-arm "0.14.43" - esbuild-linux-arm64 "0.14.43" - esbuild-linux-mips64le "0.14.43" - esbuild-linux-ppc64le "0.14.43" - esbuild-linux-riscv64 "0.14.43" - esbuild-linux-s390x "0.14.43" - esbuild-netbsd-64 "0.14.43" - esbuild-openbsd-64 "0.14.43" - esbuild-sunos-64 "0.14.43" - esbuild-windows-32 "0.14.43" - esbuild-windows-64 "0.14.43" - esbuild-windows-arm64 "0.14.43" + "@esbuild/android-arm" "0.15.16" + "@esbuild/linux-loong64" "0.15.16" + esbuild-android-64 "0.15.16" + esbuild-android-arm64 "0.15.16" + esbuild-darwin-64 "0.15.16" + esbuild-darwin-arm64 "0.15.16" + esbuild-freebsd-64 "0.15.16" + esbuild-freebsd-arm64 "0.15.16" + esbuild-linux-32 "0.15.16" + esbuild-linux-64 "0.15.16" + esbuild-linux-arm "0.15.16" + esbuild-linux-arm64 "0.15.16" + esbuild-linux-mips64le "0.15.16" + esbuild-linux-ppc64le "0.15.16" + esbuild-linux-riscv64 "0.15.16" + esbuild-linux-s390x "0.15.16" + esbuild-netbsd-64 "0.15.16" + esbuild-openbsd-64 "0.15.16" + esbuild-sunos-64 "0.15.16" + esbuild-windows-32 "0.15.16" + esbuild-windows-64 "0.15.16" + esbuild-windows-arm64 "0.15.16" escalade@^3.1.1: version "3.1.1" @@ -8778,13 +8655,15 @@ eslint@^7.32.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^8.17.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== +eslint@^8.24.0: + version "8.24.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.24.0.tgz#489516c927a5da11b3979dbfb2679394523383c8" + integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" + "@eslint/eslintrc" "^1.3.2" + "@humanwhocodes/config-array" "^0.10.5" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@humanwhocodes/module-importer" "^1.0.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -8794,18 +8673,21 @@ eslint@^8.17.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.2" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" + find-up "^5.0.0" glob-parent "^6.0.1" globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -8817,17 +8699,16 @@ eslint@^8.17.0: strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -eslint@^8.24.0: - version "8.24.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.24.0.tgz#489516c927a5da11b3979dbfb2679394523383c8" - integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== +eslint@^8.28.0: + version "8.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== dependencies: - "@eslint/eslintrc" "^1.3.2" - "@humanwhocodes/config-array" "^0.10.5" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -8843,14 +8724,14 @@ eslint@^8.24.0: fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - glob-parent "^6.0.1" + glob-parent "^6.0.2" globals "^13.15.0" - globby "^11.1.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" @@ -8873,15 +8754,6 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - espree@^9.4.0: version "9.4.0" resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" @@ -10620,7 +10492,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.1, glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -10656,17 +10528,6 @@ glob@^7.2.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@~7.1.1: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -12081,7 +11942,7 @@ is-path-cwd@^2.2.0: resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -13453,10 +13314,10 @@ marked@^4.0.10: resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.10.tgz#423e295385cc0c3a70fa495e0df68b007b879423" integrity sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw== -marked@^4.0.16: - version "4.0.16" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.16.tgz#9ec18fc1a723032eb28666100344d9428cf7a264" - integrity sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA== +marked@^4.0.19: + version "4.2.3" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.3.tgz#bd76a5eb510ff1d8421bc6c3b2f0b93488c15bea" + integrity sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw== material-colors@^1.2.1: version "1.2.6" @@ -14396,14 +14257,14 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.0: +minimatch@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== @@ -14532,12 +14393,11 @@ mmd-parser@^1.0.4: resolved "https://registry.yarnpkg.com/mmd-parser/-/mmd-parser-1.0.4.tgz#87cc05782cb5974ca854f0303fc5147bc9d690e7" integrity sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg== -mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== +mocha@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" + integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" @@ -14666,6 +14526,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -16361,16 +16226,16 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -prettier@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== - prettier@2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" + integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== + prettier@^2.3.2: version "2.5.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" @@ -17729,7 +17594,7 @@ rw@1: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= -rxjs@^6.6.0, rxjs@^6.6.3: +rxjs@^6.6.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -17899,10 +17764,10 @@ section-matter@^1.0.0: extend-shallow "^2.0.1" kind-of "^6.0.0" -semantic-release@^19.0.3: - version "19.0.3" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.3.tgz#9291053ad9890052f28e7c5921d4741530d516fd" - integrity sha512-HaFbydST1cDKZHuFZxB8DTrBLJVK/AnDExpK0s3EqLIAAUAHUgnd+VSJCUtTYQKkAkauL8G9CucODrVCc7BuAA== +semantic-release@^19.0.5: + version "19.0.5" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.5.tgz#d7fab4b33fc20f1288eafd6c441e5d0938e5e174" + integrity sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA== dependencies: "@semantic-release/commit-analyzer" "^9.0.2" "@semantic-release/error" "^3.0.0" @@ -18122,14 +17987,14 @@ shelljs@^0.8.5: interpret "^1.0.0" rechoir "^0.6.2" -shiki@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== +shiki@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.11.1.tgz#df0f719e7ab592c484d8b73ec10e215a503ab8cc" + integrity sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA== dependencies: jsonc-parser "^3.0.0" vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" + vscode-textmate "^6.0.0" side-channel@^1.0.4: version "1.0.4" @@ -19383,10 +19248,10 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== -ts-node@^10.8.1: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -19555,31 +19420,25 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typedoc@^0.22.17: - version "0.22.17" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.17.tgz#bc51cc95f569040112504300831cdac4f8089b7b" - integrity sha512-h6+uXHVVCPDaANzjwzdsj9aePBjZiBTpiMpBBeyh1zcN2odVsDCNajz8zyKnixF93HJeGpl34j/70yoEE5BfNg== +typedoc@^0.23.21: + version "0.23.21" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.21.tgz#2a6b0e155f91ffa9689086706ad7e3e4bc11d241" + integrity sha512-VNE9Jv7BgclvyH9moi2mluneSviD43dCE9pY8RWkO88/DrEgJZk9KpUk7WO468c9WWs/+aG6dOnoH7ccjnErhg== dependencies: - glob "^8.0.3" lunr "^2.3.9" - marked "^4.0.16" + marked "^4.0.19" minimatch "^5.1.0" - shiki "^0.10.1" + shiki "^0.11.1" typescript@^4.1.3: version "4.5.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== -typescript@^4.5.4: - version "4.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" - integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== - -typescript@^4.7.3: - version "4.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" - integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== +typescript@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== ua-parser-js@^0.7.30: version "0.7.31" @@ -20653,10 +20512,10 @@ vscode-oniguruma@^1.6.1: resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz#2bf4dfcfe3dd2e56eb549a3068c8ee39e6c30ce5" integrity sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ== -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== +vscode-textmate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz#a3777197235036814ac9a92451492f2748589210" + integrity sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ== w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: version "1.0.2" @@ -21274,10 +21133,10 @@ yargs-parser@^21.0.0: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== -yargs-parser@^21.0.1: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-unparser@2.0.0: version "2.0.0"